Comskip for Linux released

  Thread Rating:
  • 6 Votes - 4.17 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Post Reply
leoh28 Offline
Junior Member
Posts: 2
Joined: Dec 2013
Reputation: 0
Post: #211
(2014-03-18 12:00)seminox Wrote:  i think i can answer myself......

Code:
checking whether g++ supports C++11 features by default... no
checking whether g++ supports C++11 features with -std=gnu++11... no
checking whether g++ supports C++11 features with -std=gnu++0x... no
configure: No compiler with C++11 support was found

..... i'm going to write to synology.....

Having the same problem here with my Synology DS1812+, did you ever get an answer from them?
Intel Atom Processor D2700
(1M Cache, 2.13 GHz)

I just sent in a support ticket as well. (Just received the usual, we can't help you email..)

When i upgraded the dsm yesterday and boot strapped again, I got another message about something missing in my path.

Will post that later on her.
(Path was not related to this, still the exact same message.)
(This post was last modified: 2014-04-04 14:33 by leoh28.)
find quote
seminox Offline
Junior Member
Posts: 10
Joined: Mar 2013
Reputation: 0
Post: #212
Hi,

sadly they just said:

"The sources on sourceforge represent the GPL part of the actual devlopment. Other or newer versions of the individual libraries or programs are not available - even in our internal development. Sorry, i can't help your there."

well.... thats it i think....Confused

maybe we can find somebody who is able to exchange the gcc 4.3x in the toolchain with a gcc 4.7x?
i hope there is anyboy out there........

here is the one for QoriQ PPC: http://sourceforge.net/projects/dsgpl/fi...z/download
(This post was last modified: 2014-04-02 16:32 by seminox.)
find quote
cbxbiker61 Offline
Senior Member
Posts: 172
Joined: Nov 2010
Reputation: 2
Post: #213
This build script turns out a good cross-compiler for arm. If you're on ppc you may be able to update/modify it to build a current ppc cross compiler. Anyway...it's a thought.

http://www.xilka.com/xilka/source/BuildC...2014.03.sh
find quote
warrmr Offline
Member
Posts: 67
Joined: Aug 2012
Reputation: 0
Post: #214
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

HTPC
XBMC v12 RC3 with myth TV backend || AMD Sempron 145 || 1gb DDR3 || ECS MCP61M-M3 Version 3 ( no core unlocker) || TBS6981 DVB-S2 tuner || ATI Radeon HD 5450 || 32gb Crucial SSD

NAS
IB-NAS4220-B HW revision 1.2 || 2x 1TB HDD RAID 1 || Open WRT firmware.
(This post was last modified: 2014-04-07 20:23 by warrmr.)
find quote
leoh28 Offline
Junior Member
Posts: 2
Joined: Dec 2013
Reputation: 0
Post: #215
(2013-04-18 11:08)schumi2004 Wrote:  
(2013-04-18 10:02)aisman Wrote:  Ok, ty. Maybe you share your settings, it is desirable to step-by-step, and if you can, then attach the script to the post processing on nas NAS Synology with tvheadend.

Instructions:
Extract these files and place them in corresponding directories
Quote:/usr/bin
/usr/share
/etc
/lib
Include folder should be put in /usr.

Then i did chmod +x and chmod 777 on these files
Quote:/usr/bin/comskip, ffmpeg, ffprobe

Created a backup from original comskip.ini in /etc/comskip/ and replaced content van original with this:
Note: Maybe someone has a better version and would like to share it with some explananation if possible?
http://pastebin.com/K4G55Umn
16-03-2014: Updated version
http://pastebin.com/ExhsYNsq

Useful information http://www.kaashoek.com/files/tuning.htm

Created a folder for scripts, for example /volume1/@appstore/scripts, and placed this processing in it.
comskip-pp.sh
Note: Change COMSKIPLOGS and TVHEADENDPP to fit your needs.
Note: I also removed MKV and TS selection as seen in processing script in startpost because i only use MKV to store my recordings.
http://pastebin.com/1LKY3JEC

Added this processing line in TVHeadend in recording configuration
Quote:/volume1/@appstore/scripts/comskip-pp.sh %f

That's it.

Only a few things i would like to solve so maybe someone can help me with that.
Currently comskip detects and removes commercials but i think it's based on volume difference only. What i would like to see is remove every frame without channel logo!!
Sometimes the channels i watch are having a sort of commercial or program announcement before the actual program (same volume level but without channel logo!), i was hoping you could skip that as well?

Second things is trying to re-use channel logo, currently comskip crashes when doing that.

Link to zip file doesn't exist, anymore.

I'm guessing this doesn't work on Intel processors anyways?
(The zip says arm? But if it might, could you please re-post the link?)
(This post was last modified: 2014-04-07 08:18 by leoh28.)
find quote
trsqr Offline
Member
Posts: 59
Joined: Jan 2014
Reputation: 1
Post: #216
Brilliant work with this cbxbiker61! Should it be possible to compile 0.93h with ffmpeg 1.2.5? I tried according to the instruction in post 1 and end up with the following error:

Code:
mpeg2dec.cpp: In function 'void {anonymous}::file_close()':
mpeg2dec.cpp:1627:32: error: cannot convert 'AVFrame*' to 'AVFrame**' for argument '1' to 'void avcodec_free_frame(AVFrame**)'
   avcodec_free_frame(is->pFrame);
                                ^
make[1]: *** [comskip-mpeg2dec.o] Error 1
make[1]: *** Waiting for unfinished jobs....

Compilation with ffmpeg 2.2 is successful, no problem. I'm just in an environment where I'd need to compile against 1.2.5...
find quote
stefansaraev Offline
Junior Member
Posts: 3
Joined: Oct 2013
Reputation: 0
Post: #217
(2014-04-08 13:12)trsqr Wrote:  Brilliant work with this cbxbiker61! Should it be possible to compile 0.93h with ffmpeg 1.2.5? I tried according to the instruction in post 1 and end up with the following error:

Code:
mpeg2dec.cpp: In function 'void {anonymous}::file_close()':
mpeg2dec.cpp:1627:32: error: cannot convert 'AVFrame*' to 'AVFrame**' for argument '1' to 'void avcodec_free_frame(AVFrame**)'
   avcodec_free_frame(is->pFrame);
                                ^
make[1]: *** [comskip-mpeg2dec.o] Error 1
make[1]: *** Waiting for unfinished jobs....

Compilation with ffmpeg 2.2 is successful, no problem. I'm just in an environment where I'd need to compile against 1.2.5...

Code:
diff --git a/mpeg2dec.cpp b/mpeg2dec.cpp
index 1eff5ed..4adbbfc 100644
--- a/mpeg2dec.cpp
+++ b/mpeg2dec.cpp
@@ -1624,7 +1624,7 @@ void file_close(void)
#if LIBAVCODEC_VERSION_MAJOR >= 55
                av_frame_free(&is->pFrame);
#else
-               avcodec_free_frame(is->pFrame);
+               avcodec_free_frame(&is->pFrame);
#endif
                is->pFrame = 0;
        }
find quote
cbxbiker61 Offline
Senior Member
Posts: 172
Joined: Nov 2010
Reputation: 2
Post: #218
Yes, i'll do a proper fix for that when i get a chance, for some strange reason the expected parm is different depending on version.
find quote
trsqr Offline
Member
Posts: 59
Joined: Jan 2014
Reputation: 1
Post: #219
Managed to compile now with ffmpeg 1.2.5, thanks to Stefan's patch.

I've got 3 questions:

1) Is the 30 second offset required still with mkv files? It seems to be in the ini file by default.
2) I've set verbose=0, but I get with every single recording a .log file that has the following content: "Could not find the logo file." Is there a way to avoid this? Should I have a logo file for each channel, or is it not really necessary?
3) I've got EDL files created by comskip (edl_mode=0). However, when I watch recordings using Live TV -> Recordings in XBMC, the commercials are not skipped. I'm using Gotham betas and have understood that the PVR interface now supports the EDLs (https://github.com/xbmc/xbmc/blob/master...l.h#L304). I'm using TVheadend 3.4.27. Should the ad skipping work ok with this setup? Is there a difference between pvr.hts and pvr.tvh in this case?

Thanks!
(This post was last modified: 2014-04-11 14:05 by trsqr.)
find quote
cbxbiker61 Offline
Senior Member
Posts: 172
Joined: Nov 2010
Reputation: 2
Post: #220
No, the 30 second offset was only important with an older version of tvheadend.

It looks for an existing logo file when it starts, if it doesn't exist it spits out the message (although that message probably shouldn't be there, since on a normal run the logo file will not exist). It creates the logo file during the first run against a given media file.

I use a couple of patches to get edl-livetv/recordings to work.

http://www.xilka.com/xilka/source/TvHead...ints.patch

http://www.xilka.com/xilka/source/TvHead...0-12.patch
find quote
trsqr Offline
Member
Posts: 59
Joined: Jan 2014
Reputation: 1
Post: #221
(2014-04-11 22:55)cbxbiker61 Wrote:  I use a couple of patches to get edl-livetv/recordings to work.

http://www.xilka.com/xilka/source/TvHead...ints.patch

http://www.xilka.com/xilka/source/TvHead...0-12.patch

Thanks for your quick answer. If I change over to TVheadend 3.9, do you know if these are needed?
find quote
cbxbiker61 Offline
Senior Member
Posts: 172
Joined: Nov 2010
Reputation: 2
Post: #222
(2014-04-12 17:54)trsqr Wrote:  
(2014-04-11 22:55)cbxbiker61 Wrote:  I use a couple of patches to get edl-livetv/recordings to work.

http://www.xilka.com/xilka/source/TvHead...ints.patch

http://www.xilka.com/xilka/source/TvHead...0-12.patch

Thanks for your quick answer. If I change over to TVheadend 3.9, do you know if these are needed?

I'm pretty sure 3.9 already has that support.
find quote
trsqr Offline
Member
Posts: 59
Joined: Jan 2014
Reputation: 1
Post: #223
There's now an OpenELEC addon for Comskip.

See the following post at OpenELEC forums for details:
http://openelec.tv/forum/unofficial-open...ommercials

I've only tested the x64 version, please let me know if it works on i386, ATV or RPi.
find quote
Post Reply