[mythtv-users] Transcoding for best audio

John Pilkington J.Pilk at tesco.net
Mon Jul 15 21:16:06 UTC 2013


On 15/07/13 20:06, Michael Stucky wrote:
> On Sun, Jul 7, 2013 at 7:06 PM, Michael Stucky <mike at stucky.us
> <mailto:mike at stucky.us>> wrote:
>
>     On Sun, Jul 7, 2013 at 6:00 PM, John Pilkington <J.Pilk at tesco.net
>     <mailto:J.Pilk at tesco.net>> wrote:
>
>         On 07/07/13 21:26, Michael Stucky wrote:
>
>             On Sat, Jul 6, 2013 at 2:52 AM, Brenden Conte
>             <brenden at thecontes.info <mailto:brenden at thecontes.info>
>             <mailto:brenden at thecontes.info
>             <mailto:brenden at thecontes.info>__>> wrote:
>
>                  Thank you everyone for your feedback; it has been quite
>             useful!
>
>
>     <snip>
>
>         I used to use the mencoder-based script that I posted earlier as
>         a preprocessor to get rid of the problematical extra streams
>         that probably still come and go in DVB-T recordings.  I used
>         mythtranscode --mpeg2 --honorcutlist on the output, usually
>         without problems, with MythArchive  with no cutlists and no
>         transcoding then usually able to create a full-sized 4.3 GiB DVD
>         image in less than 30 min.  Each stage of the process could be
>         checked, but inexplicable failures still happened.
>
>         For several years now I've been using ProjectX within scripts to
>         do the job instead; currently mythDVBcut.  It's a hands-on
>         process, but I can't really see it being anything else. Failures
>         are rare, and rarer than before.  There are still niggly
>         inconveniences, but the biggest worry is that changes introduced
>         into master, or the underlying tools, will bring new problems
>         when a new version of  -fixes makes its appearance. :-)
>
>         John
>
>     Thank you John for sharing your work and your advice for us all to
>     benefit from!
>
>     Mike
>
>
> This weekend I discovered an incredibly simple method for removing
> unwanted audio streams from mpeg2 recordings using Mythffmpeg. The
> result remains in an mpegts container, which means it is seekable and
> editable like any other recording. The surprising thing is that the
> recording can now be lossless transcoded by MythTV 0.26!!
>
> I have written a script (OK, full disclosure, this is mostly John's code
> tweaked to work as a MythTV USERJOB) that takes the first video stream
> and the first audio stream and copies them to a new file that replaces
> the original recording. I have this configured to auto-execute for every
> scheduled recording (it has been successfully working since Saturday
> evening). After this JOB runs I can go in and create my cut-list as I
> always have done in the past and schedule the "Transcode" job (this is
> the part that has never worked for me in MythTV 0.26). Now I have
> recording  (MythTV still see it as a normal recording, i.e. seekable and
> editable) with no unwanted content (ads etc.) and only the video and
> audio streams that I do want and it plays on all of my media players
> (Mythfronted, VLC, SageTV, etc.)!!
>
> Brenden, if you are still following this thread... You can setup this
> script (included below) as follows, give it a description like
>
> Remove Extra Audio Streams
>
>   and a command like
>
> /usr/local/bin/rmExtraAudioStream.sh "%FILE%"
>
> where "/usr/local/bin/rmExtraAudioStream.sh" is this script:
>
> #!/bin/bash -e
>
> # Script that works as a MythTV USERJOB to remove unwanted audio tracks from
> # recordings. Create a USERJOB of the form:
> # /<path to script>/rmExtraAudioStream.sh "%FILE%"
> # Where "rmExtraAudioStream.sh" is the name of this script
>
> # Change the following to your MythTV recordings directory
> RECDIR=/var/lib/mythtv/recordings
>
> if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
> echo "Usage: "$0" <recording>"
> echo "<recording> is an mpeg2 file recorded by MythTV with a valid DB
> entry."
> echo "e.g. 1234_20100405123400.mpg in the defined RECDIR"
> echo "The output file replaces the input file which is renamed to
> <recording>.old"
> exit 0
> fi
>
> # exit if .old file exists
>
> if  [ -f ${RECDIR}/"$1".old ] ; then
>      echo " ${RECDIR}/"$1".old exists: giving up." ; exit 1
> fi
>
> cd $RECDIR
> if  [ ! -f "$1" ] ; then
>      echo " "$1" not found.  Giving up"
>      cd ~
>      exit 1
> fi
>
> # Is it an mpeg-2 recording?
>
> mythffmpeg -i "$1" 2>&1 | grep -B 2 -A 4 "mpeg2video (Main)" | tee
> "temp$$.txt"
>
> mpeg=$(grep -c "mpeg2video (Main)" temp$$.txt)
> echo "mpeg2video (Main) stream count:  $mpeg"
> if [ $mpeg != 1 ] ; then
>    echo "Not mpeg2video (Main), or no or multiple video streams"
>    cd ~
>    exit 1
> fi
>
> #################################
> # This code was taken from John Pilkington's mythDVBcut script and
> # will need to be edited if you require something other than the first
> # video stream and the first audio stream.
> #################################
> #
> ##    Examples
> ##    Stream #0.0[0xe0]: Video: mpeg2video, yuv420p, 720x576 [PAR 64:45
> DAR 16:9], 15000 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc
> ##    Stream #0.1[0xc0](deu): Audio: mp2, 48000 Hz, 2 channels, s16, 256
> kb/s
> #
> #   # Thanks to Christopher Meredith for the basic parsing magic here.
>
> VSN=`grep "mpeg2video (Main)"  temp$$.txt | head -n1 | cut -f 1,1 -d'['
> | sed 's+.*\#++g'`
>
> # It has to be tweaked for multiple audio streams.  This (with head -n1 )
> # selects the first listed by ffmpeg.
> # You may alternatively wish to select for language, format, etc.
> # May be channel, programme, user dependent.
> ASN=`grep Audio  temp$$.txt | head -n1 | cut -f 1,1 -d'[' | sed 's+.*\#++g'`
>
> #####################################
>
> # Now do the actual processing
>
> mv  "$1" "$1".old
>
> # use Mythffmpeg to copy the streams.
> ionice -c3 mythffmpeg -i "$1".old -map "$VSN" -map "$ASN" -vcodec copy
> -acodec copy -f mpegts "$1"
>
> # rebuild seek table and update filesize
> ionice -c3 mythcommflag -q --rebuild --file "$1" --logpath /var/log/mythtv
>
> rm -f temp$$.txt
>
> cd ~
>
> exit 0
>
>
>
> _______________________________________________

Mike:  Good to see this.  Thanks for posting it.  It should fit well 
into the 'userjob' framework.

As I said earlier, I eventually stopped using the mencoder demux/remux 
sequence because ProjectX seemed more robust and less likely to suffer 
from A/V sync drift or cause (quite rare) problems in further processing.

You're using mythffmpeg to do the same job; the same might apply, but 
your programme source is different, the software has had a few more 
years in development, and it might not.  Enjoy :-)

Cheers,

John.



More information about the mythtv-users mailing list