FFmpeg Essentiel
Toujours sonder d'abord, ne jamais écraser le fichier d'entrée, et ré-encoder lors du rognage sauf indication contraire.
Sondage (Probe)
# Résumé lisible
ffprobe -v error -show_entries stream=codec_type,codec_name,width,height,r_frame_rate,sample_rate -show_entries format=duration,size -of default=nw=1 input.mp4
# Format machine
ffprobe -v quiet -print_format json -show_format -show_streams input.mp4
Rogner (Trim)
# Début à 30 s, durée 15 s. Ré-encodage : précis et sûr.
ffmpeg -i input.mp4 -ss 00:00:30 -t 15 -c:v libx264 -crf 20 -c:a aac out/clip.mp4
# Rapide, sans ré-encodage. Ne tombe que sur les images-clés, donc le début peut être décalé de quelques secondes.
ffmpeg -ss 00:00:30 -i input.mp4 -t 15 -c copy out/clip.mp4
-ss avant -i cherche rapidement. Après -i il cherche précisément mais plus lentement. Pour un ré-encodage, l'un ou l'autre convient avec FFmpeg moderne.
Assembler (Join)
# Mêmes codec, résolution, fps : instantané, sans perte
printf "file 'a.mp4'\nfile 'b.mp4'\n" > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy out/joined.mp4
# Sources différentes : normalisation lors de l'assemblage
ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
"[0:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v0];\
[1:v]scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2,fps=30,setsar=1[v1];\
[0:a][1:a]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" -c:v libx264 -crf 20 -c:a aac out/joined.mp4
PowerShell : écrire list.txt avec Set-Content, et utiliser la continuation de ligne par backtick ou une seule longue ligne au lieu de \.
Redimensionner et recadrer (Resize and reframe)
# Ajuster dans 1920x1080 avec barres
-vf "scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2"
# Remplir 1920x1080, rogner le surplus
-vf "scale=1920:1080:force_original_aspect_ratio=increase,crop=1920:1080"
# Largeur 1280, hauteur automatique et paire
-vf "scale=1280:-2"
Compresser
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart out/small.mp4
| Usage | CRF | Preset |
|---|---|---|
| Master / archive | 16-18 | slow |
| Production | 20-22 | medium |
| Web / aperçu | 23-26 | fast |
| Brouillon rapide | 28+ | veryfast |
Un CRF plus bas signifie une qualité plus élevée et un fichier plus volumineux. Pour une taille cible, utiliser le double-passage -b:v au lieu du CRF.
Vitesse
# 2x plus rapide, vidéo et audio
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" out/fast.mp4
# 0.5x ralenti
ffmpeg -i in.mp4 -filter_complex "[0:v]setpts=2.0*PTS[v];[0:a]atempo=0.5[a]" -map "[v]" -map "[a]" out/slow.mp4
# Vidéo uniquement
ffmpeg -i in.mp4 -an -filter:v "setpts=0.25*PTS" out/timelapse.mp4
Le multiplicateur setpts = 1 / vitesse. atempo accepte 0.5 à 2.0 par filtre, donc enchaîner pour plus : atempo=2.0,atempo=2.0 pour 4x.
Fondus (Fades)
# 1 s d'entrée, 1 s de sortie sur un clip de 10 s
ffmpeg -i in.mp4 -vf "fade=t=in:st=0:d=1,fade=t=out:st=9:d=1" -af "afade=t=in:st=0:d=1,afade=t=out:st=9:d=1" out/faded.mp4
Audio
ffmpeg -i in.mp4 -vn -c:a libmp3lame -q:a 2 out/audio.mp3 # extraire mp3
ffmpeg -i in.mp4 -vn -c:a copy out/audio.m4a # extraire sans ré-encodage (source AAC)
ffmpeg -i video.mp4 -i voice.wav -map 0:v -map 1:a -c:v copy -c:a aac -shortest out/dubbed.mp4 # remplacer l'audio
ffmpeg -i in.mp4 -an -c:v copy out/silent.mp4 # supprimer l'audio
GIF
ffmpeg -i in.mp4 -t 5 -vf "fps=15,scale=480:-1:flags=lanczos,split[a][b];[a]palettegen[p];[b][p]paletteuse" out/preview.gif
Images
ffmpeg -ss 5 -i in.mp4 -frames:v 1 -q:v 2 out/frame.jpg # une image
ffmpeg -framerate 30 -i frames/%04d.png -c:v libx264 -pix_fmt yuv420p out/from-frames.mp4
ffmpeg -loop 1 -i still.png -t 5 -c:v libx264 -pix_fmt yuv420p -r 30 out/still.mp4
Dépannage (Troubleshooting)
| Symptôme | Correctif |
|---|---|
height not divisible by 2 | Ajouter scale=trunc(iw/2)*2:trunc(ih/2)*2 |
| Se lit dans VLC, pas dans le navigateur ou le téléphone | -c:v libx264 -pix_fmt yuv420p -movflags +faststart |
| Décalage audio après changement de vitesse | Utiliser setpts et atempo ensemble dans filter_complex |
| Décalage audio sur clips à fréquence d'images variable | Ajouter -vsync cfr -r 30 (ou -fps_mode cfr) |
Premières images noires après rognage -c copy | Ré-encoder au lieu de copie de flux |
| La sortie fait 0 octet | Lire l'erreur complète avec -v error ; vérifier le mappage des flux |
| Chemins avec espaces | Les mettre entre guillemets : "mon clip.mp4" |
| L'invite d'écrasement bloque l'automatisation | Ajouter -y (écraser) ou -n (ne jamais écraser) |
Habitudes de sécurité
- Écrire dans
out/, jamais dans le chemin d'entrée. - Ajouter
-hide_banner -loglevel errordans les scripts,-statspour voir la progression. - Vérifier le résultat avec
ffprobeet le skillvideo-qa.