Video & Untertitel · Untertitel-Toolkit
Verglichene Untertitel-Timecodes: SRT Kommas, VTT Punkte und SMPTE-Frames
· Hintergrund
Untertitel Timecodes Bildrate
In der Untertitelarbeit tauchen drei Arten auf, Zeit zu schreiben: HH:MM:SS,mmm von SRT, HH:MM:SS.mmm von WebVTT und HH:MM:SS:FF von SMPTE. In diesem Beitrag wird erklärt, was die einzelnen Begriffe bedeuten, wie sie konvertieren und wo bei den Conversions Fehler auftreten.
Derselbe Moment auf drei Arten geschrieben – ein kurzer Überblick über die Timecodes, denen ein Redakteur in einem Projekt begegnet
Ein Projekt kann einem Redakteur auf drei Arten gleichzeitig geschrieben übergeben werden. Die Untertiteldatei verwendet Stunden, Minuten, Sekunden und ein Komma vor den Millisekunden. Die Web-Untertiteldatei verwendet einen Punkt an derselben Position. Die Bearbeitungsentscheidungsliste verwendet eine Bildnummer anstelle eines Bruchs. Alle drei benennen denselben Moment, und nur einer von ihnen kann gelesen werden, ohne etwas anderes über den Stoff zu wissen.
Der letzte Punkt ist der entscheidende. Zwei dieser Notationen sind absolut und eine nicht, und Konvertierungen zwischen ihnen scheitern auf bestimmte Weise, wenn der Unterschied übersehen wird.
Millisekunden mit Komma: SRT – eine europäische Dezimalgewohnheit, die zu einer Formatregel wurde
SRT schreibt Stunden, Minuten, Sekunden, ein Komma und genau drei Ziffern von Millisekunden. Das Komma ist ein Dezimaltrennzeichen in der europäischen Konvention und wurde durch Verwendung und nicht durch Spezifikation zu einer Formatregel, da SubRip kein Standarddokument zur Behebung hatte. Nichts an dem Wert ist europäisch; nur die Interpunktion ist.
Der Parser liest hier Millisekunden, indem er alle Ziffern, die er rechts findet, mit drei auffüllt, sodass ein Zeitstempel, der mit einer einzelnen Ziffer endet, als Hunderte von Millisekunden und nicht als Einheiten gelesen wird. Das ist wichtig, weil Dateien, die von Hand oder mit einem losen Konverter geschrieben wurden, nicht immer drei Ziffern liefern und das Lesen einer einzelnen nachgestellten Ziffer als Einheiten den Hinweis fast eine Sekunde früher setzen würde.
Millisekunden mit einem Punkt: WebVTT – der gleiche Wert, anderes Trennzeichen und warum es für Parser wichtig ist
WebVTT schreibt denselben Wert mit einem Punkt und lässt zu, dass das Stundenfeld vollständig weggelassen wird, sodass ein Formular mit zwei Feldern gültig ist, wobei SRT drei erwartet. Für einen Parser handelt es sich um wirklich unterschiedliche Grammatiken, weshalb eine Datei allein wegen der Zeichensetzung abgelehnt werden kann, obwohl jede darin enthaltene Zahl korrekt ist.
Echte Dateien vermischen die beiden ständig, sodass der Parser jedes Trennzeichen akzeptiert, unabhängig davon, welches Format die Datei vorgibt. Diese Toleranz gilt nur für die Eingabe. Bei der Ausgabe wird das Trennzeichen durch das Zielformat ausgewählt, ein Komma für SRT und ein Punkt für WebVTT, sodass eine konvertierte Datei kanonisch ist und keine Kopie der eingegangenen Unregelmäßigkeit.
Frames: SMPTE-Timecode – HH:MM:SS:FF, seine Abhängigkeit von der Framerate und die Drop-Frame-Komplikation
SMPTE-Timecode ersetzt den Bruchteil durch eine Bildnummer und gibt Stunden, Minuten, Sekunden und Bilder an. Im Gegensatz zu den anderen beiden kann es nicht allein interpretiert werden: Bild zwölf ist bei fünfundzwanzig Bildern pro Sekunde ein anderer Zeitpunkt als bei dreißig, sodass ein bildbasierter Timecode ohne deklarierte Rate unvollständig und nicht nur mehrdeutig ist.
Drop-Frame fügt eine zweite Komplikation hinzu. Material mit 29.97 Bildern pro Sekunde wird gezählt, als ob es dreißig wären, und um die Zählung mit der Uhr in Einklang zu bringen, werden zu Beginn der meisten Minuten zwei Bildnummern übersprungen, wobei jede zehnte Minute ausgenommen ist. Die Frames werden nicht gelöscht; Nur die Etiketten sind es. Bei einem Drop-Frame-Timecode handelt es sich um eine Zählkonvention, und die Behandlung als reine Frame-Zählung führt zu einem Fehler, der sich über das gesamte Programm ausbreitet.
Konvertieren von Frames in Millisekunden – die Arithmetik und Rundung, die kleine, aber echte Fehler erzeugt
Die Umrechnung von Frames in Millisekunden ist eine Division durch die Framerate, und beim Runden treten kleine Fehler auf. Ein Frame-Index geteilt durch die Rate und multipliziert mit tausend ergibt selten eine ganze Millisekunde, und das Ergebnis muss gerundet werden, um gespeichert zu werden. Intern werden Hinweise als ganze Millisekunden ab Null gehalten, sodass jede Konvertierung in diese Darstellung einmal gerundet wird.
Eine Rundung ist unbedenklich. Der Fehler, auf den man achten muss, ist die wiederholte Konvertierung: Eine Datei, die von Bildern auf Millisekunden, zurück zu Bildern mit einer anderen Rate und wieder vorwärts umgewandelt wird, akkumuliert jedes Mal eine Rundung, und diese Fehler werden nicht aufgehoben. Konvertieren Sie einmal von der maßgeblichen Quelle, anstatt eine Datei durch mehrere Tools zu leiten.
Arbeitsbeispiel: ein Cue bei 25 fps und bei 29.97 Drop-Frame – beides in Millisekunden umrechnen und vergleichen
Nehmen Sie einen Cue bei einer Minute, dreißig Sekunden und zwölf Frames. Bei fünfundzwanzig Bildern pro Sekunde entsprechen zwölf Bilder zwölf Fünfundzwanzigstelsekunden, was genau vierhundertachtzig Millisekunden entspricht. Der Augenblick beträgt also neunzigtausendvierhundertachtzig Millisekunden.
Bei 29.97 Drop-Frame ist dasselbe Etikett ein anderer Zeitpunkt. Zählen Sie die Frames: Neunzig Sekunden bei nominal dreißig ergeben zweitausendsiebenhundert plus zwölf minus die beiden Labels, die in der ersten Minute weggelassen wurden, also zweitausendsiebenhundertzehn Frames. Teilen Sie durch die wahre Rate von dreißigtausend durch eintausendeins, und der Augenblick beträgt etwa neunzigtausendvierhundertvierundzwanzig Millisekunden. Die beiden Timecodes sehen fast identisch aus und unterscheiden sich um etwa 56 Millisekunden, was klein genug ist, um eine Überprüfung zu überstehen, und groß genug, um bei einem genauen Stichwort sichtbar zu sein.
Was dies nicht abdeckt – Stunden über 99 hinaus, negative Zeiten und Timecode in Container-Metadaten
Dies deckt die Timecode-Notationen ab, die eine Untertiteldatei enthält. Es deckt keine Stundenfelder über neunundneunzig ab, die einige Systeme zur Rollenidentifizierung anstelle der verstrichenen Zeit verwenden, und es deckt keine negativen Zeiten ab, die in keinem der Untertitelformate ausgedrückt werden können. eine Verschiebung, die eins ergeben würde, wird auf Null festgelegt.
Der in Container-Metadaten gespeicherte Timecode liegt ebenfalls außerhalb des Gültigkeitsbereichs. Eine Videodatei kann einen Start-Timecode enthalten, der alles darin versetzt, so dass eine Untertiteldatei, die im Vergleich zum Programm korrekt ist, im Vergleich zur Datei falsch erscheinen kann, und keine noch so lange Untersuchung der Untertitel-Zeitstempel wird das aufdecken.
Takeaway: Wissen Sie, welche Uhr Sie lesen – wie das Subtitle Toolkit genau zwischen SRT und WebVTT-Timecodes konvertiert
Wissen Sie, welche Uhr Sie lesen. Ein Komma und ein Punkt sind der gleiche Wert, der für verschiedene Parser geschrieben wird, und die Konvertierung zwischen ihnen sollte die Interpunktion und sonst nichts ändern. Eine Frame-Anzahl ist eine andere Art von Zahl, die ohne ihre Rate bedeutungslos und irreführend ist, wenn es sich um eine Drop-Frame-Rate handelt.
Konvertieren Sie zwischen SRT und WebVTT mit dem Toolkit und vergleichen Sie einen Zeitstempel davor und danach: Das Trennzeichen sollte sich ändern und die Ziffern sollten sich nicht ändern. Wenn eine Zahl verschoben wurde, durchlief die Datei irgendwo einen Frame-basierten Schritt, und das ist die zu untersuchende Konvertierung.