Andare al contenuto principale
SubtitleMatrix

Convertire SMI in JSON

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

I due formati non conservano le stesse cose, e la differenza non è estetica: i contenuti propri di SAMI non hanno posto in JSON. L’elenco qui sopra deriva dalle capacità dichiarate dei due formati, non dal tuo file, quindi non cambia con il file.

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 SAMI tipico, convertito in JSON

Ingresso

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>&nbsp;
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Uscita

{
  "version": 1,
  "cues": [
    {
      "start": 1000,
      "end": 3000,
      "lines": [
        "Hello there."
      ]
    },
    {
      "start": 3500,
      "end": 6000,
      "lines": [
        "How are you?",
        "Fine, thanks."
      ]
    }
  ]
}

In questa uscita si perdono i contenuti propri del formato. Il testo e l’ordine dei blocchi corrispondono riga per riga.

La stessa conversione su un input disordinato

Ingresso

<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom &amp; Jerry
<SYNC Start=12000>
<P Class=ENCC>&nbsp;
</BODY>
</SAMI>

Uscita

{
  "version": 1,
  "cues": [
    {
      "start": 2500,
      "end": 9000,
      "lines": [
        "Line one",
        "Line two"
      ]
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Tom &amp; Jerry"
      ]
    }
  ]
}

È 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 il blocco `<STYLE>`, il `<TITLE>` e gli attributi `Class=` di SAMI nel JSON?

Vengono scartati, ma qui vale la pena essere precisi: l’uscita JSON ha davvero una chiave `title` e un oggetto `styles`, ed entrambi escono vuoti, perché nulla mappa il CSS o il titolo di SAMI su di essi. L’enfasi scritta dentro il testo del blocco è un caso diverso: appartiene alla riga e arriva nell’array `tags`. Quello che si perde è ciò che il file teneva fuori dai suoi blocchi: il blocco `<STYLE>` con il CSS dei paragrafi, il `<TITLE>` e il marcatore di canale che ogni paragrafo porta, `Class=ENCC`, che punta a una di quelle regole.

Che aspetto ha l’uscita quando SAMI diventa JSON?

Ha l’aspetto del JSON: un array di oggetti blocco, ciascuno con `id`, `start` ed `end`, più l’oggetto `styles` e la chiave `title`. Ogni blocco SAMI diventa un blocco JSON, nello stesso ordine, con lo stesso testo.

I tempi SAMI restano esatti nel file JSON?

Sì, al millisecondo — che è la precisione massima di entrambi i formati. SAMI scrive un istante come `Start=4126` 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 SAMI su due righe?

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

I blocchi SAMI 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 SMI 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 SMI?

Sì, e ha un elenco suo: convertendo JSON in SMI si perdono stile e karaoké. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.

L’uscita JSON conserva la codifica del file SMI?

No: l’uscita è UTF-8, con fine riga Unix e senza BOM, qualunque codifica usasse il file SMI. 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