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…')
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