lunes, 27 de febrero de 2012

Cheese, fotos en ráfaga y conversión a vídeo

He logrado, o mejor debemos decir hemos logrado, por que he tenido ayuda "experta", superar algunas de las dificultades del uso de cheese que decíamos aquí. En primer lugar, el apagado del monitor ha sido bastante simple, ejecutando estas ordenes:
xset s off # Disable X windows screen saver
xset -dpms # Disable display power management system
tomadas de aquí.
Sin embargo, han aperecido otras dificultades. Cheese, además de limitarse a 10.000 imágenes, ha presentado otra dificultad; guarda los ficheros con unos nombres que dificultan la conversión a vídeo. Los ficheros, para poner un ejemplo, tienen unos nombres que muestran un cuerpo inicial común formado de la fecha de inicio y la hora, minutos y segundos de comienzo:
- Primero: 2012-02-17-173235_1.jpg
- Último: 2012-02-17-173235_10000.jpg
Luego se numeran desde el 1 en adelante, pero sin mantener un número común de caracteres. Esa falta de ceros a la izquierda de los números hace que el ordenador, y los programas que generan el vídeo desde las imágenes, los ordenen de manera equivocada, siendo por ejemplo el último el 2012-02-17-173235_9.jpg. Así, cada determinado número de frames hay una imágen equivocada que genera bastantes molestias.
Por suerte mi amigo hckorootx generó unos scripts para cambiar en masa el nombre de los ficheros, como podemos ver en los comentarios de esta entrada. En concreto, este script funcionó perfectamente (muchas gracias, hckorootx):

#!/bin/bash
for archivo in *.jpg; do
long_total=`expr length $archivo`
long_util=`expr $long_total - 18`
nombre_inutil=`expr substr $archivo 1 18`
nombre_util=`expr substr $archivo 19 $long_util`
if [ $long_util -eq 5 ]; then
ceros="0000"
nombre_final=$nombre_inutil$ceros$nombre_util
mv $archivo $nombre_final
elif [ $long_util -eq 6 ]; then
ceros="000"
nombre_final=$nombre_inutil$ceros$nombre_util
mv $archivo $nombre_final
elif [ $long_util -eq 7 ]; then
ceros="00"
nombre_final=$nombre_inutil$ceros$nombre_util
mv $archivo $nombre_final
elif [ $long_util -eq 8 ]; then
ceros="0"
nombre_final=$nombre_inutil$ceros$nombre_util
mv $archivo $nombre_final
fi
done

Además, como se ve es muy explicativa por si misma. Menos mal, por que yo de script en bash no tengo ni idea, y eran casi 40.000 ficheros en 6 tandadas los que había que renombrar.
Una vez convertidos adecuadamente desde el primero 2012-02-17-173235_00001.jpg hasta el último 2012-02-17-173235_10000.jpg, ya solo quedaba dar una orden de conversión. Después de haber pensado en usar openshot, decidí usar directamente mencoder, por que el terminal es siempre más rápido.
Con esta orden,

$ mencoder "mf://*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4

que tendré que pulir leyendo más profundamente las guías modernas de mencoder, me salió un conjunto de vídeos de los que cortando trozos y pegando con VirtualDubMod a través de wine logré un total de 4minutos y 12 segundos bastante buenos (me ha felicitado mucha gente), a partir de algo más de 6300 imágenes del total de 40.000.
No, no enseñaremos aquí el vídeo, por que es un objeto científico, y hasta que sea publicado los científicos no compartimos nada de nada. Después de publicarlos los derechos dejan de ser nuestros y ya no podemos disponer de nuestros hallazgos para difundirlos y hay que pedírselos a editoriales como Elsevier, Springer y otras similares. Si me dejan ponerlo en Youtube, según el uso al que esté destinado, lo pondré también aquí, pero no prometo nada.
El siguiente paso sería aprender lo suficiente de motion para poder evitar esa limitación de 10.000 imágenes de cheese... pero esa será otra historia

5 comentarios:

  1. PDFs de bash scripting:

    http://tldp.org/LDP/Bash-Beginners-Guide/Bash-Beginners-Guide.pdf

    http://tldp.org/LDP/abs/abs-guide.pdf

    ResponderEliminar
  2. Después de haber descargado y explorado el código fuente de Cheese, averigüé que el límite de 10.000 capturas se encuentra en el archivo "cheese-prefs.ui". Para modificar dicho límite, editamos "/usr/share/cheese/cheese-prefs.ui" y en la sección:

    id="burst_count_adjustment"

    Cambiamos el valor de la propiedad:

    property name="upper"

    Lo que no he comprobado es si realmente pasa de 10.000 capturas, lo dejo en tus manos.

    Saludos.

    ResponderEliminar
  3. Después de haber descargado y explorado el código fuente de Cheese, averigüé que el límite de 10.000 capturas se encuentra en el archivo "cheese-prefs.ui". Para modificar dicho límite, editamos "/usr/share/cheese/cheese-prefs.ui" y en la sección:

    id="burst_count_adjustment"

    Cambiamos el valor de la propiedad:

    property name="upper"

    Lo que no he comprobado es si realmente pasa de 10.000 capturas, lo dejo en tus manos.

    Saludos.

    ResponderEliminar
  4. Después de haber descargado y explorado el código fuente de Cheese, averigüé que el límite de 10.000 capturas se encuentra definido en el archivo "cheese-prefs.ui". Para modificar dicho límite, editamos "/usr/share/cheese/cheese-prefs.ui" y en la sección:

    id="burst_count_adjustment"

    cambiamos el valor de la propiedad:

    property name="upper"

    por el valor deseado (por defecto está en 10000).

    Lo que no he comprobado es si realmente pasa de 10.000 capturas, lo dejo en tus manos.

    Saludos.

    ResponderEliminar