Creating a "Wizard People, Dear Reader" DVD on Linux

I first became aware of Wizard People, Dear Reader via a post on the venerable Table of Malcontents blog (R.I.P., long live Ectoplasmosis!). Here are the clips that they embedded in the post:

I'll wait here until you've taken a peek and become fanatical about it.

Go ahead, take your time.

Now, if you're like me, one of your first thoughts was, "How can I go about making a DVD of the first Harry Potter movie, with the WPDR audio as an alternate audio track?" You're probably not like me, but I'm going to tell you how to do so anyway.

I should note a few things.

Downloads

A Note: There are two versions of the data files available here. One is for dvdauthor versions up through (and including) 0.6.14. The other is for versions after 0.6.14 (which include 0.6.18, and the newer 0.7.0 branch). After 0.6.14, ownership of the dvdauthor utility changed hands, and the format it used for the menu files changed somewhat. If you've downloaded the wrong one and don't want to redownload the whole thing, you can actually just regenerate the menu files using the mkmenus.sh script in there. The 0.6.14-and-before tarball was also updated on Jan 4, 2011 with a minor tweak to the wizard_people.xml file to make it work on both new and old versions of dvdauthor.
(Updated Jan 4, 2011)
For new dvdauthor versions (after 0.6.14): wizard_people.tbz2
For dvdauthor versions through 0.6.14: wizard_people_dvdauthor_0.6.14.tbz2
Once you have those and follow these instructions, you should have a DVD with the following menus (the logo changes depending on which audio you've selected, and the DVD defaults to using the WPDR audio):

Main Menu Scene Selections Main Menu (original audio)

Requirements

Data Requirements

Software Requirements

Additional Requirements

Additionally, if you're not happy with my DVD menus, or you just want to muck around with the actual DVD creation, you'll need to have a few more utilities to play around with all that (though most of them come with mjpegtools and dvdauthor, so you probably already have those from the first batch of programs). Here's what I used, though there's many ways of doing it:

The Procedure

  1. Preparation

    First off, you'll want to go grab the mp3 files from the actual Wizard People, Dear Reader homepage. Links to the files themselves (via archive.org):

    Just so that we're starting off on the right foot, here's how those files look to me. If you've got different filesizes or md5sums, etc, you'll want to make extra-sure that what I'm telling you will do the trick.

    file            size            md5sum
    wiz1.mp3        36583866        706c5a977e6be66d791c58f76f85f0c7
    wiz2.mp3        35453311        00d8ddb45bf1325315c6a8e943d22021
    The first number of steps are all audio processing tasks, so you can probably substitue your tools of choice for many of them.

  2. Convert the mp3s to wavs

    lame --decode wiz1.mp3 wiz1.wav
    lame --decode wiz2.mp3 wiz2.wav
  3. Bump up the volume on the first half

    I've found that a 2.5dB increase in volume is about right.

    normalize -g 2.5 wiz1.wav
  4. Combine the two files

    You can use just about anything for this. From a high-level perspective, you want to first pad the end of wiz1.wav until it's at 01:13:48.890 (small variations don't matter), and concatenate wiz2.wav at the end. Then fill the end of the file with silence until 02:32:21.376. The padding at the end doesn't actually seem to be, strictly speaking, necessary. In the end, your file should be 806,269,488 bytes (small variations in size really won't matter). Name this file wiz.wav, and you can then delete the intermediate files if you want.

    A couple of sox commands to do this for you, using an intermediate file:

    sox wiz1.wav wiztmp.wav pad 0 3.615
    sox wiztmp.wav wiz2.wav wiz.wav pad 0 417.405
    rm wiztmp.wav
    ... or all at once, without an intermediate file:
    sox wiz1.wav -t wav -  pad 0 3.615 | sox -t wav - wiz2.wav wiz.wav pad 0 417.405

  5. Resample to 48 kHz

    I used sox for this... There's a number of different resampling options, check sox's manpage for details (this page, linked from the manpage, has a bunch of detail on what the various modes mean). Personally I just used "polyphase" since that seemed to give the "best" quality, and I didn't care how long it took:

    sox wiz.wav -r 48000 wiz48k.wav polyphase
  6. Convert wiz48k.wav to AC3 Audio

    transcode -i wiz48k.wav -y null,raw -N 0x2000 -E 48000,16,2 -b 384 -m sound-wpdr.ac3
    My sound-wpdr.ac3 file was 438,784,512 bytes when it was done.

  7. Rip the video and audio streams from the DVD

    mplayer dvd://1 -dumpvideo -dumpfile video.m2v
    mplayer dvd://1 -dumpaudio -dumpfile sound-orig.ac3 -aid 128
    The "-aid 128" option will ensure that it's the english audio track you're grabbing. mplayer should output a list of available audio tracks as it starts up - feel free to pick and choose if you want, obviously, though my dvdauthor XML files assume that you've only kept the one english audio track. On my system, video.m2v is 6,157,880,136 bytes, and sound-orig.ac3 is 511,917,056 bytes.

    At this point, you should be able to get the following with the file command:

    sound-orig.ac3: ATSC A/52 aka AC-3 aka Dolby Digital stream, 48 kHz,, complete main (CM) 3 front/2 rear, LFE on,, 448 kbit/s reserved Dolby Surround mode
    sound-wpdr.ac3: ATSC A/52 aka AC-3 aka Dolby Digital stream, 48 kHz,, complete main (CM) 2 front/0 rear, LFE on,, 384 kbit/s reserved Dolby Surround mode
    video.m2v:      MPEG sequence, v2, MP@ML interlaced Y'CbCr 4:2:0 video, CCIR/ITU NTSC 525, 16:9, 29.97 fps
    Note that at this point, those are the only three files you need to keep around. Especially if you're low on disk space, all the .wav files that we had been working with can be deleted.

  8. Multiplex the video and sound streams

    mplex -f8 -o wizard_people.vob video.m2v sound-wpdr.ac3 sound-orig.ac3
    The end file, wizard_people.vob, came out to 7,249,860,608 bytes on my system.

  9. Create the DVD image

    Here's where my dvdauthor files come into play. Unpack the tarball and you'll see it creates a wizard_people directory. Move wizard_people.vob inside it. Inside wizard_people, you should see a whole bunch of menu_* files and another wizard_people directory. (If the wizard_people directory doesn't exist, create it). Then run:

    dvdauthor -x wizard_people.xml
    Once that's done processing, you should have an empty AUDIO_TS and a full-of-data VIDEO_TS inside the wizard_people directory. That's the DVD image! It would be a good idea to test it out before burning:
    xine dvd:///path/to/wizard_people/wizard_people/VIDEO_TS/
  10. Burn the image

    growisofs -speed=2 -dvd-compat -Z /dev/dvd -dvd-video -f -V HP_WPDR wizard_people
... and that's it! You're done. Note that this image will only fit on a dual-layer disc. If you've only got a single-layer burner, you'll have to figure out how to shrink it on your own; I'm afraid I can't help there.

Editing the DVD

You may think that my menus suck, or you want them to work differently, or perhaps you just wanted to poke around to see what everything in my tbz2 does. Briefly, here's what all the files are (and links to some of the text-based files, as well):

Files created by me

wizard_people.xml
This is the main dvdauthor XML file, containing all the code which runs the menus, etc. I imagine this may be useful to anyone who's not sure how to go about making a DVD with multiple audio tracks and scene selections, etc.
menus.xcf
This is a Gimp file which is used to generate all the menu graphics.
menu_*_background.pcx
These are the base menu graphics. It's just a static image.
menu_*_buttons.png
These define the buttons for the menus. As far as I can tell, it needs to be a transparent image with only two actual colors, which gets used as an overlay when a user's browsing the DVD.
menu_*_spumux.xml (example)
spumux needs these XML files to know how to stitch together the menus properly. These are all quite similar. I used to use spumux's autooutline="infer" method for defining buttons, but it turns out that doing so is far more restrictive than just defining the button geometry in the XML file.
mkmenus.sh
This is just a little shell script which loops through all the menus that I need to create and runs the necessary commands to get them ready for dvdauthor.

Files created by mkmenus.sh

menu_silence.ac3
Two seconds of silence.
menu_*_background.m2v
These are two-second video clips without sound, where each frame is just the corresponding menu_*_background.pcx
menu_*.mpg
These are just menu_*_background.m2v which have had the silent audio track multiplexed in.
menu_*_final.mpg
These are the files which are ready for dvdauthor to use. They've taken menu_*.mpg and run it through spumux using the XML files, which in turn read in the menu_*_buttons.png files to know where to put the buttons.

Other Information

Conclusion

Not much else to say, really. Feel free to let me know if you've got any questions or suggestions, etc.