Introduction
Le stop-motion est une technique d'animation consistant à créer l'illusion de mouvement en prenant une photo d'une scène, la modifiant, puis en répétant l'opération.
On va ici créer un script qui prend une série de photos depuis un Raspberry Pi. On prendra une photo à chaque fois que l'utilisateur appuie sur la touche c, et on s'arrête lorsqu'il presse la touche q.
Explication
Le principe est très similaire à celui du timelapse, à cela près qu'au lieu de prendre des photos automatiquement, on devra attendre que l'utilisateur presse une touche.
On va ouvrir la connexion ssh, prendre les photos, les importer, les mettre au format vidéo avec mencoder, puis effacer les fichiers temporaire :
#!/bin/bash DATE=$(date +"%Y-%m-%d_%H%M") echo "Connecting..." # Connecting to remote raspberry and running Startup script. #cat Startup2.sh | ssh pi@10.3.141.126 sh ssh pi@10.3.141.126 "$(cat Startup2.sh)" echo "Importing pictures..." rsync -avz --ignore-existing --remove-source-files pi@10.3.141.126:~/temp_stopmotion ~/BE # rsync -av -delete # Stitching them together echo "Building video file..." # Listing all existing pictures ls ~/BE/temp_stopmotion/*.jpg > stills.txt mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o stopmotion_$DATE.avi -mf type=jpeg:fps=24 mf://@stills.txt echo "Done. Cleaning up..." # Removing temp files and directories rm -R temp_stopmotion rm stills.txt ssh pi@10.3.141.126 'rmdir temp_stopmotion'
La différence principale vient du script Startup2.sh exécuté par la commande ssh. On attend la pression d'une touche. S'il s'agit de c, on prend une photo. S'il s'agit de q, on s'arrête, sinon, on boucle.
#!/bin/bash i=0 mkdir temp_stopmotion echo "Starting Stop-Motion..." until [[ "$key" == "q" ]] do read -n 1 -d '' key if [[ "$key" == "c" ]]; then i_string=$( printf '%04d' $i ) raspistill -t 100 -vf -hf -o temp_stopmotion/smotion_pic$i_string.jpg echo "Picture $i_string taken." ((i++)) fi done