开始学习 Dvdwizard 源码

时不我待,本来准备继续学习 BLFS ,为做一个针对手机影音转换的系统做准备。可是,我做的东西应该是以应用层为主,这种系统层面的东西有个基本的掌握就行了,以后确有必要的时候再定制一个系统。现在计划先把这个应用工具完成一个原型再说,准备用 bash 脚本调用各种工具实现,再在此基础上弄一个图形界面(easybashgui(https://sites.google.com/site/easybashgui))。然后把这个工具集成到一个已有的微型 LiveCD 发行版中(如: Tinycore)。如果有必要,如图形界面无法商业化的应用,那么就真的要学点 Gtk 编程的东西。好在我对编程并不是很陌生,花点时间应该很快上手。现在问题是,我的 bash 脚本编程知识非常基础,没有系统的学习过,而要从头系统的找一本书来学又太漫长了,于是,就准备找一个现成的 Bash 实例来深入学习一下 Bash 编程。

我发现 Dvdwizard 是个不错的选择,程序不大,功能与我想完成的有关联,代码成熟。于是,就是它了。Dvdwizard 的功能就是把符合 DVD 格式的 mpg 文件用一个命令一步到位的转换成 DVD 映像文件。当然,学习的同时还需要一本备查的工具书,我用的是 Advanced Bash Scripting Guide.
关于DVD制作的参考资料:
dvdwizard 利用一些影音处理的开源工具,主要包括:dvdauthor、ffmpeg、ImageMagick 等。详见: 工具列表. 其中关于 DVD 结构方面的东西主要参考 Dvdauthor 的东西。
man dvdauthor ;
Howto author AVI->DVD with menus using Linux only !: http://forums.gentoo.org/viewtopic.php?t=117709 ;
Some thoughts on DVD authoring: http://www.tappin.me.uk/Linux/dvd.html ;
http://www.gentoo-wiki.info/HOWTO_Create_a_DVD:Filesystem

从 man dvdauthor 中可知:
DVD 结构包括顶层菜单:VMGM(Video Manager Menu)和至少一个 TitleSet;TitleSet 包括:标题集菜单(VTSM=Video Titleset Menu),必须有的 Title;在同一个 TitleSet 里面的 menu 和 title 包括相同的: video, audio, and subtitle 设置;TitleSet 之间不能互相跳转,必须通过 VMGM 访问不同的 Titleset; Title 包括 Chapter .上面的有些元素是可选的.

运行和学习 Dvdwizard 的平台是 Ubuntu 10.10。根据说明 make 和 sudo make install 后,安装文件如下:
Install all scripts into /usr/local/bin ...
Install central script into /usr/local/share ...
Install all manpages into /usr/local/share/man ...
.
Installing config file into /etc ...
Installed new config as /etc/dvdwizard.conf
Please edit the new config to your preferences.
.
Make sure, /usr/local/bin is inside your PATH.
dvdwizard installation ready.
其中最重要的是3个部分:
1、核心函数脚本: /usr/local/share/dvdwizardrc,里面是一些通用的函数和工具供其它脚本调用
2、核心配置文件: /etc/dvdwizard.conf,它的各种配置都是集中在这个配置文件中的,如:产生文件路径、DVD电视制式、播放形式、字体设置、本地化字符串
3、各个功能模块的脚本:/usr/local/bin/,包括:
chaptercheck dvdtguess mk_vmgm mk_vtsm_info mpgprobe
dvdcpics dvdwizard mk_vtsm mk_vtsm_lang txt2png
这10个脚本文件的功能分别是:
dvdwizard: 总控脚本, 用户的操作通过它来执行;
chaptercheck: 检查 Dvdauthor 的 xml 配置文件中的 chapter 列表;
dvdcpics: 提取 Chapter 里面的屏幕截图用于 mk_vtsm 创建菜单;
dvdtguess: 从被加工的 mpeg 文件的文件名中猜测 DVD 的标题;
mk_vmgm: 创建 DVD 主菜单用于 dvdauthor 创建 dvd;
mk_vtsm: 创建一个或多个的 TitleSet 菜单用于 dvdauthor 创建 dvd;
mk_vtsm_info: 显示信息面板;
mk_vtsm_lang: 为当前 Titleset 菜单里面音, 视频轨迹创建语言选择菜单;
mpgprobe: 检查 mpeg 文件的音视频特征
txt2png: 转换一个文本文件到一个或多个 PNG 文件

学习方法: 从执行一个简单到复杂的 DVD 创建任务, 沿着脚本执行的流程学习 Bash 编程.