Zum Hauptinhalt springen
SubtitleMatrix

TTML in SSA 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 SSA um. Ziehen Sie eine Datei hinein oder fügen Sie den Text ein — Sie erhalten die SSA-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 SSA 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 SSA

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, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, 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 &amp; Jerry.</p>
    </div>
  </body>
</tt>

Ausgabe

[Script Info]
ScriptType: v4.00

[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1

[Events]
Format: Marked, 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 &amp; 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 SSA?

SSA schreibt Hundertstelsekunden, TTML rechnet auf die Millisekunde genau. Aus begin 00:00:04.126 wird 0:00:04.13 — 4 ms später. Der Verlustbericht nennt diese Rundung unter Genauigkeit, sie betrifft jeden Block.

Was geschieht mit dem TTML-Prolog und seinen Tabellen <styling> und <layout> in SSA?

Sie werden nicht übernommen. SSA bringt [Script Info], [V4 Styles] und Dialogue-Zeilen mit; benannte TTML-Stile (tts:color, tts:fontWeight) und Regionen (tts:origin) haben dort keinen Namen, unter dem sie weiterleben könnten. Sie zählen als formatspezifischer Inhalt.

Wie sieht die SSA-Datei aus, die aus TTML entsteht?

Ein Dokument mit [Script Info], [V4 Styles] und [Events]; jeder TTML-Untertitel wird eine Dialogue-Zeile mit Marked-Feld. 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 SSA an?

Als eine Dialogue-Zeile mit \N zwischen den Zeilen — die SSA-Schreibweise für einen harten Umbruch. Ein <br/> im <p> wird damit ein Umbruch innerhalb desselben Blocks.

Bleibt die Reihenfolge der TTML-Untertitel in SSA erhalten?

Ja, sie werden nach Startzeit aufsteigend sortiert. TTML erlaubt <p>-Elemente in beliebiger Dokumentreihenfolge, SSA erwartet zeitliche Folge. Der Text bleibt dabei unverändert.

Kann ich eine SSA-Datei zurück nach TTML umwandeln?

Ja, und SSA nach TTML verliert Karaoke und formatspezifische Inhalte. SSA-Tags wie \k haben im TTML-Modell dieses Werkzeugs keinen Platz; die Rückrichtung ist damit verlustärmer als die obige, aber nicht kostenlos.

Welche Kodierung hat das SSA-Ergebnis aus der TTML-Datei?

UTF-8 mit Unix-Zeilenenden und ohne Byte-Order-Mark, unabhängig von der Kodierung der TTML-Datei. Das Ergebnispanel erwähnt eine abweichende Quelle, wenn eine erkannt wurde.

Verwandte Werkzeuge