Convertire SRT in JSON
Oppure incollare il testo dei sottotitoli
Cosa cambia questa conversione
In questa direzione non si perde nulla: ogni caratteristica del formato di partenza ha un posto dove andare nel formato di destinazione.
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 trasforma un file di sottotitoli in dati strutturati: un documento JSON che elenca ogni blocco con l’istante di inizio, quello di fine e il testo. Lo schema è quello del sito ed è volutamente minimo: un numero di versione e un array di blocchi, con i tempi in millisecondi interi invece che come codici temporali.
I millisecondi si usano perché non vanno interpretati: la risoluzione più fine di tutti i formati qui trattati è un millisecondo, e un intero non può essere letto male per via di una virgola o di un punto. Una riga senza formattazione resta una stringa; una riga con corsivo, grasso o colore diventa un oggetto con il testo e i tag che lo riguardano, ciascuno con il tipo e gli intervalli di caratteri coperti.
Il risultato è un file che si carica in uno script, si confronta con un diff o si mette sotto controllo di versione, e riconvertirlo restituisce i sottotitoli. Qui non si perde nulla, e il lavoro avviene nel browser.
Esempi
Un file SRT tipico, convertito in JSON
Ingresso
1
00:00:01,000 --> 00:00:03,500
Hello there.
2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.
3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.
Uscita
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
"Hello there."
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": [
{
"text": "Whispering now.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 10
}
]
},
"And a second line."
]
},
{
"id": "3",
"start": 6000,
"end": 9250,
"lines": [
{
"text": "Bold statement.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
}
]
}
]
}
]
}
Qui non si perde nulla: confrontare le due parti riga per riga.
La stessa conversione su un input irregolare
Ingresso
1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.
2
00:00:03,500 --> 00:00:06,000
3
00:00:08,000 --> 00:00:09,000
Last one.
Uscita
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 3500,
"lines": [
{
"text": "Bold and italic.",
"tags": [
{
"kind": "bold",
"start": 0,
"end": 4
},
{
"kind": "italic",
"start": 9,
"end": 15
}
]
}
]
},
{
"id": "2",
"start": 3500,
"end": 6000,
"lines": []
},
{
"id": "3",
"start": 8000,
"end": 9000,
"lines": [
"Last one."
]
}
]
}
L’input irregolare mostra come i blocchi vengano riordinati e come un tempo impossibile venga riparato prima di finire nei millisecondi.
Domande frequenti
Quale schema segue l’output JSON?
Quello del sito, documentato per esempio nel pannello qui sopra: un numero di versione e poi un array di blocchi. Ogni blocco ha un `id`, un `start` e un `end` in millisecondi e un elenco di righe. Non ci sono metadati nascosti né dipendenze da formati di terzi.
Perché il JSON usa millisecondi invece dei codici temporali SRT?
Perché il file si usa senza doverlo prima interpretare. Sommare due tempi, confrontarli o ordinarli sono normali operazioni su interi, mentre una stringa come `00:00:01,000` va decodificata e può essere decodificata male.
Come viene rappresentata nel JSON la formattazione SRT?
Una riga semplice resta una stringa. Una riga con formattazione diventa un oggetto con il testo e un array di tag; ogni tag dice che tipo è e dove inizia e finisce dentro quel testo. Riconvertendo il JSON, la formattazione viene riscritta.
È sicuro modificare a mano il JSON prodotto da SRT?
Sì, e la riconversione è la verifica: se il file viene letto, la conversione riproduce i blocchi con i tempi assegnati. Un passaggio di andata e ritorno è quindi un modo rapido per trovare un refuso.
Posso caricare in uno script il JSON prodotto da SRT?
È esattamente a questo che serve. Si legge l’array `cues`, si prendono `start` ed `end` come numeri e si uniscono le righe: ogni riga è una stringa oppure un oggetto il cui campo `text` contiene le parole.