EDL/ComSkip discussion

Kodi Community Development

Moderator: TVJunkie198

Posts: 2320
Joined: Fri Apr 05, 2013 9:20 am
Device ID: 1041A706, 1043EB32, 104BAD9E, 13168DC5, 1322A7AC
Location: West Rockhill, PA
x 5

Re: EDL/ComSkip discussion

Post by Ken.F »

This Linux bash script will run Comskip on recordings in the HDHomeRun directory in parallel, then exit.
This script will only run Comskip on recordings that don't already have an existing .edl file.

Warning: This script will run a separate Comskip instance for each recording it finds in the HDHomeRun directory that doesn't already have an existing .edl file. If you have 500 recordings in your HDHomeRun directory that don't have a .edl file it will try to launch 500 separate Comskip instances at the same time. After you have run Comskip on all of your existing recordings by some other means, this script is useful to run Comskip on new recordings as they are made. I run this script from a cron job twice per hour at 5 and 35 minutes past the hour on my Raspberry Pi 4 with USB 3.0 HDD. It has no problem keeping up with my recordings.

This script and the included comskip_parallel.ini will run Comskip on completed recordings as well as recordings in progress. It will continue to process any recordings in progress until the DVR finishes recording them.

Near the top of the script change the three variables to match your paths.

PATH=</your/normal/user/$PATH> Your normal user environment path can be found by entering echo $PATH in the terminal.
hdhr=</full/path/to/HDHomeRun/> This is the full path to the HDHomeRun directory.
ini=</full/path/to/comskip.ini> Full path to the comskip.ini file this script will use for commercial detection.


Code: Select all


# Bash script to scan HDHomeRun recording folder and run Comskip on .mpg recording files that have no .edl or .logo.txt file.


# Run Comskip on files with no .edl or .logo.txt file 

    for f in $hdhr*/*.mpg ; do
    if [[ ! -f "${f%.*}.edl" ]] &&
       [[ ! -f "${f%.*}.logo.txt" ]] &&
       [[ -f "${f%Live\ channel*.mpg}" ]] ; then
       nice -n 19 comskip --ini="$ini" "$f" &

# When recordings are deleted the .edl files and empty folders are left behind.
# This section cleans up orphaned files and empty folders.

# Delete orphaned .edl files.

for f in $hdhr*/*.edl; do
    if [[ ! -f "${f%.*}.mpg" ]]; then
       rm -f -v -- "$f"

# Delete empty folders not named "Live TV".

find "$hdhr" -type d -empty ! -name "Live TV" -exec rmdir {} \;

This is the comskip.ini file that I use with this script.


Code: Select all

detect_method=43 ;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=125 ;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=250 ; any segment longer than this will be scored towards show.
non_uniformity=500 ; 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=12 ; 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=0 ; 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
punish_no_logo=1 ; Default, set to 0 to avoid show segments without logo to be scored towards commercial
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
logo_filter=0 ; set the size of the filter to apply to bad logo detection, 4 seems to be a good value.
cut_on_ar_change=1 ; 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=0 ; amount of seconds of show to be removed before ALL commercials
remove_after=0 ; 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
skip_b_frames=0 ; Set to 1 to force Comskip to skip frames for higher processing speed.
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.
disable_heuristics=4 ; bit pattern for disabling heuristics, adding 1 disables heristics 1, adding 2 disables heristics 2, adding 4 disables heristics 3, 255  disables all heuristics
delete_logo_file=1 ; 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_data=0 ; create a dump of the user data channel, used for CC and XDS (such as V-Chip info). Can be use together with output_framearray to remote debug CC decoding
output_videoredo=0 ; The old videoredo format
output_videoredo3=0 ; The new videoredo v3 format.
output_mls=0 ; set to 1 if you want MPeg Video Wizard bookmark file output
output_dvrmstb=0 ; Set to 1 if you're running DVRMS-Toolbox
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_vdr=0 ; set to 1 if you want XBMC to skipping commercials
output_demux=0 ; set to 1 if you want comskip to demux the mpeg file while scanning
live_tv=1 ; set to 1 if you use parallelprocessing and need the output while recording
live_tv_retries=16 ; (default 4) change to 16 when using live_tv in BTV, used for mpeg PS and TS
dvrms_live_tv_retries=300 ; only used for dvr_ms
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"
output_default=0 ; This dis/enables the default .txt output file.
always_keep_first_seconds=5	;Mark this number of seconds at beginning as show
always_keep_last_seconds=60 ;Mark this number of seconds at end as show
lowres=10 ;Enables resolution reduction, setting to 10 makes comskip choose the best value automatically

Post Reply