HowTo:VozVideo:DVD2Matroska

De Luispa

Extracción de DVD's

Tras estudiar diferentes scripts (no dejes de estudiar h264enc), fuentes en internet y múltiples pruebas, por fin he conseguido realizar mi objetivo: crear ficheros Matroska de mis propios DVDs para poder dejarlos en mi servidor y acceder a ellos desde cualquier punto de mi red casera. Soy aficionado a las series y me gusta verlas en inglés con subtítulos en inglés para practicar, y manejar los menús de los DVDs es un fastidio.

Mi objetivo es "ripear" mis DVD's a la máxima calidad posible, dejando los idiomas y subtítulos en Español e Inglés, reduciendo tamaño pero priorizando la calidad, es decir, con un bitrate de 1800 o superior. Después de mucho mirar parece que hay una forma muy óptima de conseguirlo, la mejor solución a fecha de hoy parece ser usar el codec de video H.264, el codec de audio AAC y meterlo todo en un contenedor Matroska.

Handbreak

  • Keyword:
package.keywords.general:media-video/handbrake * ~* **
  • ebuild
 # cd /usr/local/portage/media-video/handbrake/
bolica handbrake # cat handbrake-9999.ebuild 
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI="2"

ESVN_REPO_URI="svn://svn.handbrake.fr/HandBrake/trunk"

inherit subversion gnome2-utils

DESCRIPTION="Open-source DVD to MPEG-4 converter."
HOMEPAGE="http://handbrake.fr/"
LICENSE="GPL-2"
SLOT="0"

KEYWORDS="~x86 ~amd64"

IUSE="css doc gtk"
RDEPEND="sys-libs/zlib
	css? ( media-libs/libdvdcss )
	gtk? (	>=x11-libs/gtk+-2.8
			dev-libs/glib
			dev-libs/dbus-glib
			x11-libs/libnotify
			media-libs/gstreamer
			media-libs/gst-plugins-base
			>=sys-fs/udev-147[extras]
	)"
DEPEND="=sys-devel/automake-1.10*
	=sys-devel/automake-1.4*
	=sys-devel/automake-1.9*
	dev-lang/yasm
	>=dev-lang/python-2.4.6
	|| ( >=net-misc/wget-1.11.4 >=net-misc/curl-7.19.4 ) 
	$RDEPEND"

src_configure() {
	local myconf=""

	! use gtk && myconf="${myconf} --disable-gtk"

	./configure --force --prefix=/usr --disable-gtk-update-checks ${myconf} || die "configure failed"
}

src_compile() {
	WANT_AUTOMAKE=1.9 emake -C build || die "failed compiling ${PN}"
}

src_install() {
	emake -C build DESTDIR="${D}" install || die "failed installing ${PN}"

	if use doc; then
		emake -C build doc
			dodoc AUTHORS CREDITS NEWS THANKS \
				build/doc/articles/txt/* || die "docs failed"
	fi
}

pkg_preinst() {
	gnome2_icon_savelist
}

pkg_postinst() {
	gnome2_icon_cache_update
}

pkg_postrm() {
	gnome2_icon_cache_update
}
  • Ejecutables:
/usr/bin/HandBrakeCLI
/usr/bin/ghb

DVDs protegidos

Hay una herramienta interesante llamada Lxdvdrip que merece la pena estudiar. Para copiar DVDs con protección se puede usar dicho programa lxdvdrip o k9copy


Ripear DVD a Matroska

En este artículo enseño todos los pasos que uitilizo, y además también puedes usar un pequeño script llamado dvd2mpeg4.sh.


Paso 1: Obtener información

  • Obten información del DVD. Buscas las pistas donde están los episodios. Apúntate a qué episodios corresponden. En el siguiente ejemplo veremos cómo las pistas 3, 4 y 5 son las de más duración y corresponden a los episodios 6, 7 y 8 de la temporada (esto lo miras en el DVD original, en la carátula). Esto quiere decir que la pista 3 tiene el episodio 6, la 4 el episodio 7 y la pista 5 el episodio 8.
$ dvd2mpeg4.sh --info
dvd2mpeg4.sh, v1.0. Copyright (c) 2009 Luis Palacios
----------------------------------------------------

Obteniendo nombre del DVD                                                      [OK]
Obteniendo información del DVD                                                 [OK]

-----------
Disc Title: NIP_TUCK_SEASON_5_DISC_3
Title: 01, Length: 02:06:46.120 Chapters: 19, Cells: 19, Audio streams: 03, Subpictures: 02 
Title: 02, Length: 00:00:13.280 Chapters: 03, Cells: 03, Audio streams: 03, Subpictures: 02
Title: 03, Length: 00:39:30.280 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02  <=== Episodio 6
Title: 04, Length: 00:43:37.880 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02  <=== Episodio 7
Title: 05, Length: 00:43:38.920 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02  <=== Episodio 8
Title: 06, Length: 00:02:12.040 Chapters: 02, Cells: 02, Audio streams: 03, Subpictures: 02 
Title: 07, Length: 00:02:12.040 Chapters: 02, Cells: 02, Audio streams: 03, Subpictures: 02
: 
-----------
Hay 7 títulos en este DVD.
stream de audio: 0 formato: ac3 (5.1) idioma: en aid: 128.
stream de audio: 1 formato: ac3 (stereo) idioma: es aid: 129.
subtítulo ( sid ): 0 idioma: en
subtítulo ( sid ): 1 idioma: es
Número de subtítulos en el disco: 2
  • Además hemos obtenido información sobre cuales son los ID's de audio (128 y 129) y los de los subtítulos (0=0x20, y 1=0x21).


Paso 2: Rip de un Episodio

  • Con toda la información anterior podemos ejecutar el comando. Siguiendo con el ejemplo vamos a crear el fichero matroska para el episodio número 6. Para hacerlo ejecutaríamos lo siguiente:
dvd2mpeg4.sh -t "Nip&Tuck - Episodio 06" -p 3 --aiden 128 --aides 129 --siden 0x20 --sides 0x21 
# -t          Es el título y el nombre del fichero final, se creará: "Nip&Tuck - Episodio 06.mkv"
# -p 3        Indica que se extraiga la pista 3 del DVD
# --aiden     es el ID para Audio en Inglés
# --aides     es el ID para Audio en Español
# --siden     es el ID para Subtítulos en Inglés
# --sides     es el ID para Subtítulos en Español
  • Se crearía el siguiente fichero:
$ ls -al 
drwxr-xr-x 2 luis luis       4096 jun 13 10:03 .
drwxr-xr-x 3 luis luis       4096 jun 12 19:29 ..
-rw-r--r-- 1 luis luis  729084907 jun 13 09:45 Nip&Tuck 5 - Episodio 06.mkv

Opcional: Automatizar todos los Episodios

  • El comando dvd2mpeg.sh tiene unas opciones especiales que automatizan la extracción de todos los episodios de un DVD. De momento asume que todos los episodios tiene audio y subtítulos en inglés y español, por lo que se asumen los parámetros --aiden 128 --aides 129 --siden 0x20 --sides 0x21.
  • Siguiendo con el ejemplo anterior, el siguiente comando extraería las pistas (-P) 3, 4, y 5 que empezarían equivaliendo al episodio (-E) 9 y consecutivos (10 y 11), teniendo todos el título "Nip&Tuck 5 - Episodio <n>" y usando archivos temporales del tipo NT05<Episodio>.*
dvd2mpeg4.sh -T "Nip&Tuck 5" -E 9 -P "3 4 5"
  • Se crearían los siguientes ficheros:
$ ls -al 
drwxr-xr-x 2 luis luis       4096 jun 13 10:03 .
drwxr-xr-x 3 luis luis       4096 jun 12 19:29 ..
-rw-r--r-- 1 luis luis  729084907 jun 13 09:45 Nip&Tuck 5 - Episodio 06.mkv
-rw-r--r-- 1 luis luis  766792661 jun 13 08:27 Nip&Tuck 5 - Episodio 07.mkv
-rw-r--r-- 1 luis luis  779707588 jun 13 08:52 Nip&Tuck 5 - Episodio 08.mkv




¿Cómo funciona?

A continuación documento cómo funciona todo el proceso de conversión, qué programas utilizo y cómo se hace la fusión final de los ficheros de video, audio y subtítulos dentro de un contenedor Matroska.


Software necesario

  • Estos son los programas que he instlado
# emerge -pv mplayer ogmtools transcode subtitleripper lsdvd

Nota: Me aseguro de poner el flag USE x264 para mplayer


Obtener información del DVD

  • Inserto el DVD y saco la mayor información posible, primero dónde están los 3 títulos (capítulos) que me interesa ripear de este DVD, y después con mplayer averiguo información detallada sobre las pistas de audio y subtítulos.
$ lsdvd
Disc Title: NT5
Title: 01, Length: 02:05:31.720 Chapters: 19, Cells: 19, Audio streams: 03, Subpictures: 02
Title: 02, Length: 00:00:13.280 Chapters: 03, Cells: 03, Audio streams: 03, Subpictures: 02
Title: 03, Length: 00:42:44.480 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02   <== !! Capítulo 12, está claro por su tamaño.
Title: 04, Length: 00:40:52.120 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02   <== !! Capítulo 13.
Title: 05, Length: 00:41:56.080 Chapters: 07, Cells: 07, Audio streams: 03, Subpictures: 02   <== !! Capítulo 14.
Title: 06, Length: 00:03:27.000 Chapters: 02, Cells: 02, Audio streams: 03, Subpictures: 02
Longest track: 01

$ mplayer -v dvd://3    (repito con //4 y //5 para comprobar que son iguales)
:
stream de audio: 0 formato: ac3 (5.1) idioma: en aid: 128.
stream de audio: 1 formato: ac3 (stereo) idioma: es aid: 129.
Número de canales de audio en el disco: 2.
subtítulo ( sid ): 0 idioma: en
subtítulo ( sid ): 1 idioma: es
Número de subtítulos en el disco: 2
:
==> Found subtitle: 0:  0.015 ct:  0.067  25/ 25  5%  0%  0.5% 7 0 
==> Found subtitle: 1
  • Esta es la información importante, hay tres capítulos en los títulos 3,4,5 y estos son sus datos de idioma y subtítulos:
- Title 03    42:44.480
- Title 04    40:52.120
- Title 05    41:56.080
- Inglés:   Pista 0 (en = aid 128).  Formato AC3 (5.1).    Subtítulo: 0  (0x20 para tcextract)
- Español:  Pista 1 (en = aid 129).  Formato AC3 (stereo). Subtítulo: 1  (0x21 para tcextract)

Extraigo info de DVD y creo VOBs

  • Extraigo la lista completa de capítulos (chapters.txt = pendiente de estudiar para qué sirve esto) y el fichero .IFO
$ dvdxchap -t 1 /dev/dvd > chapters.txt
$ cat chapters.txt 
$ cp /media/NOMBRE_DVD/VIDEO_TS/VTS_01_0.IFO .
  • Extraigo los 3 títulos (capítulos) que me interesan para trabajar a partir de ahora desde el disco duro.
$ mplayer dvd://3 -dumpstream -dumpfile NT0512.vob
$ mplayer dvd://4 -dumpstream -dumpfile NT0513.vob
$ mplayer dvd://5 -dumpstream -dumpfile NT0514.vob

Extraigo el audio

  • Capítulo 12, pistas de inglés y español
mencoder NT0512.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 128 -o NT0512-en.mp3
mencoder NT0512.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 129 -o NT0512-es.mp3

Nota: El equivalente para sacar en formato AC3 sería:

mplayer NT0512.vob -aid 128 -dumpaudio -dumpfile NT0512-en.ac3
mplayer NT0512.vob -aid 129 -dumpaudio -dumpfile NT0512-es.ac3



  • Capítulo 13, pistas de inglés y español
mencoder NT0513.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 128 -o NT0513-en.mp3
mencoder NT0513.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 129 -o NT0513-es.mp3

  • Capítulo 14, pistas de inglés y español
mencoder NT0514.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 128 -o NT0514-en.mp3
mencoder NT0514.vob -ovc frameno -oac mp3lame -lameopts br=128:cbr:vol=7 -aid 129 -o NT0514-es.mp3

Extraigo los Subtítulos

  • Extraigo los subtítulos en Inglés y en Español mezclandolos en un sólo archivo .sub/.idx
tccat -i NT0512.vob -L | tcextract -x ps1 -t vob -a 0x20 > NT0512-subs-en 
tccat -i NT0512.vob -L | tcextract -x ps1 -t vob -a 0x21 > NT0512-subs-es 
subtitle2vobsub -o NT0512-vobsubs -i ./VTS_01_0.IFO -a 0 < NT0512-subs-en
subtitle2vobsub -o NT0512-vobsubs -i ./VTS_01_0.IFO -a 1 < NT0512-subs-es
rm -f NT0512-subs-en
rm -f NT0512-subs-es
tccat -i NT0513.vob -L | tcextract -x ps1 -t vob -a 0x20 > NT0513-subs-en 
tccat -i NT0513.vob -L | tcextract -x ps1 -t vob -a 0x21 > NT0513-subs-es 
subtitle2vobsub -o NT0513-vobsubs -i ./VTS_01_0.IFO -a 0 < NT0513-subs-en
subtitle2vobsub -o NT0513-vobsubs -i ./VTS_01_0.IFO -a 1 < NT0513-subs-es
rm -f NT0513-subs-en
rm -f NT0513-subs-es
tccat -i NT0514.vob -L | tcextract -x ps1 -t vob -a 0x20 > NT0514-subs-en 
tccat -i NT0514.vob -L | tcextract -x ps1 -t vob -a 0x21 > NT0514-subs-es 
subtitle2vobsub -o NT0514-vobsubs -i ./VTS_01_0.IFO -a 0 < NT0514-subs-en
subtitle2vobsub -o NT0514-vobsubs -i ./VTS_01_0.IFO -a 1 < NT0514-subs-es
rm -f NT0514-subs-en
rm -f NT0514-subs-es


Nota: Después de hacer los dos primeros tccat es buena idea comprobar que se han extraido los subtítulos correctos

$ mkdir tmp
$ subtitle2pgm -o borrame -c 255,0,0,255 < ../NT0512-subs-en
$ gqview 

y repito con ../NT0512-subs-es


  • Hasta ahora deberías tener lo siguiente por cada uno de los capítulos (aquí sólo enseño el 12)
$ ls -al NT0512*
-rw-r--r-- 1 luis luis   45385908 jun 12 11:51 NT0512-en.mp3
-rw-r--r-- 1 luis luis   45385908 jun 12 11:45 NT0512-es.mp3
-rw-r--r-- 1 luis luis 1905872896 jun 11 22:18 NT0512.vob
-rw-r--r-- 1 luis luis      52314 jun 12 12:02 NT0512-vobsubs.idx
-rw-r--r-- 1 luis luis    3727360 jun 12 12:02 NT0512-vobsubs.sub

Video

Cropping

  • Identifico el área de corte a realizar. Para minimizar la pérdida de espacio y eliminar los posibles bordes negros, recortaré de la mejor forma posible. El programa mplayer es capaz de detectar estos bordes negros, además lo ejecuto con el argumento -sb 50000000 que hace que se salten los primeros ~50MB de video para evitar cualquier marco inicial diferente al de la película.
$ mplayer NT0512.vob -vf cropdetect -sb 50000000
:
[CROP] Area de corte: X: 6..713  Y: 0..575  (-vf crop=704:576:8:0).
:
$ mplayer NT0513.vob -vf cropdetect -sb 50000000
:
[CROP] Area de corte: X: 6..713  Y: 0..575  (-vf crop=704:576:8:0).
:
$ mplayer NT0514.vob -vf cropdetect -sb 50000000
:
[CROP] Area de corte: X: 8..712  Y: 0..574  (-vf crop=704:560:8:8).
:

Me guardo los datos obtenidos:

Capítulo 12: -vf crop=704:576:8:0
Capítulo 13: -vf crop=704:576:8:0
Capítulo 14: -vf crop=704:560:8:8


Cálculo del bitrate

Uno de los datos más importantes a calcular es el "bitrate", número de bits por segundo utilizados durante la codificación. Muy en crudo, con un bitrate bajo tenemos calidad baja y con uno alto tenemos calidad alta, pero no es tan sencillo, hay que encontrar el bitrate más adecuado para no comprometer ni espacio, ni calidad y que a la vez que no se desperdicie nada.

En la página de Marc Rintsch se puede encontrar un programa "bitrate.py" hecho en Phyton que parece ser un excelente "calculador" del bitrate. Descarga y extrae el fichero bitrate-0.3.tar.gz y copia el programa bitrate.py a tu directorio de ejecutables.

La sintaxis del programa es la siguiente:

./bitrate.py -o 0.5 -t ${TAMAÑO} ${DURACIÓN} audio-en.mp3 audio-ees.mp3 vobsubs.idx vobsubs.sub

En la línea de comandos hay que incluir todos los ficheros que acabarán dentro del contenedor MKV (es decir, ambas pistas 
de audio y los ficheros de subtítulos). 

* El valor ${TAMAÑO} indica cual es el tamaño final del contenedor MKV que desaría tener. De acuerdo con el "Doom9 Codec shoot-out 2005",
codificar on el codec x264 a un bitrate de 2240 es prácticamente equivalente a la calidad original del fichero VOB. Para entender qué 
significa eso, con dicho bitrate podríamos meter un par de peliculas normales dentro de un DVD. 

* El valor ${DURACIÓN} es el tiempo que dura la película (eje.: 00:42:45 significa 42 minutos y 44.480 segundos) y es el tiempo que habíamos 
descubierto antes con el comando mplayer en HowTo:macVideo#Obtener_informaci.C3.B3n_del_DVD la sección de obtener información del DVD.
  • Como estos capítulos son de aproximadamente 40 minutos, la verdad es que no se qué tamaño utilizar en ${TAMAÑO}. He ejecutado bitrate.py sin indicar tamaño, por lo que me da unas cuantas aproximaciones.
$ bitrate.py -o 0.5 00:41:57 NT0514-en.mp3 NT0514-es.mp3 NT0514-vobsubs.idx NT0514-vobsubs.sub
Length: 2517 seconds (62925 frames @ 25.0 fps)
 Other: 88.88 MB @ 296.2 kbit/s
Target:  185 MB =>   96.1 MB @ 318.8 kbit/s
Target:  247 MB =>  158.1 MB @ 524.4 kbit/s
Target:  650 MB =>  561.1 MB @ 1860.8 kbit/s
Target:  700 MB =>  611.1 MB @ 2026.6 kbit/s
Target: 1300 MB => 1211.1 MB @ 4016.3 kbit/s
Target: 1400 MB => 1311.1 MB @ 4347.9 kbit/s
  • Ahora ya si voy añadiendo la opción -t ${TAMAÑO} y con prueba y error veo que para un -t 765 me da lo más cercano a esos 2240 kbit/s que comentaba antes como una calidad prácticamente idéntica a la del VOB original.
$ bitrate.py -o 0.5 -t 765 00:41:57 NT0514-en.mp3 NT0514-es.mp3 NT0514-vobsubs.idx NT0514-vobsubs.sub
Length: 2517 seconds (62925 frames @ 25.0 fps)
 Other: 88.88 MB @ 296.2 kbit/s
Target:  765 MB =>  676.1 MB @ 2242.2 kbit/s
  • Ejecuto el programa y apunto el valor del bitrate en kilbits per second (kbits/s). Notar que he redondeado los segundos por arriba.
$ bitrate.py -o 0.5 -t 765 00:42:45 NT0512-en.mp3 NT0512-es.mp3 NT0512-vobsubs.idx NT0512-vobsubs.sub
Length: 2565 seconds (64125 frames @ 25.0 fps)
 Other: 90.17 MB @ 294.9 kbit/s
Target:  765 MB =>  674.8 MB @ 2196.0 kbit/s
$ bitrate.py -o 0.5 -t 765 00:40:53 NT0513-en.mp3 NT0513-es.mp3 NT0513-vobsubs.idx NT0513-vobsubs.sub
Length: 2453 seconds (61325 frames @ 25.0 fps)
 Other: 86.44 MB @ 295.6 kbit/s
Target:  765 MB =>  678.6 MB @ 2308.9 kbit/s
$ bitrate.py -o 0.5 -t 765 00:41:57 NT0514-en.mp3 NT0514-es.mp3 NT0514-vobsubs.idx NT0514-vobsubs.sub 
Length: 2517 seconds (62925 frames @ 25.0 fps)
 Other: 88.88 MB @ 296.2 kbit/s
Target:  765 MB =>  676.1 MB @ 2242.2 kbit/s


Transcodificar a H.264

He elegido H.264 dado que es un codec más moderno que XViD o DivX y que además ofrece más calidad. El contenedor Matroska soporta meter muchos tipos de codec en su fichero .mkv. Si quieres ver los soportados puedes usar el comando: mkvmerge --list-types. En mi caso están soportados ambos: h264 para video y mp3 para audio.

Los parámetros de codificación que empleo dan una buen resultado de calidad versus al tiempo que se tarda en codificar, pero puedes ajustarlos a tu gusto y qué mejor sito para mirar que en la página original de mplayer. El tiempo de codificación depende mucho del número de CPU's y su velocidad.

Una de las ventajas del contenedor Matroska es que soporta escalado por software de los ficheros de video, por lo que no necesitas escalar ahora tu video simplemente porque quieres corregir el aspecto, vale con que especifique cual es el aspecto final a la hora de hacer el muxing. En los ejemplos siguientes, el comando mencoder escala la imagen a un aspecto 1:1.

Utilizo la siguiente sintaxis, siendo ${CROP} y el valor entero de ${BITRATE} los calculados antes. Además especifico threads=auto en mi CPU multi-core. Vemos dos comandos, dado que uso el método de codificación de 2 pasadas (la primera analiza el video para conseguir mejor optimización en la segunda pasada)

mencoder ${RIPPATH}movie.vob \
 -vf pullup,softskip,crop=${CROP},harddup -nosound \
 -ovc x264 -x264encopts bitrate=${BITRATE}:\
 subq=5:bframes=3:\
 b_pyramid:weight_b:turbo=1:threads=auto:pass=1 \
 -of rawvideo \
 -o /dev/null
mencoder ${RIPPATH}movie.vob \
 -vf pullup,softskip,crop=${CROP},harddup -nosound \
 -ovc x264 -x264encopts bitrate=${BITRATE}:\
 subq=5:8x8dct:frameref=2:bframes=3:\
 b_pyramid:weight_b:threads=auto:pass=2 \
 -of rawvideo \
 -o ${RIPPATH}movie.264


  • Conversión a H.264 del Capítulo 12 (indico el tiempo que tardó)
$ (8min)  mencoder NT0512.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
            bitrate=2196:subq=5:bframes=3:b_pyramid:weight_b:turbo=1:threads=auto:pass=1 -of rawvideo -o /dev/null

$ (10min) mencoder NT0512.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
            bitrate=2196:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 -of rawvideo -o NT0512.264
  • Conversión a H.264 del Capítulo 13
mencoder NT0513.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
 bitrate=2196:subq=5:bframes=3:b_pyramid:weight_b:turbo=1:threads=auto:pass=1 -of rawvideo -o /dev/null
  
mencoder NT0513.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
 bitrate=2196:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 -of rawvideo -o NT0513.264
  • Conversión a H.264 del Capítulo 14
mencoder NT0514.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
 bitrate=2196:subq=5:bframes=3:b_pyramid:weight_b:turbo=1:threads=auto:pass=1 -of rawvideo -o /dev/null
  
mencoder NT0514.vob -vf pullup,softskip,crop=704:576:8:0,harddup -nosound -ovc x264 -x264encopts \
 bitrate=2196:subq=5:8x8dct:frameref=2:bframes=3:b_pyramid:weight_b:threads=auto:pass=2 -of rawvideo -o NT0514.264

Crear Matroska

El siguiente paso es fusionar todos los streams multimedia, el video, audio, subtítulos e información de capítulos. Para hacerlo voy a usar el programa mkvmerge, que pertenece al paquete mkvtoolnix. Me aseguro que se compila con el flag USE=qt4 o wxwidgets para tener la versión GUI del programa: mmg, la cual es muy útil para aprender el significado y uso de los argumentos. Notar que por defecto se usan 25 fps.


  • Una forma rápida y sencilla de creación de los Matroska sería:
mkvmerge --title "Nip Tuck 5 - Cap 12" -o NT0512.mkv NT0512.264 NT0512-en.mp3 NT0512-es.mp3 NT0512-vobsubs.idx 
mkvmerge --title "Nip Tuck 5 - Cap 13" -o NT0513.mkv NT0513.264 NT0513-en.mp3 NT0513-es.mp3 NT0513-vobsubs.idx 
mkvmerge --title "Nip Tuck 5 - Cap 14" -o NT0514.mkv NT0514.264 NT0514-en.mp3 NT0514-es.mp3 NT0514-vobsubs.idx 


  • Ahora bien, si queremos tener más control sobre lo que hacemos, aquí están los argumetnos a usar:
# Opciones:
#
#    -d Copiar track 'n' de Video    -A  No copiar track de Audio    -S  No copiar track de Subtítulo
#    -a Copiar track 'n' de Audio    -D  No copiar track de Video    
#    -s Copiar track 'n' de Subtítulo
#

mkvmerge -o NT0509.mkv                                                          \   # Output
         --title "Nip Tuck 5 - Cap 12"                                          \   # Titulo
         --chapter-charset" "UTF8" --chapters NT0509-chapter.txt                \   # Capítulos
         --track-name "0:Pelicula" -d 0 -A -S NT0509.264                        \   # Track 0
         --language "1:eng" --track-name "1:Inglés" -a 1 -D -S NT0509-en.mp3    \   # Track 1
         --language "1:spa" --track-name "2:Español" -a 1 -D -S NT0509-es.mp3   \   # Track 2
         --language "0:eng" --track-name "0:Subtítulos Inglés"                  \   # Track 3
         --language "1:spa" --track-name "1:Subtítulos Español" -s "0,1"        \
         -D -A NT0509-vobsubs.idx                                               \ 
         --track-order "0:0,1:1,2:1,3:0,3:1"




Script dvd2mpeg4.sh

Backups de mis DVDs

Tal como comenté al principio del artículo, mi objetivos es "ripear" mis propias series desde DVDs para poder dejarlos en mi servidor y acceder a ellos desde cualquier punto de mi red casera (uso plexapp.com desde mi Mac mini). El objetivo es que tengan la mejor calidad aunque suponga más consumo en disco. Cada vez que compro una, la quiero "ripear" rápido, y por eso he creado un script para facilitarlo. El programa se llama dvd2mpeg4.sh versión 1.5.

Una vez que te bajes este programa y lo coloques en cualquier directorio de tu PATH, simplemente tienes que extraer todos los VOB's de todos los DVDs de la "temporada" y luego dejar que se ripeen todos los capítulos. En las dos últimas temporadas que me he comprado me he encontrado con que el DVD tenía protección ARccOS, así que necesité extraer el contenido del DVD a una imagen ISO usando el programa lxdvdrip o k9copy. Parece ser que hay otra protección llamada RipGuard, aunque todavía no me la he encontrado. El uso del script es muy sencillo.


dvd2mpeg4.sh --info [--iso nombre_dvd.iso]

Confirmo cuales son las pistas de los episodios a extraer (normalmente serán 3 o 4).
Confirmo que tiene pistas de audio y subtítulos en inglés y español. 


  • (2) El siguiente paso es extraer los VOB's de las 3 o 4 pistas del DVD e indicar el número del primer Episodio al que corresponden.
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 1   [--iso nombre_dvd.iso]

En este ejemplo se trata de un DVD con 4 episodios (en las pistas 1, 3, 4 y 5) y que corresponden al Episodio 1, 2, 3 y 4.
Por cada episodio extraido, el script va a crear 4 ficheros, que se usarán luego a la hora de "ripear" el episodio: 

-rw-r--r-- 1 luis luis        432 jun 21 12:16 Serie 3 - Episodio 01-chapter.txt
-r-xr-xr-x 1 luis luis      61440 jun 21 12:16 Serie 3 - Episodio 01.ifo
-rw-r--r-- 1 luis luis         39 jun 21 12:16 Serie 3 - Episodio 01.txt
-rw-r--r-- 1 luis luis 1024286720 jun 21 12:16 Serie 3 - Episodio 01.vob


  • (3) El siguiente paso sería extraer el resto de VOB's del resto de DVD's. En un ejemplo de una temporada de 6 DVD's con 24 capítulos, y 4 episodios por DVD, los comandos serían (en el ejemplo asumo que siempre están en las pistas 1, 3, 4 y 5). No olvides añadir [--iso nombre_dvd.iso] si es necesario.
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 1
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 5    
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 9    
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 13
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 17
dvd2mpeg4.sh -X -p "1 3 4 5" -t "Serie 3" -E 21


  • (4) Una vez que tengo todos los episodios extraidos, simplemente dejo al ordenador toda la noche "ripeando" :-).
dvd2mpeg4.sh -V -t "Serie 3"

De forma secuencial irá ripeando todos los .vob's que encuentre que empiezan por "Serie 3*" y creará los Matroskas:

$ ls -al *.mkv
-rw-r--r-- 1 luis luis 631789795 jun 21 12:39 Serie 3 - Episodio 01.mkv
-rw-r--r-- 1 luis luis 632681183 jun 21 12:58 Serie 3 - Episodio 02.mkv
:


Reproducción

  • Recomiendo usar Plex.app para MacOSX o XBMC para Linux
Plex.app: /Applications/Plex.app/Contents/Resources/Plex/system/scrapers/video

Enlaces y Créditos

[1] Wiki Luispa Página principal de LuisPa.
[2] h264enc Script h26enc
[3] Notas h264enc Mis notas sobre el script h264enc
[4] Gentoo y Matroska Información sobre ripping
[5] Script hb.sh Script interesante
[6] Información x264 Sobre x264
Hilo muy interesante den Gentoo Forums En este hilo hay varios scripts muy interesantes.

http://www.mplayerhq.hu/DOCS/HTML/en/menc-feat-x264.html


Volver a la página de Voz y Video

--Luis 09:23 13 jun 2009 (CEST)