diff options
author | Daniel Meyerholt <dxm523@googlemail.com> | 2011-02-06 18:20:58 +0100 |
---|---|---|
committer | Daniel Meyerholt <dxm523@googlemail.com> | 2011-02-06 18:20:58 +0100 |
commit | 81d1a6d6608cd5841873cbc727150e643602eeba (patch) | |
tree | 00ac2ca6ab033817883510dc61b72d5faa9fbcf6 /scripts/queuehandler.sh | |
parent | 1992d5222ff28d13269eb45187351bdef69e3bcd (diff) | |
download | vdr-plugin-vdrrip-81d1a6d6608cd5841873cbc727150e643602eeba.tar.gz vdr-plugin-vdrrip-81d1a6d6608cd5841873cbc727150e643602eeba.tar.bz2 |
* Changed support recording format to .ts present in vdr>=1.7 currently old recordings are not supported anymore
* removed some bashisms in queuehandler.sh
* renamed queuehandler.sh to queuehandler, removed sh in conf name as well
Diffstat (limited to 'scripts/queuehandler.sh')
-rwxr-xr-x | scripts/queuehandler.sh | 1034 |
1 files changed, 0 insertions, 1034 deletions
diff --git a/scripts/queuehandler.sh b/scripts/queuehandler.sh deleted file mode 100755 index c592bd8..0000000 --- a/scripts/queuehandler.sh +++ /dev/null @@ -1,1034 +0,0 @@ -#!/bin/sh - -################################################################# -# # -# this scrip handles the queue which is generated from # -# the vdr-plugin vdrrip. # -# # -# usage: queuehandler.sh queuefile tempdir # -# # -# # -# written by herbert attenberger <herbsl@a-land.de> # -# # -# 15.07.2003: 0.1.0: - initial version # -# 24.07.2003: 0.1.1: - added split function # -# 28.07.2003: 0.1.2: - added video codec "divx4/divx5" # -# 22.08.2003: 0.1.3: - added vdrecho function # -# 07.09.2003: 0.1.4: - added (preview) to the output filename # -# in preview mode # -# 15.09.2003: 0.1.5: - added -frames 0 to get -identify with # -# mplayer1.0pre1 working (thx to ronny) # -# 24.09.2003: 0.1.6: - added (optional) svdrpsend.pl in # -# function vdrecho # -# - added dvd-handling # -# 28.09.2003: 0.1.7: - added handling of postprocess-filters # -# - added rename function (thx to # -# memed@www.vdrportal.de) # -# - copy 001.vdr if a symbolic link couldn't # -# be created (for fat-partitions) # -# (thx to memed@www.vdrportal.de) # -# 30.09.2003: 0.1.8: - added -sws 2 to xvid/divx5 encoding # -# 25.11.2003: 0.1.9: - moved loop function to read_queue # -# - added lock, unlock and wait_unlock # -# functions # -# - moved encode.vdrrip to the plugins-dir # -# 14.12.2003: 0.2.0: - added check_exe function # -# 16.12.2003: 0.2.1: - removed mod_quant from xvid encoding # -# 20.12.2003: 0.2.2: - moved pp-filters to the last position # -# - added log_error function to output the # -# errors to the syslog & stderr # -# - added log_info function to output the # -# infos to the syslog & stdout # -# - added log_debug function to output the # -# debug-infos infos to the syslog & stdout # -# 10.01.2004: 0.2.4: - renamed check function to initialize # -# - added ogg-vorbis, ac3-handling # -# - added ogm, matroska-handling # -# - moved configuration to the file # -# queuehandler.sh.conf # -# - improved error-handling # -# - added execute function # -# - added trap-command & _trap-function # -# 18.01.2004: 0.2.5: - fixed a bug if scaling is off (thx to # -# cosmo@www.vdrportal.de) # -# 21.01.2004: 0.2.6: - added option $useropts # -# - completed dvd-handling # -# 13.02.2004: 0.2.7: - changed some if statements to elif # -# - changed preview-handling # -# 10.03.2004: 0.2.8: - added calc_steps function # -# - write status to encode.vdrrip # -# 22.03.2004: 0.2.9: - moved 2-pass logiles to $tempdir # -# 26.03.2004: 0.3.0: - added evecho function # -# - added $mencoder_ac3 & $mplayer_ac3 # -# - added $qh_ver & qh_conf_ver # -# # -################################################################# -qh_ver="0.3.0" - - -function initialize () { -# -# make initial checks -# - - scriptname=`basename $0` - scriptdir=`dirname $0` - - cfgfile="$scriptname.conf" - - if [ -e "$scriptdir/$cfgfile" ] - then - source "$scriptdir/$cfgfile" - else - log_error "file $cfgfile not found in $scriptdir, aborting !" 1 - fi - - if [ "$1" -a "$2" ] - then - queuefile="$1" - tempdir="$2" - pluginsdir=`dirname "$queuefile"` - else - log_error "usage: $scriptname queuefile tempdir" 1 - fi - - mkdir -p "$tempdir" - if [ ! -d "$tempdir" ] - then - log_error "directory $tempdir doesn't exist, aborting !" 1 - fi - - if [ "$3" ]; then log_info "the option -preview isn't supported anymore"; fi - - local pids=`pgrep -d" " "$scriptname"` - local pid1=`echo "$pids" | cut -d" " -f1` - local pid2=`echo "$pids" | cut -d" " -f2` - - if [ "$pid1" != "$pid2" ] - then - log_error "$scriptname is already running with pid $pid1, aborting !" 2 - fi - - # now the 2-pass logfiles are created in $tempdir ;-) - # (because -passlogfile doesn't do its job for xvid) - cd "$tempdir" -} - - -function read_queue () { -# -# wait for the queuefile and read the first line -# - - while [ ! -e "$queuefile" ] - do - echo - echo "waiting for queuefile $queuefile" - echo "sleeping $check seconds" - echo - sleep $check - done - - wait_unlock # wait until the queuefile is unlocked - lock # locks the queuefile - - local saveifs="$IFS" - IFS=";" - read dir name filesize filenumbers vcodec br_video min_q max_q \ - crop_w crop_h crop_x crop_y scale_w scale_h acodec br_audio audio_id \ - ppvalues rename container preview < "$queuefile" - IFS=$saveifs - - # there is an active encoding - echo "- reading queuefile..." > "$pluginsdir/encode.vdrrip" - - unlock # unlocks the queuefile - - # correct some data - name=`echo "$name" | sed "s/ /_/g"` - - local name_length=`echo "$name" | wc -c` - if [ $name_length -gt 20 ] - then - shortname=`echo "$name" | cut -c 1-17` - shortname="$shortname..." - else - shortname="$name" - fi - - if [ "$ppvalues" = "(null)" ]; then ppvalues=""; fi - - dvd=`echo "$dir" | grep "^dvd://"` - - if [ "$preview" = "1" ] - then - local mode="preview" - else - local mode="full" - fi - - log_info "### start encoding movie $shortname in $mode mode ###" - - log_debug "version of queuehandler.sh: $qh_ver" - log_debug "version of queuehandler.sh.conf: $qh_conf_ver" - log_debug "dir: $dir" - log_debug "name: $name" - log_debug "filesize: $filesize" - log_debug "filenumbers: $filenumbers" - log_debug "vcodec: $vcodec" - log_debug "br_video: $br_video" - log_debug "min_q: $min_q" - log_debug "max_q: $max_q" - log_debug "crop_w: $crop_w" - log_debug "crop_h: $crop_h" - log_debug "crop_x: $crop_x" - log_debug "crop_y: $crop_y" - log_debug "scale_w: $scale_w" - log_debug "scale_h: $scale_h" - log_debug "acodec: $acodec" - log_debug "br_audio: $br_audio" - log_debug "audio_id: $audio_id" - log_debug "ppvalues: $ppvalues" - log_debug "rename: $rename" - log_debug "container: $container" - log_debug "preview: $preview" -} - - -function pre_check () { -# -# make some checks before the encoding -# - if [ "$error" ]; then return; fi - - # check mplayer/mencoder - if [ ! "$dvd" -a $audio_id -ge 128 ] - then - # encoding a vdr-recording with selected ac3-stream - check_exe "$mencoder_ac3" "mencoder_ac3=" - check_exe "$mplayer_ac3" "mplayer_ac3=" - mc=$mencoder_ac3 - mp=$mplayer_ac3 - else - check_exe "$mencoder" "mencoder=" - check_exe "$mplayer" "mplayer=" - mc=$mencoder - mp=$mplayer - fi - - # change the dvd-parameter to -dvd if the mencoder-version is 0.XX - if [ "$dvd" ] - then - local menc_ver=`$mc -v 2>/dev/null | grep "MEncoder" | sed "s/^MEncoder \(.\).*/\1/"` - if [ "$menc_ver" = "0" ] - then - dvd=`echo "$dvd" | sed "s/^dvd:\/\//-dvd /"` - fi - log_debug "dvd: $dvd" - fi - - # check needed tools - case "$container" in - "avi") - if [ "$acodec" = "ogg-vorbis" ] - then - log_error "ogg-vorbis isn't a valid audio-codec for a avi-container" - fi - ;; - "ogm") - check_exe "$vdrsync" "vdrsync=" - check_exe "$ogmmerge" "ogmmerge=" - - if [ "$acodec" = "lame" -o "$acodec" = "ogg-vorbis" ] - then - check_exe "$ffmpeg" "ffmpeg=" - fi - - if [ $filenumbers -gt 1 ] - then - check_exe "$ogmsplit" "ogmsplit=" - fi - ;; - "matroska") - check_exe "$vdrsync" "vdrsync=" - check_exe "$mkvmerge" "mkvmerge=" - - if [ "$acodec" = "lame" -o "$acodec" = "ogg-vorbis" ] - then - check_exe "$ffmpeg" "ffmpeg=" - fi - ;; - *) - log_error "unknown container $container" - ;; - esac -} - - -function calc_steps () { -# -# calculate the nuber of encoding-steps -# - if [ "$error" ]; then return - elif [ "$preview" = "1" ] - then - if [ "$container" = "avi" ]; then steps="2" - else steps="3"; fi - return - fi - - steps="8" - - if [ "$filenumbers" = "1" ]; then let steps=steps-1; fi - - case "$container" in - "avi") - let steps=steps-4 - if [ "$dvd" ]; then let steps=steps-1 - elif [ ! -e "$dir/002.vdr" ]; then let steps=steps-1; fi - ;; - "ogm") - let steps=steps-2 - if [ "$acodec" = "copy" -a $audio_id -ge 128 ] - then - let steps=steps-1 - fi - ;; - "matroska") - let steps=steps-2 - if [ "$acodec" = "copy" ]; then let steps=steps-1; fi - ;; - *) - ;; - esac -} - - -function preview () { -# -# get the preview values -# - if [ "$error" ]; then return - elif [ "$preview" != "1" ]; then return; fi - - name="$name(preview)" - shortname="$shortname(preview)" - - # start the preview in the middle of the movie - local length=`"$mp" -vo null -ao null -identify -frames 0 "$dir/001.vdr" 2>/dev/null | grep ID_LENGTH | cut -d"=" -f2` - let local ss=$(echo $length | sed -e s/[.,].*//)/2 - previewval="-ss $ss -endpos $previewlength" -} - - -function prepare() { -# -# prepares the encoding-process -# - if [ "$error" ]; then return - elif [ "$dvd" ]; then return; fi - - # Recreate $tempdir if removed by vdr housekeeping - mkdir -p "$tempdir" - if [ ! -d "$tempdir" ]; then return; fi - cd "$tempdir" - - case "$container" in - "avi") - # join all vdr-files to $tempdir/temp.vdr - if [ -e "$dir/002.vdr" -a "$preview" != "1" ] - then - log_info "joining all vdr-files from directory $dir" - evecho "joining vdr-files" - nice -+19 cat $dir/[0-9][0-9][0-9].vdr > "$tempdir/temp.vdr" - else - create_symbolic_link - fi - ;; - "ogm"|"matroska") - # demux vdr-recording with vdrsync - if [ "$preview" = "1" ] - then - create_symbolic_link - else - log_info "demuxing all vdr-files from directory $dir" - evecho "demuxing vdr-files" - execute "$vdrsync $dir -o $tempdir" - # vdrsync 0.1.2.2 developer version creates bd.mpa - if [ -e "$tempdir/bd.mpa" ] - then - mv "$tempdir/bd.mpa" "$tempdir/bd.ac3" - fi - fi - ;; - *) - ;; - esac -} - - -function create_symbolic_link() { -# -# creates a symbolic link of 001.vdr to $temdir/temp.vdr -# - if [ "$error" ]; then return - elif [ "$dvd" ]; then return; fi - - log_info "create a symbolic link from $dir/001.vdr to $tempdir/temp.vdr" - ln -s "$dir/001.vdr" "$tempdir/temp.vdr" - - if [ ! -e "$tempdir/temp.vdr" ] - then - log_info "could not create a symolic link" - log_info "try to copy $dir/001.vdr to $tempdir/temp.vdr" - execute "cp $dir/001.vdr $tempdir/temp.vdr" - fi -} - - -function check_exe () { -# -# checks if $1 is a executable and exit the queuehandler with -# rc $3, if this one is set -# - if [ ! -x "$1" ] - then - if [ "$1" ]; then log_error "$1 isn't a executable"; fi - log_error "set a valid path for $2 in the file $scriptdir/$cfgfile." $3 - fi -} - - -function encode () { -# -# encodes the movie -# - if [ "$error" ]; then return; fi - - # set mencoder audio values - case "$container" in - "avi") - case "$acodec" in - "lame") - if [ "$dvd" ] - then - local aopts="-oac mp3lame -lameopts br=$br_audio:abr:q=2:vol=8 -aid $audio_id" - else - local aopts="-oac mp3lame -lameopts br=$br_audio:abr:q=2 -aid $audio_id" - fi - ;; - "copy") - local aopts="-oac copy -aid $audio_id" - ;; - "ogg-vorbis") - # this shouldn't happen - ;; - *) - log_error "unknown audio codec $acodec" - ;; - esac - ;; - "ogm") - local aopts="-nosound" - case "$acodec" in - "lame"|"ogg-vorbis") - if [ "$dvd" ]; then dump_audio_mplayer; fi - encode_ffmpeg - ;; - "copy") - # convert mp2-files to ac3, because - # mp2 isn't supported by ogm - if [ "$dvd" ]; then dump_audio_mplayer; fi - if [ $audio_id -lt 128 ]; then encode_ffmpeg; fi - ;; - *) - log_error "unknown audio codec $acodec" - ;; - esac - ;; - "matroska") - local aopts="-nosound" - case "$acodec" in - "lame"|"ogg-vorbis") - if [ "$dvd" ]; then dump_audio_mplayer; fi - encode_ffmpeg - ;; - "copy") - if [ "$dvd" ]; then dump_audio_mplayer; fi - ;; - *) - log_error "unknown audio codec $acodec" - ;; - esac - ;; - *) - ;; - esac - - # set mencoder -vf values - if [ "$crop_w" = "-1" -a "$crop_h" = "-1" -a "$crop_x" = "-1" -a \ - "$crop_y" = "-1" -a "$scale_w" = "-1" -a "$scale_h" = "-1" ] - then - local vopopts="" - elif [ "$crop_w" = "-1" -a "$crop_h" = "-1" -a "$crop_x" = "-1" -a \ - "$crop_y" = "-1" ] - then - local vopopts="scale=$scale_w:$scale_h" - else - local vopopts="crop=$crop_w:$crop_h:$crop_x:$crop_y,scale=$scale_w:$scale_h" - fi - - if [ "$ppvalues" ] - then - local vopopts="-vf pp=$ppvalues,$vopopts" - elif [ "$vopopts" ] - then - local vopopts="-vf $vopopts" - fi - - # encode in two passes - for pass in 1 2 - do - if [ "$pass" = "1" ] - then - local ofile="-o /dev/null" - else - local ofile="-o $tempdir/$name.avi" - fi - - # set mencoder video values - case "$vcodec" in - "lavc") - local vopts="-ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=$br_video:vqmin=$min_q:vqmax=$max_q:vpass=$pass -sws 2" - ;; - "xvid") - local vopts="-ovc xvid -xvidencopts bitrate=$br_video:me_quality=6:pass=$pass -sws 2" - ;; - "divx4") - local vopts="-ovc divx4 -divx4opts br=$br_video:q=5:min_quant=$min_q:max_quant=$max_q:pass=$pass -sws 2" - ;; - *) - log_error "unknown video codec $vcodec" - ;; - esac - - # set mencoder input file - if [ "$dvd" ] - then - # dvd - local ifile="$dvd" - elif [ "$container" = "avi" -o "$preview" = "1" ] - then - # no dvd, avi container - local ifile="$tempdir/temp.vdr" - else - # no dvd, ogm/matroska container - - # search for the first video-file - local num=0 - while [ ! "$ifile" ] - do - if [ ! -e "$tempdir/e$num.mpv" ] - then - log_info "video-file $tempdir/e$num.mpv not found !" - if [ $num -ge 9 ] - then - log_error "no video-stream found !" - # exit loop - local ifile="dummy" - fi - let num=num+1 - else - log_info "video-file $tempdir/e$num.mpv found !" - local ifile="$tempdir/e$num.mpv" - fi - done - fi - - if [ "$error" ]; then return; fi - - log_info "encoding movie $shortname (pass: $pass)" - - if [ "$aopts" = "-nosound" ] - then - local encstr="video" - else - local encstr="video & audio" - fi - - evecho "enc. $encstr ($pass. pass)" - if [ "$useropts" ]; then log_info "\$useropts are set to \"$useropts\""; fi - execute "$mc $ifile $ofile $useropts $vopts $vopopts $aopts $previewval" - done -} - - -function dump_audio_mplayer() { -# -# dump audio-stream from dvd with mplayer -# - if [ "$error" ]; then return - elif [ "$preview" = "1" ]; then return - elif [ ! "$dvd" ]; then return; fi - - log_info "dumping audio-stream $audio_id from $dvd with $mp" - evecho "dumping audio-stream from dvd" - execute "$mp $dir -vo null -vc dummy -aid $audio_id -aop list=volnorm -dumpaudio -dumpfile $tempdir/bd.ac3" -} - - -function encode_ffmpeg() { -# -# encode the audio-stream with ffmpeg -# - if [ "$error" ]; then return - elif [ "$preview" = "1" ]; then return; fi - - if [ $audio_id -ge 128 ] - then - local ifile="$tempdir/bd.ac3" - else - local ifile="$tempdir/c$audio_id.mpa" - local forceinput="-f mp3" - fi - - case "$acodec" in - "lame") - local filetype="mp3" - ;; - "ogg-vorbis") - local filetype="ogg" - ;; - "copy") - log_info "ogm doesn't support mp2 audio-streams, i will convert it into ac3" - local filetype="ac3" - ;; - *) - ;; - esac - - log_info "converting $ifile into $filetype-format" - evecho "conv. audio into $filetype-format" - execute "$ffmpeg -hq -y $forceinput -i $ifile -ab $br_audio $tempdir/c$audio_id.$filetype" -} - - -function merge_ogm_mkv() { - if [ "$error" ]; then return; fi - if [ "$container" != "ogm" -a "$container" != "matroska" ]; then return; fi - - - case "$container" in - "ogm") - local merge="$ogmmerge" - local filetype="ogm" - ;; - "matroska") - local merge="$mkvmerge" - local filetype="mkv" - ;; - *) - ;; - esac - - - if [ "$preview" != "1" ] - then - case "$acodec" in - "lame") - local afile="$tempdir/c$audio_id.mp3" - ;; - "ogg-vorbis") - local afile="$tempdir/c$audio_id.ogg" - ;; - "copy") - if [ $audio_id -ge 128 ] - then - # ac3 - local afile="$tempdir/bd.ac3" - elif [ "$container" = "ogm" ] - then - # mpg2, container ogm - local afile="$tempdir/c$audio_id.ac3" - else - # mpg2 - local afile="$tempdir/c$audio_id.mpa" - fi - ;; - *) - ;; - esac - fi - - log_info "merging movie $shortname into $filetype-container" - evecho "merging into $filetype-container" - execute "$merge -o $tempdir/$name.$filetype $tempdir/$name.avi $afile" -} - - -function cleanup () { -# -# delete temp-files and reset variables -# - # temp. codec-files - rm -f "$tempdir/divx2pass.log" - rm -f "$tempdir/lavc_stats.txt" - rm -f "$tempdir/analyse.log" - rm -f "$tempdir/c:\\trace_b.txt" - rm -f "$tempdir/xvid-twopass.stats" - - # temp. movie-files - rm -f "$tempdir/temp.vdr" - if [ "$container" = "ogm" -o "$container" = "matroska" ] - then - rm -f "$tempdir/$name.avi" - fi - rm -f "$tempdir"/e[0-9].mpv - rm -f "$tempdir"/c[0-9].mpa - rm -f "$tempdir"/c[0-9].mp3 - rm -f "$tempdir"/c[0-9].ogg - rm -f "$tempdir"/c[0-9].ac3 - rm -f "$tempdir"/c[0-9][0-9][0-9].mp3 - rm -f "$tempdir"/c[0-9][0-9][0-9].ogg - rm -f "$tempdir"/bd.ac3 - - # temp. queuehandler-files - rm -f "$pluginsdir/encode.vdrrip" - rm -f /tmp/queuehandler.err - - - # reset variables - dir="" - name="" - filesize="" - filenumbers="" - vcodec="" - br_video="" - min_q="" - max_q="" - crop_w="" - crop_h="" - crop_x="" - crop_y="" - scale_w="" - scale_h="" - acodec="" - br_audio="" - audio_id="" - ppvalues="" - rename="" - container="" - preview="" - - mc="" - mp="" - - dvd="" - previewval="" - error="" - - step="0" -} - - -function del_queue () { -# -# delete first line from the queuefile -# - # waits until the queuefile is unlocked, and locks it - wait_unlock - lock - - if [ "$error" ] - then - head -n 1 "$queuefile" >> "$queuefile.rejected" - fi - - # delete first entry of the queuefile - local lines=`cat "$queuefile" | wc -l` - if [ "$lines" -le 1 ] - then - rm -f "$queuefile" - else - let lines=lines-1 - cp -a "$queuefile" /tmp/queuefile.tmp - tail -n $lines /tmp/queuefile.tmp > "$queuefile" - fi - - if [ "$error" ] - then - log_info "### moved movie $shortname to $queuefile.rejected ###" - else - log_info "### movie $shortname deleted from queuefile ###" - fi - - # unlock queuefile - unlock -} - - -function split () { -# -# splits the encoded movie into $filenumbers pieces -# - if [ "$error" ]; then return - elif [ "$filenumbers" = "1" -o "$preview" = "1" ]; then return; fi - - log_info "splitting $shortname in $filenumbers pieces" - evecho "splitting movie" - - case "$container" in - "avi") - local overlap=3 - - local count=1 - local splitpos=0 - - # workaround to get the correct filesize from mencoder with -endpos - let local splitsize=filesize*99/100 - - log_info "splitting $shortname in $filenumbers pieces" - while [ $count -le $filenumbers ] - do - local ofile="$name-$count.avi" - - if [ $count -eq $filenumbers ] - then - local endpos="" - else - local endpos="-endpos ${splitsize}mb" - fi - - # split file - execute "$mc -ovc copy -oac copy $tempdir/$name.avi \ - -ss $splitpos $endpos -o $tempdir/$ofile" - - # detect length of splitted file and add it to $splitpos - local length=`$mplayer -vo null -ao null -identify -frames 0 $tempdir/$ofile 2>/dev/null | \ - grep ID_LENGTH | cut -d= -f2` - let splitpos=splitpos+length-overlap - let count=count+1 - done - ;; - "ogm") - execute "$ogmsplit -s $filesize -n $filenumbers $tempdir/$name.ogm" - ;; - "matroska") - execute "$mkvmerge --split d${filesize}m --split-max-files \ - $filenumbers -o $tempdir/$ofile" - ;; - *) - ;; - esac -} - - -function vdrecho () { -# -# echo $1 in the vdr-infobar (or console) -# - - if [ -x "$svdrpsend" ] - then - $svdrpsend -d "$vdrhostname" "MESG $1" 2>/dev/null 1>/dev/null - elif [ -x "$netcat" ] - then - echo "MESG $1" | $netcat -q 1 "$vdrhostname" 2001 2>/dev/null 1>/dev/null - else - log_info "$1" - fi -} - - -function evecho () { -# -# echo $ in the file encode.vdrrip -# - let step=step+1 - local time=`date +"%k:%M h"` - echo "- step $step/$steps (since $time): $1" > "$pluginsdir/encode.vdrrip" -} - - -function log_error () { -# -# echo $1 on stderr and write it to the syslog with priority user.error -# - logger -s -p user.error -t [vdrrip-qh] "$1" - - if [ "$2" ] - then - vdrecho "$1" - exit "$2" - else - error="1" - fi -} - - -function log_info () { -# -# echo $1 on stdout and write it to the syslog with priority user.info -# - logger -s -p user.info -t [vdrrip-qh] "$1" 2>&1 -} - - -function log_debug () { -# -# echo $1 on stdout and write it to the syslog with priority user.debug -# - if [ "$debug" = "1" ] - then - logger -s -p user.debug -t [vdrrip-qh] "$1" - fi -} - - -function execute () { -# -# executes $1 and checks the rc -# - local cmd="$1" - - log_debug "execute command: $cmd" - - # execute $cmd and save the return-code: - if [ "$stdout" = "1" ] - then - nice -+19 $cmd 2>/tmp/queuehandler.err - local rc="$?" - else - nice -+19 $cmd 1>/dev/null 2>/tmp/queuehandler.err - local rc="$?" - fi - - if [ "$rc" != "0" ] - then - # display stderr if the return-code isn't 0 - log_error "an error occured (rc $rc) while processing the command: $cmd" - local err_message=`cat /tmp/queuehandler.err 2>/dev/null` - if [ "$err_message" ] - then - log_error "error message: $err_message" - fi - elif [ "$debug" = "1" ] - then - # display stderr if the debug-mode is set - local dbg_message=`cat /tmp/queuehandler.err 2>/dev/null` - if [ "$dbg_message" ] - then - log_debug "debug message: $dbg_message" - fi - fi -} - - -function rename () { -# -# renames the vdr recording to indicate it was encoded properly -# this function is written by memed@www.vdrportal.de -# - if [ "$error" ]; then return - elif [ "$dvd" ]; then return - elif [ "$preview" = "1" ]; then return - elif [ "$rename" = "0" ]; then return; fi - - new_dir="$(dirname $dir)${append_string}" - mkdir -p "$new_dir" - #move finished subdir to new folder - mv "$dir" "$new_dir" - #if all subdirs are empty, also delete dir one up - [ $(find $(dirname $dir) -type f|wc -l) -eq 0 ] && rm -rf $(dirname $dir) -} - - -function wait_unlock () { -# -# wait until the queuefile is unlocked -# - local lockstat - read lockstat 2>/dev/null < "$pluginsdir/lock.vdrrip" - - while [ -e "$pluginsdir/lock.vdrrip" -a "$lockstat" != "1" ] - do - echo - echo "queuefile is locked !" - echo "sleeping $lock seconds" - echo - sleep $lock - done -} - - -function lock () { -# -# locks the queuefile -# - local lockfile="$pluginsdir/lock.vdrrip" - echo 1 > $lockfile 2>/dev/null - - if [ ! -e "$lockfile" ] - then - log_error "couldn't write to $lockfile" 1 - fi -} - - -function unlock () { -# -# unlocks the queuefile -# - rm -f $pluginsdir/lock.vdrrip - - if [ -e "$lockfile" ] - then - log_error "couldn't delete $lockfile" 1 - fi -} - -function _trap () { -# -# this function is called if the queuehandler is killed -# - if [ "$debug" = "0" ]; then cleanup; fi - log_error "queuehandler was killed !" - vdrecho "queuehandler was killed !" -} - - -# -# this is the main part -# - -trap "_trap; exit" 2 9 15 - -initialize "$1" "$2" "$3" # make initial checks -cleanup # delete old temp-files - -while [ true ] -do - read_queue # read the first line from the queuefile - pre_check # make some checks before the encoding - calc_steps # calc the number of encoding-steps - preview # get the preview values - prepare # prepares the encoding - encode # encodes the movie - merge_ogm_mkv # merge ogm/mkv-files - split # splits the encoded movie - - if [ ! "$error" ] - then - mess="movie $shortname encoded" - log_info "$mess" - vdrecho "$mess" - else - mess="couldn't encode movie $shortname" - log_info "$mess" - vdrecho "$mess" - fi - - rename # rename dir-name of the vdr-recording - del_queue # delete first line from the queuefile - cleanup # delete temp-files -done |