#!/bin/bash set -e DIR="$1" MAXREF="$2" MAXCPU="6" QUALITY="22" DEL="$3" if [ "$DIR" == "" ]; then echo "Must give directory to look for MKVs in. \".\" will do nicely." echo "Exiting." echo " " exit `/bin/false` fi if [ "$MAXREF" == "" ]; then MAXREF="4" fi if [ "$DEL" == "--delete" ]; then DEL="y" fi OLDIFS="$IFS" IFS=$'\n' # don't bother if there's already a Fixed- version for FILE in `find "$DIR" -type f -iname \*.mkv \ | egrep -v "\/Fixed\-"`; do # go grab the amount of ReFrames, the Xtreamer gets into trouble if they're # more than 4. don't bomb out on account of set -e if no ReFrames are to # be found REF=`mediainfo "$FILE" | grep ReFrames | cut -d ":" -f 2 | cut -d " " -f 2` DIRNAME=`dirname "$FILE"` BASE=`basename "$FILE"` FIX=`echo "$DIRNAME/Fixed-$BASE"` # if gets angry when -gt is used on something empty; luckily, the tests # are run in order if [ ! "$REF" == "" ]; then if [ "$REF" -gt "$MAXREF" ]; then if [ -f "$FILE" ]; then if [ ! -f "$FIX" ]; then # find out how many audio tracks there are, to preserve them all TOTALAUDIO=`mediainfo "$FILE" | egrep "^Audio" | wc -l` TRACKNUM="1" AUDIOS="" COPIES="" while [ "$TRACKNUM" -le "$TOTALAUDIO" ]; do AUDIOS=`echo "$AUDIOS$TRACKNUM,"` C="copy," COPIES=`echo "$COPIES$C"` let TRACKNUM++ done AUDIOS=`echo "$AUDIOS" | sed s/"\,$"//g` COPIES=`echo "$COPIES" | sed s/"\,$"//g` # and all the subtitle tracks, too TOTALSUBS=`mediainfo "$FILE" | egrep "^Text" | wc -l` if [ "$TOTALSUBS" -ge "1" ]; then SUBNUM="1" SUBS="" while [ "$SUBNUM" -le "$TOTALSUBS" ]; do SUBS=`echo "$SUBS$SUBNUM,"` let SUBNUM++ done SUBS=`echo "$SUBS" | sed s/"\,$"//g` fi DATE=`date --rfc-822` echo "Handling $FILE:" >>/tmp/fix.log echo " - Starting at $DATE" >>/tmp/fix.log echo " - Reframes: $REF" >>/tmp/fix.log echo " - Audio tracks: $TOTALAUDIO" >>/tmp/fix.log echo " - Subtitles: $TOTALSUBS" >>/tmp/fix.log echo " - Target: $FIX" >>/tmp/fix.log # with or without any subtitles mandates if -s used or not if [ "$TOTALSUBS" -ge "1" ]; then echo " - Args: -a $AUDIOS -E $COPIES -s $SUBS" >>/tmp/fix.log nice HandBrakeCLI -i "$FILE" -o "$FIX" \ -q "$QUALITY" -f mkv \ -C "$MAXCPU" -e x264 \ -a "$AUDIOS" -E "$COPIES" \ -s "$SUBS" \ --markers -2 -T else echo " - Args: -a $AUDIOS -E $COPIES" >>/tmp/fix.log nice HandBrakeCLI -i "$FILE" -o "$FIX" \ -q "$QUALITY" -f mkv \ -C "$MAXCPU" -e x264 \ -a "$AUDIOS" -E "$COPIES" \ --markers -2 -T fi if [ "$DEL" == "y" ]; then FILELENGTH=`mediainfo "$FILE" \ | egrep "^Duration" \ | head -1 \ | cut -d ":" -f 2 \ | sed s/"^\ *"//g` FIXLENGTH=` mediainfo "$FIX" \ | egrep "^Duration" \ | head -1 \ | cut -d ":" -f 2 \ | sed s/"^\ *"//g` if [ "$FILELENGTH" == "$FIXLENGTH" ]; then echo " - Duration matches, deleting $FILE" >>/tmp/fix.log rm "$FILE" else echo " - Duration DOES NOT MATCH, keeping $FILE" >>/tmp/fix.log fi fi DATE=`date --rfc-822` echo " - Finished at $DATE" >>/tmp/fix.log else echo "Skipping $FILE -> $FIX, already exists" >>/tmp/fix.log fi else echo "ERROR: $FILE does not exist; strange chars in filename?" echo "Exiting. Please to be examining situation." exit `/bin/false` fi else echo "Skipping $FILE -> $FIX, no ReFrames found." >>/tmp/fix.log fi fi done IFS="$OLDIFS" exit `/bin/true`