[mythtv-users] FFMPeg Commercial cutting puts audio out of sync

John Finlay finlay at moeraki.com
Sun Sep 14 15:09:16 UTC 2014


On 9/13/2014 9:21 PM, Justin Alcorn wrote:
> On Sat, Sep 13, 2014 at 10:19 PM, Justin Alcorn <justin at jalcorn.net> wrote:
>> That's exactly what I was thinking. Thanks for the example.
>
> Thanks for all the help. This works perfectly to losslessly cut the
> H.264 Encoded recording, and put it in a mp4 container for mythroku.
> It also takes just seconds on a medium powered machine.
>
> Run as UserJob /usr/local/bin/rokuencode.sh %DIR% %FILE%
> =================================================
> #!/bin/bash
>
> logfile=/home/mythtv/save/$$.log
> # Close STDOUT file descriptor
> exec 1<&-
> # Close STDERR FD
> exec 2<&-
>
> # Open STDOUT as $LOG_FILE file for read and write.
> exec 1<>$logfile
>
> # Redirect STDERR to STDOUT
> exec 2>&1
>
> INPUTFILE="${1}/${2}"
>
> workdir="/tmp/$$"
> mkdir -p ${workdir}
>
> if [ ! -f $INPUTFILE ]; then
>      echo "file doesn't exist, aborting."
>      exit 1
> fi
>
> #see if we have the DB info
> test -f /etc/mythtv/mysql.txt && . /etc/mythtv/mysql.txt
> test -f ~/.mythtv/mysql.txt && . ~/.mythtv/mysql.txt
>
> #let's make sure we have a sane environment
> if [ -z "`which ffmpeg`" ]; then
>      echo "FFMpeg not present in the path. Adjust environment or install ffmpeg"
>      exit 1
> fi
>
> mysqlconnect="mysql -N -hlocalhost -umythtv -ppassword mythconverg"
> export mysqlconnect
>
> #deteremine directory and filename
> RECDIR=`dirname $INPUTFILE`
> BASENAME=`basename $INPUTFILE`
> tmp=`basename $BASENAME .mpg`
>
> chanid=`echo "select chanid from recorded where
> basename=\"$BASENAME\";" | $mysqlconnect`
> starttime=`echo "select starttime from recorded where
> basename=\"$BASENAME\";" | $mysqlconnect`
> if [ -z "$chanid" -o -z "$starttime" ];then
>          echo "Info not found for select chanid from recorded where
> basename=\"$BASENAME\""
>          exit 1;
> fi
>
> #lets make sure we have a cutlist before we proceed
> if [ -z "`mythutil --getcutlist --chanid $chanid --starttime
> "$starttime" | grep Cutlist | sed 's/Cutlist: $//'`" ]; then
>      echo "no cutlist found....generating new cutlist"
>      mythutil --chanid $chanid --starttime "$starttime" --gencutlist
> #&>${logfile}
> fi
>
> CUTLIST=`mythutil --chanid $chanid --starttime "$starttime"
> --getcutlist | grep Cutlist | sed 's/Cutlist: //' | sed 's/-/,/g' |
> sed 's/^0,//'`
>
> echo $CUTLIST
>
> echo "ffmpeg -i  ${RECDIR}/${BASENAME} -map 0 -c copy -f ssegment
> -segment_list ${workdir}/out.ffconcat -segment_frames $CUTLIST
> ${workdir}/out%03d.mp4"
> ffmpeg -i  ${RECDIR}/${BASENAME} -map 0 -c copy -f ssegment
> -segment_list ${workdir}/out.ffconcat -segment_frames $CUTLIST
> ${workdir}/out%03d.mp4
> cat ${workdir}/out.ffconcat | awk 'NR%2==1' > ${workdir}/in.ffconcat
> echo "ffmpeg -f concat -i ${workdir}/in.ffconcat -c copy ${RECDIR}/${tmp}.mp4"
> ffmpeg -y -f concat -safe 0 -i ${workdir}/in.ffconcat -c copy
> ${RECDIR}/${tmp}.mp4
>
> #well need a new filesize to update the db with
> filesize=$(du -b ${RECDIR}/${tmp}.mp4 | awk '{print $1}')
>
> #update db with new filesize and filename
> cat <<EOF | $mysqlconnect
> UPDATE
>          recorded
> SET
>          filesize = ${filesize},
>          cutlist = 0,
>          basename = "${tmp}.mp4"
> WHERE
>          chanid = ${chanid} AND
>          starttime = "${starttime}";
> EOF
>
> #delete the old commercial skip info
> cat <<EOF | $mysqlconnect
> DELETE FROM
>          recordedmarkup
> WHERE
>          chanid = ${chanid} AND
>          starttime = "${starttime}" AND
>          (type = 4 OR type = 5);
> EOF
>
> cat <<EOF | $mysqlconnect
> DELETE FROM
>          recordedseek
> WHERE
>          chanid = ${chanid} AND
>          starttime = "${starttime}";
>
> EOF
>
> #cleanup $workdir
> rm -rf ${workdir}/*${tmp}*
> =========================================================================
> --
>
Your script doesn't seem to adjust the cutlist entry values for the 
difference in frame counting base between ffmpeg and the myth editor. 
Did you resolve this some other way or did I miss this adjustment?

John


More information about the mythtv-users mailing list