Re-RIP a DVD to extract AVI, MP3 and SRT files
I have been reading many articles for many days, and finally I found a very useful question in superuser (What tool can I use to to rip DVD movies?)
I have a large original DVD's collection and they are now in ISO files (I want them for my own, just to learn languages), made with DVDShrink. I want to know what is the best way to get each movie in one folder containing:
- The Video in AVI format (or MPEG-4) (original video, don't mind angles) (NO audio)
- All Audio files in Mp3 format (Separate from video)
- All Subtitles in SRT format
So I can open the video with the language I want and the subtitle I want (No menus)
I think this is going to require less size than a 8Gb full copy (with same quality) Isn't it?.
Note: Better if I can do it in a Linux system, but don't mind it using a virtual windows for it =]
Thanks.
Solution 1:
Ripping the DVD to an MKV file
I suggest you use Handbrake (free, cross platform, open source) to rip the DVDs to an MKV file which contains everything.
Handbrake will already:
- Create an MKV file if you select MKV from Format under Output Settings
- Create an H.264-encoded video track of the titles you select from the DVD
- Create AAC-encoded audio tracks for all languages you select in the Audio tab
- Create soft-coded subtitles for all tracks you select in the Subtitles tab
Make sure you select Constant Quality for the video, and choose something between 18 and 28 for the quality. Lower means better, but you'll have to experiment on what looks good to you.
After you're done ripping, you can export the various tracks from the MKV file with FFmpeg. You can get a recent version by downloading a static build from the homepage. The static builds are always up-to-date, and if you're on Ubuntu, resist the temptation to use the one that comes with apt-get
: It's terribly outdated.
How the extraction works depends on how many audio and subtitle tracks your file has. To get this information later on, you can call ffmpeg -i input.mkv
and look at the output.
Here it says:
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, …
That's the video. Look further for audio—here are two audio tracks, one English, one German:
Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, …
Stream #0:2(ger): Audio: aac (mp4a / 0x6134706D), 48000 Hz, …
Finally, you might see subtitles. Here, they're german:
Stream #0:3(ger): Subtitle: text (default)
Now, let's extract them…
Extract video only
First, we'll create an empty video with no audio or subtitles. Here, -an
disables the audio, and -sn
disables subtitles. Or leave out -sn
to keep the subtitles in.
ffmpeg -i input.mkv -c copy -an -sn output.mkv
Your output file will only contain video. You could also change the container here, if you want:
ffmpeg -i input.mkv -c copy -an -sn output.mp4
Extract audio only
This depends on how many audio tracks there are. To create separate audio files, we can do the following, assuming there are two audio tracks. Again, we'll disable video and subtitle output.
ffmpeg -i input.mkv \
-c:a:0 copy -vn -sn output-0.m4a
-c:a:1 copy -vn -sn output-1.m4a
As you can see, the index 0
and 1
specify the first and second audio tracks. If you have more, modify the command as needed and add another line.
Extract subtitles only
To get the subtitles, we'll follow a similar approach—assuming there is one subtitle track:
ffmpeg -i input.mkv -vn -an -c copy output.srt
Or, if there are multiple subtitle tracks:
ffmpeg -i input.mkv \
-c:s:0 copy -vn -an output-0.srt
-c:s:1 copy -vn -an output-1.srt
Solution 2:
You can try MakeMKV. It can generate an mkv file with all video, audio and subtitles inside it and it works in Linux. I know you want to have the video, audio and subtitles in separate files, but if you are going to play them in any media player, you can achieve the same if they're inside an mkv file.
The program itself doesn't touch the audio, so it will be the same quality as the iso.