Mythbrake

From MythTV Official Wiki
Revision as of 12:49, 29 November 2011 by Ares Drake (talk | contribs) (Created page with 'Mythtv user job to transcode with handbrake currently still in the works <pre> #!/bin/bash # Written by Ares Drake, ares.drake@gmail.com # Licenced under GPL v3 # This Script h…')

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Mythtv user job to transcode with handbrake

currently still in the works

#!/bin/bash
# Written by Ares Drake, ares.drake@gmail.com
# Licenced under GPL v3
# This Script has only one purpose: Decide wether a recording is HD-TV and to start to different MythTV-Userjobs depending on HDTV yes or no.
#
#USAGE:######################
#This Sript shall be called as a MythTv user job like the following:
#/path/to/umwandeln.sh "%FILE%" "%SUBTITLE%" "%CHANID%" "%STARTTIME%" "%TITLE%"
#############################
#
#
#REQUIREMENTS################
# U need to have the following programs installed:
# mediainfo: http://mediainfo.sourceforge.net/
# handbrake with dependencies: http://www.handbrake.fr
#############################




###Define some basic varibles
scriptstarttime=$(date +%F-%H%M%S)
file="$1"
subtitle="$(echo "$2" | sed 's/(//g' | sed 's/)//g' | sed 's/://g')"
#| sed 's///_/g' | sed 's/?//g' | sed s/"'"//g
chanid="$3"
starttime="$4"
title="$(echo "$5" | sed 's/(//g' | sed 's/)//g' | sed 's/:/_/g' | sed 's%/%_%g')"
#| sed 's/"/"/_/g' | sed 's/?//g' | sed s/"'"/""/g
logdir="/opt/mythtv/transcodelogs"
logfile="$logdir/$scriptstarttime-$title.log"
touch "$logfile"
chown mythtv:mythtv "$logfile"
chmod a+rw "$logfile"
errormail="youremail@adress.com" # this email adress will be informed in case of errors
mythrecordingsdir="/some/path" # specify directory where mythtv stores its recordings
outdir="/where/you/want/it" # specify directory where you want the transcoded file to be placed
filename=$title.mkv" # can be customized
if [ -f "$outdir/$filename" ]
# do not overwrite outfile, if already exists, change name
then
filename="filename-$scriptstarttime"
fi
outfile="$outdir/$filename"

###Do some logging
echo "Transcodejob $title starting at $scriptstarttime" >> "$logfile"
echo "Original file: $mythrecordingsdir/$file" >> "$logfile"
echo "Target file: $outfile" >> "$logfile"
echo "ChanId: $chanid Zeit: $starttime" >> "$logfile"
####################
#get width: u need mediainfo installed, see mediainfo.sourceforge.net
width=$(mediainfo --Inform="Video;%Width%" "$mythrecordingsdir/$file")
  if [ $? != 0 ]
    # There were errors with Mediainfo. 
    then
    scriptstoptime=$(date +%F-%H:%M:%S)
    echo "Error prior to encoding at $scriptstoptime" >> "$logfile"
    echo "Mediainfo encountered an error. Maybe mediainfo is not installed, or not in your path" >> "$logfile"
    echo "Mediainfo encountered an error. Maybe mediainfo is not installed, or not in your path"
    mail -s "Mythtv Mediainfo Error on $HOSTNAME" "$errormail" < "$logfile"
    mv "$logfile" "$logfile-FAILED"
    exit 1
    else
    echo "Mediainfo Durchlauf erfolgreich." >> "$logfile"
  fi
fullmediainfo=(mediainfo $mythrecordingsdir/"$file")
##############################################################


### Transcoding starts here, in 3 differend versions: HDTV w/o commercials, SDTV w/ and w/o commercials.



# width >=1280
# currently this can only be ARD HD, ZDF HD or ARTE HD, so no commercials
# Userjob for HD-TV: Re-Encode in AVC H264: saves space, but keeps H264, x264 via HandbrakeCLI
if [ $width -ge 1280 ]
  then
  echo "Userjob HD-TV starts because of with of $width" >> "$logfile"
  HDCMDLINE='HandBrakeCLI -q 20.0 -e x264 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -x b-adapt=2:rc-lookahead=50:ref=3:bframes=3:me=umh:subme=8:trellis=1:merange=20:direct=auto -i "$mythrecordingsdir/$file" -o "$outfile" 2>> "$logfile"'
#  su -l mythtv -c "$HDCMDLINE"
HandBrakeCLI -q 20.0 -e x264 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -x b-adapt=2:rc-lookahead=50:ref=3:bframes=3:me=umh:subme=8:trellis=1:merange=20:direct=auto -i "$mythrecordingsdir/$file" -o "$outfile" 2>> "$logfile"
  if [ $? != 0 ]
	# There were errors in the Handbrake Run. 
	then
	scriptstoptime=$(date +%F-%H:%M:%S)
	echo "Transcoding-Error at $scriptstoptime" >> "$logfile"
	echo "Interrupted file $outfile" >> "$logfile"
	echo "###################################" >> "$logfile"
	echo $fullmediainfo >> "$logfile"
	mail -s "Mythtv Transcoding Error on $HOSTNAME" "$errormail" < "$logfile"
        mv "$logfile" "$logfile-FAILED"
	exit 1
	else
	echo "Transcode Run successfull." >> "$logfile"
      fi


#width <= 720
elif [ $width -le 720 ]
  then
 # this is SD-TV, so it could be either with or without commercials. We check for commercials by comparing to chanid list.

    if [ $chanid == 3007 -o $chanid == 29014 -o $chanid == 30014 -o $chanid == 30107 ]
    #chanid without commercials: 3007 3sat; ZDF info; 29014 & 3014 ZDF neo; ZDF theater; 30107 BayrFS Nord; BayrFS Süd; SWR BW; RBB Berlin; WDR Köln; BR alpha; SR
      then 
      #This is a channel without commercials
      echo "Userjob SD-TV ohne Werbung startet" >> "$logfile"
      #SD-TV Userjob is encoding to MPEG4 ASP aka DivX aka Xvid via FFMPEG via HandBrakeCLI
      
      # $SDFCMDLINE is the commandline for SDtv-commercialFree
      #-q 3: Quality; -r 25: 25 fps; -a 1: Audiostream 1; -A Deutsch-Stero: Audio Stream Name; -E MP3: Audio Encoder; -B 128: Audio Bitrate; -R 48: Audio Sampling Rate; -f mkv: Format; -d: Deinterlace; -m: MakeChapters
      SDFCMDLINE="/usr/bin/HandBrakeCLI -q 3 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -i $mythrecordingsdir/$file -o $outfile" 
      echo "Commandline: $SDFCMDLINE" >> "$logfile"
      # run $SDFCMDLINE as user mythtv
      #su -l mythtv -c "$SDFCMDLINE"
      HandBrakeCLI -q 3 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -i "$mythrecordingsdir/$file" -o "$outfile"  2>> "$logfile"
      if [ $? != 0 ]
	# There were errors in the Handbrake Run. 
	then
	scriptstoptime=$(date +%F-%H:%M:%S)
	echo "Transcoding-Error at $scriptstoptime" >> "$logfile"
	echo "Broken File $outfile" >> "$logfile"
	echo "###################################" >> "$logfile"
	echo $fullmediainfo >> "$logfile"
	mail -s "Mythtv Transcoding Error on $HOSTNAME" "$errormail" < "$logfile"
        mv "$logfile" "$logfile-FAILED"
	exit 1
	else
	echo "Transcode Run successfull." >> "$logfile"     
      fi

    else
      # We have a channel with commercials, so flag & cut them out first.
      echo "Userjob SD-TV mit Werbung startet" >> "$logfile"
      /usr/bin/mythcommflag -c "$chanid" -s "$starttime" --gencutlist
      /usr/bin/mythtranscode --chanid "$chanid" --starttime "$starttime" --mpeg2 --honorcutlist
      /usr/bin/mythcommflag --file "$file" --rebuild
      #Finished commercial cutting, following is encoding as above

      #SD-TV Userjob is encoding to MPEG4 ASP aka DivX aka Xvid via FFMPEG via HandBrakeCLI
      # $SDCCMDLINE is the commandline for SDtv-Commercials
      #-q 4: Quality; -r 25: 25 fps; -a 1: Audiostream 1; -A Deutsch-Stero: Audio Stream Name; -E MP3: Audio Encoder; -B 128: Audio Bitrate; -R 48: Audio Sampling Rate; -f mkv: Format; -d: Deinterlace; -m: MakeChapters
      SDCCMDLINE='/usr/bin/HandBrakeCLI -q 3 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -i "$mythrecordingsdir/$file" -o "$outfile" 2>> "$logfile"' 
      
      echo "Commandline: $SDCCMDLINE" >> "$logfile"
HandBrakeCLI -q 3 -r 25 -a 1 -A Deutsch-Stereo -E MP3 -B 128 -R 48 --mixdown dpl2 -f mkv --crop 0:0:0:0 -d -m -i "$mythrecordingsdir/$file" -o "$outfile"  2>> "$logfile"      
      # run $SDCCMDLINE as user mythtv
      #su -l mythtv -c "$SDCCMDLINE"

      if [ $? != 0 ]
	# There were errors in the Handbrake Run. 
	then
	scriptstoptime=$(date +%F-%H:%M:%S)
	echo "Transcoding-Error at $scriptstoptime" >> "$logfile"
	echo "Broken File $outfile" >> "$logfile"
	echo "###################################" >> "$logfile"
	echo $fullmediainfo >> "$logfile"
	mail -s "Mythtv Transcoding Error on $HOSTNAME" "$errormail" < "$logfile"
        mv "$logfile" "$logfile-FAILED"
	exit 1
	else
	echo "Transcode Run successfull." >> "$logfile"
      fi    
    fi

#720<width<1280 or error getting width: dunno whats going on here, abort
else
    echo "Error: 720<width<1280, undefined condition, aborting" >> "$logfile"
    echo "###################################" >> "$logfile"
    echo $fullmediainfo >> "$logfile"
    mail -s "Mythtv Transcoding Error on $HOSTNAME" "$errormail" < "$logfile"
    mv "$logfile" "$logfile-FAILED"
    exit 1
fi

  scriptstoptime=$(date +%F-%H:%M:%S)
  echo "Successfully finished at $scriptstoptime" >> "$logfile"
  echo "Transcoded file: $outfile" >> "$logfile"

exit 0