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.

  1. Ú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.
  2. 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.
  3. 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.
  4. 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

  1. SubRip (SRT file format) — Wikipedia
  2. English (USA) Timed Text Style Guide — Netflix Partner Help Center
  3. Timed Text Style Guide: General Requirements — Netflix Partner Help Center