#!/bin/bash
IFS="
"
#media-optimize
find . -type f -iname "*.jp*" -size +50k | (
    while read p
    do
        nice -n 15 jpegoptim -m 76 "${p}" &
        if [[ $(jobs -r -p | wc -l) -ge $(getconf _NPROCESSORS_ONLN) ]]
        then
            wait -n
        fi
    done;
    wait
)
find . -type f -iname "*.gif" -size +500k | (
    while read q
    do
        nice -n 15 gifsicle --batch -O3 --lossy=80 --colors=255 "${q}" &
        if [[ $(jobs -r -p | wc -l) -ge $(getconf _NPROCESSORS_ONLN) ]]
        then
            wait -n
        fi
    done;
    wait
)
#Specific compression for large GIF files
find . -type f -iname "*.gif" -size +512000 | (
    while read p
    do
        while [[ $(stat -c%s "${p}" || 0) -ge 512000 ]]
        do
            frameamount=$(exiftool -b -FrameCount "${p}")
            nice -n 15 gifsicle "${p}" $(seq -f "#%g" 0 2 "${frameamount}") -O3 --lossy=80 --colors=255 -o "${p}"
        done
    done
)
find . -type f -iname "*.png" -size +500k | (
    while read r
        do
        nice -n 15 oxipng -o max "${r}" &
        if [[ $(jobs -r -p | wc -l) -ge $(getconf _NPROCESSORS_ONLN) ]]
        then
            wait -n
        fi
    done;
wait
)
#compress-webp
find . -type f -iname "*.webp" -size +50k | (
    while read s
    do
        #If file is not animated
        if ! grep -v -q -e "ANIM" -e "ANMF" "${s}"
        then
            cwebp -mt -af -quiet "${s}" -o /tmp/"${s##.*\/}"_temp.webp
            if [ -f /tmp/"${s##.*\/}"_temp.webp ]
            then
                size_new=$(stat -c%s /tmp/"${s##.*\/}"_temp.webp || 0)
                size_original=$(stat -c%s "${s}" || 0)
                if [ "$size_original" -gt "$size_new" ]
                then
                    mv /tmp/"${s##.*\/}"_temp.webp "$s"
                else
                    rm /tmp/"${s##.*\/}"_temp.webp
                fi
            fi
        fi
    done;
    wait
)