Skip to content

Instantly share code, notes, and snippets.

@tabrindle
Last active April 16, 2025 15:25
Show Gist options
  • Save tabrindle/ed9f77b4e96f4c98b49b to your computer and use it in GitHub Desktop.
Save tabrindle/ed9f77b4e96f4c98b49b to your computer and use it in GitHub Desktop.
Convert all files in directory to webp, with default params, or standard cwebp params passed from command
#!/bin/bash
PARAMS=('-m 6 -q 70 -mt -af -progress')
if [ $# -ne 0 ]; then
PARAMS=$@;
fi
cd $(pwd)
shopt -s nullglob nocaseglob extglob
for FILE in *.@(jpg|jpeg|tif|tiff|png); do
cwebp $PARAMS "$FILE" -o "${FILE%.*}".webp;
done
@dmitry-udod
Copy link

Nice!

@samholguin
Copy link

Nice!

@AndriiZalizniak
Copy link

Thank you all for this, I added together your solutions into a recursive script.

#!/bin/bash

PARAMS=('-m 6 -q 50 -mt -af -progress')
for D in `find . -type d`
do
   # cd $D
    echo "Entered directory $D"
    cd $D

    # Define the image types to search for
    image_types=("*.jpeg" "*.jpg" "*.tiff" "*.tif" "*.png")

    # Iterate over each image type
    for type in "${image_types[@]}"; do
      # Find files of the specified image type
      find . -type f -iname "$type" | while read -r IMAGE; do
        # Get the filename without extension
       filename_without_extension=${IMAGE%.*}

        # Convert the image to WebP format
        cwebp $PARAMS "$IMAGE" -o "${filename_without_extension}.webp"

        echo "Converted $IMAGE to ${filename_without_extension}.webp"

         # rm -rf "$IMAGE";
      done
    done

done

echo "Conversion complete."

Save it to something like convert-webp.sh, put it in a directory with images and subfolders, then run

sh convert-webp.sh

and watch the magic happen.

Compare original and webp versions, then marvel at up to 80-90% size reductions :D

Amazing! Thank you so much!🤝

@YounesCheikh
Copy link

Thank you ! saved my day

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment