[分享]在linux(ubuntu)下将DV带制作成DVD的过程

Totem,mplayer,sopcast,realplayer,bmp
回复
aloha
帖子: 375
注册时间: 2006-10-11 20:41

[分享]在linux(ubuntu)下将DV带制作成DVD的过程

#1

帖子 aloha » 2007-08-10 10:37

把DV带刻录成DVD分成几个相对独立的步骤,捕捉、编辑、提取时间码并转换成字幕(可选)、压缩、制作DVD。下面分别对每个步骤我的做法和大家分享一下。在LINUX下面,目前还没有什么象绘声绘影或者Ulead DVD workshop等集成的刻录软件,而是分别由不同的软件完成,每个步骤多用命令行完成,猛一看好像没有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和raw dv格式。建议用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"
             fontsize="28.0" 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文件会自动分配成titles 1,2,3...。
右键菜单上的按钮,选择properties,可以定义按钮动作,比如跳到某个title的某个chapter。
在下面的每个title点右键,可以看到每个title都自动被划分了chapter,有一点要千万注意!!
就是每个title的缺省播放后的动作是回到菜单,如果你希望播放完这个title后继续播放下面的内容,要把每个title的post command该成jump到下个title,否则播放完这段就回到菜单,有的内容如果没有定义菜单永远都播放不了。

至此,DVD制作完成,可以刻录啦!别忙,最好先试试有没有什么错误。在dvdstyler的file->burn dvd下,有三个选项,生成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包和源码。
A_mu
帖子: 14
注册时间: 2006-10-26 13:23

#2

帖子 A_mu » 2007-08-10 13:57

好文章,顶一下!
captainsxs
帖子: 1
注册时间: 2007-06-20 15:38

#3

帖子 captainsxs » 2007-09-03 9:12

太牛了,谢谢啊,刚开始学习在ubuntu下编辑视频,前辈这篇文章真是太及时了!有时间把你的脚本也传上来吧,对我们这些新手的学习真的有很大帮助!
aloha
帖子: 375
注册时间: 2006-10-11 20:41

#4

帖子 aloha » 2007-09-05 14:33

一捕捉,就一条命令,就不用编脚本了
二编辑,图形化界面
三提取时间码

代码: 全选

#!/bin/bash

for afile in *.dv
do
  echo $afile
  abase=`echo $afile | cut -f -3 -d .`
  echo $abase
  asub="$abase.sub"
  echo $asub
  dv2sub --subtitles-out $asub $afile
done
四压缩

代码: 全选

#!/bin/bash
# into dvd script with ffmpeg
for afile in *.dv
do
  echo $afile
  abase=`echo $afile | cut -f -3 -d .`
  echo $abase
  ampeg="$abase.mpg"
  echo $ampeg
# first pass
  ffmpeg -i $afile -target pal-dvd -deinterlace -aspect 4:3 -pass 1 -y tmp
# second pass
  ffmpeg -i $afile -target pal-dvd -deinterlace -aspect 4:3 -pass 2 $ampeg
done
rm -f tmp
五合并字幕

代码: 全选

#!/bin/bash
cp -f /home/user/.spumux/sample.xml .
from="the_subtitles.srt"
for afile in *.mpg
do
  echo $afile
  abase=`echo $afile | cut -f -3 -d .`
  echo $abase
  asub="$abase.sub"
  echo $asub
  afilesub="${abase}s.mpg"
  echo $afilesub
  sed s/$from/$asub/g < sample.xml > spumux.xml
  spumux spumux.xml < $afile > $afilesub
done
我在自己的家目录下的.spumux里面放了个spumux.xml的模板sample.xml,内容是:

代码: 全选

<subpictures>
  <stream>
    <textsub filename="the_subtitles.srt"
             characterset="ISO8859-1"
             fontsize="28.0" 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>
需要注意的是,在捕获的时候需要带上时间戳,因为这些脚本都是以文件名中的.做为分割符的。里面的echo主要是调试用的,也可以简单的显示当前的进度。
aloha
帖子: 375
注册时间: 2006-10-11 20:41

#5

帖子 aloha » 2007-11-16 0:05

在捕获文件的时候,如果dv文件没有声音,而且timestamp也变成捕获时的时间而非拍摄时间,这是由于拍摄前倒带造成捕获的开头几帧混乱,用tcprobe检查文件会发现没有音频信息。
这种情况只需用kino把该文件的头几帧去掉,再导出为raw文件即可。
aloha
帖子: 375
注册时间: 2006-10-11 20:41

#6

帖子 aloha » 2007-12-07 23:35

用DVDstyler还可以非常方便的制作压缩DVD,就是把多张VCD的内容压缩到一张DVD上,图像是VCD的质量。
可以用上面的方法把捕获的DV压缩成VCD格式的MPG文件(把ffmpeg的-target参数改成pal-vcd,或者ntsc-vcd),如果有现成的VCD盘,则把MPEGAV目录下的DAT文件拷到电脑上,执行下面的命令进行转换:

代码: 全选

ffmpeg -i MUSIC01.DAT  -target pal-vcd out.mpg
在DVDstyler里面,转换好的MPG拖进来,右键点击该文件,选择属性,下面有一个audio/video选项,在视频属性的分辨率改成352x288(PAL)或者352x240(NTSC),其他的属性根据你的需要也可以改,然后烧制DVD即可,其他的菜单的做法和DVD一样。
在windows下DVDstyler也和在linux下一样好使。
上次由 aloha 在 2008-01-08 14:54,总共编辑 3 次。
lb_bn
帖子: 1261
注册时间: 2007-02-25 16:56

#7

帖子 lb_bn » 2007-12-08 15:17

不错的贴子。。 :D
头像
fortruth
帖子: 1795
注册时间: 2005-11-06 1:51
来自: 七彩云世界
联系:

#8

帖子 fortruth » 2007-12-08 15:18

强烈加精,
佛出寺,求索真世界 For_Truth:Free_Open_Share
OPEN GPG KEY:03D18D95
回复