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 untouchedO 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.
- Estilo
- Posição
- Karaokê
- Tempos
- Estilo
- Posição
- Karaokê
- Precisão
- Estilo
- Posição
- Karaokê
- Taxa de quadros
- Estilo
- Posição
- Karaokê
- Estilo
- Posição
- Karaokê
- Tempos
- Estilo
- Posição
- Karaokê
- Quebras de linha
Convertendo para este formato
- SubRip (SRT) → SubtitleMatrix JSON
- WebVTT (VTT) → SubtitleMatrix JSON
- Advanced SubStation Alpha (ASS) → SubtitleMatrix JSON
- SubStation Alpha (SSA) → SubtitleMatrix JSON
- YouTube SBV → SubtitleMatrix JSON
- SAMI (SMI) → SubtitleMatrix JSON
- LRC Lyrics → SubtitleMatrix JSON
- MicroDVD → SubtitleMatrix JSON
- TTML (Timed Text) → SubtitleMatrix JSON
- Plain Text (TXT) → SubtitleMatrix JSON
- CSV Spreadsheet → SubtitleMatrix JSON
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.