Converter JSON para TTML
Ou cole o texto da legenda
O que esta conversão altera
1 coisa é descartada ou precisa de uma decisã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 TTML. Arraste um arquivo — ou cole o texto — e receba a versão TTML 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: o karaokê não tem para onde ir no TTML. 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 TTML
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
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:02.000">Hello world.<br/>Second line.</p>
<p begin="00:00:02.500" end="00:00:04.000">Plain line.<br/><span tts:fontStyle="italic">Styled</span> line.</p>
<p begin="00:00:04.500" end="00:00:06.000">Roger: I am here.</p> </body>
</tt>
Perdido nesta saída: 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
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:01.000">First.</p>
<p begin="00:00:01.000" end="00:00:02.000">Second.</p>
<p begin="00:00:02.000" end="00:00:03.000">Third.</p> </body>
</tt>
É 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
O que acontece com o karaokê do JSON para o TTML?
O tempo se perde e as palavras ficam. O karaokê está nos trechos marcados que um bloco JSON carrega, indicando o instante em que cada sílaba acende, e o TTML não tem como registrar um momento dentro de uma linha — então as marcas saem e as sílabas chegam como texto TTML comum.
Como fica a saída quando JSON vira TTML?
Fica no formato TTML: sem números de bloco, cada legenda é um elemento p com os atributos begin e end, dentro de um body, e o documento inteiro abre com a declaração XML. Cada bloco JSON vira uma legenda TTML, na mesma ordem, com o mesmo texto.
Os tempos do JSON ficam exatos no arquivo TTML?
Ficam exatos ao milissegundo, que é o limite dos dois formatos. O JSON escreve 4126 e o TTML escreve 00:00:04.126 para o mesmo instante; nada é arredondado nem deslocado, e um bloco que ficava na tela por 2,9 segundos continua ficando.
As duas linhas de um bloco JSON sobrevivem no TTML?
Sobrevivem como duas linhas separadas por um br, que é como o TTML escreve uma quebra rígida. O vínculo se mantém: as duas linhas do JSON continuam pertencendo a uma única legenda no TTML, e o player as exibe juntas.
A ordem dos blocos JSON se mantém no TTML?
Se mantém, com os blocos ordenados pelo início no caminho, do mais cedo para o mais tarde, que é como os players leem. Se o seu JSON listava os blocos fora de ordem, o TTML os devolve em ordem; a mudança é de estrutura, não de conteúdo, e é proposital.
Consigo converter o TTML de volta para JSON?
Consigo, e essa direção tem lista própria: converter TTML para JSON descarta o conteúdo específico do formato, como a estrutura de div e os atributos de estilo do TTML. A lista difere da de cima porque os dois formatos guardam coisas diferentes.
O TTML de saída mantém a codificação do arquivo JSON?
Não: o TTML gerado é 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 leitura, e o painel de resultado avisa quando isso acontece.