Untertitel mit Audio neu synchronisieren
Der erste Lauf lädt die Video-Engine herunter — etwa 31 MB, von dieser Seite bereitgestellt und danach vom Browser zwischengespeichert. Sie wird nur verwendet, um die Tonspur zu lesen; die Untertitel werden mit dem Ton selbst abgeglichen, ohne Sprachmodell und ohne dass etwas hochgeladen wird.
Optionen
Wie weit die Untertitel in beide Richtungen von ihrem Platz entfernt sein könnten. Es ist eine Kosten- und Risikoeinstellung, keine Genauigkeitseinstellung: Ein weiteres Fenster findet eine größere Abweichung, gibt der Suche aber auch mehr Gelegenheiten, sich auf einen Zufall festzulegen, der zufällig gut bewertet wird. Mehr als etwa eine Minute kommt nicht von einem Schnitt oder einem Logo — so viel bedeutet meist eine andere Filmfassung oder eine Bildratenabweichung, die diese Seite getrennt löst. Wählen Sie das kleinste Fenster, das Ihre Vermutung abdeckt.
Diese Seite repariert Untertitel, die in der richtigen Reihenfolge, aber zur falschen Zeit stehen. Sie bekommt zwei Dinge – die Untertiteldatei und das Video oder Audio, zu dem sie gehört – und ermittelt, wie weit der Text gedriftet ist, dann schreibt sie die Datei mit jedem verschobenen Block neu. Ein Drift von wenigen Sekunden stammt von Schnitten und Logos; ein Drift, der durch den Film wächst, von einer Bildraten-Differenz, wenn ein 23,976-fps-Master mit Untertiteln für 25 fps gepaart wurde und der Fehler am Ende der ersten Stunde bereits anderthalb Minuten beträgt.
Gemessen wird am Audio selbst. Die Seite extrahiert eine Monospur, faltet sie in Zwanzig-Millisekunden-Fenster der Lautheit und markiert, welche Fenster Sprache enthalten. Dann stellt sie immer wieder dieselbe Frage: Wie viel des Untertiteltextes trifft bei dieser Verschiebung und dieser Geschwindigkeitsänderung auf Sprache statt auf Stille? Die Antwort wird pro Block bewertet und gemittelt, und das beste Paar wird angewendet. Es ist keine Spracherkennung beteiligt, deshalb läuft es in wenigen Sekunden und funktioniert auch, wenn für die Sprache der Untertitel kein Modell vorhanden ist.
Weil die Bewertung eine Messung und keine Garantie ist, ist die Seite so gebaut, dass sie bei schwacher Messung nichts tut. Fünf Blöcke oder weniger, eine Audiospur ohne erkennbare Sprache, eine beste Bewertung, die überwiegend auf Stille trifft, oder zwei sehr verschiedene Ausrichtungen mit ähnlicher Bewertung – jeder dieser Fälle endet mit einem Bericht und ohne neu geschriebene Untertiteldatei. Ein stiller Fehlschlag ist hier weit besser als ein selbstsicherer: Um fünf Sekunden falsch verschobene Untertitel sehen unordentlich aus, aber um fünf Sekunden falsch verschobene Untertitel von einem Werkzeug, das Erfolg behauptet hat, sind schwer zu bemerken und schwer zu erklären.
Ist die Ausrichtung gut, gibt es zwei Dateien, weil die beiden verschiedene Fragen beantworten. Die korrigierten Untertitel behalten ihr Format, heißen film.synced.srt oder tragen die jeweilige Endung und sind sofort abspielbar. Der Bericht ist eine kleine Textdatei mit der Verschiebung in Millisekunden, dem tatsächlich angewendeten Verhältnis, der Bewertung, der Konfidenz und einer Zeile, ob die Datei überhaupt angefasst wurde. Beides entsteht im selben Lauf, eine Stapelverarbeitung von Folgen erzeugt also für jede ein passendes Paar.
Die Arbeit ist lokal. Das Audio wird von nach WebAssembly übersetztem ffmpeg dekodiert, einmal von dieser Seite geladen und danach zwischengespeichert; die Untertitel werden im Tab geparst. Nichts an Film oder Untertiteln wird irgendwohin gesendet – es gibt keinen Upload-Schritt zu überspringen, was für Material zählt, das den Rechner nicht verlassen darf.
Häufige Fragen
Worin unterscheidet sich eine gemessene Verschiebung von dem festen Offset auf der Verschiebeseite?
Die Verschiebeseite wendet eine Zahl an, die bereits bekannt ist, und bleibt deshalb richtig, ob das Audio zustimmt oder nicht. Diese Seite beginnt am anderen Ende: Sie nimmt an, dass die Zahl unbekannt ist, liest die Sprachaktivität aus dem Audio und löst Verschiebung und Geschwindigkeitsänderung gemeinsam. Deshalb kann sie auch ein Bildratenproblem reparieren, das kein einzelner Offset ausdrücken kann – bei 25 gegen 23,976 ist der Fehler am Anfang null und wächst um etwa 3,6 Sekunden pro Stunde, eine Verschiebung, die den Anfang repariert, macht das Ende also schlechter.
Warum schreibt die Resync-Seite manchmal gar keine neue Untertiteldatei?
Weil eine falsche Korrektur schwerer zu bemerken ist als eine fehlende. Die Suche meldet vier Dinge: mit wie vielen Blöcken sie arbeiten konnte, ob das Audio überhaupt Sprache enthielt, welcher Anteil der Untertitelzeit auf Sprache traf und wie viel besser der Sieger als die beste wirklich andere Alternative war. Ist eines davon schwach, erzeugt der Lauf nur den Bericht, dessen Statuszeile not-found samt Grund nennt. Es geht nichts verloren – die Originaldatei bleibt unangetastet –, und es entsteht eine Zahl, die vor manuellen Eingriffen geprüft werden kann.
Was bedeutet das Verhältnis im Bericht bei einer Abweichung von 23,976 zu 25 fps?
Blockzeiten werden mit dem Verhältnis multipliziert und dann um den Offset verschoben; ein Verhältnis von 1,0427 heißt also, dass die Untertitel für eine schnellere Bildbasis getaktet waren und jeder Block später gestreckt werden muss. Die Seite probiert beide Richtungen jedes gängigen Paares, weil die Lesrichtung davon abhängt, welche Datei gerade vorliegt: 1,0427 und 0,9590 sind dieselbe Abweichung von den beiden Enden aus gesehen. Ist das gemeldete Verhältnis 1,000000 und der Offset kleiner als ein Einzelbild, passt die Datei bereits und bleibt unangetastet.
Behält die korrigierte Untertiteldatei meine Gestaltung oder nur die Zeiten?
Geändert wird das Timing und sonst nichts. Die Untertitel werden in dieselbe interne Darstellung geparst, die jede andere Seite hier verwendet, Anfang und Ende jedes Blocks werden neu geschrieben, und dann wird in das Format serialisiert, in dem die Datei ankam. ASS-Gestaltung, Positionierung und Inline-Tags überleben; ebenso die eigene Struktur der Datei, deshalb ergibt eine .ass auch wieder eine .ass und keine abgeflachte .srt. Die eine sichtbare Ausnahme ist ein Block, der durch ein großes Verhältnis unter eine Millisekunde gedrückt wird: Er bleibt bei einer Millisekunde und wird in der Verlustliste gezählt.
Funktioniert die Audioanalyse auch, wenn die Untertitel in einer anderen Sprache als das Audio sind?
Ja, und darin liegt der Sinn, Lautheit statt Wörter zu erkennen. Sprachaktivität ist eine Form – ein Satz ist ein Energiestoß gefolgt von einer Lücke –, und diese Form ist gleich, ob die Stimme Deutsch oder Spanisch spricht. Eine deutsche Synchronfassung unter spanischen Untertiteln richtet sich genauso gut aus wie ein passendes Paar. Was sie nicht kann, ist eine synchronisierte Zeile von einer Originalzeile zu unterscheiden; fügt die Synchronfassung zusätzlichen Dialog ein, findet die Ausrichtung also trotzdem die Gesamtpassung, aber einzelne Blöcke in den eingefügten Passagen können auf der falschen Zeile sitzen.