TTML in JSON umwandeln
Oder Untertiteltext einfügen
Was diese Konvertierung ändert
1 Sache entfällt oder braucht eine Entscheidung
- 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 JSON um. Ziehen Sie eine Datei hinein oder fügen Sie den Text ein — Sie erhalten die JSON-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: formatspezifische Inhalte haben in JSON 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 JSON
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
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 3500,
"lines": [
{
"text": "Hello there.",
"tags": [
{
"kind": "italic",
"start": 6,
"end": 11
}
]
}
]
},
{
"start": 3500,
"end": 6000,
"lines": [
"How are you?",
"Fine, thanks."
]
}
]
}
In diesem Ergebnis geht verloren: 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
{
"version": 1,
"cues": [
{
"start": 1500,
"end": 3500,
"lines": [
"Loaded from an offset and a duration."
]
},
{
"start": 4000,
"end": 6500,
"lines": [
"A coarser clock spelling."
]
},
{
"start": 7000,
"end": 8480,
"lines": [
"Frames, at 25fps."
]
},
{
"start": 9000,
"end": 11000,
"lines": [
{
"text": "Half-open and Tom & Jerry.",
"tags": [
{
"kind": "color",
"start": 0,
"end": 9,
"value": "#FF0000"
}
]
}
]
}
]
}
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
Was geschieht mit dem TTML-Prolog und seinen Tabellen <styling> und <layout> in JSON?
Sie werden nicht übernommen. JSON speichert Untertitel als cues mit start, end und lines; die XML-Deklaration, die Namensräume, die Stiltabelle mit tts:color und die Regionentabelle mit tts:origin haben dort kein Feld. Sie zählen deshalb als formatspezifischer Inhalt.
Wie sieht das JSON aus, das aus einer TTML-Datei entsteht?
Ein Objekt mit version 1 und einem cues-Array; jeder Block trägt start, end und lines. Aus <p begin="00:00:01.000" end="00:00:03.500"> werden start 1000 und end 3500 als ganze Millisekunden.
Sind die TTML-Zeiten im JSON exakt?
Ja. Beide Seiten rechnen in Millisekunden, also wird nichts gerundet: 00:00:04.126 bleibt 4126. Ein Verlust an Genauigkeit entsteht auf diesem Weg nicht, der Bericht nennt nur formatspezifische Inhalte.
Wie kommt ein zweizeiliger TTML-Untertitel ins JSON?
Als zwei Einträge im lines-Array desselben Blocks. Ein <br/> innerhalb des <p> wird damit ein echter Zeilenumbruch, und die beiden Zeilen bleiben in derselben cue zusammen.
Kann ich das JSON zurück nach TTML umwandeln?
Ja, und JSON nach TTML verliert Karaoke. Alles andere, was diese Richtung aus TTML heraus nicht mitnimmt, stand ohnehin nicht in der JSON-Datei; die Rückrichtung meldet deshalb nur diesen einen Punkt.
In welcher Reihenfolge stehen die TTML-Blöcke im JSON?
Nach start sortiert, aufsteigend. TTML erlaubt <p>-Elemente in beliebiger Dokumentreihenfolge, JSON verlangt start vor end. Eine unsortierte Datei wird dadurch neu geordnet, ihr Text bleibt unverändert.
Welche Kodierung hat das JSON-Ergebnis aus der TTML-Datei?
UTF-8 mit Unix-Zeilenenden und ohne Byte-Order-Mark. Weicht die TTML-Quelle ab, wird sie beim Einlesen erkannt und umgewandelt; das Ergebnispanel führt die erkannte Kodierung auf.