feat: squelette stopmotion.sh (options, validation, garde-fous)

This commit is contained in:
herel committed 2026-08-31 21:06:22 +02:00
1 parent 516c2be4f2
commit 8c6d053aaf
1 file changed
+55
Executable
+55
View File
@@ -0,0 +1,55 @@
#!/usr/bin/env bash
set -euo pipefail
usage() {
cat <<EOF
Usage : $(basename "$0") [options]
Crée une vidéo stop motion à partir d'un dossier d'images.
Options :
-i DIR dossier d'images (défaut : ./images)
-o FILE fichier de sortie (défaut : ./stop_motion.mp4)
-f FPS cadence en images/seconde, > 0 (défaut : 12)
-s SIZE taille max du côté long en pixels, > 0 (défaut : 1080)
-y écraser le fichier de sortie sans demander
-h afficher cette aide
EOF
}
INPUT="images"
OUTPUT="stop_motion.mp4"
FPS="12"
SIZE="1080"
ASSUME_YES=0
while getopts ":i:o:f:s:yh" opt; do
case $opt in
i) INPUT=$OPTARG ;;
o) OUTPUT=$OPTARG ;;
f) FPS=$OPTARG ;;
s) SIZE=$OPTARG ;;
y) ASSUME_YES=1 ;;
h) usage ; exit 0 ;;
\?) echo "Erreur : option inconnue -$OPTARG" >&2 ; usage >&2 ; exit 1 ;;
:) echo "Erreur : valeur manquante pour -$OPTARG" >&2 ; usage >&2 ; exit 1 ;;
esac
done
if ! [[ $FPS =~ ^[0-9]+([.][0-9]+)?$ ]] || ! awk -v f="$FPS" 'BEGIN{exit !(f>0)}'; then
echo "Erreur : -f doit être un nombre strictement positif (reçu : $FPS)" >&2
exit 1
fi
if ! [[ $SIZE =~ ^[0-9]+$ ]] || ! awk -v s="$SIZE" 'BEGIN{exit !(s>0)}'; then
echo "Erreur : -s doit être un entier strictement positif (reçu : $SIZE)" >&2
exit 1
fi
if ! command -v ffmpeg >/dev/null 2>&1; then
echo "Erreur : ffmpeg est introuvable. Installation : brew install ffmpeg" >&2
exit 1
fi
if [ ! -d "$INPUT" ]; then
echo "Erreur : le dossier d'images '$INPUT' n'existe pas." >&2
exit 1
fi