最近还在搞桌面化视频网站系统,因为播放技术才用的是html5里标签,所以经常去了解该标签支持的格式,今天发现其支持的一个音频格式Opus格式,发现这个音频格式真的会成为未来音频发展的趋势。下面我具体介绍下Opus格式。
一、Opus格式简介:
Opus是一款开源、免费、自由度高的有损音频编解码器,融合了Skype的SILK和XVID的CELT 技术,拥有比AAC、OGG等其它有损格式更大的压缩率。它已经被标准化互联网组织IETF认证通过,是AAC后新一代的编码格式,目前处在开放阶段就已经获得foobar、Skype、Firefox等的大力支持和推广,并且为HTML5标准加入了一股重要力量。
官方网站:opus-codec, 内有源代码下载。
二、特性
Opus的前身是celt编码器。在当今的有损音频格式争夺上,拥有众多不同编码器的AAC格式打败了同样颇有潜力的mpc、ogg等格式,而在Opus格式诞生后,情况似乎不同了,Opus单单是在目前的开发阶段就已经取得了技术上诸多的优势。通过诸多的对比测试,低码率下Opsu完胜曾经优势明显的HEAAC,中码率就已经可以媲敌码率高出30%左右的AAC格式,而高码率下更接近原始音频。
Opus的优势可以参看官方的测试对比:https://people.xiph.org/~greg/opus/ha2011/ 以及著名的hydrogenaudio论坛的公开测试:http://listening-tests.hydrogenaudio.org/igorc/results.html
三、播放
Opus格式音频可以使用gstreamer, libavcodec,Foobar2000,Firefox(15 Beta或更新)等播放,推荐Foobar2000 1.1.14beta 1或者更新的版本播放。我这样的Firefox高度依赖者用Firefox播放也很爽,只是不能控制音量。
四、编码(含教程)
编码毫无疑问是重头戏,同AAC一样,Opus支持vbr cbr cvbr三种编码模式,vbr当然依旧是编码效率最高的模式。不同于Itunes AAC动不动就是20Kbps的码率估算差值,Opus的VBR码率控制的非常出色,平均码率和估算值一般只有4Kbps以内。
Opus的码率支持6 kbps到510kbps,采样率支持8 kHz到48 kHz(这点和qtaac相似,但都比不上Nero aac最高的96kHz,不过一般的CD级别的足够了)最大支持255声道……
值得注意的是,普通的CD级音频所用的44.1kHz采样率通过Opus编码后会重采样到48kHz,至于为什么这么做OpusFAQ上有解释,下面的测试环节同样证明重采样到48kHz并无任何坏处。
http://www.saunalahti.fi/~cse/Opus/
有国外的网站出了一个相当详细的转换教程,不过适用于自定义编码需要输入命令行(用熟练了推荐命令行,非常方便)。附上命令行参数:
Quote:
Usage: opusenc [options] input_file output_file.opus
Encodes input_file using Opus. It can read the WAV, AIFF, or raw files.
General options:
-h, --help This help
-v, --version Version information
--quiet Quiet mode
input_file can be:
filename.wav file
- stdin
output_file can be:
filename.opus compressed file
- stdout
Encoding options:
--speech Optimize for speech
--music Optimize for music
--bitrate n.nnn Encoding bitrate in kbit/sec (6-256 per channel)
--vbr Use variable bitrateencoding (default)
--cvbr Use constrained variablebitrate encoding
--hard-cbr Use hard constant bitrate encoding
--comp n Encoding complexity (0-10, default:10)
--framesize n Maximum frame size in milliseconds (2.5, 5,10, 20, 40, 60, default: 20)
--expect-loss Percentage packet loss to expect (default: 0)
--downmix-mono Downmix to mono
--downmix-stereo Downmix to stereo (if >2 channels)
--max-delay n Maximum container delay in milliseconds(0-1000, default: 1000)
Diagnostic options:
--save-range file Saves check values for every frame to a file
--set-ctl-int x=y Pass the encoder control x with value y (advanced)
Preface with s: to direct the ctl to multistream s
This may be used multiple times
--uncoupled Use one mono stream per channel
Metadata options:
--comment Add the given string as an extracomment This may be used multiple times
--artist Author of this track
--title Title for this track
Input options:
--raw Raw input
--raw-bits n Set bits/sample for raw input (default: 16)
--raw-rate n Set sampling rate for raw input (default:48000)
--raw-chan n Set number of channels for raw input (default:2)
--raw-endianness n 1 for bigendian, 0 for little (defaults to 0)
--ignorelength Always ignore the datalength in Wave headers