Preparando los .vob para Adobe Premiere CS3 con bash

2007/09/05

Bueno, el otro día comenté sobre como separar archivos .vob (de formato DvD) en capítulos sueltos para editar los videos más comodamente.

La verdad es que me sirvió bastante bien para editar con el Pinnacle 9. ¿Qué es lo que pasó? Que el Pinnacle Studio 9 fallaba más que una escopeta de caña, ya que se colgaba cada dos por tres haciéndome repetir trabajo. Además, una vez conseguí terminar el video, no me dejaba exportarlo a avi, mpg o mp4 ya que petaba en el proceso.

Ojo, no digo que el Pinnacle Studio 9 sea una mierda, ya que la interfaz es super sencilla y cómoda, y además, después de parchearlo a la versión 9.3.4 funcionaba sin problema ninguno. Pero por todos es conocido que el Premiere es más potente que el Studio, y quiero probarlo.

Total, que después de que me “prestasen” el Adobe Premiere CS3 y lo echase a andar, me topé con el primer problema (problema que por cierto también me encontré en el Pinnacle Studio 10, y que debería de ver si esta solución para el Premiere sirve también para este otro programa).

El problema es que, al importar los archivos .mpg que creé de la manera que describí en el otro post, tenía archivos .mpg sin sonido, y claro, como que no tiene gracia…

El problema estaba en la importación del formato de archivo, ya que el Adobe Premiere funciona bien y por otro lado, el video se veía y se escuchaba en el mplayer. ¿Cómo solucionarlo? Pues exportándolo de otra manera distinta. Es fácil, la verdad, simplemente hay que indicarle al mencoder, que al exportar el capítulo, el audio lo pase por libavcodec y codifique en mp2. Es decir, que lo que vimos el otro día quedaría así:

mencoder dvd:// -dvd-device <carpeta_donde_tengas_el_DvD> -of mpeg -oac lavc -ovc copy -lavcopts acodec=mp2 -o <archivo_de_salida.mpg> -chapter inicio-fin

Y ya está. Es un post un poco corto, así que podemos expandirlo con otro tema que me preocupaba un poco la verdad…

Teniendo en cuenta que tengo unos 27 ó 28 días grabados de video, que cada día hay entre 1 y 4 discos, y que cada disco tiene entre 15 y 40 capítulos (la cámara crea un capítulo cada vez que se pulsa el botón record – útil la verdad xD), pues puede haber miles de capítulos, por lo que habrá que escribir ese comando unos cuantos cientos de veces y estar pendiente del ordenador de una manera innecesaria.

Así que me dije… ¿por qué no hacer un script en bash para que lo haga solito casi todo?

Manos a la obra: Hagamos un script que tome tres argumentos: la carpeta origen, la carpeta destino y el número del capítulo por el que vamos. Así por ejemplo llamaríamos al siguiente script:

carpeta_donde_se_guarda/separar_capitulos 2006-08-10/1 2006-08-10 1

Esto cogería el DvD de la carpeta ruta_origen/2006-08-10/1 ruta_destino/2006-08-10 y guardaría los capítulos de ese DvD numerados a partir del archivo 1.mpg

Empecemos con el código:

La primera línea debería de ser algo tal que así, para que sepa con que interpretar el script:
#!/bin/bash

Comprobamos que se hayan introducido tres parámetros (destino, origen, offset):
if [ $# -ne 3 ]; then
echo "Uso: $0 carpeta_origen carpeta_destino archivo.mpg"
echo "Ej: $0 2006-08-10/4 2006-08-10 69"
exit 1
fi

Cogemos el número de capítulos que tiene ese DvD (para despues hacer un bucle). Queda un poco guarrillo porque se ve algo de la salida del mplayer, pero como es un script que solo voy a usar para esto, es simplemente para ahorrarme comandos, y funciona 🙂

Para ello llamamos al mplayer, diciéndole que ejecute el capítulo 1000 del DvD que especificamos. Esto dará un error porque el DvD no tiene capítulo 1000, pero entre su salida, nos dará también el número de capítulos que tiene en total ese DvD. Esa salida la cogeremos y nos quedaremos (con grep) solo con la linea en la que aparece la palabra “chapters”, y de esa linea, con la tercera palabra (con cut), que es el número que nos interesa:

NCHAP=`mplayer dvd:// -dvd-device <carpeta_origen>/"$1" -chapter 100-100 | grep chapters | cut -d" " -f3`

Para coger la salida del comando anterior, recordad que a NCHAP se le asigna la salida de la ejecución del comando que está entre las comillas simples antiguas (en un teclado español, la que está en la tecla del [ o del ^, a la derecha de la P).

Para terminar, una vez tenemos el número de capítulos que hay, los vamos procesando uno a uno, copiando su video y pasando su audio a mp2:

Asignamos dos variables, el capítulo de entrada, que empezará por el primer capítulo del DvD, y el capítulo de salida, que empezará por el offset que hemos especificado en el tercer parámetro al llamar a nuestro script:

CAP_IN=1
CAP_OUT=$3

Para cada capítulo del DvD, vemos si existe. Si existe nos lo saltamos para no sobreescribir el archivo de salida. Además, lo notificamos para luego ver que era lo que había…

while (($CAP_IN <= $NCHAP)); do
if [ -e "<carpeta_destino>/$2/$CAP_OUT.mpg" ]; then
echo $CAP_OUT existe! saltandoselo...

Si no existía, lo procesamos, indicando que es lo que estamos haciendo:

else
echo "<carpeta_origen>/$1[$CAP_IN] => <carpeta_destino>/$2/$CAP_OUT.mpg"
`mencoder -msglevel all=-1 dvd:// -of mpeg -oac lavc -ovc copy -lavcopts acodec=mp2 -dvd-device <carpeta_origen>/"$1" -o <carpeta_destino>/"$2"/"$CAP_OUT".mpg -chapter "$CAP_IN"-"$CAP_IN"`
fi

Y aumentamos las variables del bucle, para no liarla ^^’

((CAP_IN++))
((CAP_OUT++))
done

Y con esto acaba nuestro script. Si queremos luego podemos hacer que si no existe /$2 se cree automaticamente, o cualquier otra cosilla que veais, pero bueno, a mi esto me quita todo el trabajo gordo, por lo que estoy satisfecho con el script ^_^

Además, si no queremos estar escribiendo la ruta completa del script cada vez, podemos hacer lo siguiente:

crear una carpeta ~/bin donde guardaremos nuestros scripts:
mkdir ~/bin

añadir esa carpeta al path, modificando el archivo ~/.bash_rc, añadiendo la siguiente linea:
PATH=export $PATH:~/bin

Así por ejemplo para procesar un día con cuatro DvDs, solo habría que escribir 4 comandos:

separar_capitulos 2006-08-10/1 2006-08-10 1
separar_capitulos 2006-08-10/2 2006-08-10 21
separar_capitulos 2006-08-10/3 2006-08-10 38
separar_capitulos 2006-08-10/4 2006-08-10 61

Con esos cuatro comandos suponemos que el primer DvD tenía 20 capítulos (archivos 1.mpg – 20.mpg), el 2º Dvd generaría los capítulos del 21 al 37, el 3º del 38 al 60, y el 4º del 61 en adelante… y nos hemos ahorrado unos 80 comandos aproximadamente 🙂 (y el tiempo que hay que estar pendiente para ir poniéndolos uno detrás de otro claro está).

Todo esto se podía haber hecho en Windows también, ya que tiene su propio lenguaje de shell script (distinto), pero me parecía bastante más interesante hacerlo en Linux, ya que en Windows poca gente usa la consola, y aprender a hacerlo en Linux es mucho más pedagógico 😛 (además de que es el sistema operativo que normalmente uso).

Ahora ya bien, depende de lo que se necesite, pues se puede usar el Studio de Pinnacle o el Premiere de Adobe, pero tendremos nuestro DvD separado por capítulos en archivos mpeg para una edición cómoda y que sirvan para ambos programas ^_^

Anuncios

8 y 9 de Agosto: Viaje y llegada a Japón

2007/08/11

Hace ya justo un año que pisé por primera vez tierras niponas, así que creo que no me vendría mal recordarlo como es debido…

Recuerdo el inicio de mi viaje, allá por el aeropuerto de Madrid, en el stand de JAL ya nos empezábamos a reunir un buen grupito de gente que viajábamos juntos. Incluso llegaron reporteros de La Sexta, los cuales ¡incluso me entrevistaron! aunque no se si ese reportaje se llegaría a emitir alguna vez, ya que no veo la televisión apenas…

Pues nuestro avión, que salía después de comer con destino al aeropuerto de Narita en Tokyo, pasando por Amsterdan, salió con unos cuantos minutos de retraso… lo cual puso un poco nervioso a mis compañeros de viaje, puesto que teníamos que hacer un trasbordo en Holanda un poco justo de tiempo.

Por cierto, sería allí en Amsterdam donde nos reuniríamos con el resto del grupo, que salía desde Barcelona, ya que no estábamos todos los que éramos 😛

La verdad es que yo iba tranquilo, porque tenía la creencia de que todo saldría bien, incluyendo el retraso, y así fue al final… (menos mal ^_^u…). Cuando llegamos al aeropuerto de Amsterdam y desembarcamos, nos estaban esperando amablemente (y supongo que agobiados xD) dos trabajadores de la JAL, un europeo y una japonesa, para guiarnos rapidamente y con toda la prisa del mundo hacia nuestro super Boeing que nos conduciría durante las próximas horas hacia Japón.
(me tuvieron que ver pintas sospechosa en Amsterdam, porque me cachearon y todo! LoL!)

Narita airport

Este avión, bastante más grande, lujoso y en lineas generales, mucho mejor que el pestoso avión de Iberia, tenía tres filas de asientos, dos laterales de 3 asientos creo, y una central de 4. Cada asiento tenía una pequeña pantalla individual, donde podías escuchar la radio, ver la televisión eligiendo entre varias películas que se emitían ciclicamente como si fuese un cine, jugar con mini-juegos para entretenerte, e incluso podías llamar por teléfono (aunque tendría que costar un pastón), y ver detalles del vuelo, como mapas, por donde ibas, información como temperaturas, velocidad y demás, y ver las cámaras externas del avión, donde podías ver creo recordar, que algo así como lo que veía el piloto y otra con el cielo en general… algo aburrido durante el vuelo, pero interesante cuando salias o llegabas a la ciudad (eso sí, las pantallitas se apagaban durante el aterrizaje, aunque podías verlo en la pantalla principal del avión, situada frente a la fila central).

Cuando llegamos a Japón, al aeropuerto de Narita el día 9 de Agosto, allí estaba Akira-san esperándonos en la terminal, para guiarnos a los autobuses que nos llevarían a Tokyo (ya que el aeropuerto de Narita está bastante lejos de Tokyo).

Tôdai - 東大 Antes de pasar por el hotel, fuimos, de prisa y corriendo, a la universidad de Tôkyô! La Tôdai (Tôkyô daigaku – 東京大学), con lo cual empezamos a meternos en los animes en los que tantas veces hemos visto la Tôdai, y tuvimos nuestro primer encuentro con un grupo de colegialas (que aunque estuviesemos en la universidad, estas tendrían que tener unos 13 ó 14 años xD).

Luego ya por fin llegamos al hotel, donde pudimos dejar las cosas, acomodarnos un poco, y aunque la verdad no recuerdo muy bien la hora que era, por eso del jet lag, creo que llegamos por la tarde y no pudimos hacer demasiado ese día ya. Creo que bajamos a cenar a un barecillo rápidos de estos donde ponen boles con carne de cerdo muy ricos, y pudimos dar nuestra primera vuelta por Akihabara! Aunque eso lo contaré ya en otro post, que bastante largo se ha hecho ya este ^_^u…

Tôdai - 東大

VIDEO: Danikaze in Japan 1


Separando .vob en capítulos sueltos

2007/08/11

Para variar estos días, sigo con insomnio… así que voy a aprovechar para poner un post. Realmente iba a postear unas fotillos sobre Málaga, pero como no las tengo aquí, pues aprovecho y pongo otra cosa que hice esta tarde.

Resulta que gracias a una reciente compra de un disco duro nuevo de 400 GB me decidí a volcar todos los videos que grabé de mi pasado viaje a Japón, en formato DvD (así los grababa la cámara de video que llevaba) al disco duro, para su posterior edición (si es que tengo tiempo claro xD).

Pues da la casualidad de que el Pinnacle Studio 9 no lee archivos .vob del formato DvD. ¿Cómo solucionarlo? Pues sabiendo que el formato DvD realmente es mpeg, bastaría con renombrar el .vob a .mpg ¿no? En parte sí, pero el Studio 9 sigue sin leer bien el archivo de video, ya que sólo ve el primer capítulo del archivo (cada archivo es de 1 GB de tamaño, y cada vez que comienzas a grabar se crea un capítulo nuevo). Es decir, que no me sirve.

¿Soluciones? Varias. Después de probar de todas las maneras posibles el que cargase el .vob y darme por vencido, probé el Virtual Dub Mod (el Mod carga mpeg2) y transformarlo a .avi. Esto funcionaba bien, solo que no es capaz de decodificar el audio del Dvd ¬¬u… así que tampoco me servía bien.

Al final, la mejor solución es la más conocida ^_^. Usar el mágico programa y más famoso reproductor de videos de linux: el mplayer y su compañero mencoder. Digamos que tenemos los archivos con su jerarquía DvD (esto es, su carpeta TS_VIDEO y tal…) en una carpeta de nuestro disco duro (que fue como yo me fui copiando los DvDs a medida que grababa en Japón), y queremos extraer todos los capítulos en archivos sueltos para su edición. Pues fácil, basta con usar el siguiente comando:

mencoder -dvd-device <carpeta_donde_tenemos_volcado_el_dvd> dvd:// -of mpeg -oac mp3lame -ovc copy -o <archivo_de_salida> -chapter <inicio>-<fin>

Así, si queremos extraer solo un capítulo por archivo, el parametro <inicio> y <fin> para la opcion -chapter debe ser el mismo. P.e: -chapter 1-1 para el primer capítulo.

De esta manera tenemos listos todos nuestros capitulitos en archivos pequeñitos y manejables para su posterior edición cual Spielberg casero en el Studio 9 (lease el programa que más te guste, ya que puedes sacarlos en el formato que otro programa necesite, en mi caso mpg).

Realmente no soy un gran entendido sobre edición de video (es más, es la primera edición así que voy a hacer, sin contar compresiones y demás… xD)

Y otra cosa a tener en cuenta es que, aunque haya metido este post dentro de la sección Linux, por ser un truquito del mplayer, realmente todo esto lo hice desde Windows, donde también está el mplayer, y es donde lo voy a usar, ya que ahí es donde tengo instalado el Pinnacle ^^’.