I've been burning DVDs with the aid of genisoimage and wodim. This usually looks like the following:
genisoimage -J -r . > ~/tmp/dvd.iso
wodim -v dev=/dev/dvdrw1 ~/tmp/dvd.iso
Today, I went to burn my first dual-layer disc, and found that wodim wasn't up to the task. I'm not sure why, but in my googling I found someone mention that wodim was having a problem burning dual-layer, gave an error message that looked a lot like mine, and said that growisofs was able to do the task just fine.
So I gave it a test. growisofs apparently combines both the mkisofs/genisoimage and the burning task in one. It looks like this:
growisofs -dvd-compat -Z /dev/dvdrw1 -dvd-video ./
This one was a DVD-Video disc, hence the -dvd-compat and -dvd-video options. Sure enough, it burned just fine. So, someday when you try to burn a dual-layer disc, if wodim chokes on you, try growisofs.
Scenario: you have a bunch of avi files (or whatever) that you want to make into a DVD. They may be episodes of your favorite comedy that you recorded with MythTV and want to keep around but not on your hard disk. They may be home videos. Whatever.
There are commercial programs to do this, and they are either expensive or inflexible and for any of a million reasons they don't meet your need. What do you do? There's a lot of good information about the details out there, with the exception of how to transcode your video, so I will give the overview, some links, and details on how to transcode.
First, what a DVD is. It's an ISO9660 filesystem following a certain convention. That convention is that stuff has certain names in a certain filesystem layout, and that stuff is encoded in certain ways. But it's just a regular filesystem underneath. If you look at a DVD in the shell you can see what I mean.
Assuming you want to play video DVD on your Wal-Mart-purchased consumer electronics, you need to get your video into an MPEG-2 video with AC3 or PCM audio at 48khz, with the appropriate frame rate for your TV and the correct size and aspect ratio. The mencoder docs have a nifty table showing what you need to decide. Once you've decided, use ffmpeg to transcode. It's not hard: ffmpeg -i in.avi -target ntsc-dvd -acodec ac3 out.mpg. You can change the bitrate with the -b option (see the myriad bitrate calculators online if you're trying to squeeze things. I've found the bitrate calculator in ffmpegX to be the best to use, if you have OS X). You can change the audio bitrate, e.g. -ab 192. You can change the size from "full DVD" to "half DVD" with -s 352x480. You could play with lots of options. What's important is that you see something like this:
Output #0, dvd, to 'out.mpg':
Stream #0.0: Video: mpeg2video, yuv420p, 352x480, q=2-31, 1703 kb/s, 29.97 fps(c)
Stream #0.1: Audio: ac3, 48000 Hz, stereo, 256 kb/s
If it doesn't look right, it's time to double check the options and the order of the options. That one bit me, but it's right there in the manpage:
ffmpeg [[infile options][-i infile]]... {[outfile options] outfile}...
If it looks right, but mplayer doesn't seem to grok the output, then get a new ffmpeg. I had one (ffmpeg from darwinports) that would seem to do everything right but somehow leave out or corrupt the audio, so my transcoded videos had no audio. So I compiled my own from SVN.
Once you have transcoded the videos, it's time to use dvdauthor to make menus and create the DVD filesystem. It'll take a little work and XMLing, but it's well-documented online. Then you need to burn your image to a DVD.
But before you burn, try it out in-place with your favorite DVD watching program. Pointing it at the VIDEO_TS directory or perhaps VIDEO_TS/.. should do the trick. If it loads and plays, you're probably good to go. Burn and test. Get out that sharpie and decorate. Enjoy your newfound sense of accomplishment!