Guide captures d'écran FFmpeg : Extraire images vidéo comme un pro
FFmpeg est le couteau suisse pour l'extraction d'images programmatique. Que vous ayez besoin d'une miniature parfaite, d'une planche de sprites, ou d'1 image par seconde pour un timelapse, ces commandes testées couvrent tous les scénarios.
Prérequis
- FFmpeg dans PATH (`ffmpeg -version` fonctionne).
- Fichier d'entrée : `input.mp4` (remplacez par votre fichier).
1. Image unique à timestamp exact (Le plus courant)
# Recherche rapide (décodage depuis keyframe près de 00:01:30.500) - pour vitesse ffmpeg -ss 00:01:30.500 -i input.mp4 -frames:v 1 -q:v 2 output.jpg # Recherche précise (décodage depuis début jusqu'à 00:01:30.500) - pour précision ffmpeg -i input.mp4 -ss 00:01:30.500 -frames:v 1 -q:v 2 output.jpg
- `-ss` avant `-i` = recherche rapide (précision keyframe, ~1-2 sec d'écart).
- `-ss` après `-i` = recherche précise (image parfaite, plus lent sur longues vidéos).
- `-frames:v 1` = extrait exactement 1 image.
- `-q:v 2` = qualité JPEG (1=meilleur, 31=pire). 2–5 est visuellement sans perte.
2. Image unique par numéro de frame
# Frame 1500 (indexé 0) ffmpeg -i input.mp4 -vf "select='eq(n,1500)'" -frames:v 1 -q:v 2 frame_1500.png
Utilisez `select='gte(n,1500)*lt(n,1510)'` pour une plage (frames 1500–1509).
3. Miniature au pourcentage / Meilleure frame représentative
# Frame du milieu (bon pour miniature générique) ffmpeg -i input.mp4 -vf "thumbnail" -frames:v 1 thumb.jpg # À 10% de la durée ffmpeg -i input.mp4 -vf "select='gte(t,0.1*duration)'" -frames:v 1 thumb_10pct.jpg
4. Images multiples : Intervalle / Framerate
# 1 frame toutes les 5 secondes (1/5 fps) ffmpeg -i input.mp4 -vf "fps=1/5" -q:v 2 "frame_%04d.jpg" # Sortie : frame_0001.jpg, frame_0002.jpg... # 1 frame par seconde ffmpeg -i input.mp4 -vf "fps=1" "frame_%04d.jpg" # Une frame sur 10 (décimation) ffmpeg -i input.mp4 -vf "select='not(mod(n,10))'" -vsync vfr "frame_%04d.jpg"
5. Planche de sprites / Planche contact (Une image, plusieurs frames)
# Grille 10x10, 1 frame par 1% de la vidéo ffmpeg -i input.mp4 -vf "fps=1/100,scale=320:-1,tile=10x10" -q:v 2 sprite.jpg
6. PNG haute qualité (Sans perte) / Résolution spécifique
# PNG sans perte, redimensionné largeur 1920 (garde ratio) ffmpeg -i input.mp4 -ss 00:00:10 -vf "scale=1920:-1" -frames:v 1 output.png # Force 1920x1080 exact (letterbox/pillarbox) ffmpeg -i input.mp4 -ss 10 -vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2" -frames:v 1 out.png
7. Extraction batch de toutes les keyframes (I-frames seulement)
ffmpeg -i input.mp4 -vf "select='eq(pict_type,I)'" -vsync vfr -q:v 2 "keyframe_%04d.jpg"
Utile pour détection scènes / marqueurs chapitres.
Astuces pro
- Espace couleur : Ajoutez `-pix_fmt yuvj420p` pour JPEG (évite décalage couleur sur certains lecteurs).
- HDR → SDR Tonemap : `ffmpeg -i hdr.mp4 -vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p" -frames:v 1 sdr.jpg`
- Accélération matérielle : `-hwaccel cuda -hwaccel_output_format cuda` (décodage) + `-c:v h264_nvenc` (encodage) — mais pour extraction image unique, CPU souvent plus rapide à cause overhead init.
