Hopp til hovedinnhold
SubtitleMatrix

JSON til ASS

Eller lim inn underteksttekst

Hva denne konverteringen endrer

1 ting slippes eller trenger en avgjørelse

  • Presisjon

    tidspresisjon — resultatets klokke er grovere, så hvert tidsstempel rundes av til nærmeste 10 ms

Denne listen kommer fra egenskapsmatrisen for disse to formatene, ikke fra den bestemte filen du lastet inn. En bestemt fil kan miste mer hvis den bruker egenskaper formatet tillater, men matrisen ikke modellerer.

Her konverteres en JSON-fil til ASS i nettleseren: du slipper inn en fil — eller limer inn teksten — og får ASS-utdataen tilbake.

Konverteringen fra JSON til ASS mister noe, og det er verd å vite hva: den siste desimalen forsvinner, fordi klokken i ASS runder hvert tidsstempel til nærmeste 10 ms.

Listen over filboksen er regnet ut fra hva JSON og ASS kan uttrykke, ikke fra filen din, så svaret er det samme før du laster opp noe.

En enkelt JSON-fil går like fint som hundre, så du kan sende hele sesongen gjennom ASS-konverteringen og laste ned alt som én ZIP.

Arbeidet med JSON til ASS skjer i nettleseren din — ingen server ser filen.

Eksempler

En typisk JSON-fil konvertert til ASS

Inndata

{
  "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.

Dette går tapt i utdataen: tidspresisjon.

Samme JSON-til-ASS-konvertering med vanskelig inndata

Inndata

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

Slik ser skader på ekte filer ut — blandede linjeskift, løse mellomrom, tomme felt. Sammenlign med det ryddelige eksempelet over for å se hva JSON-parseren tilgir.

Ofte stilte spørsmål

Hva går tapt når JSON blir ASS?

Dette: den siste desimalen forsvinner, fordi klokken i ASS runder hvert tidsstempel til nærmeste 10 ms. På kildesiden har JSON et JSON-skjema med tider i millisekunder og tagger per linje; på målsiden har ASS en full stiltabell, plassering, karaoke og hundredelers tider, og derfor kommer de nevnte tingene ikke med. Teksten og rekkefølgen kommer over.

Hvordan skrives tidsstemplene om fra JSON til ASS?

En tid i JSON ser slik ut: `"start": 4126` — heltall millisekunder. I ASS skrives den som `0:00:04.13` — hundredeler. Klokken i ASS er grovere enn i JSON, så hvert tidsstempel rundes til nærmeste 10 ms. Rekkefølgen er den samme, og ingen tekstblokk flyttes mer enn avrundingen tilsier.

Hva skjer med formateringen fra JSON i ASS?

Den kommer over: JSON og ASS har begge full formatering, så taggene skrives om uten at fet, kursiv eller farge forsvinner.

Hvordan ser en ASS-fil ut når den er laget fra JSON?

ASS er `[Script Info]`, en stiltabell i `[V4+ Styles]` og `[Events]` med `Dialogue:`-linjer. Konverteringen fra JSON fyller den formen: hver tekstblokk blir én ASS-blokk, i samme rekkefølge, med JSON-ens tekst delt i de samme linjene.

Kan jeg konvertere ASS tilbake til JSON, og hva går tapt da?

Ja, og den veien har sin egen tap-liste: JSON har ingen plass til innholdet ASS oppbevarer utenfor tekstblokkene. Det er ikke den samme listen som JSON → ASS, fordi de to formatene beholder ulike ting.

Beholder ASS plasseringen som JSON beskriver?

Ja, i den formen ASS har: ASS kan plassere tekstblokker, så JSON-ens posisjon skrives om dit i stedet for å kastes.

Relaterte verktøy