Opus OGG 音频编码器命令行参数教程

A@NAZOrip
A@NAZOrip 昨天 21:22
  • 在其它设备中阅读本文章

❀原创教程,转载请注明链接和作者

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 即可。

注意事项

  1. Adobe 系列软件(CC 2026)暂不支持 Opus 音频格式
  2. 与 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 在多流情况下可能作用于视频流。