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 : c'est votre appareil qui fait le travail, et votre fichier n'est jamais envoyé. Avec votre premier fichier, elle télécharge depuis ce site un moteur et le modèle, et votre navigateur garde le modèle pour les fichiers suivants quand il a de la place.

Trois étapes, toutes dans votre navigateur

1. Votre navigateur lit le fichier

Là où le fichier peut être lu par tranches, un worker de votre onglet prend la piste son 30 secondes à la fois ; sinon, la page décode le fichier entier d'un coup. Dans les deux cas, le son devient le mono à 16 kHz 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 au format de quantification 5 bits de whisper.cpp (q5_1). C'est le téléchargement le plus léger.
  • Le grand modèle est Whisper small au format 8 bits (q8_0) : un téléchargement plus lourd, qui demande plus de mémoire.

La quantification arrondit les poids du modèle à moins de bits, ce qui rend les fichiers plus petits. 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 un seul cœur logique. 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, seuls la page et ses propres fichiers sont téléchargés. Le moteur, le lecteur multimédia, un modèle et le détecteur de voix arrivent de ce site quand vous ajoutez votre premier fichier. Une seule version du moteur est gardée : la version WebGPU prend la place d'une version pour le processeur quand elle démarre avec un périphérique GPU. Les tailles sont en Mo, où 1 Mo vaut 1 000 000 octets :

Fichiers que la transcription télécharge depuis ce site (tailles des fichiers publiés)
FichierTailleQuand
Moteur, version WebGPUenviron 3,4 MoVotre premier fichier, essayée d'abord quand votre navigateur propose un adaptateur WebGPU utilisable
Moteur, version pour le processeur : multithread ou monothread (l'une des deux)environ 1,5 MoVotre premier fichier, sauf si la version WebGPU démarre avec un périphérique GPU ; et chaque fois que la version WebGPU échoue en cours de route
Petit modèle (Whisper base, format 5 bits), par défaut59,7 Mo en 3 partiesVotre premier fichier avec lui
Grand modèle (Whisper small, format 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

Les modèles arrivent en parties de 20 Mio au plus (un Mio vaut 1 048 576 octets, donc 20 Mio font environ 21 Mo), 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 ; si le fichier peut être lu par tranches, un lecteur multimédia dans un worker en décode le son par tranches de 30 secondes (sinon, la page décode le fichier entier) ; 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. Le serveur envoie la page puis, avec votre premier fichier, le moteur, le lecteur multimédia, le modèle (environ 60 Mo pour le petit, celui par défaut, en parties) et un petit détecteur de voix ; le navigateur garde le modèle et le détecteur s'il a de la place.
Votre enregistrement reste dans l'onglet de votre navigateur : la page, le moteur, le lecteur multimédia, le modèle et le détecteur de voix 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, là où le fichier peut être lu par tranches, la page ne décode pas le fichier entier d'un coup. Un second worker ouvre le fichier avec Mediabunny et lit sa piste son 30 secondes à la fois : Mediabunny décode le son compressé avec le décodeur de votre navigateur, et le son non compressé, comme dans un fichier WAV, lui-même. Il 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 au milieu de la demi-seconde la plus silencieuse des 15 secondes qui précèdent la marque des trois minutes, pour placer la coupe dans une pause plutôt qu'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 les derniers mots qui la précèdent, 200 caractères au plus, comme contexte, afin de donner au modèle la phrase que la coupe a pu interrompre, 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 le fichier ne peut pas être lu par tranches, parce que Mediabunny n'ouvre pas son conteneur ou que votre navigateur n'a pas de décodeur capable d'en lire le son par tranches, la page décode le fichier entier d'un coup avec le décodeur de votre navigateur, sans Mediabunny, et refuse alors un fichier 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 temps ; 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

C'est votre appareil qui fait le travail, avec la version que la page a pu démarrer : 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.
  • De la mémoire libre : le moteur garde le modèle en mémoire pendant qu'il tourne, et le grand modèle en demande davantage. Nous ne donnons aucun chiffre tant que nous ne l'avons pas mesuré.
  • Une connexion à chaque visite : la page en a besoin pour s'ouvrir, et votre premier fichier télécharge aussi le moteur et le modèle. Il n'y a pas de mode hors ligne. Quand votre navigateur a de la place, il garde le modèle, et les fichiers et les visites suivants sautent ce téléchargement.

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 télécharge et lance d'abord la version WebGPU. Si cette version n'enregistre aucun périphérique GPU, ne démarre pas ou échoue en cours de route, la page télécharge une version pour le processeur et continue avec elle. Nos machines de test n'ont pas de GPU utilisable, donc la vraie version WebGPU n'a jamais tourné sur un GPU dans nos tests : le passage à une version pour le processeur est testé avec des échecs WebGPU simulés, et sur ces machines la page passe directement à une version pour le processeur. 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, où celui-ci l'a gardé s'il avait de la place : 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