Ir para o conteúdo principal
SubtitleMatrix

Converter JSON para LRC

Ou cole o texto da legenda

O que esta conversão altera

5 coisas são descartadas ou precisam de uma decisão

  • Tempos

    as horas de término dos blocos (o formato de saída só registra quando um bloco começa)

  • Estilo

    todo o estilo (negrito, itálico, cor, contorno, sombra)

  • Posição

    a posição na tela (cada bloco volta à posição padrão)

  • Karaokê

    a sincronização karaokê (destaque por sílaba)

  • Precisão

    a precisão dos tempos — o relógio da saída é mais grosseiro, então cada marca de tempo é arredondada para o 10 ms mais próximo

Esta lista vem da matriz de capacidades destes dois formatos, não do arquivo específico que você carregou. Um arquivo específico pode perder mais se usar recursos que o formato permite mas a matriz não modela.

Esta página converte JSON em LRC. Arraste um arquivo — ou cole o texto — e receba a versão LRC de volta. A conversão roda inteiramente no seu navegador, então nada é enviado e nenhuma conta é necessária.

Estes dois formatos não guardam as mesmas coisas, e a diferença não é cosmética: sincronização, estilo, posicionamento, karaokê e precisão não têm para onde ir no LRC. A lista acima vem do que cada um dos formatos consegue expressar, não do seu arquivo, então a resposta é a mesma antes de você carregar qualquer coisa.

Um arquivo está bom, e uma temporada inteira também: a fila processa na ordem e os resultados descem juntos num único ZIP.

Exemplos

Um arquivo JSON típico, convertido para LRC

Entrada

{
  "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"
    }
  ]
}

Saída

[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.

Perdidos nesta saída: sincronização, estilo, posicionamento, karaokê e precisão. Todo o resto corresponde linha a linha.

A mesma conversão sobre uma entrada problemática

Entrada

[
    { "start": 0, "end": 1000, "lines": ["First."] },
    { "start": 1000, "end": 2000, "text": "Second." },
    "not an object",
    { "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]

Saída

[00:00.00]First.
[00:01.00]Second.
[00:02.00]Third.

É o tipo de dano que os arquivos reais têm: fim de linha misturado, espaço sobrando, campos vazios. Compare com o exemplo organizado acima para ver o que o analisador perdoa.

Perguntas frequentes

O que acontece com o fim de cada bloco JSON no LRC?

O LRC registra quando uma linha começa e nada mais: um player de letras mantém a linha até a próxima começar, então um fim seria redundante. Todo fim é descartado e todo início do JSON passa intacto.

O que acontece com negrito, itálico e cor do JSON para o LRC?

O LRC não guarda estilo de espécie alguma, então tudo se perde: as tags que a linha de um bloco carrega e as entradas do objeto styles do documento não têm onde aterrissar, e cada linha é escrita como texto puro. As palavras em si não são tocadas.

O que acontece com a posição na tela do JSON para o LRC?

Como o LRC não expressa onde a legenda é desenhada, a posição guardada em cada bloco some na saída do JSON e todos os blocos retornam à posição padrão do player, em geral a parte de baixo do quadro, centralizada.

O que acontece com o karaokê do JSON para o LRC?

O tempo se vai, as palavras ficam. O karaokê está nos trechos marcados de um bloco JSON, que indicam quando cada sílaba acende; o LRC não registra instantes dentro de uma linha, então as marcas saem e as sílabas viram texto LRC comum.

Por que os tempos se movem de JSON para LRC?

O LRC guarda o tempo como [00:04.12] e o JSON como 4126 — centésimo contra milésimo — então cada timecode é arredondado para os 10 ms mais próximos. Nada é esticado nem reordenado e nenhum bloco se move mais de 5 ms, mas na hora de alinhar com outro arquivo esse é o ponto em que a conversão deixa de ser exata.

Como fica a saída quando JSON vira LRC?

Fica no formato LRC: sem números de bloco, cada linha carrega o próprio timestamp entre colchetes, e o título do documento vira uma etiqueta ti no topo. Cada bloco JSON vira uma linha LRC, na mesma ordem, com o mesmo texto.

As duas linhas de um bloco JSON sobrevivem no LRC?

Sobrevivem como duas linhas com o mesmo timestamp, que é o jeito LRC de dizer que as duas andam juntas. O vínculo se mantém: as duas linhas do JSON continuam sendo uma legenda só no LRC, e o player as exibe juntas.

Consigo converter o LRC de volta para JSON?

Consigo, e essa direção tem lista própria: converter LRC para JSON descarta a sincronização, porque um LRC só marca começos e o JSON precisa de início e fim. A lista difere da de cima porque os dois formatos guardam coisas diferentes.

O LRC de saída mantém a codificação do arquivo JSON?

Não. O LRC sai em UTF-8, com fim de linha Unix e sem BOM, independentemente da codificação do JSON. Se o arquivo de origem estava em UTF-16 ou numa codificação de byte único do Windows, ele é decodificado na entrada, com aviso no painel de resultado.

Ferramentas relacionadas