Ir para o conteúdo principal
SubtitleMatrix

Converter ASS para TTML

Conversão de formatosAdvanced SubStation Alpha (ASS)
Ou cole o texto da legenda

O que esta conversão altera

2 coisas são descartadas ou precisam de uma decisão

  • Karaokê

    a sincronização karaokê (destaque por sílaba)

  • 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 um script ASS para TTML, o formato de entrega usado por emissoras e plataformas. O resultado é um documento XML com um p por evento, carregando begin e end.

O texto chega inteiro e o estilo também: o TTML consegue expressar fonte, cor, contorno e posição, então a tabela de estilo do ASS não é descartada como nas conversões para formatos de bloco. O que se perde é o karaokê — os códigos de sílaba saem e as palavras ficam — e o conteúdo que só existe no modelo do ASS.

Esse conteúdo é o [Script Info] — inclusive o título, que o TTML não tem onde guardar —, a tabela de estilo como seção, as linhas Comment: e os anexos [Fonts] e [Graphics]. Para um script com estilo feito à mão, essa é a perda que mais aparece. Um arquivo ou uma temporada inteira, no navegador.

Exemplos

Um arquivo ASS comum, convertido para TTML

Entrada

[Script Info]
Title: Example
ScriptType: v4.00+
WrapStyle: 0

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,&H00000000,&H00000000,-1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello there.
Dialogue: 0,0:00:05.00,0:00:08.50,Default,,0,0,0,,{\i1}Italic{\i0} and {\b1}bold{\b0} text.
Dialogue: 0,0:00:09.00,0:00:12.00,Title,,0,0,0,,{\pos(320,240)}Positioned
Dialogue: 0,0:00:13.00,0:00:16.00,Default,,0,0,0,,{\k50}ka{\k30}ra{\k20}o{\k10}ke
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Line one\NLine two
Dialogue: 1,0:00:21.00,0:00:24.00,Default,,0,0,0,,{\an7}Top left

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:01.000" end="00:00:04.000">Hello there.</p>
<p begin="00:00:05.000" end="00:00:08.500"><span tts:fontStyle="italic">Italic</span> and <span tts:fontWeight="bold">bold</span> text.</p>
<p begin="00:00:09.000" end="00:00:12.000">Positioned</p>
<p begin="00:00:13.000" end="00:00:16.000">karaoke</p>
<p begin="00:00:17.000" end="00:00:20.000">Line one<br/>Line two</p>
<p begin="00:00:21.000" end="00:00:24.000">Top left</p>  </body>
</tt>

Descartado nesta saída: o karaokê e o que vive fora do evento. O resto confere linha por linha.

A mesma conversão com uma entrada problemática

Entrada

[Script Info]
; 一份真实的脏文件:BOM + CRLF + 认不出的覆写码 + Comment + 坏时间码
Title: Dirty sample
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,1,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Fonts]
fontname: Arial
!!!!!!!!!!!!!!!!!!!!!!!!!!!!

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Comment: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,这是一条注释,不该变成字幕
Dialogue: 0,0:00:01.00,0:00:04.00,Default,,0,0,0,,Hello, world
Dialogue: 0,0:00:05.00,0:00:08.00,Default,,0,0,0,,{\fad(300,300)}Unmodelled override
Dialogue: 0,0:00:09.00,0:00:12.00,Default,,0,0,0,,{\an7\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.5,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\nbreak
Dialogue: 0,0:00:xx.00,0:00:24.00,Default,,0,0,0,,Broken timecode

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:01.000" end="00:00:04.000">Hello, world</p>
<p begin="00:00:05.000" end="00:00:08.000">{\fad(300,300)}Unmodelled override</p>
<p begin="00:00:09.000" end="00:00:12.000">Both, wrong order</p>
<p begin="00:00:13.000" end="00:00:16.500">One decimal centisecond</p>
<p begin="00:00:17.000" end="00:00:20.000">Soft<br/>break</p>  </body>
</tt>

É o tipo de dano que scripts reais trazem: BOM, fins de linha misturados e um carimbo com um decimal só. Compare com o exemplo organizado acima para ver o que o analisador perdoa.

Perguntas frequentes

O que acontece com o karaokê do ASS no TTML?

O tempo se perde e as palavras ficam. O karaokê vive nos códigos que marcam quando cada sílaba acende, e o TTML não tem como registrar um instante dentro de uma linha — então as marcas saem e as sílabas chegam como texto comum.

A tabela de estilo do ASS é preservada no TTML?

É, porque o TTML expressa estilo próprio: fonte, cor, contorno e posição têm equivalente. O que não atravessa é a tabela como seção do script nem o [Script Info]; os valores de estilo entram no documento, o cabeçalho do ASS não.

O título do script aparece no TTML?

Não. O TTML não define um campo de título no documento e o conversor não inventa um; o valor que estava no [Script Info] é descartado, e o relatório de perdas o lista.

As linhas Comment: viram legendas?

Não. Só eventos Dialogue: são convertidos. Comment:, Picture: e Sound: não representam fala na tela e não têm contraparte no TTML, então ficam fora.

Um evento com duas linhas vira o quê?

Um único p com duas linhas separadas por um br. O par herda o mesmo begin e end, então as duas linhas aparecem e desaparecem juntas.

E os anexos [Fonts] e [Graphics]?

Não são levados. São recursos para o renderizador do ASS, não texto de legenda, e o TTML não tem seção para embutir fontes ou imagens dessa forma.

Ferramentas relacionadas