2012年2月24日星期五

如何在Linux下编码WebM格式的视频

WebM是Google推出的为HTML5设计的视频格式。它使用了Matroska容器格式、VP8视频编码和Ogg Vorbis音频编码。 它是开源且免费的,目前获得了除Microsoft和Apple以外的主流厂商生产的浏览器(Firefox、Chrome和Opera)的支持。

为了在Linux下将视频文件转码成WebM格式,你需要ffmpeg 0.6以上版本。一般这个不成问题,例如在Ubuntu 10.10上自带的ffmpeg已经内含对WebM的支持。除此之外,你还需要libvpx支持,这也在系统的软件库中提供了。

首先,建立一个ffmpeg配置文件(假设你要编码的是720p格式,若不是,需修改此配置文件):
vcodec=libvpx
g=120
rc_lookahead=16
level=216
profile=0
qmax=42
qmin=10
vb=2M
#ignored unless using -pass 2
maxrate=24M
minrate=100k
将以上内容保存到/usr/share/ffmpeg/libvpx-720p.ffpreset文件中。如果此文件已经存在,则可察看一下现有版本与以上内容有何差异,并根据ffmpeg的手册进行必要的调整。

现在就可以开始编码了。依次执行以下两条命令:
ffmpeg -i input.mp4 -vpre libvpx-720p -b 3900k -pass 1 -an -f webm -y output.webm

ffmpeg -i input.mp4 -vpre libvpx-720p -b 3900k -pass 2 -acodec libvorbis -ab 100k -f webm -y output.webm
将input.mp4替换成你的输入文件,output.webm是输出文件名。注意在pass 1中ffmpeg将生成一个中间文件,因此两条命令应在同一目录下执行。

另外,如有必要,可以在命令行添加-s 1280x720这个参数,指定视频的尺寸,但我的实测表明这么做可能引起视频比例与原始视频不符。

参考资料:The p-Code Machine