Ripear un DVD con FFmpeg usando named pipes

En el post anterior escribí las instrucciones para ripear un DVD usando FFmpeg y este es el ejemplo perfecto para hablar sobre las named pipes de Linux. Las named pipes nos permiten enviar datos de una aplicación a otra. Muy probablemente has visto antes el carácter de pipe en Linux (‘|’) que cumple el mimso objetivo pero que en algunos casos puede ser difícil de usar si una de las aplicaciones no soporta entrada desde stdin, por ejemplo. Las named pipes pueden facilitar enviar datos de una aplicación a otra gracias a que las puedes usar simplemente como un archivo más, es decir, envías la salida de un programa a un archivo de tipo pipe y después usas ese archivo como la entrada para el otro programa.

Las pipes aparecen como archivos en el sistema de archivos de Linux y, por lo tanto, las puedes tratar con un archivo, la única diferencia es que deben ser creadas con el comando mkfifo:

monstruosoft@debian:~$ mkfifo mi_pipe
monstruosoft@debian:~$ ls -l mi_pipe 
prw-r--r-- 1 monstruosoft monstruosoft 0 Feb  3 16:22 mi_pipe

Nota que el archivo mi_pipe está indicado como pipe en los atributos del archivo. Para borrar una pipe, simplemente usamos el comando rm como lo haríamos para eliminar cualquier archivo:

monstruosoft@debian:~$ rm mi_pipe

De vuelta al tema de ripear un DVD, como recordarán del post anterior, primero era necesario dumpear el archivo .VOB del DVD antes de convertirlo a MKV con FFmpeg. Esto podía significar copiar al disco duro un archivo de 4 a 8 GBs que al final tendremos que borrar para quedarnos únicamente con el archivo MKV. Esto no sólo hace más lento el proceso (hay que esperar a que el archivo esté completamente dumpeado antes de poder convertirlo con FFmpeg) sino que puede ser un problema si estás corto de espacio en el disco duro, algo que en mi caso no es nada raro :P. Aquí es donde usar una named pipe puede sernos útil para enviar los datos dumpeados con MPlayer directamente al FFmpeg sin tener que almacenarlos en el disco duro. Para ver cómo funcionan las named pipes, vamos a ripear un DVD usando el método descrito en el post anterior. Primero debemos crear la named pipe que usaremos y después debemos ejecutar el primer paso que es dumpear un título del DVD usando MPlayer:

monstruosoft@debian:~$ mkfifo mi_pipe
monstruosoft@debian:~$ mplayer -dvd-device imagen-dvd.iso -dumpstream -dumpfile mi_pipe dvd://1

Nota que en este caso usamos mi_pipe como archivo de salida. Al ejecutar este comando verás que el proceso de dumpear el archivo se queda ‘en pausa’, no se está procesando el archivo .ISO ni se están escribiendo datos al disco duro.

Ya que la terminal en la que ejecutamos MPlayer está ‘bloqueada’, en este punto debemos abrir otra ventana de terminal en la cual ejecutaremos la segunda parte del proceso, convertir el archivo con FFmpeg. Así que en otra ventana de terminal debemos ejecutar el siguiente comando, nota que esta vez usaremos mi_pipe como archivo de entrada:

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

Al ejecutar este comando notarás que el comando MPlayer en la otra terminal automáticamente empezará a trabajar; esto significa que nuestra pipe ha entrado en acción enviando los datos de salida del MPlayer directamente al FFmpeg. Espera a que ambos procesos terminen su ejecución y ¡felicitaciones, has dumpeado exitosamente tu película usando una named pipe!.

Recuerda que puedes borrar tu named pipe con el comando rm cuando ya no la necesites.

Advertisements

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 )

w

Connecting to %s