JSON in ASS umwandeln
Oder Untertiteltext einfügen
Was diese Konvertierung ändert
1 Sache entfällt oder braucht eine Entscheidung
- Genauigkeit
Zeitgenauigkeit — die Uhr der Ausgabe ist gröber, jeder Zeitstempel wird also auf die nächsten 10 ms gerundet
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.
JSON in ASS umwandeln: Datei hineinziehen oder Text einfügen, die ASS-Fassung herunterladen. Die Konvertierung läuft vollständig im Browser, ohne Upload und ohne Anmeldung.
Beide Formate speichern nicht dasselbe, und der Unterschied ist nicht kosmetisch: Die Zeitauflösung findet in ASS keinen Platz. Die Liste oben stammt aus dem, was die Formate ausdrücken können, nicht aus Ihrer Datei – sie gilt schon vor dem Laden.
Eine Datei ist kein Problem, eine ganze Staffel auch nicht: Die Warteschlange arbeitet sie der Reihe nach ab und liefert ein einziges ZIP.
Beispiele
Eine typische JSON-Datei, nach ASS konvertiert
Eingabe
{
"version": 1,
"title": "Fixture: typical",
"fps": 25,
"styles": {
"Default": {
"name": "Default",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#FFFFFF",
"bold": false,
"italic": false
}
},
"generator": "subtitlematrix fixtures",
"cues": [
{
"id": "1",
"start": 0,
"end": 2000,
"lines": [
"Hello world.",
"Second line."
],
"style": "Default",
"position": {
"x": 100,
"y": 200,
"align": "center"
}
},
{
"id": "2",
"start": 2500,
"end": 4000,
"lines": [
"Plain line.",
{
"text": "Styled line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
]
},
{
"id": "3",
"start": 4500,
"end": 6000,
"lines": [
"Roger: I am here."
],
"speaker": "Roger"
}
]
}
Ausgabe
[Script Info]
Title: Fixture: typical
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,,,,0,0,,,,,,,,,,,,,,
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:02.00,Default,,0,0,0,,{\pos(100,200)}Hello world.\NSecond line.
Dialogue: 0,0:00:02.50,0:00:04.00,Default,,0,0,0,,Plain line.\N{\i1}Styled{\i0} line.
Dialogue: 0,0:00:04.50,0:00:06.00,Default,,0,0,0,,Roger: I am here.
In dieser Ausgabe verloren: Zeitauflösung. Alles andere stimmt Zeile für Zeile.
Dieselbe Konvertierung mit widerspenstiger Eingabe
Eingabe
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
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:00.00,0:00:01.00,Default,,0,0,0,,First.
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,Second.
Dialogue: 0,0:00:02.00,0:00:03.00,Default,,0,0,0,,Third.
Solche Schäden haben echte Dateien – gemischte Zeilenenden, verirrte Leerzeichen, leere Felder. Vergleichen Sie mit dem sauberen Beispiel oben, um zu sehen, was der Parser verzeiht.
Häufige Fragen
Warum verschieben sich die Zeitstempel von JSON nach ASS?
ASS schreibt Zeit als 0:00:04.13, JSON als ganze Millisekunde 4126. ASS kennt nur Hundertstel, deshalb wird jeder Zeitstempel auf die nächsten 10 ms gerundet: Aus 4126 ms werden 4,13 s. Nichts wird gestreckt oder umsortiert, und keine cue verschiebt sich um mehr als 5 ms.
Wie sieht die ASS-Ausgabe aus, wenn JSON zu ASS wird?
Ohne laufende Nummern: Jeder Untertitel steht als Dialogue-Zeile im Abschnitt [Events], mit einem Layer-Feld dort, wo SRT die Nummer führt. Aus jeder JSON-cue mit id, start, end und lines wird genau eine ASS-cue – gleiche Reihenfolge, gleicher Text.
Wie kommt eine zweizeilige JSON-cue in ASS an?
Als zwei Zeilen mit \N dazwischen; so schreibt ASS einen harten Zeilenumbruch. Das lines-Array der JSON-cue bleibt also eine einzige ASS-cue, und der Player zeigt beide Zeilen zusammen.
Was bleibt von Stil, Position und Karaoke bei JSON nach ASS erhalten?
Alles drei: Die JSON-Stiltabelle wird zur ASS-Stiltabelle, position mit x, y und align wird zur Position auf dem Bildschirm, und die tags einer Zeile werden zu den entsprechenden ASS-Codes. Der einzige Verlust dieser Richtung ist die Zeitauflösung.
Bleibt die Reihenfolge der JSON-cues in ASS erhalten?
Ja, und sie wird beim Schreiben nach start sortiert – früheste zuerst. Eine JSON-Datei mit ungeordneten cues kommt also geordnet heraus; das ist eine Änderung der Struktur, nicht des Inhalts, und sie ist beabsichtigt.
Welche Kodierung hat die ASS-Ausgabe bei JSON nach ASS?
Immer UTF-8 mit Unix-Zeilenenden und ohne BOM, unabhängig davon, wie die JSON-Datei kodiert war. UTF-16 oder eine Windows-Einbyte-Kodierung werden beim Einlesen erkannt; das Ergebnispanel meldet das.