So funktioniert es

Wie aus deinem Video Untertitel werden, ohne dass es dein Gerät verlässt

Subtitle Generator führt ein Spracherkennungsmodell in deinem Browser-Tab aus. Hier ist jeder Schritt von der Datei zu den Untertiteln, was dein Browser herunterlädt und behält und was wir gemessen haben und was nicht.

Fünf Schritte, alle in deinem Browser-Tab

1. Dein Browser öffnet die Datei

Du wählst eine Video- oder Audiodatei, und der Browser gibt der Seite genau diese eine Datei. Die Seite reicht sie im Tab an die Engine weiter. Nichts wird hochgeladen.

2. Der Ton wird in Stücken gelesen

Wo dein Browser es kann, liest ein Medienleser in einem Web Worker den Ton in Stücken von 30 Sekunden mit den Decodern deines Browsers und wandelt ihn in 16 kHz Mono um, die Form, die das Modell braucht.

3. Fenster, an leisen Stellen geschnitten

Der Ton wird zu Fenstern von etwa 3 Minuten zusammengefasst. Jeder Schnitt fällt in die Mitte der leisesten halben Sekunde in den 15 Sekunden vor der 3-Minuten-Marke, um in einer Pause zu schneiden statt mitten in einem Wort.

4. Das Modell schreibt jedes Fenster

Ein Sprachdetektor markiert die Abschnitte mit Sprache, und das Spracherkennungsmodell schreibt sie, mit seiner eigenen Schätzung, wann die Wörter beginnen und enden.

5. Aus Wörtern werden Untertitel

Die Wörter werden in Untertitel aufgeteilt, die kurz genug zum Lesen sind, die Untertitel erscheinen auf der Seite, und du bearbeitest sie. Die SRT- oder VTT-Datei entsteht beim Klick auf Herunterladen.

Diagramm, wohin deine Datei geht: Dein Video oder Audio wird mit der File-API des Browsers geöffnet; wo der Browser es kann, liest ein Medienleser in einem Web Worker den Ton in Stücken von 30 Sekunden (sonst dekodiert die Seite die ganze Datei); und das Spracherkennungsmodell schreibt jedes Fenster von etwa 3 Minuten mit WebGPU oder WebAssembly. Dein Tab zeigt die Untertitel, du bearbeitest sie und speicherst eine SRT- oder VTT-Datei. Nichts aus der Datei wird gesendet. Der einzige Datenverkehr sind Downloads vom Server der Website: die Seite und, mit deiner ersten Datei, die Engine, der Medienleser, das Modell (etwa 60 oder 264 MB, in Teilen) und ein kleiner Sprachdetektor. Der Browser behält Modell und Detektor, wenn er Platz hat, und fragt bei jedem Besuch nur die kleinen Dateien erneut an, die ihre Teile auflisten.
Deine Datei bleibt im Browser-Tab: Die Seite, ihre Engine, der Medienleser, das Modell und der Sprachdetektor kommen herein, nichts aus deiner Datei geht hinaus.

Das Modell: Whisper, in zwei Größen

Die Wörter stammen von Whisper, einem Spracherkennungsmodell, das OpenAI 2022 mit seinen Gewichten unter der MIT-Lizenz veröffentlicht hat. Es läuft über whisper.cpp, eine Open-Source-Umsetzung in C++, die wir nach WebAssembly kompilieren, damit sie in einer Webseite laufen kann. Du wählst zwischen zwei Größen:

  • Das kleinere Modell (voreingestellt) ist Whisper base, mit auf 5 Bit gerundeten Gewichten: ein Download von 59,7 MB.
  • Das größere Modell ist Whisper small, mit 8-Bit-Gewichten: ein Download von 264,5 MB, der mehr Arbeitsspeicher braucht.

Im Artikel von OpenAI schnitten die größeren Whisper-Modelle in den meisten seiner Tests besser ab, mit dem kleinsten Zugewinn im Englischen, aber wie sich diese beiden auf dieser Engine unterscheiden, haben wir noch nicht gemessen. Deshalb nennt die Seite sie „kleiner“ und „größer“, statt zu versprechen, dass eins genauer ist. Vor dem Modell markiert ein kleiner Sprachdetektor, Silero VAD, wo gesprochen wird, damit das Modell seine Zeit auf die Sprache verwendet. Lässt du die Sprache auf automatisch, erkennt das Modell sie im ersten Fenster mit Sprache, und die Seite behält diese Sprache für den Rest der Datei.

Jedes Fenster wird mit den letzten Wörtern davor, etwa 200 Zeichen, als Kontext geschrieben: Das Modell liest sie als den Text, der direkt vor dem Schnitt kam. Sobald ein Fenster fertig ist, erscheinen seine Untertitel auf der Seite, und du kannst sie bearbeiten, während das nächste geschrieben wird. Erstell Untertitel für dein Video, um es zu sehen.

Wie aus Wörtern Untertitel werden

Das Modell liefert Textsegmente, jedes mit Anfang und Ende, und seine Schätzung, wann die Wörter darin beginnen und enden. Ein Segment kann ein langer Satz sein, also schneidet die Seite es in Untertitel, die man beim Zuschauen rechtzeitig lesen kann:

  • Höchstens zwei Zeilen mit 42 Spalten pro Untertitel; ein breites Zeichen, etwa im Chinesischen oder Japanischen, zählt als zwei Spalten. Schriften ohne Leerzeichen werden mit dem Wortsegmentierer deines Browsers in Wörter geteilt.
  • Höchstens 7 Sekunden auf dem Bildschirm und mindestens 1 Sekunde, wenn der Abstand zum nächsten es erlaubt.
  • Schnitte fallen zwischen Wörter: zuerst ans Satzende, dann an ein Komma oder eine Pause von einer halben Sekunde oder mehr, sonst dorthin, wo beide Teile gleich lang werden. Ein schließendes Zeichen bleibt beim Wort davor.
  • Der Schnitt wird nach den Wortzeiten gesetzt. Wo das Modell keine Wortzeiten geliefert hat, die zum Text passen, wird die Zeit im Verhältnis zum Text verteilt.
  • Untertitel überlappen sich nie, und keiner endet nach dem Ende der Datei.
Vier Schritte von der Sprache zu den Untertiteln: Der Ton wird in Fenster von etwa 3 Minuten geschnitten, jeder Schnitt an der leisesten halben Sekunde in den 15 Sekunden vor der Marke; ein Sprachdetektor markiert die Sprache, und das Modell schreibt sie, mit seiner Schätzung, wann die Wörter beginnen und enden; die letzten Wörter jedes Fensters, etwa 200 Zeichen, gehen als Kontext ins nächste; die Wörter werden zu Untertiteln von höchstens zwei Zeilen mit 42 Spalten und 7 Sekunden geformt, geschnitten am Satzende, an einem Komma oder an einer Pause, und nach den Wortzeiten gesetzt oder, wo das Modell keine passenden gab, nach dem Text.
So macht die Seite aus dem Ton deiner Datei Untertitel. Die Grenzen sind die aus dem Untertitel-Code.

Die Zeiten kommen aus der eigenen Schätzung des Modells, wo seine Wörter beginnen und enden, oder aus dieser Verteilung nach dem Text, deshalb kann ein Untertitel etwas zu früh oder zu spät erscheinen. Wie weit, haben wir auf dieser Engine noch nicht gemessen. Liegt ein Untertitel daneben, kannst du ihn von Hand korrigieren: Anfang oder Ende um 0,1 Sekunden verschieben, ihn teilen oder mit dem nächsten verbinden.

Welche Version der Engine läuft

Die Engine gibt es in drei Versionen, und die Seite wählt eine, wenn du deine erste Datei hinzufügst:

  • WebGPU, zuerst versucht, wenn dein Browser einen Grafikadapter anbietet, der die Prüfung der Seite besteht. Scheitert sie beim Laden oder beim Schreiben eines Fensters, wechselt die Seite zu einer Prozessor-Version und schreibt das Fenster noch einmal.
  • WebAssembly auf mehreren Threads, ein Thread pro logischem Prozessor, den dein Browser meldet. Threads brauchen eine ursprungsübergreifend isolierte Seite, deshalb sendet die Website die Header COOP und COEP.
  • WebAssembly auf einem Thread, die letzte Möglichkeit für einen Browser ohne Threads und die Version, wenn dein Browser nur einen logischen Prozessor meldet.

Die Zeile unter der Vorschau nennt die Version, die gelaufen ist, zum Beispiel „WebAssembly auf mehreren Threads“. Die WebGPU-Version haben wir noch nicht auf einer echten Grafikkarte gemessen, deshalb sagt die Website nichts über ihre Geschwindigkeit. Egal welche Version: Dein Gerät macht die Arbeit, und die Statuszeile zeigt eine Schätzung der Restzeit, laufend auf deinem Gerät gemessen, statt eine Geschwindigkeit zu versprechen.

Was dein Browser herunterlädt und was er behält

Alles kommt von dieser Website. Die Modelle sind in Teile von höchstens 20 MiB geteilt, weil der Hoster statische Dateien bis 25 MiB ausliefert, und jeder Teil wird vor der Nutzung gegen seinen SHA-256-Fingerabdruck geprüft. So wird ein beschädigter Download abgelehnt, statt falsche Untertitel zu liefern. Die Größen sind die der veröffentlichten Dateien, in Megabyte zu einer Million Byte:

Dateien, die die Seite von dieser Website lädt
DateiGrößeBleibt in
Die Engine, WebAssembly-Version mit mehreren Threads (wenn WebGPU nicht genutzt wird und dein Browser mindestens zwei logische Prozessoren meldet)1,6 MBDer normale Browser-Cache
Die Engine, Version mit einem Thread (wenn keine Threads verfügbar sind oder dein Browser nur einen logischen Prozessor meldet)1,5 MBDer normale Browser-Cache
Die Engine, WebGPU-Version (nur wenn die Seite eine nutzbare GPU findet)3,4 MBDer normale Browser-Cache
Das kleinere Modell, Whisper base (voreingestellt)59,7 MB, in 3 TeilenCache Storage, nach SHA-256-Prüfung jedes Teils, wenn der Browser Platz hat
Das größere Modell, Whisper small (nur wenn du es wählst)264,5 MB, in 13 TeilenCache Storage, nach SHA-256-Prüfung jedes Teils, wenn der Browser Platz hat
Der Sprachdetektor, Silero VAD0,9 MB, in 1 TeilCache Storage, nach SHA-256-Prüfung, wenn der Browser Platz hat
Der Medienleser (ein Skript der Seite, geladen, wenn du deine erste Datei hinzufügst)0,3 MBDer normale Browser-Cache

Engine, Medienleser, Modell und Detektor werden erst geladen, wenn du eine Datei hinzufügst, nicht beim Öffnen der Seite. Deine Datei, ihren Ton und deine Untertitel legt die Seite nie dauerhaft in deinem Browser ab: Sie leben im offenen Tab und verschwinden, wenn du ihn schließt. Um das aufbewahrte Modell zu entfernen, lösch die Daten dieser Website in deinem Browser. Der Netzwerktest Schritt für Schritt zeigt, wie du all das in den Entwicklertools deines Browsers siehst.

Wie wir es testen

Bei jeder Änderung an der Website läuft ein automatischer Browsertest. Er lädt eine gebaute Kopie der Website in Chromium, der Engine von Chrome und Edge, mit den Sicherheits-Headern der Website und prüft unter anderem, dass:

  • ein englischer Satz von 3,5 Sekunden aus dem LibriSpeech-Korpus, "Concorde returned to its place amidst the tents.", mit höchstens zwei falschen Wörtern als Untertitel herauskommt, mit dem kleineren Modell, aus einer WAV-Datei, einem MP4-Video und einer WebM-Datei;
  • nach einer Bearbeitung, einer Verschiebung um 0,1 Sekunden und einer Teilung die SRT- und VTT-Dateien genau die Untertitel der Seite zurückliefern und Chromiums eigener Untertitel-Leser die VTT-Datei lädt;
  • bei einer 60-Sekunden-Datei mit demselben Satz alle 10 Sekunden, verarbeitet mit Testfenstern von 20 Sekunden statt der 3 Minuten des Tools, die Untertitel in mindestens drei Schritten erscheinen und an jeder der sechs Marken ein Untertitel mit dem ganzen Satz zwischen einer halben Sekunde vor der Marke und 2 Sekunden danach beginnt;
  • Abbrechen die Verarbeitung stoppt und die nächste Datei das Modell, das der Browser aufbewahrt hat, ohne neuen Download nutzt;
  • ein stiller Clip keine Untertitel ergibt, ein beschädigter Teil einer Datei die Untertitel davor behält und eine Datei, die kein Medium ist, abgelehnt wird;
  • jede Anfrage an diese Website geht, als GET oder HEAD ohne Inhalt.

Dieser Test nutzt einen kurzen Satz eines einzigen Sprechers in einer Sprache. Er zeigt, dass die Teile zusammen funktionieren; er misst nicht, wie genau die Untertitel sind.

Grenzen, die du kennen solltest

  • Genauigkeit und Zeiten sind auf dieser Engine noch nicht gemessen, deshalb nennt keine Seite eine Zahl. Im Artikel von OpenAI unterschied sich die Fehlerrate von Whisper von Sprache zu Sprache, eng verbunden mit der Menge an Trainingssprache jeder Sprache, und sie stieg, je lauter das hinzugefügte Hintergrundrauschen wurde.
  • Keine Sprechernamen, keine Geräuschbeschreibungen, keine Übersetzung. Die Untertitel sind die gesprochenen Wörter, in der gesprochenen Sprache.
  • Lange Dateien dauern lange. Wo dein Browser es kann, liest die Seite in Stücken und hält nie den ganzen Ton der Datei auf einmal, aber jede Minute Audio ist Arbeit für deinen Prozessor. Die längste Datei, die wir bisher verarbeitet haben, dauert 12 Minuten.
  • Manche Dateien werden ganz gelesen. Wenn dein Browser den Ton nicht in Stücken dekodieren kann, dekodiert die Seite ihn auf einmal und hält bei 500 MB oder 1 Stunde an.
  • Auf Smartphones nicht getestet. Das größere Modell kann mehr Arbeitsspeicher brauchen, als ein Smartphone frei hat; die Seite sagt es, wenn der Browser meldet, dass ihm der Speicher ausgeht.

Die Open-Source-Komponenten und ihre Lizenzen stehen auf der Seite Open-Source-Nachweise.

Probier es mit deinem eigenen Video

Läuft in deinem Browser. Deine Datei verlässt nie dein Gerät.

Zum Untertitel-Generator