SSA 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 konvertiert SSA nach JSON. Datei hineinziehen oder Text einfügen — zurück kommt die JSON-Fassung. Die Konvertierung läuft vollständig im Browser, ohne Upload und ohne Konto.
JSON ist das Ziel, das von einer SSA-Datei am meisten behält: der Titel und die ganze Stiltabelle kommen mit, weil JSON beliebig viele Felder aufnehmen kann. Was fehlt, ist alles, wofür das Datenmodell keinen Schlüssel hat — der Rest von `[Script Info]`, Ereigniszeilen außer `Dialogue:` und eingebettete Schriften oder Grafiken. Die Liste oben stammt aus dem Vergleich der beiden Formate, nicht aus Ihrer Datei.
Eine Datei ist kein Problem, eine ganze Staffel auch nicht: Die Warteschlange arbeitet sie der Reihe nach ab, und die Ergebnisse kommen gemeinsam als eine ZIP-Datei.
Beispiele
Eine typische SSA-Datei, nach JSON konvertiert
Eingabe
[Script Info]
Title: Example SSA
ScriptType: v4.00
Collisions: Normal
[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: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\i1}Italic{\i0} line.
Dialogue: Marked=0,0:00:09.00,0:00:12.00,Default,,0,0,0,,Two\Nlines
Ausgabe
{
"version": 1,
"title": "Example SSA",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"TertiaryColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "0",
"Italic": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"AlphaLevel": "0",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"bold": false,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
"Hello there."
],
"style": "Default"
},
{
"start": 5000,
"end": 8000,
"lines": [
{
"text": "Italic line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
],
"style": "Default"
},
{
"start": 9000,
"end": 12000,
"lines": [
"Two",
"lines"
],
"style": "Default"
}
]
}
Verloren in dieser Ausgabe: formatspezifische Konstruktionen ohne JSON-Schlüssel. Alles Übrige stimmt Zeile für Zeile.
Dieselbe Konvertierung mit einer unordentlichen Eingabe
Eingabe
[Script Info]
Title: Dirty SSA
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
Comment: Marked=0,0:00:00.00,0:00:01.00,Default,,0,0,0,,not a subtitle
Dialogue: Marked=0,0:00:01.00,0:00:04.00,Default,,0,0,0,,{\b1}Bold{\b0} and {\u1}underlined{\u0}.
Dialogue: Marked=0,0:00:05.00,0:00:08.00,Default,,0,0,0,,A soft\nbreak and a {\p1}mystery{\p0} code.Ausgabe
{
"version": 1,
"title": "Dirty SSA",
"styles": {
"Default": {
"name": "Default",
"Name": "Default",
"Fontname": "Arial",
"Fontsize": "20",
"PrimaryColour": "&H00FFFFFF",
"SecondaryColour": "&H000000FF",
"TertiaryColour": "&H00000000",
"BackColour": "&H00000000",
"Bold": "0",
"Italic": "0",
"BorderStyle": "1",
"Outline": "2",
"Shadow": "2",
"Alignment": "2",
"MarginL": "10",
"MarginR": "10",
"MarginV": "10",
"AlphaLevel": "0",
"Encoding": "1",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#ffffff",
"bold": false,
"italic": false
}
},
"cues": [
{
"start": 1000,
"end": 4000,
"lines": [
{
"text": "Bold and underlined.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
},
{
"kind": "underline",
"start": 9,
"end": 19
}
]
}
],
"style": "Default"
},
{
"start": 5000,
"end": 8000,
"lines": [
"A soft",
"break and a {\\p1}mystery{\\p0} code."
],
"style": "Default"
}
]
}
So sehen echte Schäden aus — gemischte Zeilenenden, verirrte Leerzeichen, leere Felder. Im Vergleich zum sauberen Beispiel oben wird sichtbar, was der Parser verzeiht.
Häufige Fragen
Was passiert bei SSA nach JSON mit `[Script Info]`, `Comment:`-Zeilen und eingebetteten Schriften?
Mehr bleibt erhalten, als man erwartet: Der Titel kommt mit, ebenso die ganze SSA-Stiltabelle mit allen Spalten, auch denen, die diese Seite nicht modelliert, dazu Schrift, Größe, Farbe sowie Fett- und Kursiv-Kennung. Keinen Platz in JSON haben der übrige Inhalt von `[Script Info]` (`PlayResX`, `WrapStyle`, `Collisions` und Ähnliches), Ereigniszeilen, die nicht `Dialogue:` sind (`Comment:`, `Picture:`, `Sound:`), und alles aus `[Fonts]` oder `[Graphics]`. Das fällt weg.
Wie sieht die Ausgabe aus, wenn SSA zu JSON wird?
Wie JSON: ein Array aus Block-Objekten, jedes mit eigener `id`, `start` und `end`. Jeder SSA-Block wird ein JSON-Block, in derselben Reihenfolge, mit demselben Text.
Bleiben die SSA-Zeiten in der JSON-Datei exakt?
Ja, auf die Millisekunde — feiner geht keines der beiden Formate. SSA schreibt einen Zeitpunkt als `0:00:04.13`, JSON denselben als `4126`; nichts wird gerundet oder verschoben, und ein Block, der 2,9 Sekunden sichtbar war, bleibt es.
Wie kommt ein zweizeiliger SSA-Block in JSON an?
Als zwei Einträge im `lines`-Array des Blocks. Die Zusammengehörigkeit überlebt — die beiden SSA-Zeilen bleiben ein Untertitel in der JSON-Ausgabe, und ein Player zeigt sie gemeinsam.
Behalten SSA-Blöcke in der JSON-Ausgabe ihre Reihenfolge?
Ja, und sie werden unterwegs nach Startzeit sortiert — der früheste zuerst, so wie jedes Format hier sie erwartet und Player sie lesen. War die SSA-Datei ungeordnet, stellt JSON die Reihenfolge wieder her; das ändert die Struktur der Datei, nicht ihren Inhalt, und ist beabsichtigt.
Lässt sich JSON wieder nach SSA konvertieren?
Ja, und diese Richtung hat ihre eigene Liste: JSON nach SSA verliert Präzision, weil SSA nur Hundertstelsekunden speichert. Die Liste unterscheidet sich von der obigen, weil die beiden Formate unterschiedliche Dinge behalten.