Convertire VTT 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 trasforma un file WebVTT 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.
Gli identificatori facoltativi di WebVTT hanno un posto: un blocco che comincia con intro o sign-1 conserva quella parola nel campo id, perché il formato lo permette e perdere un’informazione che si può tenere non avrebbe senso. 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. Restano fuori solo l’intestazione, i blocchi NOTE, STYLE e REGION e le impostazioni per blocco, che non hanno un campo corrispondente.
Il risultato si carica in uno script, si confronta con un diff o si mette sotto controllo di versione, e riconvertirlo restituisce i sottotitoli. Il lavoro avviene nel browser.
Esempi
Un file WebVTT tipico, convertito in JSON
Ingresso
WEBVTT
intro
00:00:01.000 --> 00:00:04.000
Hello there.
00:00:04.500 --> 00:00:08.000 align:start position:10%
Second line with <i>italics</i>.
Uscita
{
"version": 1,
"cues": [
{
"id": "intro",
"start": 1000,
"end": 4000,
"lines": [
"Hello there."
]
},
{
"start": 4500,
"end": 8000,
"lines": [
{
"text": "Second line with italics.",
"tags": [
{
"kind": "italic",
"start": 17,
"end": 24
}
]
}
]
}
]
}
In questo output si perdono: i contenuti specifici del formato. Il resto corrisponde riga per riga.
La stessa conversione su un input irregolare
Ingresso
a stray comment line
cue-id-1
00:00:01.000 --> 00:00:02.000
No header, two lines before the timecode.
Uscita
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 2000,
"lines": [
"No header, two lines before the timecode."
]
}
]
}
Il file irregolare mostra che un identificatore non numerico viene conservato e che i blocchi vengono riordinati per tempo di inizio.
Domande frequenti
Che aspetto ha il JSON?
Un numero di versione e un array di blocchi. Ogni blocco ha un `id` facoltativo, un `start` e un `end` in millisecondi interi e un array `lines` in cui ogni riga è una stringa oppure un oggetto con il testo e le campionature che porta — corsivo, grassetto e simili — come scostamenti di inizio e fine. Non ci sono codici temporali da interpretare né centesimi di cui preoccuparsi.
Perché la lista delle perdite da VTT a JSON è così breve?
Perché lo schema è costruito per contenere tutto ciò che il modello a blocchi del convertitore sa trasportare, e questo copre quasi tutto ciò che ha WebVTT. Resta il materiale che WebVTT tiene fuori dai blocchi: intestazione, commento, blocchi NOTE, STYLE e REGION e impostazioni per blocco.
Gli identificatori dei blocchi VTT vengono conservati nel JSON?
Sì. WebVTT ammette un identificatore libero come `intro` o `sign-1` prima di un blocco, e questo schema ha un campo `id` per riceverlo: viene scritto invariato. Convertendo invece in SRT, i blocchi verrebbero rinumerati, perché il contatore SRT deve essere numerico.
I tempi VTT cambiano in qualche modo nel JSON?
No. Entrambe le parti lavorano in millisecondi interi, quindi `00:00:01.234` diventa 1234 e torna indietro senza arrotondamenti né spostamenti.
È sicuro far passare una trascrizione VTT da questa pagina JSON?
Sì. Lettura e scrittura avvengono nel browser, quindi il file trascinato qui non viene mai inviato a un server: conta più del solito per questa coppia, perché il JSON è ciò che consuma uno script o una pipeline, e spesso sono proprio le trascrizioni che non possono uscire dall’edificio.