Andare al contenuto principale
SubtitleMatrix

Convertire JSON in SMI

Oppure incollare il testo dei sottotitoli

Cosa cambia questa conversione

2 elementi vengono scartati o richiedono una decisione

  • Stile

    tutto lo stile tranne grassetto e corsivo (colore, contorno, ombra, margini)

  • Karaoke

    la temporizzazione karaoke (evidenziazione per sillaba)

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 un file JSON in SMI. Si trascina il file nel riquadro, oppure si incolla il testo, e si riprende indietro la versione SMI. La conversione avviene interamente nel browser: nessun file viene caricato e non serve un account.

I due formati non conservano le stesse cose, e la differenza non è cosmetica: stile e karaoke non hanno dove stare in SMI. L’elenco qui sopra nasce da ciò che ciascuno dei due formati sa esprimere, non dal file che si carica, quindi la risposta è la stessa prima ancora di aprire qualcosa.

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

Esempi

Un file JSON tipico, convertito in SMI

Ingresso

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

Uscita

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>&nbsp;
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>&nbsp;
</BODY>
</SAMI>

In questa conversione si perdono: stile e karaoke. Tutto il resto corrisponde riga per riga.

La stessa conversione su un input scomodo

Ingresso

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

Uscita

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>&nbsp;
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>&nbsp;
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>&nbsp;
</BODY>
</SAMI>

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

Domande frequenti

Quale stile sopravvive dal JSON al SMI?

L’enfasi, scritta dentro il testo come tag: grassetto, corsivo, sottolineato e un colore escono come `<b>`, `<i>`, `<u>` e `<font color="…">`, su cui i browser agiscono. Quello che il file SMI non porterà è la tabella degli stili su cui JSON si appoggia: carattere, dimensione, contorno, ombra e margini se ne vanno tutti, e la pagina che incorpora i sottotitoli li stila con il proprio CSS.

Che fine fa il karaoke passando da JSON a SMI?

La temporizzazione se ne va, le parole restano. Il karaoke vive nelle campiture di karaoke che un blocco JSON porta con sé, che segnano quando ogni sillaba si accende, e SMI non ha modo di registrare un istante dentro una riga: i segni cadono e le sillabe arrivano come testo SMI normale.

Che aspetto ha il risultato quando JSON diventa SMI?

Come SMI: niente numeri di blocco e nessuna riga di timecode, ogni blocco è un tag `<SYNC Start=…>` con il testo in un `<P>` sotto, e — poiché un SYNC sostituisce ciò che era sullo schermo — subito dopo un blocco `<P>&nbsp;` che riporta lo schermo al vuoto. Ogni blocco JSON diventa un blocco SMI, nello stesso ordine, con lo stesso testo.

I tempi JSON sono esatti nel file SMI?

Sì, al millisecondo, che è la precisione massima di entrambi i formati. JSON scrive un istante come `4126` e SMI scrive lo stesso istante come `Start=4126`: fra i due non si arrotonda e non si sposta niente, e un blocco rimasto sullo schermo per 2,9 secondi lo resta.

Come esce in SMI un blocco JSON su due righe?

Come due righe separate da un `<br>`, che è il modo in cui SAMI scrive un a capo forzato. L’abbinamento sopravvive: le due righe JSON restano un solo sottotitolo nel file SMI e il lettore le mostra insieme.

I blocchi JSON mantengono l’ordine nel file SMI?

Sì, e lungo la strada vengono ordinati per istante di inizio: prima il più anticipato, che è l’ordine atteso da ogni formato di questo sito e quello con cui i lettori li scorrono. Se il file JSON elencava i blocchi fuori sequenza, l’SMI li rimette in ordine: è un intervento sulla struttura del file, non sul contenuto, ed è voluto.

Posso riconvertire l’SMI in JSON?

Sì, e ha un elenco suo: la conversione da SMI a JSON perde il contenuto specifico del formato, cioè gli attributi del documento e delle classi che JSON non modella. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.

Il file SMI conserva la codifica del file JSON?

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

Strumenti correlati