Ir para o conteúdo principal
SubtitleMatrix

Converter SRT para JSON

Ou cole o texto da legenda

O que esta conversão altera

Nada se perde nesta direção — cada recurso do formato de origem tem para onde ir no formato de destino.

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 transforma um arquivo de legendas em dados estruturados: um documento JSON que lista cada bloco com início, fim e texto. O esquema é deste site e é deliberadamente pequeno — um número de versão e um arranjo de blocos, com os tempos em milissegundos inteiros em vez de carimbos.

Milissegundos porque não precisam ser interpretados para servir. A menor resolução que qualquer formato daqui guarda é 1 ms, e um inteiro não é mal lido por causa de convenção de vírgula ou ponto. Uma linha sem formatação é uma string; uma linha com itálico, negrito ou cor vira um objeto com o texto e a lista de tags que se aplicam a ele, cada uma dizendo o que é e quais caracteres cobre.

O resultado é um arquivo para carregar num script, comparar com diff ou guardar em controle de versão, e convertê-lo de volta devolve as legendas. Como em toda ferramenta daqui, o trabalho acontece no navegador.

Exemplos

Um arquivo SRT comum, convertido para JSON

Entrada

1
00:00:01,000 --> 00:00:03,500
Hello there.

2
00:00:03,500 --> 00:00:06,000
<i>Whispering</i> now.
And a second line.

3
00:00:06,000 --> 00:00:09,250
<b>Bold</b> statement.

Saída

{
  "version": 1,
  "cues": [
    {
      "id": "1",
      "start": 1000,
      "end": 3500,
      "lines": [
        "Hello there."
      ]
    },
    {
      "id": "2",
      "start": 3500,
      "end": 6000,
      "lines": [
        {
          "text": "Whispering now.",
          "tags": [
            {
              "kind": "italic",
              "start": 0,
              "end": 10
            }
          ]
        },
        "And a second line."
      ]
    },
    {
      "id": "3",
      "start": 6000,
      "end": 9250,
      "lines": [
        {
          "text": "Bold statement.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            }
          ]
        }
      ]
    }
  ]
}

Aqui nada é descartado: compare os dois lados linha por linha.

A mesma conversão com uma entrada problemática

Entrada

1
0:00:01,00 --> 0:00:03,500
<B>Bold</B> and <I>italic</I>.


2
00:00:03,500 --> 00:00:06,000


3
00:00:08,000 --> 00:00:09,000
Last one.

Saída

{
  "version": 1,
  "cues": [
    {
      "id": "1",
      "start": 1000,
      "end": 3500,
      "lines": [
        {
          "text": "Bold and italic.",
          "tags": [
            {
              "kind": "bold",
              "start": 0,
              "end": 4
            },
            {
              "kind": "italic",
              "start": 9,
              "end": 15
            }
          ]
        }
      ]
    },
    {
      "id": "2",
      "start": 3500,
      "end": 6000,
      "lines": []
    },
    {
      "id": "3",
      "start": 8000,
      "end": 9000,
      "lines": [
        "Last one."
      ]
    }
  ]
}

É o tipo de dano que arquivos reais trazem: fins de linha misturados, espaços soltos, campos vazios. Compare com o exemplo organizado acima para ver o que o analisador perdoa.

Perguntas frequentes

Que esquema o JSON de saída segue?

O deste site, documentado pelo exemplo acima: um número de versão e o arranjo cues. Cada bloco tem id, start e end em milissegundos e uma lista de linhas. Não há metadado escondido nem dependência de formato de terceiros.

Por que milissegundos e não carimbos de tempo?

Para o arquivo ser usado sem passar antes por um analisador. Somar, comparar ou ordenar tempos vira aritmética de inteiro, enquanto uma string como 00:00:01,000 precisa ser decodificada e pode ser decodificada errado.

Como a formatação é representada?

Linha sem estilo continua string. Linha com estilo vira um objeto com text e um arranjo tags, e cada tag diz o tipo e os deslocamentos de início e fim dentro daquele texto. Convertendo o JSON de volta, a formatação é escrita outra vez.

É seguro editar o arquivo à mão?

É, e converter de volta é o teste. Se o arquivo for lido, a conversão reproduz os blocos com os tempos que você deu — então uma ida e volta pelo conversor revela um erro de digitação rapidamente.

Posso carregar o JSON num script?

É para isso que ele existe. Leia o arranjo cues, pegue start e end como números e junte as linhas — cada linha é uma string ou um objeto cujo campo text guarda as palavras.

Ferramentas relacionadas