Ir para o conteúdo principal
SubtitleMatrix

Converter JSON para SRT

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 (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)

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 lê um documento JSON que descreve legendas e escreve um arquivo SRT a partir dele. As formas que aceita são o esquema que este site grava — um número de versão e depois um vetor de blocos — e a forma simples, em que o documento é apenas a lista de blocos. Em qualquer dos casos, o que ela precisa de cada bloco é início, fim e texto; os tempos estão em milissegundos e vão diretos para os timecodes do SRT, que têm a mesma resolução, então nada é arredondado no caminho.

Tudo o que o documento traz e o SRT não consegue guardar é informado em vez de descartado em silêncio: título, taxa de quadros e tabela de estilos não têm lugar num arquivo de legenda que é só blocos numerados. Quando um bloco usa formatação — itálico, negrito, cor — ela é escrita como a tag correspondente, e o que a tag não expressa aparece na lista acima.

Um arquivo danificado não interrompe a conversão. O analisador lê o que consegue e conserta um bloco cujo fim não é depois do início, porque um arquivo de legenda que você consegue carregar e corrigir vale mais do que uma mensagem de erro. Um conjunto inteiro de arquivos JSON converte numa passada, no seu navegador, e volta como um ZIP.

Exemplos

Um arquivo JSON típico, convertido para SRT

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

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

1
00:00:00,000 --> 00:00:01,000
First.

2
00:00:01,000 --> 00:00:02,000
Second.

3
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

Quais formas de JSON esta página aceita?

O documento que este site grava, com versão e vetor de blocos, e a forma de vetor equivalente, em que o arquivo é só a lista de blocos. O que importa é que cada bloco tenha início, fim e texto numa das formas reconhecidas.

O que acontece com title, styles e fps do meu JSON?

São lidos e depois informados como descartados, porque o SRT não tem campo para eles. A taxa de quadros em especial não tem para onde ir — o SRT guarda tempo de relógio, não quadros — então ela aparece na lista acima em vez de ser usada em silêncio.

Os milissegundos são arredondados na saída?

Não. O SRT guarda milissegundos e o arquivo JSON está escrito em milissegundos, então cada início e cada fim é transferido exatamente e a linha do tempo não desliza.

E se o início de um bloco vier depois do fim?

O conversor conserta em vez de recusar o arquivo, para que um documento editado à mão ainda produza um SRT carregável. Confira os tempos desse bloco contra o vídeo, porque o arquivo estava avisando que algo saiu errado.

Dá para converter de ida e volta sem perder nada?

Converter para JSON e de volta reproduz a linha do tempo com exatidão e devolve a formatação que o JSON descreve: itálico, negrito e cores viram tags e voltam como tags. O que não sobrevive ao percurso é tudo o que o próprio SRT não guarda, que é exatamente o que está na lista acima.

Ferramentas relacionadas