This howto is written in the attempt to help those reading to:
1) Accomplish transferring a video media file (.avi, .mpg, .wmv, .mov, etc.) to DVD media in a format that will allow it to be played on a standalone DVD player.
2) Create professional style menus with audio to allow selection of Titles, Chapters and other menus.

To check any library dependency issues that may need fixing afterwards.

** Some of the package versions listed above are labelled 'masked'.
This means they have not yet moved out of Gentoo's developer testing phase, and so must be specifically 'unmasked' by the user before the version can be installed.
All of the above masked packages are masked by KEYWORD ~arch (or soft masked).
Example to unmask a masked package that is masked by KEYWORD ~arch:

To make things easier to read, I will be using some real filenames, always keeping them and any created files in the same directory.
For the purpose of the exercise I have chosen 2 video files I have downloaded for free from www.matrix-xp.com and renamed them to 'matrix.avi' and 'outtakes.avi'.
I will also be using the THX theme at the start of the DVD and have named this 'thx.mpg'
Note any copyright issues for your location if you intend to use these for anything other than private use.

Encoding the movies
Know or find out what TV format you will be using.
For most of Europe and Australia, use PAL.
For America, use NTSC.
Here is a full listing of TV formats used in different countries around the world -> http://mightylegends.zapto.org/dvd/tv_standards.html

The above will produce 6 files 'matrix.m2v/matrix.ac3', 'outtakes.m2v/outtakes.ac3' and thx.m2v/thx.ac3' which have been split from the original into video and audio files. The video(.m2v) has now been re-encoded into a DVD compliant mpeg2 format and the audio(.ac3) has been encoded into an AC3 DVD audio stream.

Aspect Ratio
The above transcode lines will convert and encode to an aspect ratio of 16:9. If an aspect ratio of 4:3 is desired then replace '--export_asr 3' with '--export_asr 2' in your transcode line. Dvdauthor will only work correctly on files with aspect ratios of either 4:3 or 16:9.

Convert 2-channel stereo audio track to 5.1 surround sound (optional)
Using the above transcode lines will result in a 2-channel stereo audio track.
Depending on the brand of 5.1 surround sound entertainment system, this may result in the audio only being present on the centre and sub channels.
Find out if the original .avi/.mpg file already contains a 5.1 AC3 audio track:

If it does, then extract it using 'tcextract' (part of the transcode package) and use it in your mplex line below instead. In this way, front to rear panning will not be lost on true 5.1 audio tracks, and no added conversion is necessary:

Adding subtitles
Add subtitles using a subtitle file.
There are many different subtitle file formats (.sub, .srt, .ssa, .smi, .rt, .txt, .aqt, .jss, .js, .ass), for this exercise we'll be using the .srt format.
The .srt format has the following syntax:

Code:

1
00:00:04,700 --> 00:00:06,736
The weather is nice today

2
00:00:06,900 --> 00:00:09,494
Yes it is
but not as nice as yesterday

Make a directory in your home directory called '.spumux/', then copy the Vera.ttf font from your xorg/xfree fontpath to ~/.spumux/
Font does not have to be Vera.ttf, can be any other TrueType Font (.ttf), if the font is changed then also edit the subtitle.xml file below.

Use spumux to merge the subtitle text into the DVD video.
Spumux is part of the dvdauthor package. It is configured via an .xml file. Here is the xml config file we will use, save it as 'subtitle.xml':

Specified 'subtitle-fps', 'movie-fps', 'movie-width' and 'movie-height' are important.
If you are using NTSC, then it will be 'subtitle-fps="29.97" movie-fps="29.97" movie-width="720" movie-height="472"'

The first hex code is the text outline colour (black), the second hex code is the text colour (yellow).
A full list of supported colours and their relevant RGB hex codes can be found in /usr/share/doc/ImageMagick-<version>/www/color.html

The 'movie-height=' value is slightly less than the full screen height (576 or 480) to bring the subtitles up off the bottom of the screen. The lower the number, the higher on the screen the subtitles will appear.

Do not use lower resolutions such as 352x288 and 352x240 for 'movie-width' and 'movie-height' if you intend on viewing the subtitles on a television. The only reason these low resolutions can be used in the video encoding is that DVD players will scale the video, but do not scale the seperate subtitle streams. So using low resolutions for 'movie-width' and 'movie-height' will result in the subtitles appearing somewhere in the middle of the screen when viewed on a television.

Using lower resolutions for video encoding also has another effect on the display of subtitles when subtitle 'movie-width="720" movie-height="(570 or 472)"'. The subtitles will not be visible at all when playing back on a software DVD player on a PC as they are overlayed outside the non-scaled field of 352x288/240.

So in summary, if you intend to use lower video encoding resolutions, use a subtitle config of 'movie-width="720" movie-height="(570 or 472)"' if you intend to playback the content on a television. Or use a subtitle config of 'movie-width="352" movie-height="(288 or 240)"' if you intend to playback the content on a software DVD player on a PC.

Or if you want the best of both worlds, be really tricky and create two subtitle streams, one for PC and one for television

The subtitle formats listed above are of a text format only, another commonly used alternative is the graphical based Vobsub (.sub/.idx) format.

DVDAuthor supports both textual and graphical forms of subtitles, but if using a graphical format, the process becomes more involved.
The user must first extract and prepare the subtitle images for each dialog using a tool such as 'vobsub2pgm' that is contained in the 'subtitleripper' suite of tools, located here -> http://subtitleripper.sf.net

Then create an spumux.xml file that looks something like this:
In this example, 'Matrix0001.png' is an image of the dialog "The weather is nice today", and 'Matrix0002.png' is an image of the dialog "Yes it is, but not as nice as yesterday", the xoffset/yoffset tags are used to position where the image will be placed on the 720x576/480 TV canvas.

To make things easier, here is a script that automates the extraction of the subtitle images (using 'vobsub2pgm') and creates an spumux.xml file with the images, timestamps and offsets -> http://mightylegends.zapto.org/dvd/vobsub2spumux.shFile types other than AVI or MPEG
For file types other than .avi/.mpeg, such as .wmv,.mov,.asf, .mkv, .ogm and .bin (S)VCD etc. it's necessary to first encode the movie to .avi with mencoder, like this:
For PAL:

*If it still errors out or can't encode properly (eg. 'Unknown' video/audio formats), run the file through the mencoder line mentioned above first.

Remember that you can preview the .m2v file with mplayer or xine while it is still being encoded with transcode. No need to wait until encoding is completely finished before seeing the result, handy for very large movies.
Alternatively, transcode has a preview option available so that the movie can be watched (video only) as it's being encoded by adding 'pv=cache=30' to the -J option, like so (note that this will incur a slight performance hit and encoding will be slower as a result):

Code:

-J modfps,pv=cache=30 --export_fps 25

To preview whether AV sync is going to be correct, only encode a small amount of the movie by adding '-c 0-00:05:00' to the end of your transcode line. This will encode just the first 5 minutes of the movie, then you will need to merge(mux) the two AV streams as mentioned below using mplex
Tweakage (optional)

Halve the encoding times by reducing the DVD resolution (720x576 for PAL, 720x480 for NTSC) down to a VCD resolution (352x288 for PAL, 352x240 for NTSC). See the 'Notes' under the 'Adding subtitles' section if you intend to do this and also add subtitles.

Halve the encoded file output size by reducing the video bitrate to 1800 kbits/s ('--export_prof dvd-*' defaults to 5000 kbits/s). On average, this means that instead of being able to fit only 1-2 full length 90min. movie(s) on one 4.7GB DVD, you can fit 3-4.

The video quality does suffer, but not in a visually noticeable way. Quality will always be subjective, but for my eyes I can only really see a difference when viewing on a PC while TV playback quality is still superb (your mileage may vary, depends greatly on the quality of the original file).

As --export_prof is not used, some ffmpeg options need to be manually set, save the settings in a file called 'ffmpeg.cfg':

Code:

[mpeg2video]
vrc_minrate=0
vrc_maxrate = 7000
vrc_buf_size = 1792

The following transcode lines do both, reduce the resolution and video bitrate (by not using '--export_prof dvd-*', transcode's video bitrate defaults to 1800 kbits/s).
For PAL:

Set the video bitrate manually by using '-w', eg. add '-w3000' to your transcode line if a video bitrate of 3000 kbits/s is desired.

One major drawback of using this method is that transcode's '--export_prof' option cannot be used, so if an aspect ratio conversion is necessary, we lose the benefits of auto clip/zoom which '--export_prof' provides.
You will know an aspect ratio conversion is necessary if the encoded output file's video is squashed/stretched using the above transcode lines.
An easy way around this is to do a dummy run using '--export_prof' on the input file and let transcode do the calculations, like so:

Creating the menus
For PAL:
Open up The Gimp and make a new image of size 720x576, with a resolution of 75dpi in the x-axis and 80dpi in the y-axis.

For NTSC:
Make a new image of size 720x480, with a resolution of 81dpi in the x-axis and 72dpi in the y-axis.

Open up the 'Layers, Channels and Paths' dialog box by selecting menu File -> Dialogs -> Layers.
Create a layer called 'button_highlight' by right clicking on the background layer in the 'Layers ..' dialog box and selecting 'New Layer'.
Add an alpha channel to the layer by selecting the 'Layer Fill Type' to be 'Transparency', or by right clicking on the layer in the 'Layers ..' dialog box and select 'Add Alpha Channel'.

Create a layer called 'button_select' using the same steps used to create the 'button_highlight' layer.
Select the background layer and draw the menu background.

I chose to use the matrix 'green data dribble' as the background, which I downloaded from a free wallpaper website.
Scaled the image to the correct 720x576, right click image -> Image -> Scale Image and set. Then copy/pasted it into the background layer of my new image.
Here is the image -> http://mightylegends.zapto.org/dvd_images/matrix.jpg

Hide the button_highlight layer & save the background layer.
Do this by selecting the button_highlight layer and using the Opacity slider in the 'Layers, Channels & Paths' dialog box to make it disappear.
Click on the background layer, right click on the image, select File -> Save as
Save background layer as 'matrix_menu_background.jpg' (can be almost any image format).

Save the button_highlight layer in the same way. Use the opacity slider to bring the button_highlight layer back up, and hide the background layer.
Click on the button_highlight layer, right click on the image, select File -> Save as
Save button_highlight layer as 'matrix_menu_highlight.png'.
(NOTE - Button layer MUST be a .png)

Select the button_select layer and draw the button outlines exactly the same as button_highlight, but in a different colour.
An easier way to do this is to open matrix_menu_highlight.png, right click image, select menu Colors -> Map -> Rotate Colors, set the colour to something different, but that will still be visible against the menu background colour.
(Users of Gimp-1.x versions can find this by selecting menu Colors -> Color map rotation)
Save new colour image as 'matrix_menu_select.png'.
(NOTE - MUST also be a .png)

Use spumux to merge button_highlight & button_select images into the menu video.
Spumux is part of the dvdauthor package. It is configured via an .xml file. Here is the xml config file we will use, save it as 'spumux.xml':

Later versions of dvdauthor will not accept the presence of <video widescreen="nopanscan" /> if the vob file in question has been encoded at a 4:3 aspect ratio, remove this line from the XML file if that is the case.
For an explanation on what 'panscan' is, see here -> http://en.wikipedia.org/wiki/Pan_&_scan

Authoring with no menus
To create a more simple DVD with no menus or THX intro, then use the dvdauthor.xml config below:

Understanding the hierarchical structure of a DVDVMGM
VMGM (or Root Menu) is the highest level of structure within a video DVD.
TitleSet
Every DVD has at least 1 titleset. All the files associated with a given titleset start with VTS_nn where nn is the titleset number (starting from 1).
Title
Each titleset contains 1 or more titles. Each title is effectively a standalone movie. If you start xine and just tell it to play a dvd, and that dvd doesn't have a top-level menu, then it will just play the first title of the first titleset and then stop.
Chapter
Titles are subdivided into chapters. Chapters provide entry points to the movie, but when the player reaches the end of a chapter it will continue to the next chapter.

Menus can be associated with either the whole disk (VMGM=Video Manager Menu) or with a titleset (VTSM=Video Titleset Menu), there can be more than one menu of either type.
VMGM menus are typically used when selection of more than one VTSM in a different Titleset is required, as one VTSM cannot jump to another VTSM in a different Titleset.

Limitations on the targets of navigation menus:
A VMGM menu can only jump to:

Another VMGM menu.

The first VTSM of a titleset.

The start of a titleset.

A VTSM menu can only jump to:

Another VTSM in the same titleset.

A title or chapter within the titleset.

The first VMGM of the disk.

Note:
My DVD player (and others?) defaults to the first VTSM when pressing the 'Disc' button on the remote. If this is the case, and you want to setup menu access to different VTSMs at the VMGM level, then you may need to setup the first VTSM like so:

Create the DVD image and burn it
Use growisofs, part of the dvd+rw-tools package.

Code:

growisofs -Z /dev/dvd -dvd-video DVD/

Jerky video and skipping audio
This shouldn't happen, but here are some possible causes:

The standalone DVD player cannot handle high bitrates.
DVD video is of a variable bitrate, while the audio is fixed. The two combined must not exceed 10.08Mbit at any time, but for some DVD players that limit is sometimes a great deal lower.
If you notice the problem to be worse in high motion scenes (peak video bitrate), then this is maybe what is happening.
Solution: Encode the video using a lower bitrate and avoid encoding the audio at anything higher than 448kbits/sec
An example ffmpeg.cfg to encode video at a lower bitrate:

Code:

[mpeg2video]
vrc_minrate=0
vrc_maxrate = 7000
vrc_bufsize=1792

This will set an average video bitrate of 5000kbits/sec (using Transcode's default) but set a bitrate ceiling of 7000 kbits/sec (Transcode defaults to 9000kbits/sec).

Encoding up from a lower framerate (eg. 23.976 to 29.97 frames per second), modfps has cloned some frames to achieve the new framerate.
Solution: Experiment with different clonetypes, more details in /usr/share/doc/transcode/README.filter.modfps.

Some cheap DVD media incorrectly reports it's optimal write speed, which can result in data being written to the DVD too fast.
Solution: Add '-speed=1' to the above growisofs command line.

The media is damaged or poor.
Solution: Burn to a new disc or change brands of disc.Final Notes
Hopefully the DVD worked
Here is a flow-chart diagram to aid in getting an overall view of the processes -> http://mightylegends.zapto.org/dvd_images/dvdauthor_howto.png
More sophisticated menus can be generated by having menus within menus within menus - this is a kickstart guide only, using 2 titles with chapters every 30 seconds.
It may seem complex and time consuming first time through, but once it's been done a couple of times it becomes very quick and easy.
Some nice progress is also currently being made on a complete GUI based DVD authoring tool for Linux.
Some that stand out are:

Credits
Scott T. Smith - creator of dvdauthor
Thomas Oestrich and Tilmann Bitterberg - creators of transcode
The ffmpeg team
The mjpeg team
Wolfgang Wershofen - for precise and detailed help
Ian Pointer - for his article at linuxjournal.com, Issue# 116
James A. Pattie - for his 'DVDs under Linux' presentation
James Tappin - for his dvdauthor tutorial
Erik Slagter - for his dvdauthor colour palette patch
David A. Norris - for his flow-chart diagram of the whole process

That has got to be the very best first post I have ever seen on these forums!!!! I love it! I was just about to embark on the journey of trying to learn all this, I cannot thank you enough for gathering it all into one place and documenting it so well!

That has got to be the very best first post I have ever seen on these forums!!!! I love it! I was just about to embark on the journey of trying to learn all this, I cannot thank you enough for gathering it all into one place and documenting it so well!

Latest dvdauthor 0.6.8 - Not yet in portage, though the ebuild is avaliable from here -> https://bugs.gentoo.org/show_bug.cgi?id=36103
set 'PORTDIR_OVERLAY=/usr/local/portage' & uncomment it in /etc/make.conf
Create a directory /usr/local/portage/media-video/dvdauthor/ & place the ebuild in it, then from that directory, run:
Code:
ebuild dvdauthor-0.6.8.ebuild digest
emerge sync
ACCEPT_KEYWORDS="~x86" emerge dvdauthor

The ebuild is now available in portage -- you will still need to ACCEPT_KEYWORDS="~x86" given it is 'unstable' however there is no need to manually download it or do a portage_overlay. You might want to update the how-to.

The ebuild is now available in portage -- you will still need to ACCEPT_KEYWORDS="~x86" given it is 'unstable' however there is no need to manually download it or do a portage_overlay. You might want to update the how-to.

I can't see dvdauthor-0.6.8 in portage yet, even after syncing with a few US mirrors to be sure.
Bonez, can you 'emerge sync' & confirm that it resides in /usr/portage/media-video/dvdauthor/ and comment out PORTDIR_OVERLAY in /etc/make.conf & see if it still emerges 0.6.8 ?

I may be unluckily syncing with not yet up to date mirrors.

Thanx

Last edited by shiznix on Wed Dec 24, 2003 11:56 pm; edited 1 time in total

The mencoder line above should work, providing you have included the right directory path to video.mpg & video.mpg actually exists.
The errors on 'frameno.avi' can be ignored, they are normal & non-fatal.

I seem to have misplaced my original classic THX video in one of my great hard drive clean-out binges.
However you should be able to find many different ones on any p2p network, including the original.

As far as slow encode times go, try upgrading transcode to 0.6.11.
You'll need to re-emerge transcode anyway, as the dvdauthor-0.6.8 ebuild upgrades ImageMagick & your transcode is now looking for the old ImageMagick libraries, which of course aren't there.

I'm currently experimenting with transcode, gimp and imagemagick to see if I can get the DVD menus to have an animated background using the following idea...

Choose video to use as background
Use Transcode to convert it into a series of enumerated JPGs.
Use Gimp to create the menu with a transparent background and saving it as PNG with alpha channel.
Using Imagemagick to "merge" the JPGs and the PNG as a batch job.
Using transcode (or mjpegtools) to create the m2v for the menu.

That's basically my plan. Any comments on it? Once I've succeeded, I'll be doing a HOWTO on that as well.. (or at least I hope so )