Creando vídeos time-lapse de una cámara de seguridad con FFmpeg

Recientemente he adquirido una cámara IP de seguridad para ponerla en el patio de mi casa. Ha habido robos últimamente y me gustaría saber qué sucede por las noches cuando yo no miro 🙂

Una de las funciones de esta cámara (Foscam FI9804W ) es la de poder sacar una fotografía y subirla a un FTP cada X segundos. Para no sobrecargar la red, y porque lo importante, que es la detección de movimiento, ya lo tenía activado, decidí configurarla para obtener una foto cada 60 segundos.

El resultado es que tengo una serie de imágenes capturadas cada minuto:

Schedule_20151205-081032.jpg
 Schedule_20151205-081132.jpg
 Schedule_20151205-081232.jpg
 Schedule_20151205-081332.jpg
 Schedule_20151205-081432.jpg
 Schedule_20151205-081532.jpg
 Schedule_20151205-081632.jpg
 Schedule_20151205-081732.jpg
 Schedule_20151205-081832.jpg
 Schedule_20151205-081932.jpg

Como puedes ver, refleja el día y la fecha de la captura. Combinándolas se va a poder ver el paso del día (movimiento de luces, viento, crecimiento de hojas…) en un vídeo bastante bonito.

¿Cómo puedo crear un vídeo a partir de las imágenes? En internet, sobre todo para Windows, hay multitud de opciones, pero yo quería usar algo open-source que funcionase en mi ubuntu, y eso no es otro que FFmpeg.

Sólo unos pocos pasos:

1. Nos descargamos las fotos a un directorio cualquiera en el que estén todas juntas. En mi caso me las he bajado usando “scp” porque las tengo en un servidor ubuntu también con ssh activado. También instalamos ffmpeg

sudo apt-get install ffmpeg -y

2. Si queremos usar FFmpeg, tenemos que tener las fotos con nombres consecutivos del estilo: imagen1.jpg;imagen2.jpg…. y así hasta imagen 967.jpg por ejemplo. Si falta alguna FFmpeg dejará de funcionar. ¿Cómo hacemos esto?  Fácil, gracias a la ayuda de la shell. Yo encontré esta forma:

N=1; for X in $( ls *.jpg | sort ); do mv $X imagen$N.jpg; N=$(($N+1)); done

3. Ahora tenemos todas las imágenes con el formato adecuado. Es hora de usar FFmpeg. Ejecutamos:

ffmpeg -framerate 25 -i imagen%00d.jpg -c:v libx264 -profile:v high -crf 20 -pix_fmt yuv420p output.mp4

…donde imagen%00d.jpg quiere decir que debe tomar los nombres de ficheros del estilo imagen1.jpg …. imagen234.jpg, que es lo que necesitamos.

Y tras esperar un ratillo, dependiendo de nuestro ordenador y de la cantidad de fotos, ya tenemos el video output.mp4

El resultado final es este: https://www.youtube.com/watch?v=7m-zhjmWxaI

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s