I'm actually ripping “Dr. House” … I'll just put here my two scripts for that :
Extract to AVI, without any change :
#!/bin/bash #param 1 First chapter #param 2 Last chapter #param 3 Episode start number #param 4 Path #param 5 Sound language COUNTER=$3 for i in `seq $1 $2`; do CMD="mencoder dvd://$i -oac copy -ovc copy -o $4/$COUNTER.avi -alang $5" echo "Extract chapter $i, episode $COUNTER, to $4 :" $CMD let COUNTER=COUNTER+1 done echo -en '\a'
Convert to video to MPEG4 Xvid and audio to OGG. All in a matroska container :
#!/bin/bash # WAV temp file WAV=`mktemp /tmp/e_wav.XXXXXXXXXXXXXX` # OGG temp file OGG=`mktemp /tmp/e_ogg.XXXXXXXXXXXXXX` # MATROSKA temp file (added 'mkv' extension, hint to remove) MKV=`mktemp /tmp/e_mkv.XXXXXXXXXXXXXX` SOUND_QUALITY=6 VIDEO_BITRATE=1500 VIDEO_SCALE='1024:576' # Should be command line options ... FILE='20.avi' OUTPUT='20.mkv' audio_process() { echo "+ Convert to OGG" # Convert to OGG with good quality oggenc -q $3 $1 -o $2 &> /dev/null # Normalize OGG file TODO Find howto normalize ogg file #normalize-audio $OGG } video_process() { echo "++ Video first pass" # PASSLOG temp file PASSLOG=`mktemp /tmp/e_log.XXXXXXXXXXXXXX` # XVID MPEG4 first pass encoding (no sound, bitrate 1500) mencoder $1 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=$3 -vop scale=$4 -mf fps=25 -ffourcc XVID -o /dev/null -nosound -passlogfile $PASSLOG &> /dev/null echo "++ Video second pass" # XVID MPEG4 second pass encoding (no sound, bitrate 1500) mencoder $1 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=$3 -vop scale=$4 -mf fps=25 -ffourcc XVID -o $2 -nosound -passlogfile $PASSLOG &> /dev/null # Remove two-pass encoding log file rm $PASSLOG &> /dev/null } # # Parallalize audio and video process # echo "+++ AUDIO" ### AUDIO # Extract AUDIO first echo "++ Extract audio" mplayer $FILE -vc null -vo null -hardframedrop -ao pcm:fast:file=$WAV &> /dev/null audio_process $WAV $OGG $SOUND_QUALITY & AUDIO_PROCESS_PID=$! echo "+++ VIDEO" ### VIDEO video_process $FILE $OUTPUT $VIDEO_BITRATE $VIDEO_SCALE & VIDEO_PROCESS_PID=$! ### WAITING BEFORE MERGING wait $AUDIO_PROCESS_PID &> /dev/null wait $VIDEO_PROCESS_PID &> /dev/null ### MERGING # OGM Merge ... # ogmmerge -o "French.ogm" -c LANGUAGE="French" $TEMP1 -c "TITLE=French" -A $OUTPUT echo "+++ Merge files" # Mux OGG sound file and Matroska video file mkvmerge -o $OUTPUT $OGG $MKV &> /dev/null echo "+++ Clean" ### CLEANING # Remove temp WAV file rm $WAV &> /dev/null # Remove Matroska temp file and OGG temp file rm $MKV &> /dev/null rm $OGG &> /dev/null
The first script works as I could extract the first season with it. The second one should work, but I did not have the time to test it since it's last modification (10 minutes ago (at the time of writing)).
Later, I will merge both script and try to parallelize them as much as I can, I plan to run it on an openMosix cluster.