De qué se compone un archivo SRT
Un archivo SRT es una lista de bloques numerados. Cada bloque tiene tres partes: un número, un tiempo de inicio y otro de fin escritos como horas:minutos:segundos,milisegundos, y una o dos líneas de texto. Una línea en blanco cierra el bloque.
329
00:24:22,584 --> 00:24:23,784
absence ...
Un reproductor de video solo lee los tiempos. Muestra el texto desde el tiempo de inicio hasta el de fin e ignora todo lo demás. Por eso una traducción puede leerse perfectamente y aun así reproducirse mal: las palabras están bien, pero van asociadas a los tiempos equivocados.
Las tres formas en que una traducción rompe la sincronización
Estos ejemplos proceden de nuestra prueba con cuatro trabajos largos, en la que tres modelos de chat tradujeron al español, cada uno en una sola respuesta, el mismo archivo SRT de 1,200 líneas y 85 minutos.
1. Una línea se une a la anterior. El original tenía "...take advantage of Lady Bracknell's temporary" en la línea 328 y "absence ..." en la 329. Un modelo puso la frase completa en la línea 328 y eliminó la 329. En pantalla, "absence" aparece ahora un segundo antes y el intervalo de la línea 329 queda vacío.
2. Todo lo que sigue a una línea omitida se renumera. El mismo modelo numeró después el resto del archivo desde la 329 sin dejar ningún hueco. Tras una segunda fusión en la línea 357, 870 de las 1,200 líneas tenían un número distinto al del original. El archivo sigue reproduciéndose. Pero si tú o tu editor comparan la traducción con el original por número de línea, cada línea posterior a la 329 se empareja con la equivocada.
3. Cambia un dígito en un código de tiempo. Otro modelo escribió 00:54:55,839 --> 00:54:51,039 en una línea que era 00:54:45,839 --> 00:54:51,039. Ahora la línea termina antes de empezar. Según el reproductor, se omite, parpadea sin llegar a verse o hace que el archivo no se cargue.
Un desfase de todo el archivo, en el que cada línea va desplazada la misma cantidad desde la primera, es otro problema: los subtítulos se hicieron para otro montaje o para otra velocidad de fotogramas del video. La traducción no lo causa.
La comprobación de 2 minutos
Abre el original y la traducción lado a lado en cualquier editor de texto.
- Última línea. Ve al final de ambos archivos. El último número y el último código de tiempo deben ser idénticos. Si la traducción termina en 1,198 y el original en 1,200, dos líneas se fusionaron o se perdieron.
- Tres líneas del medio. Busca en la traducción tres códigos de tiempo tomados del original, aproximadamente a un cuarto, a la mitad y a tres cuartos del recorrido. Cada uno debe tener el mismo número en ambos archivos. El primer punto donde los números difieren es donde desapareció una línea.
- Tiempos imposibles. Busca cualquier línea cuyo tiempo final sea anterior a su tiempo de inicio. En un archivo largo, un pequeño script o la comprobación de errores de un editor de subtítulos las encuentra al instante.
- Los últimos diez minutos. Carga la traducción en tu reproductor y salta cerca del final. Si allí las líneas aparecen a tiempo, es muy probable que el archivo esté bien.
Si tienes Python, este breve script ejecuta las comprobaciones 1 a 3 en cualquier par de archivos (python3 srtcheck.py original.srt translated.srt). En las tres traducciones de nuestra prueba, detectó exactamente los errores descritos arriba.
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]}")
Si la traducción pasa las cuatro comprobaciones, úsala. Si falla alguna, normalmente es más rápido volver a traducir con una herramienta que conserve los tiempos que arreglar el archivo a mano.
La longitud de línea es otra comprobación aparte
Las traducciones al español, alemán o francés suelen quedar más largas que el inglés. La guía de estilo de Netflix para inglés (EE. UU.) permite 42 caracteres por línea y dos líneas por subtítulo. En nuestra prueba, la cantidad de líneas traducidas con alguna línea de más de 42 caracteres fue de entre 32 y 447 de 1,200, según el modelo. Nuestra propia herramienta produjo 105, así que conviene revisarlo uses lo que uses: las líneas largas son difíciles de leer, pero no rompen la sincronización.
Cómo evitar el problema
Los errores anteriores ocurren porque al modelo se le pide que escriba de nuevo los números y los tiempos junto con la traducción. Lo mejor es mantenerlos fuera de su alcance. Nuestro traductor de subtítulos lee tu archivo .srt o .vtt, envía solo el texto en bloques de hasta 60 líneas, vuelve a pedir cualquier línea que falte y copia cada número y cada tiempo de tu original. En el mismo archivo de prueba de 1,200 líneas, las 1,200 líneas volvieron con números y códigos de tiempo idénticos.
La primera parte de cada trabajo es gratis y no requiere cuenta. Una película o temporada completa, hasta 5,000 líneas en hasta 30 archivos, cuesta $5, con pago único. Los destinos más populares tienen sus propias páginas: SRT a español, árabe y persa.
Método y datos
Fuentes
- 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