domingo, 31 de marzo de 2013

GoPro Time-lapse

En mi cumpleaños pasado recibí una GoPro Hero 3. Es una excelente cámara de acción que además de grabar videos, puede tomar fotos a intervalos fijos que podemos después convertir en un video tipo "time-lapse". Convertir las fotos en un video es fácil. Primero hay que convertirlas al tamaño correcto y recortarlas para que quepan dentro de un cuadro de video. En este caso quiero crear un video de 1920x1080, por lo que ajustamos las imágenes respectivamente:

for i in *.JPG; do convert "$i" -gravity center -resize 1920x -crop "1920x1080+0+0" +repage "resized/$i"; done

El comando anterior hace los ajustes necesarios a todas las imágenes del directorio. Primero les cambia el tamaño a 1920px horizontales de forma proporcional, y después las recorta de forma centrada. Ahora que tenemos todas las imágenes en el tamaño correcto, es solo cuestión de unirlas para generar el video:

mencoder "mf://*.JPG" -mf fps=30 -o timelapse.avi -ovc x264


Actualización
El comando original para convertir el tamaño de las imágenes funciona, pero es muy tardado cuando estamos lidiando con cientos de fotos. Para mejorar la velocidad, podemos usar xargs para ejecutar la misma instrucción en paralelo:

find -name '*.JPG'| xargs --max-procs=10 -n1 -l -I file convert "file" -gravity center -resize 1920x -crop "1920x1080+0+0" +repage "resized/file"

Estoy limitando el número de procesos a 10, pero puedes incrementar ese número a lo que mejor te funcione. Si tienes instalado GNU Parallel, todavía mejor:

find . -name "*.JPG" | parallel -j+0 --bar convert {} -gravity center -resize 1920x -crop "1920x1080+0+0" +repage resized/{/}

No hay comentarios.:

Publicar un comentario