Linux系统中提取DVD音频的方法介绍( 二 )


mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o movie.avi
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=2 -oac copy -o movie.avi;
几个解释补充:
1:音频加字幕:
PHP代码:
mencoder dvd://1 -vobsubout subtitles -vobsuboutindex;
0 -sid 2 -o frameno.avi -ovc frameno
注意 :这里的frameno.avi就是你得到的音频 。我这里没有进行编码,就是说直接把dvd的音频流给剥离出来(其实就是ac3编码) 。如果如果你想用lame编码成mp3那么参考Fortraner的介绍 。
-vobsuboutindex 0 -sid 2 这个参数就是为了从dvd文件里把字幕给剥离出来 。前面的0就是说我们选的字幕(就是sid 2)做为我们最后得得到字幕文件的index 编号为0的字幕 。(字幕包括以.idx和.sub结尾的一对文件 。)
sid 2 表示我们选的dvd字幕中的sid编号(language id)为2字幕 。为什么选2呢?因为你用mplayer -vobsubid 2播放dvd时正好出来的是中文 。如果你用-vobsubid 1得到的是中文那么你就用1 。关于字幕提取 。详见mplayer的官方文档(有中文的) 。
举个一次性在进行3-pass编码的同时从DVD复制两份字幕的例子:
PHP代码:
rm subtitles.idx subtitles.sub //这里是为了防止原先存在的字幕的干扰 。
mencoder dvd://1 -vobsubout subtitles -vobsuboutindex
0 -sid 2 -o frameno.avi -ovc frameno
mencoder dvd://1 -oac copy -ovc divx4 -pass 1
mencoder dvd://1 -oac copy -ovc divx4 -pass 2
-vobsubout subtitles -vobsuboutindex 1 -sid 5
2:视频编码
视频编码的参数设置 Fortraner已经说的很详细了 。我对参数的设置就不知其所以然了 。问题是如何用参数才能使编码质量达到比较高的水平 。这里是有很多东西可以研究的 。但我拼命看man,文档,实验了好多方法,感觉也和上面给出的简单的例子的编码质量差不多 。-_- ! 大家试试Fortraner兄的参数 。看看有没有大的改观 。
3:还是讲讲怎么从dvd copy吧
a:上面的例子是用来 dvd://? 的参数 。这表示直接用dvd光驱 。?表示的是我们从那个轨道开始编码 。一般dvd有好几个轨道 。第一个往往是片头和什么节目预告之类的 。所以我一般直接从2开始 。3也是 。一般没什么用了 。具体你可以看看光盘里的info文件 。有几个 。
b:那么像Fortraner兄说的没有光驱或已经把vod文件拷贝出来的怎么办?
其实我们可以一次性的搞定:
先建立一个目录比如:DVD 。然后把那些dvd光盘里的文件都扔到这个目录 。注意,不要忘了把那些info文件也扔进去 。那时dvd的轨道信息 。有用 。然后我们就把这个DVD目录当成dvd光驱 。PHP代码:
mencode dvd://2 -dvd-device DVD/ (这里指定你的DVD的路径)
c:那么我要是不用上面的办法呢?就是说我就选几个vod文件 。我能一次性给搞定呢?行 。
请看例子,PHP代码:
cat 1.vod 2.vod | mencoder -noidx -ovc copy -oac copy -o output.avi -
注意不要忘了加“-” 。在linux系统好像直接可以用mencode *.vob.我想不行的话你就用cat吧 。cat好强啊 。最后我们可以用一个脚本来自动完成所有的步骤:
我的730M的3pass编码的脚本,PHP代码:
#!/bin/sh
rm -rf frameno.avi
mencoder dvd:// -vobsubout subtitles;
-vobsuboutindex 0 -sid 0 -ovc frameno -o;
frameno.avi -oac mp3lame -lameopts vbr=3:abr=80
mencoder dvd:// -ovc lavc -lavcopts;
vcodec=mpeg4:vqh:vpass=1 -oac copy -o aa.avi
mencoder dvd:// -ovc lavc -lavcopts
vcodec=mpeg4:vqh:vpass=2 -oac copy -o aa.avi

不知道哪里还没有明白 。大家主要还是看doc文档和man吧 。很详细的 。

推荐阅读