Ir para o conteúdo principal
SubtitleMatrix

Converter ASS para SSA

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

O que esta conversão altera

Nada se perde nesta direção — cada recurso do formato de origem tem para onde ir no formato de destino.

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.

ASS e SSA são dois dialetos da mesma linguagem de script. O mais novo, Advanced SubStation Alpha, declara ScriptType v4.00+ e guarda os estilos numa seção V4+; o original declara v4.00 e usa uma seção V4. As linhas Dialogue, os códigos de sobreposição e a notação de tempo são compartilhados.

Por isso a conversão é uma reescrita de cabeçalho, não uma tradução das legendas. O trabalho está na tabela de estilo, porque as colunas diferem entre os dialetos — inclusive as de cor: o V4+ tem colunas separadas para contorno e sombra, e o V4 as chama de tertiary e back. O conversor lê o arquivo pela lista de colunas que ele declara e grava a lista que o destino espera, levando cada valor para a coluna correspondente.

O título da seção e o tipo de script declarado também são atualizados, porque um arquivo que diz v4.00+ mas usa colunas V4 é recusado pela maioria dos renderizadores. Nada nos seus tempos ou no texto muda, e a conversão roda no navegador.

Exemplos

Um arquivo ASS comum, convertido para SSA

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

[Script Info]
Title: Example
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,0,0,1,2,2,2,10,10,10,,1
Style: Title,Arial,36,&H0000FFFF,&H000000FF,,&H00000000,-1,0,1,2,2,2,10,10,10,,1

[Events]
Format: Marked, 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: 0,0:00:21.00,0:00:24.00,Default,,0,0,0,,Top left

Aqui nada é descartado: o cabeçalho muda de dialeto e os eventos atravessam como estavam.

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

[Script Info]
Title: Dirty sample
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,-1,0,1,2,2,2,10,10,10,,1

[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
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,,{\pos(320,240)}Both, wrong order
Dialogue: 0,0:00:13.00,0:00:16.50,Default,,0,0,0,,One decimal centisecond
Dialogue: 0,0:00:17.00,0:00:20.00,Default,,0,0,0,,Soft\Nbreak

É 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 muda de fato entre ASS e SSA?

Três coisas: a lista de colunas da tabela de estilo, a linha que declara o tipo de script e o nome da seção de estilos. As linhas Dialogue, os códigos de sobreposição e a sintaxe dos carimbos são os mesmos, então nenhum bloco precisa ser tocado.

Minha cor de contorno sobrevive?

Sobrevive. A coluna de contorno do V4+ e a coluna tertiary do SSA guardam o mesmo tipo de valor; só o nome no cabeçalho muda. O conversor mapeia uma para a outra em vez de descartar qualquer das duas.

O arquivo gerado toca em players antigos?

É o objetivo mais comum desta conversão. A saída declara o tipo de script antigo e usa a seção de estilos antiga, que é o que esses renderizadores esperam; um arquivo novo carregado num player velho costuma mostrar o diálogo e ignorar todo o estilo.

Os tempos são alterados?

Não. Os dois dialetos escrevem o tempo como horas, minutos, segundos e centésimos, então cada carimbo é copiado sem alteração e as legendas continuam sincronizadas com o mesmo vídeo.

E se meu arquivo usar colunas do outro dialeto?

Ele é lido pela lista de colunas declarada no próprio arquivo, não pela posição. Qualquer que seja a ordem, os valores são casados com as funções certas, e a saída é escrita na ordem que o dialeto de destino especifica.

Esta conversão perde alguma coisa?

Nada nesta direção: os dois dialetos expressam o mesmo conjunto de recursos. Um código de sobreposição que o SSA também aceita atravessa intacto; o que muda é o cabeçalho e a ordem das colunas.

Ferramentas relacionadas