八月 16, 2010

webm压制流程

上一轮玩视频压制的时候,市面上流行的还是divx3,divx5,xvid,rm之类,rm那时候还没这么多一键搞定的压制工具,压起来还挺麻烦的;vp6那时候也出来过,不过也就几个组尝过鲜,基本上没什么人用,谁都想不到它最后会凭着flash player的flv格式在网路上大行其道。

今次要压webm,于是了解了一下各种现代化的工具,果然一个个都是鸟枪换炮,以前怎么都弄不会的avisynth,甚至都有相关的东西来帮你搞定了。

软件列表:
megui
avisynth
ffmpeg build(这个搜索ffmpeg auotobuild可以出来一批)
oggenc2.exe
foobar2000
neroaac

megui是其中最主要的部分,它的offline包携带各种常见工具,包括且不限于,dgindex和mkvtoolnix之类,最关键的自然还是它的avs script creator.它的正式名字是mpeg4 encoder gui,自带的压制格式是h264和xvid,音频支持少部分的常见格式。

安装avisynth,运行megui,让它自动更新,结束后就可以。

ffmpeg各种nightly build,主要功能就是其中的libvpx可以压webm。google官方提供的那个makewebm充满了各种悲剧,从上上篇post里那个test4.webm可以看到,它压出来的东西firefox根本不认识。

oggenc2.exe和foobar2k,由于一些原因,视频音频分开压缩最后再弄回去对大家都比较好。oggenc.exe自然是压ogg用的,foobar2k暂时在这里充当一下它的gui。

neroaac是压mp4音频时候需要,话说nero当年硬生生把一个刻录软件变成一个乱七八糟什么都系都有的解码包,最后只剩下这个免费工具还在为大家默默做贡献,也算是蛇头虎尾了。这个下载回来把neroAacEnc.exe放到megui目录下,让它自己调用就好,不用麻烦foobar了。

压制过程:
首先片源应该是mpeg2编码的,为什么呢,因为常见片源各种光盘的vob,高清信号的ts等等都是mpeg2,如果是其他任何编码格式,说明这个片源至少是经过一次压缩的二手货。

运行megui里tools目录下的dgindex,打开片源,调整playbak speed到最快,preview一次,装出看懂那个information的样子,save project,生成一个同名的d2v文件,一个log,以及分离出来的音轨。

(为了取得更好的压缩质量,根据information的各个结果,有些地方的选项可以有所变更,不过我一直都是默认值)

运行megui,tool选项卡下面的avs script creator,打开刚才那个d2v,可以进行一些切边以及调整视频大小的动作。最实用的部分是filters那个deinterlacing的部分,以前压制视频时经常会出现的抽丝现象,通常都是反交错模式没有设置好的缘故,这里提供自动检测判断,非常的方便实用,点击analyse,等它结束,save保存avs文件。

(其实上面过程的目的就是为了生成那个avs文件,虽然省略掉直接用ffmpeg压原始视频也可以,但出来的效果肯定就很寒碜。)

下面可以走webm路线或者mp4路线。

mp4路线很简单,上面save之后已经自动载入了avs,只要在下面的audio部分input选择刚才分离出来的音轨,extension选择m4a,点autoencoder,基本上就完成了。

webm路线相对麻烦一些,用命令行工具进到ffmpeg.exe所在目录,最简单的命令就是"ffmpeg.exe -i "x:\test.avs" "x:\test.webm"",它会根据扩展名用vp8压制,其他复杂的参数不多说,一方面说也说不完,另一方面我自己也不是很明白,就两个参数:-vb xxxxk,指定压制的码率;-an,忽略音轨;参数记得要放在输出文件的前面。

音轨部分,用foobar打开,选择convert,ogg之类的,挺一目了然的,不多说了。

最后把test.webm和ogg的音轨mux到一起,用的还是megui tools目录下的mkvmerge里的mmg.exe,运行后add进去上面那两个新鲜出炉的文件,start muxing,把扩展名改为webm,结束。

(注意如果webm没带 -an参数,也许会自带一条音轨,mmg里尽量只选择一条。webm虽然就是mkv的马甲,不过它其实只是一个子集,大概不支持多音轨并存乃至字幕章节等等之类的种种高科技特性。)



发表评论