Webcam Raspberry Pi Time-lapse

Timelapse con webcam y Raspberry Pi

Timelapse con webcam y Raspberry Pi

Además de poder usar la cámara hardware oficial de la Raspberry Pi, también se pueden aprovechar las webcam para temas de seguridad como publique en estas ocasiones:

Ahora voy a probar otra cosa que tenía ganas de hacer. Se trata de un Timelapse, o sea, un vídeo a cámara rápida. Para ello he seguido la guía que hay en la web oficial de Raspberry Pi. A la que luego le haremos una mejora.

Webcam Raspberry Pi Time-lapse

El material necesario es:

Lo de la conexión a la red, es para que la Raspberry esté con la hora y fecha bien puesta, ya que como no se puede configurar la coge siempre de Internet y más adelante veremos que se usa para generar las fotos que luego convertiremos en un vídeo.

Programa para tomar fotos con nombre basado en día y hora

sudo apt-get install fswebcam

  • Comprobamos ahora la máxima resolución de la cámara tratando de hacer una foto en fullHD, para ello desde la Terminal ejecutamos el comando:

fswebcam -r 1920x1080 --no-banner foto.jpg

Script programa Webcam Raspberry Pi Time-lapse

En la carpeta personal del usuario que estemos usando se habrá copiado una foto con el nombre foto.jpg que al abrirla podremos ver cómo ha salido y qué resolución tiene. Lo normal es que con el usuario piesté en la carpeta /home/pi/. Lo de hacerla en fullHD es para que la cámara automáticamente la trate de hacer a esa resolución o la más alta disponible. Podemos saber la resolución viendo las propiedades con el botón derecho del ratón o algo de ese estilo.

Una vez tengamos clara la resolución, o sin tenerla y dejando la opción de fullHD vamos a escribir un pequeño programa que hará fotos con un nombre que depende del día y de la hora:

  • Desde la Terminal tecleamos este comando nano -w cameera.sh o usando Leafpad y guardándolo con este mismo nombre de camera.sh . El texto será:
#!/bin/bash
    DATE=$(date +"%Y-%m-%d_%H%M")
    fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE.jpg

Script programa Webcam Raspberry Pi Time-lapse

Lo guardamos con el nombre comentado, o dándole a la tecla Ctrl + X y diciéndole . Ahora convertimos el programa en ejecutable usando este comando en la Terminal: chmod +x camera.sh y creamos una carpeta que se llame camera en los personales del usuario pi con el comando en la Terminal : mkdir /home/pi/camera

Ahora comprobamos que funciona ejecutando el programa desde la carpeta donde hemos grabado el programa. Para ello desde la Termina hacemos: ./camera.sh

Y comprobamos que el resultado está en la carpeta /home/pi/camera/ y es una foto a máxima resolución con el nombre en función del día y la hora y minutos de su toma.

Tomar fotos automáticamente cada minuto

Ahora vamos a hacer que esta tarea se haga automáticamente para tener un montón de fotos que luego convertiremos en un vídeo.

Desde una Terminal ejecutamos este comando: sudo crontab -e Si es la primera vez que usamos el planificador de tareas nos preguntará que editor usamos, dándole a Enter elegimos nano que es para mí la mejor opción. Bajamos en ese fichero hasta llegar a una parte donde veamos el texto siguiente:

# m h  dom mon dow   command

Ahora añadimos una fila con lo siguiente tal cual:

* * * * * /home/pi/camera.sh 2>&1

Esto hará que se tome una foto cada minuto. Para guardar este cambio, como siempre en nano hacemos Ctrl + O para grabar y Ctrl + X para salir del editor. Debemos ver un mensaje como el siguiente:

crontab: installing new crontab

Ahora volvemos a mirar en la carpeta que creamos, /home/pi/camera/ y si esperamos unos minutos deberá haber una foto nueva cada minuto.

Crear un vídeo en Raspbian o Linux a partir de fotos

Ahora, para crear un vídeo a partir de esas fotos hay que tener en cuenta varias cosas. Cada segundo de vídeo necesita 24 fotos, eso implica que para hacer un vídeo de 1 minuto con este programa necesitemos: 1 minuto = 60 segundos x 24 fotos por segundo = 1440 fotos, que si las hemos grabado con este programa suponen que ha tenido que estar funcionando durante 1440 minutos = 24 horas de Raspberry Pi encendida. Hay que tener claro que esto ocupará bastante espacio y debe estar disponible en esa tarjeta SD. Las imágenes fullHD pueden ser de unos 2 megas, o sea que para estas 1440 imágenes necesitaremos entre 2 y 3 gigas libres

Un ejemplo de vídeos con este programa base a 1 fotograma por minuto y con una cámara con calidad VGA de 640×480 lo podéis ver aquí:

Así que hice un cambio al programa original. Teniendo en cuenta que cron no permite planificar tareas con menos cambio que 1 minuto, lo que hice fue que el programa arranque cada minuto, tome 1 foto espere 15 segundos, tome otra, … y así hasta 4 fotos por minuto. El programa quedaría como:

#!/bin/bash
    DATE=$(date +"%Y-%m-%d_%H%M")
    fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE-A.jpg
    sleep 15
    fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE-B.jpg
    sleep 15
    fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE-C.jpg
    sleep 15
    fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE-D.jpg

Script programa Webcam Raspberry Pi Time-lapse

Un ejemplo de vídeos con este programa base a 4 fotogramas por minuto y con una cámara con calidad fullHD lo podéis ver aquí:

Para crear estos vídeos, hay que tener instalado en Raspbian el programa: mencoder Desde una Terminal lo instalamos con: sudo apt-get install mencoder . Ahora desde la Terminal nos vamos a la carpeta con todas las fotos, /home/pi/camera/ y ejecutamos esta orden: ls *.jpg > stills.txt Esto creará un fichero txt con una lista ordenada de todas las imágenes tomadas. Si tenemos de varios días, o de varios sitios habría que borrarlas o separarlas antes de hacer esto ya que esta lista es la que usará el programa para crear el vídeo. Si ya tenemos claro las imágenes en esa lista solo queda crear el vídeo. Recordad que además del espacio ocupado por las imágenes ahora vais a necesitar el espacio para el vídeo.

mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse.avi -mf type=jpeg:fps=24 mf://@stills.txt

Ahora toca esperar y luego ver el resultado, lo mejor es subirlo a Youtube y allí ya le añadís música.

Webcam Raspberry Pi Time-lapse

  • Alejandro

    muy interesante!!

    • Me alegro que te parezca interesante! Si haces algún Time-lapse compártelo por aquí si quieres.

      • Alejandro

        manuti, he retomado este proyecto
        En el camino, he visto un error nimio… cuando pones “Desde la Terminal tecleamos este comando nano -w cameera.sh” debería ser camera.sh, con una sola “e”

        • Muchas gracias, lo arreglo, que los torpes lo necesitamos todo perfecto o no llegamos.

          • Alejandro

            me está costando conseguir un video bueno, porque la webcam que estoy usando (Logitech 210), me da fotos de oscuras y 640×480 …

          • Sí, supongo que ese será como el primero que yo hice, y que está en este post. Al final interesan días nublados en que la luz no cambie bruscamente. Es cuestión de probar. La Webcam HD que usé para el otro vídeo tampoco me convenció.