Como é feito um arquivo SRT
Um arquivo SRT é uma lista de blocos numerados. Cada bloco tem três partes: um número, um horário de início e de fim escritos como horas:minutos:segundos,milissegundos e uma ou duas linhas de texto. Uma linha em branco encerra o bloco.
329
00:24:22,584 --> 00:24:23,784
absence ...
Um player de vídeo lê apenas os horários. Ele mostra o texto do início ao fim indicados e ignora todo o resto. Por isso uma tradução pode estar perfeita de ler e mesmo assim ficar ruim na hora de assistir: as palavras estão certas, mas ligadas aos horários errados.
As três maneiras de a tradução quebrar a sincronia
Estes exemplos são do nosso teste com quatro tarefas longas, em que três chatbots traduziram, cada um em uma única resposta, o mesmo arquivo SRT de 1.200 linhas e 85 minutos para o espanhol.
1. Uma linha é unida à anterior. O original tinha "...take advantage of Lady Bracknell's temporary" na linha 328 e "absence ..." na linha 329. Um dos modelos colocou a frase inteira na linha 328 e apagou a linha 329. Na tela, "absence" agora aparece um segundo antes, e o intervalo de tempo da linha 329 fica vazio.
2. Tudo o que vem depois de uma linha perdida é renumerado. O mesmo modelo numerou o resto do arquivo a partir de 329, sem nenhuma lacuna. Depois de uma segunda união na linha 357, 870 das 1.200 linhas tinham um número diferente do original. O arquivo continua sendo reproduzido. Mas, se você ou seu editor compararem a tradução com o original pelo número da linha, cada linha depois da 329 será pareada com a errada.
3. Um dígito de um código de tempo muda. Outro modelo escreveu 00:54:55,839 --> 00:54:51,039 para uma linha que era 00:54:45,839 --> 00:54:51,039. Agora a linha termina antes de começar. Dependendo do player, ela é ignorada, pisca sem tempo algum na tela ou faz o arquivo não carregar.
Um deslocamento do arquivo inteiro, em que todas as linhas estão fora do tempo pela mesma diferença desde a primeira, é outro problema: as legendas foram feitas para outra versão ou outra taxa de quadros do vídeo. A tradução não causa isso.
A verificação de 2 minutos
Abra o original e a tradução lado a lado em qualquer editor de texto.
- Última linha. Vá até o final dos dois arquivos. O último número e o último código de tempo devem ser idênticos. Se a tradução termina em 1,198 e o original em 1,200, duas linhas foram juntadas ou perdidas.
- Três linhas do meio. Procure na tradução três códigos de tempo tirados do original, mais ou menos em um quarto, na metade e em três quartos do arquivo. Cada um deve ter o mesmo número nos dois arquivos. O primeiro ponto em que os números divergem é onde uma linha sumiu.
- Tempos impossíveis. Procure qualquer linha cujo tempo final seja anterior ao tempo inicial. Em um arquivo longo, um pequeno script ou a verificação de erros de um editor de legendas encontra isso na hora.
- Os últimos dez minutos. Abra a tradução no seu player e pule para perto do final. Se as linhas aparecerem no tempo certo ali, o arquivo muito provavelmente está certo.
Se você tem Python, este pequeno script executa as verificações 1 a 3 em qualquer par de arquivos (python3 srtcheck.py original.srt translated.srt). Nas três traduções do nosso teste, ele apontou exatamente os erros descritos acima.
import re, sys
def cues(path):
text = open(path, encoding="utf-8-sig").read().replace("\r", "")
return re.findall(r"^(\d+)\n(\d\d:\d\d:\d\d,\d{3}) --> (\d\d:\d\d:\d\d,\d{3})", text, re.M)
a, b = cues(sys.argv[1]), cues(sys.argv[2])
print(f"lines: {len(a)} original, {len(b)} translated")
print(f"last: {a[-1]} vs {b[-1]}")
times = {(s, e): n for n, s, e in a}
renumbered = sum(1 for n, s, e in b if (s, e) in times and times[(s, e)] != n)
changed = [n for n, s, e in b if (s, e) not in times]
broken = [n for n, s, e in b if e <= s]
missing = [n for n, s, e in a if (s, e) not in {(s2, e2) for _, s2, e2 in b}]
print(f"renumbered: {renumbered}, changed time codes: {changed[:10]}, "
f"end before start: {broken[:10]}, original lines missing: {missing[:10]}")
Se a tradução passar nas quatro verificações, pode usar. Se falhar em alguma, em geral é mais rápido traduzir de novo com uma ferramenta que preserve a sincronia do que corrigir o arquivo à mão.
O comprimento das linhas é uma verificação à parte
Traduções para espanhol, alemão ou francês costumam ficar mais longas que o inglês. O guia de estilo da Netflix para inglês (EUA) permite 42 caracteres por linha e duas linhas por legenda. No nosso teste, a quantidade de linhas traduzidas com alguma linha acima de 42 caracteres variou de 32 a 447 em 1,200, dependendo do modelo. Nossa própria ferramenta gerou 105, então vale conferir isso qualquer que seja a ferramenta que você use: linhas longas são difíceis de ler, mas não quebram a sincronia.
Como evitar o problema
Os erros acima acontecem porque o modelo precisa reescrever os números e os tempos junto com a tradução. O melhor é não deixar isso na mão dele. Nosso tradutor de legendas lê o seu arquivo .srt ou .vtt, envia apenas o texto em blocos de até 60 linhas, pede de novo qualquer linha que volte faltando e copia todos os números e tempos direto do seu original. No mesmo arquivo de teste de 1,200 linhas, todas as 1,200 linhas voltaram com números e códigos de tempo idênticos.
A primeira parte de cada tarefa é grátis e sem cadastro. Um filme ou uma temporada inteira, com até 5,000 linhas em até 30 arquivos, custa $5, em pagamento único. Os idiomas mais procurados têm páginas próprias: SRT para espanhol, árabe e persa.
Método e dados
Fontes
- SubRip (SRT file format) — Wikipedia
- English (USA) Timed Text Style Guide — Netflix Partner Help Center
- Timed Text Style Guide: General Requirements — Netflix Partner Help Center