Converter JSON para SMI
Ou cole o texto da legenda
O que esta conversão altera
2 coisas são descartadas ou precisam de uma decisão
- Estilo
todo o estilo exceto negrito e itálico (cor, contorno, sombra, margens)
- 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 SMI. Arraste um arquivo — ou cole o texto — e receba a versão SMI 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: estilo e karaokê não têm para onde ir no SMI. 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 SMI
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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>Hello world.<br>Second line.
<SYNC Start=2000>
<P>
<SYNC Start=2500>
<P>Plain line.<br><i>Styled</i> line.
<SYNC Start=4000>
<P>
<SYNC Start=4500>
<P>Roger: I am here.
<SYNC Start=6000>
<P>
</BODY>
</SAMI>
Perdidos nesta saída: estilo 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
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=0>
<P>First.
<SYNC Start=1000>
<P>
<SYNC Start=1000>
<P>Second.
<SYNC Start=2000>
<P>
<SYNC Start=2000>
<P>Third.
<SYNC Start=3000>
<P>
</BODY>
</SAMI>
É 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
Que estilo do JSON sobrevive no SMI?
A ênfase, escrita no texto como tags: negrito, itálico, sublinhado e uma cor saem como b, i, u e font color, que o navegador aplica. O que o SMI não carrega é a tabela de estilos do JSON — fonte, tamanho, contorno, sombra e margens somem, e a página que exibe a legenda a estiliza com o próprio CSS.
O que acontece com o karaokê do JSON para o SMI?
O tempo se perde; as palavras ficam. O karaokê vive nos trechos marcados que um bloco JSON carrega, mostrando quando cada sílaba deve acender, e o SMI não tem recurso para registrar instantes dentro de uma linha — as marcas saem e as sílabas chegam como texto SMI comum.
Como fica a saída quando JSON vira SMI?
Fica no formato SMI: sem números de bloco e sem linha de timecode, cada legenda é uma tag SYNC Start= com o texto num P embaixo, e — como um SYNC substitui o que estava na tela — logo depois vem um bloco P com que devolve a tela ao vazio. Cada bloco JSON vira um bloco SMI, na mesma ordem, com o mesmo texto.
Os tempos do JSON ficam exatos no arquivo SMI?
Ficam exatos ao milissegundo, o limite dos dois formatos. O JSON escreve 4126 e o SMI escreve Start=4126 para o mesmo instante; não há arredondamento nem deslocamento, e um bloco que durava 2,9 segundos continua durando.
As duas linhas de um bloco JSON sobrevivem no SMI?
Sobrevivem como duas linhas separadas por um br, que é como o SAMI escreve uma quebra rígida. O vínculo se mantém: as duas linhas do JSON continuam sendo uma única legenda no SMI, e o player as mostra juntas.
A ordem dos blocos JSON se mantém no SMI?
Se mantém, e a ordenação pelo início acontece no caminho, do mais cedo para o mais tarde, como os players esperam. Se o JSON trouxe os blocos fora de sequência, o SMI os reorganiza; é uma mudança de estrutura, não de conteúdo, e é intencional.
Consigo converter o SMI de volta para JSON?
Consegue, e há uma lista própria: converter SMI para JSON descarta o conteúdo específico do formato, como o bloco STYLE e os blocos P de limpeza. A lista é diferente da de cima porque os dois formatos guardam coisas diferentes.
O SMI de saída mantém a codificação do arquivo JSON?
Não: o SMI gerado é UTF-8, com fim de linha Unix e sem BOM, mesmo que o JSON tenha chegado em UTF-16 ou numa codificação de byte único do Windows. A conversão de codificação ocorre na leitura e o painel de resultado informa quando aconteceu.