I hope the OP doesn't mind but I have taken the post record script from post #1 and made a few changes so that it logs to Syslog tagged as postrec-comskip and it also shuts down xbmc if idle (screensaver active and it has been idle for 2 minutes) if xvmc is not idle it will check every 15 minutes for 2 hours before exiting the script.
Code:
#! /bin/bash
INPUTVIDEO="$1" # Full path to recording, i.e. /home/user/Videos/News.ts
if [[ $1 == *.ts ]]; then
BASENAME=`/usr/bin/basename $INPUTVIDEO .ts`
elif [[ $1 == *.mkv ]]; then
BASENAME=`/usr/bin/basename $INPUTVIDEO .mkv`
else
exit 0
fi
DIRNAME=`/usr/bin/dirname $INPUTVIDEO`
EDLFILE="$DIRNAME/$BASENAME.edl"
LOGFILE="$DIRNAME/$BASENAME.log"
TXTFILE="$DIRNAME/$BASENAME.txt"
LOGOFILE="$DIRNAME/$BASENAME.logo.txt"
COMSKIPPATH="/usr/bin/comskip"
COMSKIPLOGS="/home/xbmc/.comskip/logs/"
COMSKIPINI="/home/xbmc/.comskip/comskip.ini"
# not using these in the script yet, if ever
if false; then
c=$3 #Channel name BBC world
C=$4 #Who created this recording user
t=$5 #Program title News
d=$6 #Program description News and stories...
S=$7 #Start time stamp of recording, UNIX epoch 1224421200
E=$8 #Stop time stamp of recording, UNIX epoch 1224426600
fi
function ClearLog()
{
logger -t postrec-comskip "INPUT = $INPUTVIDEO" -p info
}
function FlagCommercials()
{
chmod 644 $INPUTVIDEO
logger -t postrec-comskip "Starting Commercial Flagging" -p info
logger -t postrec-comskip " OUTPUT = "$EDLFILE"" -p info
logger -t postrec-comskip "comskip running as user:- `/usr/bin/whoami`" -p debug # for debugging purposes, who is running this script?
xbmc-send --action="XBMC.InhibitIdleShutdown(true)"
/usr/bin/comskip --ini="$COMSKIPINI" -t "$INPUTVIDEO" 2>&1 </dev/null >/tmp/comskip-error.log
logger -t postrec-comskip -f /tmp/comskip-error.log -p info
[[ ! -f $LOGFILE ]] || /bin/mv "$LOGFILE" $COMSKIPLOGS
[[ ! -f $TXTFILE ]] || /bin/mv "$TXTFILE" $COMSKIPLOGS
[[ ! -f $LOGOFILE ]] || /bin/mv "$LOGOFILE" $COMSKIPLOGS
chown xbmc:video $EDLFILE
logger -t postrec-comskip "EDL for $INPUTVIDEO:" -p info
xbmc-send --action="XBMC.InhibitIdleShutdown(false)"
}
function ShutDownXBMC()
{
i="0"
while [ $i -lt 8 ]
do
ScreenSaverActive=$(curl -s -u xbmc:xbmc -X POST -H 'Content-type: application/json' -d '{"jsonrpc": "2.0", "method": "XBMC.GetInfoBooleans", "params": { "booleans": ["System.ScreenSaverActive "] }, "id": 1}' http://localhost:8080/jsonrpc)
SystemIdleTime=$(curl -s -u xbmc:xbmc -X POST -H 'Content-type: application/json' -d '{"jsonrpc": "2.0", "method": "XBMC.GetInfoBooleans", "params": { "booleans": ["System.IdleTime(120) "] }, "id": 1}' http://localhost:8080/jsonrpc)
ShutdownInhibited=$(curl -s -u xbmc:xbmc -X POST -H 'Content-type: application/json' -d '{"jsonrpc": "2.0", "method": "XBMC.GetInfoBooleans", "params": { "booleans": ["System.IsInhibit "] }, "id": 1}' http://localhost:8080/jsonrpc )
if [[ "$ScreenSaverActive" =~ true ]] && [[ "$SystemIdleTime" =~ true ]] && [[ "$ShutdownInhibited" =~ false ]]
then
logger -t postrec-comskip "Screensaver Active:= $ScreenSaverActive" -p debug
logger -t postrec-comskip "System Idle Time:= $SystemIdleTime" -p debug
logger -t postrec-comskip "System Idle - Shutting Down" -p info
curl -s -u xbmc:xbmc -X POST -H 'Content-type: application/json' -d '{"jsonrpc": "2.0", "method": "system.shutdown", "string": { "booleans": ["System.Shutdown "] }, "id": 1}' http://localhost:8080/jsonrpc | logger -t postrec-comskip -i
return 0
else
logger -t postrec-comskip "Screensaver Active:= $ScreenSaverActive" -p debug
logger -t postrec-comskip "System Idle Time:= $SystemIdleTime" -p debug
logger -t postrec-comskip "System NOT Idle sleeping for 15 minutes" -p info
i=$[$i+1]
sleep 900
fi
done
}
ClearLog
FlagCommercials
logger -t postrec-comskip "Finished at `/bin/date`"
ShutDownXBMC
This is my com skip.ini
Code:
detect_method=111 ;1=black frame, 2=logo, 4=scene change, 8=fuzzy logic, 16=closed captions, 32=aspect ration, 64=silence, 128=cutscenes, 255=all
validate_silence=1 ; Default, set to 0 to force using this clues if selected above.
validate_uniform=1 ; Default, set to 0 to force using this clues (like pure white frames) if blackframe is selected above.
validate_scenechange=1 ; Default, set to 0 to force using this clues if selected above.
verbose=0 ;show a lot of extra info, level 5 is also OK, set to 0 to disable
max_brightness=60 ;frame not black if any pixels checked are greater than this (scale 0 to 255)
test_brightness=40 ;frame not pure black if any pixels checked are greater than this, will check average brightness (scale 0 to 255)
max_avg_brightness=25 ;maximum average brightness for a dim frame to be considered black (scale 0 to 255) 0 means autosetting
max_commercialbreak=600 ;maximum length in seconds to consider a segment a commercial break
min_commercialbreak=25 ;minimum length in seconds to consider a segment a commercial break
max_commercial_size=155 ;maximum time in seconds for a single commercial or multiple commercials if no breaks in between
min_commercial_size=4 ;mimimum time in seconds for a single commercial
min_show_segment_length=155 ; any segment longer than this will be scored towards show.
non_uniformity=1500 ; Set to 0 to disable cutpoints based on uniform frames
max_volume=500 ; any frame with sound volume larger than this will not be regarded as black frame
min_silence=20 ; Any deep silence longer than this amount of frames is a possible cutpoint
ticker_tape=0 ; Amount of pixels from bottom to ignore in all processing
logo_at_bottom=0 ; Set to 1 to search only for logo at the lower half of the video, do not combine with subtitle setting
punish=4 ; Compare to average for sum of 1=brightness, 2=uniform 4=volume, 8=silence, 16=schange, set to 0 to disable
punish_threshold=1.3 ; Multiply when amount is above average * punish_threshold
punish_modifier=2 ; When above average * threshold multiply score by this value
intelligent_brightness=0 ; Set to 1 to use a USA specific algorithm to tune some of the settings, not adviced outside the USA
logo_percentile=0.92 ; if more then this amount of logo is found then logo detection will be disabled
logo_threshold=0.75
punish_no_logo=1 ; Default, set to 0 to avoid show segments without logo to be scored towards commercial
aggressive_logo_rejection=0
connect_blocks_with_logo=1 ; set to 1 if you want successive blocks with logo on the transition to be regarded as connected, set to 0 to disable
cut_on_ar_change=0 ; set to 1 if you want to cut also on aspect ratio changes when logo is present, set to 2 to force cuts on aspect ratio changes. set to 0 to disable
delete_show_after_last_commercial=0 ; set to 1 if you want to delete the last block if its a show and after a commercial
delete_show_before_or_after_current=0 ; set to 1 if you want to delete the previous and the next show in the recording, this can lead to the deletion of trailers of next show
delete_block_after_commercial=0 ;set to max size of block in seconds to be discarded, set to 0 to disable
remove_before=4 ; amount of seconds of show to be removed before ALL commercials
remove_after=4 ; amount of seconds of show to be removed after ALL commercials
shrink_logo=5 ; Reduce the duration of the logo with this amount of seconds
after_logo=0 ; set to number of seconds after logo disappears comskip should start to search for silence to insert an additional cutpoint
padding=0
ms_audio_delay=5
max_repair_size=200 ; Will repair maximum 200 missing MPEG frames in the timeline, set to 0 to disable repairing for players that don't use PTS.
delete_logo_file=0 ; set to 1 if you want comskip to tidy up after finishing
output_framearray=0 ; create a big excel file for detailed analysis, set to 0 to disable
output_videoredo=0
output_womble=0
output_mls=0 ; set to 1 if you want MPeg Video Wizard bookmark file output
output_cuttermaran=0
output_mpeg2schnitt=0
output_mpgtx=0
output_dvrcut=0
output_zoomplayer_chapter=0
output_zoomplayer_cutlist=0
output_edl=1
output_edlx=0
output_vcf=0
output_bsplayer=0
output_btv=0 ; set to 1 if you want Beyond TV chapter cutlist output
output_projectx=0 ; set to 1 if you want ProjectX cutlist output (Xcl)
output_avisynth=0
output_demux=0 ; set to 1 if you want comskip to demux the mpeg file while scanning
sage_framenumber_bug=0
sage_minute_bug=0
live_tv=0 ; set to 1 if you use parallelprocessing and need the output while recording
live_tv_retries=1 ; change to 16 when using live_tv in BTV
standoff=0 ; change to 8000000 when using live_tv in BTV
cuttermaran_options="cut=\"true\" unattended=\"true\" muxResult=\"false\" snapToCutPoints=\"true\" closeApp=\"true\""
mpeg2schnitt_options="mpeg2schnitt.exe /S /E /R25 /Z %2 %1"
avisynth_options="LoadPlugin(\"MPEG2Dec3.dll\") \nMPEG2Source(\"%s\")\n"
dvrcut_options="dvrcut \"%s.dvr-ms\" \"%s_clean.dvr-ms\" "
windowtitle="Comskip - %s"
thread_count=4
and you call the script in the same way as documented in the OP
Code:
sudo /usr/bin/postrec-comskip.sh %f