Major refactoring of the DVD encoding algorithms:
authorAlan J. Pippin <ajp@pippins.net>
Thu, 21 May 2009 16:30:25 +0000 (10:30 -0600)
committerAlan J. Pippin <ajp@pippins.net>
Thu, 21 May 2009 16:30:25 +0000 (10:30 -0600)
- Added new -p <profile> option to support multiple encoding profiles.
- Added new ipod profile for MP4 files
- Added new hdtv profile for AVI files (divx)

Added new -e <extension> option that will append a custom
suffix to the end of the dvdname that is being ripped.

Added new information to the README file, including examples.

README
rip_dvd
rip_dvd.wrap

diff --git a/README b/README
index 84d53a53c964481c8ed4ea3bd407b90e2a64db71..33f8b10b19c00cd634abba97b58302dd9d38a146 100644 (file)
--- a/README
+++ b/README
@@ -1,3 +1,17 @@
+----------------------------------------------
+DEPENDENCIES
+----------------------------------------------
+The following packages need to be installed on your system:
+
+Package Dependencies (apt-get install these for example):
+lsdvd dvdauthor gddrescue dvdbackup tovid mencoder mplayer genisoimage libdvdcss2
+
+Specific Executable (program) Dependencies (must be found in $PATH):
+volname makexml lsdvd dvdauthor gddrescue dvdbackup mencoder mplayer mkisofs
+
+Optional Dependencies:
+lookup imdb info/posters for mythvideo: http://www.mythtv.org/wiki/Fill_mythvideo_metadata.pl
+
 ----------------------------------------------
 INSTALL
 ----------------------------------------------
@@ -23,3 +37,59 @@ file you create locally.  This will allow you to get updates from my
 GIT repository at a later point in time without blowing away your 
 local settings.
 
+----------------------------------------------
+MYTHTV MENU SETUP
+----------------------------------------------
+Copy the menu files provided in the GIT repository to your mythtv
+menu location:
+
+> cp optical_menu.xml /usr/share/mythtv/
+> cp rip_dvd_menu.xml /usr/share/mythtv/
+
+You'll also need to edit the rip_dvd_menu.xml file so that the paths,
+commands, buttons, actions, meet your needs to accomplish the common
+encoding tasks you will want to do.
+
+The optical_menu.xml file was modified with a single entry for the
+rip_dvd_menu.xml file. You can take a look at this entry in this file
+and place it in any xml file you want to get it on the menu you want.
+I choose to place it on the optical menu.
+
+----------------------------------------------
+COMMAND LINE EXAMPLES
+----------------------------------------------
+
+Rip a DVD into a compressed AVI file with default hdtv profile:
+> rip_dvd -d /path/to/dest/dir -b 2000 -x
+
+Rip a DVD into a compressed AVI file with default hdtv profile scaling to 320x240 compressed video size:
+> rip_dvd -d /path/to/dest/dir -b 2000 -x -a 320:240
+
+Rip a DVD into a compressed AVI file with default hdtv profile targetting a certain compressed video filesize (in MB):
+> rip_dvd -d /path/to/dest/dir -b 2000 -x -s 650
+
+Rip a DVD into a VOB file:
+> rip_dvd -d /path/to/dest/dir -v
+
+Rip a DVD into an ISO file:
+> rip_dvd -d /path/to/dest/dir -m
+
+Rip a DVD into a burnable DVD compliant folder (creating VIDEO_TS and AUDIO_TS folders):
+> rip_dvd -d /path/to/dest/dir -f
+
+Rip a VOB file into a compressed AVI file:
+> rip_dvd -d /path/to/dest/dir -b 2000 -x -n /path/to/file.vob
+
+Rip a DVD Folder into a compressed AVI file:
+> rip_dvd -d /path/to/dest/dir -b 2000 -x -n /path/to/dvd/folder/that/contains/a/VIDEO_TS
+
+Rip a DVD into a compressed MP4 file for an ipod:
+> rip_dvd -d /path/to/dest/dir -b 2000 -x -p ipod
+
+Rip a DVD into a compressed MP4 file for an ipod AND again for a compressed AVI file:
+> dvdname=`volname /dev/dvd | awk '{ print $1 }'`
+> rip_dvd -d /path/to/dest/dir -v
+> rip_dvd -d /path/to/dest/dir/ipod -b 2000 -x -p ipod -n /path/to/dest/dir/$dvdname.VOB
+> rip_dvd -d /path/to/dest/dir/hdtv -b 2000 -x -p hdtv -n /path/to/dest/dir/$dvdname.VOB
+> rm /path/to/dest/dir/$dvdname.VOB
+
diff --git a/rip_dvd b/rip_dvd
index c47fd59772b2c7521e2c15b37950a3e97ee45807..44d700080975bbc626bc486e9f47738ad5afbaed 100755 (executable)
--- a/rip_dvd
+++ b/rip_dvd
@@ -37,8 +37,9 @@ config="${0%/*}/rip_dvd.conf"
 [ -e "${config}.dist" ] && . ${config}.dist
 [ -e "${config}" ] && . ${config}
 
-###############################################
+##############################################################################################
 # Command line processing
+##############################################################################################
 typeset dvdname=""
 typeset debug=""
 typeset dest=""
@@ -48,6 +49,8 @@ typeset dvdpath=""
 typeset aspect=""
 typeset SCALE=""
 typeset CROP=""
+typeset profile="hdtv"
+typeset extension=""
 typeset -i keep_isofile=0
 typeset -i keep_vobfile=0
 typeset -i keep_dvdfolder=0
@@ -55,7 +58,7 @@ typeset -i keep_intermediate_files=0
 typeset -i make_final_dest_vob=0
 typeset -i make_final_dest_iso=0
 typeset -i make_final_dest_folder=0
-typeset -i make_final_dest_avi=0
+typeset -i make_final_dest_comp=0
 typeset -i errors=0
 typeset -i show_usage=0
 typeset -i mirror_mode=0
@@ -66,7 +69,7 @@ typeset -i invalid_feature_title=0
 typeset -i feature_title_override=0
 typeset -i mplayer_dumpstream_incompatibility=0
 
-while (($#)) && getopts 2mvifkxht:n:d:b:s:t:a: opt "$@"
+while (($#)) && getopts 2mvifkxht:n:d:b:s:t:a:p:e: opt "$@"
 do
     case $opt in
         (n)     dvdname=$OPTARG;;
@@ -77,11 +80,13 @@ do
         (v)     make_final_dest_vob=1;;
         (i)     make_final_dest_iso=1;;
         (f)     make_final_dest_folder=1;; 
-        (x)     make_final_dest_avi=1;;
+        (x)     make_final_dest_comp=1;;
         (m)     mirror_mode=1;;
         (k)     keep_intermediate_files=1;;
         (t)     feature_title_override=$OPTARG;;
        (a)     aspect=$OPTARG;;
+       (p)     profile=$OPTARG;;
+       (e)     extension=$OPTARG;;
         (w)     set -$opt;;
         (h)     show_usage=1;;
         (:)     echo >&2 "$0: $OPTARG requires a value"; errors=errors+1;;
@@ -102,20 +107,25 @@ function usage() {
     echo >&2 "                 3) If dvdname is a full path to a DVD folder, it will be ripped as a DVD instead of $dev"
     echo >&2 "                 4) If dvdname is a full path to an MPG2 file, it will be ripped as a DVD instead of $dev"
     echo >&2 "                 5) If dvdname is a full path to an ISO file, it will be ripped as a DVD instead of $dev"
+    echo >&2 "   -p <profile>  Specify which encoding profile to use in -x mode as shown below:"
+    echo >&2 "                 - hdtv = AVI, Xvid codec, 2 pass encoding (default)"
+    echo >&2 "                 - ipod = MP4, x264 codec, 2 pass encoding, 576:320 scaling"
+    echo >&2 "   -e <ext>      Specify a suffix extension to apply to the end of the final image filename (like .hdtv, .ipod, etc)"
+    echo >&2 "                 If you run multiple instances of this script ripping the same DVD, you need to specify this option."
     echo >&2 "   -m            Make a mirror image of the DVD and save it as a DVD ISO file"
     echo >&2 "                 The default operation is non-mirror mode where only the main"
     echo >&2 "                 feature title will be ripped."
     echo >&2 "   -v            Make the final image a DVD VOB file"
     echo >&2 "   -i            Make the final image a DVD ISO file"
     echo >&2 "   -f            Make the final image a DVD folder"
-    echo >&2 "   -x            Make the final image an AVI (XVID) file"
+    echo >&2 "   -x            Make the final image a compressed file based on your profile selection"
     echo >&2 "                 You must also specify the target size or bitrate using the '-s' or '-b' options"
-    echo >&2 "   -s <size>     Set the target size of the AVI file in MB (ex: 700, 1000, etc)"
-    echo >&2 "   -b <bitrate>  Set the bitrate desired in the AVI file in kbits/sec (ex: 1500, 2000 (default), etc)"    
+    echo >&2 "   -s <size>     Set the target size of the compressed file in MB (ex: 700, 1000, etc)"
+    echo >&2 "   -b <bitrate>  Set the bitrate desired in the compressed file in kbits/sec (ex: 1500, 2000 (default), etc)"    
     echo >&2 "   -a <W:H>      Specify the width x height aspect ratio to scale the DVD to (only used in -x mode)"
     echo >&2 "      <W>        If only the width is given, it will autoset the height to a value which preserves the aspect ratio"
     echo >&2 "                 The default behavior is autoaspect mode, which preserves the original aspect, with no scaling being done"
-    echo >&2 "   -2            Use 2 channel MP3 audio encoding when making an AVI file (default is 6 channel AC3)"
+    echo >&2 "   -2            Use 2 channel MP3 audio encoding when making a compressed file (default is 6 channel AC3)"
     echo >&2 "   -k            Keep the intermediate files (good for debugging)"
     echo >&2 "                 In -x mode, run with this option to keep the original .VOB file"
     echo >&2 "                 By default, all intermediary files are deleted. Only the final image is kept"
@@ -136,25 +146,25 @@ if [ "$dest" == "" ]; then
   usage
 fi
 
-if ([ $target_bitrate -ne 0 ] || [ $target_size -ne 0 ] || [ "$aspect" != "" ]) && [ $make_final_dest_avi -ne 1 ]; then
-  echo "-E- You can't specify a bitrate, target_size, or aspect in non AVI file mode. You must specify '-x' when using '-b' or '-s' or '-a'" | tee -a $logfile
+if ([ $target_bitrate -ne 0 ] || [ $target_size -ne 0 ] || [ "$aspect" != "" ]) && [ $make_final_dest_comp -ne 1 ]; then
+  echo "-E- You can't specify a bitrate, target_size, or aspect in non compressed file mode. You must specify '-x' when using '-b' or '-s' or '-a'" | tee -a $logfile
   usage
 fi
 
-if [ $target_bitrate -eq 0 ] && [ $target_size -eq 0 ] && [ $make_final_dest_avi -eq 1 ]; then
-  echo "-E- You must specify a bitrate in AVI file mode. You must specify '-b' or '-s' when using '-x'" | tee -a $logfile
+if [ $target_bitrate -eq 0 ] && [ $target_size -eq 0 ] && [ $make_final_dest_comp -eq 1 ]; then
+  echo "-E- You must specify a bitrate in compressed file mode. You must specify '-b' or '-s' when using '-x'" | tee -a $logfile
   usage
 fi
 
 if [ $make_final_dest_vob -eq 0 ] && [ $make_final_dest_iso -eq 0 ] && 
-   [ $make_final_dest_folder -eq 0 ] && [ $make_final_dest_avi -eq 0 ] && [ $mirror_mode -eq 0 ]; then
+   [ $make_final_dest_folder -eq 0 ] && [ $make_final_dest_comp -eq 0 ] && [ $mirror_mode -eq 0 ]; then
   echo "-E- You must specify what type of final destination you want: '-m' or '-v' or '-i' or '-f' or '-x'" | tee -a $logfile
   usage
 fi
 
 if [ $mirror_mode -eq 1 ]; then
   if [ $make_final_dest_vob -eq 1 ] || [ $make_final_dest_iso -eq 1 ] || 
-     [ $make_final_dest_folder -eq 1 ] || [ $make_final_dest_avi -eq 1 ]; then
+     [ $make_final_dest_folder -eq 1 ] || [ $make_final_dest_comp -eq 1 ]; then
     echo "-E- You can't specify '-v' or '-i' or '-f' or '-x' when operating in mirror mode with '-m'" | tee -a $logfile
     usage
   fi
@@ -186,7 +196,7 @@ fi
 [[ ! -x `which dvdauthor` ]] && echo "-E- missing dependency: dvdauthor" && exit
 [[ ! -x `which mkisofs` ]] && echo "-E- missing dependency: mkisofs" && exit
 
-###############################################
+##############################################################################################
 
 typeset -i ripdvd
 if [ -z "$dvdname" ]; then
@@ -256,6 +266,9 @@ fi
 # remove bad characters from the dvdname
 dvdname=${dvdname%.} # remove trailing '.' character
 
+# add the suffix extension to the end of the dvdname
+dvdname=$dvdname$extension
+
 # make a "safe" dvdname (remove special characters)
 safedvdname=`basename "$dvdname" | sed 's/[ !&*\\$?]/_/g'`
 
@@ -296,8 +309,9 @@ if [ ! -d "$logdir" ]; then
   fi
 fi
 
-###############################################
+##############################################################################################
 # cleanup functions
+##############################################################################################
 cleanup() { 
   if [ $keep_intermediate_files -eq 0 ]; then
     [[ -e "$dvdauthorlog" ]] && rm -f "$dvdauthorlog"
@@ -330,8 +344,9 @@ fatal_and_exit() {
 trap fatal_and_exit INT
 trap cleanup EXIT
 
-###############################################
+##############################################################################################
 # processing functions
+##############################################################################################
 function make_dvd_iso_image {
 
   isofile="$1"
@@ -534,6 +549,30 @@ function get_crop_from_iso {
   echo "   Setting mencoder crop filter to: $CROP"
 }
 
+function get_crop_from_vob { 
+  FRAMES=10000
+  echo "-> Detecting black frame border crop value from VOB file"
+  echo "   mplayer -vf cropdetect -frames $FRAMES -nosound -vo md5sum -benchmark \"$vobfile\" > $dumplog 2>&1" >> "$logfile"
+  mplayer -vf cropdetect -frames $FRAMES -nosound -vo md5sum -benchmark "$vobfile" > $dumplog 2>&1
+  [[ -e "md5sums" ]] && rm -f "md5sums"
+  CROP=`cat $dumplog | grep CROP | tail -1`
+  echo "   Found crop value of $CROP" >> "$logfile"
+  CROP=${CROP#* crop=}
+  CROP=${CROP%%\).*}
+  typeset -i CROPCHECK
+  CROPCHECK=`echo "$CROP" | awk -F ':' '{ print $1 }'`
+  echo "   Final crop value of $CROP with cropcheck value of $CROPCHECK" >> "$logfile"
+  if [ -z "$CROP" ]; then
+    fatal_and_exit "-E- Unable to extract CROP value from iso: $isofile"
+  fi
+  if [ $CROPCHECK -lt 0 ]; then 
+    CROP=""
+  else 
+    CROP=",crop=$CROP"
+  fi
+  echo "   Setting mencoder crop filter to: $CROP"
+}
+
 function get_audio_id_from_vob {
   # Adjust our audio ID to find the english audio stream
   # This should be 128. However, if 128 is not there, pick the next one that incrementally is.
@@ -766,6 +805,113 @@ function check_for_mplayer_dumpstream_incompatibility {
   fi
 }
 
+# encode the vob file into a compressed file format
+function compress_vob_file {
+  typeset -i found_profile=0
+   
+  if [ "$profile" == "hdtv" ]; then
+    # DIVX 2 pass encoding
+    found_profile=1
+    final_output_file="$dest/$dvdname.avi"
+    mencoder_general_opts="-quiet $lang_opts -passlogfile $passlogfile"
+    mencoder_output_opts="-ofps 30000/1001 -ffourcc DIVX"
+    mencoder_video_filter_opts="-vf pullup,softskip,hqdn3d=2:1:2$CROP$SCALE"
+    mencoder_video_encoder_opts="-ovc xvid -xvidencopts pass=%PASS"
+    video_encoder_opts[0]="bitrate=$target_bitrate"
+    video_encoder_opts[1]="threads=$mencoder_threads"
+    video_encoder_opts[2]="chroma_opt"
+    video_encoder_opts[3]="vhq=4"
+    video_encoder_opts[4]="bvhq=1"
+    video_encoder_opts[5]="quant_type=mpeg"
+    video_encoder_opts[6]="autoaspect"
+    for OPTS in "${video_encoder_opts[@]}"; do 
+      mencoder_video_encoder_opts="$mencoder_video_encoder_opts:$OPTS"
+    done
+
+    if [ $audio_2ch -eq 0 ]; then
+      # These options produce good 6 channel audio for linux and windows
+      mencoder_audio_opts="-oac copy"
+      # There are 3 different ways to specify 6 channel encoding. We'll try the other ones in order if one of them fails.
+      mencoder_audioch_opts[0]="-channels 6 -af channels=6"
+      mencoder_audioch_opts[1]="-af channels=6"
+      mencoder_audioch_opts[2]=""
+    else
+      # These options produce good 2 channel audio for linux and windows (including the internal mythvideo player)
+      mencoder_audio_opts="-oac mp3lame -lameopts cbr:br=$audio_bitrate"
+      mencoder_audioch_opts[0]=""
+    fi
+  fi
+
+  if [ "$profile" == "ipod" ]; then
+    # MP4 encoding 
+    found_profile=1
+    SCALE=",scale=576:320"
+    final_output_file="$dest/$dvdname.mp4"
+    mencoder_general_opts="-quiet $lang_opts -passlogfile $passlogfile"
+    mencoder_output_opts="-ofps 30000/1001 -sws 9 -of lavf -lavfopts format=mp4"
+    mencoder_video_filter_opts="-vf harddup$CROP$SCALE";
+    mencoder_video_encoder_opts="-ovc x264 -x264encopts pass=%PASS"
+    video_encoder_opts[0]="bitrate=$target_bitrate"
+    video_encoder_opts[1]="threads=$mencoder_threads"
+    video_encoder_opts[2]="vbv_maxrate=1500"
+    video_encoder_opts[3]="vbv_bufsize=2000"
+    video_encoder_opts[4]="nocabac"
+    video_encoder_opts[5]="me=umh"
+    video_encoder_opts[6]="subq=6"
+    video_encoder_opts[7]="frameref=6"
+    video_encoder_opts[8]="trellis=1"
+    video_encoder_opts[9]="level_idc=30"
+    video_encoder_opts[10]="global_header"
+    for OPTS in "${video_encoder_opts[@]}"; do 
+      mencoder_video_encoder_opts="$mencoder_video_encoder_opts:$OPTS"
+    done
+
+    mencoder_audio_opts="-oac faac -faacopts mpeg=4:object=2:br=$audio_bitrate:raw"
+    mencoder_audioch_opts[0]="-channels 2 -srate 48000"
+  fi
+
+  if [ $found_profile -eq 0 ]; then
+    fatal_and_exit "-E- Unable to find a profile handler for profile: $profile"
+  fi
+
+  # Do not edit this line. $mencoder_video_encoder_opts must be last
+  mencoder_opts="$mencoder_general_opts $mencoder_output_opts $mencoder_audio_opts $mencoder_video_filter_opts $mencoder_video_encoder_opts"
+  mencoder_retval=0
+
+  for PASS in 1 2 
+  do 
+    # Set some options based on which pass we are in
+    mencoder_opts_for_pass=$(echo "$mencoder_opts" | sed "s,%PASS,$PASS,g")
+    [ $PASS -eq 1 ] && mencoder_opts_for_pass="$mencoder_opts_for_pass:turbo"
+    [ $PASS -eq 1 ] && output_file="/dev/null"
+    [ $PASS -eq 2 ] && output_file="$final_output_file"
+  
+    # It's possible that the audio channel encoding may not work. Cycle through all our different audioch_opts until we find one that works.
+    for CH_OPTS in "${mencoder_audioch_opts[@]}"; 
+    do
+      echo -e "   Encoding pass $PASS"
+      echo -e "\n   Encoding pass $PASS: mencoder $CH_OPTS $mencoder_opts_for_pass \"$vobfile\" -o \"$output_file\" >> $encodelog 2>&1" >> "$logfile"
+      mencoder $CH_OPTS $mencoder_opts_for_pass "$vobfile" -o "$output_file" > $encodelog 2>&1
+      mencoder_retval=$? 
+      grep -q "\[channels\] Invalid" $encodelog
+      if [ $? != 0 ]; then         
+        break;
+      else
+        echo -e "\n-W- Audio channel encoding error. Falling back to next audio channel encoding scheme." >> "$logfile"
+      fi
+    done
+      
+    if [ $mencoder_retval != 0 ]; then
+      fatal_and_exit "-E- Unhandled mencoder error"
+    fi
+
+    # Concatenate the encode log to our main log file, greping out unwanted lines
+    cat $encodelog | grep -v "Pos:" >> "$logfile"
+
+  done
+}
+
 function fill_mythvideo_metadata {
 
   # This function must be passed the filename as an argument
@@ -817,8 +963,9 @@ function remove_intermediate_dvdbackup_folder {
   fi
 }
 
-###############################################
+##############################################################################################
 # MAIN
+##############################################################################################
 
 # Make a note of when this DVD rip started
 date=`date`
@@ -867,7 +1014,7 @@ if [ $mirror_mode -eq 0 ]; then
     isofile="$tmpdir/$dvdname.iso"
   fi
      
-  if [ $make_final_dest_vob -eq 1 ] || [ $make_final_dest_avi -eq 1 ]; then
+  if [ $make_final_dest_vob -eq 1 ] || [ $make_final_dest_comp -eq 1 ]; then
 
     if [ ! -e "$vobfile" ]; then
       echo "-> Creating DVD video $vobfile" | tee -a "$logfile"
@@ -932,82 +1079,21 @@ if [ $mirror_mode -eq 0 ]; then
 
     else
       echo "-> Skipping VOB creation. VOB DVD video already exists: $vobfile" | tee -a "$logfile"
+      # get our audio id from the VOB file
+      get_audio_id_from_vob "$vobfile"
+      # get the crop value from the VOB
+      get_crop_from_vob
     fi
 
-    # transcode the DVD
-    if [ $make_final_dest_avi -eq 1 ]; then
-      echo "-> Encoding the DVD video to an AVI file" | tee -a "$logfile"
+    # encode the VOB file to a compressed file format
+    if [ $make_final_dest_comp -eq 1 ]; then
+      echo "-> Encoding the DVD video to a compressed file" | tee -a "$logfile"
 
       # determine what our bitrate needs to be if a target size was specified instead
       calculate_bitrate_from_target_size        
-      
-      # There was a lot of experimentation to arrive at these values
-      # These seem to work OK for me. If they don't work for you, feel
-      # free to adjust/change as needed.
-
-      # Edit these as needed to suite your needs
-      mencoder_general_opts="-quiet $lang_opts -passlogfile $passlogfile"
-      mencoder_output_opts="-ofps 30000/1001 -ffourcc DIVX"
-      mencoder_video_filter_opts="-vf pullup,softskip,hqdn3d=2:1:2$CROP$SCALE"
-      mencoder_video_encoder_opts="-ovc xvid -xvidencopts pass=%PASS:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:bitrate=$target_bitrate:autoaspect:threads=$mencoder_threads"
-
-      # There are a number of different ways to encode 6 channel audio.
-      # I've loaded 3 different ways into the mencoder_audioch_opts.
-      # It will cycle through them until it finds one that works. 
-      # You can change the order to suit your needs.
-      if [ $audio_2ch -eq 0 ]; then
-
-        # These options produce good 6 channel audio for the internal mythvideo player, but they can't play in Windows.
-        #mencoder_audio_opts="-oac lavc -lavcopts acodec=ac3"
-        #mencoder_audioch_opts[0]="-channels 6 -af channels=6:6:0:5:1:4:2:3:3:2:4:1:5:0"
-
-        # These options produce good 6 channel audio for linux and windows (except the internal mythvideo player)
-        # This option requires playback under linux with mplayer to be done with options: -channels 6 -ac hwac3,hwdts,mad 
-        mencoder_audio_opts="-oac copy"
-
-        # There are 3 different ways to specify 6 channel encoding. We'll try the other ones in order if one of them fails.
-        mencoder_audioch_opts[0]="-channels 6 -af channels=6"
-        mencoder_audioch_opts[1]="-af channels=6"
-        mencoder_audioch_opts[2]=""
-
-     else 
-        # These options produce good 2 channel audio for linux and windows (including the internal mythvideo player)
-        mencoder_audio_opts="-oac mp3lame -lameopts cbr:br=$audio_bitrate"
-        mencoder_audioch_opts[0]=""
-     fi
-
-      # Do not edit this line. $mencoder_video_encoder_opts must be last
-      mencoder_opts="$mencoder_general_opts $mencoder_output_opts $mencoder_audio_opts $mencoder_video_filter_opts $mencoder_video_encoder_opts"
-      mencoder_retval=0
-
-      for PASS in 1 2 
-      do 
-        # Set some options based on which pass we are in
-        mencoder_opts_for_pass=$(echo "$mencoder_opts" | sed "s,%PASS,$PASS,g")
-       [ $PASS -eq 1 ] && mencoder_opts_for_pass="$mencoder_opts_for_pass:turbo"
-        [ $PASS -eq 1 ] && output_file="/dev/null"
-        [ $PASS -eq 2 ] && output_file="$dest/$dvdname.avi"
-  
-        # It's possible that the audio channel encoding may not work. Cycle through all our different audioch_opts until we find one that works.
-        for CH_OPTS in "${mencoder_audioch_opts[@]}"; 
-        do
-          echo -e "   Encoding pass $PASS"
-          echo -e "\n   Encoding pass $PASS: mencoder $CH_OPTS $mencoder_opts_for_pass \"$vobfile\" -o \"$output_file\" >> $encodelog 2>&1" >> "$logfile"
-          mencoder $CH_OPTS $mencoder_opts_for_pass "$vobfile" -o "$output_file" > $encodelog 2>&1
-          mencoder_retval=$? 
-          grep -q "\[channels\] Invalid" $encodelog
-          if [ $? != 0 ]; then     
-            break;
-          else
-            echo -e "\n-W- Audio channel encoding error. Falling back to next audio channel encoding scheme." >> "$logfile"
-          fi
-        done
-        if [ $mencoder_retval != 0 ]; then
-          fatal_and_exit "-E- Unhandled mencoder error"
-        fi
-        # Concatenate the encode log to our main log file, greping out unwanted lines
-        cat $encodelog | grep -v "Pos:" >> "$logfile"
-      done
+     
+      # encode the vob file into a compressed file format
+      compress_vob_file
 
       if [ $keep_intermediate_files -eq 0 ] && [ $make_final_dest_vob -eq 0 ]; then
         [[ -e "$vobfile" ]] && [[ $keep_vobfile -eq 0 ]] && rm -f "$vobfile";
@@ -1019,7 +1105,7 @@ if [ $mirror_mode -eq 0 ]; then
     fi
 
   # add this video data to the mythtv DB
-  [ $make_final_dest_avi -eq 1 ] && fill_mythvideo_metadata "$dest/$dvdname.avi
+  [ $make_final_dest_comp -eq 1 ] && fill_mythvideo_metadata "$final_output_file
   [ $make_final_dest_vob -eq 1 ] && fill_mythvideo_metadata "$vobfile" 
     
   else
@@ -1089,3 +1175,4 @@ if [ $mirror_mode -eq 0 ]; then
 
 fi
 
+##############################################################################################
\ No newline at end of file
index bb8093c6d9171b438ab318e168033635fe206508..b959fe66155f3d8d186ca881b2e3379deec74de3 100755 (executable)
@@ -16,6 +16,18 @@ if [ -z "$dvdtype" ]; then
   usage
 fi
 
+##############################################################################
+# Local Machine Settings:
+# Sources both the "default" conf file tracked by GIT (rip_dvd.conf.dist)
+# and the local conf file created by each local machine (rip_dvd.conf)
+# Copy the rip_dvd.conf.dist file to rip_dvd.conf and edit the later.
+# This will allow you to override all the default values to meet your needs
+# in a way that won't get clobbered when you pull updates from my GIT repo.
+##############################################################################
+config="${0%/*}/rip_dvd.conf"
+[ -e "${config}.dist" ] && . ${config}.dist
+[ -e "${config}" ] && . ${config}
+
 ##############################################
 # get the name of the DVD from the DVD disk
 dvdname=`volname $dev | awk '{ print $1 }'`
@@ -44,7 +56,7 @@ elif [ "$dvdtype" == "childrens" ]; then
   echo "-> Ripping Children's DVD"
   dest=/myth/video/DVDs/Childrens
   rip_opts="$rip_opts"
-elif [ "$dvdtype" == "childrens" ]; then
+elif [ "$dvdtype" == "church" ]; then
   echo "-> Ripping Church DVD"
   dest=/myth/video/DVDs/Church
   rip_opts="$rip_opts"