sábado, 28 de abril de 2007

Crear un DVD a partir de AVI/MPEG

Voy a resumir como crear un dvd usando como fuente un video avi/mpeg.
Esto es un resumen de información útil que vi googleando.

Primero es necesario tener los siguientes paquetes instalados:
dvdauthor
mplex
mjpegtools
transcode
libdvdread
tcextract (para VCD)

Opcionales
growisofs
vcdgear
mkisofs

Bien lo primero será convertir la película.

Si la fuente es un VCD hay que utilizar:

$ tcextract -i /path/pelicula.dat -a0 -x mpeg2 > video
$ tcextract -i /path/pelicula.dat -a0 -x mp3 > audio

Si no es un VCD (aka. DIVX, XVID, etc) usar:

$ transcode -i /path/pelicula.avi -o video -m audio -x divx,ac3 -y mpeg2enc,mp2enc

Con -x se indica como esta códificado el archivo (video,audio) para saber que codec utilizar se puede reproducir con mplayer y ver lo que sale en la consola.

Ahora el multiplexado, vamos a unir el video y el audio en un archivo mpeg.

$ mplex -f 8 audio.mpa video.m1v -o movie.mpg

En caso de tener un archivo de subtítulos es posible añadirlos sin "pegarlos" en la película, de manera sólo mostrarlos si los queremos ver.

Para eso vamos a crear un directorio .spumux en nuestro home y copiar ahi la fuente .ttf que queremos usar para los subtítulos.
Luego creamos un archivo xml como el siguiente:

Archivo subtitles.xml:

< subpictures>
< stream>
< textsub filename="matrix.srt" characterset="ISO8859-1">
fontsize="22.0" font="Vera.ttf" horizontal-alignment="center"
vertical-alignment="bottom" left-margin="60" right-margin="60"
top-margin="20" bottom-margin="2" subtitle-fps="25"
movie-fps="25" movie-width="720" movie-height="570"/>
< /stream>
< /subpictures>

Es importante que subtitle-fps, movie-fps, movie-width y movie-heigth coincidan con los valores de la película (se puede ver ejecutando el archivo con mplayer)

Luego ejecutar:

$ spumux -s0 subtitle.xml <> matrix_dvd.mpg.temp

Si hay más de más de un subtitlo se pueden crear varios xml y ejecutar el comando de la siguiente manera:

$ spumux -s0 subtitle0.xml -s1 subtitle1.xml -s2 subtitle2.xml <> matrix_dvd.mpg.temp


(vamos agregando -sN para cada subtitulo)

Ahora vamos a crear la estructura del DVD, crear un .xml como este:

Archivo dvdauthor.xml:
< dvdauthor dest="/path/destino">
< vmgm/>
< titleset>
< titles>
< video format="ntsc" aspect="4:3" resolution="608x320">
< audio lang="en">
< pgc pause="0">
< vob file="moviesub1.mpg" pause="0">
< post> { g2 = 0; call vmgm menu entry title; } < /post>
< /pgc>
< pgc pause="0">
< vob file="moviesub2.mpg" pause="0">
< post> { g2 = 0; call vmgm menu entry title; } < /post>
< /pgc>
< /titles>
< /titleset>
< /dvdauthor>

Hay que ajustar los valores de resolución y demás (no voy a entrar en detalle, el archivo se explica por sí sólo)

Luego ejecutar:

dvdauthor -x "dvdauthor.xml"

Con esto nos habrá creado la estructura (AUDIO_TS, VIDEO_TS) del dvd en el directorio que indicamos en el archivo.

Se puede probar con el XINE o el VLC para ver como queda.

Ahora sólo basta grabarlo o crear una imágen ISO.

$ mkisofs -dvd-video -v -o dvd.iso /path/dvd

Para grabar la ISO se puede hacer con:

$ growisofs -Z /dev/dispositivodvd=/path/archivoiso/dvd.iso

Con esto basta para crear un DVD (sin menús)
Para más opciones (por ejemplo agregar menús, cambiar el color a subtítulos o demás) recomiendo ver los links que indico más abajo.

Fuentes:
http://www.frikis.org/staticpages/index.php?page=vcd-y-avi-en-dvd
http://www.transcoding.org/cgi-bin/transcode?Tutorials/Authoring_PC_Media_To_DVD
http://www.avidemux.org/admWiki/index.php?title=Main_Page