#!/bin/bash jpgbase="-baseline -sample 1x1,1x1,1x1 -quality" && read -p "jpg quality: " jpgq webpbas="-m 6 -af -q" && read -p "cwebp quality: " webpq jxlbase="-e 10 --override_bitdepth=10 -q" && read -p "jxl quality: " jxlq avifbas="-y 420 -d 10 -s 4 -q" && read -p "avifenc quality: " avifq && echo "" CVVDPWIN="/mnt/c/Users/1337/AppData/Local/Programs/Python/Python313/Scripts/cvvdp.exe" # JPG enc/dec ffmpeg -hide_banner -loglevel quiet -i in.png -y png.ppm && cjpeg $jpgbase $jpgq png.ppm > out.jpg ffmpeg -hide_banner -loglevel quiet -color_primaries bt709 -color_trc iec61966-2-1 -i out.jpg -pix_fmt rgb24 -y jpg.png # Webp, JXL, AVIF enc/dec cwebp $webpbas $webpq in.png -o out.webp 2>&1 | head -n 5 && dwebp -quiet out.webp -o tempwebp.png ffmpeg -hide_banner -loglevel quiet -color_primaries bt709 -color_trc iec61966-2-1 -i tempwebp.png -pix_fmt rgb24 -y webp.png cjxl in.png out.jxl $jxlbase $jxlq --quiet && djxl out.jxl jxl.png --bits_per_sample=8 --quiet avifenc $avifbas $avifq in.png out.avif &>/dev/null && avifdec -d 8 out.avif avif.png &>/dev/null # Display CVVDP, filesize, and parameters for JPG jpgcvvdp=$($CVVDPWIN -t jpg.png -r in.png --device cpu -d standard_fhd -m cvvdp 2>&1 \ | awk -F'=' '/cvvdp=/{gsub(/ \[JOD\]/,"",$2); printf "%.2f",$2}') jpgsize=$(awk 'BEGIN{printf "%.1f",'$(stat -c%s out.jpg)'/1024}') && echo "" echo "JPG CVVDP= $jpgcvvdp Fsize= $jpgsize KB [ cjpeg $jpgbase $jpgq ]" && echo "" # Display CVVDP, filesize, and parameters for Webp webpcvvdp=$($CVVDPWIN -t webp.png -r in.png --device cpu -d standard_fhd -m cvvdp 2>&1 \ | awk -F'=' '/cvvdp=/{gsub(/ \[JOD\]/,"",$2); printf "%.2f",$2}') webpsize=$(awk 'BEGIN{printf "%.1f",'$(stat -c%s out.webp)'/1024}') echo "Webp CVVDP= $webpcvvdp Fsize= $webpsize KB [ cwebp $webpbas $webpq ]" && echo "" # Display CVVDP, filesize, and parameters for JXL jxlcvvdp=$($CVVDPWIN -t jxl.png -r in.png --device cpu -d standard_fhd -m cvvdp 2>&1 \ | awk -F'=' '/cvvdp=/{gsub(/ \[JOD\]/,"",$2); printf "%.2f",$2}') jxlsize=$(awk 'BEGIN{printf "%.1f",'$(stat -c%s out.jxl)'/1024}') echo "JXL CVVDP= $jxlcvvdp Fsize= $jxlsize KB [ cjxl $jxlbase $jxlq ]" && echo "" # Display CVVDP, filesize, and parameters for AVIF avifcvvdp=$($CVVDPWIN -t avif.png -r in.png --device cpu -d standard_fhd -m cvvdp 2>&1 \ | awk -F'=' '/cvvdp=/{gsub(/ \[JOD\]/,"",$2); printf "%.2f",$2}') avifsize=$(awk 'BEGIN{printf "%.1f",'$(stat -c%s out.avif)'/1024}') echo "AVIF CVVDP= $avifcvvdp Fsize= $avifsize KB [ avifenc $avifbas $avifq]" && echo "" # Diminishing returns comparison webp_to_avif=$(awk "BEGIN {printf \"%.1f\", (($jpgsize-$webpsize)/($jpgsize-$avifsize))*100}") webp_to_jxl=$(awk "BEGIN {printf \"%.1f\", (($jpgsize-$webpsize)/($jpgsize-$jxlsize))*100}") echo "" && echo -e "\e[32mWebP compression efficiency relative to [ JXL: $webp_to_jxl % ] & [ AVIF: $webp_to_avif % ]\e[0m" # Rename output JPG/Webp with ssim, filesize, and quality/parameters used mv out.jpg "CVVDP-${jpgcvvdp} ${jpgsize}KB [ $jpgbase $jpgq ].jpg" mv out.webp "CVVDP-${webpcvvdp}_${webpsize}KB [ $webpbas $webpq ].webp" mv out.jxl "CVVDP-${jxlcvvdp}_${jxlsize}KB [ $jxlbase $jxlq ].jxl" mv out.avif "CVVDP-${avifcvvdp}_${avifsize}KB [ $avifbas $avifq ].avif" # nuke everything or quit echo "" && read -p "Press enter to nuke files" exit rm -f jpg.png tempwebp.png webp.png png.ppm jxl.png avif.png rm -f "CVVDP-${jpgcvvdp} ${jpgsize}KB [ $jpgbase $jpgq ].jpg" rm -f "CVVDP-${webpcvvdp}_${webpsize}KB [ $webpbas $webpq ].webp" rm -f "CVVDP-${jxlcvvdp}_${jxlsize}KB [ $jxlbase $jxlq ].jxl" rm -f "CVVDP-${avifcvvdp}_${avifsize}KB [ $avifbas $avifq ].avif"