anderbytes 139 Posted August 15, 2016 Share Posted August 15, 2016 (edited) I'd like to share a script that I built yesterday for resizing of people photos, that potentially can take massive Mb/Gb of our HDs. With this script, you can set a max width or height and all photos larger than that will be reduced proportionally, saving diskspace and making page load easier. For now, it's interactive, so it can't be scheduled. I may fix that in the future. It requires ffmpeg and ffprobe in the server. #!/bin/bash EMBYPATH="/media/hard_disk/emby" # Write here the official Emby path MIN=300 # You can set a warning for operations smaller than usual echo -n "Would you like to set a max [W]idth or [H]eight of Emby People photos? : "; read TYPE; if [ "${TYPE,,}" == "w" ]; then TYPE="Width"; elif [ "${TYPE,,}" == "h" ]; then TYPE="Height"; else echo "Invalid type."; exit; fi echo -n "What will be the Max "$TYPE" size (in pixels) : "; read MAX; if [ ! $MAX -ge 1 ]; then echo "Invalid max size."; exit; elif [ ! $MAX -ge $MIN ]; then echo "Photos with less than $MINpx will produce bad results. You were warned. Tap to continue..."; read; fi NFiles=$(find "$EMBYPATH/metadata/People" -type f -iname 'poster.jpg' | wc -l) OldSize=$(find "$EMBYPATH/metadata/People" -type f -iname 'poster.jpg' -printf "%s\n" | awk '{t+=$1}END{print t}') ind=0; hits=0; IFS=$'\n' filelist=$(find "$EMBYPATH/metadata/People" -type f -iname 'poster.jpg') for photo in $filelist; do ### PHOTO ANALYSIS ### scale="" sizes=$(ffprobe -v quiet -show_entries stream=width,height -print_format csv "$photo") width=$(cut -d, -f2 <<< "$sizes") height=$(cut -d, -f3 <<< "$sizes") ### CONVERSION COMMAND ### if [ "$TYPE" == "Width" ] && [ $width -gt $MAX ]; then scale="$MAX:-1"; elif [ "$TYPE" == "Height" ] && [ $height -gt $MAX ]; then scale="-1:$MAX"; fi if [ ! -z $scale ]; then ffmpeg -hide_banner -v quiet -y -i "$photo" -vf scale="$scale" "$photo"; hits=$(( $hits + 1 )); fi ### PROGRES BAR ### ind=$(( $ind + 1 )); perc=$(awk "BEGIN {printf \"%.2f\",(${ind}/${NFiles})*100}"); echo -ne "Processing $ind of $NFiles [$perc%]\r" done; echo -e "\n"; if [ $hits -gt 0 ]; then NewSize=$(find "$EMBYPATH/metadata/People" -type f -iname 'poster.jpg' -printf "%s\n" | awk '{t+=$1}END{print t}') echo "Photos Reduced: $hits"; CalcSize=$(( $OldSize - $NewSize )); if [ $CalcSize -ge 1073741824 ]; then CalcSize=$(awk 'BEGIN {printf "%.3g",'$CalcSize'/1073741824}')Gb elif [ $CalcSize -ge 1048576 ]; then CalcSize=$(awk 'BEGIN {printf "%.3g",'$CalcSize'/1048576}')Mb elif [ $CalcSize -ge 1024 ]; then CalcSize=$(awk 'BEGIN {printf "%.3g",'$CalcSize'/1024}')Kb fi echo "Diskspace Freed: $CalcSize"; else echo "All Photos already respect max $TYPE of $MAX. No Photos reduced." fi Edited August 15, 2016 by anderbytes 1 Link to comment Share on other sites More sharing options...
Luke 37028 Posted August 15, 2016 Share Posted August 15, 2016 Well done. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now