anderbytes 140 Posted August 15, 2016 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
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