把DV带刻录成DVD分成几个相对独立的步骤,捕捉、编辑、提取时间码并转换成字幕(可选)、压缩、制作DVD。下面分别对每个步骤我的做法和大家分享一下。在LINUX下面,目前还没有什么象绘声绘影或者Ulead DVDworkshop等集成的刻录软件,而是分别由不同的软件完成,每个步骤多用命令行完成,猛一看好像没有windows方便,但一旦你完成一张DVD后,你会发现以后再做就极其方便,而且每个步骤相对独立,你可以用你熟悉的软件完成,当你自己编好你的脚本后,你再做DVD的时候,就是简单的敲几个命令,喝杯茶就好了。
一、捕获
需要电脑上面支持火线或者安装火线卡,ubuntu对火线卡的支持还是比较完善的,我的T42插了一张70块买的PCMCIA火线卡(包括送的线),没有做任何配置就可使用。把DV机用火线和电脑连接好,开机,放到Camera档,把带子倒到要捕捉的内容的起点。捕获我用dvgrab命令,下面是我用的参数
代码: |
dvgrab --autosplit --timestamp --format raw --opendml --size 0 --buffers 500 <name>- |
下面把各个参数分别说明
--autosplit 自动分割,把DV带上的录制的内容按每次拍摄分割成不同的文件,在拍摄的时候,按下暂停键就视做新的一次拍摄。
--timestamp 把时间码作为捕获文件名的一部分,精确到秒
--format raw 捕获格式,可以为dv1,dv2,raw,分别对应type-1, type-2和rawdv格式。建议用raw格式,兼容下面的提取时间码的过程,如果不提取时间码,dv1和dv2也可以,dv2的兼容性要比dv1的大些。raw捕获的文件后缀是dv, dv1和dv2的后缀是avi。
--opendml 支持捕获大于1G的文件
--size 0 对捕获文件大小不做限制,缺省是捕获到1G后自动分割到下一个文件
--buffers 500 缺省是300,如果你发现你的硬盘在捕获过程中有丢帧现象,适当加大这个缓冲,丢帧一般发现在切换到下一个文件的时候
<name>- 捕获文件的开始字串,比如你如果用 vid-,则捕获文件将是vid-2007.01.01_12-10-10.dv
在捕获前一定要确认当前目录下的分区有足够的空间,一般DV一盘捕获成RAW后为13G。按下回车后,摄像机会自动开始播放。
二、编辑
在linux下可以用kino对捕获文件进行非线性编辑,包括制作各种特效。但我的电脑的ATI开源驱动对视频的驱动有点问题,每次用kino都要崩溃(该死的ATI!),而且我对编辑没什么特殊的要求,就是把DV带上的内容原样刻录成DVD就成,最多把不满意的视频删除,然后合并一些小的文件为一个大的文件。这里有一个技巧,就是合并RAW格式的DV文件不用任何软件,简单的把他们拷贝到一起就成,我就用下面的命令来合并:
代码: |
cat vid-2007.01.01_*.dv > vid-2007.01.01.dv |
dv1和dv2的avi文件没有试过,应该也可以。
三、提取时间码并制作成字幕文件
DV带中会保存拍摄时候的时间,在摄像机的播放过程中可以在摄像机上看到,这个时间码在捕获的时候也会被捕获到文件中,RAW,DV1,DV2都有。但我在linux下找到的这个软件只支持RAW格式,
代码: |
dv2sub --subtitles-out vid-2007.01.01.sub vid-2007.01.01.dv |
我喜欢将时间码做成字幕,在播放的时候可以打开字幕看到当时拍摄的时间,平时关闭字幕也不影响观看。
四、压缩
在linux下压缩有很多种方法,ffmpeg, mpeg2enc, transcode,mencoder等,transcode和mencoder都是前端命令,ffmpeg和mpeg2enc分别有各自的库来支持,mpeg2enc的图像质量在电脑上看稍好一些,但有一个大问题到目前我还没有解决,就是压缩的文件在电脑上看没有任何问题,但在DVD机上声音断续,无法正常看,在制作DVD的时候有声音不同步的错误生成。
ffmpeg的压缩命令
代码: |
ffmpeg -i vid-2007.01.01.dv -target pal-dvd -deinterlace -aspect 4:3 -pass 1 -y tmp
ffmpeg -i vid-2007.01.01.dv -target pal-dvd -deinterlace -aspect 4:3 -pass 2 vid-2007.01.01.mpg |
我用的两遍压缩,以求更高的图像质量,第一遍压缩会在当前目录下生成ffmpeg2pass-0.log和tmp两个文件,生成的tmp文件其实就是一个压缩好的mpg文件,但我们在第二遍压缩的时候并不用这个文件,只用log文件,所以第一遍压缩的文件在命令结束的时候就可以删除了。
各个参数的说明,
-target pal-dvd,根据你的摄像机的制式和目标文件格式,可以有pal-dvd, ntsc-dvd, pal-vcd, ntsc-vcd等不同的选项,用了这个参数就不必关心分辨率和FPS等参数了。
-deinterlace 去交错,如果你的DVD和电视都支持逐行显示,建议使用这个选项,否则播放的时候大块的高光部分会抖动厉害。
-aspect 4:3,根据你的摄像机拍摄的时候的格式来设置,有4:3和16:9等选项
-pass 1,第一遍压缩
-y, 如果有相同文件名则直接覆盖
下面我在把我使用mpeg2enc的命令写出来供参考
代码: |
smil2wav -a vid-2007.01.01.mp2 vid-2007.01.01.dv
smil2yuv vid-2007.01.01.dv | mpeg2enc -b 9000 -f 8 -I 0 -K tmpgenc -o vid-2007.01.01.m2v
mplex -f 8 vid-2007.01.01.mp2 vid-2007.01.01.m2v -o vid-2007.01.01.mpg |
这种方法比较麻烦,首先要把DV文件中的声音和图像分别提取出来压缩,然后在合并。如果用DV1和DV2格式的AVI文件,要用lav2wav和lav2yuv命令提取,RAW格式的DV文件只能用smil2wav和smil2yuv来提取。
mpeg2enc命令参数的说明
-b 9000,最大码流,注意这是视频码流,根据DVD的规范,一个DVD码流包括一条(或多条)MPEG2视频流,一条(或多条)音频码流,可以是PCM,MP2压缩等格式,多达32条字幕码流,但总的码流不能超过10400kbps。
-f 8 这是压缩成便于dvdauthor(就是后面我们要使用的软件)处理的DVD格式
-I 0 交错模式,0是去交错
-K tmpgenc 量化矩阵模式(quantization matrices),有default,tmpgenc,hi-res,file(自己定义)等。我比较喜欢tmpgenc模式,如果有视频高手,也可以自己写一个模式。
mplex将音频和视频合并在一起输出mpg文件
五、将字幕文件合并到mpg中
你可以自己编辑字幕解说,在gnome下有subtitle editor,或者你在第三步中把时间码做成字幕。在DVD中,字幕也是视频流,播放器没有任何字库来显示文本字幕,所以任何标准DVD的字幕实际都是视频文件。
这个过程用spumux完成,首先要选择一个你喜欢的字体,如果要用中文,一定要选择包含utf8的中文字体文件,把这个文件复制到~/.spumux目录下,如果没有这个目录怎么办?用mkdir建呀。
在当前目录下编辑一个叫做spumux.xml的XML文件,内容是
代码: |
<subpictures>
<stream>
<textsub filename="vid-2007.01.01.sub"
characterset="ISO8859-1"
f font="Vera.ttf"
horizontal-alignment="center"
vertical-alignment="bottom"
left-margin="60" right-margin="60"
top-margin="20" bottom-margin="30"
subtitle-fps="25" movie-fps="25"
movie-width="720" movie-height="576"
/>
</stream>
</subpictures>
|
这个XML文件内容太直观了,就不用解释了,要注意的就是字符集和字体名字不要写错,如果有中文字幕,字符集应该是utf-8。
然后执行
代码: |
spumux spumux.xml < vid-2007.01.01.mpg > tmp
mv tmp vid-2007.01.01.mpg |
把字幕合并到mpg文件中,如果有多条字幕,修改spumux.xml,再执行一遍。在windows下,很多DVD制作软件并不用mpg文件内嵌的字幕流,而在linux下,所有的字幕流都先嵌入到mpg文件中。
可以用vlc player来检验内嵌的字幕流,mplayer只能支持外挂字幕文件。
六、制作DVD
现在我们有了压缩好的mpg文件了,字幕也嵌入到MPG里面了,是最后制作DVD的时候了,这个过程叫author,是指生成DVD目录格式和DVD的VOB文件。在linux下面用dvdauthor,这个软件的功能足够强大,但是需要编辑XML文件,而且只有命令行,编辑字幕非常不直观,给我的感觉就象用vi,但象我这样一年做不了几盘DVD的人,完全没有必要花大力气去学,当然,如果你是一个专业视频认识,强烈建议你去学这个软件,会大大提高你的效率的。dvdauthor的命令行前端还有devede等。
好在我们有GUI的dvdauthor前端叫做dvdstyler,提供了直观的图形界面,更可贵的是使用极其简单。
首先启动DVDstyler,你会看到左边有三个TAB,由上到下分别是diretories, background,buttons。点级diretories,这个TAB是一个文件管理器,你可以选择你自己编辑好的菜单背景,注意,编辑好的图像一定要保存的DVD格式的分辨率,PAL是720x576。
如果你自己没有背景,可以用background下提供的一些照片,或者干脆就用黑色背景也比较个性。
选择buttons,把各种形状的按钮拖到菜单上,写每个章节的名字。现在再打开一个文件管理器,把刚才编辑好的内嵌字幕的MPG文件拖放到dvdstyler窗口的最下面,很奇怪,这个过程只能用拖放方法,没有任何菜单或者命令可以代替。每个MPG文件会自动分配成titles1,2,3...。
右键菜单上的按钮,选择properties,可以定义按钮动作,比如跳到某个title的某个chapter。
在下面的每个title点右键,可以看到每个title都自动被划分了chapter,有一点要千万注意!!
就是每个title的缺省播放后的动作是回到菜单,如果你希望播放完这个title后继续播放下面的内容,要把每个title的post command该成jump到下个title,否则播放完这段就回到菜单,有的内容如果没有定义菜单永远都播放不了。
至此,DVD制作完成,可以刻录啦!别忙,最好先试试有没有什么错误。在dvdstyler的file->burndvd下,有三个选项,生成DVD目录,生成ISO文件,直接刻录。每个过程都比前面更耗费时间。你可以先生成目录或ISO文件,生成后,用xine来检验
代码: |
xine dvd:/full/path/to/dvd/diretory/ |
或者
代码: |
xine dvd:/full/path/to/iso/file.iso |
如果检验没有错误,直接刻录。
--后记
落里罗嗦写了一大堆,希望对大家有帮助。用了linux感觉很多东西一开始觉得麻烦,但做了一遍以后发现效率要比windows下的所谓GUI高多了,上面的过程也是同样的,每个过程都要一堆命令完成,但如果你自己写好了相应的脚本,每个过程就是敲一个命令,甚至可以把多个过程合并到一个脚本中,如果大家有兴趣,我在把我的脚本帖上来,我不太会写脚本,所以脚本可能比较丑陋,大家要有思想准备。
我使用的平台,ubuntu 6.10 i386
下面在把用到的命令的安装总结一下,
dvgrab, 新立德直接安装,
dv2sub,
http://dv2sub.sf.net/,自己编译,可能还要新立德一些库
ffmpeg, 新立德直接安装,
smil2wav,smil2yuv, 新立德安装smilutils
mpeg2enc,mplex, 新立德安装mjpegtools
spumux, 新立德dvdauthor
dvdstyler,
http://www.dvdstyler.de/,有deb包和源码。