Editar y crear subtítulos
Traducir los subtítulos de un video
Un colega de vacaciones en Finlandia te envía un DVD con una película en riguroso suomi; con subtítulos en sueco y en inglés. O te mandan un DVD japonés, también en riguroso nipón con subtítulos en inglés. Tus colegas andan locos por verlo, pero ninguno sabe inglés y tú pareces tonto de puro enrollao. Así que quieres traducir los subtítulos.
Para tener los subtítulos en castellano, no hay más remedio que escribir la traducción, pero además lo que escribamos debe estar formateado como algún tipo de subtítulo. La manera más rápida es extraer los subtítulos en inglés, por ejemplo en formato .srt, y cambiar las líneas en inglés por la correspondiente traducción al idioma que prefieras.
Para hacerlo, podemos usar varias de las utlidades que vienen con transcode y gocr. Si no los tienes instalados, hazlo ahora.
1- Identificar el stream de subtítulos que nos interesa
Lo primero es ver en qué stream del DVD están los subtítulos en inglés, esto se puede hacer por ejemplo con VLC: vamos al menú "Video -> Subtítulos" y vemos cuál es la pista que nos interesa. El número de la pista se corresponde con el número sid (Subtitle ID) que tendremos que pasar como opción en el siguiente paso.
Con mplayer:
$ mplayer -dvd-device /path/dvd.img.iso dvd://1 -vo null -ao null -frames 0 -v 2>&1 | grep sid
Fijarse que en este caso, estamos pasando a mplayer el path a una imagen ISO en vez de a un DVD. Si estás usando un DVD, tendrás que modificar la orden en consecuencia.
Esto da una salida así:
subtitle ( sid ): 0 language: unknown
subtitle ( sid ): 1 language: unknown
El numero sid (subtitle id) nos da la referencia para cada idioma, normalmente indicara el idioma en vez de poner "unknown".
2- Usar tccat y tcextract para extraer los subtítulos.
Si tenemos instalado el paquete transcode, tendremos las utilidades tccat y tcextract. Usamos el número sid más el hexadecimal 0x20 con tcextract para indicar el stream de subtítulos que queremos extraer. Si el id es 1, pasamos la opción "-a 0x21"; si el id es 2, pasaríamos la opción "-a 0x22", y así sucesivamente.
$ tccat -i /path/dvd.img.iso -T 1 -L | tcextract -x ps1 -t vob -a 0x21 > subtitulos-ingles
Fijarse que estamos usando tccat para concatenar todos los capítulos del DVD, y pasamos el resultado a tcextract para que extraiga los subtítulos.
Ahora convertimos el stream en imagenes pgm
3- Usar subtitle2pgm para convertir los subtítulos en imágenes .pgm
$ subtitle2pgm -o prefijo -c 255,255,0,255 < subtitulos-ingles
Esto produce un montón de archivos .pgm con la imagen bitmap del subtítulo y un archivo .srtx con los indices de tiempos. Por cada subtítulo en inglés tendremos una imagen pgm con el subtítulo en cuestión. Los códigos de tiempo del archivo .srtx indican en qué momento y por cuanto tiempo aparece cada subtítulo en la imagen.
La opción -o indica un prefijo (el que queramos) que usarán los archivos pgm. Es decir, las imágenes .pgm se llamarán prefijo-numero.pgm. La opción -c es opcional, para ver si los subtítulos se ven bien, quedan contorneados correctamente, etc. Se pueden probar diferentes combinaciones de 0 y 255 para ver cuál funciona mejor. Podemos usar el comando display para ver una de las imágenes .pgm recién creadas y comprobar que el subtítulo es bien legible.
4- Convertir las imágenes pgm a texto
El siguiente paso es tener los subtítulos como texto, no como imágenes. Para eso usamos pgm2txt:
$ pgm2txt prefijo
pgm2txt es un script basado en gocr (reconocimiento de caracteres). Si tenemos gocr tendremos pgm2txt. Al loro que cuando no reconoce algúna letra(s) las muestra en la consola como arte ascii; y en la parte inferior de la consola habrá una línea en la que nos pide que escribamos la letra(s) correspondiente a lo que nos enseña. Si se está seguro de qué letra es la que nos muestra, se escribe lo que sea en la linea de comando y se pulsa enter; pero si no se está seguro, es mejor escribir y pulsar Alt+Enter, de este modo la asignacion queda sólo en ram. Si escribimos mal el patrón y lo guardamos en la menoria de gocr, se queda ahí para los restos, y en lo sucesivo siempre reconocerá mal la letra(s) en cuestión.
En mi eeepc muchas veces conviene pulsar la flecha arriba para ver bien los caracteres no reconocidos (la pantalla es pequeña, la consola también, y el arte ascii no cabe entero, sólo se ve la parte inferior y para verlo entero hay que hacer scroll en la consola). Si tu pantalla también es pequeña, asegúrate de que estás viendo todo el arte ascii antes de escribir la letra que (crees) estás viendo como arte ascii.
5- Juntar los textos y los códigos de tiempo en un archivo .srt
Por último, hacemos
:
srttool -s -w < prefijo.srtx > prefijo.srt
Con esto ya tenemos un archivo .srt con los subtítulos y los códigos de tiempos, que podemos editar/traducir, etc. Lo normal es guardar al archivo en la misma carpeta y con el mismo nombre que el video pero con extensión .srt, de este modo la mayoría de reproductores lo usarán automáticamente.
Aquí tenemos un ejemplo de archivo .srt:
1
00:00:27,730 --> 00:00:33,240
Esta película está dedicada a los
callos de mi pie izquierdo
2
00:01:55,540 --> 00:01:57,920
Cuida de tu hermanito.
3
00:01:58,370 --> 00:02:00,159
¿Tengo que ponerle lejía en el pie de atleta?
El formato es bien sencillo; por cada subtítulo tenemos una primera línea con el número del subtítulo; 1, 2,3... etc y una segunda línea indicando el momento en que aparece el subtítulo y el momento en que desaparece (hora:minuto:segundo,milesima). A continuación tenemos el subtítulo en sí y una línea en blanco separándolo del subtítulo siguiente.
6- ¿Qué programa(s) usar para traducir/editar/crear subtítulos?
Si lo único que nos interesa es traducir los subtítulos, cualquier editor de texto puede servirnos (yo lo hago con vim). Si queremos, podemos añadir subtítulos, a condición de ajustarnos al formato, llevar bien la numeración, etc, pero para esto, es mejor usar un programa como gnome subtitles
que se encargue de esos detalles por nosotros.
7- ¿Algo no funciona?
Si nuestro video se llama "zapatilla.avi" o "zapatilla.mpg" y llamamos al archivo de subtítulos "zapatilla.srt", y lo guardamos todo en la misma carpeta, la mayoría de reproductores multimedia serán capaces de usar automáticamente el archivo de subtítulos.
Si nuestro reproductor es un zoquete incapaz de encontrar solito los subtítulos, probablemente tendrá algún menú que nos permita escoger el archivo de subtítulos que queramos usar.
Si algún subtítulo en concreto no aparece, o a partir de un momento dado dejan de aparecer los subtítulos, probablemente es que están mal numerados (esto pasa cuando usas el vim para crearlos y llevas la numeración a mano). Vuelve a editar el archivo .srt, corrige la numeración, y a correr.
Si las letras con acento se ven mal, es que el juego de carácteres está mal escogido. Mplayer me ha tocado bastante las narices con subtítulos UT-8, no había manera de que los mostrara bien, no sé por qué. La solución fue usar iconv para cambiar la codificación de caracteres del archivo .srt. En principio esto no tendría que ser necesario, debería bastar con escoger las opciones adecuadas en un menú o cuadro de diálogo. Pero si no hay manera, enttonces se puede hacer algo como esto:
$ iconv -f UTF-8 -t ISO-8859-15 -o archivoISO.srt archivo.srt
Es decir, cambiar la codificación de "archivo.srt" de UTF-8 a ISO-8859-15 y guardarlo como archivoISO.srt
8- ¡Quiero ver los subtítulos en el reproductor de DVD y en la tele!
Si tu reproductor de DVD es como el mío, no se entera de qué cosa es un archivo .srt; en este caso podemos usar avidemux para empotrar los subtítulos en la imagen. Con esto se acabaron los problemas de "no se ven los subtítulos" pero tendremos que currarnos un video por cada idioma. Otro inconveniente es que por cada idioma tenemos que volver a codificar el video, no vale con hacer "copy". Por tanto es un proceso lento.
En fin: abrimos avidemux, cargamos el video que nos interese, ajustamos las opciones de codificación de video, vamos al botón "filters", hacemos clic en "subtitles" y acto seguido doble clic en "Subtitler". Aparece una ventana de diálogo para que seleccionemos el .srt que queramos, así como el tipo de letra, codificación (aquí el UTF-8 sí funciona), color y posición. Cuando aceptamos, podemos hacer clic en "preview" y arrastrar el deslizador para ver como quedan. Si todo está a nuestro gusto, podemos hacer clic en "Guardar" y esperar a que termine de trabajar. El video que hayamos guardado tendrá los subtítulos incrustados dentro de la imagen y se podrán ver en cualquier reproductor.