Converter TTML para SSA
Ou cole o texto da legenda
O que esta conversão altera
2 coisas são descartadas ou precisam de uma decisão
- Precisão
a precisão dos tempos — o relógio da saída é mais grosseiro, então cada marca de tempo é arredondada para o 10 ms mais próximo
- Conteúdo específico do formato
conteúdo que o formato de origem guarda fora de seus blocos (blocos que não são cue, texto de cabeçalho, configurações por bloco, eventos comentados) — o formato de destino não tem lugar para ele
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 TTML em SSA. Arraste um arquivo ou cole o texto e receba a versão SSA de volta. A conversão roda inteiramente no navegador, então nada é enviado e não há cadastro.
O SSA mede em centésimos de segundo, e o TTML em milissegundos: cada tempo é arredondado para os 10 ms mais próximos, então 4,126 s sai como 4,13 s, sem nenhum cue andar mais de 5 ms. A saída traz [Script Info], [V4 Styles] com um estilo Default e [Events] com as Dialogue.
A ênfase dentro do parágrafo vira código de override do SSA: itálico como {\i1}…{\i0} e cor como {\c&H000000FF&}…{\c}. O cabeçalho do TTML não acompanha: declaração XML, namespaces, <styling>, <layout>, metadados e referências style e region se perdem. Vários arquivos baixam em um ZIP.
Exemplos
Um arquivo TTML típico, convertido para SSA
Entrada
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
Saída
[Script Info]
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:03.50,Default,,0,0,0,,Hello {\i1}there{\i0}.
Dialogue: 0,0:00:03.50,0:00:06.00,Default,,0,0,0,,How are you?\NFine, thanks.
Perdido nesta saída: precisão e conteúdo específico do formato. O resto corresponde linha a linha.
A mesma conversão em uma entrada problemática
Entrada
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
Saída
[Script Info]
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.50,0:00:03.50,Default,,0,0,0,,Loaded from an offset and a duration.
Dialogue: 0,0:00:04.00,0:00:06.50,Default,,0,0,0,,A coarser clock spelling.
Dialogue: 0,0:00:07.00,0:00:08.48,Default,,0,0,0,,Frames, at 25fps.
Dialogue: 0,0:00:09.00,0:00:11.00,Default,,0,0,0,,{\c&H000000FF&}Half-open{\c} and Tom & Jerry.
É o tipo de dano que arquivos reais trazem — fins de linha misturados, espaços soltos, campos vazios. Compare com o exemplo organizado acima para ver o que o leitor tolera.
Perguntas frequentes
Como o SSA converte a cor de um span TTML em código de override?
A cor vira {\c&H000000FF&} antes do trecho e {\c} depois dele. O SSA guarda as cores em BGR, então #FF0000 aparece como 000000FF; o código sem valor devolve a cor ao padrão do estilo.
Por que os tempos do TTML perdem precisão no SSA?
Porque o SSA grava centésimos, no formato 0:00:04.13, enquanto o TTML grava milésimos. O arredondamento é para os 10 ms mais próximos, e nenhum cue se afasta mais de 5 ms do instante original.
As tabelas do <head> do TTML têm destino no SSA?
Não. Os estilos nomeados e as regiões existem apenas no documento TTML; o SSA tem sua própria seção [V4 Styles], preenchida com um Default em Arial 20, e não traduz os nomes s1 ou bottom.
Como um cue com duas linhas é escrito no SSA?
Em uma única Dialogue, com \N entre as linhas. O <br/> do TTML vira a quebra dura do SSA, e o evento mantém um Start e um End para o par.
O SSA gerado é compatível com players que leem legendas antigas?
É: usa ScriptType v4.00, [V4 Styles] e Dialogue com o campo Marked no início. A conversão roda no navegador, sem upload, e o lote pode ser baixado em um ZIP.