Zum Hauptinhalt springen
SubtitleMatrix

Untertitel aus Video extrahieren

MedieneingabeUntertitel in einem Video

Der erste Lauf lädt die Untertitel-Engine herunter — etwa 31 MB, von dieser Seite bereitgestellt und danach vom Browser zwischengespeichert. Das Video selbst verlässt diesen Tab nie.

Diese Seite nimmt eine Videodatei und gibt die Untertitelspuren zurück, die bereits darin stecken – eine Datei pro Spur, benannt nach der Sprache der Spur. Aus einer Matroska-Datei mit englischer SDH-Spur, chinesischer Spur und einer PGS-Bildspur werden drei Dateien: eine .srt, eine weitere .srt und eine .sup. Der Container wird demuxt, nicht neu codiert; eine Textspur wird also als die Bytes herausgeschrieben, die schon in der Datei lagen – nicht vom Bildschirm abgetippt und nicht neu getaktet.

Die Arbeit geschieht im Tab. Das Video wird von einer nach WebAssembly übersetzten ffmpeg-Version gelesen, die diese Seite selbst ausliefert, und die einzige Netzwerkanfrage gilt dieser Engine: etwa 31 MB beim ersten Einsatz, danach vom Browser zwischengespeichert. Das Video selbst wird nirgendwohin gesendet – dieselbe Regel wie auf jeder anderen Seite und der Grund, warum diese sich für Material eignet, das den Rechner nicht verlassen darf.

In das Bild eingebrannte Untertitel lassen sich nicht extrahieren, und kein Werkzeug kann das, weil es keine Spur zum Lesen gibt – diese Wörter sind Pixel. Hat die Datei überhaupt keine Untertitelspur, sagt die Seite das, statt eine leere Datei zu erzeugen; das schließt den eingebrannten Fall ein: Ein Video mit sichtbaren Untertiteln ohne Untertitelspur wird als nichts zum Extrahieren gemeldet.

Die Seite listet jede gefundene Untertitelspur auf, bevor sie etwas schreibt: Index, Codec, Sprache, Titel und ob die Spur als default oder forced markiert ist. Spuren, die bereits in einem eigenen Container leben, behalten ihr Format – ASS bleibt ASS, WebVTT bleibt WebVTT –, weil eine Umwandlung in SRT hier stillschweigend Gestaltung verlieren würde, und Gestaltung ohne Aufforderung zu verlieren ist das eine, was diese Seite nicht tut. Eine Spur, deren Codec keinen eigenen Container hat (etwa mov_text in einer MP4), wird nach SRT neu codiert, und die Ergebniskarte sagt das, statt es als Kopie durchgehen zu lassen.

Bitmap-Spuren kommen als Bilder heraus, nicht als Text: Eine PGS-Spur wird eine .sup, eine DVD-Spur eine .sub. Das ist Absicht – das Bild ist das, was in der Datei lag, und sein Text zu erraten ist eine andere Aufgabe mit eigener Seite und eigener Sprachfrage. Wer Text braucht, nimmt die .sup mit auf die PGS-Seite.

Häufige Fragen

Welche Video-Container lassen sich für die Untertitel-Extraktion ablegen?

MKV, MP4, M4V, AVI, MOV, TS, WebM, WMV, FLV, MPG und OGV. Die Liste ist eigentlich eine Liste der Demuxer, die die mitgelieferte ffmpeg-Version hat, keine Liste von Videocodecs: Was auch immer im Container steckt, die Untertitelspuren sind dieselbe Art Strom. Eine Datei mit ungewöhnlicher Endung, aber normalem Matroska-Inhalt funktioniert meist trotzdem, weil der Demuxer den Kopf statt des Namens liest; ein fragmentierter oder unvollständiger Download oft nicht, weil kein Index zum Durchlaufen da ist.

Verlässt das Video den Rechner, während die Untertitelspuren gelesen werden?

Nein. Der einzige Download ist die ffmpeg-Engine selbst, etwa 31 MB, von dieser Seite ausgeliefert und nach dem ersten Einsatz vom Browser zwischengespeichert. Das Video wird im Tab in das virtuelle Dateisystem der Engine eingehängt und von dort gelesen; es wird nie in einen Anfragekörper geschrieben. Das lässt sich im Netzwerk-Panel prüfen: Während eine Datei verarbeitet wird, trägt keine Anfrage sie. Diese Eigenschaft ist der Grund für die Seite – die meisten Extraktoren laden zuerst hoch, und Material mit rechtlichem oder medizinischem Haltegrund darf das nicht.

Warum bekomme ich eine .sup-Datei statt einer .srt?

Weil diese Spur als Bilder gespeichert ist, nicht als Text. PGS-Spuren (Codec hdmv_pgs_subtitle) sind eine Folge von Bildern, und die ehrliche Extraktion eines Bildstroms ist ein Bildstrom: eine .sup, genau das, was Player und Untertiteleditoren erwarten. Sie in Text zu verwandeln heißt, die Buchstaben in jedem Bild zu erkennen, was eine andere Seite mit einer Sprachfrage und einem Korrekturschritt ist. Der Extraktor erfindet nie Text, den er nicht gelesen hat.

Was macht das Werkzeug mit einer Untertitelspur, deren Format keine eigene Datei hat?

Es codiert diese eine Spur nach SRT neu und markiert das Ergebnis als neu codiert. Der häufige Fall ist mov_text, der Untertitel-Codec in MP4: Er hat kein eigenes Dateiformat, ein Herauskopieren des Stroms ergäbe also Bytes, die nichts öffnen kann. Neucodierung ist nicht verlustfrei – Gestaltung und Positionierung, die mov_text tragen kann, überleben nicht –, deshalb listet die Ergebniskarte das als Verlust, statt die Datei als unangetastete Kopie des Containerinhalts auszugeben.

Wie werden die Ausgabedateien bei mehreren Untertitelspuren benannt?

Nach dem Namen des Videos und dem Sprachcode der Spur: Eine Datei documentary.mkv mit englischer Spur ergibt documentary.eng.srt. Teilen sich zwei Spuren eine Sprache – eine normale englische Spur und eine englische SDH-Spur, was häufig vorkommt –, wird die zweite zu documentary.eng-2.srt, statt die erste zu überschreiben. Eine Spur ohne Sprachmarkierung fällt auf ihren Stromindex zurück, bleibt also unterscheidbar. Bei mehr als einer Datei bietet die Seite diese als ein ZIP an, weil Browser verhindern, dass eine Seite mehrere Downloads gleichzeitig startet.

Warum dauert der erste Extraktionslauf länger als der zweite?

Der erste Lauf lädt die ffmpeg-Engine, etwa 31 MB. Die Fortschrittszeile deckt diesen Download und danach die Extraktion ab. Der Browser speichert die Engine zwischen, spätere Läufe auf derselben Seite starten also fast sofort; dasselbe gilt nach einem Neuladen, solange der Zwischenspeicher nicht geleert wurde. Die Engine wird in vier Teilen ausgeliefert, weil die Hosting-Plattform einzelne Dateien über 25 MiB ablehnt, und die Seite setzt sie im Speicher zusammen, bevor sie startet – dieses Zusammensetzen gehört zur selben Wartezeit beim ersten Lauf.

Lässt sich eine zu lange Untertitel-Extraktion aus dem Video abbrechen?

Ja. Der Abbrechen-Knopf stoppt die laufende Extraktion und beendet den Worker, der sie ausführt, damit eine große Datei nicht einen Kern beschäftigt hält, nachdem die Entscheidung gefallen ist, nicht zu warten. Abbrechen ist kein Fehler: Der Eintrag geht in einen Zustand zurück, aus dem er erneut gestartet werden kann, und der nächste Lauf beginnt mit einem frischen Worker. Nichts Halbfertiges wird zum Download angeboten, weil eine halb geschriebene Untertiteldatei, die vollständig aussieht, schlimmer ist als keine Datei.

Verwandte Werkzeuge