Crea un timelapse con una Raspberry Pi y una cámara

La Raspberry Pi es uno de los ordenadores más versátiles que podemos encontrar ahora mismo en el mercado. Gracias a su pequeño tamaño, su potencia y sus posibilidades de expansión, podemos hacer todo tipo de cosas con ella.

Desde un reproductor MP3 con pantalla tactil, hasta unos cascos de realidad virtual, pasando por respiradores para el coronavirus. El límite a la hora de crear proyectos lo pone nuestra imaginación. Y hoy no va a ser menos, porque vamos a ver como crear un timelapse con nuestra Raspberry Pi.

Para el timelapse que vamos a hacer con nuestra Raspberry Pi necesitamos poco, ya que una vez lo tengamos todo montado es encuadrar bien lo que queremos capturar y dejar todo. Básicamente sería la propia Raspberry Pi, una cámara, una tarjeta microSD y algo para alimentarla, como puede ser un powerbank.

Si ya tienes la Raspberry Pi, no hace falta que te compres otra para hacer los timelapses, en caso de que no la tengas y la vayas a usar para proyectos parecidos a este, he elegido la Raspberry Pi 3A+, que no tiene tanta memoria RAM como otros modelos, pero sobra para este y muchos proyectos del estilo.

En cuanto a la cámara, he encontrado el primer modelo para Raspberry Pi bastante barato, ademas de con soporte, lo que lo hace muy interesante. Tenemos que tener en cuenta que este modelo es bastante antiguo y si queremos crear un timelapse de noche no va a ser muy buena, por lo que para eso recomendaría la High quality camera, que conseguirá resultados mejores, aunque sin llegar a los de una cámara profesional.

La tarjeta de memoria de 64GB deberia bastar para tomar más de 1000 fotos en HD para hacer nuestro timelapse, y el powerbank nos permitirá colocar la Raspberry Pi donde queramos para poder hacerlo y que esté funcionando durante horas. Y ahora que lo tenemos todo preparado, vamos con la configuración y a crear nuestro timelapse.

Teniendo en cuenta si vamos a usar una Raspberry Pi camera o una webcam con la Raspberry Pi tendremos que realizar unos pasos u otros para poder tomar las fotos para el timelapse. Yo os lo voy a explicar de las dos formas, aunque solo lo he probado con una webcam que tenía en casa.

Configuración de la Raspberry Pi para hacer el timelapse

Con una Raspberry Pi camera

Raspberry Pi con una Raspberry Pi camera V2

Si optamos por esta solución, vamos a tener que habilitar la interfaz de la cámara con raspi-config o mediante Raspberry Pi Configuration. En este tutorial vamos a ver como se hace desde raspi-config, ya que es muy sencillo y podemos hacerlo sin interfaz gráfica.

Lo primero que tenemos que hacer es abrir rasppi-config con el siguiente comando en la termial:

sudo raspi-config
Menú de raspi-config

Y ahora que lo tenemos en pantalla nos desplazaremos a Interfacing options, donde encontraremos como primera opción Camera. Una vez entramos nos preguntará si queremos activar la interfaz de la cámara. Le contestamos que sí, reiniciamos y ya lo tendremos todo listo para poder hacer las fotos del timelapse que vamos a crear con nuestra Raspberry Pi.

Activando la interfaz de cámara desde de raspi-config

Con una webcam

Si queremos aprovechar una webcam que ya tenemos para ahorrarnos el tener que comprar una cámara para nuestro timelapse, también podemos hacerlo. Hay que tener en cuenta que estas cámaras están pensadas para conferencias online dentro de las casas y es posible que tengamos que cambiar algunas cosas para que el timelapse que estamos haciendo se vea bien. También es verdad que la resolución de estas cámaras web es menor y los sensores de menor calidad, por lo que quizás la calidad de las imágenes deje un poco que desear.

Aun así, solo tenemos que instalar un programa en nuestra Raspberry Pi. Y para que tardemos lo menos posible, aquí os dejo el comando que tenéis que poner en la terminal para no fallar:

sudo apt update && sudo apt install fswebcam -y

Una vez hemos hecho esto, ya lo tendremos todo preparado para poder realizar capturas con nuestra webcam.

Haciendo fotos con la cámara de nuestra Raspberry Pi

Con una Raspberry Pi camera

Ahora vamos a hacer nuestra primera foto con la Raspberry Pi camera antes de empezar a hacer el timelapse. Para ello, ejecutaremos lo siguiente en la terminal:

raspistill -o image.jpg

Como veremos, tendremos un nuevo archivo llamado image.jpg con la foto que acaba de hacer la cámara de la Raspberry Pi. En este caso tendrá toda la resolución de la cámara, lo que luego puede hacer que el video tarde muchísimo en generarse, además de que vaya a ocupar también mucho cada foto del timelapse que vamos a hacer con la Raspberry Pi. Para que las fotos sean más pequeñas, pero aun sigan teniendo calidad, podemos añadir parámetros con el alto y ancho de las fotos a nuestro comando de la siguiente forma:

raspistill -o image.jpg -w 1920 -h 1080
  • -w representaría el ancho de las imágenes que vamos a tomar. 1920 seria el ancho en píxeles para imágenes en fullHD.
  • -h sería el alto de las fotos, siendo 1080 el valor adecuado para una foto en fullHD para el timelapse que vamos a hacer con nuestra Raspberry Pi.
  • Con -o podremos nombre al archivo donde se va a guardar la imagen que va a capturar la cámara.

Una vez tenemos controlado este paso, podemos pasar a preparar todo para hacer nuestro timelapse con la Raspberry Pi.

Con una webcam

Si has elegido usar una webcam para este proyecto, tienes que usar fswebcam, que hemos instalado en el paso anterior. Una vez lo hemos hecho podemos empezar a tomar fotos con un comando en la terminal. Lo haríamos poniendo lo siguiente:

fswebcam image.jpg
Imagen capturada con fswebcam

Como veremos, la imagen es bastante pequeña (de 352×288 pixeles) lo que haría que nuestro timelapse tuviera muy baja calidad. Para solucionarlo, tendremos que añadir un parámetro con la resolución a la que queremos capturar las imágenes. Si ponemos algo demasiado alto y que no soporte la webcam que tenemos, automáticamente se cambiará por el tamaño mayor soportado por nuestra webcam para tomar la foto. Para esto lo usaremos poniendo el parámetro -r en el comando. Aunque voy a añadir más parámetros en el ejemplo para explicároslos a continuación.

fswebcam -r 1280x720 -S 10 -F 1 --no-banner image.jpg
  • -S indica los frames que estará funcionando la webcam antes de capturar la imagen. Es mejor no capturar el primer frame que muestra la webcam, ya que normalmente suele haber un tiempo hasta que la cámara ajusta los colores para tomar la imagen.
  • -F indica la cantidad de frames que se van a capturar. En este caso nos basta con 1.
  • –no-banner quita el banner que se genera en la parte inferior con la fecha y la hora.

Es posible que la foto que nos salga no tenga los valores correctos para hacer la foto, como pueden ser el brillo, la saturación, el contraste y la exposición. Y, en determinados casos, nos tocará ajustarlos a mano hasta que consigamos una imagen más o menos aceptable. Esto lo haremos instalando las utilidades de Video4Linux, con el siguiente comando en la terminal.

sudo apt install v4l-utils

Una vez hemos instalado el programa, podemos ver con v4l2-ctl -l un listado con todos los parámetros.

Resultado de v4l2-ctl -l con una webcam USB

Para poder modificar el parámetro que necesitemos que modificar, podemos hacerlo con el mismo programa, poniendo algo como lo siguiente:

v4l2-ctl --set-ctrl=parametro=valor

De esta forma estableceremos un nuevo parámetro para el valor que vamos a cambiar, corrigiendo así problemas como el que tuve yo con la exposición, ya que por defecto ese parámetro estaba ajustado en 625 y tuve que bajarlo para poder hacer las fotos.

Usando un script para poder hacer las fotos para el timelapse

Ahora que ya tenemos todo dominado para hacer el timelapse en la Raspberry Pi nos falta lo más importante. Hacer cientos de fotos.

Foto de un timelapse creado con una Raspberry Pi

Podemos estar pendientes de ejecutar el comando cada 10 segundos para hacer una nueva foto, pero seria aburrido y si tenemos pensado estar unas cuantas horas haciendo fotos, vamos a acabar cansados de estar esperando. Para eso, vamos a crear un script que se encargue de hacer eso por nosotros.

Dependiendo de si vamos a usar una webcam o una cámara para Raspberry Pi, tendremos que ejecutar un programa u otro para tomar las imágenes. Entonces, lo que haré sera crear una plantilla para webcam y otra para la Raspberry Pi camera, y explicar como la he dejado yo. De esta forma os podeis basar en esas plantillas y dejes todo configurado a vuestro gusto a la hora de tomar las fotos para vuestro timelapse.

Para crear el script abriremos nano con el siguiente comando en la terminal:

nano timelapse.sh

Copiamos el script adecuado de los dos que tenéis a continuación, y guardáis el archivo con Ctrl + S y salís de nano con Ctrl + X.

Mi consejo es ejecutar uno de estos scripts durante un par de minutos y comprobar que todo funciona correctamente antes de lanzaros a hacer el timelapse, no sea que falle algo y después de dejar la Raspberry Pi funcionando durante unas cuantas horas, nos encontremos con que no tenemos fotos, o estas no están bien echas.

Script para Raspberry Pi camera

#!/bin/bash

while true; do
  sudo raspistill -w 1920 -h 1080 -o /var/www/html/out.jpg
  cp -v /var/www/html/out.jpg ~/timelapse/$(date '+%Y%m%d%H%M%S').jpg
  sleep 10
done

Ésta plantilla crea una foto en FullHD que guarda en la carpeta /var/www/html con el nombre de out.jpg. De esta forma, si tenemos instalado un servidor web en nuestra Raspberry Pi, podemos acceder a la última imagen que se ha tomado para el timelapse poniendo http://IP_DE_LA_RASPBERRY_PI/out.jpg.

También se guarda una copia del timelapse en la carpeta timelapse en el directorio principal del usuario con la fecha de la imagen. Si esta carpeta no existe, recomiendo crearla antes.

Para terminar, sleep 10 hace que la Raspberry Pi se espere 10 segundos entre foto y foto, para poder crear el timelapse.

Script para webcam

#!/bin/bash

while true; do
  sudo fswebcam -d v4l2:/dev/video0 -i 0 -r 1280x720 -S 10 -F 1 --no-banner /var/www/html/out.jpg
  cp -v /var/www/html/out.jpg ~/timelapse/$(date '+%Y%m%d%H%M%S').jpg
  sleep 1
done

El funcionamiento en este caso es parecido al anterior, pero no igual. La foto se guarda en el mismo sitio (/var/www/html/out.jpg) y se copia tambien al mismo sitio. En cambio, el sleep pasa de 10 segundos a 1 debido a que el programa tarda un tiempo en realizar la conexión a la webcam para poder tomar la imagen (En mi Raspberry Pi 4B, unos 10 segundos). Luego se copia a la carpeta timelapse con la fecha y hora para poder hacer luego el video con el timelapse en nuestra Raspberry Pi.

Creando el vídeo con el timelapse

Una vez hemos dejado la Raspberry Pi el tiempo suficiente para tomar todas las fotos que queremos, ya podemos hacer el vídeo. Este vídeo lo haremos con ffmpeg, programa que ya vimos cuando creamos la emisora de streaming online en YouTube, aunque el comando que vamos a usar es mucho más sencillo. Os lo dejo aquí abajo para que podáis usarlo.

cd ~/timelapse
ffmpeg -r 10 -pattern_type glob -i '*.jpg' -vcodec libx264 -f mp4 timelapse.mp4

En este caso el parámetro -r indica las imágenes que vamos a usar por segundo. Un número más alto dará una mayor sensación de fluidez, pero también necesitaremos más imágenes para el mismo tiempo en nuestro timelapse. En mi caso con una imagen cada 10 segundos, he creado un timelapse durante 4 horas con unas 1400 imágenes, quedándose en un vídeo de dos minutos y medio usando -r 10.

El resultado se guarda en el archivo timelapse.mp4, y una vez visto el resultado solo queda jugar con los parámetros de velocidad para conseguir el vídeo perfecto. Como prueba, os dejo el que hice yo con una webcam de AliExpress que tenía por casa. Sé que la calidad no es la mejor, pero como prueba de concepto para enseñaros como hacer timelapses con vuestra Raspberry Pi 4 está bastante bien.

Y ya sabéis que si tenéis alguna duda, siempre podéis dejarla en los comentarios y la resolveré en cuanto pueda.

Más información:

[themoneytizer id=»32486-28″]

Última actualización el 2024-04-26 / Enlaces de afiliados / Imágenes de la API para Afiliados

1 comentario en «Crea un timelapse con una Raspberry Pi y una cámara»

  1. Hola, queria comentarles que he seguido las instrucciones para realizar un timelapse con una raspberry pi camera y al ejecutar el programa me sale el siguiente error:

    File «timelapse.sh», line 4
    while true; do
    ^
    SyntaxError : invalid syntax

    Incluso he hecho un copia pega, por si me hubiese confundido y sigue saliendo.

    Gracias y espero me indiquen donde tengo el error.

    Responder

Deja un comentario