DVD Rip

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.