Vous avez 500 captures d'écran PNG à convertir en WebP pour votre site. Ou un dossier d'exports TIFF de Lightroom à passer en JPG. FFmpeg est surtout connu comme outil vidéo, mais il gère les images tout aussi bien — et depuis la ligne de commande, une seule commande traite autant de fichiers que vous voulez.
Pourquoi utiliser FFmpeg pour les images ?
FFmpeg est probablement déjà installé si vous faites du travail vidéo. Il prend en charge de nombreux formats et s'intègre naturellement dans les scripts shell et les pipelines CI. Pour les formats RAW (CR2, NEF, ARW), utilisez darktable ou RawTherapee — la prise en charge RAW de FFmpeg est limitée.
Installer FFmpeg
# macOS
brew install ffmpeg
# Ubuntu / Debian
sudo apt install ffmpeg
# Windows (Chocolatey)
choco install ffmpegffmpeg -versionLa structure de base
Chaque commande de conversion en masse suit le même schéma : une boucle shell (Linux/macOS) ou une boucle for (Windows). Règle essentielle : ne jamais écraser les fichiers source — toujours écrire dans un répertoire de sortie séparé.
Convertir tous les PNG en JPG
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -q:v 2 "output/${f%.png}.jpg"
donemkdir output
for %f in (*.png) do ffmpeg -i "%f" -q:v 2 "output/%~nf.jpg"New-Item -ItemType Directory -Force output
Get-ChildItem *.png | ForEach-Object {
ffmpeg -i $_.FullName -q:v 2 "output/$($_.BaseName).jpg"
}| -q:v | Qualité | Utilisation typique |
|---|---|---|
| 1–2 | Presque sans perte | Impression, archivage |
| 3–5 | Haute qualité | Photographie web |
| 6–10 | Qualité moyenne | Aperçus, miniatures |
| 11+ | Basse qualité | À éviter |
Convertir tous les JPG en WebP
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -quality 85 "output/${f%.*}.webp"
donemkdir -p output
for f in *.png; do
ffmpeg -i "$f" -lossless 1 "output/${f%.png}.webp"
doneWebP produit des fichiers 25–35 % plus petits qu'un JPG équivalent. Pour les photos, une qualité de 80–85 est la plage optimale. Pour les logos et les graphiques avec du texte, utilisez WebP sans perte.
Convertir en PNG
mkdir -p output
for f in *.jpg *.jpeg; do
[ -f "$f" ] || continue
ffmpeg -i "$f" "output/${f%.*}.png"
doneConvertir des formats mixtes
mkdir -p output
for f in *.jpg *.jpeg *.png *.webp *.tiff *.bmp; do
[ -f "$f" ] || continue
ffmpeg -i "$f" -q:v 3 "output/${f%.*}.jpg"
doneRedimensionner et convertir en une seule passe
mkdir -p output
for f in *.png; do
ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 "output/${f%.png}.jpg"
donemkdir -p output
for f in *.jpg; do
ffmpeg -i "$f" -vf "crop='min(iw,ih)':'min(iw,ih)',scale=200:200" \
"output/${f%.jpg}_thumb.jpg"
doneTraitement récursif des sous-répertoires
find . -name "*.png" -not -path "./output*" | while read f; do
output="output/${f#./}"
mkdir -p "$(dirname "$output")"
ffmpeg -i "$f" -q:v 3 "${output%.png}.jpg"
doneTraitement parallèle pour accélérer
mkdir -p output
ls *.png | xargs -P 4 -I {} sh -c 'ffmpeg -i "$1" -q:v 3 "output/${1%.png}.jpg"' _ {}Sur une machine 8 cœurs avec SSD, le traitement parallèle réduit typiquement le temps de conversion d'un facteur 3 à 5.
Indicateur de progression
total=$(ls *.png | wc -l)
count=0
mkdir -p output
for f in *.png; do
count=$((count + 1))
echo "[$count/$total] $f"
ffmpeg -loglevel quiet -i "$f" -q:v 3 "output/${f%.png}.jpg"
doneGestion des erreurs
mkdir -p output
error_log="errors.txt"
> "$error_log"
for f in *.jpg *.jpeg *.png *.webp; do
[ -f "$f" ] || continue
if ffmpeg -loglevel error -i "$f" -quality 85 "output/${f%.*}.webp" 2>>"$error_log"; then
echo "✓ $f"
else
echo "✗ $f"
fi
doneRéférence des commandes
| Conversion | Commande (Linux/macOS) | Note |
|---|---|---|
| Tous PNG → JPG | for f in *.png | do ffmpeg -i "$f" -q:v 3 output/${f%.png}.jpg |
| Tous JPG → WebP | for f in *.jpg | do ffmpeg -i "$f" -quality 85 output/${f%.jpg}.webp |
| Tous JPG → PNG | for f in *.jpg | do ffmpeg -i "$f" output/${f%.jpg}.png |
| Tous → WebP sans perte | for f in *.png | do ffmpeg -i "$f" -lossless 1 output/${f%.png}.webp |
| Redimensionner + convertir | for f in *.jpg | do ffmpeg -i "$f" -vf scale=1080:-1 -q:v 3 output/${f%.jpg}.jpg |
Quand FFmpeg n'est pas le bon outil
Formats RAW (CR2, NEF, ARW) — support limité. Utilisez darktable ou RawTherapee.
Encodage AVIF — possible via -c:v libaom-av1 mais très lent sans accélération matérielle. libavif ou Squoosh CLI est plus rapide.
Profils colorimétriques ICC — FFmpeg ne les préserve pas toujours. Pour un travail critique en couleur, ImageMagick est plus fiable.
Juste quelques fichiers à convertir ? Un outil en ligne comme FastConvert est plus rapide — sans installation.
Questions fréquentes
En résumé
La conversion en masse avec FFmpeg se résume à une boucle shell simple. Testez toujours sur un petit lot avant de traiter l'ensemble de votre bibliothèque, et utilisez -loglevel quiet avec un journal d'erreurs pour identifier les fichiers problématiques.
Convertir des images sans ligne de commande ? FastConvert — gratuit, sans inscription.
