Opus OGG 音频编码器命令行参数教程
❀原创教程,转载请注明链接和作者
Opus 是由 IETF RFC 6716 指定的音频编解码规范,libopus 是该规范下的编解码器之一。相比早期的一些 AAC 音频编解码器(如 NeroAAC、FDKAAC)有明显质量(压缩率)优势(特别是 AAC-HE 针对的低码率模式),而相比 QAAC 几乎不分上下。考虑到 QAAC 是基于苹果公司的 QtAACEnc 改进而来,而 Opus 是独立第三方,因此 Opus 在商业使用上更加放心,它的下载与安装也比 QAAC 容易一些。
RFC 6716 规范原文:datatracker.ietf.org
RFC 7845 指定了 Opus 音频流的封装格式规范,包括多声道封装。
RFC 7845 规范原文:datatracker.ietf.org
前情提要:QAAC 音频编码器命令行参数教程
下载与安装
直接使用 ffmpeg 的 libopus 即可。
注意事项
- Adobe 系列软件(CC 2026)暂不支持 Opus 音频格式
- 与 AAC 音频流不同,单个 Opus 音频流最高支持双声道
- 多声道音频通过 Opus 编码器的多声道映射族(Channel Mapping Family)实现,支持在多种封装格式(如 Ogg、MKV)里实现多达 255 条声道
- 见 RFC 7845
基本用法
编码音频
编码为 128Kbps,使用 VBR 率控制
ffmpeg -i "导入文件夹\音频源.wav" -vn -c:a libopus -b:a 128000 -vbr on -compression_level 10 -frame_duration 60 "导出文件夹\导出音频.ogg"结合视频编码
参数源于 x265 急用版压制教程(iavoe.github.io)
视频 libx265 + 音频 libopus
此处使用了 CMD 换行命令符 ^
ffmpeg -i "导入文件夹\视频源.m2ts" ^
-c:v libx265 -x265-params "high-tier=1:tu-intra-depth=4:tu-inter-depth=4:max-tu-size=16:tskip=1:tskip-fast=1:me=umh:subme=3:merange=52:weightb=1:max-merge=5:early-skip=1:ref=3:open-gop=0:min-keyint=5:keyint=287:fades=1:bframes=16:b-adapt=2:bframe-bias=20:b-intra=1:bitrate=39000:crqpoffs=-3:cbqpoffs=-2:ipratio=1.6:pbratio=1.3:cu-lossless=1:psy-rdoq=2.3:rdoq-level=2:hevc-aq=1:aq-strength=0.9:qg-size=8:rd=3:limit-modes=1:limit-refs=1:rskip=1:rc-lookahead=60:rect=1:amp=1:psy-rd=1.5:splitrd-skip=1:rdpenalty=2:deblock=-1,0:limit-sao=1:sao-non-deblock=1" -fps_mode passthrough ^
-c:a libopus -b:a 128000 -vbr on -compression_level 10 -frame_duration 60 ^
"导出文件夹\导出视频.mkv"参数说明
ffmpeg 调用的编码器会出现 libavcodec generic(通用)参数与 libxxx 参数混用的情况。以下为 libavcodec generic 的参数会添加 g 标记
-ac<g,整数>声道数量,可用于将多声道音频降混到立体声,使 Opus 音频流适应视频封装
- ffmpeg 导入多音频流时需用
-ac:a:N按导入顺序指定具体音频流,N 从 0 开始数
-ar<g,整数 Hz>采样率,如 -ar 48000 代表 48KHz
- ffmpeg 导入多音频流时需用
-ar:a:N按导入顺序指定具体音频流,N 从 0 开始数
-b:a<g,整数,lib,bit/s> 平均码率(ABR)率控制模式,如 192000 代表 192Kb/s
-vbr<字符串选项 off|on|constrained,推荐 on>
- off:固定码率(CBR)率控制模式
- on:可变码率(VBR)率控制模式(默认)
- constrained:受限可变码率(CVBR)率控制模式
-compression_level<整数 0~10,默认 10,推荐 10>
- 0:最快,压缩率最低
- 10:最强压缩且最慢
-frame_duration<字符串选项 2.5|5|10|20|40|60,默认 20,推荐 40> 指定音频帧最大时长(毫秒)
- 2.5:最小,编码延迟最低,音质最差
- 60:最大,编码延迟最高,音质最好(尤其是低码率),但白噪音会使音高分析的负载/延迟激增,且瞬态信号(如鼓、嚓)可能产生预回声
- 音高分析见 RFC 6716 5.2.3.2
- 注:超过 20ms 的帧时长主要在较低码率下有明显收益
-packet_loss<整数 0~100,默认 0> 预期丢包百分比,用于劣网通信场景
- Opus 规范要求对无法正确识别的数据包丢弃,而不解码
-fec<开关 0|1,默认 0(关)> 带内前向纠错(Inband FEC),用于劣网通信
- 需
-packet_loss大于 0 才实际生效;FEC 数据插入频率与packet_loss值成正比 - FEC 仅在 SILK 模式(语音)下有效,CELT 模式(音乐/
lowdelay)不支持
-application<字符串选项 voip|audio|lowdelay,默认 audio,推荐 audio> 指定编码用例
- voip:电话,优先保证人声质量
- audio:通用音频,尽可能与源一致
- lowdelay:低延迟,禁用人声质量优化的编码功能/模式(仅使用 CELT)
-cutoff<g,整数 Hz,默认 0(关),推荐关> 切掉指定频率以上的高频信号,必须为以下固定值之一:
- 4000:窄带(NB)
- 6000:中带(MB)
- 8000:宽带(WB)
- 12000:超宽带(SWB)
- 20000:全带(FB)
码率低于 15kbps 时,libopus 会强制使用宽带截止(除非 application=lowdelay)
-apply_phase_inv<开关 0|1,默认 1,需 libopus >= 1.2> 联合立体声编码的相位翻转功能
- 0:关,提高单声道下混(声道缩减混音)质量,略微损失立体声音质
- 1:开(默认),提高立体声质量
-mapping_family<整数 -1|0|1|255,默认 -1> 多声道映射族(Channel Mapping,多声道用)
- -1:自动,单/双声道用 Family 0,多声道用 Family 1(启用环绕声掩蔽和 LFE 带宽优化)
- 0:单声道/立体声模式
- 1:多声道/环绕声模式,启用环绕声掩蔽和 LFE 带宽优化
- 255:独立流,不指定声道布局
注:联合立体声编码(Joint Stereo)
- 通过下混得到中间声道音轨,再储存各个声道的差异而压缩音频体积的高压缩技术
视频封装格式支持
| 封装格式 | 扩展名 | Opus 支持情况 | 备注 |
|---|---|---|---|
| Ogg | .ogg / .opus | ✅✅ 原生完整支持 | 推荐音频专用;多声道由 RFC 7845 定义 |
| Matroska | .mkv / .mka | ✅ 原生支持 | 推荐视频封装,兼容性最广(Adobe CC 25.2 已支持 MKV) |
| WebM | .webm | ✅ 原生支持(Opus 为官方音频编码之一) | Matroska 子集,主要用于网络视频 |
| MP4 / ISOBMFF | .mp4 / .m4a | ⚠️ 规范支持,但播放器兼容性参差不齐 | 部分老播放器不支持;需 -strict experimental(旧版 ffmpeg) |
| MPEG-TS | .ts | ⚠️ 有限支持 | 部分实现支持,兼容性较差 |
推荐仅音频专用选
.opus(Ogg 封装),视频选.mkv,网站串流选.webm多声道目前仅能使用 Ogg/MKV/WebM
已知报错
Experimental codec - use -strict experimental to enable
在较旧版本的 ffmpeg 中,将 Opus 写入 MP4 容器时会报此错,需在输出参数中添加 -strict experimental:
ffmpeg -i input.mp4 -c:a libopus -b:a 128000 -strict experimental output.mp4新版 ffmpeg(大约 4.0 以后)已不再需要此参数。
Unsupported channel layout / 多声道输入报错
单个 Opus 流仅支持最多 2 声道。多声道输入时若未指定 -mapping_family 1,可能报错或静默降混。解决方案:
# 保留多声道(5.1)
ffmpeg -i input.mkv -c:a libopus -b:a 256000 -mapping_family 1 output.mkv
# 使用 libavcodec 的 ac 命令强制降混为立体声,从而使 Opus 音频以双声道形式嵌入视频封装
ffmpeg -i input.mkv -c:a libopus -b:a 128000 -ac:a:0 2 output.mkv-b:a 不生效 / 码率无法指定
注意参数名为 -b:a(音频码率),写成 -b 在多流情况下可能作用于视频流。