====== 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 [[wp>Matroska|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 [[wp>Openmosix|openMosix]] cluster.