Opus (音频格式)

Opus是一个有损音讯压缩的数位音讯编码格式，由Xiph.Org基金会开发，之后由互联网工程任务组（IETF）进行标准化，目标是以单一格式对语音和一般音讯进行高效编码，确保音质同时保持足够低的延迟以实现即时交互通信，并且对于低端嵌入式处理器来说有足够低的复杂性，适用于网络上低延迟的即时声音传输，取代Speex和Vorbis，标准格式定义于RFC 6716文件。Opus格式是一个开放格式，使用上没有任何专利或限制。

Opus整合了两种声音编码的技术：以语音编码为导向的SILK和低延迟的CELT。Opus可以无缝调节高低比特率。在编码器内部它在较低比特率时使用线性预测编码在高比特率时候使用变换编码（在高低比特率交界处也使用两者结合的编码方式）。Opus具有非常低的算法延迟（预设为22.5 ms），非常适合用于低延迟语音通话的编码，像是网络上的即时声音串流、即时同步声音旁白等等，此外Opus也可以透过降低编码位元率，达成更低的算法延迟，最低可以到5 ms。在多个听觉盲测中，Opus都比MP3、AAC、HE-AAC等常见格式，有更低的延迟和更好的声音压缩率。

Opus在Discord、WhatsApp等应用程序中广泛用作IP语音（VoIP）的编解码器。

## 技术特性

<image>

Opus可以处理各种音频应用，包括IP语音、视频会议、游戏内聊天、串流音乐、甚至远端现场音乐表演。它可以从低比特率窄带语音扩展到非常高音质的立体声音乐。支持的功能包括：

- 6 kb/秒到510 kb/秒的比特率；单一频道最高256 kb/秒
- 采样率从8 kHz（窄带）到48 kHz（全频）
- 帧大小从2.5毫秒到60毫秒
- 支持恒定比特率（CBR）、受约束比特率（CVBR）和可变比特率（VBR）
- 支持语音（SILK层）和音乐（CELT层）的单独或混合模式
- 支持单声道和立体声；支持多达255个音轨（多数据流的帧）
- 可动态调节比特率，音频带宽和帧大小
- 良好的鲁棒性丢失率和数据包丢失隐藏（PLC）
- 浮点和定点实现

## 开发历史

Opus被提出用于在IETF上标准化新的音频格式，最终被IETF编解码器工作组接受和授予。它基于Xiph.Org基金会和Skype技术公司两项最初分开的标准提案。其主要开发人员包括Jean-Marc Valin（Xiph.Org，Octasic，Mozilla Corporation），Koen Vos（Skype）和Timothy B. Terriberry（Xiph.Org，Mozilla Corporation）。其中包括Juin-Hwey（Raymond）Chen（Broadcom），Gregory Maxwell（Xiph.Org，Wikimedia）和Christopher Montgomery（Xiph.Org）也参与其中。

CELT的发展部分格式可以追溯到Vorbis的继任者的工作名称Ghost下。作为Xiph.Org基金会的新一代语音编解码器，Opus取代了Xiph的较早的语音编解码器Speex，该版本是Jean-Marc Valin先前的一个项目。CELT自2007年11月起开始工作。

SILK部分自2007年1月起一直在Skype开发，作为其SVOPC的继任者，该公司是一个内部项目，使公司独立于iSAC和iLBC等第三方编解码器和相应的许可证付款。

2009年3月，Skype建议在IETF内开发和规范宽带音频格式。之后一年内，在是否要创建IETF工作组方面发生了巨大辩论。参与专利保护竞争格式标准化的几家公司的代表表示反对开始免版税格式的标准化过程，其中包括G.719的创始人和许可人Polycom和爱立信，以及G.718的创建者法国电信，华为和橙色实验室（法国电信部门）。

2010年2月，工作组正式创建。2010年7月，提出了一种混合格式的原型，将两种提出格式的候选者SILK和CELT相结合。2010年9月，Opus作为标准化提案提交给IETF。在短时间内，格式在2010年10月获得现有名称之前，以Harmony的名义出现。2011年2月初，比特流格式暂时冻结，但有待最后更改。2011年7月底，Jean-Marc Valin被Mozilla公司雇用，继续开发Opus。2011年11月，工作组最近发出了关于比特流格式的更改的通知。比特流自2012年1月8日以来已被冻结。2012年7月2日，Opus被IETF批准用于标准化。参考软件中输入8月8日发布的候选状态最后的规范发布的RFC 6716于2012年9月10日，和版本为1.0和1.0.1 参考实现被释放一天之后。

2013年7月11日，Opus 1.0.3带来了错误修复和一个新的Surround声音API，可以提高音轨分配和质量，特别是低频音轨（LFE）。

### 1.1

2013年12月5日，Opus 1.1发布，整体速度提升和显著的编码器质量改进：调谐估计提高了以前有问题的样本的比特率和质量（如大键）、自动语音/音乐检测提高了混合音频的质量、中端立体声降低了许多歌曲的比特率需求、提高瞬态带宽精度、以及DC抑制低于3 Hz。增加了两种新的VBR模式：不受限制质量一致和即时VBR，可以提升响亮的画面，并通常提高音质。

Opus 1.1.1于2015年11月26日发布，并于2016年1月12日发布了1.1.2，同时增加了速度优化和错误修复。2016年7月15日发布版本1.1.3，并包含错误修复、优化、文档更新和实验性的Ambisonics工作。

### 1.2

2017年6月26日，Opus 1.2.1版本发布，精简了音频文件体积，改善了音频质量，增强了部分情况下的安全性，编解码器效率提升。准备推动RFC 6716标准更新，标准未更新之前继续兼容RFC 6716。此版本也带来了面向VR的立体声音频解决方案。

### 1.3

libopus 1.3 于 2018 年 10 月 18 日发布。Opus 1.3 主要版本再次带来品质改进、新功能和错误修复。自 1.2.x 以来的变化包括：

- 使用循环神经网络 (RNN) 改进语音侦测和语音/音乐分类
- 支援使用通道映射系列 2 和 3 的 Ambisonics 编码
- 改进低位元率下立体声语音的效果
- 在 9 kbit/s 的位元率下使用宽频语音编码（不再使用中带）
- 使 SILK 的位元率可降至 5 kbit/s
- 音调品质略有改善
- 预设启用 RFC 8251 中的规格修复
- 安全/强化改进

值得注意的错误修复包括：

- 对 CELT PLC 的修复
- 带宽侦测修复

## 音质和低延迟比较

<image>

Opus在更高的比特率下，已被证明具有优异的音质，而它的音频格式比AAC、HE-AAC和Vorbis更具有竞争力。

第一个是未压缩的WAV文件，第二个是使用LAME以16 kbit/s编码的MP3文件，第三个是以16 kbit/s编码的Opus文件。

在64kbit/s的听力测试中，与HE-AAC编解码器相比，Opus表现出更优异的音质，HE-AAC由于使用了专利的频谱带复制（SBR）技术，这些编解码器在以前占主导地位。在96 kbit/s的听力测试中，Opus显示出比Vorbis略高的音质，与AAC和MP3相比音质明显更好。

Opus具有非常低的算法延迟，作为低音频延迟通信链路一部分的必要性，可以在现场活动中允许自然对话，网络音乐表演或对嘴表演。音频格式的总算法延迟是无论处理速度和传输速度如编码器和实况音频流的解码器必须承担的延迟的总和，例如将音频样本缓冲到块或帧中，允许窗口重叠和可能允许对噪声整形在解码器中先行和任何其他形式的先行的，或用于将MP3编码器，使用的比特储存器。

150毫秒以下的单向延迟是大多数VoIP系统的首选目标，使自然对话与转向受到延迟的影响很小。音乐家通常会感觉到高达约30毫秒音频延迟的时间，大致符合Haas效果的融合时间，尽管将每个用户自己的乐器的播放延迟与往返延迟相匹配也可以有所帮助。音频╱视频同步，约45-100毫秒的音频延迟可能是可以接受的。

Opus允许减少质量或提高比特率以实现更小的算法延迟（最小5.0 ms）。虽然参考实现的默认Opus帧为20.0 ms长，但SILK层需要进一步5.0 ms的前瞻加1.5 ms进行重采样，默认延迟为26.5 ms。当CELT层处于活动状态时，默认情况下，为了与SILK层同步，窗口重叠需要2.5 ms的前视，其中添加了4.0 ms的匹配延迟。如果编码器在特殊限制低延迟模式下实例化，则删除4.0 ms匹配延迟，并禁用SILK层，允许5.0 ms的最小算法延迟。

## 部署与采用

格式和算法是公开的，参考实作是作为自由软件发布的。Xiph的参考实现称为libopus，一个名为opus-tools的包提供命令行编码器和解码器实用程序。它是根据BSD授权条款发布的。它是用C语言编写的，可以针对具有或不具有浮点单元的硬件架构进行编译。随附的诊断工具opusinfo报告有关Opus文件的详细技术信息，包括有关比特流格式标准符合性的信息。它是基于ogginfo从因此，与编码器和解码器不同，vorbis-tools可以在GPL第2版的条款下使用。

### 实作

RFC 6716包含用C编写的参考实现的完整源代码。FFmpeg的项目和GStreamer的项目具有编码器和解码器的实现不是从参考库的。libopus引用库已作为名为Concentus的项目的一部分移植到C＃和Java。这些移植版本牺牲了性能，以便轻松集成到跨平台应用程序中。

### 软件

该GatesAir Intraplex IP Link和Tieline广播IP音频编解码器的梅林和精灵族和Tieline报告-IT移动编解码器添加到嵌入式和移动设备的作品的支持。Digital Radio Mondiale - AM频率的数字无线电格式 - 可以使用Dream 软件定义的无线电广播和接收Opus音频（尽管在官方标准中未被识别）。在维基媒体基金会赞助的免费和开源的在线的JavaScript作品编码器，浏览器支持所需的HTML5功能。

自 2016 年以来，WhatsApp一直使用 Opus 作为其音频文件格式。

Signal在2017年初从Speex切换到Opus音频编解码器，以提供更好的音频质量。

2018 年，SoundCloud 从 MP3 切换到 Opus，将音乐流媒体所需的带宽减少了一半。

2021 年 1 月，Vimeo 将 Opus 引入其视频平台。

#### 操作系统支持

大多数最终用户软件依赖于操作系统提供的多媒体框架。Native Opus编解码器支持在类Unix操作系统的大多数主要多媒体框架中实现，包括GStreamer，FFmpeg和Libav库。

谷歌在Android 5.0（“Lollipop”）中添加了对Opus音频播放的原生支持。将载体限定，然而，对作品的音频包封在Matroska的容器，如.mkv和.webm文件。Android 6.0（“Marshmallow”）和Android 7.0（“Nougat”）增加了对封装在Ogg容器中的Opus音频的支持。

由于在Apple的WebKit渲染引擎中增加了WebRTC支持，macOS High Sierra和iOS 11为封装在核心音频格式(Core Audio Format)容器中的Opus音频提供原生播放支持。

在Windows 10上，Microsoft为封装在Matroska中的 Opus音频和Windows 10周年更新（1607）设备的WebM文件提供本机支持。Web Media Extensions提供了对封装在Ogg容器中的Opus音频的支持，Web Media Extensions是Windows 10 Fall Creators Update（1709）设备的可选附件。在Windows 8.1及更早版本中，第三方解码器（如LAV过滤器）可用于提供有限的支持。

Microsoft Windows｜macOS｜Linux｜Android｜iOS

编解码器支援｜是部分：Win 10 v1607完整：Win 10 v1903｜是（有限的容器支持）｜是部分：Android 5完整：Android 10｜是完整：iOS 17+

容器支援｜在Windows 10周年更新（1607）: WebM (.webm) Matroska (.mka, .mkv) 在Windows 10 Fall Creators更新（1709）上使用Web Media Extensions附加组件: Ogg在 Windows 10 October 2018 更新 (1809): WebM 在 Windows 10 May 2019 更新 (1903): Ogg (.opus, .oga, .ogg)｜核心音频格式 (.caf)｜Ogg (.opus) WebM (.webm) Matroska (.mka, .mkv) MPEG-TS (.ts) MP4 (.mp4)｜在 Android 5: WebM (.webm) Matroska (.mka, .mkv) 在 Android 6/Android 7: Ogg 在 Android 10: Ogg (.opus, .oga, .ogg)｜核心音频格式 (.caf) MP4 (.mp4)

备注｜在Windows 10上: - 需要Fall Creators Update（1709）并安装 Web Media Extensions附加组件以支持Ogg容器。- 在通用Windows平台应用程序（Groove Music，Microsoft Movies＆TV）上受支援。Windows Media Player上不支援。- 直到v1809，无法识别文件扩展名.opus（替换为.m4a）在Windows 8.1及更早版本中: - 需要安装LAV Filters｜仅支持CAF容器中的Opus音频。｜直到Android 9，无法识别文件扩展名.opus。（用.ogg或.m4a代替）｜支持MP4/CAF容器中的Opus音频。

#### 媒体播放器支持

虽然多媒体框架中的支持自动支持Opus对基于此类框架构建的软件的支持，但是一些应用程序开发人员为在其软件中支持Opus音频格式做出了额外的努力。这种支持被添加到AIMP， Amarok，cmus，音乐播放器守护进程，foobar2000，Mpxplay，MusicBee，SMplayer，VLC多媒体播放器， Winamp 和Xmplay音频播放器; Icecast，Airtime（软件）音频流软件; 和Asunder音频CD，CDBurnerXP CD刻录机，FFmpeg，Libav和MediaCoder媒体编码工具。流媒体Icecast无线电试验自2012年9月和2013年1月开始实施。SteamOS使用Opus或Vorbis进行流式音频。

#### 浏览器支持

对于WebRTC实现，Opus支持是强制性的。Opus在Mozilla Firefox，Chromium和Google Chrome，基于Blink的Opera，以及依赖GStreamer支持多媒体格式的类Unix系统的所有浏览器中得到支持。虽然Internet Explorer本身不提供播放Opus音频的功能，但Microsoft Edge浏览器内置了对Opus格式和VP9的支持，从而实现了对WebM的完全支持。从iOS 11和MacOS High Sierra开始，Safari支持Opus。

#### VoIP支持

由于其能力，Opus从VoIP软件供应商那里获得了早期的兴趣。几个SIP客户端，包括Acrobits Softphone，Bria X-Lite，CSipSimple（通过附加插件），Empathy（通过GStreamer），Jitsi，Tuenti，Line2（目前仅在iOS上），Linphone，Phoner和PhonerLite，SFLphone，Mumble，Discord和TeamSpeak 3语音聊天软件也支持Opus。TrueConf在其VoIP产品中支持Opus。由于法律原因，Asterisk缺乏内置的Opus支持，但第三方补丁可供下载并且2016年9月增加了通过二进制blob的官方支持。Tox P2P视频会议软件使用Opus只。分类广告分布式消息传递应用程序在其VoIP实现中在TLS套接字内发送原始opus帧。PlayStation 4游戏机也采用了CELT /电视剧编解码器，其系统党的聊天。

### 硬件

从版本3.13开始，Rockbox在支持的便携式媒体播放器上播放Opus，包括Apple的iPod系列产品，iriver，Archos和Sandisk制造的设备，以及使用“Rockbox as a Application”的Android设备。所有最近的Grandstream IP电话都支持Opus音频编码和解码。OBihai OBi1062，OBi1032和OBi1022 IP电话全部支持Opus。最近的BlueSound无线扬声器支持Opus播放。

## 基本资料

- 日语原文：Opus
- 扩展名：.opus
- mime：audio/ogg, audio/opus
- 所有者：IETF 编解码器工作组
- 发行日期：2012年9月11日
- 类型：音频
- 使用容器：Ogg、Matroska、WebM、MPEG-TS
- 扩展自：SILK、CELT
- 标准：RFC 6716
- 启用：是
- 免费在线档案：是
- 头衔：libopus
- 日语原文：libopus
- 开发者：Xiph.Org基金会
- 发行日期：2012年8月26日
- 软件版本周期：1.5.2
- 编程语言：C89
- 平台：跨平台
- 类型：声音编码，参考实作
- 许可协议：3-clause BSD 许可证