JSON naar ASS
Of plak ondertiteltekst
Wat deze conversie verandert
1 ding vervalt of vraagt om een beslissing
- Nauwkeurigheid
tijdprecisie — de klok van de uitvoer is grover, dus elke tijdstempel wordt afgerond op de dichtstbijzijnde 10 ms
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 JSON om naar ASS. Je sleept een bestand naar het vak of plakt de tekst erin, en je krijgt de ASS-versie terug. De conversie draait volledig in je browser: er wordt niets geüpload en je hebt geen account nodig.
De twee formaten bewaren niet hetzelfde, en dat verschil is niet cosmetisch: de fijnere tijdsaanduiding van JSON heeft in ASS geen plek. ASS rekent in honderdsten van een seconde, JSON in milliseconden. De lijst hierboven komt uit wat beide formaten elk kunnen uitdrukken, niet uit jouw bestand; het antwoord is dus hetzelfde vóór je iets laadt.
Eén bestand is prima, een heel seizoen ook: de wachtrij werkt ze in volgorde af en de resultaten komen samen binnen als één ZIP.
Voorbeelden
Een typisch JSON-bestand, omgezet naar ASS
Invoer
{
"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"
}
]
}
Uitvoer
[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 deze uitvoer gaat de fijnere tijdsaanduiding verloren. Al het andere komt regel voor regel overeen.
Dezelfde conversie op een rommelige invoer
Invoer
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
Uitvoer
[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.
Zo zien echte bestanden er vaak uit: gemengde regeleinden, losse spaties, lege velden. Vergelijk het met het nette voorbeeld hierboven om te zien wat de parser vergeeft.
Veelgestelde vragen
Waarom zijn de tijdstempels van JSON naar ASS verschoven?
ASS bewaart tijd als 0:00:04.13 waar JSON 4126 bewaart: een honderdste tegen een duizendste van een seconde. Elke tijdcode wordt daarom op de dichtstbijzijnde 10 ms afgerond, dus 00:00:04,126 wordt 4,13 seconden. Niets wordt uitgerekt of herordend en geen enkel blok schuift meer dan 5 ms, maar als je deze ondertitels naast een ander bestand legt, is dit de enige plek waar de conversie niet exact is.
Hoe ziet de uitvoer eruit als JSON ASS wordt?
Als ASS: zonder bloknummers. Elk ondertitelblok is een Dialogue:-regel in de sectie [Events], met een layer-veld waar SRT het volgnummer bewaart. Elk JSON-blok wordt één ASS-blok, in dezelfde volgorde en met dezelfde tekst.
Hoe komt een JSON-blok van twee regels in ASS terecht?
Als twee regels met \N ertussen, want zo schrijft ASS een harde regelbreuk. Het verband blijft: de twee JSON-regels horen in de ASS-uitvoer nog steeds bij één ondertitel, en een speler toont ze samen.
Blijft de volgorde van JSON-blokken in de ASS-uitvoer behouden?
Ja, en ze worden onderweg op starttijd gesorteerd: vroegste eerst, zoals elk formaat hier ze verwacht en zoals spelers ze lezen. Stond jouw JSON-bestand niet in volgorde, dan zet de ASS-uitvoer de blokken weer netjes achter elkaar. Dat is een verandering in de structuur van het bestand, niet in de inhoud, en ze is bewust.
Kan ik de ASS terug naar JSON omzetten?
Ja, en die richting heeft een eigen lijst: ASS naar JSON verliest formaatspecifieke inhoud. Die lijst verschilt van de lijst hierboven, omdat beide formaten andere dingen bewaren.
Blijft de tekencodering van het JSON-bestand behouden in de ASS-uitvoer?
Nee. De uitvoer is UTF-8 met Unix-regeleinden en zonder BOM, wat het JSON-bestand ook gebruikte. Een bestand in UTF-16 of in een Windows-codering met één byte wordt bij het inlezen gedecodeerd (het resultaatpaneel zegt het als dat gebeurt); wat eruit komt is altijd dezelfde UTF-8-ASS.