Ir para o conteúdo principal
SubtitleMatrix

Formato de legenda JSON

O que este formato consegue expressar

Estilo do texto
Fontes, cor, contorno, sombra
Posição na tela
Sim
Sincronização karaokê
Sim
Quebras de linha dentro de um bloco
Sim
Linha do tempo
Hora de início e de término para cada bloco
Resolução dos tempos
1 ms
Tempos guardados como números de quadro
Não
Texto da direita para a esquerda
Sim

Exemplos

Um arquivo JSON típico e o que se lê dele

Arquivo

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

O que ele contém

3 cues, 5 lines of text

  0 ms → 2000 ms
    Hello world.
    Second line.
    [Default; position 100,200 (center)]
  2500 ms → 4000 ms
    Plain line.
    Styled line.   [italic ×1]
  4500 ms → 6000 ms
    Roger: I am here.
    [speaker Roger]

Outside the cues:
  styles     Default
  other keys version, title, fps, generator — carried through untouched

O lado direito não é um arquivo convertido: é o que este site lê do lado esquerdo, e o ponto de partida de qualquer conversão desse arquivo.

Um arquivo JSON problemático e o que ainda se lê dele

Arquivo

{
    "cues": [
        { "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
        { "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
        { "start": 9000, "end": 8000, "lines": ["End before start."] },
        { "start": "nope", "end": 12000, "lines": ["No readable start."] },
        { "start": 13000, "lines": ["No end at all."] }
    ],
    "generator": "subtitlematrix boundary",
    "styles": {},
    "title": "Fixture: boundary"
}

O que ele contém

3 cues, 4 lines of text

  1500 ms → 3000 ms
    Unpadded timecode.
  4001 ms → 5000 ms
    Fractional start.
    Second.
  9000 ms → 9001 ms
    End before start.

Outside the cues:
  other keys generator, title — carried through untouched

Reported while reading — repaired or skipped, never silently:
  2 × entries with no readable start and end time (they are not cues, so they were skipped)
  1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
  1 × cues whose end time was not after their start time (they were given a 1ms duration)

Arquivos reais chegam com BOM, fim de linha do Windows, uma linha solta antes de um timecode ou um timecode que não dá para ler. Nada disso lança erro: o que não for compreendido é informado, nunca descartado em silêncio.

Converter SubtitleMatrix JSON para outro formato

Cada uma destas roda inteiramente no seu navegador. Os rótulos dizem o que aquela direção custa antes de você abri-la.

Convertendo para este formato

JSON é um dos formatos de legenda que este site trata, e esta página é a referência dele: o que consegue guardar, o que não consegue e uma página para cada formato para o qual você pode converter.

A tabela acima é tudo — não existe uma lista escondida de recursos. Quando uma linha diz não, é exatamente isso que se perde ao converter para JSON, e cada página de conversão ligada abaixo avisa antes de você abrir um arquivo.

Todas essas conversões rodam no seu navegador. Nada é enviado e nenhuma conta é necessária, o que importa para material sob NDA, prontuário de paciente ou embargo de transmissão.

Perguntas frequentes

O que é um arquivo JSON de legendas?

Aqui, .json é o formato próprio deste site: um campo de versão, uma tabela de estilos opcional e um vetor de blocos cujos tempos estão em milissegundos. Ele é deliberadamente sem perdas em relação a tudo o que os outros formatos conseguem expressar, e é feito para scripts e pipelines, não para players.

O JSON guarda estilo?

Guarda, e mais do que os outros: uma tabela com fonte, tamanho, cores, contorno e margens, além de marcações por bloco dentro do texto, de modo que uma linha pode ser negrito, ter cor e posição sem depender de um estilo nomeado. O karaokê também fica registrado. Aqui a tabela é um objeto styles com o nome do estilo como chave, e o estilo de cada bloco viaja no vetor tags de cada linha em vez de virar código dentro do texto — por isso nada precisa ser escapado na entrada nem na saída.

Todo bloco JSON guarda início e fim?

Guarda, e um instante em JSON se escreve 4126. Essa é a precisão máxima do formato, o milissegundo, e o número é exato, então um bloco pode ser curto, longo ou se sobrepor ao seguinte sem que nada fique implícito.

Para qual formato devo converter um JSON?

Nenhum formato deste site carrega tudo o que um arquivo JSON guarda, então não existe direção gratuita: cada página de conversão nomeia a própria lista de perdas. Escolha o destino pela lista com que você consegue conviver, não pelo formato que você viu mais vezes.

Consigo abrir um arquivo JSON num editor de texto?

Consegue, desde que mantenha vírgulas e aspas no lugar. Os tempos são milissegundos em números simples, então um bloco em 1,25 segundo aparece como a chave start com o valor 1250.