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.
El material necesario es:
- una Raspberry Pi 1 o 2
- una SD con Raspbian instalado
- fuente de alimentación
- webcam normalita o full HD
-
Logitech C170 - Webcam, color negroLogitech C170 - Webcam básica
Última actualización el 2024-11-23 / Enlaces de afiliados / Imágenes de la API para Afiliados
-
RebajasLogitech C920 HD Pro Webcam,Videoconferencias1080p/30 fps,Sonido Estéreo,Corrección de Iluminación HD,Skype/Hangouts/FaceTime, PC/Mac/Android/Chromebook, Funcionan con Teams, Google Meet, Zoom-NegroLogitech C920 HD Pro Webcam 1080p FULLHD micrófono estéreo
Última actualización el 2024-11-21 / Enlaces de afiliados / Imágenes de la API para Afiliados
-
- opcional conectar a la red por cable o Wi-Fi
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
- Conectamos la webcam y la red por cable o Wi-Fi a la Raspberry y la encendemos
- Desde una Terminal local o remota por SSH Putty instalamos el programa
fswebcam
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
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 pi
esté 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 decamera.sh
. El texto será:
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
fswebcam -r 1920x1080 --no-banner /home/pi/camera/$DATE.jpg
Lo guardamos con el nombre comentado, o dándole a la tecla Ctrl + X y diciéndole Sí
. 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
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.