Converter ASS para LRC
Ou cole o texto da legenda
O que esta conversão altera
5 coisas são descartadas ou precisam de uma decisão
- Tempos
as horas de término dos blocos (o formato de saída só registra quando um bloco começa)
- 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 extrai a letra de um script ASS e a grava como LRC, o formato das letras sincronizadas: cada linha começa com um carimbo entre colchetes e não existe hora de fim.
É a conversão mais destrutiva da família ASS, porque o destino só modela uma coisa — o instante em que uma linha começa. Saem o fim de cada bloco, o estilo, a posição, o karaokê e todos os construtos do script fora do Dialogue:. A resolução, ao menos, coincide: o ASS e o LRC contam em centésimos, então nenhum carimbo é arredondado nesta passagem.
O que sobra é o texto e o instante de entrada de cada linha, na ordem do vídeo. Um arquivo ou uma temporada inteira, sempre no navegador.
Exemplos
Um arquivo ASS comum, convertido para LRC
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
[ti:Example]
[00:01.00]Hello there.
[00:05.00]Italic and bold text.
[00:09.00]Positioned
[00:13.00]karaoke
[00:17.00]Line one
[00:17.00]Line two
[00:21.00]Top left
Descartado nesta saída: o fim de cada bloco, o estilo, a posição e o karaokê. O texto 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
[ti:Dirty sample]
[00:01.00]Hello, world
[00:05.00]{\fad(300,300)}Unmodelled override
[00:09.00]Both, wrong order
[00:13.00]One decimal centisecond
[00:17.00]Soft
[00:17.00]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
O que sobra de um script ASS num arquivo LRC?
O texto de cada evento Dialogue e o instante em que ele começa. Tudo o mais — fim do bloco, estilo, posição, karaokê e o restante do script — não tem representação no LRC.
Por que o fim de cada bloco é descartado?
Porque o LRC não tem campo de fim: o tocador mantém a linha até o próximo carimbo chegar. Manter um fim seria gravar um dado que o formato não define e que nenhum leitor espera.
O karaokê de um ASS se perde no LRC?
Perde-se por completo, inclusive as sílabas como unidades separadas: o LRC tem uma linha de texto por carimbo. Se o objetivo era preservar o destaque por sílaba, este não é o destino certo.
Os tempos do ASS chegam exatos ao LRC?
Chegam, porque os dois formatos contam em centésimos. 0:00:04.13 e [00:04.13] nomeiam o mesmo instante; o ASS não tinha resolução mais fina para perder nesta passagem.
O que acontece com a posição e a tabela de estilo?
São descartadas. O LRC não descreve onde o texto aparece nem como é desenhado, então a tabela de estilo inteira e os códigos de posição ficam fora do arquivo.
Para que serve converter um ASS em LRC?
Para reaproveitar o texto de um script em um player de letras ou num tocador de música. O resultado lê como uma letra sincronizada, não como uma legenda; é uma redução deliberada, não uma conversão entre iguais.