Convertire JSON in LRC
Oppure incollare il testo dei sottotitoli
Cosa cambia questa conversione
5 elementi vengono scartati o richiedono una decisione
- Temporizzazione
gli orari di fine dei blocchi (il formato di uscita registra solo quando un blocco inizia)
- Stile
tutto lo stile (grassetto, corsivo, colore, contorno, ombra)
- Posizionamento
il posizionamento sullo schermo (ogni blocco torna alla posizione predefinita)
- Karaoke
la temporizzazione karaoke (evidenziazione per sillaba)
- Precisione
la precisione della temporizzazione — l’orologio dell’uscita è più grossolano, quindi ogni timestamp è arrotondato al 10 ms più vicino
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 LRC. Si trascina il file nel riquadro, oppure si incolla il testo, e si riprende indietro la versione LRC. 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: tempi di fine, stile, posizione, karaoke e precisione non hanno dove stare in LRC. 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 LRC
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
[ti:Fixture: typical]
[00:00.00]Hello world.
[00:00.00]Second line.
[00:02.50]Plain line.
[00:02.50]Styled line.
[00:04.50]Roger: I am here.
In questa conversione si perdono: tempi di fine, stile, posizione, karaoke e precisione. 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
[00:00.00]First.
[00:01.00]Second.
[00:02.00]Third.
È 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
Che fine fa l’istante di fine di ogni blocco JSON?
LRC registra quando una riga comincia e nient’altro: un lettore di testi tiene la riga finché non parte la successiva, quindi un istante di fine sarebbe superfluo. Ogni fine viene scartata e ogni inizio JSON resta intatto.
Che fine fanno grassetto, corsivo e colore passando da JSON a LRC?
LRC non conserva alcuno stile, quindi va perso tutto: i `tags` che una riga del blocco porta con sé, o una voce dell’oggetto `styles` del documento, non hanno dove atterrare, e ogni riga viene scritta come testo semplice. Le parole in sé restano intatte.
Che fine fa la posizione sullo schermo passando da JSON a LRC?
LRC non sa dire dove viene disegnato un sottotitolo, quindi la posizione conservata con ogni blocco viene persa all’uscita dal JSON, e ogni blocco torna alla posizione predefinita scelta dal lettore: il fondo del fotogramma, centrato, per la maggior parte di essi.
Che fine fa il karaoke passando da JSON a LRC?
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 LRC non ha modo di registrare un istante dentro una riga: i segni cadono e le sillabe arrivano come testo LRC normale.
Perché i tempi si sono spostati passando da JSON a LRC?
LRC scrive l’istante come `[00:04.12]` dove JSON lo scrive come `4126`: un centesimo di secondo contro un millesimo, quindi ogni timecode viene arrotondato ai 10 ms più vicini e 00:00:04,126 diventa 4,13 secondi. Nulla viene allungato o riordinato e nessun blocco si muove di più di 5 ms; se però i sottotitoli vanno allineati a un altro file, questo è l’unico punto in cui la conversione smette di essere esatta.
Che aspetto ha il risultato quando JSON diventa LRC?
Come LRC: niente numeri di blocco, ogni riga porta il proprio tempo fra parentesi quadre. Ogni blocco JSON diventa un blocco LRC, nello stesso ordine, con lo stesso testo.
Come esce in LRC un blocco JSON su due righe?
Come due righe con lo stesso tempo, che è il modo in cui LRC dice «queste due stanno insieme». L’abbinamento sopravvive: le due righe JSON restano un solo sottotitolo nel file LRC e il lettore le mostra insieme.
I blocchi JSON mantengono l’ordine nel file LRC?
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’LRC li rimette in ordine: è un intervento sulla struttura del file, non sul contenuto, ed è voluto.
Posso riconvertire l’LRC in JSON?
Sì, e ha un elenco suo: la conversione da LRC a JSON perde i tempi di fine, perché in JSON ogni blocco ne ha uno e l’LRC non li registra. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.
Il file LRC 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 LRC in UTF-8.