Introduction
On appelle timelapse un effet d'ultra-accéléré obtenue en prenant des photos à intervalles réguliers sur une longue durée de temps puis en les rassemblant au format vidéo.
Pour réaliser un timelapse, nous allons ici utiliser un script bash pour prendre des photos depuis un raspberry pi, puis les rassembler au format vidéo.
On se servira du package mencoder installé comme suit sous Debian :
sudo apt-get install mencoder
Explication
D'abord, nous allons nous connecter en ssh au pi utilisé, puis prendre les photos :
#!/bin/sh DATE=$(date +"%Y-%m-%d_%H%M") echo "Connecting..." # Connecting to remote raspberry and running Startup script. cat Startup.sh | ssh pi@10.3.141.126 sh
On ouvre la connexion ssh et on exécute le script Startup.sh suivant, situé dans le répertoire local :
#!/bin/sh echo "Running timelapse..." mkdir temp_timelapse echo "Taking photos..." raspistill -vf -hf -t 480000 -tl 1500 -o temp_timelapse/lapse%04d.jpg exit
L'option -tl de raspistill permet de prendre des photos à intervalles réguliers. Le premier nombre correspond à la durée totale du timelapse, le second à l'intervalle entre 2 images.
On notera qu'un intervalle inférieur à 1500 aura tendance à causer des pertes, raspistill n'arrivant pas à prendre les photos assez vite.
Une fois les photos prises, on peut les récupérer :
echo "Importing pictures..." rsync -avz --ignore-existing --remove-source-files pi@10.3.141.126:~/temp_timelapse ~/BE
On récupère alors une liste de tous les fichiers importés, puis on se sert du package mencoder pour pouvoir générer un fichier vidéo :
echo "Building video file..." # Listing all existing pictures ls ~/BE/temp_timelapse/*.jpg > stills.txt mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse_$DATE.avi -mf type=jpeg:fps=24 mf://@stills.txt
Finalement, on se débarasse des fichiers et dossiers temporaires :
echo "Done. Cleaning up..." # Removing pictures and directory rm -R temp_timelapse ssh pi@10.3.141.126 'rmdir temp_timelapse'
On se retrouve alors seulement avec le fichier vidéo voulu.