Bonjour, aujourd’hui je vais vous parler des images au format WebP. Pourquoi ? Parce que j’ai récemment dû migrer un serveur avec 100 Go de fichiers images (jpg et png). C’est un sacré coût de stockage S3, cela prend un temps monstre pour faire des backups, et pour certains gros fichiers, cela détruit les performances de vos sites ou applications. Au passage, le temps de chargement d’une page web est pris en compte par Google, et une image de 50 Mo pénalisera votre référencement.
J’ai cherché un moyen de réduire la taille de tout cela, je vous explique tout.
Le format WebP
Le format WebP est développé par Google. C’est un format qui permet, ou pas, de compresser une image. Sans compression, Google estime qu’une image PNG convertie en WebP pèse 26 % de moins. WebP fonctionne nativement avec Chrome, Firefox, Edge, Opera, Brave… En fait, je pense que la liste des navigateurs qui ne prennent pas en charge WebP en 2025 est quasiment vide.
Les images WebP gèrent la transparence (comme PNG) et les animations (comme GIF) avec plus de couleurs.
Notez enfin que Google encourage vivement la conversion en WebP et favorise même l’apparition d’images WebP dans Google Images, par exemple.
Comment convertir une image en WebP ?
Il existe des tonnes de sites internet gratuits qui le font. Votre moteur de recherche favori vous aidera à en trouver en tapant « jpg to webp » ou « png to webp » par exemple. Photoshop et les éditeurs d’images comme Photopea, GIMP, Krita peuvent également gérer le format. Sous Linux (Debian/Ubuntu) par exemple, WebP est disponible dans les dépôts. Pour l’installer, rien de plus simple que de copier/coller cette commande dans votre terminal :
sudo apt update && sudo apt install webp
Puis de l’utiliser comme suit :
cwebp vacances.jpg -o vacances.webp
Et si vous voulez appliquer une compression :
cwebp -q 60 vacances.jpg -o vacances.webp
Ici, -q 60 précise le taux de compression. La valeur est comprise entre 0 et 100 (par défaut c’est 75) et plus la valeur est petite, plus votre image sera légère, au détriment de la qualité.
Exemple de conversion d’une photo en WebP
Pour ne pas vous laisser sans indicateurs clairs, je vous propose quelques benchmarks que j’ai moi-même réalisés :
| Format du fichier | Taille originale | WebP sans compression | WebP à 75 | WebP à 60 | WebP à 50 | WebP à 40 |
|---|---|---|---|---|---|---|
| PNG | 10.4 MB | 2.1 MB | 488 KB | 408 KB | 363 KB | 319 KB |
| PNG | 5.5 MB | 1.3 MB | 355 KB | 299 KB | 265 KB | 233 KB |
| JPG | 49 MB | 21 MB | 3 MB | 2 MB | 1.6 MB | 1.3 MB |
Je note que plus l’image est grande, plus le temps de traitement est long, mais que pour une même image, plus le taux est faible, plus le temps est court. Aussi, il m’aura fallu 17 secondes pour passer de 49 MB à 21 MB (taux 100), mais seulement 4,74 secondes pour passer à 1,6 MB (taux 50). Pour le fichier de 10,4 MB, on est à 1,03 seconde à 100 et 0,73 seconde pour 40.
Et pour que vous voyiez le détail, voici les deux fichiers :
L’original (10,4 MB) une fois envoyé à WordPress qui la retravaille dans son coin pour un résultat à 1,4 MB.

Et la version avec un taux de compression de 40 (319 KB) toujours passée entre les mains de WordPress pour une taille finale de 150,2 KB. Voyez-vous une différence ? Moi oui : la bande passante et le coût de stockage !

Automatiser et industrialiser la conversion de fichiers
OK, c’est bien quand vous devez convertir un seul fichier ! Si vous en avez des centaines ou des milliers (ou bien plus), il va falloir ruser 😏. Je vous propose donc un script bash qui va parcourir un dossier donné (source) et pour chaque jpg ou png qu’il rencontre, il convertira le fichier. La destination du fichier peut être dans le même dossier ou dans un autre, c’est à vous de voir. Voici déjà le script, et pour l’usage, je vous en parle juste en dessous 👇
#!/bin/bash
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <source_directory> <destination_directory>"
exit 1
fi
SOURCE_DIR="$1"
DEST_DIR="$2"
COMPRESSION=60
if [ ! -d "$SOURCE_DIR" ]; then
echo "Le dossier source n'existe pas : $SOURCE_DIR"
exit 1
fi
if [ ! -d "$DEST_DIR" ]; then
echo "Le dossier de destination n'existe pas : $DEST_DIR"
mkdir -p "$DEST_DIR"
if [ $? -ne 0 ]; then
echo "Impossible de créer le dossier de destination : $DEST_DIR"
exit 1
fi
fi
if [ ! -w "$DEST_DIR" ]; then
echo "Le dossier de destination n'est pas accessible en écriture : $DEST_DIR"
exit 1
fi
for picture in "$SOURCE_DIR"/*; do
if [[ "$picture" == *.jpg || "$picture" == *.jpeg || "$picture" == *.png ]]; then
base_name=$(basename "$picture")
base_name_no_ext="${base_name%.*}"
cwebp -quiet -q $COMPRESSION "$picture" -o "$DEST_DIR/$base_name_no_ext.webp"
if [[ $? -ne 0 ]]; then
echo "ERREUR pendant la conversion : $picture"
else
echo "Converti : $picture -> $DEST_DIR/$base_name_no_ext.webp"
fi
fi
done
Et maintenant comment ça marche ? Par défaut, j’ai mis le taux de compression à 60. C’est semble-t-il propre et significatif comme compression. Mais vous pouvez changer le 60 dans le script par une autre valeur entre 0 et 100 (pour rappel, 100 = qualité mais plus lourd, 0 = qualité dégradée, mais ultra léger). La valeur se trouve sur la ligne : COMPRESSION=60
Après pour utiliser ce script, copiez-collez-le dans un fichier texte (avec nano, vi, vim, gedit, Text Editor) que vous enregistrez avec un nom parlant du genre « conversion-webp.sh » (.sh c’est pour vous indiquer à vous-même que c’est un script, ça n’a pas d’importance de le mettre ou non). Rendez ce script exécutable avec la commande : chmod +x conversion-webp.sh et lancez-le avec un premier paramètre qui sera le dossier à scanner, puis un second paramètre qui sera le dossier où enregistrer les images en WebP.
./conversion-webp.sh /data/img/ /data/img-webp/
Laissez tourner 🙂
Pour la petite histoire, convertir 100 GB d’images (soit 111 855 images) tout venant m’a pris 6h30, et le dossier WebP fait 7,6 GB avec un taux de compression à 60. 92 GB d’économies, c’est 92,5 % de réduction de stockage ! C’est aussi la différence de temps de chargement de votre image sur le navigateur du visiteur (ou du robot Google).
