#!/bin/sh GITDIR=$(git rev-parse --show-toplevel) # TODO : MIGHT need a failsafe to skip extremely large files, maybe less than 100mb is fine # TODO : MIGHT also implement a filename "uncompressed-*" to end up without any compression # TODO : MIGHT need to implement replacement of files with spaces to dashes # TODO : MIGHT need to implement same file realiser, two filenames with the same will lead to some errors # TODO : MIGHT be able to export with functions and eval parameters to reduce this weird repitition (PRIORITY) # Installing webp images with assets/images WEBP_IMAGES=$(git diff --name-only --cached | grep -E "\.(webp|WEBP)$") NON_WEBP_IMAGES=$(git diff --name-only --cached | grep -E "\.(jpg|png|JPG|PNG)$") IMG_LIMIT=150 for filename in $WEBP_IMAGES; do QUALITY=80 SIZE=100 UNSUFFIXED_FILENAME=${filename%.*} git restore --staged "$GITDIR/$filename" # One conversion atleast convert $GITDIR/$filename \ -resize $SIZE% \ -quality $QUALITY \ -format "webp" \ $GITDIR/$UNSUFFIXED_FILENAME.webp; while [ -e "$GITDIR/$UNSUFFIXED_FILENAME.webp" ] && \ [ $(du -a "$GITDIR/$UNSUFFIXED_FILENAME.webp" | \ awk -F' ' '{print $1}') -ge $IMG_LIMIT ] && \ [ $(($SIZE > 0)) ]; do SIZE=$(($SIZE - 20)) convert $GITDIR/$UNSUFFIXED_FILENAME.webp \ -resize $SIZE% \ -quality $QUALITY \ -format "webp" \ $GITDIR/$UNSUFFIXED_FILENAME.webp; done; done; for filename in $NON_WEBP_IMAGES; do QUALITY=80 SIZE=100 UNSUFFIXED_FILENAME=${filename%.*} git restore --staged "$GITDIR/$filename" if [ -e "$GITDIR/$UNSUFFIXED_FILENAME.webp" ] then rm "$GITDIR/$filename" echo "SKIPPING $filename : the filename already exists" continue fi # One conversion atleast convert $GITDIR/$filename \ -resize $SIZE% \ -quality $QUALITY \ -format "webp" \ $GITDIR/$UNSUFFIXED_FILENAME.webp; rm "$GITDIR/$filename" while [ -e "$GITDIR/$UNSUFFIXED_FILENAME.webp" ] && \ [ $(du -a "$GITDIR/$UNSUFFIXED_FILENAME.webp" | \ awk -F' ' '{print $1}') -ge $IMG_LIMIT ] && \ [ $(($SIZE > 20)) ]; do SIZE=$(($SIZE - 20)) convert $GITDIR/$UNSUFFIXED_FILENAME.webp \ -resize $SIZE% \ -quality $QUALITY \ -format "webp" \ $GITDIR/$UNSUFFIXED_FILENAME.webp; done; done; # Installing opus audio with assets/audio NON_OPUS_AUDIOS=$(git diff --name-only --cached | grep -E "\.(mp3|wav|flac|m4a|ogg|wma)") OPUS_AUDIOS=$(git diff --name-only --cached | grep -E "\.opus") AUDIO_LIMIT=64 for filename in $OPUS_AUDIOS ; do COMPRESSION_LEVEL=10 UNSUFFIXED_FILENAME=${filename%.*} BITRATE=128 git restore --staged "$GITDIR/$filename" # One conversion atleast # This will do opus to opus with decoder # Degrading once quality but we tank it ffmpeg -hide_banner -y -loglevel warning \ -i "$GITDIR/$filename" \ -codec:a libopus \ -compression_level $COMPRESSION_LEVEL \ -vbr on \ "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus"; mv "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus" "$GITDIR/$UNSUFFIXED_FILENAME.opus" while [ -e "$GITDIR/$UNSUFFIXED_FILENAME.opus" ] && \ [ $(du -a "$GITDIR/$UNSUFFIXED_FILENAME.opus" | \ awk -F' ' '{print $1}') -ge $AUDIO_LIMIT ] && \ [ $COMPRESSION_LEVEL -ge 3 ]; do COMPRESSION_LEVEL=$(($COMPRESSION_LEVEL - 3)) BITRATE=$(($BITRATE / 2)) ffmpeg -hide_banner -y -loglevel warning \ -y -i "$GITDIR/$UNSUFFIXED_FILENAME.opus" \ -codec:a libopus \ -compression_level $COMPRESSION_LEVEL \ -vbr constrained \ -b:a "${BITRATE}k" \ "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus"; mv "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus" "$GITDIR/$UNSUFFIXED_FILENAME.opus"; done; done; for filename in $NON_OPUS_AUDIOS ; do COMPRESSION_LEVEL=10 UNSUFFIXED_FILENAME=${filename%.*} BITRATE=128 git restore --staged "$GITDIR/$filename" if [ -e "$GITDIR/$UNSUFFIXED_FILENAME.opus" ] then rm "$GITDIR/$filename" echo "SKIPPING $filename : the filename already exists" continue fi # One conversion atleast # This will do opus to opus with decoder # Degrading once quality but we tank it ffmpeg -hide_banner -y -loglevel warning \ -i "$GITDIR/$filename" \ -codec:a libopus \ -compression_level $COMPRESSION_LEVEL \ -vbr on \ "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus"; mv "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus" "$GITDIR/$UNSUFFIXED_FILENAME.opus" rm "$GITDIR/$filename" while [ -e "$GITDIR/$UNSUFFIXED_FILENAME.opus" ] && \ [ $(du -a "$GITDIR/$UNSUFFIXED_FILENAME.opus" | \ awk -F' ' '{print $1}') -ge $AUDIO_LIMIT ] && \ [ $COMPRESSION_LEVEL -ge 3 ]; do COMPRESSION_LEVEL=$(($COMPRESSION_LEVEL - 3)) BITRATE=$(($BITRATE / 2)) ffmpeg -hide_banner -y -loglevel warning \ -y -i "$GITDIR/$UNSUFFIXED_FILENAME.opus" \ -codec:a libopus \ -compression_level $COMPRESSION_LEVEL \ -vbr constrained \ -b:a "${BITRATE}k" \ "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus"; mv "$GITDIR/$UNSUFFIXED_FILENAME-temp.opus" "$GITDIR/$UNSUFFIXED_FILENAME.opus"; done; done; git add $GITDIR