Andare al contenuto principale
SubtitleMatrix

Convertire SSA in JSON

Conversione dei formatiSubStation Alpha (SSA)
Oppure incollare il testo dei sottotitoli

Cosa cambia questa conversione

1 elemento viene scartato o richiede una decisione

  • Contenuto specifico del formato

    il contenuto che il formato di partenza tiene fuori dai suoi blocchi (blocchi non-cue, testo di intestazione, impostazioni per blocco, eventi commentati) — il formato di destinazione non ha un posto per esso

Questo elenco deriva dalla matrice delle capacità di questi due formati, non dal particolare file caricato. Un file specifico può perdere di più se usa caratteristiche che il formato consente ma la matrice non modella.

Questa pagina converte SSA in JSON: trascini un file, o incolli il testo, e riottieni la versione JSON, con i blocchi come oggetti e i tempi in millisecondi interi. La conversione gira nel browser e nessun file viene caricato.

È la direzione che conserva di più: la tabella degli stili SSA passa colonna per colonna, comprese quelle che questo sito non modella, insieme al titolo. Quello che JSON non ha dove mettere sono i contenuti propri del formato — il resto di `[Script Info]`, gli eventi che non sono `Dialogue:` e ciò che è incorporato in `[Fonts]` o `[Graphics]` — ed è l’unica voce dell’elenco qui sopra.

Un file va bene, e così un’intera stagione: la coda li elabora in ordine e i risultati arrivano insieme in un unico ZIP.

Esempi

Un file SSA tipico, convertito in JSON

Ingresso

[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

Uscita

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

In questa uscita si perdono i contenuti propri del formato. Tutto il resto corrisponde riga per riga.

La stessa conversione su un input disordinato

Ingresso

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

Uscita

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

È il tipo di danno che i file reali hanno davvero — fine riga misti, spazi superflui, campi lasciati vuoti. Confrontalo con l’esempio ordinato qui sopra per vedere cosa il parser perdona.

Domande frequenti

Che fine fanno `[Script Info]`, le righe `Comment:` e i caratteri incorporati di SSA nel JSON?

Sopravvive più di quanto si possa pensare: il titolo passa, e passa anche l’intera tabella degli stili SSA — ogni colonna, comprese quelle che questo sito non modella, più il carattere, la dimensione, il colore e i flag grassetto e corsivo già interpretati. Quello che JSON non ha dove mettere è il resto di `[Script Info]` (`PlayResX`, `WrapStyle`, `Collisions` e simili), le righe di evento che non sono `Dialogue:` (`Comment:`, `Picture:`, `Sound:`) e tutto ciò che è incorporato in `[Fonts]` o `[Graphics]`. Quelli vengono scartati.

Che aspetto ha l’uscita quando SSA diventa JSON?

Ha l’aspetto del JSON: un array di oggetti blocco, ciascuno con `id`, `start` ed `end`, più l’oggetto `styles` con le colonne originali e il titolo in `title`. Ogni blocco SSA diventa un blocco JSON, nello stesso ordine, con lo stesso testo.

I tempi SSA restano esatti nel file JSON?

Sì, al millisecondo — che è la precisione massima di entrambi i formati. SSA scrive un istante come `0:00:04.13` e JSON scrive lo stesso istante come `4126`; nulla viene arrotondato o spostato fra i due, e un blocco rimasto sullo schermo per 2,9 secondi lo resta.

Come esce in JSON un blocco SSA su due righe?

Come due voci nell’array `lines` del blocco. L’abbinamento sopravvive: le due righe SSA appartengono ancora a un solo sottotitolo nell’uscita JSON, e il lettore le mostra insieme.

I blocchi SSA mantengono l’ordine nell’uscita JSON?

Sì, e lungo la strada vengono ordinati per istante di inizio — prima il più antico, che è l’ordine atteso da ogni formato di questo sito e quello con cui i lettori li interpretano. Se il tuo file SSA elencava i blocchi fuori sequenza, l’uscita JSON li rimette in ordine: è un cambiamento nella struttura del file, non nel suo contenuto, ed è voluto.

Posso riconvertire il JSON in SSA?

Sì, e ha un elenco suo: convertendo JSON in SSA si perde la precisione. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.

L’uscita JSON conserva la codifica del file SSA?

No: l’uscita è UTF-8, con fine riga Unix e senza BOM, qualunque codifica usasse il file SSA. Un file che arriva in UTF-16, o in una codifica Windows a byte singolo, viene decodificato in ingresso (il pannello dei risultati lo segnala quando accade); quello che esce è sempre lo stesso JSON in UTF-8.

Strumenti correlati