Encoding DVDs to High Quality Movie Files with XviD and AC3 (http://www.bobsomers.com/articles/dvd-xvid-ac3/1/) Table of Contents • • • • • • • Introduction And Quality Samples What You’re Going To Need Rip Your VOBs And Index Your Movie Set Up The Frameserver And Fix The Aspect Ratio Setting Up XviD’s First Pass Setting Up XviD’s Second Pass Change Log There were some errors in the original tutorial as well as some important steps I left out. These have since been fixed and updated in the full text of the article. For a list of what I changed, fixed, and added, please see the change log. The Problem I Was Trying To Solve I played with DivX for hours on end. I tinkered with FLAC audio. I got sick and tired of playing around with settings, encoding video for hours, only to achieve sub-par results. I wanted a way to copy a movie file off the disc and onto my hard drive in at decent enough quality to not need the disc while keeping the file size reasonable under control. Some will debate that I did not keep the file size under control but I think I did for a video file worthy of replacing the disc. Finally, I wanted to do it will all freely available tools and utilities, codecs and all. What’s The Skinny On Encoding Time, Quality, Etc. Total encoding time from start to finish with VirtualDubMod was 7 hours and 6 minutes for a 2 hour 10 minute movie, with roughly a 2 hour first pass and a 5 hour second pass. The system I encoded it on is running a Pentium 4 2.4C GHz processor with 512 MB of DDR 400 RAM. Your results may very based on your system specifications but it’s safe to expect roughtly 2.5x to 3.5x the length of your movie for encoding. Why so long? Because the quality’s dang good. Let it run overnight if the time is a problem for you. Here are a few frame captures from my test project. As you can see, XviD did a fantastic job with no visible artifacts and great color grading. Take special note of the fact that dark colors like blacks and smooth transitions of colors don’t look blocky and pixelated at all. The final file’s resolution is 720×306 (removed letterboxing and corrected aspect ratio to 2.35, will explain later) and looks excellent when maximized and playing full screen. I’ve tested full screen playback on both 1024×768 and 1280×800 resolutions and it looks very good. However, this amazing quality comes at a price, and that price is filesize. The 2 hour 10 minute movie clocks in at 1.79 GB as reported by Windows. This was quite a bit larger than my initial target of 1 GB, but after discovering the benefits of the higher quality I am OK with the extra size. Given the rapidly increasing size of hard drives these days anyway, getting a movie under 2 gigs isn’t too bad space-wise. Overall, the movie went from 4.89 GB in VOB files down to 1.79 GB in XviD, 36.6% of its original size while retaining virtually all of the quality of the original. What You’re Going To Need This tutorial assumes you have all of the following installed and in working order. Any questions about these projects should be forwarded to their respective authors or contributors, not me. If for some reason these links are broken, check for more updated versions of these programs at VideoHelp.com, which is one of the best resource sites I’ve ever found when it comes to computer video. Codecs • • XviD Codec Grab the latest XviD codec binary. AC3Filter This handles the playback of the AC3 audio that we’re going to mux into the final movie file. Utilities • • • • DVD Decrypter Rips the necessary VOB files off the DVD disc. Especially useful for encrypted discs and content. DGMPGDec DGIndex This tool will take the unencrypted VOB files and create an indexed D2V project file. It also outputs your AC3 audio stream in the process. VFAPI Reader This tool is used in conjuction with DGIndex to frameserve the MPEG content in your VOB files to VirtualDubMod for encoding. AC3 Delay Corrector and GfaWin32.ocx If your AC3 files end up with small delays this utility will fix the delays to maintain your audio/video sync. Make sure you also download GfaWin32.ocx and put it in the same directory as your AC3 Delay Corrector files or the program will crash. • VirtualDubMod You’ll need this app to do the actual encoding. We’ll also fix some aspect ratio and letterboxing issues and mux in the AC3 audio with this tool. Rip Your VOBs I’m not going to spend too much time discussing the whole process of using DVD Decrypter to rip off your VOB files because there are plenty of guides that cover the process just fine. Instead, here’s the quick instructions to get you moving along. Put the DVD in your drive and fire up DVD Decrypter. Make sure you’re operating in IFO mode, not File mode. You can change this by going to the Mode menu and choosing IFO. Next go to the Edit menu and click Select Main Movie PGC. This will select the longest program chain on the DVD, which is presumably the movie itself. If the duration looks right on the Input tab than it’s probably the right program chain. Make sure that all of your chapters are selected and that you set the output directory and click the big decrypt button. This process could take anywhere from a few minutes to up to an hour depending on the size of the files and the speed of your computer and DVD drive. Once finished, however, you’ll have a set of numbered VOBs on your hard drive that are ready to be indexed. Index Your Movie And Grab Your AC3 Audio Load up DGIndex, which is going to do double duty and index our VOB files for frameserving as well as output our AC3 audio file for muxing back in later. Go to Open under the File menu and select all your VOBs and click Open. You should then be bombarded with a file listing of all the VOBs you just selected. Make sure they’re all there and that they are in numerical order. Once correct, click OK. Now select Preview from the File menu. The movie should start playing and DGIndex will open up a status window displaying the information it’s collecting. Let the preview run for about 5 minutes to ensure that it gathers enough information. In the screens above you can see both the preview video and the statistics window. As is quite apparent in the preview video, there is a huge aspect ratio problem in the source video. Why is it stretched like that? DGIndex is interpreting it as 16:9 widescreen, when in reality most movies are shot in a wider aspect ratio such as 2.35:1 or 1.85:1. This isn’t a problem, in fact we’ll capitalize on this later when we set up VirtualDubMod to encode. Now take a look at the statistics window. As you can see, the movie was interpreted as 16:9. Again, that’s OK, we’ll fix it later. More importantly, look at what’s displayed in the Video Type box. It it says Film, you’ll need to perform an additional step before we output the indexed D2V file. If you’re encoding a movie that was released in theaters, chances are it will be film. Close the statistics window. Let’s set up DGIndex to demux our AC3 audio for us. Go to the Audio menu, choose Output Method, and select Demux Tracks. When we save our project, the AC3 audio track selected in the Audio > Track Number menu will be dumped to an AC3 file for us. In most cases, the standard English audio track is track number 1, but if you want something else make sure to verify which track number it is and select the appropriate one. You could also select Demux All Tracks from the Output Method menu and listen to them later to find the right one. Now if the statistics window reported that your video type was Film, go to the Video menu, choose Field Operation, and select Forced Film. This will force our output to be at 23.976 frames per second, which is the correct framerate for movies. Fixing aspect ratios isn’t that big of a deal, but screwing up framerates can be a royal pain, especially if you ever have any hope of getting your audio and video synchronized. However, the movie I encoded has perfect audio/video sync and that’s what we’re going for. Finally, select File > Save Project to save your D2V file. I like to name it something informative, like “NameOfMovie.d2v” but it’s completely up to you. Your AC3 file (or files, if you selected Demux All Tracks) will also be dumped in this directory. Once it’s finished indexing, which should only take a few minutes, shut down DGIndex. Fixing Delays In Your AC3 Audio Check out the filename of the AC3 file that DGIndex dumped out for you. If it states a delay (anything other than “DELAY 0ms”) we need to fix this delay to maintain the audio/video sync of our final movie file. Thanks to AC3 Delay Corrector, this is a fairly simple processes. Load up AC3 Delay Corrector. If the program crashes right away, you need to get a hold of the GfaWin32.ocx file and put it in the same directory as your AC3 Delay Corrector files. The link to download GfaWin32.ocx can be found on the “What You’re Going To Need” page. Next to the Source File box click the button with three dots. Locate your desired AC3 file and open it. AC3 Delay Corrector is smart and automatically interprets the delay in the filename and sets all the options for you. All that’s left to do is click the Write button. When it’s finished writing it will haved dumped a delay corrected AC3 file in the same directory with “_fix” appended to the filename. Close AC3 Delay Corrector and use the new AC3 file from here on out. Building The Frameserver with VFAPI Reader Congratulations, this is the easiest part of this entire tutorial! Fire up VFAPI Reader. Click the Add File button and select your D2V project. Another screen will pop up asking you where you would like to save the AVI file. Pick a location and a name, leave the other options alone, and click OK. Now just click the Convert button. We’ve now got an AVI file that will frameserve the MPEG data from the VOB files ready for encoding and an AC3 audio track ready for muxing. Close VFAPI Reader and move on to VirtualDubMod. Removing Letterboxing And Fixing The Aspect Ratio Go to the File menu, choose Open Video File, and select the AVI file that VFAPI Reader just created. You should be able to scrub through the video by dragging the slider at the bottom of the window. What is letterboxing? If you’ve ever watched a widescreen movie you’ve seen it. Basically, it’s the use of those black bars above and below the image to show the movie correctly. Why don’t we want the movie to retain it’s letterboxing when we encode it? Well, there’s really no reason to keep it. Media players on computers can handle video files of any resolution, so why not make our movie a size that exactly fits the video data? Not only that, but if you include the black bars in the video file they’re going to be wasting some our precious bitrate to store their information. Instead, we can chop off those black bars and use all of our bitrate on the video, which is the important part anyway. Another added benefit is that when you play it back in a media player you get the darkest black your monitor can display on either side of the video, not the washed out “bright” black of a compressed video file. To set up this cropping go to the Video menu in VirtualDubMod and select Filters. VirtualDubMod has a list of built in filters you can use to modify the output it produces. You can see the cropping button in the bottom right hand corner, but it’s not enabled yet. Click the Add button, choose the Null Transform filter, and click OK to return to the filters window. Now click the cropping button to adjust our cropping settings. Scrub to a frame of your movie where the edges of the video are pretty well defined. Drag the tops and bottoms of the image down until they get pretty close to the edge of the image and then use the up and down arrows in the Y1 Offset and Y2 Offset boxes for pixel-perfect control. Make sure that both the Y1 Offset and Y2 Offset values are even numbers. You may need to cheat the actual boundry a little bit to do this but it’s better to cut off a line of image than it is to leave a line of black bar. Finally click OK. You won’t see the cropping in the list of filters, but it’s important to note that the cropping will take place before any other filters we use. Next we need to apply a resize filter to fix that pesky aspect ratio problem. Click the Add button in the filters window again and add a resize filter. When you click OK you’ll be presented with an options dialog that let’s you set the new video size. Now here’s where a little bit of math comes into play. To keep the highest resolution possible, we want to retain our 720 pixel width. We just want to “squash” the video into the correct aspect ratio. What you need to do is divide 720 by the desired aspect ratio to get the correct height for our new video. You’ll need to look on the back of the DVD box to find what aspect ratio it was shot in. Some common ratios include 2.35:1, 1.85:1, 16:9, and 4:3. To simplify the math, here’s a basic table that provides the width and height values for different aspect ratios. Common Aspect Ratio Real Aspect Ratio Video Frame Size 2.35 2.35:1 720×306 1.85 1.85:1 720×390 16:9 1.78:1 720×404 4:3 1.33:1 640×480 Please note that with the 4:3 aspect ratio we can acheive the greatest quality by changing our width, not the height. Type in your new width and height values in their respective boxes on the resize filter options screen. Under filter mode I prefer Lanczos3 for the highest quality but feel free to choose something else if you like. Do not check the Interlaced checkbox and especially do not check the Expand Frame And Letterbox Image checkbox, because that would undo all the work we’re doing right now. Finally, click the Show Preview button. Scrub through your video and make sure that it looks right and that you chopped off all the necessary black bars earlier. This is what our output video file will look like. If it looks good to you, close the preview window and click OK on the resize options screen to return to the filter list. Click OK to close the filter list. Setting Up XviD’s First Pass Here comes the complicated parts. We need to set up VirtualDubMod to run two projects in batch processing mode. The first project it runs will the be the first pass by the XviD encoder, which won’t actually output anything. Instead it will collect information about each frame to give you higher quality results when it actually encodes on the second pass. Go to the Video menu and make sure that Full Processing Mode is selected. Next, go to the Video menu and select Compression. This will bring us to the the screen that allows us to configure our encoder options. Select the XviD MPEG-4 Codec from the list on the left and click the Configure button. Now we need to configure the encoder for it’s first pass. Use the following settings. Setting Value Profile @ Level AS @ L5 Encoding Type Twopass - 1st Pass If there are any zones defined in the Zones box, select and apply the following settings to each one. Setting Value Start Frame # 0 Rate Control Weight 0.00 Begin With Keyframe Checked Greyscale Encoding Unchecked (unless your video isn’t in color) Chroma Optimizer Enabled Checked BVOP Sensitivity 0 Now click on the Advanced Options button. Use the following settings on the Motion tab. Setting Value Motion Search Precision 6 - Ultra High (reduce for smaller files) VHQ Mode 4 - Wide Search (reduce for smaller files) Use Chroma Motion Checked Turbo Unchecked Frame Drop Ratio 0 Maximum I-Frame Interval 240 if you needed to select Forced Film in DGIndex, otherwise set to 300 Cartoon Mode Unchecked (unless you’re encoding something like anime) Use the following settings on the quantization tab. Setting Value Min I-Frame Quantizer 1 Max I-Frame Quantizer 31 Min P-Frame Quantizer 1 Max P-Frame Quantizer 31 Min B-Frame Quantizer 1 Max B-Frame Quantizer 31 Trellis Quantization Unchecked Finally, on the Debug tab use the following settings. Setting Value Automatically Detect Optimizations Selected FourCC Used XVID OutputDebugString Debug Level 0×0 Print Debug Info On Each Frame Unchecked Display Encoding Status Unchecked Now click OK to close the advanced options window and click OK to close the XviD configuration window. Lastly, click OK to close the video compression window. Go to the File menu and choose Save As. Make sure the file type is Audio-Video Interleave (*.avi) and give it a file name. Most importantly, check the box that says “Don’t run this job now; add it to job control so I can run it in batch mode.” Click the Save button. That’s it for the first pass. Setting Up XviD’s Second Pass Don’t close VirtualDubMod or reopen the file or anything. Just go back to the Video menu and select Compression again. Click Configure to open the encoder options window. I’m only going to give you the settings you need to change. Leave everything else the way it was before. Setting Value Encoding Type Twopass - 2nd Pass For high quality video like the one in the screenshots, toggle the Target Bitrate/Target Size button to Target Bitrate. Type 1500 in the box to its right. That’ll give the video a bitrate of 1500 kbps which produces excellent quality video. If you want to aim for a particular file size toggle the button to Target Size and click the Calc button to open the bitrate calculator. Type in your target size (in kilobytes) and leave the subtitles box at 0. Make sure the Container Format is set to AVI-OpenDML. Type in your movie’s duration. If you checked Forced Film in DGIndex select 23.976 (FILM), if not select 29.97 (NTSC). Select AC3 as your audio format and choose the average bitrate of your AC3 audio file. This can be found by looking in the file name of the AC3 file we outputted earlier using DGIndex. Finally, click OK to close the bitrate calculator. Remember, only perform these steps if you’re aiming for a particular file size. Click OK to close the XviD options window and click OK to close the video compression window. Now we’ve got to add our AC3 audio to be muxed in on the second pass. Go to the Steams menu and select Stream List. Click the Add button and select your AC3 audio file from earlier. After a short pause as VirtualDubMod parses the AC3 audio, it should show up in the stream list. Click OK to close the stream list box. Go back to the File menu and select Save As. Type in the same name you did before (taking care to select the AVI file type) and again check the “Don’t run this job now” box. Click Save to close the window. Now open the job control box by going to the File menu and selecting Job Control. Both the first pass job from earlier and the second pass job we just configured should be listed. Your box will differ from the screenshot below because I’ve already finished encoding. Just click the Start button and VirtualDubMod will start the long and arduous process of encoding your movie. This would be a good time to go and do something else for… quite a while. Once the project starts running you can open a status window from the main VirtualDubMod window that will display its progress and let you play with the priority settings. After it’s done you will have your beautiful new high-quality XviD movie file with AC3 audio. Good luck! After originally writing the article I realized there were a couple of errors with it. Thus, I’ve added this change log to document whenever I fix or update something in the article. September 20, 2005 • • XviD will not encode videos with an odd-numbered height. For example, when encoding a 1.85 aspect ratio movie at the previously stated size of 720×389 it will crash out with an error message. All XviD files must have an even height. The correct frame dimensions have been updated. Added AC3 Delay Corrector (and its associated GfaWin32.ocx) to the required tools list with download links. • Added instructions on using AC3 Delay Corrector to fix delays in the AC3 audio stream dumped out by DGIndex. These new instructions can be found on the same page as indexing your movie with DGIndex.