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.
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.
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:
| Datei | Größe | Bleibt in |
|---|---|---|
| Die Engine, WebAssembly-Version mit mehreren Threads (wenn WebGPU nicht genutzt wird und dein Browser mehr als zwei logische Prozessoren meldet) | 1,6 MB | Der 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 MB | Der normale Browser-Cache |
| Die Engine, WebGPU-Version (nur wenn die Seite eine nutzbare GPU findet) | 3,4 MB | Der normale Browser-Cache |
| Das kleinere Modell, Whisper base (voreingestellt) | 59,7 MB, in 3 Teilen | Cache 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 Teilen | Cache Storage, nach SHA-256-Prüfung jedes Teils |
| Der Sprachdetektor, Silero VAD | 0,9 MB, in 1 Teil | Cache Storage, nach SHA-256-Prüfung |
| Der Medienleser (Teil der Skripte der Seite) | 0,3 MB | Der 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.