diff options
Diffstat (limited to 'abs/core/linhes-scripts/removecommercials.sh')
-rwxr-xr-x | abs/core/linhes-scripts/removecommercials.sh | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/abs/core/linhes-scripts/removecommercials.sh b/abs/core/linhes-scripts/removecommercials.sh new file mode 100755 index 0000000..70e2e52 --- /dev/null +++ b/abs/core/linhes-scripts/removecommercials.sh @@ -0,0 +1,213 @@ +#!/bin/sh +# remove commercials from recordings using the user generated cutlist or +# optionally using the mythcommflag generated cutlist. +# version 0.2 3/24/2010 + +# usage: +# first parameter must be %DIR% of the recording +# second parameter must be %FILE% of the recording +# third parameter must be %CHANID% +# fourth parameter must be %STARTTIME% +# fifth parameter must be %JOBID% for the User Job status to be updated in MythTV +# in the mythtv setup screen invoke this script like this: +# MYTHTV User Job Command: +# /usr/LH/bin/removecommercials.sh "%DIR%" "%FILE%" "%CHANID%" "%STARTTIME%" "%JOBID%" + +#-------OPTIONS---------------- +# If no cutlist is found USE_MYTHCOMMFLAG_CUTLIST=YES will use mythcommflag +# to generate a cutlist. +# WARNING: Using this option could result in part of the recording being cut if +# mythcommflag incorrectly flagged the commercial. +USE_MYTHCOMMFLAG_CUTLIST=NO + +# Auguments passed from command line +VIDEODIR=$1 +FILENAME=$2 +CHANID=$3 +STARTTIME=$4 +JOBID=$5 + +# database settings +BACKEND_HOSTNAME=${BACKEND_HOSTNAME:-"localhost"} +DBUSERNAME=${DBUSERNAME:-"mythtv"} +DBPASSWORD=${DBPASSWORD:-"mythtv"} +SQLCMD="mysql -u $DBUSERNAME --password=$DBPASSWORD -h $BACKEND_HOSTNAME mythconverg -e" + +LOG="/var/log/mythtv/removecommercials.log" + +#------FUNCTIONS--------------- +update_comment() +# Arg_1 = COMMENT +{ +if [ $NO_JOBID = 0 ]; then + `$SQLCMD "update jobqueue set comment=\"$1\" where id=\"$JOBID\";"` +fi +} + +update_status() +# Arg_1 = status code +{ +if [ $NO_JOBID = 0 ]; then + `$SQLCMD "update jobqueue set status=\"$1\" where id=\"$JOBID\";"` +fi +} + +check_myth_jobcmds() +# check the myth database for stop pause or resume commands +{ +if [ $NO_JOBID = 0 ]; then + CURRENT_CMD=`$SQLCMD "select cmds from jobqueue where id=\"$JOBID\";" | sed '/[0-9]/!d'` + case "$CURRENT_CMD" in + # JOB_RUN + 0) ;; + # JOB_PAUSE + 1) update_status 6 + kill -s STOP $TPID ;; + # JOB_RESUME + 2) update_status 4 + `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"` + kill -s CONT $TPID ;; + # JOB_STOP + 4) update_status 5 + `$SQLCMD "update jobqueue set cmds=\"0\" where id=\"$JOBID\";"` + kill -9 $TPID + clean_up_files + echo "Cancelled" + update_status 320 + exit ;; + esac +fi +} + +check_background_progress() +#check progress in background +{ +while [ `tail -1 $STATUSFILE | grep -c "Done"` = 0 ] +do + sleep 5 + check_myth_jobcmds + current_status=`tail -1 $STATUSFILE` + if [ `expr match "$current_status" '.*\complete'` -ne 0 ]; then + prog_percent=`echo "$current_status" | awk '{print $3}'` + if [ -n "$prog_percent" ]; then + echo "Removing Commercials - $prog_percent Completed" + update_comment "Removing Commercials - $prog_percent Completed" + fi + fi +done +} + +get_pid() +{ +process_name="" +i1=1 +while [ "$process_name" != "found" ]; do + if [ "`ps $TPID | grep mythtranscode | sed 's_.*\(mythtranscode\).*_\1_'`" = "mythtranscode" ]; then + process_name="found" + else + TPID=`expr $TPID + 1` + fi + i1=`expr $i1 + 1` + if [ $i1 -gt 20 ]; then + break + fi +done +} + +clean_up_files() +# clean up left over files +{ +unlink $TMPFILE 2> /dev/null +unlink $TMPFILE.map 2> /dev/null +unlink $STATUSFILE 2> /dev/null +unlink $VIDEODIR/$FILENAME.tmp 2> /dev/null +} + +#-------MAIN SCRIPT------------ +# check if %JOBID% is passed from command line +JOBID=$5 +if [ -z "$JOBID" ]; then + NO_JOBID=1 +else + NO_JOBID=0 +fi +# check if file is a .mpg +if [ `expr match "$FILENAME" '.*\.mpg'` -ne 0 ]; then + MPEG="--mpeg2" +else + MPEG="" +fi + +# create temp filename so multiple instances won't conflict +TMPNAME=rmvCOMMS-$$ +TMPFILE=$VIDEODIR/$FILENAME-$$ +STATUSFILE=/myth/tmp/$TMPNAME-status.log + +touch $STATUSFILE + +update_status 4 + +check_myth_jobcmds + +# check for cutlist +MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \ -f 2` + +if [ $USE_MYTHCOMMFLAG_CUTLIST=YES ] && [ -z "$MYTHCOMMFRAMES" ]; then + echo "Generating cutlist..." + update_comment "Generating cutlist..." + /usr/bin/nice -n19 /usr/bin/mythcommflag --gencutlist -f $VIDEODIR/$FILENAME + MYTHCOMMFRAMES=`mythcommflag --getcutlist -f $VIDEODIR/$FILENAME | grep 'Cutlist:' | cut -d \ -f 2` +fi + +if [ -n "$MYTHCOMMFRAMES" ]; then + echo "Removing Commercials..." + update_comment "Removing Commercials..." + ( /usr/bin/nice -n19 /usr/bin/mythtranscode -c $CHANID -s $STARTTIME -o $TMPFILE $MPEG --honorcutlist --showprogress > $STATUSFILE 2>&1 ; echo "Done" >> $STATUSFILE ) & + TPID=$! + get_pid + check_background_progress + ERROR=$? + if [ $ERROR -ne 0 ]; then + echo "Transcoding failed for ${FILENAME} with error $ERROR" + exit $ERROR + fi + + check_myth_jobcmds + # move temp file to output location + echo "Moving file..." + update_comment "Moving file..." + if [ `$SQLCMD "select data from settings where value='SaveTranscoding';" | sed '/[0-9]/!d'` = 1 ]; then + echo "DB is set to save transcoding" + mv $VIDEODIR/$FILENAME $VIDEODIR/$FILENAME.old + fi + mv $TMPFILE $VIDEODIR/$FILENAME + + # file has changed, rebuild index + echo "Rebuilding index..." + update_comment "Rebuilding index..." + mythcommflag -c $CHANID -s $STARTTIME --rebuild + ERROR=$? + if [ $ERROR -ne 0 ]; then + echo "Rebuilding seek list failed for ${FILENAME} with error $ERROR" + exit $ERROR + fi + + # remove old cutlist + echo "Removing old cutlist..." + update_comment "Removing old cutlist..." + mythcommflag -c $CHANID -s $STARTTIME --clearcutlist + ERROR=$? + if [ $ERROR -eq 0 ]; then + # Fix the database entry for the file + `$SQLCMD UPDATE recorded SET cutlist = 0, filesize = $(ls -l $VIDEODIR/$FILENAME | awk '{print $5}') WHERE basename = '$FILENAME';` > /dev/null + else + echo "Clearing cutlist failed for ${FILENAME} with error $ERROR" + exit $ERROR + fi + clean_up_files + echo "Commercials Removed" + update_status 272 + update_comment "Sucessfully Completed." +else + echo "No cutlist found." +fi |