So funktioniert es

Whisper-Transkription lokal, in deinem Browser

Die Seite lässt ein offenes Spracherkennungsmodell, Whisper, im Tab deines Browsers laufen: Dein Gerät erledigt die Arbeit, und deine Datei wird nie hochgeladen. Mit deiner ersten Datei lädt sie eine Engine und das Modell von dieser Website, und dein Browser behält das Modell für weitere Dateien, wenn er Platz hat.

Drei Schritte, alle in deinem Browser

1. Dein Browser liest die Datei

Wo sich die Datei in Stücken lesen lässt, nimmt ein Worker in deinem Tab die Tonspur je 30 Sekunden auf einmal; sonst dekodiert die Seite die ganze Datei auf einmal. So oder so wird daraus Mono-Ton mit 16 kHz, den das Modell erwartet.

2. Whisper transkribiert in Fenstern

Die Engine, whisper.cpp als WebAssembly kompiliert, transkribiert etwa drei Minuten Ton auf einmal und gibt der Seite den Text jedes Fensters.

3. Die Seite ordnet den Text

Die Wörter werden an Pausen zu Absätzen gruppiert, auf Wunsch mit Zeitstempel, bereit zum Durchsuchen, Kopieren oder Speichern als TXT.

Das Modell: Whisper, base oder small

Whisper ist ein Spracherkennungsmodell, das OpenAI 2022 mit Code und Gewichten unter der MIT-Lizenz veröffentlicht hat. Es hört den Ton in Abschnitten von 30 Sekunden und schreibt die Wörter auf, mit einer Zeit für jedes Segment. Diese Website bietet zwei Größen davon an:

  • Das kleinere Modell (Standard) ist Whisper base im 5-Bit-Quantisierungsformat von whisper.cpp (q5_1). Es ist der leichtere Download.
  • Das größere Modell ist Whisper small im 8-Bit-Format (q8_0): ein größerer Download, der mehr Arbeitsspeicher braucht.

Quantisierung rundet die Gewichte des Modells auf weniger Bits, das macht die Dateien kleiner. Wie die beiden Größen auf dieser Engine abschneiden, Sprache für Sprache, veröffentlichen wir noch nicht: Wir messen, bevor wir beschreiben. Das Sprachmenü führt die Sprachen auf, die sich bei Whisper einstellen lassen; bei der automatischen Erkennung wählt die Engine die Sprache im ersten Fenster, in dem gesprochen wird, und behält sie für den Rest der Datei.

Die Engine: whisper.cpp als WebAssembly

Das Modell läuft in whisper.cpp, einer Open-Source-Fassung von Whisper in C/C++, die wir mit einer kleinen eigenen Schnittstelle als WebAssembly kompilieren (ein Programmformat, das jeder aktuelle Browser ausführen kann). Es gibt drei Versionen, und die Seite probiert sie in dieser Reihenfolge:

  • WebGPU, wenn dein Browser einen Grafikadapter mit den Funktionen bietet, die die Engine braucht. Auf einer echten Grafikkarte haben wir diese Version noch nicht gemessen, deshalb behaupten wir dazu nichts.
  • WebAssembly auf mehreren Threads, einer pro logischem Kern, den dein Browser meldet. Threads brauchen einen ursprungsübergreifend isolierten Tab, und den liefern die Header der Website.
  • WebAssembly auf einem Thread, wenn keine Threads verfügbar sind oder dein Browser nur einen logischen Kern meldet. Das Ergebnis ist von derselben Art.

Startet eine Version nicht, oder scheitert die WebGPU-Version mitten in der Arbeit, startet die Seite die Engine mit der nächsten Version neu und macht weiter. Die Zeile über dem Transkript nennt die Version, die gearbeitet hat.

Was die Seite herunterlädt, und wann

Beim Öffnen lädt nur die Seite mit ihren eigenen Dateien. Engine, Medienleser, ein Modell und die Sprachaktivitätserkennung kommen von dieser Website, wenn du deine erste Datei hinzufügst. Nur eine Version der Engine bleibt: Die WebGPU-Version tritt an die Stelle einer CPU-Version, wenn sie mit einem GPU-Gerät startet. Größen in MB, wobei 1 MB 1.000.000 Bytes sind:

Dateien, die die Transkription von dieser Website lädt (Größen der veröffentlichten Dateien)
DateiGrößeWann
Engine, WebGPU-Versionetwa 3,4 MBDeine erste Datei, zuerst versucht, wenn dein Browser einen nutzbaren WebGPU-Adapter bietet
Engine, CPU-Version: Mehr-Thread- oder Ein-Thread-Version (eine der beiden)etwa 1,5 MBDeine erste Datei, außer die WebGPU-Version startet mit einem GPU-Gerät; und immer, wenn die WebGPU-Version mitten in der Arbeit scheitert
Kleineres Modell (Whisper base, 5-Bit-Format), Standard59,7 MB in 3 TeilenDeine erste Datei damit
Größeres Modell (Whisper small, 8-Bit-Format)264,5 MB in 13 TeilenNur, wenn du es wählst
Sprachaktivitätserkennung (Silero VAD)0,9 MBDeine erste Datei
Medienleser (Mediabunny), Teil der Skripte der Seiteetwa 0,3 MBDeine erste Datei

Die Modelle kommen in Teilen von höchstens 20 MiB (ein MiB sind 1.048.576 Bytes, 20 MiB also etwa 21 MB), weil der Hoster keine Einzeldatei über 25 MiB ausliefert. Bevor die Engine einen Teil nutzt, vergleicht dein Browser ihn mit seinem SHA-256-Fingerabdruck, sodass ein beschädigter Download abgelehnt wird, statt ein falsches Transkript zu liefern. Die geprüften Teile bleiben im Cache Storage deines Browsers, wenn er Platz dafür hat, und deine nächste Datei und dein nächster Besuch sparen sich den Download.

Warum deine Aufnahme nie hochgeladen wird

Jeder Schritt läuft in deinem Tab, die Website hat keinen Endpunkt, der eine Datei annehmen könnte, und die Seite darf sich nur mit dieser Website verbinden. Die Prüfung, dass deine Aufnahme nicht hochgeladen wird, steht auf der Seite Datenschutz und Sicherheit, mit den Schritten, um die Anfragen selbst zu beobachten.

Diagramm, wohin deine Aufnahme geht: Dein Browser liest die Datei; lässt sie sich in Stücken lesen, dekodiert ein Medienleser in einem Worker ihren Ton in Stücken von 30 Sekunden (sonst dekodiert die Seite die ganze Datei); die Whisper-Engine als WebAssembly transkribiert ihn in Fenstern von etwa 3 Minuten, und dein Tab zeigt die Absätze zum Kopieren oder Speichern als TXT. Die Aufnahme geht nie an den Server der Website. Der Server sendet die Seite und mit deiner ersten Datei die Engine, den Medienleser, das Modell (das kleinere, voreingestellte etwa 60 MB, in Teilen) und eine kleine Sprachaktivitätserkennung; der Browser behält Modell und Sprachaktivitätserkennung, wenn er Platz hat.
Deine Aufnahme bleibt im Tab deines Browsers: Seite, Engine, Medienleser, Modell und Sprachaktivitätserkennung kommen herein, und nichts aus deiner Datei geht hinaus.

Wie eine lange Datei gelesen und transkribiert wird

Eine einstündige Aufnahme ergibt dekodiert als Mono mit 16 kHz etwa 115 MB Ton (3.600 Sekunden x 16.000 Samples x 2 Bytes, oder das Doppelte als 32-Bit-Zahlen, mit denen die Engine rechnet). Deshalb dekodiert die Seite die Datei, wo sie sich in Stücken lesen lässt, nicht auf einmal. Ein zweiter Worker öffnet die Datei mit Mediabunny und liest ihre Tonspur je 30 Sekunden auf einmal: Mediabunny dekodiert komprimierten Ton mit dem Decoder deines Browsers und unkomprimierten Ton, etwa in einer WAV-Datei, selbst. Das nächste Stück reicht der Worker erst weiter, wenn die Engine dafür bereit ist.

Die Stücke werden zu Fenstern von etwa drei Minuten zusammengesetzt. Jedes Fenster endet in der Mitte der leisesten halben Sekunde in den 15 Sekunden vor der Drei-Minuten-Marke, um den Schnitt in eine Pause statt mitten in ein Wort zu legen, und die Fenster folgen ohne Lücke und ohne Überlappung aufeinander. Eine kleine Sprachaktivitätserkennung markiert die Abschnitte mit Sprache in jedem Fenster, so überspringt das Modell die Stille, statt Wörter hineinzuschreiben. Jedes Fenster wird mit den letzten Wörtern davor, höchstens 200 Zeichen, als Prompt transkribiert; das soll dem Modell den Satz geben, den der Schnitt vielleicht geteilt hat. Seine Zeiten werden wieder auf die Uhr der Datei gesetzt.

Sobald ein Fenster fertig ist, erscheinen seine Absätze auf der Seite: Du kannst lesen und suchen, während der Rest läuft. Lässt sich die Datei nicht in Stücken lesen, weil Mediabunny ihren Container nicht öffnet oder dein Browser keinen Decoder hat, der ihren Ton in Stücken liest, dekodiert die Seite stattdessen die ganze Datei auf einmal mit dem Decoder deines Browsers, ohne Mediabunny, und lehnt dann Dateien über 500 MB oder über 1 Stunde ab.

Vier Schritte von einer langen Datei zu Absätzen: Die Tonspur wird in Stücken von 30 Sekunden als Mono mit 16 kHz gelesen; die Stücke werden zu Fenstern von etwa 3 Minuten, jedes an der leisesten halben Sekunde geschnitten; die Sprachaktivitätserkennung überspringt Stille, und Whisper schreibt die Wörter jedes Fensters mit ihren Zeiten; eine Pause von 2 Sekunden oder mehr zwischen zwei Wörtern beginnt einen neuen Absatz, der seine Zeit als [hh:mm:ss] tragen kann.
Wo der Browser es erlaubt, wird eine lange Aufnahme nicht auf einmal dekodiert: Sie läuft Stück für Stück und Fenster für Fenster durch die Seite. Die Zahlen sind Einstellungen der Engine.

Wie Absätze und Zeitstempel entstehen

Whisper liefert Textsegmente mit Start- und Endzeit und eine Zeit für jedes Wort. Die Seite fügt sie zu Absätzen zusammen: Ein neuer beginnt an einer Pause von 2 Sekunden oder mehr, gemessen an den Zeiten der Wörter davor und danach, und ein Absatz, der länger als etwa 600 Zeichen wird, endet am nächsten Satzende. Es gibt keine Sprecherkennzeichnung, ein Absatzwechsel steht also für eine Pause oder einen langen Redeabschnitt, nie für eine andere Stimme.

Der Zeitstempel eines Absatzes ist die Startzeit seines ersten Worts, geschrieben als [hh:mm:ss] und auf die Sekunde abgerundet. Er ist ungefähr: gut, um eine Stelle in der Aufnahme zu finden, nicht für Untertitel. Text kopieren und TXT herunterladen schreiben dieselben Absätze, getrennt durch eine Leerzeile und mit den Zeitstempeln, wenn sie eingeblendet sind.

Warum die Dauer schwankt

Dein Gerät erledigt die Arbeit, mit der Version, die die Seite starten konnte, also braucht dieselbe Datei auf einem neuen Laptop anders lang als auf einem alten, und Modell und Länge der Aufnahme spielen mit. Deshalb verspricht die Seite kein Tempo. Sobald die Engine den ersten Fortschritt meldet, misst die Seite, wie viele Sekunden Arbeit jede Sekunde Ton auf deinem Gerät kostet, glättet das über die Fenster, damit ein langsamer Moment es nicht verzerrt, und zeigt die Restzeit.

Was dein Gerät braucht

  • Einen aktuellen Browser mit WebAssembly. Chrome, Edge, Firefox und Safari haben es; unser automatischer Test läuft in Chromium.
  • Freien Arbeitsspeicher: Die Engine hält das Modell im Speicher, solange sie läuft, und das größere Modell braucht mehr. Eine Zahl nennen wir erst, wenn wir sie gemessen haben.
  • Eine Verbindung bei jedem Besuch: Die Seite braucht sie zum Öffnen, und deine erste Datei lädt außerdem Engine und Modell. Einen Offline-Modus gibt es nicht. Hat dein Browser Platz, behält er das Modell, sodass spätere Dateien und Besuche diesen Download überspringen.

Die Open-Source-Komponenten der Engine, die Modelle und der Medienleser stehen mit ihren Lizenzen auf der Seite Open-Source-Nachweise.

Fragen zur Engine

Ist das dasselbe Whisper, das OpenAI veröffentlicht hat?

Es ist dasselbe Modell: OpenAI hat Code und Gewichte von Whisper unter der MIT-Lizenz veröffentlicht. Diese Seite nutzt diese Gewichte im Dateiformat des Open-Source-Projekts whisper.cpp, quantisiert (mit weniger Bits pro Gewicht gespeichert), damit der Download kleiner ist. Die Engine ist whisper.cpp als WebAssembly, nicht der Python-Code von OpenAI, und keine Anfrage geht an OpenAI.

Nutzt es meine Grafikkarte?

Es versucht es. Bietet dein Browser WebGPU mit den Funktionen, die die Engine braucht, lädt und startet die Seite zuerst die WebGPU-Version. Registriert diese Version kein GPU-Gerät, startet sie nicht oder scheitert sie mitten in der Arbeit, lädt die Seite eine CPU-Version und macht mit ihr weiter. Unsere Testrechner haben keine nutzbare GPU, deshalb ist die echte WebGPU-Version in unseren Tests nie auf einer GPU gelaufen: Den Wechsel zu einer CPU-Version testen wir mit simulierten WebGPU-Fehlern, und auf diesen Rechnern geht die Seite direkt zu einer CPU-Version. Die Zeile über dem Transkript nennt die Version, die gearbeitet hat.

Warum wurde das Modell erneut geladen?

Dein Browser behält das Modell im Cache Storage dieser Website, bis du die Websitedaten löschst oder der Browser es löscht, um Platz zu schaffen. Danach lädt die nächste Datei es erneut. Was dein Browser behält und wie du es löschst erklärt die Einzelheiten.

Was passiert, wenn ich auf Abbrechen drücke?

Die Seite stoppt die Engine sofort, indem sie den Worker schließt, in dem sie läuft, und verwirft die bisher erstellten Absätze. Deine nächste Datei startet eine neue Engine und holt das Modell aus dem Speicher des Browsers, in dem er es behalten hat, als er Platz dafür hatte; das Modell wird also nicht erneut geladen.

Quellen

Probier es mit einer Aufnahme

Die Transkription läuft in deinem Browser. Deine Datei verlässt nie dein Gerät.

Zum Transkriptions-Tool