Português (Brasil)

Vídeo e legendas · Kit de ferramentas de legendas

O que significa ‘limpar’ um arquivo de legenda: tags, códigos e formatação perdida

· Como funciona

legendas processamento de texto formatos de arquivo

Uma linha de legenda contendo uma tag de colchete angular e um código de colchete acima da mesma linha reduzida a palavras simples
Ilustração vetorial original ToolAcre

Os arquivos de legenda coletam lixo: tags do tipo HTML, códigos de estilo de outros formatos, listas técnicas perdidas e finais de linha mistos. Este post explica o que é cada tipo de desordem, de onde ela vem e como uma etapa limpa a remove sem tocar nas palavras.

As legendas exibem '{\an8}' e '<i>' na tela – os sintomas visíveis de um arquivo de legenda impuro

Quando uma legenda exibe os caracteres de uma tag em vez de obedecê-la, o jogador está dizendo que ela não implementa aquela marcação. SRT não tem especificação de formatação, então o suporte é convencional: muitos jogadores respeitam um pequeno conjunto de tags do tipo HTML, e qualquer coisa fora desse conjunto é desenhada como texto literal. Um arquivo que é renderizado corretamente em um player e mostra chaves em outro não foi alterado; apenas o conjunto de tags que estão sendo honradas possui.

É por isso que a limpeza é uma operação real, e não uma arrumação cosmética. A desordem não é uma decoração feia. São instruções escritas para um formato que um player diferente lê como diálogo, e a solução é remover as instruções deixando cada palavra intacta.

De onde vem a confusão: exportações de formatos com muitos estilos, saída OCR e editores que adicionam sua própria marcação

A maior parte da desordem chega por meio da conversão. Um arquivo criado em um formato com muitos estilos, como ASS ou SSA carrega diretivas de posicionamento e aparência embutidas, e um conversor que mapeia os tempos fielmente muitas vezes passará essas diretivas como texto. Os editores de legendas adicionam sua própria marcação para identificação e ênfase do locutor, e o reconhecimento óptico de caracteres das legendas gravadas introduz pontuação perdida e espaços duplicados que nenhum autor digitou.

Nenhuma dessas fontes está malformada em seu próprio mundo. O bloco de substituição ASS é significativo em ASS. O problema é que SRT não tem equivalente, então uma conversão sem perdas produz um arquivo onde a instrução sobrevive como caracteres e não como comportamento.

Tags de formatação — itálico, negrito e tags de fonte, que os jogadores as respeitam e quais as mostram literalmente

Tags com colchetes angulares são tratadas primeiro, com uma expressão regular que remove tudo entre um menor que e o próximo maior que. Isso abrange tags em itálico e negrito, tags de classe WebVTT, como uma anotação de classe de sinalização, e tags de voz que nomeiam um locutor. A propriedade importante é que esta é uma substituição de texto, não um analisador HTML, e não tenta combinar tags de abertura com tags de fechamento.

Essa simplicidade tem um custo que vale a pena conhecer. Uma linha de diálogo que contenha genuinamente um menor que e um maior que, como uma desigualdade falada, terá o texto entre eles removido junto com os colchetes. É raro em diálogos e comum em legendas técnicas, por isso vale a pena escanear o resultado de uma passagem de limpeza em material que discute código ou matemática.

Códigos de posicionamento e estilo — o que códigos como {\an8} significam em ASS/SSA e por que são ruídos em SRT

Os códigos de chaves são removidos por uma segunda substituição cobrindo tudo entre uma chave de abertura e uma chave de fechamento. Nos formatos SubStation, esses são blocos de substituição, e o mais visto é aquele que move uma linha para o topo do quadro para não colidir com o texto gravado. Outros definem fonte, cor, rotação ou tempo de karaokê.

Em um arquivo SRT nenhum deles significa nada, e é por isso que são removidos em vez de traduzidos. Uma diretiva de posição não tem equivalente SRT para traduzir: o formato simplesmente não carrega posicionamento. A remoção do código perde a intenção do autor de que a linha fique no topo do quadro, e essa perda é real, mas é preferível a imprimir o código para o visualizador.

Desordem invisível — marcas de ordem de bytes, finais de linha mistos CRLF e LF e espaços à direita

A desordem invisível é tratada mais cedo, durante a análise, e vale a pena separá-la porque não faz parte do texto. Uma marca de ordem de byte no início do arquivo é removida antes de qualquer outra coisa, caso contrário ela será anexada ao primeiro número de índice e custará a primeira sugestão. Os retornos de carro são normalizados, tanto o par do Windows quanto um retorno de carro solitário, portanto, um arquivo editado em duas plataformas é dividido em blocos corretamente.

Os espaços em branco dentro de uma sugestão são tratados com as tags. As execuções de dois ou mais espaços ou tabulações são reduzidas para um único espaço, cada linha é cortada individualmente e a sugestão como um todo é cortada depois que as linhas são reunidas novamente. As entidades de caracteres são deliberadamente deixadas de lado: uma entidade de e comercial é o conteúdo que um visualizador deve ver, não uma marcação, e um limpador que a decodificasse estaria editando o diálogo em vez de remover instruções.

Exemplo resolvido: limpando uma exportação 200-cue — o que muda, o que permanece e como verificar o resultado

Limpar uma exportação grande muda menos do que parece. Pegue um arquivo de duzentos cue onde um conversor prefixou o código do topo do quadro para sessenta cues e envolveu tags de ênfase em torno de mais quarenta. As duas substituições removem o código e as tags, a passagem de espaço em branco colapsa os espaços duplicados que as remoções deixam para trás e duzentas dicas tornam-se duzentas dicas com as mesmas palavras e os mesmos tempos.

Mais dois passos são importantes. Uma sugestão cujo conteúdo inteiro era um código perdido torna-se vazia quando o código desaparece, e as sugestões vazias são removidas em uma passagem separada, em vez de emitidas como blocos em branco, porque uma sugestão com carimbo de data e hora e sem texto é uma lacuna que alguns jogadores processam como um flash. Escrever o arquivo de volta renumera as sugestões de uma e as mantém contíguas, para que as remoções não deixem lacunas na sequência. Verifique o resultado comparando contagens de sugestões e verificando qualquer linha que originalmente continha uma entidade.

O que isto não cobre — reescrever o próprio texto, ortografia ou tradução; as palavras são suas

A limpeza remove marcações e não altera a linguagem. Ele não corrige a ortografia, expande abreviações, corrige erros de transcrição ou traduz. Se uma legenda disser a palavra errada, ela dirá a palavra errada depois, formatada corretamente. Esse limite é deliberado: seria impossível confiar em uma ferramenta que reescrevesse silenciosamente o diálogo em material que ela não entende.

Também não repara a estrutura. Um arquivo cujos blocos não possuem carimbos de data e hora tem um problema de análise, não de formatação, e a remoção de tags dele não produzirá dicas. As falhas de codificação estão igualmente fora do escopo. Um arquivo decodificado com o conjunto de caracteres errado produz dicas perfeitamente bem formadas cujo texto está errado, e nenhuma remoção de tag detecta isso, porque nada na estrutura está quebrado.

Conclusão: remova a marcação, mantenha o significado - como a etapa de limpeza do Subtitle Toolkit lida com a desordem comum e documenta o que deixa de lado

A regra é remover a marcação, manter o significado. Tags de colchetes e códigos de colchetes funcionam porque são instruções que um jogador ignora ou imprime. Espaços duplicados e preenchimento por linha funcionam porque são artefatos da remoção ou da exportação original. Entidades, pontuação e cada palavra permanecem, porque é isso que o espectador deve ler.

Execute uma exportação com muitas tags por meio do conversor do Subtitle Toolkit e compare-a com o original, em vez de confiar na saída rapidamente. Confirme se a contagem de sugestões permanece inalterada, exceto onde as sugestões estavam genuinamente vazias, verifique se qualquer linha contendo uma entidade ainda a contém e verifique as linhas que discutem código ou matemática em busca de texto perdido em um colchete angular perdido.