Pour le développement d'applications et de projets clients, j'ai souvent besoin de visualiser rapidement le contenu vidéo:
- prévisualiser les animations pour les chefs de produit
- extraits de démonstration pour la documentation ou les PRD
- Animations légères pour les publications sur les réseaux sociaux ou les pages de destination
Dans ces cas, extraire quelques images clés d'un fichier MP4 et les transformer en une animation WebP en boucle Cela suffit généralement, et c'est beaucoup plus léger que de télécharger une vidéo complète.

Cet article partage un Script shell en un clic pour macOS que:
- extrait 6 à 12 images régulièrement espacées d'un fichier MP4
- les redimensionne à une largeur de 720 px
- crée une animation WebP en boucle
- et s'installe automatiquement
ffmpegs'il manque
Tout cela s'exécute à partir d'une seule commande dans le Terminal.
1. Ce que fait le script
Sur macOS, le script extraire_les_images_pairs_webp.sh fournit :
- Automatique
ffmpegdétection et installation- Vérifie si
ffmpegest disponible - Sinon, installe Homebrew (si nécessaire) puis installe
ffmpeg
- Vérifie si
- Extraction de trames même
- Calcule la durée de la vidéo
- Échantillons uniformes 6 à 12 images sur l'ensemble du clip
- La valeur par défaut est de 6 images, mais vous pouvez personnaliser ce nombre.
- génération d'animations WebP
- Combine les images PNG extraites en un WebP en boucle
- La largeur de sortie est 720px par défaut (la hauteur est proportionnelle)
- La qualité est ajustable via
-q:v
- Nettoyage automatique
- Stocke les trames intermédiaires dans un répertoire temporaire
- Supprime le répertoire temporaire après la génération du fichier WebP
- Fonctionne avec les vidéos courtes et longues
- Si la vidéo est très courte, le nombre d'images est automatiquement réduit.
- Pour les vidéos plus longues, les images sont toujours espacées uniformément sur toute la durée.
2. Son fonctionnement interne
Voici la logique de base du script.
2.1 Vérifier les dépendances
Le script vérifie d'abord si ffmpeg est installé :
- Utilisations
commande -v ffmpeg - S'il n'est pas trouvé, il vérifie si
brasser- Si Homebrew est absent, il installe Homebrew
- Ensuite, utilise
brew installer ffmpeginstallerffmpeg
2.2 Récupérer la durée de la vidéo
En utilisant sonde ff, le script lit le durée totale de la vidéo en secondes.
En se basant sur ces données et sur le nombre d'images souhaité, il calcule l'intervalle de temps entre les images.
2.3 Échantillonnage uniforme des images
Pour chaque index d'image, il :
- Calcule l'horodatage =
index × intervalle - Utilisations
ffmpeg -sspour passer à cette position temporelle - Extrait exactement une image
- Il le met à l'échelle avec
échelle=720:-1La largeur est donc de 720 px et la hauteur est proportionnelle.
2.4 Créer l'animation WebP
Une fois toutes les images enregistrées au format PNG, le script appelle ffmpeg à nouveau à :
- Lisez-les dans l'ordre (
%03d.png) - Encodez-les en tant que WebP animé
- Ensemble
-boucle 0L'animation se répète donc indéfiniment. - Contrôler la qualité avec
-q:v 70(plus bas = meilleure qualité, fichier plus volumineux)
2.5 Nettoyage
Tous les fichiers PNG intermédiaires sont stockés dans un répertoire temporaire créé par mktemp -d.
Une fois le fichier WebP généré, ce répertoire est supprimé avec rm -rf.
3. Script shell complet : extract_even_frames_webp.sh
Vous pouvez enregistrer le script suivant sous extraire_les_images_pairs_webp.sh sur votre Mac :
#!/bin/bash
# Usage: ./extract_even_frames_webp.sh input.mp4 output.webp [frames]
# frames is optional, default 6, maximum 12
INPUT="$1"
OUTPUT="$2"
FRAMES="${3:-6}"
# Cap maximum frames at 12
if [ "$FRAMES" -gt 12 ]; then
FRAMES=12
fi
if [ -z "$INPUT" ] || [ -z "$OUTPUT" ]; then
echo "Usage: $0 input.mp4 output.webp [frames]"
exit 1
fi
# ---------------------------------
# 1️⃣ Check ffmpeg
# ---------------------------------
if ! command -v ffmpeg >/dev/null 2>&1; then
echo "⚠️ ffmpeg not found, starting installation..."
if ! command -v brew >/dev/null 2>&1; then
echo "⚠️ Homebrew not found, installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo "✅ Homebrew installed"
else
echo "✅ Homebrew already installed"
fi
brew update
brew install ffmpeg
if ! command -v ffmpeg >/dev/null 2>&1; then
echo "❌ ffmpeg installation failed, please check manually"
exit 1
fi
echo "🎉 ffmpeg installed successfully!"
else
echo "✅ ffmpeg is already installed"
fi
# ---------------------------------
# 2️⃣ Get video duration
# ---------------------------------
DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$INPUT")
if [[ -z "$DURATION" ]]; then
echo "❌ Failed to get video duration"
exit 1
fi
DURATION=${DURATION%.*} # integer seconds
# If video is shorter than requested frames, match frame count to duration
if [ "$DURATION" -lt "$FRAMES" ]; then
FRAMES=$DURATION
fi
echo "📹 Video length: ${DURATION}s, extracting $FRAMES frames evenly"
# ---------------------------------
# 3️⃣ Create temporary directory
# ---------------------------------
TMPDIR=$(mktemp -d)
# ---------------------------------
# 4️⃣ Calculate interval
# ---------------------------------
INTERVAL=$(echo "scale=6; $DURATION/$FRAMES" | bc)
echo "⏱ Frame interval: $INTERVAL seconds"
# ---------------------------------
# 5️⃣ Extract frames
# ---------------------------------
for i in $(seq 0 $(($FRAMES-1))); do
TIME=$(echo "$i * $INTERVAL" | bc)
printf -v FILENAME "%03d.png" $((i+1))
ffmpeg -ss "$TIME" -i "$INPUT" -frames:v 1 -vf "scale=720:-1" \
"$TMPDIR/$FILENAME" -hide_banner -loglevel error
done
# ---------------------------------
# 6️⃣ Generate animated WebP
# ---------------------------------
ffmpeg -y -i "$TMPDIR/%03d.png" -vcodec libwebp -lossless 0 -q:v 70 \
-loop 0 -preset picture "$OUTPUT" -hide_banner -loglevel error
# ---------------------------------
# 7️⃣ Clean up
# ---------------------------------
rm -rf "$TMPDIR"
echo "🎉 Done! Generated file: $OUTPUT"
4. Comment utiliser le script sur macOS
- Enregistrer le script Enregistrez le contenu ci-dessus sous
extraire_les_images_pairs_webp.sh, par exemple dans votre répertoire personnel. - Accordez-lui l'autorisation d'exécution
chmod +x extract_even_frames_webp.sh
- Utilisation de base
./extract_even_frames_webp.sh input.mp4 output.webp
Cela permettra de :
- Vérifier ou installer
ffmpeg - Extraire 6 cadres régulièrement espacés
- Générer
output.webpà une largeur de 720 px
- Spécifiez le nombre d'images (6–12)
./extract_even_frames_webp.sh input.mp4 output.webp 8
Cela extraira 8 images au lieu des 6 par défaut.
5. Pourquoi ce flux de travail est utile
Comparé à l'ouverture manuelle d'un éditeur vidéo ou à la navigation dans un convertisseur graphique, ce script présente quelques avantages :
- Aucune configuration manuelle
- Installation automatique
ffmpeg(et brasser soi-même si nécessaire) - Plus besoin de chercher des installateurs ni de se souvenir des commandes.
- Installation automatique
- Échantillonnage intelligent des images
- Pour les clips courts, le nombre d'images est automatiquement réduit.
- Pour les vidéos plus longues, les images sont toujours espacées uniformément sur toute la durée.
- Contrôle de la qualité et de la taille
-q:vpermet d'ajuster la qualité WebP en fonction de la taille du fichieréchelle=720:-1offre une largeur adaptée au web et un rapport hauteur/largeur constant
- Boucle par défaut
-boucle 0fait boucler l'animation WebP indéfiniment- Idéal pour les aperçus, les démos et les animations subtiles sur les documents ou les sites web.
- Utilisation propre du disque
- Les images PNG temporaires sont stockées dans un dossier temporaire et supprimées ensuite.
- Aucun fichier résiduel ne s'accumule au fil du temps.
6. Exemple : convertir un fichier MP4 de 20 secondes en aperçu WebP
Imaginez que vous ayez un Vidéo de démonstration de 20 secondes et courir :
./extract_even_frames_webp.sh demo.mp4 demo-preview.webp 6
Le script va :
- Calculez un intervalle d'environ 3,33 secondes
- Extraire 6 images à
0 s, 3,33 s, 6,66 s, 10 s, 13,33 s, 16,66 s - Redimensionnez-les à une largeur de 720 px
- Construire un WebP en boucle animation
Vous pouvez ensuite déposer ce fichier WebP dans :
- Documents produits ou documents Feishu / Notion en tant que aperçu léger
- Publications sur les réseaux sociaux ou pages de destination en tant que vignette animée à lecture automatique
- Présentations PowerPoint et démonstrations internes où une vidéo complète serait superflue.
7. Idées d'extension
Ce script est un point de départ ; vous pouvez facilement l’adapter à votre propre flux de travail :
- Nombre d'images dynamiques
- Sélection automatique entre 6 et 12 images en fonction de la durée de la vidéo
- Par exemple, davantage d'images pour les clips plus longs afin de montrer plus d'états.
- Tailles personnalisées
- Changement
échelle=720:-1à la largeur que votre équipe produit préfère - Ou exposer la largeur comme paramètre :
./script.sh in.mp4 out.webp 8 1080
- Changement
- Traitement par lots
- Intégrez ce script dans une autre boucle pour traiter tout.
.mp4fichiers dans un dossier - Utile lorsque vous exportez simultanément un lot de démonstrations de fonctionnalités.
- Intégrez ce script dans une autre boucle pour traiter tout.
Note de l'auteur
Ce script est issu de mon flux de travail de développement macOS réel, qui consiste à convertir des vidéos MP4 en aperçus WebP légers. Je l'utilise quotidiennement pour générer des animations de démonstration pour la documentation et les publications sur les réseaux sociaux. GPT a uniquement servi à traduire, structurer et peaufiner la version anglaise de cet article ; la logique du script, les détails d'implémentation et les exemples d'utilisation proviennent de mon expérience personnelle.


