FFmpeg Codecs Documentation

1 描述

本文档介绍了 libavcodec 库提供的编解码器(解码器和编码器)。

2 编解码器选项

libavcodec 提供了一些通用的全局选项,可应用于所有编码器和解码器。此外,每个编解码器可能支持特定于该编解码器的所谓 “私有选项”。

有时,一个全局选项可能仅对特定类型的编解码器生效,而对另一种编解码器可能毫无意义或被忽略,因此你需要了解所指定选项的含义。另外,有些选项仅适用于解码或编码过程。

可通过在 FFmpeg 工具中指定 -option value 来设置选项,或在 AVCodecContext 选项中显式设置值,也可通过 libavutil/opt.h API 进行编程式设置。

支持的选项如下:

b(整数,编码、音频、视频)

设置比特率(单位:比特 / 秒)。默认值为 200K。

ab(整数,编码、音频)

设置音频比特率(单位:比特 / 秒)。默认值为 128K。

bt(整数,编码、视频)

设置视频比特率容差(单位:比特 / 秒)。在单遍编码模式下,比特率容差指定码率控制允许偏离目标平均比特率的范围。此选项与最小 / 最大比特率无关。将容差设置得过低会对画质产生不利影响。

flags(标志,解码 / 编码、音频、视频、字幕)

设置通用标志。

可能的值:

  • mv4:每个宏块使用四个运动向量(适用于 MPEG4)。
  • qpel:使用 1/4 像素运动补偿。
  • loop:使用环路滤波器。
  • qscale:使用固定量化比例。
  • pass1:在第一遍模式下使用内部双遍码率控制。
  • pass2:在第二遍模式下使用内部双遍码率控制。
  • gray:仅解码 / 编码灰度图像。
  • psnr:编码过程中设置误差相关变量。
  • truncated:输入比特流可能被随机截断。
  • drop_changed:不输出参数与流中第一个解码帧不同的帧。当帧被丢弃时,返回错误 AVERROR_INPUT_CHANGED。
  • ildct:使用隔行 DCT(离散余弦变换)。
  • low_delay:强制低延迟。
  • global_header:将全局头部置于附加数据中,而非每个关键帧。
  • bitexact:仅写入与平台、构建和时间无关的数据((I) DCT 除外)。这确保文件和数据校验和可重现且在不同平台间一致。其主要用途是回归测试。
  • aic:应用 H263 高级帧内编码 / MPEG4 自适应预测编码。
  • ilme:应用隔行运动估计。
  • cgop:使用闭合 GOP(图像组)。
  • output_corrupt:即使帧可能已损坏,仍输出该帧。

time_base(有理数)

设置编解码器时间基准。

它是时间的基本单位(以秒为单位),帧时间戳基于此单位表示。对于固定帧率的内容,时间基准应设为 1 / 帧率,且时间戳增量应恒为 1。

g(整数,编码、视频)

设置图像组(GOP)大小。默认值为 12。

ar(整数,解码 / 编码、音频)

设置音频采样率(单位:赫兹)。

ac(整数,解码 / 编码、音频)

设置音频声道数。

cutoff(整数,编码、音频)

设置截止带宽。(仅部分编码器支持,详见其各自的文档章节。)

frame_size(整数,编码、音频)

设置音频帧大小。

除最后一帧外,每个提交的帧在每个声道上必须恰好包含 frame_size 个采样点。如果编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE,则该值可以为 0,此时帧大小不受限制。部分解码器会设置该值以指示固定帧大小。

frame_number(整数)

设置帧编号。

delay(整数)

qcomp(浮点数,编码、视频)

设置视频量化比例压缩系数(VBR 模式)。它在码率控制方程中用作常数。默认 rc_eq 推荐范围:0.0 - 1.0。

qblur(浮点数,编码、视频)

设置视频量化比例模糊系数(VBR 模式)。

qmin(整数,编码、视频)

设置最小视频量化比例(VBR 模式)。取值范围为 -1 至 69,默认值为 2。

qmax(整数,编码、视频)

设置最大视频量化比例(VBR 模式)。取值范围为 -1 至 1024,默认值为 31。

qdiff(整数,编码、视频)

设置量化比例的最大差值(VBR 模式)。

bf(整数,编码、视频)

设置非 B 帧之间的最大 B 帧数。

取值范围为 -1 至 16。0 表示禁用 B 帧。若取值为 -1,将根据编码器自动选择合适的值。

默认值为 0。

b_qfactor(浮点数,编码、视频)

设置 P 帧与 B 帧之间的量化参数系数。

codec_tag(整数)

bug(标志,解码、视频)

兼容未自动检测到的编码器漏洞。

可能的值:

  • autodetect:自动检测
  • xvid_ilace:Xvid 隔行扫描漏洞(若 fourcc 为 XVIX 则自动检测)
  • ump4:ump4 漏洞(若 fourcc 为 UMP4 则自动检测)
  • no_padding:填充漏洞(自动检测)
  • amv:AMV 相关漏洞
  • qpel_chroma:四分之一像素色度相关漏洞
  • std_qpel:旧式标准四分之一像素漏洞(根据 fourcc / 版本自动检测)
  • qpel_chroma2:四分之一像素色度相关漏洞 2
  • direct_blocksize:直接块大小漏洞(根据 fourcc / 版本自动检测)
  • edge:边缘填充漏洞(根据 fourcc / 版本自动检测)
  • hpel_chroma:半像素色度相关漏洞
  • dc_clip:直流分量裁剪漏洞
  • ms:兼容微软有缺陷的解码器的各类漏洞
  • trunc:截断帧相关漏洞

strict(整数,解码 / 编码、音频、视频)

指定遵循标准的严格程度。

可能的值:

  • very:严格遵循旧版更严格的规范或参考软件
  • strict:严格遵循规范中的所有内容,无论后果如何
  • normal:正常遵循
  • unofficial:允许非官方扩展
  • experimental:允许非标准化的实验性内容、实验性(未完成 / 开发中 / 未充分测试)的解码器和编码器。注意:实验性解码器可能存在安全风险,请勿用于解码不可信的输入。

b_qoffset(浮点数,编码、视频)

设置 P 帧与 B 帧之间的量化参数偏移量。

err_detect(标志,解码、音频、视频)

设置错误检测标志。

可能的值:

  • crccheck:验证嵌入式 CRC(循环冗余校验)
  • bitstream:检测比特流规范偏差
  • buffer:检测不正确的比特流长度
  • explode:检测到轻微错误时中止解码
  • ignore_err:忽略解码错误并继续解码。若需分析视频内容(无论是否有错误),此选项非常有用。但出现错误时,解码出的视频可能无法正常观看。
  • careful:将违反规范且实际应用中罕见的情况视为错误
  • compliant:将所有违反规范的情况视为错误
  • aggressive:将合理编码器不会出现的情况视为错误

has_b_frames(整数)

block_align(整数)

rc_override_count(整数)

maxrate(整数,编码、音频、视频)

设置最大比特率容差(单位:比特 / 秒)。需同时设置 bufsize。

minrate(整数,编码、音频、视频)

设置最小比特率容差(单位:比特 / 秒)。主要用于设置恒定比特率(CBR)编码,其他场景下用处不大。

bufsize(整数,编码、音频、视频)

设置码率控制缓冲区大小(单位:比特)。

i_qfactor(浮点数,编码、视频)

设置 P 帧与 I 帧之间的量化参数系数。

i_qoffset(浮点数,编码、视频)

设置 P 帧与 I 帧之间的量化参数偏移量。

dct(整数,编码、视频)

设置 DCT(离散余弦变换)算法。

可能的值:

  • auto:自动选择合适的算法(默认)
  • fastint:快速整数算法
  • int:精确整数算法
  • mmx:MMX 优化算法
  • altivec:Altivec 优化算法
  • faan:浮点型 AAN DCT 算法

lumi_mask(浮点数,编码、视频)

对亮区域的压缩强度大于中等亮度区域。

tcplx_mask(浮点数,编码、视频)

设置时间复杂度掩码。

scplx_mask(浮点数,编码、视频)

设置空间复杂度掩码。

p_mask(浮点数,编码、视频)

设置帧间掩码。

dark_mask(浮点数,编码、视频)

对暗区域的压缩强度大于中等亮度区域。

idct(整数,解码 / 编码、视频)

选择 IDCT(逆离散余弦变换)实现方式。

可能的值:

  • auto:自动选择
  • int:整数实现
  • simple:简单实现
  • simplemmx:MMX 优化的简单实现
  • simpleauto:自动选择与简单实现兼容的 IDCT
  • arm:ARM 架构优化实现
  • altivec:Altivec 优化实现
  • sh4:SH4 架构优化实现
  • simplearm:ARM 架构优化的简单实现
  • simplearmv5te:ARMv5TE 架构优化的简单实现
  • simplearmv6:ARMv6 架构优化的简单实现
  • simpleneon:Neon 优化的简单实现
  • xvid:Xvid 兼容实现
  • faani:浮点型 AAN IDCT 实现

slice_count(整数)

ec(标志,解码、视频)

设置错误隐藏策略。

可能的值:

  • guess_mvs:迭代运动向量(MV)搜索(速度较慢)
  • deblock:对损坏的宏块使用强去块滤波器
  • favor_inter:优先从先前帧而非当前帧进行预测

bits_per_coded_sample(整数)

aspect(有理数,编码、视频)

设置采样宽高比。

sar(有理数,编码、视频)

设置采样宽高比。aspect 的别名。

debug(标志,解码 / 编码、音频、视频、字幕)

打印特定的调试信息。

可能的值:

  • pict:图像信息
  • rc:码率控制信息
  • bitstream:比特流信息
  • mb_type:宏块(MB)类型信息
  • qp:块级量化参数(QP)信息
  • dct_coeff:DCT 系数信息
  • green_metadata:显示即将到来的帧、GOP 或特定时长的复杂度元数据
  • skip:跳过相关信息
  • startcode:起始码信息
  • er:错误识别信息
  • mmco:内存管理控制操作(H.264)相关信息
  • bugs:漏洞相关信息
  • buffers:图像缓冲区分配信息
  • thread_ops:线程操作信息
  • nomc:跳过运动补偿相关信息

cmp(整数,编码、视频)

设置全像素运动估计比较函数。

可能的值:

  • sad:绝对差之和,速度快(默认)
  • sse:平方差之和
  • satd:哈达玛变换绝对差之和
  • dct:DCT 变换绝对差之和
  • psnr:量化平方误差之和(不推荐,画质差)
  • bit:块所需比特数
  • rd:率失真最优,速度慢
  • zero:0
  • vsad:垂直绝对差之和
  • vsse:垂直平方差之和
  • nsse:保噪平方差之和
  • w53:5/3 小波(仅用于 snow 编码器)
  • w97:9/7 小波(仅用于 snow 编码器)
  • dctmax:DCT 最大值相关
  • chroma:色度相关

subcmp(整数,编码、视频)

设置子像素运动估计比较函数。

可能的值:

  • sad:绝对差之和,速度快(默认)
  • sse:平方差之和
  • satd:哈达玛变换绝对差之和
  • dct:DCT 变换绝对差之和
  • psnr:量化平方误差之和(不推荐,画质差)
  • bit:块所需比特数
  • rd:率失真最优,速度慢
  • zero:0
  • vsad:垂直绝对差之和
  • vsse:垂直平方差之和
  • nsse:保噪平方差之和
  • w53:5/3 小波(仅用于 snow 编码器)
  • w97:9/7 小波(仅用于 snow 编码器)
  • dctmax:DCT 最大值相关
  • chroma:色度相关

mbcmp(整数,编码、视频)

设置宏块比较函数。

可能的值:

  • sad:绝对差之和,速度快(默认)
  • sse:平方差之和
  • satd:哈达玛变换绝对差之和
  • dct:DCT 变换绝对差之和
  • psnr:量化平方误差之和(不推荐,画质差)
  • bit:块所需比特数
  • rd:率失真最优,速度慢
  • zero:0
  • vsad:垂直绝对差之和
  • vsse:垂直平方差之和
  • nsse:保噪平方差之和
  • w53:5/3 小波(仅用于 snow 编码器)
  • w97:9/7 小波(仅用于 snow 编码器)
  • dctmax:DCT 最大值相关
  • chroma:色度相关

ildctcmp(整数,编码、视频)

设置隔行 DCT 比较函数。

可能的值:

  • sad:绝对差之和,速度快(默认)
  • sse:平方差之和
  • satd:哈达玛变换绝对差之和
  • dct:DCT 变换绝对差之和
  • psnr:量化平方误差之和(不推荐,画质差)
  • bit:块所需比特数
  • rd:率失真最优,速度慢
  • zero:0
  • vsad:垂直绝对差之和
  • vsse:垂直平方差之和
  • nsse:保噪平方差之和
  • w53:5/3 小波(仅用于 snow 编码器)
  • w97:9/7 小波(仅用于 snow 编码器)
  • dctmax:DCT 最大值相关
  • chroma:色度相关

dia_size(整数,编码、视频)

设置运动估计的菱形类型和大小。

  • (1024, INT_MAX):全运动估计(最慢)
  • (768, 1024]:umh 运动估计
  • (512, 768]:hex 运动估计
  • (256, 512]:l2s 菱形运动估计
  • [2, 256]:可变菱形运动估计
  • (-1, 2):小菱形运动估计
  • -1:特殊菱形运动估计
  • (INT_MIN, -1):sab 菱形运动估计

last_pred(整数,编码、视频)

设置来自前一帧的运动预测器数量。

precmp(整数,编码、视频)

设置预运动估计比较函数。

可能的值:

  • sad:绝对差之和,速度快(默认)
  • sse:平方差之和
  • satd:哈达玛变换绝对差之和
  • dct:DCT 变换绝对差之和
  • psnr:量化平方误差之和(不推荐,画质差)
  • bit:块所需比特数
  • rd:率失真最优,速度慢
  • zero:0
  • vsad:垂直绝对差之和
  • vsse:垂直平方差之和
  • nsse:保噪平方差之和
  • w53:5/3 小波(仅用于 snow 编码器)
  • w97:9/7 小波(仅用于 snow 编码器)
  • dctmax:DCT 最大值相关
  • chroma:色度相关

pre_dia_size(整数,编码、视频)

设置预扫描运动估计的菱形类型和大小。

subq(整数,编码、视频)

设置子像素运动估计质量。

me_range(整数,编码、视频)

设置运动向量范围限制(DivX 播放器为 1023)。

global_quality(整数,编码、音频、视频)

slice_flags(整数)

mbd(整数,编码、视频)

设置宏块决策算法(高质量模式)。

可能的值:

  • simple:使用 mbcmp(默认)
  • bits:使用最少比特数
  • rd:使用最优率失真

rc_init_occupancy(整数,编码、视频)

设置解码开始前应加载到码率控制缓冲区的比特数。

flags2(标志,解码 / 编码、音频、视频、字幕)

可能的值:

  • fast:允许非规范兼容的加速技巧。
  • noout:跳过比特流编码。
  • ignorecrop:忽略序列参数集(SPS)中的裁剪信息。
  • local_header:将全局头部置于每个关键帧,而非附加数据中。
  • chunks:帧数据可能拆分为多个块。
  • showall:显示第一个关键帧之前的所有帧。
  • export_mvs:将运动向量导出到帧附加数据(参见 AV_FRAME_DATA_MOTION_VECTORS),仅支持相关编解码器。另见文档示例 export_mvs.c。
  • skip_manual:不跳过采样,并将跳过信息导出为帧附加数据。
  • ass_ro_flush_noop:刷新时不重置 ASS 读取顺序字段。
  • icc_profiles:从 / 向比色法标签生成 / 解析嵌入式 ICC 配置文件。

export_side_data(标志,解码 / 编码、音频、视频、字幕)

可能的值:

  • mvs:将运动向量导出到帧附加数据(参见 AV_FRAME_DATA_MOTION_VECTORS),仅支持相关编解码器。另见文档示例 export_mvs.c。
  • prft:将编码器生产者参考时间导出到数据包附加数据(参见 AV_PKT_DATA_PRFT),仅支持相关编解码器。
  • venc_params:通过帧附加数据导出视频编码参数(参见 AV_FRAME_DATA_VIDEO_ENC_PARAMS),仅支持相关编解码器。目前支持 H.264 和 VP9。
  • film_grain:通过帧附加数据导出胶片颗粒参数(参见 AV_FRAME_DATA_FILM_GRAIN_PARAMS)。目前 AV1 解码器支持。
  • enhancements:通过帧附加数据导出图像增强元数据,例如 LCEVC(参见 AV_FRAME_DATA_LCEVC)。

threads(整数,解码 / 编码、视频)

设置要使用的线程数(仅当所选编解码器实现支持多线程时有效)。

可能的值:

  • auto0:自动选择线程数

默认值为 auto

dc(整数,编码、视频)

设置帧内直流分量精度。

nssew(整数,编码、视频)

设置保噪平方误差权重。

skip_top(整数,解码、视频)

设置顶部要跳过的宏块行数。

skip_bottom(整数,解码、视频)

设置底部要跳过的宏块行数。

profile(整数,编码、音频、视频)

设置编码器编解码器配置文件。默认值为 unknown。特定编码器的配置文件详见其相关文档。

level(整数,编码、音频、视频)

设置编码器级别。该级别取决于具体编解码器,可能与配置文件级别相对应。默认值为 unknown

可能的值:

  • unknown:未知

lowres(整数,解码、音频、视频)

按 1=1/2、2=1/4、3=1/8 的分辨率解码。

mblmin(整数,编码、视频)

设置最小宏块拉格朗日因子(VBR 模式)。

mblmax(整数,编码、视频)

设置最大宏块拉格朗日因子(VBR 模式)。

skip_loop_filter(整数,解码、视频)

skip_idct(整数,解码、视频)

skip_frame(整数,解码、视频)

根据选项值选择的帧类型,让解码器放弃处理。

skip_loop_filter 跳过帧环路滤波,skip_idct 跳过帧 IDCT / 反量化,skip_frame 跳过解码。

可能的值:

  • none:不丢弃任何帧。
  • default:丢弃无用帧(如零大小帧)。
  • noref:丢弃所有非参考帧。
  • bidir:丢弃所有双向帧。
  • nokey:仅保留关键帧,丢弃其他所有帧。
  • nointra:仅保留 I 帧,丢弃其他所有帧。
  • all:丢弃所有帧。

默认值为 default

bidir_refine(整数,编码、视频)

优化双向宏块中使用的两个运动向量。

keyint_min(整数,编码、视频)

设置 IDR 帧之间的最小间隔。

refs(整数,编码、视频)

设置运动补偿时要考虑的参考帧数。

trellis(整数,编码、音频、视频)

设置率失真最优量化。

mv0_threshold(整数,编码、视频)

compression_level(整数,编码、音频、视频)

bits_per_raw_sample(整数)

channel_layout(整数,解码 / 编码、音频)

详见 ffmpeg-utils (1) 手册中的声道布局部分,了解所需语法。

rc_max_vbv_use(浮点数,编码、视频)

rc_min_vbv_use(浮点数,编码、视频)

color_primaries(整数,解码 / 编码、视频)

可能的值:

  • bt709:BT.709
  • bt470m:BT.470 M
  • bt470bg:BT.470 BG
  • smpte170m:SMPTE 170 M
  • smpte240m:SMPTE 240 M
  • film:胶片
  • bt2020:BT.2020
  • smpte428:SMPTE 428
  • smpte428_1:SMPTE ST 428-1
  • smpte431:SMPTE 431-2
  • smpte432:SMPTE 432-1
  • jedec-p22:JEDEC P22

color_trc(整数,解码 / 编码、视频)

可能的值:

  • bt709:BT.709
  • gamma22:BT.470 M
  • gamma28:BT.470 BG
  • smpte170m:SMPTE 170 M
  • smpte240m:SMPTE 240 M
  • linear:线性
  • log:对数
  • log100:对数(100 相关)
  • log_sqrt:对数平方根
  • log316:对数平方根(316 相关)
  • iec61966_2_4/iec61966-2-4:IEC 61966-2-4
  • bt1361/bt1361e:BT.1361
  • iec61966_2_1/iec61966-2-1:IEC 61966-2-1
  • bt2020_10/bt2020_10bit:BT.2020 - 10 位
  • bt2020_12/bt2020_12bit:BT.2020 - 12 位
  • smpte2084:SMPTE ST 2084
  • smpte428/smpte428_1:SMPTE ST 428-1
  • arib-std-b67:ARIB STD-B67

colorspace(整数,解码 / 编码、视频)

可能的值:

  • rgb:RGB
  • bt709:BT.709
  • fcc:FCC
  • bt470bg:BT.470 BG
  • smpte170m:SMPTE 170 M
  • smpte240m:SMPTE 240 M
  • ycocg:YCOCG
  • bt2020nc/bt2020_ncl:BT.2020 NCL
  • bt2020c/bt2020_cl:BT.2020 CL
  • smpte2085:SMPTE 2085
  • chroma-derived-nc:色度导出 NCL
  • chroma-derived-c:色度导出 CL
  • ictcp:ICtCp

color_range(整数,解码 / 编码、视频)

若作为输入参数,用于提示解码器输入的色彩范围。可能的值:

  • tv/mpeg/limited:MPEG 范围(219*2^(n-8))
  • pc/jpeg/full:JPEG 范围(2^n-1)

chroma_sample_location(整数,解码 / 编码、视频)

可能的值:

  • left:左侧
  • center:中心
  • topleft:左上角
  • top:顶部
  • bottomleft:左下角
  • bottom:底部

log_level_offset(整数)

设置日志级别偏移量。

slices(整数,编码、视频)

切片数量,用于并行编码。

thread_type(标志,解码 / 编码、视频)

选择要使用的多线程方法。

使用 frame 会使每个线程的解码延迟增加一帧,因此无法提供未来帧的客户端不应使用此方法。

可能的值:

  • slice:同时解码单个帧的多个部分。仅当视频以切片方式编码时,基于切片的多线程才有效。
  • frame:同时解码多个帧。

默认值为 slice+frame

audio_service_type(整数,编码、音频)

设置音频服务类型。

可能的值:

  • ma:主音频服务
  • ef:音效
  • vi:视觉障碍辅助音频
  • hi:听觉障碍辅助音频
  • di:对话
  • co:评论
  • em:紧急音频
  • vo:画外音
  • ka:卡拉 OK

request_sample_fmt(sample_fmt,解码、音频)

设置音频解码器首选的采样格式。默认值为 none

pkt_timebase(有理数)

sub_charenc(编码格式,解码、字幕)

设置输入字幕的字符编码格式。

field_order(field_order,视频)

设置 / 覆盖视频的场序。可能的值:

  • progressive:逐行扫描视频
  • tt:隔行扫描视频,顶场先编码且先显示
  • bb:隔行扫描视频,底场先编码且先显示
  • tb:隔行扫描视频,顶场先编码,底场先显示
  • bt:隔行扫描视频,底场先编码,顶场先显示

skip_alpha(布尔值,解码、视频)

设为 1 可禁用 Alpha(透明度)处理。其作用类似于 flags 选项中的 gray 标志(跳过色度信息而非 Alpha 信息)。默认值为 0。

codec_whitelist(列表,输入)

允许的解码器列表,以逗号分隔。默认允许所有解码器。

dump_separator(字符串,输入)

用于分隔命令行上打印的流参数字段的分隔符。例如,要使用换行符和缩进分隔字段:

plaintext

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg

max_pixels(整数,解码 / 编码、视频)

每幅图像的最大像素数。此值可用于避免因图像过大导致的内存不足错误。

apply_cropping(布尔值,解码、视频)

如果裁剪参数的左右和顶部参数符合所需对齐要求,则启用裁剪。若未满足对齐要求,将部分应用裁剪以维持对齐。默认值为 1(启用)。注意:所需对齐要求取决于是否设置了 AV_CODEC_FLAG_UNALIGNED 以及 CPU。无法通过命令行更改 AV_CODEC_FLAG_UNALIGNED。此外,硬件解码器不会应用左右 / 顶部裁剪。

3 解码器

解码器是 FFmpeg 中配置用于解码多媒体流的组件。

配置 FFmpeg 构建时,所有支持的原生解码器默认启用。需要外部库的解码器必须通过相应的 --enable-lib 选项手动启用。可使用配置选项 --list-decoders 列出所有可用解码器。

可通过配置选项 --disable-decoders 禁用所有解码器,并通过选项 --enable-decoder=DECODER/--disable-decoder=DECODER 选择性地启用 / 禁用单个解码器。

ff* 工具的 -decoders 选项将显示已启用的解码器列表。

4 视频解码器

以下介绍部分当前可用的视频解码器。

4.1 av1

AOMedia Video 1(AV1)解码器。

4.1.1 选项
  • operating_point:选择可扩展 AV1 比特流的工作点(0 - 31)。默认值为 0。

4.2 hevc

HEVC(又称 ITU-T H.265 或 ISO/IEC 23008-2)解码器。

该解码器支持最多包含两个视图的 MV-HEVC 多视图流。通过向解码器提供视图 ID 列表(view_ids 选项)选择要输出的视图。此选项可在解码器初始化前静态设置,或通过 get_format() 回调设置 —— 适用于视图数量或 ID 在解码过程中动态变化的场景。

默认情况下仅解码基础层。

注意:若使用 ffmpeg 命令行工具,应按照其手册中所述使用视图说明符,而非本文档中介绍的选项。

4.2.1 选项
  • view_ids(MV-HEVC):指定要输出的视图 ID 列表。此选项也可设为单个 -1,表示解码并输出视频参数集(VPS)中定义的所有视图。
  • view_ids_available(MV-HEVC):调用者可读取此选项以获取活动 VPS 中可用的视图 ID 数组。单层视频的数组为空。从 get_format() 回调中读取时,此选项的值保证准确。也可在其他时间(如打开解码器后)设置,但此时值仅为参考信息,可能不准确(例如,当流包含多个不同的 VPS NALU 时)。
  • view_pos_available(MV-HEVC):调用者可读取此选项以获取活动 VPS 中可用的视图位置(左、右或未指定)数组,以 AVStereo3DView 值表示。当数组可用时,其元素与 view_ids_available 的对应元素相关联,即 view_pos_available[i] 包含 ID 为 view_ids_available[i] 的视图位置。此选项的有效性限制与 view_ids_available 相同。

4.3 rawvideo

原始视频解码器。

该解码器用于解码原始视频流。

4.3.1 选项
  • top top_field_first:指定输入视频的假定场类型。
    • -1:假定为逐行扫描(默认)
    • 0:假定为底场优先
    • 1:假定为顶场优先

4.4 libdav1d

dav1d AV1 解码器。

libdav1d 允许 libavcodec 解码 AOMedia Video 1(AV1)编解码器。配置时需确保存在 libdav1d 头文件和库。需通过 --enable-libdav1d 显式配置构建。

4.4.1 选项

以下选项受 libdav1d 包装器支持:

  • framethreads:设置解码时使用的帧线程数。默认值为 0(自动检测)。对于 libdav1d >= 1.0,此选项已过时,未来将被移除。请改用 max_frame_delay 选项和全局 threads 选项。
  • tilethreads:设置解码时使用的切片线程数。默认值为 0(自动检测)。对于 libdav1d >= 1.0,此选项已过时,未来将被移除。请改用全局 threads 选项。
  • max_frame_delay:设置解码器可在内部缓冲的最大帧数。默认值为 0(自动检测)。
  • filmgrain:若比特流中存在胶片颗粒信息,则将其应用于解码视频。默认值为库的内部默认值。此选项已过时,未来将被移除。请改用全局 export_side_data 选项导出胶片颗粒参数,而非直接应用。
  • oppoint:选择可扩展 AV1 比特流的工作点(0 - 31)。默认值为库的内部默认值。
  • alllayers:输出可扩展 AV1 比特流的所有空间层。默认值为 false。

4.5 libdavs2

AVS2-P2/IEEE1857.4 视频解码器包装器。

该解码器允许 libavcodec 通过 davs2 库解码 AVS2 流。

4.6 libuavs3d

AVS3-P2/IEEE1857.10 视频解码器。

libuavs3d 允许 libavcodec 解码 AVS3 流。配置时需确保存在 libuavs3d 头文件和库。需通过 --enable-libuavs3d 显式配置构建。

4.6.1 选项

以下选项受 libuavs3d 包装器支持:

  • frame_threads:设置解码时使用的帧线程数。默认值为 0(自动检测)。

4.7 libxevd

超快速基本视频解码器(XEVD)MPEG-5 EVC 解码器包装器。

该解码器配置时需确保存在 libxevd 头文件和库。需通过 --enable-libxevd 显式配置构建。

xevd 项目网站:https://github.com/mpeg5/xevd

4.7.1 选项

以下选项受 libxevd 包装器支持。括号中列出了对应的 xevd 选项或值,方便迁移。

要获取更准确和详细的 libxevd 选项文档,可执行命令 xevd_app --help 或查阅 libxevd 文档。

  • threads(threads):强制使用特定数量的线程

4.8 QSV 解码器

英特尔快速同步视频(QuickSync Video)解码器系列(支持 VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1、VVC)。

4.8.1 通用选项

所有 QSV 解码器均支持以下选项:

  • async_depth:内部并行化深度,值越高,延迟越大。
  • gpu_copy:视频内存与系统内存之间的 GPU 加速复制
    • default:默认
    • on:启用
    • off:禁用
4.8.2 HEVC 选项

hevc_qsv 的额外选项:

  • load_plugin:要在内部会话中加载的用户插件
    • none:无
    • hevc_sw:HEVC 软件插件
    • hevc_hw:HEVC 硬件插件
  • load_plugins:要在内部会话中加载的十六进制插件 UID 列表,以冒号分隔

4.9 v210

未压缩 4:2:2 10 位解码器。

4.9.1 选项
  • custom_stride:设置 v210 数据的行大小(以字节为单位)。默认值为 0(自动检测)。对于 BOXX 文件中的无跨距 v210,可使用特殊值 -1。

5 音频解码器

以下介绍部分当前可用的音频解码器。

5.1 ac3

AC-3 音频解码器。

该解码器实现了 ATSC A/52:2010 和 ETSI TS 102 366 的部分内容,以及未公开文档的 RealAudio 3(又称 dnet)。

5.1.1 AC-3 解码器选项
  • -drc_scale value:动态范围比例因子。该因子用于对 AC-3 流中的动态范围值进行指数运算调整。默认值为 1。有 3 个值得注意的比例因子范围:
    • drc_scale == 0:禁用动态范围控制(DRC)。输出全范围音频。
    • 0 < drc_scale <= 1:启用 DRC。应用流 DRC 值的一部分。音频还原效果介于全范围和全压缩之间。
    • drc_scale > 1:启用 DRC。非对称应用 drc_scale。 loud 声音完全压缩,柔和声音增强。

5.2 flac

FLAC 音频解码器。

该解码器旨在实现 Xiph 制定的完整 FLAC 规范。

5.2.1 FLAC 解码器选项
  • -use_buggy_lpc:lavc FLAC 编码器过去生成的高 LPC 值流存在漏洞(如默认值场景)。此选项通过使用 lavc 旧的有漏洞 LPC 逻辑进行解码,可正确解码此类流。

5.3 ffwavesynth

内部波形合成器。

该解码器根据预定义序列生成波形图案。其用途纯内部化,所接受的数据格式未公开文档说明。

5.4 libcelt

libcelt 解码器包装器。

libcelt 允许 libavcodec 解码 Xiph CELT 超低延迟音频编解码器。配置时需确保存在 libcelt 头文件和库。需通过 --enable-libcelt 显式配置构建。

5.5 libgsm

libgsm 解码器包装器。

libgsm 允许 libavcodec 解码 GSM 全速率音频编解码器。配置时需确保存在 libgsm 头文件和库。需通过 --enable-libgsm 显式配置构建。

该解码器同时支持标准 GSM 和微软变体。

5.6 libilbc

libilbc 解码器包装器。

libilbc 允许 libavcodec 解码互联网低比特率编解码器(iLBC)音频编解码器。配置时需确保存在 libilbc 头文件和库。需通过 --enable-libilbc 显式配置构建。

5.6.1 选项

以下选项受 libilbc 包装器支持:

  • enhance:设为 1 时启用解码音频的增强功能。默认值为 0(禁用)。

5.7 libopencore-amrnb

libopencore-amrnb 解码器包装器。

libopencore-amrnb 允许 libavcodec 解码自适应多速率窄带(AMR-NB)音频编解码器。配置时需确保存在 libopencore-amrnb 头文件和库。需通过 --enable-libopencore-amrnb 显式配置构建。

FFmpeg 提供了原生 AMR-NB 解码器,因此用户无需此库也可解码 AMR-NB。

5.8 libopencore-amrwb

libopencore-amrwb 解码器包装器。

libopencore-amrwb 允许 libavcodec 解码自适应多速率宽带(AMR-WB)音频编解码器。配置时需确保存在 libopencore-amrwb 头文件和库。需通过 --enable-libopencore-amrwb 显式配置构建。

FFmpeg 提供了原生 AMR-WB 解码器,因此用户无需此库也可解码 AMR-WB。

5.9 libopus

libopus 解码器包装器。

libopus 允许 libavcodec 解码 Opus 交互式音频编解码器。配置时需确保存在 libopus 头文件和库。需通过 --enable-libopus 显式配置构建。

FFmpeg 提供了原生 Opus 解码器,因此用户无需此库也可解码 Opus。

6 字幕解码器

6.1 libaribb24

ARIB STD-B24 字幕解码器。

实现了 ARIB STD-B24 标准的 A 级和 C 级。

6.1.1 libaribb24 解码器选项
  • -aribb24-base-path path:设置 libaribb24 库的基础路径。用于读取配置文件(自定义 Unicode 转换),并将非文本符号作为图像存储在该路径下。默认未设置。
  • -aribb24-skip-ruby-text boolean:告知解码器包装器跳过包含半高假名文本的文本块。默认启用。

6.2 libaribcaption

另一个使用外部 libaribcaption 库的 ARIB STD-B24 字幕解码器。

实现了日本 ARIB STD-B24 标准的 A 级和 C 级、巴西 ABNT NBR 15606-1 以及菲律宾版本的 ISDB-T。

配置时需确保存在 libaribcaption 头文件和库(https://github.com/xqq/libaribcaption)。需通过 --enable-libaribcaption 显式配置构建。若同时启用了 libaribb24 和 libaribcaption,则 libaribcaption 解码器优先使用。

6.2.1 libaribcaption 解码器选项
  • -sub_type subtitle_type:指定解码后字幕的格式。
    • bitmap:图形图像
    • ass:ASS 格式文本
    • text:无格式的简单文本输出默认值为 ass,与 libaribb24 解码器一致。部分现有播放器(如 mpv)期望 ARIB 字幕采用 ASS 格式。
  • -caption_encoding encoding_scheme:指定输入字幕文本的编码方案。
    • auto:自动检测文本编码(默认)
    • jis:ARIB STD B24 中定义的 8 位字符 JIS 编码。日本 ISDB 字幕使用此编码。
    • utf8:ARIB STD B24 中定义的 UTF-8 编码。菲律宾 ISDB-T 字幕使用此编码。
    • latin:ABNT NBR 15606-1 中定义的拉丁字符编码。南美 SBTVD / ISDB-Tb 字幕使用此编码。
  • -font font_name[,font_name2,...]:指定用于位图或 ASS 类型字幕渲染的以逗号分隔的字体家族名称列表。ASS 类型字幕仅使用第一个字体名称。未指定时,使用内部定义的默认字体家族。
  • -ass_single_rect boolean:ARIB STD-B24 规定部分字幕可能同时显示在不同位置(多矩形字幕)。由于部分播放器(如旧版 mpv)无法处理单个 AVSubtitle 中的多个 ASS 矩形,或具有相同起始时间戳且持续时间不确定的多个 ASS 矩形,此选项可更改行为,使所有文本显示在单个 ASS 矩形中。默认值为 false。若播放器无法正确处理包含多个 ASS 矩形的 AVSubtitle,可将此选项设为 true,或在编译时定义 ASS_SINGLE_RECT=1 以更改默认行为。
  • -force_outline_text boolean:指定是否无论字符样式指示如何,均对所有字符渲染轮廓文本。默认值为 false。
  • -outline_width number(0.0 - 3.0):指定轮廓文本的宽度(相对点)。默认值为 1.5。
  • -ignore_background boolean:指定是否忽略背景颜色渲染。默认值为 false。
  • -ignore_ruby boolean:指定是否忽略假名(振り仮名)字符的渲染。默认值为 false。
  • -replace_drcs boolean:指定是否将替换的 DRCS 字符渲染为 Unicode 字符。默认值为 true。
  • -replace_msz_ascii boolean:指定是否将 MSZ(中等大小;半角)全角字母数字替换为半角字母数字。默认值为 true。
  • -replace_msz_japanese boolean:指定是否将部分 MSZ(中等大小;半角)全角日语特殊字符替换为半角字符。默认值为 true。
  • -replace_msz_glyph boolean:指定如果字体支持,是否将 MSZ(中等大小;半角)字符替换为半角字形。此选项在 FreeType 或 DirectWrite 渲染器与 Adobe-Japan1 兼容字体(如 IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、Yu Gothic、Yu Mincho、Meiryo)配合使用时有效。默认值为 true。
  • -canvas_size image_size:指定渲染字幕的画布分辨率;通常应与输入视频的帧大小一致。仅当 -subtitle_type 设为 bitmap 时生效。libaribcaption 解码器对位图渲染的输入帧大小假定如下:
    • PROFILE_A:1440 x 1080,SAR(PAR)为 4:3
    • PROFILE_C:320 x 180,SAR(PAR)为 1:1若输入视频的实际帧大小与上述假定不符,渲染的字幕可能会失真。要使字幕不失真,可添加 -canvas_size 选项指定实际输入视频大小。注意:对于大小不同但宽高比相同的视频,无需 -canvas_size 选项。这种情况下,若未指定 -canvas_size 选项,字幕将拉伸或缩小至实际视频大小;若指定了不同大小的 -canvas_size 选项,字幕将按指定大小和计算出的 SAR 拉伸或缩小。
6.2.2 libaribcaption 解码器使用示例
  • 使用 ffplay 工具播放带 ARIB 字幕的 MPEG-TS 文件:

    plaintext

    ffplay -sub_type bitmap MPEG.TS
    
  • 使用 ffplay 工具播放帧大小为 1920x1080 的 MPEG-TS 文件:

    plaintext

    ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS
    
  • 将 ARIB 字幕嵌入转码后的视频:

    plaintext

    ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4
    

6.3 dvbsub

6.3.1 选项
  • compute_clut
    • -2:若流中无匹配的 CLUT(颜色查找表),则计算一次 CLUT。
    • -1:若流中无匹配的 CLUT,则计算 CLUT。
    • 0:从不计算 CLUT。
    • 1:始终计算 CLUT,并覆盖流中提供的 CLUT。
  • dvb_substream:选择 DVB 子流,-1 表示所有子流(默认)。

6.4 dvdsub

该编解码器解码 DVD 中使用的位图字幕;此类字幕也可见于 VobSub 文件对和部分 Matroska 文件中。

6.4.1 选项
  • palette:指定位图使用的全局调色板。VobSub 格式中,调色板通常在索引文件中指定;Matroska 格式中,调色板以与 VobSub 相同的格式存储在编解码器附加数据中。DVD 中,调色板存储在 IFO 文件中,因此从导出的 VOB 文件读取时无法获取。此选项的格式为包含 16 个 24 位十六进制数(无 0x 前缀)的字符串,以逗号分隔,例如:

    plaintext

    0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b
    
  • ifo_palette:指定从中获取全局调色板的 IFO 文件。(实验性)
  • forced_subs_only:仅解码标记为强制的字幕条目。部分影片的同一轨道中包含强制和非强制字幕。设为 1 时仅保留强制字幕。默认值为 0

6.5 libzvbi-teletext

Libzvbi 允许 libavcodec 解码 DVB 图文电视页面和 DVB 图文电视字幕。配置时需确保存在 libzvbi 头文件和库。需通过 --enable-libzvbi 显式配置构建。

6.5.1 选项
  • txt_page:要解码的图文电视页面编号列表。不匹配指定列表的页面将被丢弃。可使用特殊字符串 * 匹配所有页面,或 subtitle 匹配所有字幕页面。默认值为 *。
  • txt_default_region:设置用于解码的默认字符集,取值范围为 0 - 87(参见 ETS 300 706,第 15 节,表 32)。默认值为 -1,不覆盖 libzvbi 的默认值。对于部分无法标识正确字符集的旧式 1.0 级传输,此选项必不可少。
  • txt_chop_top:丢弃图文电视顶部行。默认值为 1。
  • txt_format:指定解码后字幕的格式。
    • bitmap:默认格式,图文电视页面应使用此格式,因为某些图形和颜色无法用简单文本甚至 ASS 表示。
    • text:无格式的简单文本输出。
    • ass:格式化的 ASS 输出,字幕页面和图文电视页面以不同样式返回,字幕页面仅保留文本,但会尽量保持文本对齐和格式。
  • txt_left:生成位图的 X 偏移量,默认值为 0。
  • txt_top:生成位图的 Y 偏移量,默认值为 0。
  • txt_chop_spaces:去除生成文本中的前导和尾随空格,并删除空行。此选项适用于基于图文电视的字幕,由于图文电视字符为双倍大小,字幕行的开头或结尾可能存在空格,或字幕行之间可能存在空行。默认值为 1。
  • txt_duration:设置解码的图文电视页面或字幕的显示持续时间(以毫秒为单位)。默认值为 -1,表示无限期显示或直至下一个字幕事件。
  • txt_transparent:强制生成的图文电视位图背景透明。默认值为 0,表示不透明背景。
  • txt_opacity:设置图文电视背景的不透明度(0 - 255)。若未设置 txt_transparent,仅影响起始框和结束框之间的字符(通常为字幕)。若设置了 txt_transparent,默认值为 0;否则为 255。

7 编码器

编码器是 FFmpeg 中配置用于编码多媒体流的组件。

配置 FFmpeg 构建时,所有支持的原生编码器默认启用。需要外部库的编码器必须通过相应的 --enable-lib 选项手动启用。可使用配置选项 --list-encoders 列出所有可用编码器。

可通过配置选项 --disable-encoders 禁用所有编码器,并通过选项 --enable-encoder=ENCODER/--disable-encoder=ENCODER 选择性地启用 / 禁用单个编码器。

ff* 工具的 -encoders 选项将显示已启用的编码器列表。

8 音频编码器

以下介绍部分当前可用的音频编码器。

8.1 aac

高级音频编码(AAC)编码器。

该编码器是 FFmpeg 中原生实现的默认 AAC 编码器。

8.1.1 选项
  • b:设置比特率(单位:比特 / 秒)。设置后自动激活恒定比特率(CBR)模式。未指定时,默认设为 128kbps。
  • q:设置可变比特率(VBR)模式的质量。此选项仅在使用 ffmpeg 命令行工具时有效。库接口用户请使用 global_quality。
  • cutoff:设置截止频率。未指定时,编码器将动态调整截止频率,以提高低比特率下的清晰度。
  • aac_coder:设置 AAC 编码器编码方法。可能的值:
    • twoloop:双循环搜索(TLS)方法。默认方法。该方法首先根据频带阈值设置量化器,然后尝试通过向所有量化器添加或减去特定值并微调部分单个量化器,找到最优组合。会根据 aac_is、aac_ms 和 aac_pns 是否启用自动调整。
    • anmr:平均噪声掩蔽比(ANMR)网格基方案。实验性编码器,目前画质较低、稳定性较差且速度慢,但具有潜力。目前不支持 aac_is 或 aac_pns 选项。不建议当前使用。
    • fast:恒定量化器方法。使用简化版双循环算法,不进行过多复杂调整。低比特率(低于 64kbps)时性能较差,但高比特率时性能更优且速度快得多。
  • aac_ms:设置中 / 侧(M/S)编码模式。默认值 “auto” 将自动对受益于此类编码的频带使用 M/S 编码。可设为 “enable” 强制对所有频带启用(主要用于调试),或设为 “disable” 禁用。
  • aac_is:设置强度立体声编码工具的使用。默认启用,将自动对相似的立体声频带对启用强度立体声(IS)编码(若有益)。可设为 “disable” 禁用(用于调试)。
  • aac_pns:使用感知噪声替代(PNS),在解码过程中用不易察觉的白噪声替换低熵高频带。默认启用,可设为 “disable” 禁用(用于调试)。
  • aac_tns:启用多抽头 FIR 滤波器,该滤波器覆盖高频带,以隐藏编码过程中的量化噪声,并在解码时还原。除了减少高频段令人不适的伪影外,还能降低高频段的熵,允许更多比特用于中低频段。默认启用,可设为 “disable” 禁用(用于调试)。
  • aac_ltp:启用长时预测(LTP)扩展,通过在帧间频带中扩展恒定谐波峰值,提高极低带宽场景(如语音或独奏钢琴音乐编码)的编码效率。此选项由 profile:a aac_low 隐含启用。需与 -ar 配合使用以降低采样率。
  • profile:设置编码配置文件。可能的值:
    • aac_low:默认,AAC “低复杂度” 配置文件。兼容性最强,画质良好。
    • mpeg2_aac_low:等同于 -profile:a aac_low -aac_pns 0。PNS 是随 MPEG4 规范引入的。
    • aac_ltp:长时预测配置文件,启用后将激活 aac_ltp 选项。随 MPEG4 引入。未指定时,默认设为 aac_low

8.2 ac3 和 ac3_fixed

AC-3 音频编码器。

这些编码器实现了 ATSC A/52:2010 和 ETSI TS 102 366 的部分内容。

ac3 编码器使用浮点运算,而 ac3_fixed 编码器仅使用定点整数运算。这并不意味着其中一个总是更快,而是两者可能分别更适合特定系统。ac3_fixed 编码器并非任何输出格式的默认编解码器,因此必须通过选项 -acodec ac3_fixed 显式指定才能使用。

8.2.1 AC-3 元数据

AC-3 元数据选项用于设置描述音频的参数,但在大多数情况下不影响音频编码本身。部分选项会直接影响或影响生成比特流的解码和播放,而其他选项仅用于提供信息。少数选项会在输出流中添加额外比特(否则这些比特可用于音频数据),从而影响输出质量。这些选项将在下方列表中通过注释说明。

这些参数在多个公开可用的文档中有详细描述:

  • A/52:2010 - 数字音频压缩(AC-3)(E-AC-3)标准
  • A/54 - ATSC 数字电视标准使用指南
  • 杜比元数据指南
  • 杜比数字专业编码指南
8.2.1.1 元数据控制选项
  • -per_frame_metadata boolean:允许逐帧元数据。指定编码器是否应检查每帧的元数据变化。
    • 0:初始化时设置的元数据值将用于流中的所有帧。(默认)
    • 1:可在编码每帧前更改元数据值。
8.2.1.2 下混电平
  • -center_mixlev level:中心声道下混电平。解码器将立体声下混时应用于中心声道的增益。仅当存在中心声道时,此字段才会写入比特流。值以比例因子指定。有效取值有 3 个:
    • 0.707:应用 -3dB 增益
    • 0.595:应用 -4.5dB 增益(默认)
    • 0.500:应用 -6dB 增益
  • -surround_mixlev level:环绕声道下混电平。解码器将立体声下混时应用于环绕声道的增益。仅当存在一个或多个环绕声道时,此字段才会写入比特流。值以比例因子指定。有效取值有 3 个:
    • 0.707:应用 -3dB 增益
    • 0.500:应用 -6dB 增益(默认)
    • 0.000:环绕声道静音
8.2.1.3 音频制作信息

音频制作信息是描述混音环境的可选信息。要么不写入任何字段,要么将两个字段都写入比特流。

  • -mixing_level number:混音电平。指定混音母带制作时制作环境中的峰值声压级(SPL)。有效取值为 80 - 111,或 -1(表示未知或未指示)。默认值为 -1,但如果要将音频制作信息写入比特流,则不能使用此值。因此,若 room_type 选项不是默认值,则 mixing_level 选项不能设为 -1。
  • -room_type type:房间类型。描述工作室或配音阶段最终混音时使用的均衡器。大房间指采用行业标准 X 曲线均衡器的配音阶段;小房间采用平直均衡器。仅当 mixing_level 选项和 room_type 选项均为默认值时,此字段才不会写入比特流。
    • 0:notindicated(未指示,默认)
    • 1:large(大房间)
    • 2:small(小房间)
8.2.1.4 其他元数据选项
  • -copyright boolean:版权指示符。指定音频是否受版权保护。
    • 0:off(无版权,默认)
    • 1:on(有版权)
  • -dialnorm value:对话归一化。指示节目平均对话电平低于数字 100% 满刻度(0 dBFS)的程度。此参数决定音频播放时的电平偏移,使对话平均音量达到预设电平。目的是匹配不同节目源的音量。值为 -31dB 时,音频播放时相对于源音量无电平变化。有效取值为 -31 至 -1 之间的整数,默认值为 -31。
  • -dsur_mode mode:杜比环绕模式。指定立体声信号是否使用杜比环绕(定向逻辑)。仅当音频流为立体声时,此字段才会写入比特流。使用此选项并不意味着编码器会实际应用杜比环绕处理。
    • 0:notindicated(未指示,默认)
    • 1:off(非杜比环绕编码)
    • 2:on(杜比环绕编码)
  • -original boolean:原始比特流指示符。指定音频是否来自原始源而非副本。
    • 0:off(非原始源)
    • 1:on(原始源,默认)
8.2.2 扩展比特流信息

扩展比特流选项是 A/52:2010 标准附录 D 中规定的备用比特流语法的一部分。分为两部分。若指定了某一组中的任意一个参数,将把该组中的所有值写入比特流。未指定但需写入的值将使用默认值。若写入了下混电平,且解码器支持备用比特流语法,则解码器将使用这些值,而非 center_mixlev 和 surround_mixlev 选项中指定的值。

8.2.2.1 扩展比特流信息 - 第 1 部分
  • -dmix_mode mode:首选立体声下混模式。允许用户选择 Lt/Rt(杜比环绕)或 Lo/Ro(标准立体声)作为首选立体声下混模式。
    • 0:notindicated(未指示,默认)
    • 1:ltrt(首选 Lt/Rt 下混)
    • 2:loro(首选 Lo/Ro 下混)
  • -ltrt_cmixlev level:Lt/Rt 中心声道下混电平。解码器在 Lt/Rt 模式下立体声
  • 左 / 右(Lt/Rt)模式中央声道混合增益。解码器在 Lt/Rt 模式下将多声道下混为立体声时,需施加给中央声道的增益量。

    取值增益效果
    1.414施加 +3dB 增益
    1.189施加 +1.5dB 增益
    1.000施加 0dB 增益
    0.841施加 -1.5dB 增益
    0.707施加 -3.0dB 增益
    0.595施加 -4.5dB 增益(默认值)
    0.500施加 -6.0dB 增益
    0.000静音中央声道

    -ltrt_surmixlev level

    左 / 右(Lt/Rt)模式环绕声道混合增益。解码器在 Lt/Rt 模式下将多声道下混为立体声时,需施加给环绕声道的增益量。

    取值增益效果
    0.841施加 -1.5dB 增益
    0.707施加 -3.0dB 增益
    0.595施加 -4.5dB 增益
    0.500施加 -6.0dB 增益(默认值)
    0.000静音环绕声道

    -loro_cmixlev level

    左 / 右(Lo/Ro)模式中央声道混合增益。解码器在 Lo/Ro 模式下将多声道下混为立体声时,需施加给中央声道的增益量。

    取值增益效果
    1.414施加 +3dB 增益
    1.189施加 +1.5dB 增益
    1.000施加 0dB 增益
    0.841施加 -1.5dB 增益
    0.707施加 -3.0dB 增益
    0.595施加 -4.5dB 增益(默认值)
    0.500施加 -6.0dB 增益
    0.000静音中央声道

    -loro_surmixlev level

    左 / 右(Lo/Ro)模式环绕声道混合增益。解码器在 Lo/Ro 模式下将多声道下混为立体声时,需施加给环绕声道的增益量。

    取值增益效果
    0.841施加 -1.5dB 增益
    0.707施加 -3.0dB 增益
    0.595施加 -4.5dB 增益
    0.500施加 -6.0dB 增益(默认值)
    0.000静音环绕声道

8.2.2.2 扩展码流信息 - 第二部分

-dsurex_mode mode杜比环绕声 EX 模式。指示码流是否采用杜比环绕声 EX 技术(将 7.1 声道矩阵编码为 5.1 声道)。注意:使用本选项并不代表编码器会实际执行杜比环绕声 EX 处理流程。

参数值取值含义说明
0notindicated未指定(默认值)
1on杜比环绕声 EX 关闭
2off杜比环绕声 EX 开启

-dheadphone_mode mode杜比耳机模式。指示码流是否采用杜比耳机编码技术(将多声道矩阵编码为双声道,适配耳机播放)。注意:使用本选项并不代表编码器会实际执行杜比耳机处理流程。

参数值取值含义说明
0notindicated未指定(默认值)
1on杜比耳机模式 关闭
2off杜比耳机模式 开启

-ad_conv_type type模数转换器类型。指示音频信号是否经过高清兼容数字音频(HDCD)模数转换流程。

参数值取值含义说明
0standard标准模数转换器(默认值)
1hdcdHDCD 模数转换器

8.2.3 其他 AC-3 编码选项

-stereo_rematrixing boolean立体声矩阵重编码。启用 / 禁用针对立体声输入的矩阵重编码功能。这是 AC-3 编码的可选特性,通过选择性地将左 / 右声道编码为中 / 侧声道的方式提升音频质量。该选项默认开启,除非用于测试目的,否则强烈建议保持启用状态。

cutoff frequency设置低通滤波截止频率。若未指定该参数,编码器会根据其他各类编码参数自动选择默认截止频率。

8.2.4 仅浮点型编码器的 AC-3 编码选项

以下选项仅适用于浮点型 AC-3 编码器,在定点型编码器中无效 —— 因定点型编码器未实现对应的功能特性。

-channel_coupling boolean启用 / 禁用声道耦合功能。这是 AC-3 编码的可选特性,通过将多个声道的高频信息合并到单个声道进行编码,以此提升音频质量。合并后,各声道高频信息在频域和时域的编码精度会有所降低,从而节省出更多比特用于低频信号编码,同时保留足够的高频信息以实现解码还原。该选项在浮点型编码器中默认开启,除非用于测试或需要提升编码速度,否则建议保持启用状态。

参数值取值含义说明
-1auto由编码器自动选择(默认值)
0off禁用声道耦合
1on启用声道耦合

-cpl_start_band number耦合起始频段。设置声道耦合的起始频段,取值范围为 1-15。若设置的数值超过码流的带宽上限,该值会自动降低至耦合结束频段的前一个频段。若设置为自动模式(auto),编码器会根据比特率、采样率和声道布局自动确定起始频段。注意:若禁用声道耦合功能,本选项将失效。

参数值取值含义说明
-1auto由编码器自动选择(默认值)

8.3 FLAC 编码器

FLAC(无损音频编码)编码器

8.3.1 选项

FFmpeg 的 FLAC 编码器支持以下参数选项:

compression_level设置压缩等级。若未显式配置其他相关参数,编码器会根据该压缩等级自动选择默认参数。取值范围为 0-12,默认值为 5。

frame_size设置每声道的帧大小(单位:采样点)。

lpc_coeff_precision设置线性预测编码(LPC)系数精度,取值范围为 1-15,默认值为 15。

lpc_type设置第一阶段线性预测编码算法,可选值如下:

  • none:不使用线性预测编码
  • fixed:固定线性预测编码系数
  • levinson:莱文森算法
  • cholesky:乔列斯基分解算法

lpc_passes设置线性预测分析过程中,乔列斯基分解算法的迭代次数。

min_partition_order设置最小分区阶数。

max_partition_order设置最大分区阶数。

prediction_order_method预测阶数选择方法,可选值如下:

  • estimation:估计算法
  • 2level:二级算法
  • 4level:四级算法
  • 8level:八级算法
  • search:暴力搜索算法

ch_mode声道模式,可选值如下:

  • auto:编码器为每一帧自动选择声道模式
  • indep:各声道独立编码
  • left_side:左声道模式
  • right_side:右声道模式
  • mid_side:中 / 侧声道模式

exact_rice_parameters设置莱斯参数的计算方式(精确计算或近似计算)。若设置为 1,则启用精确计算模式 —— 该模式会略微降低编码速度,但能小幅提升压缩效率。

multi_dim_quant多维量化。若设置为 1,编码器会在第一阶段线性预测编码后,执行第二阶段线性预测算法以优化系数。该模式编码速度较慢,但可小幅提升压缩效率。

8.4 Opus 编码器

这是 FFmpeg 原生的 Opus 格式编码器。目前该编码器仍处于开发阶段,仅实现了 Opus 编解码标准中的 CELT 编码部分。其编码质量通常低于 libopus 编码器,最佳情况下也仅能与 libopus 编码器持平。

8.4.1 选项

b设置比特率(单位:比特 / 秒)。若未指定该参数,编码器会根据声道数量和声道布局自动估算合适的比特率。

opus_delay设置最大编码延迟(单位:毫秒)。若延迟设置低于 20 毫秒,编码质量会快速下降。

8.5 libfdk_aac 编码器

libfdk-aac 是高级音频编码(AAC)的编码器封装,基于安卓项目中的弗劳恩霍夫 FDK AAC 编码代码开发。

编译配置时,需确保系统中已安装 libfdk-aac 的头文件和库文件,且需显式添加配置参数 --enable-libfdk-aac。该库与 GPL 协议不兼容,因此若需启用 GPL 协议相关功能,需使用以下配置参数:--enable-gpl --enable-nonfree --enable-libfdk-aac

该编码器支持 AAC-HE 编码配置文件。

通过vbr参数或flags +qscale参数启用的可变比特率(VBR)编码功能仍处于实验阶段,仅支持部分参数组合。

仅当 libfdk-aac 库版本≥0.1.3 时,才支持 7.1 声道音频编码。

更多详情请参考 fdk-aac 项目官网:http://sourceforge.net/p/opencore-amr/fdk-aac/

8.5.1 选项

以下选项映射至 FFmpeg 的通用编解码参数:

b设置比特率(单位:比特 / 秒)。若未显式指定,编码器会根据所选的编码配置文件自动设置合适的比特率。注意:若启用可变比特率(VBR)模式,本参数将失效。

ar设置音频采样率(单位:赫兹)。

channels设置音频声道数量。

flags +qscale启用固定质量的可变比特率(VBR)编码模式。注意:当vbr参数值为正数时,可变比特率模式会被隐式启用。

cutoff设置截止频率。若未指定(或显式设置为 0),编码器会使用库函数自动计算的截止频率值,默认值为 0。

profile设置音频编码配置文件,可选值如下:

  • aac_low:低复杂度 AAC 编码(LC)
  • aac_he:高效 AAC 编码(HE-AAC)
  • aac_he_v2:高效 AAC 编码版本 2(HE-AACv2)
  • aac_ld:低延迟 AAC 编码(LD)
  • aac_eld:增强型低延迟 AAC 编码(ELD)

若未指定,默认使用aac_low配置文件。

以下是 libfdk_aac 编码器的私有选项:

afterburner设置是否启用 “加力” 优化功能。设置为 1 时启用,设置为 0 时禁用。该功能可提升编码质量,但会增加处理器运算负载,默认值为 1。

eld_sbr设置是否为增强型低延迟编码(ELD)启用频谱带宽复制(SBR)功能。设置为 1 时启用,设置为 0 时禁用,默认值为 0。

eld_v2设置是否为增强型低延迟编码版本 2(ELDv2)启用 ELDv2 功能(针对 ELD 立体声信号的 LD-MPS 扩展)。设置为 1 时启用,设置为 0 时禁用。注意:仅当 fdk-aac 库版本 (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) > (4.0.0) 时,该选项才可用,默认值为 0。

signaling设置频谱带宽复制(SBR)/ 参数立体声(PS)的信令模式,可选值如下:

  • default:隐式选择信令模式(默认使用显式分层信令;若禁用全局头,则使用隐式信令)
  • implicit:隐式向后兼容信令
  • explicit_sbr:显式 SBR 信令 + 隐式 PS 信令
  • explicit_hierarchical:显式分层信令

默认值为default

latm设置是否输出 LATM/LOAS 封装格式的数据。设置为 1 时启用,设置为 0 时禁用,默认值为 0。

header_period设置在 LATM/LOAS 传输层中,内嵌配置缓冲区的 StreamMuxConfig 和 PCE 参数的重复周期(单位:帧)。该参数需为 16 位非负整数,默认值为 0。

vbr设置可变比特率(VBR)模式等级,取值范围为 1-5。等级 1 对应最低质量(但仍具备良好效果),等级 5 对应最高质量;设置为 0 时禁用可变比特率模式,启用恒定比特率(CBR)模式。注意:目前仅aac_low配置文件支持可变比特率编码。

可变比特率模式 1-5 对应的平均比特率参考如下:

等级参考平均比特率
132 kbps / 声道
240 kbps / 声道
348-56 kbps / 声道
464 kbps / 声道
5约 80-96 kbps / 声道

默认值为 0。

frame_length设置音频帧长度(单位:采样点)。默认值为编码器库的内置默认值,支持的取值范围请参考对应库文件的说明文档。

8.5.2 示例

将音频文件转换为可变比特率 AAC 编码,并封装为 M4A(MP4)格式:

ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a

将音频文件转换为恒定比特率 64kbps 的 AAC 编码,采用高效 AAC 编码配置文件:

ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a

8.6 liblc3 编码器

liblc3 是低复杂度通信编码(LC3)的编码器封装。

编译配置时,需确保系统中已安装 liblc3 的头文件和库文件,且需显式添加配置参数 --enable-liblc3

该编码器支持蓝牙技术联盟(SIG)为低功耗音频(LE Audio)协议制定的 LC3 编码标准,同时支持 LC3plus 的以下特性:

  • 支持 2.5 毫秒和 5 毫秒的帧时长
  • 支持高分辨率模式、48kHz 和 96kHz 采样率

更多详情请参考 liblc3 项目官网:https://github.com/google/liblc3

8.6.1 选项

以下选项映射至 FFmpeg 的通用编解码参数:

b bitrate设置比特率(单位:比特 / 秒)。对于选定的帧时长,该参数将决定编码后帧的固定大小。

ar frequency设置音频采样率(单位:赫兹)。

channels设置音频声道数量。

frame_duration设置音频帧时长(单位:毫秒),默认值为 10 毫秒。支持的帧时长包括 2.5ms、5ms、7.5ms 和 10ms:

  • LC3 编码(蓝牙低功耗音频标准)仅支持 7.5ms 和 10ms
  • LC3plus 编码支持 2.5ms、5ms 和 10ms

注意:10ms 帧时长同时兼容 LC3 和 LC3plus 标准,采用该时长编码的码流可同时被两种标准的解码器识别。

high_resolution boolean设置是否启用高分辨率模式。设置为 1 时启用,该模式支持 LC3plus 的所有帧时长,且仅适用于 48kHz 和 96kHz 采样率。编码器会在采样率低于 48kHz 时自动禁用该模式,在采样率为 96kHz 时自动启用该模式。该模式建议在高比特率场景下使用 —— 启用后,音频带宽可扩展至奈奎斯特频率;而在 48kHz 采样率下,传统 LC3 编码的带宽上限为 20kHz。

8.7 libmp3lame 编码器

LAME(Lame Ain’t an MP3 Encoder)是 MP3 编码器的封装。

编译配置时,需确保系统中已安装 libmp3lame 的头文件和库文件,且需显式添加配置参数 --enable-libmp3lame

如需定点型 MP3 编码器,可参考 libshine 编码器 —— 但其编码质量相对较低。

8.7.1 选项

libmp3lame 编码器封装支持以下选项,括号内为对应的 LAME 编码器原生参数:

b (-b)设置恒定比特率(CBR)或平均比特率(ABR)模式下的比特率(单位:比特 / 秒)。注意:LAME 编码器的-b参数单位为千比特 / 秒。

q (-V)设置可变比特率(VBR)模式下的固定质量参数。注意:该选项仅在 FFmpeg 命令行工具中有效;若通过库接口调用,需使用global_quality参数。

compression_level (-q)设置算法质量等级,取值范围为 0-9。等级 0 对应最高质量但编码速度最慢,等级 9 对应最快编码速度但质量最差。

cutoff (--lowpass)设置低通滤波截止频率。若未指定,编码器会动态调整截止频率。

reservoir设置是否启用比特池功能。设置为 1 时启用,默认值为 1。LAME 编码器默认启用该功能,可通过--nores参数禁用。

joint_stereo (-m j)设置是否启用联合立体声编码。编码器会逐帧选择使用普通立体声或中 / 侧立体声编码模式,默认值为 1。

abr (--abr)设置是否启用平均比特率(ABR)模式。设置为 1 时启用。注意:LAME 编码器的--abr参数用于指定目标比特率,而 FFmpeg 的该选项仅用于启用 ABR 模式,仍需通过b参数设置目标比特率。

copyright (-c)设置是否添加 MPEG 音频版权标识。设置为 1 时启用,默认值为 0(禁用)。

original (-o)设置是否添加 MPEG 音频原创标识。设置为 1 时启用,默认值为 1(启用)。

8.8 libopencore-amrnb 编码器

开放核心自适应多速率窄带编码器(OpenCORE Adaptive Multi-Rate Narrowband)。

编译配置时,需确保系统中已安装 libopencore-amrnb 的头文件和库文件,且需显式添加配置参数 --enable-libopencore-amrnb --enable-version3

该编码器仅支持单声道音频编码。官方标准仅支持 8000Hz 采样率,若需使用其他采样率,需将strict参数设置为unofficial或更低等级。

8.8.1 选项

b设置比特率(单位:比特 / 秒)。仅支持以下比特率取值,若设置其他值,libavcodec 库会自动四舍五入到最近的有效比特率:4750、5150、5900、6700、7400、7950、10200、12200

dtx设置是否启用不连续传输(DTX)功能(即无音频信号时生成舒适噪声)。设置为 1 时启用,默认值为 0(禁用)。

8.9 libopus 编码器

libopus 是交互式音频编码标准(Opus Interactive Audio Codec)的编码器封装。

编译配置时,需确保系统中已安装 libopus 的头文件和库文件,且需显式添加配置参数 --enable-libopus

8.9.1 选项映射

libopus 编码器的大部分选项均参考自 opus-tools 工具集中的 opusenc 命令参数。以下为选项映射表,括号内为对应的 opusenc 原生参数:

b (bitrate)设置比特率(单位:比特 / 秒)。注意:FFmpeg 的b参数单位为比特 / 秒,而 opusenc 的bitrate参数单位为千比特 / 秒。

vbr (vbr, hard-cbr, and cvbr)设置可变比特率(VBR)模式,FFmpeg 的vbr参数取值及对应 opusenc 参数如下:

  • off (hard-cbr):启用恒定比特率(CBR)编码
  • on (vbr):启用可变比特率(VBR)编码(默认值)
  • constrained (cvbr):启用受限可变比特率(CVBR)编码

compression_level (comp)设置编码算法复杂度,取值范围为 0-10。等级 0 编码速度最快但质量最低,等级 10 质量最高但编码速度最慢,默认值为 10。

frame_duration (framesize)设置最大帧大小(即帧时长,单位:毫秒),仅支持以下取值:2.5、5、10、20、40、60。帧时长越小,编码延迟越低,但在相同比特率下质量越差;帧时长超过 20 毫秒仅在低比特率场景下有实际意义,默认值为 20 毫秒。

packet_loss (expect-loss)设置预期数据包丢失率(百分比),默认值为 0。

fec (n/a)设置是否启用内嵌前向纠错(FEC)功能。注意:需将packet_loss参数设置为非零值,该功能才能生效 —— 前向纠错附加数据的生成频率与预期丢包率成正比,默认值为禁用。

application (N.A.)设置编码的目标应用场景,可选值如下:

  • voip:优化语音清晰度(适用于网络电话场景)
  • audio:优化音频保真度(默认值,适用于音乐播放场景)
  • lowdelay:限制为最低延迟模式(禁用语音优化模式)

cutoff (N.A.)设置截止带宽(单位:赫兹),仅支持以下取值:4000、6000、8000、12000、20000,分别对应窄带、中带、宽带、超宽带和全带宽。默认值为 0(禁用截止滤波)。注意:当比特率低于 15kbps 时,libopus 编码器会强制使用宽带截止;若启用lowdelay应用模式(仅 CELT 编码),则不受此限制。

mapping_family (mapping_family)设置编码器使用的声道映射类型,默认值为 - 1:

  • 对于单声道和立体声输入,使用映射类型 0
  • 对于其他声道布局,使用默认映射

默认配置同时会禁用 libopus 编码器的环绕声掩蔽和低频效果(LFE)带宽优化功能,且要求输入声道数不超过 8 个。

其他可选取值说明:

  • 0:适用于单声道和立体声
  • 1:适用于环绕声(启用掩蔽和 LFE 带宽优化)
  • 255:适用于独立码流(声道布局未指定)

apply_phase_inv (N.A.)(要求 libopus 库版本≥1.2)设置是否启用强度立体声的相位反转功能。设置为 0 时禁用 —— 可提升单声道下混的音质,但会小幅降低普通立体声的音质;默认值为 1(启用)。

8.10 libshine 编码器

libshine 是定点型 MP3 编码器的封装。

该编码器在无浮点运算单元(FPU)的平台(如 armel 架构处理器、部分手机和平板设备)上具备更优的性能表现。但其设计初衷以性能优先而非质量优先,因此编码质量无法与 LAME 等专业级编码器相媲美。此外,根据项目官网说明,该编码器的代码开发时间较早,且项目曾中断维护至少 5 年,可能存在未修复的缺陷。

该编码器仅支持立体声和单声道输入,且仅支持恒定比特率(CBR)编码模式。

原始项目(最后更新于 2007 年初)地址:http://sourceforge.net/projects/libshine-fxp/FFmpeg 仅支持 Savonet/Liquidsoap 项目维护的更新分支,地址:https://github.com/savonet/shine

编译配置时,需确保系统中已安装 libshine 的头文件和库文件,且需显式添加配置参数 --enable-libshine

相关编码器可参考 libmp3lame。

8.10.1 选项

libshine 编码器封装支持以下选项,括号内为对应的 shineenc 命令参数:

b (-b)设置恒定比特率(CBR)模式下的比特率(单位:比特 / 秒)。注意:shineenc 命令的-b参数单位为千比特 / 秒。

8.11 libtwolame 编码器

libtwolame 是 MP2 编码器的封装。

编译配置时,需确保系统中已安装 libtwolame 的头文件和库文件,且需显式添加配置参数 --enable-libtwolame

8.11.1 选项

libtwolame 编码器封装支持以下选项,括号内为对应的 twolame 命令参数:

b (-b)设置恒定比特率(CBR)模式下的比特率(单位:比特 / 秒)。注意:twolame 命令的-b参数单位为千比特 / 秒,默认值为 128k。

q (-V)设置实验性可变比特率(VBR)编码的质量等级,取值范围为 - 50 至 50,有效范围为 - 10 至 10。数值越高,编码质量越好。注意:该选项仅在 FFmpeg 命令行工具中有效;若通过库接口调用,需使用global_quality参数。

mode (--mode)设置输出音频的编码模式,可选值如下:

  • auto:根据输入音频自动选择模式(默认值)
  • stereo:立体声模式
  • joint_stereo:联合立体声模式
  • dual_channel:双声道模式
  • mono:单声道模式

psymodel (--psyc-mode)设置编码时使用的心理声学模型,取值范围为 - 1 至 4(包含边界值)。数值越高,编码质量越好,默认值为 3。

energy_levels (--energy)设置是否启用能量等级扩展功能。设置为 1 时启用,默认值为 0(禁用)。

error_protection (--protect)设置是否启用循环冗余校验(CRC)错误保护功能。设置为 1 时启用,默认值为 0(禁用)。

copyright (--copyright)设置是否添加 MPEG 音频版权标识。设置为 1 时启用,默认值为 0(禁用)。

original (--original)设置是否添加 MPEG 音频原创标识。设置为 1 时启用,默认值为 0(禁用)。

8.12 libvo-amrwbenc 编码器

视觉开源自适应多速率宽带编码器(VisualOn Adaptive Multi-Rate Wideband)。

编译配置时,需确保系统中已安装 libvo-amrwbenc 的头文件和库文件,且需显式添加配置参数 --enable-libvo-amrwbenc --enable-version3

该编码器仅支持单声道音频编码。官方标准仅支持 16000Hz 采样率,若需使用其他采样率,需将strict参数设置为unofficial或更低等级。

8.12.1 选项

b设置比特率(单位:比特 / 秒)。仅支持以下比特率取值,若设置其他值,libavcodec 库会自动四舍五入到最近的有效比特率:6600、8850、12650、14250、15850、18250、19850、23050、23850

dtx设置是否启用不连续传输(DTX)功能(即无音频信号时生成舒适噪声)。设置为 1 时启用,默认值为 0(禁用)。

8.13 libvorbis 编码器

libvorbis 是奥比斯音频编码(Vorbis)的编码器封装。

编译配置时,需确保系统中已安装 libvorbisenc 的头文件和库文件,且需显式添加配置参数 --enable-libvorbis

8.13.1 选项

libvorbis 编码器封装支持以下选项,括号内为对应的 oggenc 命令参数:

如需更精准、全面的 libvorbis 参数说明,可参考 libvorbisenc 库和 oggenc 命令的官方文档,详见:http://xiph.org/vorbis/http://wiki.xiph.org/Vorbis-tools 及 oggenc (1) 手册。

b (-b)设置平均比特率(ABR)模式下的比特率(单位:比特 / 秒)。注意:oggenc 命令的-b参数单位为千比特 / 秒。

q (-q)设置可变比特率(VBR)模式下的固定质量参数,取值为浮点数,范围为 - 1.0 至 10.0。数值越高,编码质量越好,默认值为 3.0。注意:该选项仅在 FFmpeg 命令行工具中有效;若通过库接口调用,需使用global_quality参数。

cutoff (--advanced-encode-option lowpass_frequency=N)设置截止带宽(单位:赫兹),设置为 0 时禁用截止滤波。注意:oggenc 命令的对应参数单位为千赫兹,默认值为 0(禁用)。

minrate (-m)设置最低比特率(单位:比特 / 秒)。注意:oggenc 命令的-m参数单位为千比特 / 秒。

maxrate (-M)设置最高比特率(单位:比特 / 秒)。注意:该参数仅在平均比特率(ABR)模式下生效,oggenc 命令的-M参数单位为千比特 / 秒。

iblock (--advanced-encode-option impulse_noisetune=N)设置脉冲块的噪声基底偏置,取值为浮点数,范围为 - 15.0 至 0.0。负偏置会指示编码器重点优化音频瞬态信号的清晰度,但代价是比特率升高。

8.14 MJPEG 编码器

运动图像专家组联合图像专家组编码器(Motion JPEG encoder)

8.14.1 选项

huffman设置霍夫曼编码策略,可选值如下:

  • default:使用默认霍夫曼编码表(默认策略)
  • optimal:计算并使用优化后的霍夫曼编码表

8.15 WavPack 编码器

无损音频编码编码器(WavPack lossless audio encoder)

8.15.1 选项

括号内为对应的 WavPack 命令行工具参数。

8.15.1.1 通用选项

以下通用选项适用于该编码器,仅针对该编码器的特殊说明如下;选项的通用含义请参考《编解码器选项》章节。

frame_size (--blocksize)该编码器的帧大小取值范围为 128 至 131072。默认值由采样率和声道数自动计算,具体计算公式详见源码文件libavcodec/wavpackenc.c

compression_level (-f, -h, -hh, and -x)压缩等级参数。

8.15.1.2 私有选项

joint_stereo (-j)设置是否启用联合立体声编码,可选值如下:

  • on (1):强制使用中 / 侧声道编码模式
  • off (0):强制使用左 / 右声道编码模式
  • auto:由编码器自动选择编码模式

optimize_mono设置是否启用单声道优化功能。该选项仅对非单声道音频流有效,可选值如下:

  • on:启用
  • off:禁用

9 视频编码器

本章介绍当前可用的部分视频编码器。

9.1 a64_multi、a64_multi5 编码器

A64 / 康懋达 64(Commodore 64)多色字符集编码器。其中 a64_multi5 编码器为扩展版本,支持第 5 种颜色(彩色随机存取存储器,colram)。

9.2 Cinepak 编码器

Cinepak 编码器(又称 CVID 编码器),兼容 Windows 3.1 系统和老式 MacOS 系统。

9.2.1 选项

g integer关键帧间隔。编码器至少会每隔-g帧插入一个关键帧,部分场景下插入间隔会小于该值。

q:v integer质量因子。数值越低,编码质量越好;数值越高,输出比特率越低。以下表格为编码测试文件akiyo_cif.y4m时,不同-q:v取值(搭配-g 100参数)对应的输出比特率参考:

-q:v 取值输出比特率
11918 kb/s
21735 kb/s
41500 kb/s
101041 kb/s
20826 kb/s
40553 kb/s
100394 kb/s
200312 kb/s
400266 kb/s
1000237 kb/s

max_extra_cb_iterations integer码本额外重计算的最大迭代次数。次数越多,编码质量越好,但速度越慢。

skip_empty_cb boolean设置是否忽略空码本以节省字节数。启用后可能会导致老式 MacOS 解码器无法兼容。

max_strips integermin_strips integer设置编码条带数量的最大值和最小值。更大的取值范围有时可提升编码质量:条带数量越多,质量通常越好,但会占用更多比特;条带数量越少,关键帧生成频率往往越高。老式系统兼容的取值范围为 1-3。

strip_number_adaptivity integer设置相邻帧之间条带数量的最大变化幅度。数值越高,编码质量越好,但速度越慢。

9.3 FFv1 编码器

FFmpeg 视频编码格式 1 编码器(FFv1 Encoder)

9.3.1 选项

FFmpeg 的 FFv1 编码器支持以下参数选项:

context设置上下文大小。0 为小上下文(默认值),1 为大上下文。

coder设置编码器类型,可选值如下:

  • rice:哥伦布 - 莱斯编码器
  • range_def:默认表范围编码器
  • range_tab:自定义表范围编码器

slicecrc设置切片循环冗余校验(CRC)模式,可选值如下:

  • -1:自动模式(默认值)
  • 1:使用初始值和最终值均为 0 的 CRC 校验
  • 2:使用初始值和最终值非 0 的 CRC 校验

qtable设置量化表,可选值如下:

  • default:自动选择默认量化表
  • 8bit:使用 8 位默认量化表
  • greater8bit:使用大于 8 位的默认量化表

remap_optimizer设置编码器优化重映射表的运算强度,取值范围为 0-5,默认值为 3。

9.4 GIF 编码器

图形交换格式图像 / 动画编码器(GIF image/animation encoder)

9.4.1 选项

gifflags integer设置 GIF 编码标志位,可选子选项如下:

  • offsetting:启用图像偏移功能(默认启用)
  • transdiff:启用帧间透明度检测功能(默认启用)

gifimage integer设置是否为每一帧输出完整的 GIF 图像,而非生成动画 GIF。默认值为 0(禁用)。

global_palette integer设置是否在 GIF 全局头中写入调色板(在可行的情况下)。若禁用该选项,即使存在全局调色板,每一帧也会强制写入独立调色板。默认值为 1(启用)。

9.5 Hap 编码器

维德沃克斯视频编码格式编码器(Vidvox Hap video encoder)

9.5.1 选项

format integer指定 Hap 编码格式,可选值如下:

  • hap
  • hap_alpha
  • hap_q

默认值为hap

chunks integer设置将每帧图像分割为块的数量,取值范围为 1-64。该参数可实现大尺寸帧的多线程解码,但可能会增加数据传输率。编码器可能会自动调整该数值,以确保帧图像被均匀分割。默认值为 1。

compressor integer指定第二阶段压缩算法。若设置为none,块数量会被限制为 1—— 因未压缩的分块帧无性能优势,可选值如下:

  • none
  • snappy

默认值为snappy

9.6 jpeg2000 编码器

FFmpeg 原生的 JPEG2000 编码器默认采用有损编码,可通过-q:v参数设置编码质量;若需启用无损编码,需将-pred参数设置为 1。

9.6.1 选项

format integer设置输出格式,可选值为j2kjp2(默认值)。选择jp2格式可支持非 RGB 像素格式。

tile_width integer设置编码瓦片宽度,取值范围为 1-1073741824,默认值为 256。

tile_height integer设置编码瓦片高度,取值范围为 1-1073741824,默认值为 256。

pred integer设置离散小波变换(DWT)类型,可选值如下:

  • dwt97int:有损变换
  • dwt53:无损变换

默认值为dwt97int

sop boolean设置是否在每个数据包头部添加 SOP 标记。默认值为禁用。

eph boolean设置是否在每个数据包头部末尾添加 EPH 标记。默认值为禁用。

prog integer设置编码器使用的累进编码顺序,可选值如下:

  • lrcp
  • rlcp
  • rpcl
  • pcrl
  • cprl

默认值为lrcp

layer_rates string默认情况下,若未设置该参数,编码器会基于质量指标进行压缩;设置该参数后,编码器会基于压缩比进行压缩,可指定每一层的压缩比。第l层的压缩比表示前l层数据量占总文件大小的比例。

示例用法

ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k

该命令将图像压缩为 3 层结构:

  • 第 1 层数据压缩比为 1000:1
  • 前 2 层数据压缩比为 100:1
  • 3 层全部使用时,包含完整图像数据

9.7 librav1e 编码器

rav1e AV1 编码器封装

编译配置时,需确保系统中已安装 rav1e 的头文件和库文件,且需显式添加配置参数 --enable-librav1e

9.7.1 选项

qmax设置比特率模式下使用的最大量化参数。

qmin设置比特率模式下使用的最小量化参数。

qp启用量化参数模式,设置固定量化参数进行编码,取值范围为 0-255。

speed选择编码速度预设,取值范围为 0-10。

tiles设置编码时使用的瓦片数量。

tile-rows设置编码时使用的瓦片行数。

tile-columns设置编码时使用的瓦片列数。

rav1e-params通过键值对列表(键值对之间用冒号分隔)设置 rav1e 编码器的参数。参数列表可参考rav1e --help命令的输出。

示例

通过-rav1e-params参数指定 librav1e 编码器选项:

ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4

9.8 libaom-av1 编码器

libaom AV1 编码器封装

编译配置时,需确保系统中已安装 libaom 的头文件和库文件,且需显式添加配置参数 --enable-libaom

9.8.1 选项

该编码器封装支持以下标准 libavcodec 参数:

b设置目标比特率(单位:比特 / 秒)。默认启用可变比特率(VBR)模式;若同时将maxrateminrate设置为相同值,则启用恒定比特率(CBR)模式;若同时设置crf参数,则启用受限质量(CQ)模式。

g keyint_min设置关键帧放置策略。g参数(GOP 大小)设置关键帧之间的最大间隔;若设置为 0,输出码流将仅包含内帧(I 帧)。keyint_min参数(最小关键帧间隔)仅在与g参数取值相同时生效 —— 此时关键帧会以固定间隔插入。默认未设置该参数,编码器可自由选择关键帧位置。

qmin qmax设置最小 / 最大量化参数值,取值范围为 0-63。注意:该取值与 AV1 标准实际使用的量化参数值不匹配,需将该值除以 4,才能映射为标准量化参数值。默认无限制。

minrate maxrate bufsize rc_init_occupancy设置码率控制缓冲参数。若未设置,默认启用无约束可变比特率模式。

threads设置编码时使用的线程数。注意:需同时设置tilesrow-mt参数,才能充分利用指定数量的线程。默认值为宿主机的硬件线程数。

profile设置编码配置文件。默认根据输入视频的比特深度和色度抽样格式自动选择。

该编码器封装还包含以下私有选项:

cpu-used设置质量 / 编码速度的权衡等级,取值范围为 0-8。数值越高,编码速度越快,质量越差。默认值为 1(速度较慢,质量较高)。

auto-alt-ref设置是否启用备选参考帧功能。默认值为编码器库的内置默认值。

arnr-max-frames (frames)设置备选参考帧降噪的最大帧数。默认值为 - 1。

arnr-strength (strength)设置备选参考帧降噪滤波器强度,取值范围为 - 1 至 6。默认值为 - 1。

aq-mode (aq-mode)设置自适应量化模式,可选值如下:

  • none (0):禁用
  • variance (1):基于方差的自适应量化
  • complexity (2):基于复杂度的自适应量化
  • cyclic (3):循环刷新自适应量化

tune (tune)设置编码器优化的失真度量标准,默认值为psnr,可选值如下:

  • psnr (0):峰值信噪比优化
  • ssim (1):结构相似性优化

lag-in-frames设置编码器进行帧类型选择和码率控制时的前瞻帧数上限。默认值为编码器库的内置默认值。

error-resilience启用抗错误特性,可选值如下:

  • default:提升整帧丢失时的恢复能力

默认值为禁用。

crf设置恒定质量(无比特率限制)和受限质量(有最高比特率限制)模式下的质量 / 体积权衡参数,取值范围为 0-63。数值越高,质量越差,输出体积越小。注意:仅当显式设置该参数时生效;默认情况下,编码器仅基于比特率目标进行编码。

static-thresh设置块跳过阈值。低于该阈值的块会被编码器跳过,取值为非负整数,默认值为 0(无块被跳过)。

drop-threshold设置帧丢弃阈值。当码率控制缓冲区数据量低于该阈值的百分比时,编码器会丢弃帧直至缓冲区数据量恢复至阈值以上。默认值为 0(不丢弃任何帧)。

denoise-noise-level (level)设置用于颗粒合成的降噪强度。若未设置或设置为 0,颗粒合成功能禁用。

denoise-block-size (pixels)设置用于颗粒合成的降噪块大小。若未设置,AV1 编码器会使用默认值 32。

undershoot-pct (pct)设置目标比特率的最低欠冲百分比,取值范围为 - 1 至 100。默认值为 - 1。

overshoot-pct (pct)设置目标比特率的最高过冲百分比,取值范围为 - 1 至 1000。默认值为 - 1。

minsection-pct (pct)设置图像组(GOP)比特率相对于目标比特率的最小变化百分比。若未设置,libaomenc 封装会自动计算:(minrate * 100 / bitrate),取值范围为 - 1 至 100。默认值为 - 1(未设置)。

maxsection-pct (pct)设置图像组(GOP)比特率相对于目标比特率的最大变化百分比。若未设置,libaomenc 封装会自动计算:(maxrate * 100 / bitrate),取值范围为 - 1 至 5000。默认值为 - 1(未设置)。

frame-parallel (boolean)启用帧并行解码特性。默认值为启用。

tiles设置输入视频编码时使用的瓦片数量(格式为列数 x 行数)。瓦片数量越多,编解码的并行度越高,但编码效率可能下降。默认值为根据输入视频尺寸确定的最小瓦片数(对于分辨率≤4K 的视频,默认值为 1x1,即单个瓦片)。

tile-columns tile-rows设置瓦片的列数和行数(以 2 的对数形式表示)。该参数为兼容 libvpx/VP9 编码器而设计。

row-mt(要求 libaom 库版本≥1.0.0-759-g90a15f4f2)启用基于行的多线程编码。默认值为禁用。

enable-cdef (boolean)启用受限方向增强滤波器(CDEF)。libaom-av1 编码器默认启用该功能。

enable-restoration (boolean)启用环路恢复滤波器。libaom-av1 编码器默认启用该功能。

enable-global-motion (boolean)启用块预测的全局运动估计功能。默认值为启用。

enable-intrabc (boolean)启用内块预测的块复制模式。该模式适用于屏幕内容编码,默认值为启用。

enable-rect-partitions (boolean)(要求 libaom 库版本≥v2.0.0)启用矩形分区模式。默认值为启用。

enable-1to4-partitions (boolean)(要求 libaom 库版本≥v2.0.0)启用 1:4/4:1 分区模式。默认值为启用。

enable-ab-partitions (boolean)(要求 libaom 库版本≥v2.0.0)启用 AB 形状分区模式。默认值为启用。

enable-angle-delta (boolean)(要求 libaom 库版本≥v2.0.0)启用角度增量内预测模式。默认值为启用。

enable-cfl-intra (boolean)(要求 libaom 库版本≥v2.0.0)启用基于亮度分量预测色度分量的内预测模式。默认值为启用。

enable-filter-intra (boolean)(要求 libaom 库版本≥v2.0.0)启用滤波内预测器。默认值为启用。

enable-intra-edge-filter (boolean)(要求 libaom 库版本≥v2.0.0)启用内边缘滤波器。默认值为启用。

enable-smooth-intra (boolean)(要求 libaom 库版本≥v2.0.0)启用平滑内预测模式。默认值为启用。

enable-paeth-intra (boolean)(要求 libaom 库版本≥v2.0.0)启用内预测的佩思(Paeth)预测器。默认值为启用。

enable-palette (boolean)(要求 libaom 库版本≥v2.0.0)启用调色板预测模式。默认值为启用。

enable-flip-idtx (boolean)(要求 libaom 库版本≥v2.0.0)启用扩展变换类型,包括 FLIPADST_DCT、DCT_FLIPADST、FLIPADST_FLIPADST、ADST_FLIPADST、FLIPADST_ADST、IDTX、V_DCT、H_DCT、V_ADST、H_ADST、V_FLIPADST、H_FLIPADST。默认值为启用。

enable-tx64 (boolean)(要求 libaom 库版本≥v2.0.0)启用 64 点变换。默认值为启用。

reduced-tx-type-set (boolean)(要求 libaom 库版本≥v2.0.0)使用精简的变换类型集合。默认值为禁用。

use-intra-dct-only (boolean)(要求 libaom 库版本≥v2.0.0)内预测模式仅使用 DCT 变换。默认值为禁用。

use-inter-dct-only (boolean)(要求 libaom 库版本≥v2.0.0)间预测模式仅使用 DCT 变换。默认值为禁用。

use-intra-default-tx-only (boolean)(要求 libaom 库版本≥v2.0.0)内预测模式仅使用默认变换。默认值为禁用。

enable-ref-frame-mvs (boolean)(要求 libaom 库版本≥v2.0.0)启用运动矢量的时间预测功能。默认值为启用。

enable-reduced-reference-set (boolean)(要求 libaom 库版本≥v2.0.0)使用精简的单参考和复合参考帧集合。默认值为禁用。

enable-obmc (boolean)(要求 libaom 库版本≥v2.0.0)启用重叠块运动补偿(OBMC)。默认值为启用。

enable-dual-filter (boolean)(要求 libaom 库版本≥v2.0.0)启用双滤波器模式。默认值为启用。

enable-diff-wtd-comp (boolean)(要求 libaom 库版本≥v2.0.0)启用差分加权复合预测。默认值为启用。

enable-dist-wtd-comp (boolean)(要求 libaom 库版本≥v2.0.0)启用距离加权复合预测。默认值为启用。

enable-onesided-comp (boolean)(要求 libaom 库版本≥v2.0.0)启用单侧复合预测。默认值为启用。

enable-interinter-wedge (boolean)(要求 libaom 库版本≥v2.0.0)启用间 - 间楔形复合预测。默认值为启用。

enable-interintra-wedge (boolean)(要求 libaom 库版本≥v2.0.0)启用间 - 内楔形复合预测。默认值为启用。

enable-masked-comp (boolean)(要求 libaom 库版本≥v2.0.0)启用掩码复合预测。默认值为启用。

enable-interintra-comp (boolean)(要求 libaom 库版本≥v2.0.0)启用间 - 内复合预测。默认值为启用。

enable-smooth-interintra (boolean)(要求 libaom 库版本≥v2.0.0)启用平滑间 - 内预测模式。默认值为启用。

aom-params通过键值对列表(键值对之间用冒号分隔)设置 libaom 编码器参数。参数列表可参考aomenc --help命令输出的 “AV1 Specific Options” 章节。

示例

通过-aom-params参数指定 libaom 编码选项:

ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4

9.9 liboapv 编码器

高级专业视频编码编码器封装(Advanced Professional Video codec encoder wrapper)

编译该编码器时,需确保系统中已安装 liboapv 的头文件和库文件,且需显式添加配置参数 --enable-liboapv

liboapv 编码器的大部分选项均映射至 FFmpeg 的全局编解码器参数,特有功能可通过私有选项配置。

oapv 项目官网地址:https://github.com/AcademySoftwareFoundation/openapv

9.9.1 选项

liboapv 编码器封装支持以下选项:

如需更全面的 liboapv 参数说明,可参考 liboapv 的官方文档。

preset设置质量 / 速度权衡预设,可选值如下:fastestfastmediumslowplacebodefault

qp设置恒定量化参数(CQP)码率控制模式下的量化参数值。

oapv-params (parse_apv_params)通过键值对列表(键值对之间用冒号分隔)设置 liboapvenc 编码器参数。参数列表可参考 liboapv 编码器的用户指南。

9.10 libsvtav1 编码器

SVT-AV1 编码器封装

编译配置时,需确保系统中已安装 SVT-AV1 的头文件和库文件,且需显式添加配置参数 --enable-libsvtav1

9.10.1 选项

profile设置编码配置文件,可选值如下:

  • main
  • high
  • professional

level设置编码等级,例如:4.0

hielevel设置分层预测等级,可选值如下:

  • 3level
  • 4level(默认值)

tier设置编码等级的层级,可选值如下:

  • main(默认值)
  • high

qmax设置比特率模式下使用的最大量化参数。

qmin设置比特率模式下使用的最小量化参数。

crf设置恒定码率因子(CRF)码率控制模式下的参数,取值范围为 0-63。

qp设置恒定量化参数(CQP)码率控制模式下的量化参数,取值范围为 0-63。

sc_detection设置是否启用场景变化检测功能。

la_depth设置前瞻帧数,取值范围为 0-120。

preset设置质量 / 速度权衡预设,取值范围为 0-13。数值越高,编码速度越快,质量越差。

tile_rows设置瓦片行数的对数(以 2 为底),取值范围为 0

tile_columns

设置待使用的瓦片列数的以 2 为底的对数(取值范围 0-4)。

svtav1-params

通过一组以冒号分隔的 key=value 键值对设置 SVT-AV1 编码器选项。支持的参数列表请参见《SVT-AV1 编码器用户指南》。

9.11 libjxl

libjxl 是 JPEG XL 编码器的封装层。

编译配置阶段需确保存在 libjxl 的头文件和库文件,且必须显式添加编译配置项 --enable-libjxl 以启用该编码器。

9.11.1 选项

libjxl 封装层支持以下选项:

  • distance设置目标 Butteraugli 距离(一种画质评估指标)。该参数用于控制编码质量:值越小,画质越高。其中 distance=1.0 的画质水平大致相当于 libjpeg 编码器中画质值 90(针对摄影类内容);设置为 0.0 时启用无损编码。有效值范围:0.0 ~ 15.0,实际合理取值一般不超过 5.0。设置为 0.1 时,多数输入内容可达到视觉上的无失真效果。默认值为 1.0。

  • effort设置编码耗时等级。值越高,画质一致性越好,且通常能优化「画质 / 每比特率」曲线,但会增加 CPU 占用时间。有效值范围:1 ~ 9,默认值为 7。

  • modular强制编码器使用模块化(Modular)模式,而非自动选择模式。默认行为为:有损编码时使用 VarDCT 模式,无损编码时使用 Modular 模式。注:VarDCT 模式在有损编码场景下通常优于 Modular 模式,但不支持无损编码。

9.12 libkvazaar

Kvazaar H.265/HEVC 编码器封装层。

编译配置阶段需确保存在 libkvazaar 的头文件和库文件,且必须显式添加编译配置项 --enable-libkvazaar 以启用该编码器。

9.12.1 选项
  • b设置目标视频码率(单位:比特 / 秒),并启用码率控制功能。

  • kvazaar-params通过逗号(,)分隔的 键=值 列表设置 kvazaar 参数。参数列表可参考 kvazaar 官方文档。

9.13 libopenh264

思科 libopenh264 H.264/MPEG-4 AVC 编码器封装层。

编译配置阶段需确保存在 libopenh264 的头文件和库文件,且必须显式添加编译配置项 --enable-libopenh264 以启用该编码器。该库通过 pkg-config 工具检测。

更多关于 libopenh264 的信息可参考:http://www.openh264.org

9.13.1 选项

以下 FFmpeg 全局选项会影响 libopenh264 编码器的配置:

  • b设置码率(单位:比特 / 秒)。

  • g设置 GOP(图像组)大小。

  • maxrate设置最大码率(单位:比特 / 秒)。

  • flags +global_header在码流中设置全局头部信息。

  • slices设置切片数量,用于并行编码。默认值为 0,仅当 slice_mode 设为 fixed 时生效。

  • loopfilter启用环路滤波:设为 1 时自动启用,设为 0 时禁用。

  • profile设置配置文件限制:设为 main 时启用 CABAC(将 SEncParamExt.iEntropyCodingModeFlag 标志设为 1)。

  • max_nal_size设置 NAL 单元的最大大小(单位:字节)。

  • allow_skip_frames设为 1 时,允许编码器为达到目标码率而跳过部分帧。

9.14 libtheora

libtheora Theora 编码器封装层。

编译配置阶段需确保存在 libtheora 的头文件和库文件,且必须显式添加编译配置项 --enable-libtheora 以启用该编码器。

更多关于 libtheora 项目的信息可参考:http://www.theora.org/

9.14.1 选项

以下全局选项会映射到 libtheora 内部参数,影响编码流的画质和码率:

  • b设置 CBR(恒定码率)模式下的视频码率(单位:比特 / 秒)。若启用 VBR(可变码率)模式,该选项会被忽略。

  • flags用于启用恒定画质模式(VBR)(通过 qscale 标志),以及启用 pass1/pass2 双遍编码模式。

  • g设置 GOP 大小。

  • global_quality以 lambda 单位设置全局画质(整数值)。仅在通过 flags +qscale 启用 VBR 模式时生效。该值会先除以 FF_QP2LAMBDA 转换为 QP 单位,再裁剪至 [0-10] 范围,最后乘以 6.3 转换为 libtheora 原生范围 [0-63]。值越高,画质越好。

  • q设为非负值时启用 VBR 模式,并以 QP 单位(浮点型)设置恒定画质值。该值会被裁剪至 [0-10] 范围,再乘以 6.3 转换为 libtheora 原生范围 [0-63]。注:该选项仅在 ffmpeg 命令行工具中有效;若使用库接口,需通过 global_quality 设置。

9.14.2 示例
  • 使用 ffmpeg 设置 Theora 编码器的最高恒定画质(VBR):
    ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
    
  • 使用 ffmpeg 转换为 1000 kbps CBR 的 Theora 视频流:
    ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
    

9.15 libvpx

通过 libvpx 实现 VP8/VP9 格式编码。

编译配置阶段需确保存在 libvpx 的头文件和库文件,且必须显式添加编译配置项 --enable-libvpx 以启用该编码器。

9.15.1 选项

libvpx 封装层支持以下选项(括号内为 vpxenc 等效选项 / 值,便于迁移):

为减少文档重复,仅记录私有选项及需特别注意的选项;未提及的通用选项可参考「编解码器选项」章节。如需获取更多 libvpx 选项说明,可执行 ffmpeg -h encoder=libvpxffmpeg -h encoder=libvpx-vp9 或 vpxenc --help,也可参考 libvpx API 文档。

  • b(target-bitrate)设置码率(单位:比特 / 秒)。注:FFmpeg 的 b 单位为比特 / 秒,而 vpxenc 的 target-bitrate 单位为千比特 / 秒。

  • g(kf-max-dist)设置最大关键帧间隔。

  • keyint_min(kf-min-dist)设置最小关键帧间隔。

  • qmin(min-q)最小量化参数(对应最佳画质)。

  • qmax(max-q)最大量化参数(对应最差画质),支持逐帧调整。

  • bufsize(buf-sz, buf-optimal-sz)设置码率控制缓冲区大小(单位:比特)。注:vpxenc 的对应选项单位为毫秒,libvpx 封装层会按如下公式转换:buf-sz = bufsize * 1000 / bitratebuf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6

  • rc_init_occupancy(buf-initial-sz)设置解码开始前加载到码率控制缓冲区的比特数。注:vpxenc 的对应选项单位为毫秒,封装层转换公式:rc_init_occupancy * 1000 / bitrate

  • undershoot-pct设置码率低于目标码率的百分比下限。

  • overshoot-pct设置码率高于目标码率的百分比上限。

  • skip_threshold(drop-frame)设置帧丢弃阈值。

  • qcomp(bias-pct)设置量化曲线压缩因子。

  • maxrate(maxsection-pct)设置 GOP 最大码率(单位:比特 / 秒)。注:vpxenc 的对应选项为目标码率的百分比,封装层转换公式:(maxrate * 100 / bitrate)

  • minrate(minsection-pct)设置 GOP 最小码率(单位:比特 / 秒)。注:vpxenc 的对应选项为目标码率的百分比,封装层转换公式:(minrate * 100 / bitrate)

  • minrate、maxrate、b(end-usage=cbr)当 end-usage=cbr 时,需满足 minrate == maxrate == bitrate

  • crf(end-usage=cq, cq-level)设置恒定码率因子(CRF),对应恒定质量模式。

  • tune(tune)画质调优选项:

    • psnr (psnr):优化 PSNR 指标
    • ssim (ssim):优化 SSIM 指标
  • quality、deadline(deadline)编码耗时 / 画质权衡:

    • best:最高画质耗时模式(命名不够直观且速度极慢,可能画质不如 good,建议避免使用)
    • good:平衡速度与画质(配合 cpu-used 效果佳)
    • realtime:实时编码模式
  • speed、cpu-used(cpu-used)设置画质 / 速度权衡系数。值越高,编码速度越快,但画质越差。

  • nr(noise-sensitivity)设置噪声敏感度。

  • static-thresh设置块变化阈值,低于该阈值的块会被编码器跳过。

  • slices(token-parts)注:FFmpeg 的 slices 表示分区总数,而 vpxenc 的 token-parts 为 log2(分区数)

  • max-intra-rate设置 I 帧最大码率(占目标码率的百分比)。设为 0 表示无限制。

  • force_key_frames强制插入关键帧(对应 VPX_EFLAG_FORCE_KF)。

备选参考帧相关选项
  • auto-alt-ref启用备选参考帧(仅双遍编码生效)。值大于 1 时启用多层备选参考帧(仅 VP9 支持)。

  • arnr-maxframes设置备选参考帧降噪的最大帧数。

  • arnr-type设置备选参考帧降噪滤波器类型:backward(后向)、forward(前向)、centered(中心)。

  • arnr-strength设置备选参考帧降噪滤波器强度。

  • rc-lookahead、lag-in-frames(lag-in-frames)设置帧类型和码率控制的前瞻帧数。

  • min-gf-interval设置最小黄金 / 备选参考帧间隔(仅 VP9 支持)。

  • error-resilient启用抗错误特性。

  • sharpness(整数)以降低 PSNR 为代价提升锐度。有效值范围:[0,7]。

  • ts-parameters通过冒号分隔的 键=值 列表设置时间可伸缩性配置。示例:

    bash

    运行

    ffmpeg -i INPUT -c:v libvpx -ts-parameters ts_number_layers=3:\
    ts_target_bitrate=250,500,1000:ts_rate_decimator=4,2,1:\
    ts_periodicity=4:ts_layer_id=0,2,1,2:ts_layering_mode=3 OUTPUT
    

    各参数简要说明(详细可参考 vpx/vpx_encoder.h 中的 struct vpx_codec_enc_cfg):

    • ts_number_layers:时间编码层数
    • ts_target_bitrate:每层目标码率(单位:kbps,需包含低层码率)
    • ts_rate_decimator:每层帧率抽取因子
    • ts_periodicity:帧时间层归属序列长度
    • ts_layer_id:定义帧归属时间层的模板
    • ts_layering_mode(可选):预定义时间分层模式:
      • 0:不传入内部时间分层标志,依赖 AVFrame 元数据中的 vp8-flags/temporal_id
      • 2:两层时间分层(0-1...)
      • 3:三层时间分层(0-2-1-2...,单参考帧)
      • 4:同 3,但时间周期内两个 2 层帧存在依赖关系
VP8 专属选项
  • screen-content-mode屏幕内容模式:0(关闭)、1(屏幕内容)、2(屏幕内容 + 激进码率控制)。
VP9 专属选项
  • lossless启用无损模式。

  • tile-columns设置瓦片列数(以 log2(列数) 表示)。例如,设置为 3 表示 8 列。

  • tile-rows设置瓦片行数(以 log2(行数) 表示)。例如,设置为 2 表示 4 行。

  • frame-parallel启用帧并行解码特性。

  • aq-mode设置自适应量化模式:0(关闭,默认)、1(方差)、2(复杂度)、3(循环刷新)、4(equator360)。

  • colorspace设置输入色彩空间,VP9 码流支持的类型:rgb(sRGB)、bt709unspecified(未知)、bt470bg(bt601)、smpte170msmpte240mbt2020_ncl

  • row-mt(布尔值)启用基于行的多线程编码。

  • tune-content设置内容类型:0(默认)、1(屏幕)、2(电影)。

  • corpus-complexity语料库 VBR 模式(标准 VBR 的变种),传入复杂度分布中点而非针对单片段计算。有效值范围 [0,10000],0(默认)使用标准 VBR。

  • enable-tpl(布尔值)启用时间依赖模型。

  • ref-frame-config通过每帧元数据精细控制参考帧策略和帧缓冲区管理(参考 vpx/vp8cx.h 中的 vpx_svc_ref_frame_config_t),格式为冒号分隔的 键=值 列表。示例:

    av_dict_set(&av_frame->metadata, "ref-frame-config", \
    "rfc_update_buffer_slot=7:rfc_lst_fb_idx=0:rfc_gld_fb_idx=1:rfc_alt_fb_idx=2:rfc_reference_last=0:rfc_reference_golden=0:rfc_reference_alt_ref=0");
    

    核心参数说明:

    • rfc_update_buffer_slot:待更新的缓冲区槽位号
    • rfc_update_last/golden/alt_ref:是否更新 LAST/GOLDEN/ALT_REF 帧
    • rfc_lst/gld/alt_fb_idx:对应帧的缓冲区索引
    • rfc_reference_last/golden/alt_ref:是否参考对应帧
    • rfc_reference_duration:帧时长

更多关于 libvpx 的信息可参考:http://www.webmproject.org/

9.16 libvvenc

VVenC H.266/VVC 编码器封装层。

编译配置阶段需确保存在 libvvenc 的头文件和库文件,且必须显式添加编译配置项 --enable-libvvenc 以启用该编码器。

VVenC 项目地址:https://github.com/fraunhoferhhi/vvenc

9.16.1 支持的像素格式

VVenC 仅支持 10 位色彩空间作为输入,但运行时可将内部编码位深设为 8 位或 10 位。

9.16.2 选项
  • b设置目标视频码率。

  • g设置 GOP 大小。目前仅支持 g=1(仅 I 帧)或默认值。

  • preset设置 VVenC 预设参数。

  • levelidc设置 level idc(等级标识)。

  • tier设置 VVC tier(层级)。

  • qp设置恒定量化参数。

  • subopt(布尔值)启用主观(感知驱动)优化。默认值为 1(开启)。

  • bitdepth8(布尔值)启用 8 位编码模式(默认 0,使用 10 位)。

  • period设置(帧内)刷新周期(单位:秒)。

  • vvenc-params通过冒号分隔的 键=值 列表设置 VVenC 参数。参数列表可参考 vvencapp --fullhelp 或 vvencFFapp --fullhelp。示例:

    ffmpeg -i input -c:v libvvenc -b 1M -vvenc-params intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8 output.mp4
    

9.17 libwebp

libwebp WebP 图像编码器封装层。

libwebp 是谷歌官方的 WebP 图像编码器,支持有损 / 无损两种模式:有损模式本质是 VP8 帧的封装,无损模式为谷歌自研的独立编码方式。

9.17.1 像素格式

受格式和 libwebp 限制,目前:

  • 有损编码仅支持 YUV420 格式
  • 无损编码仅支持 RGB 格式两种模式均支持 Alpha 通道。注:若传入格式不匹配(如有损编码传入 RGB、无损编码传入 YUV),libwebp 会自动转换格式(仅为兼容便利,非最优方案)。
9.17.2 选项
  • -lossless(布尔值)启用 / 禁用无损模式。默认值为 0(禁用)。

  • -compression_level(整数)

    • 有损模式:画质 / 速度权衡,值越高,相同体积下画质越好,但编码耗时增加
    • 无损模式:体积 / 速度权衡,值越高,体积越小,但编码耗时增加该参数映射到 libwebp 的 method 选项,有效值范围 0~6,默认值 4。
  • -quality(浮点型)

    • 有损编码:控制图像画质
    • 无损编码:控制压缩耗时有效值范围 0~100,默认值 75。
  • -preset(类型)配置预设(根据图像类型自动调整参数):

    • none:不使用预设
    • default:编码器默认值
    • picture:数码图片(如人像、室内场景)
    • photo:户外照片(自然光线)
    • drawing:手绘 / 线稿(高对比度细节)
    • icon:小尺寸彩色图像
    • text:文字类图像

9.18 libx264、libx264rgb

x264 H.264/MPEG-4 AVC 编码器封装层。

编译配置阶段需确保存在 libx264 的头文件和库文件,且必须显式添加编译配置项 --enable-libx264 以启用该编码器。

libx264 支持丰富特性:8x8/4x4 自适应空间变换、自适应 B 帧放置、CAVLC/CABAC 熵编码、隔行扫描(MBAFF)、无损模式、画质优化(自适应量化、psy-RD、psy-trellis)等。

多数 libx264 选项映射到 FFmpeg 全局编解码器选项,独有选项通过私有参数设置;此外,x264opts/x264-params 私有选项支持传入 键=值 列表(兼容 libx264 的 x264_param_parse 函数)。

x264 项目地址:http://www.videolan.org/developers/x264.html

libx264rgb 与 libx264 功能一致,仅输入格式为打包 RGB 像素格式(而非 YUV)。

9.18.1 支持的像素格式

x264 支持 8~10 位色彩空间,具体位深由 x264 编译配置决定。

9.18.2 选项

libx264 封装层支持以下选项(括号内为 x264 等效选项,便于迁移):

为减少文档重复,仅记录私有选项及需特别注意的选项;未提及的通用选项可参考「编解码器选项」章节。如需完整选项说明,可执行 x264 --fullhelp 或参考 libx264 官方文档。

  • b(bitrate)设置码率(单位:比特 / 秒)。注:FFmpeg 的 b 单位为比特 / 秒,而 x264 的 bitrate 单位为千比特 / 秒。

  • bf(bframes)I/P 帧之间的 B 帧数量。

  • g(keyint)最大 GOP 大小。

  • qmin(qpmin)最小量化参数。

  • qmax(qpmax)最大量化参数。

  • qdiff(qpstep)量化参数的最大差值。

  • qblur(qblur)量化曲线模糊度。

  • qcomp(qcomp)量化曲线压缩因子。

  • refs(ref)每个 P 帧可使用的参考帧数,范围 0~16。

  • level(level)设置 x264_param_t.i_level_idc

    • 若为正数,直接赋值;若为非正数,忽略
    • 可通过 AVCodecContext API 设置(如直接赋值),值为等级映射整数(如 31 对应 H.264 level 3.1)
    • 也可通过私有选项设置(覆盖 API 值),格式为等级标识(如 "3.1",参考 H.264 Annex A)
  • sc_threshold(scenecut)设置场景切换检测阈值。

  • trellis(trellis)启用 Trellis 量化以提升编码效率(默认启用)。

  • nr(nr)降噪强度。

  • me_range(merange)运动搜索的最大像素范围。

  • me_method(me)设置运动估计算法(按速度从快到慢):

    • dia (dia)/epzs (dia):菱形搜索(半径 1,最快)
    • hex (hex):六边形搜索(半径 2)
    • umh (umh):非均匀多六边形搜索
    • esa (esa):穷尽搜索
    • tesa (tesa):Hadamard 穷尽搜索(最慢)
  • forced-idr强制将手动指定的 I 帧设为 IDR 帧(默认 I 帧类型由编码器自选)。

  • subq(subme)亚像素运动估计算法。

  • b_strategy(b-adapt)自适应 B 帧放置决策算法(仅第一遍编码生效)。

  • keyint_min(min-keyint)最小 GOP 大小。

  • coder设置熵编码器:

    • ac:启用 CABAC
    • vlc:启用 CAVLC(禁用 CABAC,等效于 x264 的 --no-cabac
  • cmp设置全像素运动估计比较算法:

    • chroma:启用色度分量运动估计
    • sad:忽略色度分量(等效于 x264 的 --no-chroma-me
  • threads(threads)编码线程数。

  • thread_type设置多线程模式:

    • slice:基于切片的多线程(等效于 x264 的 --sliced-threads
    • frame:基于帧的多线程
  • flags设置编码标志:如 -cgop 禁用闭合 GOP、启用开放 GOP(等效于 x264 的 --open-gop)。

  • rc_init_occupancy(vbv-init)VBV 缓冲区初始占用量。

  • preset(preset)设置编码预设。

  • tune(tune)设置编码参数调优方向。

  • profile(profile)设置配置文件限制。

  • fastfirstpass设为 1 时,第一遍编码启用快速参数(默认);设为 0 时,等效于 x264 的 --slow-firstpass

  • crf(crf)恒定画质模式下的质量值。

  • crf_max(crf-max)CRF 模式下,限制 VBV 调整画质的下限(避免画质过低)。

  • qp(qp)恒定量化参数模式的参数值。

  • aq-mode(aq-mode)设置自适应量化(AQ)模式:

    • none (0):禁用
    • variance (1):方差 AQ(复杂度掩码)
    • autovariance (2):自动方差 AQ(实验性)
  • aq-strength(aq-strength)AQ 强度(降低平坦 / 纹理区域的块效应和模糊)。

  • psy设为 1 时启用心理视觉优化(默认);设为 0 时,等效于 x264 的 --no-psy

  • psy-rd(psy-rd)心理视觉优化强度,格式为 psy-rd:psy-trellis

  • rc-lookahead(rc-lookahead)帧类型 / 码率控制的前瞻帧数。

  • weightb设为 1 时启用 B 帧加权预测(默认);设为 0 时,等效于 x264 的 --no-weightb

  • weightp(weightp)设置 P 帧加权预测方式:

    • none (0):禁用
    • simple (1):仅启用加权参考帧
    • smart (2):启用加权参考帧 + 重复帧
  • ssim(ssim)启用 SSIM 统计(编码结束后输出)。

  • intra-refresh(intra-refresh)设为 1 时,启用周期性帧内刷新(替代 IDR 帧)。

  • avcintra-class(class)配置编码器生成 AVC-Intra 格式,有效值:50、100、200。

  • bluray-compat(bluray-compat)启用蓝光兼容模式(等效于 bluray-compat=1 force-cfr=1)。

  • b-bias(b-bias)调整 B 帧使用频率的权重。

  • b-pyramid(b-pyramid)设置 B 帧作为参考帧的策略:

    • none (none):禁用
    • strict (strict):严格分层金字塔(蓝光兼容)
    • normal (normal):非严格模式(非蓝光兼容)
  • mixed-refs设为 1 时,启用「每个分区一个参考帧」(默认);设为 0 时,等效于 x264 的 --no-mixed-refs(每个宏块一个参考帧)。

  • 8x8dct设为 1 时启用自适应空间变换(高配置文件 8x8 变换,默认);设为 0 时,等效于 x264 的 --no-8x8dct

  • fast-pskip设为 1 时启用 P 帧快速 SKIP 检测(默认);设为 0 时,等效于 x264 的 --no-fast-pskip

  • aud设为 1 时启用访问单元分隔符(AUD)。

  • mbtree设为 1 时启用宏块树码率控制(默认);设为 0 时,等效于 x264 的 --no-mbtree

  • deblock(deblock)设置环路滤波参数,格式为 alpha:beta

  • cplxblur(cplxblur)量化参数波动抑制(量化曲线压缩前)。

  • partitions(partitions)设置待评估的分区类型(逗号分隔):

    • p8x8/p4x4:P 帧 8x8/4x4 分区(p4x4 依赖 p8x8)
    • b8x8:B 帧 4x4 分区
    • i8x8/i4x4:I 帧 8x8/4x4 分区(i8x8 依赖 8x8dct)
    • none:无分区
    • all:所有分区
  • direct-pred(direct)设置直接运动矢量预测模式:

    • none:禁用
    • spatial:空间预测
    • temporal:时间预测
    • auto:自动选择
  • slice-max-size(slice-max-size)切片最大大小(字节)。若未设置但指定了 RTP 载荷大小(ps),则使用 ps 值。

  • stats(stats)多遍编码的统计文件路径。

  • nal-hrd(nal-hrd)设置 HRD 信息标识(需设置 vbv-bufsize):

    • none:禁用
    • vbr:可变码率
    • cbr:恒定码率(MP4 容器不支持)
  • x264opts/x264-params通过冒号分隔的 键=值 列表覆盖 x264 配置:

    • x264opts 支持省略值(默认值为 1)
    • 若值包含冒号,可用逗号替代(如 psy-rd)示例:
    ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv
    
  • a53cc(布尔值)将 ATSC 格式的隐藏字幕导入输出流(仅 mpeg2/h264 解码器支持),默认 1(开启)。

  • udu_sei(布尔值)导入未注册用户数据 SEI,默认 0(关闭)。

  • mb_info(布尔值)通过 AVFrameSideData 输出宏块信息(仅 API 场景有效),默认 0(关闭)。

FFmpeg 提供了常用场景的编码预设,可通过 -pre 选项调用。

9.19 libx265

x265 H.265/HEVC 编码器封装层。

编译配置阶段需确保存在 libx265 的头文件和库文件,且必须显式添加编译配置项 --enable-libx265 以启用该编码器。

9.19.1 选项
  • b设置目标视频码率。

  • bf设置最大 B 帧数量。

  • g设置 GOP 大小。

  • keyint_min最小 GOP 大小。

  • refs每个 P 帧可使用的参考帧数,范围 1~16。

  • preset设置 x265 预设。

  • tune设置 x265 调优参数。

  • profile设置配置文件限制。

  • crf恒定画质模式的质量值。

  • qp恒定量化参数模式的参数值。

  • qmin最小量化参数。

  • qmax最大量化参数。

  • qdiff量化参数最大差值。

  • qblur量化曲线模糊度。

  • qcomp量化曲线压缩因子。

  • i_qfactor/b_qfactorI/B 帧量化因子。

  • forced-idr强制将手动指定的 I 帧设为 IDR 帧。

  • udu_sei(布尔值)导入未注册用户数据 SEI,默认 0(关闭)。

  • x265-params通过冒号分隔的 键=值 列表设置 x265 参数(参考 x265 --help)。示例:

    ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4
    

9.20 libxavs2

xavs2 AVS2-P2/IEEE1857.4 编码器封装层。

编译配置阶段需确保存在 libxavs2 的头文件和库文件,且必须显式添加编译配置项 --enable-libxavs2 以启用该编码器。

以下标准 libavcodec 选项生效:

  • b / bit_rate:码率
  • g / gop_size:GOP 大小
  • bf / max_b_frames:最大 B 帧数量
9.20.1 专属选项
  • lcu_row_threads行并行线程数,范围 1~8,默认 5。

  • initial_qp首帧初始量化参数,范围 1~63,默认 34。

  • qp恒定 QP 模式的量化参数,范围 1~63,默认 34。

  • max_qp/min_qp码率控制的最大 / 最小量化参数,范围 1~63(max_qp 默认 55,min_qp 默认 20)。

  • speed_level速度等级,范围 0~9,默认 0(值越高,画质越好但速度越慢)。

  • log_level日志等级,范围 -1~3,默认 0(-1:无日志,0:错误,1:警告,2:信息,3:调试)。

  • xavs2-params通过冒号分隔的 键=值 列表设置 xavs2 参数。示例:

    ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2
    

9.21 libxeve

eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC 编码器封装层(括号内为 xeve 等效选项,便于迁移)。

编译配置阶段需确保存在 libxeve 的头文件和库文件,且必须显式添加编译配置项 --enable-libxeve 以启用该编码器。

多数 libxeve 选项映射到 FFmpeg 全局编解码器选项,独有选项通过私有参数设置;xeve-params 私有选项支持传入 键=值 列表(兼容 libxeve 的 parse_xeve_params 函数)。

xeve 项目地址:https://github.com/mpeg5/xeve

9.21.1 选项

libxeve 封装层支持以下选项(括号内为 xeve 等效选项,便于迁移):

为减少文档重复,仅记录私有选项及需特别注意的选项;未提及的通用选项可参考「编解码器选项」章节。如需完整选项说明,可执行 xeve_app --help 或参考 libxeve 官方文档。

  • b(bitrate)设置目标视频码率(单位:比特 / 秒)。注:FFmpeg 的 b 单位为比特 / 秒,而 xeve 的 bitrate 单位为千比特 / 秒。

  • bf(bframes)最大 B 帧数量(可选值:1、3、7、15)。

  • g(keyint)GOP 大小(I 帧周期)。

  • preset(preset)设置 xeve 预设(编码速度:fast/medium/slow/placebo)。

  • tune(tune)编码器调优方向:psnr(优化 PSNR)、zerolatency(零延迟)。

  • profile(profile)编码器配置文件:0(baseline)、1(main)。

  • crf(crf)恒定画质模式的质量值,范围 10~49,默认 32。

  • qp(qp)恒定量化参数模式的参数值,范围 0~51,默认 32。

  • threads(threads)强制指定编码线程数。

9.22 libxvid

Xvid MPEG-4 Part 2 编码器封装层。

编译配置阶段需确保存在 libxvidcore 的头文件和库文件,且必须显式添加编译配置项 --enable-libxvid --enable-gpl 以启用该编码器。

注:FFmpeg 原生 mpeg4 编码器已支持 MPEG-4 Part 2 格式,无需依赖该库也可编码。

9.22.1 选项

libxvid 封装层支持以下选项(部分未文档化的选项为通用编解码器选项,参考「编解码器选项」章节;未列出的通用选项对该编码器无效):

  • b/g/qmin/qmax/mpeg_quant/threads/bf/b_qfactor/b_qoffset通用编解码器选项(参考对应章节)。

  • flags设置特定编码标志:

    • mv4:每个宏块使用 4 个运动矢量
    • aic:启用高质量 AC 预测
    • gray:仅编码灰度图像
    • qpel:启用 1/4 像素运动补偿
    • cgop:启用闭合 GOP
    • global_header:将全局头部放入 extradata(而非每个关键帧)
  • gmc启用全局运动补偿(GMC),默认 0(禁用)。

  • me_quality运动估计质量等级(速度从快到慢,画质从低到高):

    • 0:无运动估计(默认)
    • 1/2:16x16 块高级菱形区域搜索 + 16x16 块半像素细化
    • 3/4:上述基础 + 8x8 块高级菱形搜索 + 8x8 块半像素细化 + P/B 帧色度分量运动估计
    • 5/6:上述基础 + 16x16/8x8 块扩展搜索
  • mbd宏块决策算法(画质从低到高):

    • simple:宏块比较函数(默认)
    • bits:16x16 块率失真半像素 / 1/4 像素细化
    • rd:上述基础 + 8x8 块率失真细化 + 方形模式率失真搜索
  • lumi_aq启用亮度掩码自适应量化,默认 0(禁用)。

  • variance_aq启用方差自适应量化,默认 0(禁用)。注:与 lumi_aq 同时启用时,画质取两者中较差的效果。

  • trellis设置率失真最优量化。

  • ssim设置 SSIM 输出方式:

    • off:禁用 SSIM 输出
    • avg:编码结束后输出平均 SSIM(格式:Average SSIM: %f
    • frame:编码过程中输出每帧 SSIM + 最终平均 SSIM(每帧格式:SSIM: avg: %1.3f min: %1.3f max: %1.3f
  • ssim_accSSIM 计算精度,范围 0~4(0 最精确,4 最快)。

9.23 MediaCodec

MediaCodec 编码器封装层,实现 Android 设备的硬件加速视频编码,支持 H.264、H.265(HEVC)、VP8、VP9、MPEG-4、AV1(具体支持度依赖设备)。

Android 提供两套 API:Java MediaCodec 和 NDK MediaCodec,该封装层均支持。注:NDK MediaCodec 无需 JVM,但 Android 15+ 可能因依赖系统框架服务而无法在 JVM 外运行。

选项
  • ndk_codec(布尔值)使用 NDK 版 MediaCodec API(而非 Java 版)。若 av_jni_get_java_vm() 返回 NULL,默认启用。

  • ndk_async(布尔值)NDK MediaCodec 异步模式(开销低于同步轮询)。缺点:AV_CODEC_FLAG_GLOBAL_HEADER 失效(需用 extract_extradata 比特流过滤器)。Android 8.0 以下设备自动禁用。

  • codec_name(字符串)指定编码器后端(通过 createCodecByName API)。默认 NULL,使用 createEncoderByType 创建。

  • bitrate_mode(整数)码率模式:

    • cq:恒定质量
    • vbr:可变码率
    • cbr:恒定码率
    • cbr_fd:恒定码率(允许丢帧)
  • pts_as_dts(布尔值)将 PTS 作为 DTS(MediaCodec API 不提供 DTS 的兼容方案)。B 帧为 0 时自动启用。

  • operating_rate(整数)编码器期望运行帧率(0 表示未指定)。适用于高速 / 慢动作录制场景(如播放帧率 30fps,采集帧率 240fps)。

  • qp_i_min/qp_p_min/qp_b_min/qp_i_max/qp_p_max/qp_b_maxI/P/B 帧的最小 / 最大量化参数。

9.24 MediaFoundation

MediaFoundation 框架编码器封装层,支持以下编码器:

  • h264_mf
  • hevc_mf
  • av1_mf

支持软件 / 硬件编码,输入格式支持 nv12/yuv420p(硬件编码器推荐 nv12)。硬件加速编码依赖 D3D11,可通过 scale_d3d11 滤镜实现硬件缩放。

如需查看所有选项,执行:ffmpeg -h encoder=<编码器名>(如 ffmpeg -h encoder=h264_mf)。

9.24.1 选项
  • rate_control码率控制模式:

    • default:默认
    • cbr:恒定码率
    • pc_vbr:峰值约束 VBR
    • u_vbr:无约束 VBR
    • quality:画质模式
    • ld_vbr:低延迟 VBR(Windows 8+)
    • g_vbr:全局 VBR(Windows 8+)
    • gld_vbr:全局低延迟 VBR(Windows 8+)
  • scenario使用场景:

    • default:默认
    • display_remoting:显示远程控制
    • video_conference:视频会议
    • archive:归档
    • live_streaming:直播
    • camera_record:相机录制
    • display_remoting_with_feature_map:带特征映射的显示远程控制
  • quality编码质量(0~100),-1 表示默认质量。

  • hw_encoding(0/1)强制硬件编码,默认 0(禁用)。

9.24.2 示例
  • 硬件编码:
    ffmpeg -i input.mp4 -c:v h264_mf -hw_encoding 1 output.mp4
    
  • 硬件解码 + 硬件编码:
    ffmpeg -hwaccel d3d11va -i input.mp4 -c:v h264_mf -hw_encoding 1 output.mp4
    
  • 硬件解码 + 硬件缩放 + 硬件编码(指定画质):
    ffmpeg -hwaccel d3d11va -hwaccel_output_format d3d11 -i input.mp4 -vf scale_d3d11=1920:1080 -c:v hevc_mf -hw_encoding 1 -quality 80 output.mp4
    

9.25 Microsoft RLE

Microsoft RLE(又称 MSRLE)编码器,仅支持 8 位调色板模式,兼容 Windows 3.1/95。

9.25.1 选项
  • g(整数)关键帧间隔:至少每 g 帧插入一个关键帧(可能提前)。

9.26 mpeg2

MPEG-2 视频编码器。

9.26.1 选项
  • profile编码配置文件:

    • 422/high/ss(空间可伸缩)/snr(SNR 可伸缩)/main/simple
  • level编码等级:

    • high/high1440/main/low
  • seq_disp_ext(整数)是否写入 sequence_display_extension:

    • -1:自动(默认,检测数据是否与默认值不同)
    • 0:从不写入
    • 1:始终写入
  • video_format(整数)sequence_display_extension 中的视频源类型:默认 unspecified,可选 component/pal/ntsc/secam/mac(兼容性优先选 component)。

  • a53cc(布尔值)导入 ATSC 格式隐藏字幕到输出流,默认 1(开启)。

9.27 png

PNG 图像编码器。

9.27.1 基础选项
  • compression_level压缩等级,范围 0~9,默认 9。
9.27.2 私有选项
  • dpi(整数)像素物理密度(每英寸点数),默认未设置。

  • dpm(整数)像素物理密度(每米点数),默认未设置。

  • pred(方法)预测方法:none/sub/up/avg/paeth/mixed,默认 paeth

9.28 ProRes

Apple ProRes 编码器。

FFmpeg 包含两个 ProRes 编码器:prores-aw 和 prores-ks,可通过 -vcodec 选择。

9.28.1 prores-ks 私有选项
  • profile(整数)编码配置文件:

    • proxy/lt/standard/hq/4444/4444xq
  • quant_mat(整数)量化矩阵:

    • auto:匹配配置文件
    • default:最高画质(默认)
    • proxy/lt/standard/hq
  • bits_per_mb(整数)每个宏块的编码比特数(不同配置文件范围 200~2400,最大 8000)。

  • mbs_per_slice(整数)每个切片的宏块数(1~8,默认 8)。

  • vendor(字符串)覆盖 4 字节厂商 ID(如 apl0 模拟苹果编码器)。

  • alpha_bits(整数)Alpha 通道位数:0(禁用)/8/16。

9.28.2 速度说明

默认模式下,编码器需在满足帧大小限制的前提下优化画质:细节丰富的帧压缩难度高,编码器会花费更多时间调整切片量化参数。

  • 提高 bits_per_mb 可提升编码速度;
  • 最快编码方式:设置 qscale(推荐值 4)且不限制帧大小。

9.29 QSV 编码器

Intel QuickSync Video 编码器家族(支持 MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)。

9.29.1 码率控制模式

码率控制模式选择逻辑:

  1. 若指定 global_quality
    • 同时设置 qscale 标志 → CQP(恒定量化参数)
    • 同时设置 look_ahead → LA_ICQ(带前瞻的智能恒定质量)
    • 其他 → ICQ(智能恒定质量)(ICQ 范围 1~51,值越小画质越好)
  2. 若通过 b 指定平均码率:
    • 设置 look_ahead → LA(带前瞻的 VBR)
    • 设置 vcm → VCM(视频会议模式)
    • maxrate == b → CBR(恒定码率)
    • maxrate > b → VBR(可变码率)
    • 未设置 maxrate 但 avbr_accuracy/avbr_convergence 非 0 → AVBR(平均 VBR,仅 Windows 下 H264/HEVC 支持)
  3. 其他情况 → 默认 CQP。

注:实际使用的模式可能因系统而异,可将日志级别设为 verbose 查看 QSV 运行时实际参数。

9.29.2 全局选项 → MSDK 选项映射
FFmpeg 全局选项MSDK 选项
g/gop_sizeGopPicSize
bf/max_b_frames+1GopRefDist
rc_init_occupancyInitialDelayInKB
slicesNumSlice
refsNumRefFrame
b_strategy/b_frame_strategyBRefType
cgop 标志GopOptFlag
  • CQP 模式下,i_qfactor/i_qoffset/b_qfactor/b_qoffset 分别设置 QPP 与 QPI、QPP 与 QPB 的差值;
  • coder=vlc 时,H.264 编码器使用 CAVLC(而非 CABAC)。
9.29.3 通用选项

所有 QSV 编码器均支持:

  • async_depth应用程序异步操作的最大数量(0 表示不指定)。

  • preset速度 / 画质预设:veryfast(最快)→ fasterfastmediumslowslowerveryslow(最优画质)。

  • forced_idr强制 I 帧为 IDR 帧。

  • low_power启用低功耗模式(降低功耗和 GPU 占用)。

9.29.4 运行时可调整选项

编码过程中可动态调整的选项:

  • global_quality/i_quant_factor/i_quant_offset/b_quant_factor/b_quant_offset(h264_qsv/hevc_qsv):重置 QP 配置;
  • max_frame_size(h264_qsv/hevc_qsv):重置最大帧大小;
  • gop_size:重置 GOP 配置;
  • int_ref_type/int_ref_cycle_size/int_ref_qp_delta/int_ref_cycle_dist(h264_qsv/hevc_qsv):重置帧内刷新配置;
  • qmax/qmin/max_qp_i/min_qp_i/max_qp_p/min_qp_p/max_qp_b/min_qp_b(h264_qsv):重置最大 / 最小 QP;
  • low_delay_brc(h264_qsv/hevc_qsv/av1_qsv):重置低延迟码率控制;
  • framerate:重置帧率;
  • bit_rate/rc_buffer_size/rc_initial_buffer_occupancy/rc_max_rate:重置码率控制;
  • pic_timing_sei(h264_qsv/hevc_qsv):重置图像时序 SEI;
  • qsv_params冒号分隔的 键=值 列表,直接通过 MFXSetParameter 传递给 QSV 编码器。示例:
    ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4
    
9.29.5 H264 专属选项(h264_qsv)
  • extbrc:扩展码率控制;
  • recovery_point_sei:帧内刷新周期起始处插入恢复点 SEI;
  • rdo:启用率失真优化;
  • max_frame_size/max_frame_size_i/max_frame_size_p:最大帧 / I 帧 / P 帧大小(字节);
  • max_slice_size:最大切片大小(字节);
  • bitrate_limit:码率限制(非 CQP 模式生效,自动调整码率至 QSV 支持范围);
  • mbbrc:启用宏块级码率控制(提升主观画质,可能降低性能 / 客观指标);
  • low_delay_brc:低延迟码率控制(-1:默认,0:关闭,1:开启);
  • adaptive_i/adaptive_b:允许编码器将 P/B 帧转为 I 帧、B 帧转为 P 帧;
  • p_strategy:P 帧金字塔(0:默认,1:简单,2:金字塔,需 bf=0);
  • b_strategy:B 帧参考策略;
  • dblk_idc:环路滤波禁用等级(0~2);
  • cavlc:启用 CAVLC(默认 CABAC);
  • vcm:视频会议模式;
  • idr_interval:IDR 帧间隔(I 帧数);
  • pic_timing_sei:插入带 pic_struct_syntax 的图像时序 SEI;
  • single_sei_nal_unit:所有 SEI 放入单个 NALU;
  • max_dec_frame_buffering:DPB 最大缓冲帧数;
  • look_ahead:启用带前瞻的 VBR;
  • look_ahead_depth:前瞻帧数;
  • look_ahead_downsampling:前瞻分析降采样因子(unknown/auto/off/2x/4x);
  • int_ref_type/int_ref_cycle_size/int_ref_qp_delta/int_ref_cycle_dist:帧内刷新参数(需 bf=0);
  • profile:配置文件(unknown/baseline/main/high);
  • a53cc:启用 A53 字幕;
  • aud:插入 AUD NAL;
  • mfmode:多帧模式(off/auto);
  • repeat_pps:每帧重复 PPS;
  • max_qp_i/min_qp_i/max_qp_p/min_qp_p/max_qp_b/min_qp_b:I/P/B 帧最大 / 最小 QP;
  • scenario:编码场景(unknown/displayremoting/videoconference/archive/livestreaming/cameracapture/videosurveillance/gamestreaming/remotegaming);
  • avbr_accuracy/avbr_convergence:AVBR 精度(0.1% 单位)/ 收敛帧数(100 帧单位);
  • skip_frame:帧跳过策略(no_skip/insert_dummy/insert_nothing/brc_only)。
9.29.6 HEVC 专属选项(hevc_qsv)
  • 继承 h264_qsv 多数选项,新增 / 调整:
    • load_plugin:加载用户插件(none/hevc_sw/hevc_hw);
    • load_plugins:加载插件 UID 列表(冒号分隔十六进制值);
    • profile:配置文件(unknown/main/main10/mainsp/rext/scc);
    • tier:层级(main/high,需 level≥4 支持 high);
    • gpb:启用 GPB 帧(1)/ 常规 P 帧(0);
    • tile_cols/tile_rows:瓦片列 / 行数;
    • transform_skip:启用变换跳过(ICL+ 平台支持)。
9.29.7 MPEG2 专属选项(mpeg2_qsv)
  • profile:配置文件(unknown/simple/main/high)。
9.29.8 VP9 专属选项(vp9_qsv)
  • profile:配置文件(unknown/profile0/profile1/profile2/profile3);
  • tile_cols/tile_rows:瓦片列 / 行数(需 libmfx≥1.29)。
9.29.9 AV1 专属选项(av1_qsv,需 libvpl)
  • profile:配置文件(unknown/main);
  • tile_cols/tile_rows:瓦片列 / 行数;
  • adaptive_i/adaptive_b:帧类型自适应转换;
  • b_strategy:B 帧参考策略;
  • extbrc:扩展码率控制;
  • look_ahead_depth:前瞻帧数(extbrc 启用时生效);
  • low_delay_brc:低延迟码率控制;
  • max_frame_size/max_frame_size_i/max_frame_size_p:最大帧 / I 帧 / P 帧大小。

9.30 snow

9.30.1 选项
  • iterative_dia_size迭代运动估计的菱形搜索大小。

9.31 VAAPI 编码器

VAAPI 硬件编码器封装层,仅接受 VAAPI 硬件表面作为输入(软件帧需通过 hwupload 滤镜上传至 GPU)。

标准选项

以下 libavcodec 通用选项生效:

  • g/gop_size/bf/max_b_frames/profile/level/b/bit_rate/maxrate/rc_max_rate/bufsize/rc_buffer_size/rc_init_occupancy/compression_level/q/global_quality/qmin/qmax/i_qfactor/i_quant_offset/b_qfactor/b_quant_offset/slices
通用专属选项

所有 VAAPI 编码器支持:

  • low_power启用低功耗编码器(部分驱动 / 平台支持,功能集可能缩减)。

  • idr_interval开放 GOP 模式下,普通 I 帧之间的 IDR 帧间隔(I 帧仍为 IRAP,但无全局头部)。

  • b_depthB 帧参考深度:1(默认,B 帧仅参考 I/P 帧);>1 时,多层 B 帧(每层仅参考高层帧)。

  • async_depth最大并行处理数(提升单通道性能,需驱动支持 vaSyncBuffer,且分配足够硬件帧)。

  • max_frame_size单帧最大大小(字节),CQP 模式下无效(超限时自动调整 QP)。

  • rc_mode码率控制模式(驱动支持子集):

    • auto(默认)/CQP/CBR/VBR/ICQ/QVBR/AVBR
  • blbrc启用块级码率控制(CQP 模式无效)。

各编码器专属选项
av1_vaapi
  • profile/tier/level:设置 seq_profile/seq_tier/seq_level_idx;
  • tiles:瓦片数(列 x 行,默认 auto);
  • tile_groups:瓦片组数量(默认 1)。
h264_vaapi
  • profile/level:设置 profile_idc/constraint_set*_flags/level_idc;
  • coder:熵编码器(cabac/avc,默认 cabac);
  • aud:插入 AUD(默认禁用);
  • sei:SEI 类型(identifier/timing/recovery_point)。
hevc_vaapi
  • profile/level/tier:设置 general_profile_idc/general_level_idc/general_tier_flag;
  • aud:插入 AUD(默认禁用);
  • sei:SEI 类型(hdr:插入 HDR 元数据);
  • tiles:瓦片数(列 x 行)。
mjpeg_vaapi
  • 仅支持基线 DCT 编码,使用标准量化 / 哈夫曼表;global_quality 缩放量化表(1~100);
  • 支持 YUV 4:2:0/4:2:2/4:4:4 及 RGB(生成 RGB JPEG);
  • jfif:插入 JFIF 头部(默认禁用);
  • huffman:包含标准哈夫曼表(默认开启,关闭可减小体积但降低兼容性)。
mpeg2_vaapi
  • profile/level:设置 profile_and_level_indication。
vp8_vaapi
  • 不支持 B 帧;
  • global_quality:非关键帧 q_idx(0~127);
  • loop_filter_level/loop_filter_sharpness:环路滤波参数。
vp9_vaapi
  • global_quality:P 帧 q_idx(0~255);
  • loop_filter_level/loop_filter_sharpness:环路滤波参数;
  • 支持 B 帧,但输出流为编码顺序(需 vp9_raw_reorder 滤镜调整为显示顺序);
  • 仅生成普通帧(需 vp9_superframe 滤镜保证解码器兼容)。

9.32 vbn

Vizrt Binary Image 编码器(广播厂商 Vizrt 用于纹理流传输),不支持 LZW 压缩、MIP 映射等高级特性。

9.32.1 选项
  • format(字符串)纹理压缩格式:dxt1/dxt5/raw,默认 dxt5

9.33 vc2

SMPTE VC-2(原 BBC Dirac Pro)编码器,面向专业广播,支持 yuv420/422/444(8/10/12 位,有限 / 全范围),适用于低开销、低压缩场景(如录屏)。

9.33.1 选项
  • b目标码率(建议为未压缩码率的 1/6,如 1920x1080 50fps yuv422p10 约 400Mbps);值接近未压缩码率时启用无损模式。

  • field_order隔行输入时启用场编码(如 tt 表示顶场优先),提升隔行内容压缩率。

  • wavelet_depth小波变换次数(1~5,默认 5),值越低压缩 / 画质越差(部分解码器仅支持 ≤3)。

  • wavelet_type变换类型:5_3(LeGall)、9_7(Deslauriers-Dubuc,默认,压缩效果更好)。

  • slice_width/slice_height切片大小(值越大压缩越好,兼容解码器建议设为 32/8)。

  • tolerance码率控制欠冲容忍度(百分比,避免耗时搜索)。

  • qm量化矩阵预设(默认 /wavelet_depth=5 时生效):

    • default:标准矩阵(平衡细节与伪影);
    • flat:全零矩阵(提升 PSNR,降低主观画质);
    • color:低码率下保留色彩(牺牲细节)。

10 字幕编码器

10.1 dvbsub

DVB 广播 / 录制中使用的位图字幕编码器,通常嵌入 MPEG-TS 容器作为独立流。

10.1.1 选项
  • min_bpp(整数)字幕颜色查找表的最小比特 / 像素(2/4/8),默认 4(部分播放器不兼容 2bpp)。

10.2 dvdsub

DVD 位图字幕编码器,通常存储为 VOBSUB 文件对(*.idx + *.sub),也支持 Matroska 容器。

10.2.1 选项
  • palette全局调色板,格式为 16 个 24 位十六进制数(无 0x 前缀,逗号分隔)。示例:0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b

  • even_rows_fix(0/1)设为 1 时,强制字幕行数以偶数结尾(修复部分播放器截断奇数行最后一行的问题,添加全透明行,开销极低),默认 0(禁用)。

10.3 lrc

LRC 歌词格式编码器。

10.3.1 选项
  • precision时间戳小数部分精度(默认 2,即厘秒),决定时间基准。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值