Gå till huvudinnehållet
SubtitleMatrix

Konvertera JSON till ASS

Eller klistra in undertexttext

Vad den här konverteringen ändrar

1 sak tappas eller kräver ett beslut

  • Precision

    tidsprecision – utdatans klocka är grövre, så varje tidsstämpel avrundas till närmaste 10 ms

Den här listan kommer från kapacitetsmatrisen för de här två formaten, inte från den specifika fil du laddade. En viss fil kan förlora mer om den använder funktioner som formatet tillåter men matrisen inte modellerar.

Den här sidan konverterar en JSON-fil till ASS. JSON skriver tiden som ett heltal millisekunder, till exempel "start": 4126. ASS skriver en tidpunkt som 0:00:04.13, alltså i hundradels sekunder. Ett JSON-textblock är ett objekt med start, end och text, samlade i en cues-lista. Ett ASS-textblock är en Dialogue-rad med lager, start, slut, stil, marginaler och text. ASS räknar i hundradels sekunder, alltså grövre än JSON; varje tid avrundas till närmaste 10 ms, och felet blir högst 5 ms.

Det som inte följer med: tidsprecisionen. Målformatets klocka är grövre: varje tid avrundas till närmaste 10 ms, och felet blir högst 5 ms. Rapporten ovanför filrutan listar förlusterna innan du väljer en fil, och räknar dem per fil när filen är inläst.

En fil eller en hel säsong: kön bearbetar filerna i tur och ordning, du kan avbryta mitt i och resultaten laddas ner tillsammans som en ZIP. Hela konverteringen sker i webbläsaren – filen lämnar aldrig datorn.

Exempel

En typisk JSON-fil konverterad till ASS

Indata

{
  "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"
    }
  ]
}

Resultat

[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.

Förlorat i utdatafilen: tidsprecisionen. Jämför de två sidorna rad för rad.

Samma konvertering på en stökig fil

Indata

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Resultat

[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.

Så här ser skadade filer ut i verkligheten – blandade radbrytningar, lösa blanksteg och tomma fält. Jämför med det prydliga exemplet ovan för att se vad tolken förlåter.

Vanliga frågor

Hur skiljer sig tidskoderna i JSON och ASS?

JSON skriver tiden som ett heltal millisekunder, till exempel "start": 4126. ASS skriver en tidpunkt som 0:00:04.13, alltså i hundradels sekunder. ASS räknar i hundradels sekunder, alltså grövre än JSON; varje tid avrundas till närmaste 10 ms, och felet blir högst 5 ms.

Vad förloras när en JSON-fil blir ASS?

När JSON blir ASS går tidsprecisionen förlorade. Målformatets klocka är grövre: varje tid avrundas till närmaste 10 ms, och felet blir högst 5 ms. Texten, ordningen och tiderna följer med, men avrundade.

Klarar ASS av formatering och placering som JSON har?

JSON bevarar hela modellen: stilar, placering, karaoke och strukturerade taggar. JSON sparar positionen som x, y och en justering. JSON sparar karaoketider som strukturerade taggar. ASS har en stiltabell i [V4+ Styles] med typsnitt, storlek, färger, kontur och marginaler, plus överstyrningskoder per textblock. ASS placerar text med \pos och \an, och behåller \an-parametern i textblockets extrafält. ASS sparar karaoketider per stavelse med \k-koder.

Vad händer med radbrytningar och antalet textblock när JSON konverteras till ASS?

JSON till ASS: Ett JSON-textblock är ett objekt med start, end och text, samlade i en cues-lista. JSON behåller hårda radbrytningar som en lista av rader. Ett ASS-textblock behåller hårda radbrytningar (\N och \n).

Laddas min JSON-fil upp när jag konverterar den till ASS?

Nej. Både inläsningen av JSON-filen och skrivningen av ASS-filen sker i webbläsaren; ingen del av texten, tiderna eller taggarna skickas i en förfrågan. Du kan lägga in en hel säsong, avbryta mitt i och ladda ner resultaten som en ZIP.

Relaterade verktyg