G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!
Creación de DVDs
Por Chris Stoddard

Traducción al español por Jesús Fuenlabrada
el día 27 de Enero de 2004, para La Gaceta de Linux

Este documento proporciona los pasos necesarios para hacer un DVD que funcionará en un reproductor de sobremesa, usando Linux y un grabador DVD+RW o DVD-RW.

Índice de Contennidos

Introducción

Me maravillo constantemente de lo fácil que es realizar cosas en Linux una vez que alguien ha realizado el proceso. La creación de DVDs es un buen ejemplo de esto, todas las piezas están en su lugar, toda la información está disponible y es relativamente fácil de hacer, pero no hay un documento sencillo mostrando como hacerlo. La creación de DVDs bajo Linux está todavía en su infancia, no hay herramientas para menús o funcionalidades avanzadas, por ahora todo lo que podemos hacer es un sencillo DVD contínuo, que es suficiente para los videos caseros y las grabaciones de programas de TV. No discutiré la edición de video aquí, asumo que o grabarás de la TV o tendrás una cinta de video que quieres transferir a un DVD.

Hardware requerido:

No voy a entrar en mucho detalle acerca de la instalación del hardware, si no sabes como instalar tu hardware, te proporciono enlaces a artículos para ayudarte.

Software requerido:

Cada uno de estos paquetes tiene su propio procedimiento de instalación, por favor sigue las instrucciones para cada paquete individual.

Las herramientas dvd+rw no tienen Makefile. Puedes construir los binarios haciendo esto:

    gcc dvd+rw-format.c
    mv a.out dvd+rw-format
    cp dvd+rw-format /usr/local/bin
    gcc growisofs.c
    mv a.out growisofs
    cp growisofs /usr/local/bin

Grabando, codificando y quemando el video:

Grabar el video es el paso más importante, el tamaño del video y el frame rate deben ser los correctos. El siguiente comando usa streamer, que viene con xawtv para grabar el video:

  streamer -n ntsc -t 60:00 -s 720x480 -r 30 -o stream.avi -f mjpeg -F stereo -c /dev/video0

La opció:n -n es para el formato, si usas PAL, cambia ntsc por pal. La opción -t es el tiempo de grabación en minutos. -s es el tamaño del video, en USA usamos NTSC que requiere que el video sea 720x480. Si usas PAL, cambia esto a 720x576. -r es el frame rate, para NTSC usa 30, para PAL usa 24. -c es el dispositivo de video, cambialo si es necesario. El resto de las opciones deben permanecer sin cambiar.

La siguiente cosa para hacer es codificar adecuadamente el audio y el video en algo que un reproductor de DVD pueda leer. Las herramientas que necesitamos para esto son mjpeg-tools. Esta línea de comando saca el audio fuera de tu fichero avi y la codifica a audio mp2. La ocpión -V actualmente es para compatibilidad VCD, pero funciona en nuestro caso:

  lav2wav +p stream.avi | mp2enc -V -o audio.mp2

Lo siguiente es sacar el video y codificarlo a video mpeg. Esta parte es la que tarda más, por lo que cuanto más rápido sea tu sistema mejor. Las opciones importantes son -f 8, que asegura que el video será compatible con DVD y -n n, que es para NTSC, si estas usando PAL cambialo a -n p:

  lav2yuv +p stream.avi | mpeg2enc -n n -f 8 -s -r 16 -o video.m1v

Ahora necesitamos unir los dos ficheros codificados. Asegúrate de usar la opción -f 8 para la compatibilidad de video con DVD:

  mplex -f 8 audio.mp2 video.m1v -o complete.mpg

Para que nuestro disco pueda ser visto en un reproductor DVD de sobremesa, la estructura de directorios TIENE que ser perfecta, por eso por favor asegúrate que tecleas los siguientes comandos como se muestra, en el orden adecuado:

  mkdir dvd
  mkdir dvd/VIDEO_TS

Lo siguiente que necesitamos es un fichero IFO con la Tabla de Contenidos, teclea:

  tocgen > dvd/VIDEO_TS/VIDEO_TS.IFO

Ahora queremos copiar nuestro fichero de video codificado en la estructura y darle los permisos correctos, teclea:

  cp complete.mpg dvd/VIDEO_TS/VTS_01_1.VOB
  chmod u+w dvd/VIDEO_TS/*.VOB

Los ficheros IFO y BUP proporcionan a los reproductores de DVD información específica sobre el fichero de video que está intentando procesar, ifogen busca en el video y extrae la información necesaria. Para generar los ficheros necesarios usa la siguiente línea de comandos:

  ifogen -f dvd/VIDEO_TS/VTS_01_1.VOB > dvd/VIDEO_TS/VTS_01_0.IFO
  (cd dvd/VIDEO_TS; for i in *.IFO; do cp $i `basename $i .IFO`.BUP; done)

Ahora necesitamos generar una imagen iso que pueda ser quemada en un disco DVD. Asegúrate que estas usando la versión de mkisofs que viene con dvdrtools, que soporta el sistema de ficheros de DVD:

  mkisofs -dvd-video -udf -o dvd.iso dvd/

Y, finalmente, podemos quemar nuestro disco. Si estás usando una grabadora DVD+RW vieja de primera generación, el disco necesitará ser formateado antes de que la imagen pueda ser quemada, usa los siguientes comandos, reemplazando srcd0 por el nombre del dispositivo de tu grabadora:

  dvd+rw-format -f /dev/srcd0
  growisofs -Z /dev/srcd0=dvd.iso

Si estás usando una más nueva DVD-RW, no es necesario formatear, dvdrecord hará el trabajo:

  dvdrecord -dao speed=2 dev=0,0,0 dvd.iso

Solucionando problemas de sincronización de audio

El problema más común con este proceso es la sincronización de audio. La primera cosa que debes probar es optimizar tu disco duro con hdparm, activar la E/S de 32 bits y el DMA, algo así como esto:

  hdparm -c 1 -d 1 /dev/hda
Lo siguiente, carga el driver bttv con la opción gbuffers=10:
  modprobe bttv gbuffers=10

Esto debe solucionar cualquier problema de sincronización de audio, si no lo hace, puedes necesitar usar la opción -O n al ejecutar mplex. Esto retarda el video en n milisegundos. El problema con esto es que es un proceso de prueba y error y algunas veces deja el video en un estado que causa a ifogen un error de "segfault". También es posible grabar el video en un tamaño más pequeño, por ejemplo 352x240, entonces usa yuvscaler que viene con mpjeg-tools para cambiar el tamaño a 720x480, pero yo no he probado esto.

Notas finales:

Este proceso no te dará una calidad de video comparable a los DVDs "comprados en la tienda", la calidad dependerá mucho de la calidad de la fuente de tu captura, por eso debes usar los ajustes de mejor calidad que puedas cuando grabes cualquier cosa en cinta de video que tengas intención de quemar en DVD. Este proceso tarda varias horas, yo uso el shell script de abajo para que haga el trabajo por mi, mientras yo estoy en el trabajo o en la cama durmiendo. 100 minutos de video requerirán cerca de 11 GB para grabar, 2 GB para codificar y 1 GB para la imagen iso. Tu rendimienhto cambiará.

Versión en texto de make-dvd.sh
-----make-dvd.sh-----
#!/bin/sh

# Cleans out any left over files and makes the necessary directories
rm -r -f dvd video dvd.iso
mkdir dvd
mkdir dvd/VIDEO_TS
mkdir video

# Changes the channel on the TV tuner card
v4lctl setstation 3
# Records the video stream
streamer -n ntsc -t 60:00 -s 720x480 -r 30 -o video/stream.avi -f mjpeg -F
stereo -c /dev/video0

# Encodes the video stream
lav2wav +p video/stream.avi | mp2enc -V -o video/audio.mp2
lav2yuv +p video/stream.avi | mpeg2enc -n n -f 8 -s -r 16 -o video/video.m1v
mplex -f 8 video/audio.mp2 video/video.m1v -o video/complete.mpg

# Builds DVD image from the encoded video
# This portion of the script was lifted directly from
# the writedvd script which comes with the dvdauthor tools
tocgen > dvd/VIDEO_TS/VIDEO_TS.IFO
cp video/complete.mpg dvd/VIDEO_TS/VTS_01_1.VOB
chmod u+w dvd/VIDEO_TS/*.VOB
ifogen -f dvd/VIDEO_TS/VTS_01_1.VOB > dvd/VIDEO_TS/VTS_01_0.IFO
(cd dvd/VIDEO_TS; for i in *.IFO; do cp $i `basename $i .IFO`.BUP; done)
mkisofs -dvd-video -udf -o dvd.iso dvd/

# Burns the DVD for 1st Generation DVD+RW
# Comment out the dvd+rw-format line if the disc is already formated and
# contains no data.
# Comment these two lines out if you are using a newer drive
dvd+rw-format -f /dev/srcd0
growisofs -Z /dev/srcd0=dvd.iso

# Burns DVD for more modern DVD formats like DVD-RW
# Uncomment this line if you are using a newer drive
#dvdrecord -dao speed=2 dev=0,0,0 dvd.iso
-----make-dvd.sh-----

Copyright © 2002, Chris Stoddard.
Licencia de copia http://www.linuxgazette.com/copying.html
Publicado en el número 83 de Linux Gazette, Octubre 2002