Timelapse con tu Raspberry Pi

Uno de los motivos que nos impulsaron a hacernos con una Raspberry Pi fue la de poder hacer vídeos timelapse a muy bajo coste.

El material a usar ha sido el siguiente:

  1. Raspberry Pi modelo B
  2. Tarjeta SD 8GB
  3. Módulo cámara RaspBerry Pi
  4. Cargador de Nokia (aprovechando las cosas de casa a tope)

Las primeras pruebas las hice sin tener una caja para ello, me fabriqué un soporte de cartón y así la tuve durante un tiempo, mientras duraron las pruebas.

Lo primero que hemos de hacer es instalarle moebius

Lo segundo que hemos de hacer es conectar el módulo de la cámara y activarlo

Una vez tengamos estas dos cosas probamos a hacer fotos y que todo esté funcionando como debe.

Pero bien… lo que yo quiero es hacer un timelapse y para eso lo que necesitamos es hacer un montón de fotografías.

Personalmente capturo una fotografía cada diez segundos y desde las seis de la mañana hasta las diez de la noche. Los videos duran 2min30s aproximadamente.

Lo que a continuación vais a ver es el script que uso para tal fin y que ahora os detallo.

#/bin/bash!
#
#
# Este script es para capturar imagenes para timelapse usando raspi
#
#
#Sincronizamos la hora, hemos de recordar que raspi no tiene reloj interno
ntpdate pool.ntp.org
dir=`date +%d-%m-%Y`
#Modifica donde quieres tener las fotografías
timelapse=/home/username/timelapse
#Creamos directorio donde almacenaremos el timelapse actual creando carpeta con fecha
mkdir -p $timelapse/$dir
# Definimos loop hasta las 22h CTRL + C lo cancela
# Iniciamos captura a las 6am, programado en crontab
while [ $(date “+%H”) -lt 22 ]; do
#Definimos variable para nombre de imagenes
picture=`date +%d%m%Y_%H%M%S`
/opt/vc/bin/raspistill –exposure auto -w 1920 -h 1080 -o $timelapse/$dir/$picture.jpg
sleep 10
done

Este es el script que uso para capturar y que a continuación os detallo. No hay mucho que explicar, en los scripts siempre detallo las cosas que hacen para tenerlo todo bien clarito 😀

ntpdate pool.ntp.org  –> este comando nos pone la raspi en hora

En la variable dir guardamos fecha actual en formato dd/mm/aa

En la variable timelapse especificamos la ruta donde guardaremos las capturas.

Creamos directorio con el valor de “dir” en nuestra ruta especificada en “timelapse” para saber luego el dia al que pertenecen esas fotografías. Me gusta tenerlas ordenadas!!!

Las capturas estarán funcionando desde las 6 de la mañana, que ejecuto el script desde un cron hasta las 22h, que es cuando el while dejará de funcionar.

¿Y qué hace el while?

Pues captura una fotografía a la que le pone el valor de la variable “picture” y me las guarda en $timelapse/$dir, espera 10 segundos (sleep 10) y vuelve a capturar.

Una vez tengamos todas las fotografías ¿qué?

Pues tendremos que “unirlas” en un video y para ello ejecuto otro script. Lo podríamos hacer desde la misma raspi pero me tarda una eternidad ya que capturo a 1080 como podéis ver. Si las capturas fuesen más pequeñas posiblemente lo haría desde la raspi, pero lo ejecuto desde otra máquina más potente.

Os pongo la versión “corta” para hacer el video rápido y si queréis marcar las fotos con la hora como yo hago… pues más abajo la versión “larga”

Una vez hayáis acabado de capturar pasamos a crear el video.

Necesitaréis mencoder, que si no lo tenéis… sudo apt-get install mencoder

Vais al directorio de las capturas y hacéis lo siguiente:

ls *.jpg > list.txt
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o video.avi -mf type=jpeg:fps=24 mf://@list.txt

Cuando acabe tendréis un fichero llamado video.avi con la secuencia de vuestras fotos, una tras otra.

Si queréis marcar las fotografías con la hora, yo lo que hago es lo siguiente:

mkdir -p stamped
#Marcamos las fotografías
for i in `find -name \*.jpg`; do
STAMP=`/bin/date -r $i +”%H:%M:%S %d-%m-%Y”`
/usr/bin/convert -pointsize 40 -size 1910×1060 xc:none -fill red -gravity SouthEast -draw “text 30,10 ‘$STAMP'” miff:- | /usr/bin/composite -tile – $i /home/username/timelapse/$1/stamped/$i
done
cd stamped
ls *.jpg > list.txt
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o video.avi -mf type=jpeg:fps=24 mf://@list.txt

Necesitaréis “imagemagick” instalado –> sudo apt-get install imagemagick

Lo que hago es leer, de cada jpg, su fecha de creación, guardármelo en la variable STAMP y pasárselo a convert para que la ponga en la fotografía y me las guarde en “stamped” (Me guardo copia de la original sin marcar)

A la pregunta de …. ya… pero todo esto ocupa y la raspi la pones en una tarjeta de solo 8GB….

Como ya dije antes, los videos los creo desde otro PC más rápido y a parte de eso, no guardo las capturas en la raspi, monto un directorio nfs de mi homeserver y las voy dejando allí directamente 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *