Comment ça marche

La transcription Whisper, dans votre navigateur

La page fait tourner un modèle ouvert de reconnaissance vocale, Whisper, dans l'onglet de votre navigateur. Voici ce qu'elle télécharge, comment elle lit un long fichier sans le charger en entier, comment naissent les paragraphes et pourquoi la durée change d'un appareil à l'autre.

Trois étapes, toutes dans votre navigateur

1. Votre navigateur lit le fichier

Là où votre navigateur le permet, un worker de votre onglet prend la piste son par tranches de 30 secondes et la convertit en son mono à 16 kHz, celui qu'attend le modèle.

2. Whisper la transcrit par fenêtres

Le moteur, whisper.cpp compilé en WebAssembly, transcrit environ trois minutes de son à la fois et remet à la page le texte de chaque fenêtre.

3. La page met le texte en forme

Les mots sont regroupés en paragraphes aux pauses, avec un horodatage pour chacun si vous le voulez, prêts à chercher, copier ou enregistrer en TXT.

Le modèle : Whisper, base ou small

Whisper est un modèle de reconnaissance vocale publié par OpenAI en 2022, avec son code et ses poids sous licence MIT. Il écoute le son par tranches de 30 secondes et écrit les mots, avec un repère de temps pour chaque segment. Ce site en propose deux tailles :

  • Le petit modèle (par défaut) est Whisper base, stocké avec 5 bits par poids. C'est le téléchargement le plus léger.
  • Le grand modèle est Whisper small, stocké avec 8 bits par poids : un téléchargement plus lourd, qui demande plus de mémoire.

Stocker les poids avec moins de bits (la quantification) réduit la taille d'un modèle au prix d'un peu de précision. Nous ne publions pas encore la comparaison des deux tailles sur ce moteur, langue par langue : nous mesurons avant de décrire. Le menu des langues reprend celles que l'on peut indiquer à Whisper ; en détection automatique, le moteur choisit la langue dans la première fenêtre qui contient de la parole et la garde pour le reste du fichier.

Le moteur : whisper.cpp compilé en WebAssembly

Le modèle tourne dans whisper.cpp, une version open source de Whisper écrite en C/C++, que nous compilons en WebAssembly (un format de programme que tout navigateur actuel sait exécuter) avec une petite interface que nous avons écrite. Il existe trois versions, et la page les essaie dans cet ordre :

  • WebGPU, si votre navigateur propose un adaptateur graphique doté des fonctions dont le moteur a besoin. Nous n'avons pas encore mesuré cette version sur une vraie carte graphique, nous n'affirmons donc rien à son sujet.
  • WebAssembly sur plusieurs threads, un par cœur logique annoncé par votre navigateur. Les threads exigent un onglet isolé des autres origines, ce que fournissent les en-têtes du site.
  • WebAssembly sur un seul thread, quand les threads ne sont pas disponibles ou que votre navigateur annonce deux cœurs logiques ou moins. Le résultat est du même type.

Si une version ne démarre pas, ou si la version WebGPU échoue en cours de route, la page relance le moteur sur la version suivante et continue. La ligne au-dessus de la transcription indique la version qui a fait le travail.

Ce que la page télécharge, et quand

À l'ouverture, seule la page et ses propres fichiers sont téléchargés. Le moteur et un modèle arrivent de ce site quand vous ajoutez votre premier fichier :

Fichiers que la transcription télécharge depuis ce site (tailles des fichiers publiés)
FichierTailleQuand
Moteur, version multithread ou monothread (l'une des deux)environ 1,5 MoVotre premier fichier
Petit modèle (Whisper base, 5 bits), par défaut59,7 Mo en 3 partiesVotre premier fichier avec lui
Grand modèle (Whisper small, 8 bits)264,5 Mo en 13 partiesSeulement si vous le choisissez
Détecteur de voix (Silero VAD)0,9 MoVotre premier fichier
Lecteur multimédia (Mediabunny), inclus dans les scripts de la pageenviron 0,3 MoVotre premier fichier
Moteur, version WebGPUenviron 3,4 MoSeulement si le navigateur propose un adaptateur WebGPU utilisable

Les modèles arrivent en parties de 20 Mio au plus, car l'hébergeur ne sert aucun fichier de plus de 25 Mio. Avant que le moteur n'utilise une partie, votre navigateur la compare à son empreinte SHA-256 : un téléchargement abîmé est refusé au lieu de produire une transcription fausse. Les parties vérifiées restent dans le Cache Storage de votre navigateur quand il a la place de les garder, donc votre fichier suivant, et votre prochaine visite, évitent le téléchargement.

Pourquoi votre enregistrement n'est jamais envoyé

Chaque étape a lieu dans votre onglet, le site n'a aucun point d'entrée capable de recevoir un fichier et la page ne peut se connecter qu'à ce site. La vérification que votre enregistrement n'est pas envoyé se trouve sur la page confidentialité et sécurité, avec les étapes pour observer vous-même les requêtes.

Schéma du trajet de votre enregistrement : votre navigateur lit le fichier, un lecteur multimédia dans un worker décode son son par tranches de 30 secondes, le moteur Whisper en WebAssembly le transcrit par fenêtres d'environ 3 minutes et votre onglet affiche les paragraphes, à copier ou à enregistrer en TXT. L'enregistrement n'est jamais envoyé au serveur du site, qui envoie seulement la page, le moteur et le modèle (environ 60 Mo au premier fichier, gardés ensuite par le navigateur).
Votre enregistrement reste dans l'onglet de votre navigateur : seuls la page, le moteur et le modèle arrivent, et rien de votre fichier ne repart.

Comment un long fichier est lu et transcrit

Un enregistrement d'une heure pèse environ 115 Mo de son une fois décodé en mono à 16 kHz (3 600 secondes x 16 000 échantillons x 2 octets, ou le double sous forme des nombres 32 bits avec lesquels travaille le moteur). C'est pourquoi, chaque fois que le navigateur le permet, la page ne décode pas le fichier entier d'un coup. Un second worker ouvre le fichier avec Mediabunny, décode sa piste son avec le décodeur du navigateur, 30 secondes à la fois, et ne passe la tranche suivante que lorsque le moteur est prêt à la recevoir.

Les tranches sont assemblées en fenêtres d'environ trois minutes. Chaque fenêtre s'arrête sur la demi-seconde la plus silencieuse de ses 15 dernières secondes, pour qu'une coupe tombe rarement au milieu d'un mot, et les fenêtres se suivent sans trou ni chevauchement. Un petit détecteur de voix repère les passages parlés de chaque fenêtre : le modèle saute ainsi le silence au lieu d'y écrire des mots. Chaque fenêtre est transcrite avec la fin du texte précédent comme contexte, ce qui aide une phrase coupée en deux, et ses temps sont replacés sur l'horloge du fichier.

Dès qu'une fenêtre est terminée, ses paragraphes s'affichent : vous pouvez commencer à lire et à chercher pendant que la suite avance. Si votre navigateur n'a pas de décodeur pour le son d'un fichier, la page se rabat sur un décodage du fichier entier, et refuse alors ceux de plus de 500 Mo ou de plus d'une heure.

Quatre étapes d'un long fichier aux paragraphes : la piste son est lue par tranches de 30 secondes en mono à 16 kHz ; les tranches forment des fenêtres d'environ 3 minutes, chacune coupée sur la demi-seconde la plus silencieuse ; le détecteur de voix saute le silence et Whisper écrit les mots de chaque fenêtre avec leurs horodatages ; une pause de 2 secondes ou plus entre deux mots ouvre un nouveau paragraphe, qui peut porter son horodatage en [hh:mm:ss].
Chaque fois que le navigateur peut le lire par tranches, un long enregistrement n'est pas décodé d'un bloc : il traverse la page tranche par tranche et fenêtre par fenêtre. Les chiffres sont des réglages du moteur.

Comment naissent les paragraphes et l'horodatage

Whisper renvoie des segments de texte avec un temps de début et un temps de fin, et un temps pour chaque mot. La page les réunit en paragraphes : un nouveau commence à une pause de 2 secondes ou plus, mesurée avec les temps des mots de part et d'autre, et un paragraphe qui dépasse environ 600 caractères s'arrête à la fin de phrase suivante. Il n'y a pas d'étiquettes de locuteur : un saut de paragraphe signale une pause ou un long passage parlé, jamais un changement de voix.

L'horodatage d'un paragraphe est le temps de début de son premier mot, écrit [hh:mm:ss] et arrondi à la seconde inférieure. Il est approximatif : utile pour retrouver un passage de l'enregistrement, pas pour des sous-titres. Copier le texte et Télécharger le TXT écrivent les mêmes paragraphes, séparés par une ligne vide, avec l'horodatage s'il est affiché.

Pourquoi la durée varie

Le travail se fait sur votre processeur : le même fichier ne prend pas le même temps sur un portable récent et sur un ancien, et le modèle comme la longueur de l'enregistrement comptent aussi. C'est pourquoi la page ne promet aucune vitesse. Dès que le moteur signale sa première progression, la page mesure combien de secondes de travail demande chaque seconde de son sur votre appareil, lisse ce rythme d'une fenêtre à l'autre pour qu'un moment lent ne le fausse pas, et affiche le temps restant.

Ce dont votre appareil a besoin

  • Un navigateur récent avec WebAssembly. Chrome, Edge, Firefox et Safari l'ont ; notre test automatique tourne dans Chromium.
  • Assez de mémoire libre pour le modèle et une fenêtre de son. Le grand modèle en demande davantage ; nous publierons des chiffres mesurés quand nous les aurons.
  • Une connexion pour le premier fichier. Le modèle est gardé dans le stockage du navigateur quand il y a de la place, et les visites suivantes ne le téléchargent plus.

Les composants open source du moteur, les modèles et le lecteur multimédia figurent avec leurs licences sur la page des crédits.

Questions sur le moteur

Est-ce le même Whisper que celui publié par OpenAI ?

C'est le même modèle : OpenAI a publié le code et les poids de Whisper sous licence MIT. Cette page utilise ces poids au format de fichier du projet open source whisper.cpp, quantifiés (stockés avec moins de bits par poids) pour alléger le téléchargement. Le moteur est whisper.cpp compilé en WebAssembly, pas le code Python d'OpenAI, et aucune requête ne part vers OpenAI.

Utilise-t-il ma carte graphique ?

Il essaie. Si votre navigateur propose WebGPU avec les fonctions dont le moteur a besoin, la page lance d'abord la version WebGPU et, en cas d'échec, passe seule aux versions pour le processeur. Nos machines de test n'ont pas de carte graphique : de la version WebGPU, nous avons seulement vérifié qu'elle passe la main proprement. La ligne au-dessus de la transcription indique la version qui a travaillé.

Pourquoi le modèle a-t-il été retéléchargé ?

Votre navigateur garde le modèle dans son Cache Storage pour ce site jusqu'à ce que vous effaciez les données du site, ou que le navigateur le supprime pour libérer de la place. Le fichier suivant le télécharge alors de nouveau. Ce que votre navigateur conserve et comment l'effacer donne le détail.

Que se passe-t-il quand j'appuie sur Annuler ?

La page arrête le moteur aussitôt en fermant le worker où il tourne, et abandonne les paragraphes déjà produits. Votre fichier suivant démarre un nouveau moteur et reprend le modèle dans le stockage du navigateur : le modèle n'est pas retéléchargé.

Sources

Essayez avec un enregistrement

La transcription se fait dans votre navigateur. Votre fichier ne quitte jamais votre appareil.

Ouvrir l'outil de transcription