2012年8月29日星期三

最新的音频编码器 Opus 试用

Firefox 15今天发布,其重大更新之一就是正式支持了一种新的音频编解码器Opus(http://www.opus-codec.org/)。据其官网介绍,这个编码器最初是在Skype使用的Silk编码器和Xiph.org的CELT两种适合于语音的音频编码基础上开发而成,原本为低延迟的网络语音编码设计,但同样也适于音乐编码。据官方介绍,其在低码率上优于以往各种语音编码器,高码率(64kbps以上)可和常见的音乐编码器(MP3、AAC)抗衡,而且其延迟远低于AAC、MP3等(见图1、图2);免专利费,完全开源。看到Firefox 15支持了这个新玩艺,我也想稍微试试。这不是一篇评测文章,大可不必看细节。

图1 Opus官方给出的码率-音质比较图
图2 Opus官方给出的延迟比较图
目前支持Opus编解码的只有Opus自己的libopus库,目前只能使用OGG作为其封包格式。目前由于FFMpeg尚没有Opus编码模块,想编码Opus文件只能编译Xiph.org提供的opus-tools工具包。opus-tools目前的版本是1.4.0,包括opusenc、opusdec和opusrtp等程序,其在Windows系统下的依赖有libogg 1.3.0版以上,libopus 1.0.0以上。
我使用的是以往自己编译Windows下的FFMpeg和mplayer的mingw环境,必须有pkg-config的支持存在。首先直接从Opus Codec的git上克隆libopus:
git clone git://git.opus-codec.org/opus.git
然后在opus目录下进行autogen和configure:
./autogen.sh
./configure --prefix=/mingw --disable-shared --enable-static
然后编译并安装到Mingw环境:
make
make install
以同样的方法,下载libogg 1.3.0的源码(http://downloads.xiph.org/releases/ogg/libogg-1.3.0.tar.gz)并编译安装。
克隆opus-tools的源码:
git clone git://git.xiph.org/opus-tools.git
配置:
./autogen.sh
./configure --disable-stack-protector
禁止这个是因为我的gcc开了栈保护后编译出来都要依赖一个DLL,为了绿色化,关掉它。
make
strip *.exe
把得到的opusenc.exe复制出来,就可以用来压制opus文件了。其参数比较简单,直接看运行时出现的说明即可。
基本上就是
opusenc --bitrate 码率(Kbps) 输入文件名 输出文件名
这样的形式。
注意参数只能放在输入文件名之前。另外,还有几个重要的参数:
-vbr,-hard-cbr,-cvbr 码率控制方式,包括可变码率,恒定码率和有限可变码率。默认是-vbr
--framesize (数字) 帧的长度(毫秒),支持2.5, 5, 10, 20, 40, 60几种,默认是20。这个数值越小,文件就具有越多的帧,而导致开销增多和压缩变慢,音质也会下降;提高此数值能较小地提升音质。

下面轮到播放器的问题了。FFMpeg的libavcodec目前只能通过libopus解码opus编码,但是使用比较简单。对于FFMpeg,编译加上--enable-libopus参数即可(前提是--enable-gpl);而Mplayer的configure能自动检测和启用libopus。
目前foobar2000新版本也包含了解码opus的插件。
很快就编译出来了支持opus的ffplay和mplayer。
图3 目前支持opus的部分工具和播放器
用opusenc和neroaacenc、ffmpeg+libaacplus试压了一些正版盘抓的wav文件,有中岛美嘉的雪の華、SEED的OP1、兽拳战队的OP、Falcom J.D.K的FM音源版伊苏4音乐集等。对比听了一下,感觉在64kbps下,目前版本的opus听感已经超越了一些比较差的HE-AAC编码器(如libaacplus),但是还是比NeroAAC略逊一筹;32kbps下目前音质仍比较差,不能和NeroAAC的HE-AACv2相比,甚至可能比微软的WMA还差一点。不过,在这些低码率下的人声还是比较饱满的,可能是其原本就是语音编码器的优势所在吧。还有一个问题,opus目前似乎并不能原生支持11KHz/22KHz/44KHz的采样率,必须强制向上采样到48KHz,这个也是问题的来源之一么?
其实现在的主要问题是opus尚只能支持ogg封装,而不支持封装入mkv、mp4或者webm中,因此短期内是不会见到音频编码器用这个的视频文件的。现在从各种宣传稿看来,这个编码器并不准备和AAC等私有音乐编码直接竞争,而是偏向于网络电话等语音实时通信领域,WebRTC这个基于Web的实时语音通信标准准备拿这个做标准编码。不过,经过后期改进后这个编码器应该有和HE-AAC竞争的潜力,甚至有可能取代Vorbis在基于开源方案的较低码率流媒体方案,比如WebM等中的地位。
这次编译出来的opus-tools、ffmpeg/ffplay、mplayer网盘下载:
http://www.4shared.com/archive/ij79DQ1m/opus-f.html 
http://www.mediafire.com/file/7u6oj4th5bnlkfd/opus-f.7z 
http://pan.baidu.com/share/link?shareid=7953&uk=2248457607