At a time when graphical DVD rippers and encoders propose to make the backing up of your movies just a click away, a text-based application may actually be the best tool for the job.
I've tried graphical rippers such as AcidRip, dvd::rip, thoggen, and RippedWire, with varying degrees of success. However, I've also had my share of headaches. Most times, any crashes or problems I experienced were related to the graphical components of the application or the desktop. It's not pleasant (to say the least) to leave your computer eating electricity all night, only to find in the morning that the ripping and encoding of a DVD failed because of an error purely related to GTK+ or Qt. It's even more frustrating when you realize that most of these applications are front ends to command-line programs. For instance, AcidRip is a wrapper for MEncoder (not that MEncoder doesn't need a front end), and RippedWire sits on top of HandBrakeCLI. Once you click the Go button, the application basically becomes a giant progress bar, hogging your desktop and system resources.
After having trouble running a GUI-based ripper/encoder on my fresh install of Arch Linux, I stumbled upon undvd. Its only core dependencies are lsdvd and MEncoder, so I decided to give version 0.3.1 a try.
Being a command-line application, undvd installed in the blink of an eye. Running
scandvd.sh with a DVD loaded in the drive provides you with a simple screen that shows you the titles available on the disc, and basic instructions on how to watch them using MPlayer, or rip them. After that,
scandvd.sh will exit. After deciding upon the title to rip, run
undvd.sh, specifying a few, simple parameters. For instance, to rip and encode the first title of a DVD, together with an English audio and subtitle track, you can run
undvd.sh -t 01 -a eng -s eng.
A more complex example rips the second track of a DVD (with a French audio track, without subtitles), forcing one-pass encoding. It assumes the DVD is encrypted (and requires libdvdcss to read) and rips straight from the optical disc, using a picture-smoothing filter and Xvid compression:
The result (in both cases) is an AVI file of surprisingly good quality. Other options include forcing two-pass encoding, selecting a target size for the AVI file, and video scaling.
undvd rips and encodes the titles to the folder from where you called the application, so beware of disk space issues. The default is for undvd to dump the entire DVD to disk, after which you can remove it from the drive. undvd then rips and encodes from the ISO image on disk. This protects the DVD from overuse and eliminates failed operations due to read errors. However, you can also rip directly from the DVD or from a folder.
I'm usually a nitpicker when it comes to lack of options, but my first encounter with undvd managed to make me a believer. The interface is simple but effective, and pressing the Enter key a couple of times -- or writing a short string of arguments -- is more practical in my book than navigating through tabs and checkboxes.
h264enc and xvidenc
Shortly after discovering undvd, I came upon h264enc and its siblings, xvidenc and divxenc. The author describes h264enc as an interactive script and defends the advantages of a bash script over a GUI application in his informative FAQ. h264enc does basically the same job as undvd (it also uses MEncoder), but it allows for more fine-tuning of the encoding options. The beauty of h264enc is that you can make the ripping/encoding process as simple or as complicated as you want. You can pass through as few menus as possible, or you can take your time tweaking the options. Forty-one quality presets, including presets for portable devices like Apple's iPod, make your life easier.
The man page shows you everything you need to get started. Running
h264enc -scan scans the DVD for information on chapters, audio, and more, and presents it to you. After that, you can run h264enc with the necessary parameters to your liking. For instance, to rip the second track of your DVD again, type
h264enc -2p -p hq. This makes a two-pass encoding with the High Quality preset. h264enc then shows a series of interactive menus where you can choose your DVD drive, the video track to rip, the audio track, chapters, angles, and so on. You can also choose postprocessing filters (such as deinterlacing, noise removal, and image sharpening) and define the video bitrate, target size, audio codec, and more. If you're in a hurry or confused, simply choose the defaults. h264enc encodes the files to the H.264/MPEG-4 Part 10 standard, using the AVI container by default. You can choose other containers, such as Matroska Multimedia Container (MKV), Ogg Media (OGM), and MPEG-4 Part 14 (MP4). You can also store your settings for a particular job in a file, thus creating your own presets. Storing different settings for different jobs allows you to create batch jobs, which is a great feature to have at hand.
The quality of the final product varies according to the quality of the original video and the settings you choose. After some experimentation and following the advice of the FAQ, I achieved excellent results. Using three-pass encoding with a Very High Quality preset and a target size of 1400MB, for example, gave me a video file practically indistinguishable from the original DVD in terms of picture quality.
I use undvd for most tasks, and h264enc when I need more control over the output (for extreme high-quality rips, or movies with low image quality). Still in the realm of text-based applications, you also might want to consider RipDVD and HandBrakeCLI as sound alternatives. HandBrakeCLI in particular supports multiple CPU cores -- something most other rippers and encoders don't do. Although HandBrake isn't as easy to use as h264enc or undvd, a recent article may help with that. dvd::rip also supports multiple CPU cores, as well as the ability to set up a cluster to increase processing power.
These applications show that a command-line based workflow, in the context of common desktop tasks, still has its place, especially when you want power and simplicity.