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 auf die leiseste halbe Sekunde kurz vor der 3-Minuten-Marke und trennt deshalb selten ein Wort.

4. Das Modell schreibt jedes Fenster

Ein Sprachdetektor markiert die Abschnitte mit Sprache, und das Spracherkennungsmodell schreibt sie, mit Anfang und Ende für jedes Wort.

5. Aus Wörtern werden Untertitel

Die Wörter werden in Untertitel aufgeteilt, die man beim Zuschauen in Ruhe lesen kann, 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, ein Medienleser in einem Web Worker liest den Ton in Abschnitten von 30 Sekunden, 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. Die Datei wird nie gesendet. Der einzige Datenverkehr sind die Seite, die Engine, das Modell (etwa 60 oder 264 MB) und ein kleiner Sprachdetektor, die beim ersten Mal vom Server der Website kommen und dann gespeichert bleiben.
Deine Datei bleibt im Browser-Tab: Die Seite, ihre Engine und das Modell kommen herein, nichts 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 machten die größeren Whisper-Modelle im Schnitt weniger Fehler, 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 des vorigen als Kontext geschrieben (etwa 200 Zeichen), damit ein Satz, der über einen Schnitt läuft, seinen Wortlaut und seine Satzzeichen behält. 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 mit Anfang und Ende für jedes Wort. Ein Segment kann ein langer Satz sein, also schneidet die Seite es in Untertitel, die man beim Zuschauen in Ruhe 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 geliefert hat, 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 an der leisesten halben Sekunde in Fenster von etwa 3 Minuten geschnitten; ein Sprachdetektor markiert die Sprache, und das Modell schreibt sie mit einer Zeit für jedes Wort; die letzten Wörter jedes Fensters 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.
So macht die Seite aus dem Ton deiner Datei Untertitel. Die Grenzen sind die aus dem Untertitel-Code.

Die Zeiten sind die eigene Schätzung des Modells, wo jedes Wort beginnt und endet, 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 höchstens zwei logische Prozessoren 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 mehr als 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 höchstens zwei logische Prozessoren 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
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
Der Sprachdetektor, Silero VAD0,9 MB, in 1 TeilCache Storage, nach SHA-256-Prüfung
Der Medienleser (Teil der Skripte der Seite)0,3 MBDer normale Browser-Cache

Engine, Modell und Detektor werden erst geladen, wenn du eine Datei hinzufügst, nicht beim Öffnen der Seite. Deine Datei, ihr Ton und deine Untertitel werden nie gespeichert: Sie leben im offenen Tab und verschwinden, wenn du ihn schließt. Um das gespeicherte 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 Sprache alle 10 Sekunden die Untertitel Fenster für Fenster erscheinen und jeder Satz an seiner Marke beginnt;
  • Abbrechen die Verarbeitung stoppt und die nächste Datei das gespeicherte Modell 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. Musik, Lärm und Menschen, die durcheinandersprechen, führen zu mehr Fehlern.
  • 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