TTML in ASS umwandeln
Oder Untertiteltext einfügen
Was diese Konvertierung ändert
2 Sachen entfallen oder brauchen eine Entscheidung
- Genauigkeit
Zeitgenauigkeit — die Uhr der Ausgabe ist gröber, jeder Zeitstempel wird also auf die nächsten 10 ms gerundet
- Formatspezifischer Inhalt
Inhalt, den das Quellformat außerhalb seiner Blöcke führt (Nicht-Block-Abschnitte, Kopftext, Einstellungen pro Block, auskommentierte Ereignisse) — das Zielformat hat keinen Platz dafür
Diese Liste stammt aus der Fähigkeitsmatrix für diese beiden Formate, nicht aus der konkreten Datei, die Sie geladen haben. Eine bestimmte Datei kann mehr verlieren, wenn sie Merkmale nutzt, die das Format erlaubt, die Matrix aber nicht modelliert.
Diese Seite wandelt TTML in ASS um. Ziehen Sie eine Datei hinein oder fügen Sie den Text ein — Sie erhalten die ASS-Fassung zurück. Die Umwandlung läuft vollständig in Ihrem Browser: kein Upload, keine Anmeldung.
Beide Formate speichern nicht dasselbe, und der Unterschied ist nicht kosmetisch: die Genauigkeit und formatspezifische Inhalte haben in ASS keinen Platz. Die Liste oben stammt daraus, was die beiden Formate jeweils ausdrücken können, nicht aus Ihrer Datei; sie gilt also schon, bevor Sie etwas laden.
Eine Datei ist kein Problem, eine ganze Staffel auch nicht: Die Warteschlange arbeitet sie der Reihe nach ab und liefert alle Ergebnisse in einem einzigen ZIP.
Beispiele
Eine typische TTML-Datei, umgewandelt in ASS
Eingabe
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
Ausgabe
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.50,Default,,0,0,0,,Hello {\i1}there{\i0}.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.
In diesem Ergebnis geht verloren: die Genauigkeit und formatspezifische Inhalte. Alles andere bleibt Zeile für Zeile gleich.
Dieselbe Umwandlung mit einer unordentlichen Eingabe
Eingabe
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
Ausgabe
[Script Info]
ScriptType: v4.00+
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.50,0:00:03.50,Default,,0,0,0,,Loaded from an offset and a duration.
Dialogue: 0,0:00:04.00,0:00:06.50,Default,,0,0,0,,A coarser clock spelling.
Dialogue: 0,0:00:07.00,0:00:08.48,Default,,0,0,0,,Frames, at 25fps.
Dialogue: 0,0:00:09.00,0:00:11.00,Default,,0,0,0,,{\c&H000000FF&}Half-open{\c} and Tom & Jerry.
So sehen echte Dateien aus: gemischte Zeilenenden, verirrte Leerzeichen, leere Felder. Vergleichen Sie das mit dem sauberen Beispiel oben, dann sehen Sie, was der Parser verzeiht.
Häufige Fragen
Warum verschieben sich die Zeitstempel beim Umwandeln von TTML nach ASS?
ASS schreibt Hundertstelsekunden, TTML rechnet auf die Millisekunde genau. Aus begin 00:00:04.126 wird in ASS 0:00:04.13 — 4 ms später. Der Verlustbericht nennt diese Rundung unter Genauigkeit, und sie betrifft jeden Block.
Was geschieht mit dem TTML-Prolog und seinen Tabellen <styling> und <layout> in ASS?
Sie werden nicht übernommen. ASS bringt eigene Konstruktionen mit: den [Script Info]-Kopf, [V4+ Styles] und Dialogue-Zeilen. Benannte TTML-Stile wie tts:color oder tts:fontWeight und Regionen wie tts:origin haben dort keinen Namen, unter dem sie weiterleben könnten — sie zählen als formatspezifischer Inhalt.
Wie sieht die ASS-Datei aus, die aus TTML entsteht?
Ein Dokument mit [Script Info], [V4+ Styles] und [Events]; jeder TTML-Untertitel wird eine Dialogue-Zeile mit Layer, Start, Ende, Stil und Text. Aus <p begin="00:00:01.000" end="00:00:03.500"> wird 0:00:01.00,0:00:03.50.
Wie kommt ein zweizeiliger TTML-Untertitel in ASS an?
Als ein Dialogue mit \N zwischen den Zeilen — die ASS-Schreibweise für einen harten Umbruch. Ein <br/> im TTML-<p> wird damit ein Umbruch im selben Block, nicht ein zweiter Untertitel.
Behalten TTML-Untertitel im ASS-Ergebnis ihre Reihenfolge?
Ja, und sie werden nach Startzeit sortiert. TTML erlaubt <p>-Elemente in beliebiger Dokumentreihenfolge, ASS erwartet zeitliche Folge. Eine unsortierte Datei kommt deshalb geordnet heraus, der Text bleibt unverändert.
Kann ich die ASS-Datei zurück nach TTML umwandeln?
Ja, und ASS nach TTML verliert Karaoke und formatspezifische Inhalte. ASS-Tags wie \k oder \pos haben im TTML-Modell dieses Werkzeugs keinen Platz; die Rückrichtung ist damit deutlich verlustärmer als die obige, aber nicht kostenlos.
Welche Zeichenkodierung hat die ASS-Datei aus dem TTML-Dokument?
Immer UTF-8 mit Unix-Zeilenenden und ohne Byte-Order-Mark, unabhängig davon, ob die TTML-Datei UTF-16 oder eine andere Kodierung nutzte. Das Ergebnispanel nennt die erkannte Quellkodierung.