Ir para o conteúdo principal
SubtitleMatrix

Converter JSON para VTT

Ou cole o texto da legenda

O que esta conversão altera

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

  • Estilo

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

  • Posição

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

  • Karaokê

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

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 VTT. Arraste um arquivo — ou cole o texto — e receba a versão VTT 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: estilo, posicionamento e karaokê não têm para onde ir no VTT. 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 VTT

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

WEBVTT

1
00:00:00.000 --> 00:00:02.000
Hello world.
Second line.

2
00:00:02.500 --> 00:00:04.000
Plain line.
<i>Styled</i> line.

3
00:00:04.500 --> 00:00:06.000
Roger: I am here.

Perdidos nesta saída: estilo, posicionamento e karaokê. 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

WEBVTT

00:00:00.000 --> 00:00:01.000
First.

00:00:01.000 --> 00:00:02.000
Second.

00:00:02.000 --> 00:00:03.000
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

Que estilo do JSON sobrevive no VTT?

A ênfase, escrita no texto como tags: negrito, itálico, sublinhado e uma cor saem como b, i, u e font color, que os navegadores aplicam. O que o arquivo VTT não carrega é a tabela de estilos de que o JSON depende — fonte, tamanho, contorno, sombra e margens vão embora, e a página que embute a legenda a estiliza com o próprio CSS.

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

O VTT não sabe dizer onde a legenda é desenhada, então a posição guardada em cada bloco é descartada na saída do JSON e todo bloco volta para a posição padrão que o player escolhe — na maioria deles, a parte de baixo do quadro, centralizada.

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

O tempo se vai; as palavras ficam. O karaokê vive nos trechos de karaokê que um bloco JSON carrega, que marcam quando cada sílaba acende, e o VTT não tem como registrar um instante dentro de uma linha — então as marcas saem e as sílabas chegam como texto VTT comum.

Como fica a saída quando JSON vira VTT?

Fica com a cara do VTT: uma linha de identificador opcional acima de cada bloco, que nenhum player exibe. Cada bloco JSON vira um bloco VTT, na mesma ordem, com o mesmo texto.

Os tempos do JSON ficam exatos no arquivo VTT?

Ficam exatos ao milissegundo, que é o máximo dos dois formatos. O JSON escreve um instante como 4126 e o VTT escreve o mesmo instante como 00:00:04.126; nada é arredondado nem deslocado entre eles, e um bloco que ficava 2,9 segundos na tela continua ficando.

As duas linhas de um bloco JSON sobrevivem no VTT?

Sobrevivem como duas linhas, uma embaixo da outra. O vínculo se mantém: as duas linhas do JSON continuam pertencendo a uma única legenda no VTT, e o player as mostra juntas.

Dá para converter o VTT de volta para JSON?

Dá, e essa direção tem lista própria: converter VTT para JSON descarta o conteúdo específico do formato, como as configurações de NOTE, STYLE e REGION. A lista é diferente da de cima porque os dois formatos guardam coisas diferentes.

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

Não: a saída é UTF-8, com fim de linha Unix e sem BOM, qualquer que tenha sido a codificação do JSON. Um arquivo que chega em UTF-16 ou numa codificação de byte único do Windows é decodificado na entrada (o painel de resultado avisa quando isso acontece); o que sai é sempre o mesmo VTT em UTF-8.

Ferramentas relacionadas