Resincronizar subtítulos con el audio
La primera ejecución descarga el motor de video: unos 31 MB, servidos por este sitio y almacenados en caché por el navegador después. Solo se usa para leer la pista de audio; los subtítulos se comparan con el propio sonido, sin modelo de voz y sin subir nada.
Opciones
Cuánto pueden estar desviados los subtítulos de donde deberían estar, en cualquier dirección. Es un ajuste de coste y riesgo más que de precisión: una ventana más amplia encuentra una deriva mayor, pero también da a la búsqueda más ocasiones de quedarse con una coincidencia que puntúa bien por casualidad. Nada más allá de aproximadamente un minuto viene de un recorte o un logotipo: tanta diferencia suele significar otro montaje de la película o un desajuste de velocidad de fotogramas, que esta página resuelve por separado. Elige la ventana más pequeña que cubra tu estimación.
Esta página arregla subtítulos que están en el orden correcto pero en los tiempos equivocados. Le das dos cosas —el archivo de subtítulos y el vídeo o audio al que pertenece— y calcula cuánto se ha desviado el texto, y después vuelve a escribir el archivo con todos los bloques desplazados. Un desfase de unos segundos viene de recortes y logotipos; un desfase que crece a lo largo de la película viene de una diferencia de velocidad de fotogramas, cuando un máster a 23,976 fps se emparejó con subtítulos cronometrados para 25 fps y el error ya es de minuto y medio al final de la primera hora.
La medición se hace a partir del propio audio. La página extrae una pista mono, la agrupa en fotogramas de veinte milisegundos de sonoridad y marca qué fotogramas contienen habla. Después hace una sola pregunta una y otra vez: para este desplazamiento y este cambio de velocidad, ¿cuánto del texto de los subtítulos cae sobre habla y no sobre silencio? La respuesta se puntúa por bloque y se promedia, y la pareja ganadora es la que se aplica. No interviene ningún reconocimiento de voz, y por eso tarda un par de segundos y por eso funciona cuando los subtítulos están en un idioma para el que no tienes modelo.
Como la puntuación es una medición y no una garantía, la página está construida para no hacer nada cuando la medición es débil. Cinco bloques o menos, una pista de audio sin habla detectable, una mejor puntuación que aun así cae en su mayoría sobre silencio, o dos alineamientos muy distintos que puntúan casi igual: cada uno de esos casos termina con un informe y sin archivo de subtítulos reescrito. Un fallo silencioso es mucho mejor aquí que uno seguro de sí mismo: unos subtítulos desplazados cinco segundos se ven desaliñados, pero unos subtítulos desplazados cinco segundos por una herramienta que afirmó haber acertado son difíciles de notar y difíciles de explicar.
Cuando el alineamiento es bueno obtienes dos archivos, porque los dos responden a preguntas distintas. El subtítulo corregido conserva el formato en que llegó, con el nombre film.synced.srt o la extensión que fuera, listo para reproducir. El informe es un archivo de texto pequeño con el desplazamiento en milisegundos, la razón aplicada, la puntuación, la confianza y una línea que dice si el archivo se tocó o no. Los dos salen de la misma ejecución, así que un lote de episodios produce una pareja emparejada para cada uno.
El trabajo es local. El audio lo descodifica ffmpeg compilado a WebAssembly, descargado una vez desde este sitio (unos 31 MB) y guardado después en caché; los subtítulos se analizan en la pestaña. Nada de tu película ni de tus subtítulos se envía a ningún sitio: no hay un paso de subida que evitar, lo que importa para material que no puede salir del equipo. La cancelación actúa entre pasos, antes de que empiece el siguiente, no en mitad de la descodificación o de la búsqueda.
Preguntas frecuentes
¿En qué se diferencia un desplazamiento medido del desfase fijo que escribo en la página de desplazamiento?
La página de desplazamiento aplica un número que ya conoces, así que sigue siendo correcto tanto si el audio está de acuerdo como si no. Esta página parte del extremo opuesto: supone que no sabes el número, lee la actividad de habla del audio y resuelve a la vez el desplazamiento y el cambio de velocidad. Por eso puede arreglar un problema de velocidad de fotogramas, que ningún desplazamiento único puede expresar: a 25 frente a 23,976 el error es cero al principio y crece unos 3,6 segundos por hora, así que un desplazamiento que repara el comienzo empeora el final.
¿Por qué la página a veces se niega a escribir un nuevo archivo de subtítulos?
Porque una corrección equivocada es más difícil de detectar que una ausente. La búsqueda informa de cuatro cosas: con cuántos bloques pudo trabajar, si el audio contenía habla, qué fracción del tiempo de subtítulos cayó sobre habla y cuánto mejor fue la ganadora que la mejor alternativa realmente distinta. Si alguna de ellas es débil, la ejecución produce solo el informe, cuya línea de estado dice not-found junto con el motivo. No pierdes nada —el archivo original queda intacto— y obtienes un número que puedes comprobar antes de hacer nada a mano.
¿Qué significa la razón del informe para una diferencia de 23,976 a 25 fps?
Los tiempos de los bloques se multiplican por la razón y después se desplazan por el desfase, así que una razón de 1,0427 significa que los subtítulos se cronometraron para una base de fotogramas más rápida y todos los bloques tienen que estirarse hacia adelante. La página prueba las dos direcciones de cada pareja habitual, porque cuál se lee depende del archivo que tengas en la mano: 1,0427 y 0,9590 son la misma diferencia vista desde cada extremo. Si la razón informada es 1,000000 y el desfase es inferior a un fotograma, el archivo ya está alineado y se deja como está.
¿El archivo corregido conserva mi estilo o solo los tiempos?
Cambian los tiempos y nada más. Los subtítulos se analizan en la misma representación interna que usan todas las páginas de este sitio, se reescriben el inicio y el fin de cada bloque y se serializa de nuevo en el formato en que llegó. El estilo, el posicionamiento y las etiquetas en línea de ASS sobreviven; también la estructura propia del archivo, y por eso un .ass da un .ass y no un .srt aplanado. La única excepción visible es un bloque comprimido por debajo de un milisegundo por una razón grande, que se mantiene en un milisegundo y se cuenta en la lista de pérdidas.
¿Funciona si los subtítulos están en un idioma distinto del audio?
Sí, y ese es el sentido de medir sonoridad en lugar de reconocer palabras. La actividad de habla es una forma —una frase es una ráfaga de energía seguida de un hueco— y esa forma es la misma tanto si la voz habla alemán como español. Un doblaje alemán bajo subtítulos españoles se alinea igual de bien que una pareja del mismo idioma. Lo que no puede hacer es distinguir una línea doblada de una original, así que si el doblaje inserta diálogo extra, el alineamiento sigue encontrando el ajuste general pero los bloques concretos de los pasajes insertados pueden quedar sobre la línea equivocada.