Ripear un DVD con FFmpeg

Cuando se trata de ripear un DVD con Linux, la forma más sencilla es tal vez usando Handbrake, que se puede instalar desde el gestor de paquetes. Entonces, ¿por qué querrías ripear un DVD usando FFmpeg? Bueno, en realidad tal vez no haya ninguna razón; si Handbrake funciona bien, ¡úsalo!. En este caso en particular, encontré una imagen de DVD que tenía problemas para ripear con Handbrake -sigue leyendo para descubrir cuál era el problema- así que decidí hacerlo a la antigua y usar FFmpeg.

En primer lugar, cabe mencionar que el DVD en este caso era una imagen ISO de un DVD sin encriptación. Los DVDs originales traen casi siempre encriptación que debes romper primero antes de seguir los pasos de este post; no es que sea difícil romper la encriptación de un DVD actualmente 😛 .

Así que, volviendo al tema, tenía esta imagen ISO de DVD en la que Handbrake me marcaba error al intentar ripear el track o título principal, sin embargo al reproducir el DVD éste se reproducía sin problemas. Extraño. Siendo que ya antes había usado FFmpeg para ripear DVDs decidí probar suerte. Antes de comenzar es necesario instalar desde el gestor de paquetes los paquetes ffmpeg y mplayer. MPlayer es necesario para realizar el primer paso de esta guía, antes de convertir el video con FFmpeg. Aquí la cuestión es que debemos indicarle al FFmpeg el video que deseamos convertir pero la estructura en la que están grabados los DVDs (archivos .VOB) no nos permite especificar esa información directamente, para eso necesitamos el MPlayer. Primero debemos identificar el título del DVD que queremos convertir; usualmente será el número 1, pero no siempre. Puedes reproducir un título en particular con MPlayer usando el siguiente comando:

monstruosoft@debian:~$ mplayer -dvd-device mi-dvd.iso dvd://1

Una vez que hemos ubicado el título que queremos ripear, debemos dumpear solamente esa parte del DVD a un nuevo archivo usando el siguiente comando:

monstruosoft@debian:~$ mplayer -dvd-device mi-dvd.iso -dumpstream -dumpfile salida.vob dvd://1

Esto dumpeará la parte del DVD correspondiente al título seleccionado (el título 1 en el ejemplo) y guardará el resultado en el archivo indicado (salida.vob en el ejemplo).

Ya que hemos dumpeado el título al disco duro, podemos usar FFmpeg como lo haríamos normalmente:

monstruosoft@debian:~$ ffmpeg -i salida.vob -map 0 -c:s copy salida.mkv

El comando anterior codificará el video salida.vob y producirá el video salida.mkv conservando todas las pistas de audio, video y subtítulos del original:

  • -map 0 – indica a FFmpeg que queremos conservar todas las pistas del video original.

  • -c:s copy – indica a FFmpeg que las pistas de subtítulos sólo deben ser copiadas y no recodificadas.

  • El video será recodificado usando las opciones predeterminadas de audio y video. Este es sólo un ejemplo, en la realidad es muy probable que quieras personalizar las opciones de audio y video (calidad, bitrate, codec, etc.).

¡Listo! Fue relativamente fácil, ¿cierto?. Puedes estarte preguntando si crear el archivo temporal salida.vob vale la pena. Ten en cuenta que puedes enviar la salida del comando -dumpstream de MPlayer directamente a la entrada del FFmpeg usando pipes.

Nota final: Si leíste todo el post habrás notado que tengo la costumbre de ripear mis películas conservando todas las pistas de audio, video y subtítulos disponibles. Esto fue lo que causó problemas al Handbrake en un inicio. Este DVD en particular tenía varias pistas de subtítulos VOBSUB además de una pista de Closed Caption (CC), ésta última era la que causaba problemas al Handbrake; después de deshabilitar esa pista en particular, Handbrake funcionó sin problemas.

No fue del todo malo recordar cómo ripear un DVD con FFmpeg. Usando los comandos anteriores es posible ripear todos los títulos de un DVD usando un simple script.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s