Extract DVD
This describes how to convert a DVD to mkv using:
- x264 for video
- ac3 for audio
- any subtitles
Contents
Installation
Install the packages
apt-get install mencoder mplayer gpac mkvtoolnix lsdvd
For using encrypted DVDs build and install libdvdcss from http://download.videolan.org/pub/libdvdcss/last
./configure --prefix=/usr make make install
Prepare
Use lsdvd to see what's on DVD. Determine the stream you would like to extract as well as the aid for audio and the sid for subtitles.
lsdvd -x /dev/dvd
Write the stream to the harddrive so the next steps will go faster.
mplayer dvdnav://<stream> -dumpstream -dumpfile <title>.vob
As I find it acceptable to have my DVDs compressed to 25% of its size I use the follow calculations to get the bitrate for video and audio.
length=`lsdvd -t 1 -Ox 2>/dev/null | grep length | sed 's/^[^>]*>//' | sed 's/\..*//'`;vobsize=`find avatar.vob -printf '%s\n'`; echo $(($vobsize*8/$length/20))
Video
Detect the amount to crop. Keep it running till it is stable for a while
mplayer <title>.vob -vf cropdetect
Use either OGG Video or x264
OGG Video
Convert the video stream to ogv
ffmpeg2theora --noaudio --nosubtitles --deinterlace -v 6 --optimize --speedlevel 0 --croptop <top> --cropbottom <bottom> --cropright <right> --cropleft <left> -K 250
x264
Run the first pass on the video
mencoder <title>.vob -vf crop=<cropvalues> -oac copy -ovc x264 -x264encopts pass=1:bitrate=800 -nosub -of rawvideo -o <title>.264
Run the second pass on the video
mencoder <title>.vob -vf crop=<cropvalues> -oac copy -ovc x264 -x264encopts pass=2:bitrate=800 -nosub -of rawvideo -o <title>.264
Put the video in a MP4 container
MP4Box -add <title>.264 <title>.mp4
Audio
AC3
Now extract audio from the stream. Just use AC3.
mplayer <title>.vob -aid <aid> -dumpaudio -dumpfile <title>.ac3
Optionally compress the AC3 stream
OGG
Convert the ac3 file to 6 channel wave
mplayer <title>.ac3 -af resample=44100,channels=6:6:0:0:1:4:2:5:3:2:4:1:5:3 -channels 6 -ao pcm:nowaveheader:file=<title>.wav6
Convert the 6 channel wave to a 6 channel ogg
oggenc -r -B 16 -C 6 -R 44100 <title>.wav6
Subtitles
Extract the subtitles from the stream.
mencoder <title>.vob -oac copy -nosound -ovc frameno -o /dev/null -sid <sid> -vobsubout <title> -vobsuboutindex <index> -vobsuboutid <langcode>
Merging
Combine everything in a mkv container
mkvmerge -o <title>.mkv <title>.ogg <title>.idx <title>.mp4