Woraus eine SRT-Datei besteht
Eine SRT-Datei ist eine Liste nummerierter Blöcke. Jeder Block hat drei Teile: eine Nummer, eine Start- und Endzeit im Format Stunden:Minuten:Sekunden,Millisekunden und ein bis zwei Textzeilen. Eine Leerzeile beendet den Block.
329
00:24:22,584 --> 00:24:23,784
absence ...
Ein Videoplayer liest nur die Zeiten. Er zeigt den Text von der Startzeit bis zur Endzeit an und ignoriert alles andere. Deshalb kann eine Übersetzung sich einwandfrei lesen und trotzdem schlecht laufen: Die Wörter stimmen, hängen aber an den falschen Zeiten.
Die drei Arten, wie eine Übersetzung das Timing zerstört
Die Beispiele stammen aus unserem Test mit vier langen Aufträgen, in dem drei KI-Chatbots dieselbe SRT-Datei mit 1.200 Zeilen und 85 Minuten Länge jeweils in einer einzigen Antwort ins Spanische übersetzen sollten.
1. Eine Zeile wird in die davor gezogen. Im Original stand in Zeile 328 "...take advantage of Lady Bracknell's temporary" und in Zeile 329 "absence ...". Ein Modell setzte den ganzen Satz in Zeile 328 und löschte Zeile 329. Auf dem Bildschirm erscheint "absence" nun eine Sekunde zu früh, und der Zeitslot von Zeile 329 bleibt leer.
2. Alles nach einer weggelassenen Zeile wird neu nummeriert. Dasselbe Modell nummerierte den Rest der Datei ab 329 lückenlos durch. Nach einer zweiten Zusammenlegung bei Zeile 357 hatten 870 von 1.200 Zeilen eine andere Nummer als im Original. Die Datei lässt sich weiter abspielen. Wenn aber Sie oder Ihr Lektorat die Übersetzung anhand der Zeilennummern mit dem Original vergleichen, wird jede Zeile nach 329 der falschen zugeordnet.
3. Eine Ziffer im Timecode ändert sich. Ein anderes Modell schrieb 00:54:55,839 --> 00:54:51,039 für eine Zeile, die 00:54:45,839 --> 00:54:51,039 lautete. Die Zeile endet jetzt, bevor sie beginnt. Je nach Player wird sie übersprungen, blitzt nur kurz auf oder die Datei lässt sich gar nicht laden.
Ein Versatz der ganzen Datei, bei dem jede Zeile von der allerersten an um denselben Betrag danebenliegt, ist ein anderes Problem: Die Untertitel wurden für einen anderen Schnitt oder eine andere Bildrate des Videos erstellt. Die Übersetzung verursacht das nicht.
Der 2-Minuten-Check
Öffnen Sie das Original und die Übersetzung nebeneinander in einem beliebigen Texteditor.
- Letzte Zeile. Springen Sie in beiden Dateien ans Ende. Die letzte Nummer und der letzte Zeitcode sollten identisch sein. Endet die Übersetzung bei 1,198 und das Original bei 1,200, wurden zwei Zeilen zusammengelegt oder weggelassen.
- Drei Zeilen aus der Mitte. Suchen Sie in der Übersetzung nach drei Zeitcodes aus dem Original, etwa bei einem Viertel, der Hälfte und drei Vierteln der Datei. Jeder davon sollte in beiden Dateien dieselbe Nummer haben. Die erste Stelle, an der die Nummern abweichen, ist die Stelle, an der eine Zeile fehlt.
- Unmögliche Zeiten. Suchen Sie nach Zeilen, deren Endzeit vor der Startzeit liegt. In einer langen Datei findet ein kleines Skript oder die Fehlerprüfung eines Untertitel-Editors diese sofort.
- Die letzten zehn Minuten. Laden Sie die Übersetzung in Ihren Player und springen Sie kurz vor das Ende. Erscheinen die Zeilen dort zur richtigen Zeit, ist die Datei sehr wahrscheinlich in Ordnung.
Wenn Sie Python haben, führt dieses kurze Skript die Prüfungen 1 bis 3 für beliebige Dateipaare aus (python3 srtcheck.py original.srt translated.srt). Bei den drei Übersetzungen aus unserem Test meldete es genau die oben beschriebenen Fehler.
import re, sys
def cues(path):
text = open(path, encoding="utf-8-sig").read().replace("\r", "")
return re.findall(r"^(\d+)\n(\d\d:\d\d:\d\d,\d{3}) --> (\d\d:\d\d:\d\d,\d{3})", text, re.M)
a, b = cues(sys.argv[1]), cues(sys.argv[2])
print(f"lines: {len(a)} original, {len(b)} translated")
print(f"last: {a[-1]} vs {b[-1]}")
times = {(s, e): n for n, s, e in a}
renumbered = sum(1 for n, s, e in b if (s, e) in times and times[(s, e)] != n)
changed = [n for n, s, e in b if (s, e) not in times]
broken = [n for n, s, e in b if e <= s]
missing = [n for n, s, e in a if (s, e) not in {(s2, e2) for _, s2, e2 in b}]
print(f"renumbered: {renumbered}, changed time codes: {changed[:10]}, "
f"end before start: {broken[:10]}, original lines missing: {missing[:10]}")
Besteht die Übersetzung alle vier Prüfungen, können Sie sie verwenden. Fällt sie bei einer durch, ist es meist schneller, sie mit einem Tool, das die Zeiten beibehält, noch einmal zu übersetzen, als die Datei von Hand zu reparieren.
Die Zeilenlänge ist eine eigene Prüfung
Übersetzungen ins Spanische, Deutsche oder Französische fallen oft länger aus als das englische Original. Der Style Guide „English (USA)“ von Netflix erlaubt 42 Zeichen pro Zeile und zwei Zeilen pro Untertitel. In unserem Test lag die Zahl der übersetzten Zeilen mit einer Zeile von mehr als 42 Zeichen je nach Modell zwischen 32 und 447 von 1,200. Unser eigenes Tool kam auf 105. Es lohnt sich also, das unabhängig vom verwendeten Tool zu prüfen: Lange Zeilen sind schwer zu lesen, bringen aber das Timing nicht durcheinander.
So vermeiden Sie das Problem
Die obigen Fehler entstehen, weil das Modell die Nummern und Zeiten zusammen mit der Übersetzung wieder ausgeben soll. Nehmen Sie ihm das aus der Hand. Unser Untertitel-Übersetzer liest Ihre .srt- oder .vtt-Datei, schickt nur den Text in Blöcken von bis zu 60 Zeilen, fragt jede Zeile, die fehlt, erneut an und übernimmt jede Nummer und jede Zeit aus Ihrem Original. In derselben Testdatei mit 1,200 Zeilen kamen alle 1,200 Zeilen mit identischen Nummern und Zeitcodes zurück.
Der erste Teil jedes Auftrags ist kostenlos und ohne Registrierung möglich. Ein kompletter Film oder eine ganze Staffel, bis zu 5,000 Zeilen in bis zu 30 Dateien, kostet $5 als Einmalzahlung. Beliebte Zielsprachen haben eigene Seiten: SRT ins Spanische, Arabische und Persische.
Methode & Daten
Quellen
- SubRip (SRT file format) — Wikipedia
- English (USA) Timed Text Style Guide — Netflix Partner Help Center
- Timed Text Style Guide: General Requirements — Netflix Partner Help Center