Silence-detect.sh

From MythTV Official Wiki
Jump to: navigation, search

This is a proof of concept script that looks for blocks of silence to locate commercial breaks in the UK.

It works surprisingly well; but on some channels puts the break the wrong side of the "sponsor". Seems to work on (at least) Film 4, ITV1-4 and Dave.

The script relies on ffmpeg to extract the audio and then uses mp3splt to locate the silence.

Run the script as silence-detect.sh filename. Note that it will not insert a cutlist if there is already one present, and it does not delete the largish (200MB or so) temporary files afterwards.

#!/bin/bash                                                   
MP3SPLT_OPTS="th=-70,min=0.15"

[[ "Cutlist: "  == `mythcommflag --getcutlist -f $1  |grep Cutlist` ]] \ 
    || { echo already has cutlist && exit 1; }

TMPDIR=`mktemp -d /tmp/mythcommflag.XXXXXX` || exit 1
cd $TMPDIR
touch `basename $1`.touch
ffmpeg -i $1 -acodec copy sound.mp3
mp3splt -s -p $MP3SPLT_OPTS sound.mp3

CUTLIST=`tail --lines=+3 mp3splt.log|sort -g |\
       awk 'BEGIN{start=0;ORS=","}{if($2-start<400)
       {finish=$2} else {print int(start*25+1)"-"int(finish*25-25);
       start=$1; finish=$2;}}END{print int(start*25+1)"-"}'`

mythcommflag --setcutlist $CUTLIST -f $1

This is obviously a complete hack! The logic in the middle lines is that advert break often have other bits of silence in them so we coalesce up to 400 seconds into one break.

A user has developed this script into a wrapper for mythcommflag called mythcommflag-wrapper that is targeted at usage with UK TV.