创建带菜单的DVD

[size=3][color=green][b]怎么在linux下创建带菜单的DVD[/b][/color][/size]


[quote][size=3][color=blue][b]虽然现在在linux中有图形化界面的工具来创造带菜单的DVD,现在在命令行界面和一些工具的帮助下完成此事也成为可能。

这份文档是为帮助那些准备做如下事情的人们:
1,完成将一个视频文件(.avi, .mpg, .wmv, .mov, etc.)转还为可以在一个标准DVD播放器可以播放的DVD介质中。
2,创建专业风格的带有音频的菜单,允许选择标题、段落和其他的菜单。

所需要的工具:
* 最新的mjpegtools 1.6.2
* 最新的transcode 0.6.12
* 最新的dvd+rw-tools 5.16.4.8.6
* Mencoder (包含在mplayer软件包中),'USE="encode emerge mplayer'
* GIMP图像处理程序
* Dvdauthor 0.6.9

注:
如果要升级的话,女孩需要做:
代码:
# emerge gentookit
# ACCEPT_KEYWORDS="~x86" revdep-rebuild
来修正库文件依赖性问题。

选用的工具:
* Xine - 在烧录DVD之前测试一下DVD菜单,'emerge xine-ui'
* Normalize - 规范音频.pcm/.wav文件的音量
* Toolame

为方便读起来更简单,我将使用一些真的文件名,并且将他们和所有新创建的文件放置在同一个文件夹。
出于练习的目的,我选用了两个视频文件,是从[url]http://www.matrix-xp.com[/url] 下载的,我将文件名分别改为‘matrix.mpg’和‘outtakes.mpg’。
我也将使用THX主题作为DVD启动的主题,命民为‘thx.mpg’
如果你打算将这些应用于个人使用之外,请注意版权问题。

给电影编码
知道或找出你将使用什么TV格式。
对于欧洲和澳大利亚大部分地区来说,使用PAL。
对于美洲(或者其他?),使用NTSC。

对于PAL:
代码:
# transcode -i matrix.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o matrix
# transcode -i outtakes.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o outtakes
# transcode -i thx.mpg -V -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o thx

对于NTSC:
代码:
# transcode -i matrix.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o matrix
# transcode -i outtakes.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o outtakes
# transcode -i thx.mpg -V -y mpeg -F d -Z 352x240 --export_fps 29.97 --export_asr 2 -E 48000 -b 224 -o thx

以上将会产生六个文件‘matrix.m2v/matrix.mpa’,‘outtakes.m2v/outtakes.mpa’,‘thx.m2v/thx.mpa’,这些文件已经从原始文件中分为单独的视频和音频文件。视频(.m2v)已经编码为DVD兼容的格式,音频(.mpa)已经重新采样并编码(从标准的44kHZ的采样率转为DVD需要的48kHZ的采样率)。

代码:
# mplex -f 8 -o matrix_dvd.mpg matrix.m2v matrix.mpa
# mplex -f 8 -o outtakes_dvd.mpg outtakes.m2v outtakes.mpa
# mplex -f 8 -o thx_dvd.mpg thx.m2v thx.mpa

以上将会将新产生的音频和视频合并为DVD视频文件。
可以用mplayer或xine来检验这些文件。比如:'mplayer -vo xv matrix_dvd.mpg'

对于非标准的文件格式,如.wmv, .mov, .asf等等。必须用mencoder将电影编码为.avi格式,如同这样:
对于PAL:
代码:
# mencoder -o ouput_file.avi -ovc lavc -oac lavc -ofps 25 your_movie.mov

对于 NTSC:
代码:
# mencoder -o ouput_file.avi -ovc lavc -oac lavc -ofps 29.97 your_movie.mov

然后可以像前面正常情况下使用transcode命令。
如果mencoder出错,提示如下信息:
Quote:
Couldn't open codec mp2, br=224
那么试着将下面其中的一行到你的mencoder语句中:
-channels 2
-srate 22050
-srate 32000
-srate 48000

注意:
* 如果音频/视频(AV)同步不准确,试着transcode的AV同步自动修正参数换为'-D 0'如下:
代码:
# transcode -i matrix.mpg -V -y mpeg -F d,1 --export_fps 25 -Z 352x288 --export_asr 2 -E 48000 -b 224 -D 0 -o matrix

* 如果transcode出错或被拒绝,用mplayer辅助transcoe如这样:
代码:
# transcode -i matrix.mpg -V -x mplayer,mplayer -y mpeg -F d -Z 352x288 --export_fps 25 --export_asr 2 -E 48000 -b 224 -o matrix

* 记住,你可以在用trancode编码时用mplayer或xine来预览.m2v文件。没必要等到编码完成后在来看结果,这对比较大的电影方便。


创建菜单:
对于PAL:
打开Gimp程序,创建一个大小为720x576,分辨率为75dpix80dpi的新图像。

对于NTSC:
创建一个大小为720x480,分辨率为81dpix72dpi的新图像。

在图像上鼠标右击,选择 Image -> Alpha -> Add chanel。
在图像上鼠标右击,选择 Image -> Layers -> Layers, Channels & Paths
创建层‘button_highlight’。
创建层‘button_select’。
选择背景层,画出菜单的背景图像。

我选用 matrix 'green data dribble' 作为背景,这是我从一个免费墙纸网站中下载下来的。
调整图像的大小到准确的 720x576,鼠标点击图像选择 Image -> Scale Image & set。 然后复制/粘贴到我新建图像文件的背景中。
这里有这个图像文件:

我希望对于不同的电影,菜单中有可选择的快照。
快照可由xine截取得,图像大小再由gimp修改,然后粘贴到背景层中。
这里有这个图像文件:

选择button_highlight层,勾划出按钮形状。要看如果在gimp中画出完美的长方形、正方形和圆形,可以参卡这里:[url]http://www.cubicdesign.com/gimp/1_3/[/url]
这里有这个图像文件:

隐藏button_highlight层,并保存背景层。
做这个我们可以如下做:选择button_highlight层,并在这些层、频道和路径(Layers, Channels & Paths)中应用不透明滑动块(Opacity slider),使他不可见。
点击背景层,右击图像,选择 File -> Save as
保存背景层为matrix_menu_background.jp。
(注:背景必须为jpg格式)

同样的方法选择button_highlight层。使用不透明滑动块(Opacity slider)使button_highlight层恢复,隐藏背景层。
点击button_highlight层,右击图像,选择 File -> Save as
保存button_highlight曾为matrix_menu_highlight.png。
(注:按钮层必须为png格式)

选择button_select层,并勾划出和button_highlight一样的按钮,但颜色不一样。一个简单的方法是打开matrix_menu_highlight.png,右键点击图像,选择 Image -> Colors -> Color map rotation,选择一个不同的颜色,但是在菜单背景中可以显现的颜色。
将这个新的图像保存为matrix_menu_select.png。
(注意:必须为png格式)

将这些合并在一起
将菜单背景转换为DVDmpg格式
对于PAL:
代码:
# jpeg2yuv -n 50 -I p -f 25 -j matrix_menu_background.jpg | mpeg2enc -n p -f 8 -o matrix_menu_background.m2v

对于NTSC:
代码:
# jpeg2yuv -n 50 -I p -f 29.97 -j matrix_menu_background.jpg | mpeg2enc -n n -f 8 -o matrix_menu_background.m2v

给菜单创建一些背景音乐
代码:
# mplayer yourmusicfile.mp3 -vo null -ao pcm -aofile menu_audio.pcm

根据需要用normalize是音量柔和点或大声点
代码:
# normalize -a -10dB menu_audio.pcm

转还为mpge音频:
代码:
# mp2enc -r 48000 -o menu_audio.mpa < menu_audio.pcm

如果你不需要在你的菜单中添加音乐,仍然需要创建一个静音的音频文件和DVD菜单组合,这样菜单工作才能正常。如下:
对于PAL:
代码:
# dd if=/dev/zero bs=4 count=1920 | toolame -b 128 -s 48 /dev/stdin menu_audio.mpa

对于NTSC:
代码:
# dd if=/dev/zero bs=4 count=1601.6 | toolame -b 128 -s 48 /dev/stdin menu_audio.mpa

组合菜单背景视频和音频:
代码:
# mplex -f 8 -o matrix_menu.mpg matrix_menu_background.m2v menu_audio.mpa

用spumux来将button_highlight和button_select图像融入菜单视频中。
Spumux是dvdauthor软件包的一部分。他通过一个xml文件配置。这里有我们要用到的一个xml配置文件,保存为spumux.xml:
代码:
<subpictures>
<stream>
<spu start="00:00:00.0" end="00:00:00.0"
highlight="matrix_menu_highlight.png"
select="matrix_menu_select.png"
autooutline="infer"
autoorder="rows"/>
</stream>
</subpictures>

创建最后的menu视频
代码:
# spumux spumux.xml < matrix_menu.mpg > matrix_menu_final.mpg

创建DVD
Dvdauthor通过一个xml文件配置。这里有一个我们要用到的xml配置文件,保存为dvdauthor.xml:
代码:

<dvdauthor dest="DVD">

<vmgm>
<menus>
<pgc>
<vob file="thx_dvd.mpg"/>
<post>
jump titleset 1 menu;
</post>
</pgc>
</menus>
</vmgm>

<titleset>
<menus>
<pgc>
<button> jump title 1; </button>
<button> jump title 2; </button>
<vob file="matrix_menu_final.mpg" pause="inf"/>
</pgc>
</menus>

<titles>
<pgc>
<vob file="matrix_dvd.mpg"/>
<post>
call menu;
</post>
</pgc>
</titles>

<titles>
<pgc>
<vob file="outtakes_dvd.mpg" />
<post>
call menu;
</post>
</pgc>
</titles>

</titleset>

</dvdauthor>


创建一个文件夹名为DVD。
创建DVD文件价格用如下命令:
代码:
# dvdauthor -x dvdauthor.xml

在刻录之前用xine测试一下新的菜单:
代码:
# xine dvd:/full/path/to/DVD/VIDEO_TS/

xine应该播放这个文件夹就和播放一个DVD一样。


理解DVD的分层结构
VMGM:也称作主菜单,处于DVD视频结构的最好级别。
标题集(Titleset):每个DVD至少包含一个标题集。所有的一个给定的标题集相联系的文件都以VTS_nn的形式出现(nn是标题集的标号,标号从1开始)。
标题:每个标题集包含一个或多个标题。每个标题事实上相当于一个独立的电影。如果你启动xine,并且只是告诉他去打开一个DVD,如果这个DVD没有一个更高级别的菜单,程序将会只播放第一个标题集的第一个标题就停止了。
段落:每个标题都再细分为几个段落。段落提供指向电影的记录,但是当播放器播到一个段落的最后,播放器将会继续播放下一个段落。

菜单可以和整个联系起来(此时称为视频管理菜单VMGM),也可和一个标题集联系起来(此时称为视频标题集菜单VTSM)。每种类型都可以有多于一个的菜单。
当在不同标题集时不止一个的VTSM需要是,典型情况下将会是用VMGM菜单,因为在不同标题集时一个VTSM不会自动跳到另一个VTSM。

导航菜单对象的限制如下:
一个VMGM菜单只能跳到:
* 另一个VMGM菜单
* 一个标题集的第一个VTSM
* 一个标题集的开始

一个VTSM菜单只能跳到:
* 同一个标题集的另一个VTSM
* 标题集中的一个标题或段落
* 磁盘的第一个VMGM

注:我得DVD播放器(或者其他的?)在遥控器恩'Disc'键时默认到第一个VTSM。如果是这种情况,而你又需要设置菜单可以在VMGM级别上访问另一个不同的VTSMs,你需要设置第一个VTSM如下:
代码:
<titleset>
<menus>
<pgc>
<post>
jump vmgm menu;
</post>
</pgc>
</menus>
<titles>....
这样摁'Disc'键可以让你进入VMGM菜单。

创建DVD镜像文件并刻录。
使用growisofs工具,这事dvd+rw-tools软件包的一部分。
代码:
# growisofs -Z /dev/dvd -dvd-video DVD/


最后的注意事项:
但愿你能成功使DVD工作起来
当然,更复杂的菜单可以通过增加段落到你得电影和创建嵌入式菜单(菜单一层套一层)。而这只是一个初学者的使用向导,只用到两个标题。
虽然咋看起来这有点复杂和浪费时间,但是一旦你做过几次,将会变得越来越迅速和简单。
在命令行下而不是图形化界面下编码也意为着非常快速。(大概三倍速度于在我弱弱的XP1800+下的Windows操作系统)
一些工作在图形化界面完成确实不错,但是需要太多的工具来完成这个。我认为这将需要一个开发队伍大量的工作。


感谢:
Scott T. Smith - 优秀的工具dvdauthor的作者
Thomas Oestrich - transcode的作者
The mjpeg team
Wolfgang Wershofen - 感谢他准确和仔细的帮助
Ian Pointer - 感谢他在linuxjournal.com的文章Issue# 116
James A. Pattie - 感谢他的关于'DVDs under Linux'讲演
James Tappin - 感谢他的写的dvdauthor使用说明

链接:
* Wolfgang Wershofen 已经做了一些有趣的工作,完成了一些不同的xml配置文件和一个自动完成整个菜单创建的脚本。这些东西可以在这里找到:
[url]http://www.wershofen.de/donwloads/dvdauthor.xml[/url]
[url]http://www.wershofen.de/downloads/dvdauthor_example.tar.gz[/url]
[url]http://www.wershofen.de/downloads/dvdwizard.tar.gz[/url]
* [url]http://www.linuxjournal.com[/url] - 一个有关在linux下创建DVD的有意思的文章。
* [url]http://www.pcxperience.org/james/dvd/presentations/[/url] - James Pattie's DVD讲座
* [url]http://www.tappin.me.uk/Linux/dvd.html[/url] - James Tappin的dvdauthor使用手册(现在已经更新,向那些想将DVB转换为DVD的人强烈推荐)[/b][/color][/size][/quote] 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章