blob: d7b910f450c377848278fe0f5b8c22e8d4160852 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
#!/bin/sh
# remove commercials from recording
# version 0.1
# 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 "%DIR%" "%FILE%" "%CHANID%" "%STARTTIME%" "%JOBID%"
# 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"
#------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 [ -n "$MYTHCOMMFRAMES" ]; then
echo "Extracting cutlist..."
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 transcodeing"
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
|