Converter ASS para CSV
Ou cole o texto da legenda
O que esta conversão altera
4 coisas são descartadas ou precisam de uma decisão
- Estilo
todo o estilo (negrito, itálico, cor, contorno, sombra)
- Posição
a posição na tela (cada bloco volta à posição padrã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 escreve um script ASS como tabela: três colunas — start, end e text — uma linha por evento Dialogue. É a forma mais direta de revisar o texto num editor de planilhas, filtrar por tempo ou comparar episódios lado a lado.
O CSV guarda três coisas por bloco, e o ASS costuma guardar muito mais. Fica para trás a tabela de estilo completa — fonte, corpo, cores, contorno, sombra, margens —, o posicionamento por coordenadas, o karaokê e o conteúdo que só existe no modelo do script, como o bloco [Script Info], as linhas Comment: e os anexos [Fonts] e [Graphics].
Para manter a tabela utilizável, os carimbos são escritos com ponto, e o texto com vírgula ou quebra de linha vai entre aspas. Um arquivo ou uma temporada inteira, com a conversão rodando no navegador.
Exemplos
Um arquivo ASS comum, convertido para CSV
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
start,end,text
00:00:01.000,00:00:04.000,Hello there.
00:00:05.000,00:00:08.500,<i>Italic</i> and <b>bold</b> text.
00:00:09.000,00:00:12.000,Positioned
00:00:13.000,00:00:16.000,<c>ka</c><c>ra</c><c>o</c><c>ke</c>
00:00:17.000,00:00:20.000,"Line one
Line two"
00:00:21.000,00:00:24.000,Top left
Descartado nesta saída: estilo declarado, posição, karaokê e o resto do script. 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 timecodeSaída
start,end,text
00:00:01.000,00:00:04.000,"Hello, world"
00:00:05.000,00:00:08.000,"{\fad(300,300)}Unmodelled override"
00:00:09.000,00:00:12.000,"Both, wrong order"
00:00:13.000,00:00:16.500,One decimal centisecond
00:00:17.000,00:00:20.000,"Soft
break"
É 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
Que colunas a tabela tem ao sair de um ASS?
start, end e text, com uma linha de cabeçalho. As três são preenchidas a partir de cada evento Dialogue; o estilo, a camada e o efeito do evento não têm coluna e não são gravados.
O que o ASS perde ao virar CSV?
A tabela de estilo inteira, a posição em coordenadas e o karaokê — e também o [Script Info], as linhas Comment: e os anexos de fonte e imagem. O CSV modela um bloco de texto com dois tempos, e tudo o que o renderizador do ASS faria com ele fica fora.
As posições \pos e \an vão para alguma coluna?
Não há coluna para elas. O texto é copiado com os códigos que estiverem escritos nele, mas a tabela não interpreta nem traduz posição; o relatório de perdas registra o que foi descartado do modelo.
Como fica um evento com duas linhas?
Vira uma linha da tabela com a quebra dentro da célula, entre aspas, que é como o CSV representa quebra de linha. O par continua um bloco só.
O CSV gerado usa vírgula ou ponto nos carimbos?
Ponto. A vírgula já é o separador de campos: um carimbo como 0:00:04.13 escrito com vírgula dividiria a linha em duas colunas e deslocaria o texto. Com ponto, o valor fica inteiro e dispensa aspas.
Posso editar a tabela e voltar para legenda?
Pode, e a volta será para um formato de bloco como o SRT: o CSV não reconstitui a tabela de estilo que esta conversão descartou. O texto e os tempos, contudo, voltam inteiros.