SSA naar JSON
Of plak ondertiteltekst
Wat deze conversie verandert
1 ding vervalt of vraagt om een beslissing
- Formaatspecifieke inhoud
inhoud die het bronformaat buiten zijn blokken bewaart (blokken die geen ondertitel zijn, koptekst, instellingen per blok, uitgecommentarieerde gebeurtenissen) — het doelformaat heeft er geen plek voor
Deze lijst komt uit de capaciteitenmatrix voor deze twee formaten, niet uit het bestand dat je hebt geladen. Een specifiek bestand kan meer verliezen wanneer het kenmerken gebruikt die het formaat toestaat maar de matrix niet modelleert.
Deze pagina zet SSA om naar JSON. Sleep een bestand naar binnen — of plak de tekst — en je krijgt de JSON-versie terug. De conversie draait volledig in je browser, dus er wordt niets geüpload en je hebt geen account nodig.
De twee formaten bewaren niet dezelfde dingen, en het verschil is niet cosmetisch: formaateigen constructies hebben in JSON geen plek. De lijst hierboven komt uit wat beide formaten kunnen uitdrukken, niet uit jouw bestand; het antwoord is dus hetzelfde voordat je iets laadt.
Eén bestand kan, een heel seizoen ook: de wachtrij werkt ze op volgorde af en de resultaten komen samen als één ZIP binnen.
Voorbeelden
Een typisch SSA-bestand, omgezet naar JSON
Invoer
[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
Uitvoer
{
"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 deze uitvoer: formaateigen constructies. Alles wat overblijft klopt regel voor regel.
Dezelfde omzetting op een weerbarstige invoer
Invoer
[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.Uitvoer
{
"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"
}
]
}
Zo ziet schade in echte bestanden eruit — gemengde regeleinden, losse spaties, lege velden. Vergelijk dit met het nette voorbeeld hierboven om te zien wat de parser vergeeft.
Veelgestelde vragen
Wat gebeurt er met [Script Info], Comment:-regels en ingebedde lettertypen in JSON?
Meer blijft bewaard dan je misschien verwacht: de titel komt mee, en de hele SSA-stijltabel ook — elke kolom, inclusief de kolommen die deze site niet modelleert, plus het gelezen lettertype, de grootte, de kleur en de vet- en cursiefvlaggen. JSON heeft geen plek voor de rest van [Script Info] (PlayResX, WrapStyle, Collisions en dergelijke), voor gebeurtenisregels die geen Dialogue: zijn (Comment:, Picture:, Sound:) en voor wat in [Fonts] of [Graphics] zit. Die vallen weg.
Hoe ziet de uitvoer eruit als SSA JSON wordt?
Als JSON: een object met een versienummer, de titel, een styles-object en een cues-array. Elk blok heeft een start en een end in milliseconden en een lines-array met de tekst. Elk SSA-blok wordt één JSON-blok, in dezelfde volgorde, met dezelfde tekst.
Zijn de SSA-tijden exact in het JSON-bestand?
Ja, tot op de milliseconde — fijner gaat geen van beide formaten. SSA schrijft een moment als 0:00:04.13, JSON schrijft hetzelfde moment als 4130; er wordt niets afgerond of verschoven, en een blok dat 2,9 seconden in beeld stond, staat dat nog steeds.
Hoe komt een SSA-blok van twee regels in JSON uit?
Als twee items in de lines-array van het blok. Het paar blijft bij elkaar: de twee SSA-regels horen in de JSON-uitvoer nog steeds bij één ondertitel, en een speler toont ze samen.
Blijven SSA-blokken in dezelfde volgorde in JSON staan?
Ja, en ze worden onderweg op starttijd gesorteerd — vroegste eerst, de volgorde die elk formaat hier verwacht. Had je SSA-bestand de blokken door elkaar staan, dan zet JSON ze recht; dat raakt de structuur van het bestand, niet de inhoud, en het is een bewuste keuze.
Kan ik de JSON weer naar SSA omzetten?
Ja, en die richting heeft haar eigen lijst: JSON naar SSA verliest precisie, want SSA schrijft honderdsten van een seconde en JSON milliseconden. Die lijst verschilt van de lijst hierboven omdat beide formaten andere dingen bewaren.
Behoudt de JSON-uitvoer de tekencodering van het SSA-bestand?
Nee — de uitvoer is UTF-8, met Unix-regeleinden en zonder BOM, wat het SSA-bestand ook gebruikte. Een bestand in UTF-16 of in een Windows-codering met één byte wordt bij het inlezen gedecodeerd (het resultatenpaneel zegt het als dat gebeurt); wat eruit komt is altijd dezelfde UTF-8-JSON.