Formato sottotitoli JSON
Cosa sa esprimere questo formato
- Stile del testo
- Caratteri, colore, contorno, ombra
- Posizionamento sullo schermo
- Sì
- Temporizzazione karaoke
- Sì
- Interruzioni di riga dentro un blocco
- Sì
- Timeline
- Orario di inizio e di fine per ogni blocco
- Risoluzione temporale
- 1 ms
- Temporizzazione memorizzata come numeri di fotogramma
- No
- Testo da destra a sinistra
- Sì
Esempi
Un file JSON tipico, e cosa se ne legge
File
{
"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"
}
]
}
Cosa contiene
3 cues, 5 lines of text
0 ms → 2000 ms
Hello world.
Second line.
[Default; position 100,200 (center)]
2500 ms → 4000 ms
Plain line.
Styled line. [italic ×1]
4500 ms → 6000 ms
Roger: I am here.
[speaker Roger]
Outside the cues:
styles Default
other keys version, title, fps, generator — carried through untouchedLa parte destra non è un file convertito: è ciò che questo sito legge dalla parte sinistra, e il punto di partenza di ogni conversione di quel file.
Un file JSON scomodo, e cosa se ne legge comunque
File
{
"cues": [
{ "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
{ "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
{ "start": 9000, "end": 8000, "lines": ["End before start."] },
{ "start": "nope", "end": 12000, "lines": ["No readable start."] },
{ "start": 13000, "lines": ["No end at all."] }
],
"generator": "subtitlematrix boundary",
"styles": {},
"title": "Fixture: boundary"
}
Cosa contiene
3 cues, 4 lines of text
1500 ms → 3000 ms
Unpadded timecode.
4001 ms → 5000 ms
Fractional start.
Second.
9000 ms → 9001 ms
End before start.
Outside the cues:
other keys generator, title — carried through untouched
Reported while reading — repaired or skipped, never silently:
2 × entries with no readable start and end time (they are not cues, so they were skipped)
1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
1 × cues whose end time was not after their start time (they were given a 1ms duration)I file reali arrivano con un BOM, fine riga di Windows, una riga vagante prima di un timecode o un timecode che non si riesce a leggere. Niente di tutto ciò solleva eccezioni: quello che non si capisce viene segnalato invece che scartato in silenzio.
Convertire SubtitleMatrix JSON in un altro formato
Ognuna di queste funziona interamente nel browser. Le etichette dicono cosa costa quella direzione prima di aprirla.
- Stile
- Posizionamento
- Karaoke
- Temporizzazione
- Stile
- Posizionamento
- Karaoke
- Precisione
- Stile
- Posizionamento
- Karaoke
- Frequenza dei fotogrammi
- Stile
- Posizionamento
- Karaoke
- Stile
- Posizionamento
- Karaoke
- Temporizzazione
- Stile
- Posizionamento
- Karaoke
- Interruzioni di riga
- Stile
- Posizionamento
- Karaoke
Conversione verso questo formato
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
JSON di SubtitleMatrix è uno dei formati di sottotitoli trattati da questo sito, e questa pagina ne è il riferimento: cosa sa conservare, cosa no, e una pagina per ogni formato in cui lo si può convertire.
La tabella qui sopra è tutto: non esiste un elenco di funzioni nascoste. Quando una riga dice no, è esattamente ciò che si perde convertendo in JSON, e ogni pagina di conversione linkata più sotto lo dichiara prima di aprire un file.
Ognuna di quelle conversioni gira nel browser. Nessun file viene caricato e non serve un account, il che conta per materiale coperto da riservatezza, per una cartella clinica o per un embargo di messa in onda.
Domande frequenti
Che cos’è un file JSON?
Qui `.json` è la forma di sottotitoli di questo sito: un campo di versione, una tabella di stili facoltativa e un array di blocchi con i tempi in millisecondi. È volutamente senza perdite rispetto a tutto ciò che gli altri formati sanno esprimere, ed è pensato per script e pipeline più che per i lettori.
JSON conserva lo stile?
Sì, e più degli altri: una tabella di stili con caratteri, dimensioni, colori, contorni e margini, più i codici per blocco dentro il testo, così una riga può essere grassetta, colorata e posizionata senza alcuno stile con nome. Anche il karaoke viene conservato. Qui la tabella è un oggetto `styles` indicizzato per nome dello stile, e lo stile del singolo blocco viaggia nell’array `tags` di ogni riga invece che come codice dentro il testo: per questo in ingresso e in uscita non va fatto alcun escape.
Ogni blocco JSON conserva sia un inizio sia una fine?
Sì, e un istante in un file JSON si legge `4126`. È la precisione massima di JSON, il millisecondo, e il numero è esatto, quindi un blocco può essere corto, lungo o sovrapporsi al successivo senza che nulla venga sottinteso.
In quale formato conviene convertire un JSON?
Nessun formato di questo sito prende tutto ciò che un file JSON contiene, quindi non esiste una direzione gratuita: ogni pagina di conversione dichiara il proprio elenco di perdite. Si sceglie la destinazione in base a quale di quegli elenchi si può accettare, non in base al formato che si è visto più spesso.
Posso aprire un file JSON in un editor di testo?
Sì, se si tengono a posto virgole e virgolette. I tempi sono millisecondi come numeri puri, quindi un blocco a 1,25 secondi è `"start": 1250`.