Timelapse 24 horas con Raspberry Pi + Webcam USB

¡Hola a todos! Hoy vengo a compartir con todos vosotros un pequeño proyecto que se me ocurrió a raíz de los últimos tutoriales que hemos realizado con una Webcam USB conectada a nuestra RaspberryPi.

Se trata de realizar un vídeo Timelapse, es decir, vamos a ir capturando imágenes con la Webcam durante un tiempo determinado, para luego montar un vídeo con todas ellas. Aunque en esta ocasión la funcionalidad del proyecto es más bien artística, el resultado es digno de ver. ¡Así que espero os animéis a realizarlo y compartáis con nosotros vuestros vídeos finales!

Como siempre, vamos a hacer una lista de lo que se necesitará para realizar éste proyecto:

  1. 1x Raspberry Pi con la distribución Raspbian
  2. 1x Webcam USB compatible (Se ha utilizado la Playstation Eye de PS3)
  3. Conocimientos en Python
  4. Espacio disponible en la SD > 2Gb (Depende del número de imágenes que se vayan a tomar)
  5. Herramienta Fswebcam
  6. Herramienta MEncoder
  7. Conexión a Internet

El proyecto se basa principalmente en programar un pequeño script Python que ejecutará un bucle. En dicho bucle se utilizará la herramienta fswebcam que funciona bajo línea de comandos, la cual nos permite capturar imágenes a través de la Webcam USB. Una vez el script haya finalizado, utilizaremos la herramienta MEncoder para montar el vídeo final Timelapse llevado a cabo.

¡Empezamos!

Instalación de Herramientas

Vamos a instalar las herramientas que vamos a utilizar, para ello ejecutamos en una terminal los siguientes comandos:

$ sudo apt-get install fswebcam $ sudo apt-get install mencoder

Creación del script Python

A continuación vamos a crear el script Python, para ello abrimos un editor:

$ sudo nano timelapse.py

Y dentro del editor pegaremos el siguiente código Python (el script):

#!/usr/bin/python ''' TimeLapse v1.0 Python script by @AlexCorvis84 Pequeño script Python que guarda imágenes capturadas por una Webcam mediante la herramienta fswebcam. El tiempo de ejecución estará determinado por la variable 'end'. La cual define el número final de imágenes a tomar. En este caso se han tomado 8640 fotografías que se corresponde con: 6 imágenes/min x 60 min/Hora x 24 Horas = 8640 imágenes NOTA: Modificar el valor de la variable 'end' para realizar vídeos con distintas duraciones. Ej: 10min = 60 imágenes, 30min = 180 imágenes, etc. Agradecimientos a www.geekytheory.com''' import os import time import sys start = 0 end = 8640 print "Comienza el script....durante 24 Horas" while start < end: print "Capturando imagen" os.system("fswebcam -i 0 -d /dev/video0 -r 640x480 -p YUYV -q --title @AlexCorvis84  /home/pi/projects/timelapse/%d%m%y_%H%M%S.jpg") start = start+1 time.sleep(10) print "Proceso TIMELAPSE finalizado. Turno para editar el video" sys.exit()

Como observaréis, básicamente el script consiste en un bucle que se ejecuta a intervalos de 10 segundos, y mediante el cual se van a ir guardando imágenes con nombres tipo "DíaMesAño_HoraMinutosSegundos.jpg" hasta que el bucle llegue a cumplir la condición de parada, es decir, se hayan tomado el número total de fotografías.

Una vez guardado el script python, modificaremos sus permisos de ejecución, para ello:

$ sudo chmod +x timelapse.py

Ahora ya podamos iniciar el script mediante el comando:

$ ./timelapse.pyNOTA: La ruta por defecto que se ha asignado para el almacenamiento de las imágenes ha sido /home/pi/projects/timelapse

Iniciado el script, dejaremos funcionando la Raspberry Pi hasta que se complete su ejecución. ¡Es hora de irse de cañas! xD

Como siempre, me gusta dar una pequeña descripción de las herramientas que utilizamos, así que vamos a ello:

Fswebcam: Es una aplicación que funciona bajo línea de comandos (CLI) y que permite capturar imágenes con dispositivos V4L1/V4L2 (Video for Linux versiones 1 y 2) compatibles (es decir, Webcams compatibles con Linux). Reduce el ruido de las imágenes capturadas, mejorando su calidad y permite guardar imágenes tanto en formato JPEG como PNG.

Aquí podéis encontrar su WEB OFICIAL y aquí una descripción de TODAS SUS OPCIONES Y PARÁMETROS.

Bien, después de habernos ido por ahí de cañas, al cine, o haber hecho vida social ;) ....comprobaremos que se el script ha finalizado y se han guardado correctamente todas las imágenes en la ruta que se indicó anteriormente.

¡Ahora es turno de codificar nuestro vídeo Timelapse!

Codificación del vídeo:

MEncoder: Es un codificador de vídeo libre liberado bajo licencia GPL que se incluye en el reproductor MPlayer. Permite codificar distintos formatos de vídeo y audio.

Va a ser la herramienta que utilizaremos para formar nuestro vídeo gracias a todas las imágenes que se capturaron. Para ello, lo primero que haremos será crear un archivo *.txt que contenga todos los nombres de las imágenes capturadas. Ésto lo conseguimos (estando en la carpeta donde se encuentran las imágenes) ejecutando:

$ ls *.jpg > lista.txt

Y ahora ejecutaremos el comando que generará nuestro vídeo Timelapse:

NOTA: ¡Aseguraos de que aún os queda espacio suficiente en la SD! Si no, otra opción sería (que es la yo opté a realizar) copiar todas las imágenes a otro equipo y realizar el siguiente paso en la nueva estación de trabajo.

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

Finalizado el proceso, tendremos nuestro vídeo timelapse.avi generado para su visualización.

¡A continuación os dejo el vídeo que conseguí realizar!

¡Espero que los vuestros sean mejores! Ejecuté el script ya entrada la tarde, capturé toda la noche (¡todo negro! ¬¬) y ni me había acordado del cambio de hora! Pero bueno, para ser la primera prueba, quedó bastante bien.

Además, si tenéis alguna Webcam compatible con mayor resolución, obtendréis unos vídeos asombrosos.

¡Espero os haya gustado éste nuevo proyecto, os animéis a realizarlo y compartáis vuestros vídeos en los comentarios!

¡Un saludo y hasta la próxima!

@AlexCorvis84