Difference between revisions of "Script - RemoveCommercials"

From MythTV Official Wiki
Jump to: navigation, search
(Add a couple missing ERROR=$?, update the database to reflect the new status of the video)
m (Add in missing single quotes)
Line 74: Line 74:
 
         mv $VIDEODIR/$FILENAME.tmp $VIDEODIR/$FILENAME
 
         mv $VIDEODIR/$FILENAME.tmp $VIDEODIR/$FILENAME
 
         FILESIZE=$(ls -l $VIDEODIR/$FILENAME | awk '{print $5}')
 
         FILESIZE=$(ls -l $VIDEODIR/$FILENAME | awk '{print $5}')
         echo "UPDATE recorded SET filesize = $FILESIZE WHERE basename = $FILENAME" | mysql mythconverg
+
         echo "UPDATE recorded SET filesize = '$FILESIZE' WHERE basename = '$FILENAME'" | mysql mythconverg
 
         exit 0
 
         exit 0
 
  else
 
  else

Revision as of 03:06, 26 August 2006

The follow script can be setup as a User Job to automatically flag and remove commercials from a recording.

#!/bin/sh
# removecommercials.sh
#
# Copyright 2006 Zach White <zwhite-mythtv@darkstar.frop.org>
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose and without fee is hereby granted,
# provided that the above copyright notice appear in all copies and
# that both that copyright notice and this permission notice appear in
# supporting documentation.
#
# THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
# FITNESS, IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
# RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
# CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
VIDEODIR=$1
FILENAME=$2
# Sanity checking, to make sure everything is in order.
if [ -z "$VIDEODIR" -o -z "$FILENAME" ]; then
        echo "Usage: $0 <VideoDirectory> <FileName>"
        exit 5
fi
if [ ! -f $VIDEODIR/$FILENAME ]; then
        echo "File does not exist: $VIDEODIR/$FILENAME"
        exit 6
fi
# The meat of the script. Flag commercials, copy the flagged commercials to
# the cutlist, and transcode the video to remove the commercials from the
# file.
mythcommflag -f $VIDEODIR/$FILENAME
ERROR=$?
if [ $ERROR -gt 126 ]; then
        echo "Commercial flagging failed for ${FILENAME} with error $ERROR"
        exit 1
fi
mythcommflag --gencutlist -f $VIDEODIR/$FILENAME
ERROR=$?
if [ $ERROR -ne 0 ]; then
        echo "Copying cutlist failed for ${FILENAME} with error $ERROR"
        exit 2
fi
mythtranscode --honorcutlist --showprogress -i $VIDEODIR/$FILENAME -o $VIDEODIR/$FILENAME.tmp
ERROR=$?
if [ $ERROR -ne 0 ]; then
        echo "Transcoding failed for ${FILENAME} with error $ERROR"
        exit 3
fi
mythcommflag -f $VIDEODIR/$FILENAME --rebuild
ERROR=$?
if [ $ERROR -ne 0 ]; then
        echo "Rebuilding seek list failed for ${FILENAME} with error $ERROR"
        exit 4
fi
mythcommflag --clearcutlist -f $VIDEODIR/$FILENAME
ERROR=$?
if [ $ERROR -eq 0 ]; then
        # Fix the database entry for the file
        cat << EOF | mysql mythconverg
UPDATE
        recorded
SET
        cutlist = 0,
        filesize = $(ls -l $VIDEODIR/$FILENAME | awk '{print $5}')
WHERE
        basename = '$FILENAME';
EOF
        mv $VIDEODIR/$FILENAME $VIDEODIR/$FILENAME.old
        mv $VIDEODIR/$FILENAME.tmp $VIDEODIR/$FILENAME
        FILESIZE=$(ls -l $VIDEODIR/$FILENAME | awk '{print $5}')
        echo "UPDATE recorded SET filesize = '$FILESIZE' WHERE basename = '$FILENAME'" | mysql mythconverg
        exit 0
else
        echo "Clearing cutlist failed for ${FILENAME} with error $ERROR"
        rm $VIDEODIR/$FILENAME.tmp
        exit 5
fi

Please note that this script will save the original file as ${FILENAME}.old. You should periodically remove these files to save space. If you want to remove them automatically, you could use the following command:

find /var/video -name \*.old -ctime 2 -exec rm {} \;

Place this command into a script in /etc/cron.daily or into crontab. This will remove all backup files that are older than 2 days.

Note:

I update this script as I make changes to my own system. You should watch this article so you're notified of changes as they occur. If you do not have a wiki account and do not wish to create one you should check back periodically to get changes.