+ # Handle custom parameter overrides
+ if [ $custom_video_bitrate == 1 ]; then
+ handbrake_opts[0]="-b $target_video_bitrate"
+ fi
+ if [ $custom_audio_2ch == 0 ]; then
+ audio_2ch=0
+ fi
+ if [ $custom_audio_6ch == 0 ]; then
+ audio_6ch=0
+ fi
+
+ # iphone
+ if [ "$profile" == "iphone" ]; then
+ profile="hb_iPhone_&_iPod_Touch"
+ fi
+ # ipod
+ if [ "$profile" == "ipod" ]; then
+ profile="hb_iPod"
+ fi
+
+ fi
+
+ # Predefined Handbrake Profile Handling
+ if [[ "$profile" =~ "hb" ]]; then
+ found_profile=1
+ handbrake_cli="$handbrake_mp4"
+ final_output_file="$dest/$dvdname.mp4"
+
+ # Handle custom parameter overrides
+ if [ $custom_video_bitrate == 1 ]; then
+ handbrake_opts[0]="-b $target_video_bitrate"
+ fi
+ if [ $custom_audio_2ch == 0 ]; then
+ audio_2ch=0
+ fi
+ if [ $custom_audio_6ch == 0 ]; then
+ audio_6ch=0
+ fi
+
+ # extract the HandBrake Profile name from $profile
+ hb_profile=`echo "$profile" | sed 's/hb_//g' | sed 's/_/ /g'`
+ fi
+
+ # Make sure we found a handler for the given profile
+ if [ $found_profile -eq 0 ]; then
+ fatal_and_exit "-E- Unable to find a profile handler for profile: $profile"
+ fi
+
+ # setup our audio option
+ if [ $audio_2ch -eq 1 ] && [ $audio_6ch -eq 1 ]; then
+ handbrake_audio_opts="-E faac,ac3 -6 dpl2,auto"
+ fi
+ if [ $audio_6ch -eq 1 ] && [ $audio_2ch -eq 0 ]; then
+ handbrake_audio_opts="-E ac3 -6 auto"
+ fi
+ if [ $audio_2ch -eq 1 ] && [ $audio_6ch -eq 0 ]; then
+ handbrake_audio_opts="-E faac -6 dpl2"
+ fi
+ if [ -n "$track" ]; then
+ handbrake_audio_opts="$handbrake_audio_opts -a $track"
+ fi
+
+ # Convert our array of opts into a string
+ for OPTS in "${video_encoder_opts[@]}"; do
+ handbrake_video_encoder_opts="$handbrake_video_encoder_opts:$OPTS"
+ done
+ if [ -n "$handbrake_video_encoder_opts" ]; then
+ handbrake_video_encoder_opts="-x $handbrake_video_encoder_opts"
+ fi
+ for OPTS in "${handbrake_opts[@]}"; do
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $OPTS"
+ done
+
+ # Append "global" command line options
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts -v 1 -m"
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $PASSES"
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $DRC"
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $SCALE"
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $SIZE"
+ handbrake_cmd_line_opts="$handbrake_cmd_line_opts $AUDIO_BITRATE"
+
+ # Execute the handbrake command to encode the video
+ # I have to copy-n-paste the code below to handle the 2 conditions, 1) hb_profile (mp4) 2) no hb_profile (xvid)
+ # The problem is the -Z "$hb_profile" option. I have to quote the "$hb_profile" due to spaces in it, forcing me to call it out explicity.
+ if [ -n "$hb_profile" ]; then
+ echo -e "\n Encoding: $handbrake_cli -i \"$vobfile\" -o \"$final_output_file\" -Z \"$hb_profile\" $handbrake_cmd_line_opts $handbrake_audio_opts $handbrake_video_encoder_opts >> $encodelog 2>&1" >> "$logfile"
+ $handbrake_cli -i "$vobfile" -o "$final_output_file" -Z "$hb_profile" $handbrake_cmd_line_opts $handbrake_audio_opts $handbrake_video_encoder_opts >> $encodelog 2>&1
+ handbrake_retval=$?
+ else
+ echo -e "\n Encoding: $handbrake_cli -i \"$vobfile\" -o \"$final_output_file\" $handbrake_cmd_line_opts $handbrake_audio_opts $handbrake_video_encoder_opts >> $encodelog 2>&1" >> "$logfile"
+ $handbrake_cli -i "$vobfile" -o "$final_output_file" $handbrake_cmd_line_opts $handbrake_audio_opts $handbrake_video_encoder_opts >> $encodelog 2>&1
+ handbrake_retval=$?
+ fi
+ if [ $handbrake_retval != 0 ]; then
+ fatal_and_exit "-E- Unhandled handbrake error"
+ fi
+
+
+ # SRC = ISO and FINAL = MP4
+ # Extract the chapters from the ISO/VOB so we can add them to the MP4 file.
+ # We can only do this if we have an ISO file and we made an MP4 file.
+ if [[ "$final_output_file" =~ "mp4" ]] && [[ -e "$isofile" ]]; then
+ chapter_tmpfile="$tmpdir/$dvdname.chapters"
+ $dvdxchap -t $feature_title "$isofile" > "$chapter_tmpfile"
+ $mp4box -chap "$chapter_tmpfile" "$final_output_file"
+
+ # We could also add subtitles, but we would need to follow this guide to do it:
+ # http://ubuntuforums.org/showthread.php?t=1253635
+ # http://en.gentoo-wiki.com/wiki/Ripping_DVD_to_Matroska_and_H.264
+
+ fi
+
+ # SRC = ISO and FINAL = MKV
+ if [[ "$final_output_file" =~ "mkv" ]] && [[ -e "$isofile" ]]; then
+ chapter_tmpfile="$tmpdir/$dvdname.chapters"
+ $dvdxchap -t $feature_title "$isofile" > "$chapter_tmpfile"
+ $mkvpropedit -c "$chapter_tmpfile" "$final_output_file"
+ fi
+
+ # SRC = MKV and FINAL = MP4
+ if [[ "$final_output_file" =~ "mp4" ]] && [[ "$vobfile" =~ "mkv" ]]; then
+ # Extract the chapters from the src and apply to the dst
+ chapter_tmpfile="$tmpdir/$dvdname.xml"
+ $mkvextract chapters "$vobfile" > "$chapter_tmpfile"
+ $mp4box -chap "$chapter_tmpfile" "$final_output_file"
+ fi
+
+ # SRC = MKV and FINAL = MKV
+ # If our original src file was an MKV, extract the chapters and subtitles from it
+ if [[ "$final_output_file" =~ "mkv" ]] && [[ "$vobfile" =~ "mkv" ]]; then
+ # Extract the chapters from the src and apply to the dst
+ chapter_tmpfile="$tmpdir/$dvdname.xml"
+ $mkvextract chapters "$vobfile" > "$chapter_tmpfile"
+ $mkvpropedit -c "$chapter_tmpfile" "$final_output_file"
+
+ # find out what our default_alang subtitle track is in the src
+ get_subtitle_track_from_mkv "$vobfile" "$handbrake_mp4"
+
+ # Extract the subtitles from the src and apply to the dst
+ srt_tmpfile="$tmpdir/$dvdname.srt"
+ sub_tmpfile="$tmpdir/$dvdname.sub"
+ idx_tmpfile="$tmpdir/$dvdname.idx"
+ $mkvextract tracks "$vobfile" $track:$srt_tmpfile
+ $mkvmerge -o "$final_output_file.subs" "$final_output_file" "$idx_tmpfile"
+ mv "$final_output_file.subs" "$final_output_file"
+
+ # Set the default subtitle track to "no subtitles" in the dst
+ $mkvpropedit "$final_output_file" --edit track:s1 --set flag-default=0
+ fi
+
+ # Remove intermediary file if we created one
+ if [ $keep_intermediate_files -eq 0 ]; then
+ [[ -e "$chapter_tmpfile" ]] && rm "$chapter_tmpfile"
+ [[ -e "$idx_tmpfile" ]] && rm "$idx_tmpfile"
+ [[ -e "$sub_tmpfile" ]] && rm "$sub_tmpfile"
+ else
+ [[ -e "$chapter_tmpfile" ]] && echo "-> Keeping intermediate chapter file: $chapter_tmpfile" | tee -a "$logfile"
+ [[ -e "$idx_tmpfile" ]] && echo "-> Keeping intermediate subtitle files: $idx_tmpfile $sub_tmpfile" | tee -a "$logfile"
+ fi
+
+ # Concatenate the encode log to our main log file, greping out unwanted lines
+ cat $encodelog | grep -v "Encoding:" | grep -v "hb_demux_ps" >> "$logfile"
+ cat $encodelog | grep "Encoding:" | sed 's/\r/\n/g' | grep "Encoding:" | grep "ETA" | head -1 >> "$logfile"
+ cat $encodelog | grep "Encoding:" | sed 's/\r/\n/g' | grep "Encoding:" | grep "ETA" | tail -1 >> "$logfile"
+}
+
+# encode the vob file into a compressed file format using mencoder
+function encode_vob_file_mencoder {
+
+ # Set a variable that we will use later to determine if we found a handler for $profile or not
+ typeset -i found_profile=0
+
+ # For a given profile, to override the 2 pass behavior to be single pass,
+ # simply set the PASSES variable below to "2" instead of "1 2" inside your profile handler.
+ # It indicates which PASS numbers to loop over. PASSES="2" means just do pass 2 => single pass mode.
+ PASSES="1 2"
+
+ # Declare our default 2 pass variables
+ passlogfile_opt="-passlogfile $passlogfile"
+ pass_opt="pass=%PASS"
+
+ # Check the global force_onepass_mode. If it is set, change our variables appropriately
+ # to force 1-pass encoding across all profiles.
+ if [ $force_onepass_mode -eq 1 ]; then
+ PASSES="2"
+ passlogfile_opt=""
+ pass_opt=""
+ fi
+
+ # XVID profile
+ if [[ "$profile" =~ "xvid" ]]; then
+ found_profile=1
+ final_output_file="$dest/$dvdname.avi"
+ mencoder_general_opts="$lang_opts $passlogfile_opt"
+ 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_opt"
+
+ # Very High Quality (16fps)
+ if [ "$profile" == "xvidvhq" ]; then
+ video_encoder_opts[0]="bitrate=$target_video_bitrate"