Andare al contenuto principale
SubtitleMatrix

Convertire LRC in JSON

Conversione dei formatiTesti di canzoni (LRC)
Oppure incollare il testo dei sottotitoli

Opzioni

Usata quando la sorgente non ha orari di fine (testo semplice, LRC). La timeline dell’uscita è qui generata anziché convertita, quindi è questo numero che si otterrà.

Cosa cambia questa conversione

1 elemento viene scartato o richiede una decisione

  • Temporizzazione

    gli orari di fine dei blocchi — la sorgente non li registra, quindi quelli dell’uscita saranno generati anziché convertiti

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.

Un JSON serve quando i sottotitoli devono entrare in uno script o in un’altra applicazione. Questa pagina converte LRC in un array di cue con `id`, `start`, `end` e `lines`, e lo fa interamente nel browser: nessun file viene caricato, nessun account è richiesto.

Poiché LRC non registra la fine di una riga, la fine viene ricavata dall’inizio della riga seguente, e per l’ultima riga vale la durata impostata sulla pagina. Le righe che condividono un timestamp diventano due voci dell’array `lines` dello stesso cue, così l’originale e la traduzione restano uniti. La dimensione che si perde è la temporizzazione, perché i tempi di fine non c’erano nel file.

L’elenco in cima nasce dal confronto fra le capacità dei due formati e non dal file, quindi è lo stesso prima e dopo il caricamento. Il titolo dell’intestazione viene letto come metadato, l’offset resta letterale. La coda accetta più file, li elabora in ordine e restituisce un solo ZIP.

Esempi

Un file LRC tipico, convertito in JSON

Ingresso

[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.

Uscita

{
  "version": 1,
  "title": "Sample Song",
  "cues": [
    {
      "start": 12000,
      "end": 15300,
      "lines": [
        "First line of the song."
      ]
    },
    {
      "start": 15300,
      "end": 18000,
      "lines": [
        "Second line.",
        "Second line, translated."
      ]
    },
    {
      "start": 18000,
      "end": 21500,
      "lines": [
        ""
      ]
    },
    {
      "start": 21500,
      "end": 23500,
      "lines": [
        "Final line."
      ]
    }
  ]
}

In questa conversione si perde la temporizzazione. Tutto il resto resta identico, riga per riga.

La stessa conversione su un input difficile

Ingresso

[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]

Uscita

{
  "version": 1,
  "cues": [
    {
      "start": 3000,
      "end": 5500,
      "lines": [
        "Out of order."
      ]
    },
    {
      "start": 5500,
      "end": 7000,
      "lines": [
        "Leading zero omitted, one decimal."
      ]
    },
    {
      "start": 7000,
      "end": 9000,
      "lines": [
        "Second with no centiseconds.",
        "Repeated chorus line."
      ]
    },
    {
      "start": 9000,
      "end": 12000,
      "lines": [
        "Repeated chorus line."
      ]
    },
    {
      "start": 12000,
      "end": 14000,
      "lines": [
        ""
      ]
    }
  ]
}

Questo è un file reale, non un esempio pulito: BOM, fine riga di Windows e righe fuori ordine. Il confronto con l’esempio qui sopra dice che cosa viene corretto e che cosa viene solo segnalato.

Domande frequenti

Come ottiene una fine, una riga LRC convertita in JSON?

Dall’inizio della riga successiva. Un verso dura fino al verso seguente, esattamente come fa un lettore di testi, quindi la fine è calcolata e non inventata. L’ultima riga, che non ha seguito, riceve la durata impostata sulla pagina.

Che aspetto ha l’output quando LRC diventa JSON?

Ha l’aspetto del JSON: un array di oggetti cue, ciascuno con `id`, `start` ed `end` propri, più l’array `lines`. Ogni cue LRC diventa un cue JSON, nello stesso ordine e con lo stesso testo.

Come esce in JSON un cue LRC su due righe?

Come due voci nell’array `lines` del cue. L’accoppiamento resta: le due righe LRC appartengono ancora a un solo sottotitolo nell’output JSON, e il lettore le mostra insieme.

I cue LRC mantengono l’ordine nell’output JSON?

Sì, e lungo la strada vengono ordinati per tempo di inizio: prima i più antichi, come si aspetta ogni formato di questo sito. Se il file LRC elencava i cue fuori sequenza, il JSON li rimette in ordine: è un cambiamento nella struttura del file, non nel contenuto.

Posso riconvertire il JSON in LRC?

Sì, e ha un elenco suo: convertire JSON in LRC perde temporizzazione, formattazione, posizionamento, karaoke e precisione. Quell’elenco è diverso da quello qui sopra perché i due formati conservano cose diverse.

L’output JSON conserva la codifica del file LRC?

No: l’output è UTF-8, con fine riga Unix e senza BOM, qualunque codifica usasse il file LRC. Un file in UTF-16 o in una codifica a byte singolo di Windows viene decodificato in ingresso, con una nota nel pannello del risultato; ciò che esce è sempre lo stesso JSON in UTF-8.

Strumenti correlati