⚠️ 这是一个非官方翻译网站,与 FFmpeg 项目无关。准确信息请参阅原文(https://ffmpeg.org/ffmpeg-codecs.html)

FFmpeg Codecs 文档

1 描述

本文档介绍 libavcodec 库提供的 codec(decoder 和 encoder)。

2 Codec 选项

libavcodec 提供了一些可用于所有 encoder 和 decoder 的通用全局选项。此外,每个 codec 还可能支持所谓的私有选项,这些选项为特定 codec 所专有。

有些全局选项可能只对特定类型的 codec 有效,对其他 codec 可能没有意义或被忽略,因此需要了解所指定选项的具体含义。另外,有些选项仅用于解码,或仅用于编码。

可以在 FFmpeg 工具中以 -option value 的形式指定选项,也可以直接在 AVCodecContext 的选项中显式设置值,或者在编程时使用 libavutil/opt.h 的 API 进行设置。

支持的选项列表如下:

b integer (encoding,audio,video)

设置比特率,单位为 bit/s。默认值为 200K。

ab integer (encoding,audio)

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

bt integer (encoding,video)

设置视频比特率容差(单位为 bit/s)。在单遍(1-pass)模式下,比特率容差指定 ratecontrol 允许偏离目标平均比特率的程度,这与最小/最大比特率无关。过度降低容差会对画质产生不利影响。

flags flags (decoding/encoding,audio,video,subtitles)

设置通用标志。

可选值:

‘mv4’

每个宏块使用四个运动矢量(mpeg4)。

‘qpel’

使用 1/4 像素运动补偿。

‘loop’

使用环路滤波器。

‘qscale’

使用固定的 qscale。

‘pass1’

在第一遍模式下使用内部两遍 ratecontrol。

‘pass2’

在第二遍模式下使用内部两遍 ratecontrol。

‘gray’

仅解码/编码灰度图像。

‘psnr’

在编码过程中设置 error[?] 变量。

‘truncated’

输入 bitstream 可能被随机截断。

‘drop_changed’

不输出参数与流中首个已解码帧不同的帧。当某一帧被丢弃时,会返回错误 AVERROR_INPUT_CHANGED。

‘ildct’

使用隔行 DCT。

‘low_delay’

强制使用低延迟。

‘global_header’

将全局头放入 extradata,而不是放在每个 keyframe 中。

‘bitexact’

只写入与平台、构建和时间无关的数据((I)DCT 除外)。这样可以确保文件和数据的校验和是可重现的,并且在不同平台间保持一致。其主要用途是回归测试。

‘aic’

应用 H263 的高级帧内编码 / mpeg4 的 ac 预测。

‘ilme’

应用隔行运动估计。

‘cgop’

使用闭合 GOP。

‘output_corrupt’

即使帧可能已损坏也照常输出。

time_base rational number

设置 codec 的时间基。

这是用于表示帧时间戳的基本时间单位(以秒为单位)。对于固定帧率的内容,时间基应为 1 / frame_rate,且时间戳的增量应始终为 1。

g integer (encoding,video)

设置 group of picture(GOP)的大小。默认值为 12。

ar integer (decoding/encoding,audio)

设置音频采样率(单位为 Hz)。

ac integer (decoding/encoding,audio)

设置音频声道数。

cutoff integer (encoding,audio)

设置截止带宽。(仅部分 encoder 支持,具体请参阅各自的文档章节。)

frame_size integer (encoding,audio)

设置音频帧大小。

除最后一帧外,提交的每一帧每个声道必须恰好包含 frame_size 个采样。当 codec 设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时可以为 0,此时帧大小不受限制。部分 decoder 会设置该值以表示帧大小恒定。

frame_number integer

设置帧编号。

delay integer qcomp float (encoding,video)

设置视频量化器尺度压缩(VBR)。该值在 ratecontrol 方程中用作常量。对于默认的 rc_eq,推荐范围为 0.0-1.0。

qblur float (encoding,video)

设置视频量化器尺度模糊(VBR)。

qmin integer (encoding,video)

设置最小视频量化器尺度(VBR)。取值必须介于 -1 到 69 之间,默认值为 2。

qmax integer (encoding,video)

设置最大视频量化器尺度(VBR)。取值必须介于 -1 到 1024 之间,默认值为 31。

qdiff integer (encoding,video)

设置量化器尺度之间的最大差值(VBR)。

bf integer (encoding,video)

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

必须是 -1 到 16 之间的整数。0 表示禁用 B 帧。若使用 -1,则会根据 encoder 自动选择合适的值。

默认值为 0。

b_qfactor float (encoding,video)

设置 P 帧与 B 帧之间的 qp factor。

codec_tag integer bug flags (decoding,video)

规避未被自动检测到的 encoder 缺陷。

可选值:

‘autodetect’ ‘xvid_ilace’

Xvid 的隔行缺陷(当 fourcc==XVIX 时自动检测)

‘ump4’

(当 fourcc==UMP4 时自动检测)

‘no_padding’

填充缺陷(自动检测)

‘amv’ ‘qpel_chroma’ ‘std_qpel’

旧标准 qpel(按 fourcc/版本自动检测)

‘qpel_chroma2’ ‘direct_blocksize’

direct-qpel-blocksize 缺陷(按 fourcc/版本自动检测)

‘edge’

边缘填充缺陷(按 fourcc/版本自动检测)

‘hpel_chroma’ ‘dc_clip’ ‘ms’

规避 Microsoft 有问题的 decoder 中存在的各种缺陷。

‘trunc’

被截断的帧

strict integer (decoding/encoding,audio,video)

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

可选值:

‘very’

严格遵循更旧、更严格版本的规范或参考软件

‘strict’

无论后果如何,都严格遵循规范中记载的所有事项

‘normal’ ‘unofficial’

允许非官方扩展

‘experimental’

允许非标准化的实验性内容,以及实验性(未完成/开发中/未经充分测试)的 decoder 和 encoder。注意:实验性 decoder 可能存在安全风险,请勿用它来解码不可信的输入。

b_qoffset float (encoding,video)

设置 P 帧与 B 帧之间的 QP offset。

err_detect flags (decoding,audio,video)

设置错误检测标志。

可选值:

‘crccheck’

校验嵌入的 CRC

‘bitstream’

检测 bitstream 与规范的偏差

‘buffer’

检测不正确的 bitstream 长度

‘explode’

检测到轻微错误时中止解码

‘ignore_err’

忽略解码错误并继续解码。如果你想分析视频内容,希望无论如何都能将所有内容解码出来,这个选项会很有用。但一旦发生错误,该选项并不能保证解码出的视频仍然适合观看。

‘careful’

将违反规范、且在实际环境中从未出现过的情况视为错误

‘compliant’

将所有不符合规范的情况都视为错误

‘aggressive’

将正常的 encoder 不应做出的行为视为错误

has_b_frames integer block_align integer rc_override_count integer maxrate integer (encoding,audio,video)

设置最大比特率容差(单位为 bit/s)。需要同时设置 bufsize。

minrate integer (encoding,audio,video)

设置最小比特率容差(单位为 bit/s)。在配置 CBR 编码时最为有用,其他情况下用处不大。

bufsize integer (encoding,audio,video)

设置 ratecontrol 缓冲区大小(单位为 bit)。

i_qfactor float (encoding,video)

设置 P 帧与 I 帧之间的 QP factor。

i_qoffset float (encoding,video)

设置 P 帧与 I 帧之间的 QP offset。

dct integer (encoding,video)

设置 DCT 算法。

可选值:

‘auto’

自动选择合适的算法(默认)

‘fastint’

快速整数运算

‘int’

精确整数运算

‘mmx’ ‘altivec’ ‘faan’

浮点 AAN DCT

lumi_mask float (encoding,video)

对明亮区域施加比中等亮度区域更强的压缩。

tcplx_mask float (encoding,video)

设置时间复杂度掩蔽。

scplx_mask float (encoding,video)

设置空间复杂度掩蔽。

p_mask float (encoding,video)

设置帧间掩蔽。

dark_mask float (encoding,video)

对暗部区域施加比中等亮度区域更强的压缩。

idct integer (decoding/encoding,video)

选择 IDCT 的实现方式。

可选值:

‘auto’ ‘int’ ‘simple’ ‘simplemmx’ ‘simpleauto’

自动选择与 simple 兼容的 IDCT

‘arm’ ‘altivec’ ‘sh4’ ‘simplearm’ ‘simplearmv5te’ ‘simplearmv6’ ‘simpleneon’ ‘xvid’ ‘faani’

浮点 AAN IDCT

slice_count integer ec flags (decoding,video)

设置错误隐藏策略。

可选值:

‘guess_mvs’

迭代运动矢量(MV)搜索(速度慢)

‘deblock’

对受损的宏块使用强力去块滤波器

‘favor_inter’

优先从前一帧而非当前帧进行预测

bits_per_coded_sample integer aspect rational number (encoding,video)

设置样本宽高比。

sar rational number (encoding,video)

设置样本宽高比,是 aspect 的别名。

debug flags (decoding/encoding,audio,video,subtitles)

输出特定的调试信息。

可选值:

‘pict’

图像信息

‘rc’

码率控制

‘bitstream’ ‘mb_type’

宏块(MB)类型

‘qp’

每个块的量化参数(QP)

‘dct_coeff’ ‘green_metadata’

显示即将到来的帧、GoP 或指定时长的复杂度元数据。

‘skip’ ‘startcode’ ‘er’

错误识别

‘mmco’

内存管理控制操作(H.264)

‘bugs’ ‘buffers’

图像缓冲区分配

‘thread_ops’

线程操作

‘nomc’

跳过运动补偿

cmp integer (encoding,video)

设置整像素运动估计(ME)比较函数。

可选值:

‘sad’

绝对差值和,速度快(默认)

‘sse’

平方误差和

‘satd’

Hadamard 变换差值绝对值之和

‘dct’

DCT 变换差值绝对值之和

‘psnr’

量化误差平方和(应避免,质量较低)

‘bit’

块所需的比特数

‘rd’

率失真最优,速度慢

‘zero’

0

‘vsad’

垂直方向差值绝对值之和

‘vsse’

垂直方向平方差之和

‘nsse’

保留噪声的平方差之和

‘w53’

5/3 小波,仅用于 snow

‘w97’

9/7 小波,仅用于 snow

‘dctmax’ ‘chroma’ subcmp integer (encoding,video)

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

可选值:

‘sad’

绝对差值和,速度快(默认)

‘sse’

平方误差和

‘satd’

Hadamard 变换差值绝对值之和

‘dct’

DCT 变换差值绝对值之和

‘psnr’

量化误差平方和(应避免,质量较低)

‘bit’

块所需的比特数

‘rd’

率失真最优,速度慢

‘zero’

0

‘vsad’

垂直方向差值绝对值之和

‘vsse’

垂直方向平方差之和

‘nsse’

保留噪声的平方差之和

‘w53’

5/3 小波,仅用于 snow

‘w97’

9/7 小波,仅用于 snow

‘dctmax’ ‘chroma’ mbcmp integer (encoding,video)

设置宏块比较函数。

可选值:

‘sad’

绝对差值和,速度快(默认)

‘sse’

平方误差和

‘satd’

Hadamard 变换差值绝对值之和

‘dct’

DCT 变换差值绝对值之和

‘psnr’

量化误差平方和(应避免,质量较低)

‘bit’

块所需的比特数

‘rd’

率失真最优,速度慢

‘zero’

0

‘vsad’

垂直方向差值绝对值之和

‘vsse’

垂直方向平方差之和

‘nsse’

保留噪声的平方差之和

‘w53’

5/3 小波,仅用于 snow

‘w97’

9/7 小波,仅用于 snow

‘dctmax’ ‘chroma’ ildctcmp integer (encoding,video)

设置隔行 DCT 比较函数。

可选值:

‘sad’

绝对差值和,速度快(默认)

‘sse’

平方误差和

‘satd’

Hadamard 变换差值绝对值之和

‘dct’

DCT 变换差值绝对值之和

‘psnr’

量化误差平方和(应避免,质量较低)

‘bit’

块所需的比特数

‘rd’

率失真最优,速度慢

‘zero’

0

‘vsad’

垂直方向差值绝对值之和

‘vsse’

垂直方向平方差之和

‘nsse’

保留噪声的平方差之和

‘w53’

5/3 小波,仅用于 snow

‘w97’

9/7 小波,仅用于 snow

‘dctmax’ ‘chroma’ dia_size integer (encoding,video)

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

‘(1024, INT_MAX)’

全搜索运动估计(最慢)

‘(768, 1024]’

umh 运动估计

‘(512, 768]’

hex 运动估计

‘(256, 512]’

l2s 菱形运动估计

‘[2,256]’

var 菱形运动估计

‘(-1, 2)’

small 菱形运动估计

‘-1’

funny 菱形运动估计

‘(INT_MIN, -1)’

sab 菱形运动估计

last_pred integer (encoding,video)

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

precmp integer (encoding,video)

设置运动估计预处理阶段的比较函数。

可选值:

‘sad’

绝对差值和,速度快(默认)

‘sse’

平方误差和

‘satd’

Hadamard 变换差值绝对值之和

‘dct’

DCT 变换差值绝对值之和

‘psnr’

量化误差平方和(应避免,质量较低)

‘bit’

块所需的比特数

‘rd’

率失真最优,速度慢

‘zero’

0

‘vsad’

垂直方向差值绝对值之和

‘vsse’

垂直方向平方差之和

‘nsse’

保留噪声的平方差之和

‘w53’

5/3 小波,仅用于 snow

‘w97’

9/7 小波,仅用于 snow

‘dctmax’ ‘chroma’ pre_dia_size integer (encoding,video)

设置运动估计预处理阶段所用的菱形类型和大小。

subq integer (encoding,video)

设置亚像素运动估计的质量。

me_range integer (encoding,video)

设置运动矢量范围的上限(DivX 播放器为 1023)。

global_quality integer (encoding,audio,video) slice_flags integer mbd integer (encoding,video)

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

可选值:

‘simple’

使用 mbcmp(默认)

‘bits’

使用最少的比特数

‘rd’

使用最佳率失真

rc_init_occupancy integer (encoding,video)

设置在解码开始之前应加载到 rc 缓冲区中的比特数。

flags2 flags (decoding/encoding,audio,video,subtitles)

可选值:

‘fast’

允许不符合规范的加速技巧。

‘noout’

跳过 bitstream 编码。

‘ignorecrop’

忽略来自 sps 的裁剪信息。

‘local_header’

将全局头放在每个 keyframe 中,而不是放入 extradata。

‘chunks’

帧数据可能被拆分为多个 chunk。

‘showall’

显示第一个 keyframe 之前的所有帧。

‘export_mvs’

对于支持该功能的 codec,将运动矢量导出到帧的 side data 中(参见 AV_FRAME_DATA_MOTION_VECTORS)。另请参阅 doc/examples/export_mvs.c。

‘skip_manual’

不跳过采样,并将跳过信息作为帧的 side data 导出。

‘ass_ro_flush_noop’

在 flush 时不重置 ASS 的 ReadOrder 字段。

‘icc_profiles’

根据 colorimetry 标签生成嵌入式 ICC 配置文件,或将其解析为 colorimetry 标签。

‘fixed_frame_size’

强制音频 encoder 使用固定的帧大小。

export_side_data flags (decoding/encoding,audio,video,subtitles)

可选值:

‘mvs’

对于支持该功能的 codec,将运动矢量导出到帧的 side data 中(参见 AV_FRAME_DATA_MOTION_VECTORS)。另请参阅 doc/examples/export_mvs.c。

‘prft’

对于支持该功能的 codec,将 encoder 的 Producer Reference Time 导出到数据包的 side data 中(参见 AV_PKT_DATA_PRFT)。

‘venc_params’

对于支持该功能的 codec,通过帧的 side data 导出视频编码参数(参见 AV_FRAME_DATA_VIDEO_ENC_PARAMS)。目前支持的 codec 为 H.264 和 VP9。

‘film_grain’

通过帧的 side data 导出胶片颗粒参数(参见 AV_FRAME_DATA_FILM_GRAIN_PARAMS)。目前 AV1 decoder 支持该功能。

‘enhancements’

通过帧的 side data 导出图像增强元数据,例如 LCEVC(参见 AV_FRAME_DATA_LCEVC)。

threads integer (decoding/encoding,video)

设置要使用的线程数,前提是所选 codec 的实现支持多线程。

可选值:

‘auto, 0’

自动选择要设置的线程数

默认值为 ‘auto’。

dc integer (encoding,video)

设置 intra_dc_precision。

nssew integer (encoding,video)

设置 nsse 权重。

skip_top integer (decoding,video)

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

skip_bottom integer (decoding,video)

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

profile integer (encoding,audio,video)

设置 encoder 的 codec profile。默认值为 ‘unknown’。encoder 特有的 profile 详见相应 encoder 的文档。

level integer (encoding,audio,video)

设置 encoder 的级别。该级别取决于具体的 codec,可能与 profile 的级别相对应。默认设置为 ‘unknown’。

可选值:

‘unknown’ lowres integer (decoding,audio,video)

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

mblmin integer (encoding,video)

设置最小宏块拉格朗日系数(VBR)。

mblmax integer (encoding,video)

设置最大宏块拉格朗日系数(VBR)。

skip_loop_filter integer (decoding,video) skip_idct integer (decoding,video) skip_frame integer (decoding,video)

根据该选项值所选择的帧类型,让 decoder 丢弃相应的处理。

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

可选值:

‘none’

不丢弃任何帧。

‘default’

丢弃无用的帧,例如大小为 0 的帧。

‘noref’

丢弃所有非参考帧。

‘bidir’

丢弃所有双向帧。

‘nokey’

丢弃除 keyframe 以外的所有帧。

‘nointra’

丢弃除 I 帧以外的所有帧。

‘all’

丢弃所有帧。

默认值为 ‘default’。

bidir_refine integer (encoding,video)

精细化双向宏块中使用的两个运动矢量。

keyint_min integer (encoding,video)

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

refs integer (encoding,video)

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

trellis integer (encoding,audio,video)

设置率失真最优量化。

mv0_threshold integer (encoding,video) compression_level integer (encoding,audio,video) bits_per_raw_sample integer channel_layout integer (decoding/encoding,audio)

所需语法请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的 Channel Layout 一节

rc_max_vbv_use float (encoding,video) rc_min_vbv_use float (encoding,video) color_primaries integer (decoding/encoding,video)

可选值:

‘bt709’

BT.709

‘bt470m’

BT.470 M

‘bt470bg’

BT.470 BG

‘smpte170m’

SMPTE 170 M

‘smpte240m’

SMPTE 240 M

‘film’

Film

‘bt2020’

BT.2020

‘smpte428’ ‘smpte428_1’

SMPTE ST 428-1

‘smpte431’

SMPTE 431-2

‘smpte432’

SMPTE 432-1

‘jedec-p22’

JEDEC P22

color_trc integer (decoding/encoding,video)

可选值:

‘bt709’

BT.709

‘gamma22’

BT.470 M

‘gamma28’

BT.470 BG

‘smpte170m’

SMPTE 170 M

‘smpte240m’

SMPTE 240 M

‘linear’

Linear

‘log’ ‘log100’

Log

‘log_sqrt’ ‘log316’

Log square root

‘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 bit

‘bt2020_12’ ‘bt2020_12bit’

BT.2020 - 12 bit

‘smpte2084’

SMPTE ST 2084

‘smpte428’ ‘smpte428_1’

SMPTE ST 428-1

‘arib-std-b67’

ARIB STD-B67

colorspace integer (decoding/encoding,video)

可选值:

‘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’

Chroma-derived NCL

‘chroma-derived-c’

Chroma-derived CL

‘ictcp’

ICtCp

color_range integer (decoding/encoding,video)

如果用作输入参数,它会作为提示告知 decoder 输入具有的 color_range。可选值:

‘tv’ ‘mpeg’ ‘limited’

MPEG (219*2^(n-8))

‘pc’ ‘jpeg’ ‘full’

JPEG (2^n-1)

chroma_sample_location integer (decoding/encoding,video)

可选值:

‘left’ ‘center’ ‘topleft’ ‘top’ ‘bottomleft’ ‘bottom’ alpha_mode integer (decoding/encoding,video)

可选值:

‘premultiplied’ ‘straight’ log_level_offset integer

设置日志级别偏移量。

slices integer (encoding,video)

用于并行编码的条带数量。

thread_type flags (decoding/encoding,video)

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

使用 ‘frame’ 会使解码延迟每个线程增加一帧,因此无法提供后续帧的客户端不应使用它。

可选值:

‘slice’

一次解码单帧中的多个部分。

使用条带的多线程仅在视频采用条带方式编码时才有效。

‘frame’

一次解码多个帧。

默认值为 ‘slice+frame’。

audio_service_type integer (encoding,audio)

设置音频服务类型。

可选值:

‘ma’

主音频服务

‘ef’

效果

‘vi’

视障服务

‘hi’

听障服务

‘di’

对白

‘co’

解说

‘em’

紧急

‘vo’

画外音

‘ka’

卡拉 OK

request_sample_fmt sample_fmt (decoding,audio)

设置音频 decoder 应优先使用的 sample format。默认值为 none

pkt_timebase rational number sub_charenc encoding (decoding,subtitles)

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

field_order field_order (video)

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

‘progressive’

逐行扫描视频

‘tt’

隔行视频,顶场先编码并先显示

‘bb’

隔行视频,底场先编码并先显示

‘tb’

隔行视频,顶场先编码,底场先显示

‘bt’

隔行视频,底场先编码,顶场先显示

skip_alpha bool (decoding,video)

设为 1 可禁用 alpha(透明度)的处理。这与 flags 选项中的 ‘gray’ 标志类似,但后者跳过的是色度信息而不是 alpha。默认值为 0。

codec_whitelist list (input)

以 "," 分隔的允许使用的 decoder 列表。默认全部允许。

dump_separator string (input)

用于分隔命令行中显示的流参数字段的分隔符。例如,要用换行和缩进分隔各字段:

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

max_pixels integer (decoding/encoding,video)

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

apply_cropping bool (decoding,video)

如果裁剪参数(left 和 top 参数)是所需对齐值的倍数,则启用裁剪。如果不满足对齐要求,裁剪将只被部分应用以维持对齐。默认值为 1(启用)。注意:所需的对齐值取决于是否设置了 AV_CODEC_FLAG_UNALIGNED 以及所用的 CPU。AV_CODEC_FLAG_UNALIGNED 无法从命令行更改。此外,硬件 decoder 不会应用 left/top 的裁剪。

3 Decoders

decoder 是 FFmpeg 中用于解码多媒体流的已配置元素。

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

你可以使用 configure 选项 --disable-decoders 禁用所有 decoder,也可以使用 --enable-decoder=DECODER / --disable-decoder=DECODER 选项有选择地启用/禁用单个 decoder。

ff* 工具的 -decoders 选项会显示已启用 decoder 的列表。

4 视频 Decoders

下面介绍当前一些可用的视频 decoder。

4.1 av1

AOMedia Video 1 (AV1) decoder。

4.1.1 选项

operating_point

选择可伸缩 AV1 bitstream 的 operating point(0 - 31)。默认值为 0。

4.2 hevc

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

该 decoder 支持最多两个视图的 MV-HEVC 多视图流。要输出的视图通过向 decoder 提供一份视图 ID 列表来选择(即 view_ids 选项)。此选项既可以在 decoder 初始化之前静态设置,也可以在 get_format() 回调中设置——这在视图数量或 ID 在解码过程中动态变化的情况下很有用。

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

请注意,如果你使用的是 ffmpeg CLI 工具,应使用其手册中记载的视图指定符,而不是这里记载的选项。

4.2.1 选项

view_ids (MV-HEVC)

指定应输出的视图 ID 列表。此选项也可以设为单个 ’-1’,此时 VPS 中定义的所有视图都会被解码并输出。

view_ids_available (MV-HEVC)

调用方可以读取此选项,以获取当前激活的 VPS 中可用视图 ID 的数组。对于单层视频,该数组为空。

get_format() 回调中读取时,此选项的值保证是准确的。它也可能在其他时机被设置(例如在打开 decoder 之后),但此时的值仅供参考,可能不准确(例如流中包含多个不同的 VPS NALU 时)。

view_pos_available (MV-HEVC)

调用方可以读取此选项,以 AVStereo3DView 值的形式获取当前激活的 VPS 中可用视图位置(left、right 或 unspecified)的数组。该数组可用时,其元素与 view_ids_available 的对应元素相对应,即 view_pos_available[i] 包含 ID 为 view_ids_available[i] 的视图的位置。

与 view_ids_available 相同的有效性限制同样适用于此选项。

4.3 rawvideo

Raw video decoder。

此 decoder 用于解码 rawvideo 流。

4.3.1 选项

top top_field_first

指定输入视频所假定的场类型。

-1

视频被假定为逐行扫描(默认)

0

假定为底场优先(bottom-field-first)

1

假定为顶场优先(top-field-first)

4.4 libdav1d

dav1d AV1 decoder。

libdav1d 使 libavcodec 能够解码 AOMedia Video 1 (AV1) codec。需要在配置阶段存在 libdav1d 的头文件和库。你需要在配置构建时显式加上 --enable-libdav1d

4.4.1 选项

libdav1d 包装器支持以下选项。

max_frame_delay

设置 decoder 内部可缓冲的最大帧数。默认值为 0(自动检测)。

filmgrain

如果 bitstream 中存在胶片颗粒,则将其应用到解码后的视频。默认使用库的内部默认值。此选项已弃用,将来会被移除。若要导出胶片颗粒参数而非直接应用,请参见全局选项 export_side_data

oppoint

选择可伸缩 AV1 bitstream 的 operating point(0 - 31)。默认使用库的内部默认值。

alllayers

输出可伸缩 AV1 bitstream 的所有空间层。默认值为 false。

4.5 libdavs2

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

此 decoder 使 libavcodec 能够借助 davs2 库解码 AVS2 流。

4.6 libuavs3d

AVS3-P2/IEEE1857.10 视频 decoder。

libuavs3d 使 libavcodec 能够解码 AVS3 流。需要在配置阶段存在 libuavs3d 的头文件和库。你需要在配置构建时显式加上 --enable-libuavs3d

4.6.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

4.7 libxevd

eXtra-fast Essential Video Decoder (XEVD) MPEG-5 EVC decoder 包装器。

此 decoder 需要在配置阶段存在 libxevd 的头文件和库。你需要在配置构建时显式加上 --enable-libxevd。

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

4.7.1 选项

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

要获取更准确、更详尽的 libxevd 选项文档,请执行命令 xevd_app --help,或参阅 libxevd 的文档。

threads (threads)

强制使用指定数量的线程

4.8 QSV Decoders

Intel QuickSync Video decoder 系列(VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1、VVC)。

4.8.1 通用选项

所有 qsv decoder 都支持以下选项。

async_depth

内部并行化深度,值越大延迟越高。

gpu_copy

在视频内存与系统内存之间进行 GPU 加速拷贝

‘default’ ‘on’ ‘off’

4.8.2 HEVC 选项

hevc_qsv 的额外选项。

load_plugin

在内部会话中加载的用户插件

‘none’ ‘hevc_sw’ ‘hevc_hw’ load_plugins

在内部会话中加载的、以 : 分隔的十六进制插件 UID 列表

4.9 v210

未压缩 4:2:2 10 位 decoder。

4.9.1 选项

custom_stride

以字节为单位设置 v210 数据的行大小。默认值为 0(自动检测)。对于 BOXX 文件中出现的无 stride 的 v210,可以使用特殊值 -1。

5 音频 Decoders

下面介绍当前一些可用的音频 decoder。

5.1 ac3

AC-3 音频 decoder。

此 decoder 实现了 ATSC A/52:2010 和 ETSI TS 102 366 的部分内容,以及未公开规范的 RealAudio 3(又称 dnet)。

5.1.1 AC-3 Decoder 选项

-drc_scale value

动态范围缩放系数。应用于 AC-3 流中动态范围值的系数。该系数按指数方式应用。默认值为 1。有 3 个值得注意的缩放系数范围:

drc_scale == 0

DRC 禁用。产生全范围的音频。

0 < drc_scale <= 1

DRC 启用。应用流 DRC 值的一部分。音频重现介于全范围和全压缩之间。

drc_scale > 1

DRC 启用。非对称地应用 drc_scale。响亮的声音被完全压缩,轻柔的声音被增强。

5.2 flac

FLAC 音频 decoder。

此 decoder 力求完整实现 Xiph 的 FLAC 规范。

5.2.1 FLAC Decoder 选项

-use_buggy_lpc

lavc 的 FLAC encoder 过去在使用较高 lpc 值(例如默认值)时会产生有问题的流。此选项通过在解码时使用 lavc 旧版有问题的 lpc 逻辑,使得能够正确解码此类流。

5.3 ffwavesynth

内部使用的波形合成器。

此 decoder 根据预定义的序列生成波形。它纯粹用于内部,所接受数据的格式没有公开文档说明。

5.4 libgsm

libgsm decoder 包装器。

libgsm 使 libavcodec 能够解码 GSM full rate 音频 codec。需要在配置阶段存在 libgsm 的头文件和库。你需要在配置构建时显式加上 --enable-libgsm

此 decoder 同时支持普通 GSM 和 Microsoft 变体。

5.5 libilbc

libilbc decoder 包装器。

libilbc 使 libavcodec 能够解码 Internet Low Bitrate Codec (iLBC) 音频 codec。需要在配置阶段存在 libilbc 的头文件和库。你需要在配置构建时显式加上 --enable-libilbc

5.5.1 选项

libilbc 包装器支持以下选项。

enhance

设为 1 时,启用对解码后音频的增强。默认值为 0(禁用)。

5.6 libmpeghdec

libmpeghdec decoder 包装器。

libmpeghdec 使 libmpeghdec 能够解码 MPEG-H 3D 音频 codec。需要在配置阶段存在 libmpeghdec 的头文件和库。你需要在配置构建时显式加上 --enable-libmpeghdec --enable-nonfree

5.7 libopencore-amrnb

libopencore-amrnb decoder 包装器。

libopencore-amrnb 使 libavcodec 能够解码 Adaptive Multi-Rate Narrowband 音频 codec。使用它需要在配置阶段存在 libopencore-amrnb 的头文件和库。你需要在配置构建时显式加上 --enable-libopencore-amrnb

已经存在 AMR-NB 的 FFmpeg 原生 decoder,因此用户无需此库即可解码 AMR-NB。

5.8 libopencore-amrwb

libopencore-amrwb decoder 包装器。

libopencore-amrwb 使 libavcodec 能够解码 Adaptive Multi-Rate Wideband 音频 codec。使用它需要在配置阶段存在 libopencore-amrwb 的头文件和库。你需要在配置构建时显式加上 --enable-libopencore-amrwb

已经存在 AMR-WB 的 FFmpeg 原生 decoder,因此用户无需此库即可解码 AMR-WB。

5.9 libopus

libopus decoder 包装器。

libopus 使 libavcodec 能够解码 Opus Interactive Audio Codec。需要在配置阶段存在 libopus 的头文件和库。你需要在配置构建时显式加上 --enable-libopus

已经存在 Opus 的 FFmpeg 原生 decoder,因此用户无需此库即可解码 Opus。

6 字幕 Decoders

6.1 libaribb24

ARIB STD-B24 字幕 decoder。

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

6.1.1 libaribb24 Decoder 选项

-aribb24-base-path path

设置 libaribb24 库的基础路径。该路径用于读取配置文件(用于自定义 Unicode 转换),以及将非文本符号作为图像导出到该位置下。

默认未设置。

-aribb24-skip-ruby-text boolean

告知 decoder 包装器跳过包含半高注音文本(ruby text)的文本块。

默认启用。

6.2 libaribcaption

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

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

需要在配置阶段存在 libaribcaption 的头文件和库(https://github.com/xqq/libaribcaption)。你需要在配置构建时显式加上 --enable-libaribcaption。如果 libaribb24libaribcaption 同时启用,则 libaribcaption decoder 优先。

6.2.1 libaribcaption Decoder 选项

-sub_type subtitle_type

指定解码后字幕的格式。

‘bitmap’

图形图像。

‘ass’

ASS 格式的文本。

‘text’

不带格式的简单文本输出。

默认值与 libaribb24 decoder 相同,为 ass。部分现有播放器(例如 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 中定义的 Latin 字符编码。该编码用于南美洲的 SBTVD / ISDB-Tb 字幕。

-font font_name[,font_name2,...]

以逗号分隔的列表指定用于 bitmapass 类型字幕渲染的字体族名称。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

指定是否忽略类似 ruby(振假名)的字符渲染。

默认值为 false。

-replace_drcs boolean

指定是否将替换后的 DRCS 字符渲染为 Unicode 字符。

默认值为 true。

-replace_msz_ascii boolean

指定是否将 MSZ(Middle Size;半角)全角字母数字替换为半角字母数字。

默认值为 true。

-replace_msz_japanese boolean

指定是否将部分 MSZ(Middle Size;半角)全角日语特殊字符替换为半角字符。

默认值为 true。

-replace_msz_glyph boolean

指定在字体支持的情况下,是否将 MSZ(Middle Size;半角)字符替换为半角字形。此选项适用于使用 Adobe-Japan1 兼容字体的 FreeType 或 DirectWrite 渲染器,例如 IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、Yu Gothic、Yu Mincho 和 Meiryo。

默认值为 true。

-canvas_size image_size

指定用于渲染字幕的画布分辨率;通常应设为输入视频的帧大小。此选项仅在 -subtitle_type 设为 bitmap 时适用。

libaribcaption decoder 假定用于 bitmap 渲染的输入帧大小如下:

  1. PROFILE_A : 1440 x 1080,SAR (PAR) 4:3
  2. PROFILE_C : 320 x 180,SAR (PAR) 1:1

如果输入视频的实际帧大小与上述假设不一致,渲染出的字幕可能会失真。要避免字幕失真,请添加 -canvas_size 选项以指定实际的输入视频大小。

请注意,对于尺寸不同但宽高比相同的视频,不需要指定 -canvas_size 选项。在这种情况下,如果未指定 -canvas_size 选项,字幕会被拉伸或缩小以匹配实际的视频大小。如果以不同的尺寸指定了 -canvas_size 选项,字幕会按指定的尺寸并根据计算得到的 SAR 进行拉伸或缩小。

6.2.2 libaribcaption decoder 使用示例

使用 ffplay 工具显示带 ARIB 字幕的 MPEG-TS 文件:

ffplay -sub_type bitmap MPEG.TS

使用 ffplay 工具显示输入帧大小为 1920x1080 的 MPEG-TS 文件:

ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS

在转码后的视频中嵌入 ARIB 字幕:

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

此 codec 用于解码 DVD 中使用的位图字幕;相同的字幕也可见于 VobSub 文件对以及部分 Matroska 文件中。

6.4.1 选项

palette

指定位图使用的全局调色板。存储在 VobSub 中时,调色板通常在索引文件中指定;在 Matroska 中,调色板以与 VobSub 相同的格式存储在 codec 的 extra-data 中。在 DVD 中,调色板存储在 IFO 文件中,因此从转储的 VOB 文件读取时无法获取。

此选项的格式为一个字符串,包含 16 个以逗号分隔的 24 位十六进制数(不带 0x 前缀),例如 0d00ee, ee450d, 101010, eaeaea, 0ce60b, ec14ed, ebff0b, 0d617a, 7b7b7b, d1d1d1, 7b2a0e, 0d950c, 0f007b, cf0dec, cfa80c, 7c127b

ifo_palette

指定获取全局调色板的 IFO 文件。(实验性)

forced_subs_only

仅解码标记为 forced 的字幕条目。部分片源在同一轨道中同时包含 forced 字幕和非 forced 字幕。将此标志设为 1 后,只会保留 forced 字幕。默认值为 0

6.5 libzvbi-teletext

Libzvbi 使 libavcodec 能够解码 DVB teletext 页面和 DVB teletext 字幕。配置时需要存在 libzvbi 的头文件和库。构建时需要显式指定 --enable-libzvbi 进行配置。

6.5.1 选项

txt_page

要解码的 teletext 页码列表。不匹配指定列表的页面会被丢弃。你可以使用特殊字符串 * 匹配所有页面,或使用 subtitle 匹配所有字幕页面。默认值为 *。

txt_default_region

设置解码使用的默认字符集,取值范围为 0 到 87(参见 ETS 300 706 第 15 节表 32)。默认值为 -1,此时不会覆盖 libzvbi 的默认值。部分无法正确通知字符集的旧式 level 1.0 传输需要此选项。

txt_chop_top

丢弃 teletext 的顶部一行。默认值为 1。

txt_format

指定解码后字幕的格式。

bitmap

默认格式,应对 teletext 页面使用此格式,因为某些图形和颜色无法用纯文本甚至 ASS 表达。

text

不带格式的简单文本输出。

ass

带格式的 ASS 输出;字幕页面和 teletext 页面以不同样式返回,字幕页面会被精简为纯文本,但会尽量保留文本对齐和格式。

txt_left

生成位图的 X 偏移量,默认值为 0。

txt_top

生成位图的 Y 偏移量,默认值为 0。

txt_chop_spaces

去除生成文本首尾的空白,并移除空行。对于基于 teletext 的字幕,此选项很有用:这类字幕的行首或行尾可能存在空白,或者由于双倍大小的 teletext 字符,字幕行之间可能存在空行。默认值为 1。

txt_duration

以毫秒为单位设置解码后的 teletext 页面或字幕的显示时长。默认值为 -1,表示无限长,或持续到下一个字幕事件出现为止。

txt_transparent

强制生成的 teletext 位图使用透明背景。默认值为 0,表示不透明背景。

txt_opacity

设置 teletext 背景的不透明度(0-255)。如果未设置 txt_transparent,则仅影响起始框和结束框之间的字符,通常是字幕。如果设置了 txt_transparent,默认值为 0,否则为 255。

7 Encoders

encoder 是 FFmpeg 中用于对多媒体流进行编码的可配置元素。

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

你可以使用 configure 选项 --disable-encoders 禁用所有 encoder,并使用选项 --enable-encoder=ENCODER / --disable-encoder=ENCODER 有选择地启用/禁用单个 encoder。

ff* 工具的 -encoders 选项会显示已启用的 encoder 列表。

8 音频 Encoders

以下介绍当前可用的部分音频 encoder。

8.1 aac

Advanced Audio Coding(AAC)encoder。

此 encoder 是默认的 AAC encoder,原生实现于 FFmpeg 中。

8.1.1 选项

b

以 bits/s 为单位设置比特率。设置此项会自动启用固定比特率(CBR)模式。如果未指定此选项,则设为 128kbps。

q

设置可变比特率(VBR)模式的质量。此选项仅在使用 ffmpeg 命令行工具时有效。使用库接口的用户请改用 global_quality。

cutoff

设置截止频率。如果未指定,会允许 encoder 动态调整截止频率,以提升低比特率下的清晰度。

aac_coder

设置 AAC encoder 的编码方式。可选值:

‘twoloop’

双循环搜索(TLS)方法。这是默认方法。

此方法首先根据频带阈值设置量化器,然后通过对所有量化器加减特定值,并对个别量化器做少量调整,来尝试找到最优组合。会根据 aac_is、aac_ms 和 aac_pns 是否启用进行自我调节。

‘anmr’

基于网格(trellis)的平均噪声掩蔽比(ANMR)解法。

这是一种实验性的编码方法,目前质量较低、更不稳定、速度也比默认的 twoloop 方法慢,但有潜力。目前不支持 aac_is 或 aac_pns 选项。目前不推荐使用。

‘fast’

恒定量化器方法。

使用 twoloop 算法的简化版本,不会做太多精细调整。在低比特率(低于 64kbps)下效果较差,但在较高比特率下效果更好、速度也快得多。

aac_ms

设置 mid/side 编码模式。默认值 "auto" 会对能从此编码方式中获益的频带自动使用 M/S。可以使用值 "enable" 对所有频带强制启用,这主要用于调试,也可以用 "disable" 禁用。

aac_is

设置 intensity stereo 编码工具的使用方式。默认启用,并会在有利的情况下自动为相似的立体声频带对切换 IS。可以将值设为 "disable" 以便调试时禁用。

aac_pns

在解码过程中使用感知噪声替代(perceptual noise substitution),将低熵的高频频带替换为不可察觉的白噪声。默认启用,但可以出于调试目的使用 "disable" 禁用。

aac_tns

启用一个跨越高频频带的多抽头 FIR 滤波器,用于在编码过程中隐藏量化噪声,并由 decoder 还原。除了减少高频段令人不悦的伪影外,这也降低了高频频带的熵,使中低频带可以使用更多比特。默认启用,但可以将该选项设为 "disable" 以便调试时禁用。

aac_ltp

启用长期预测(long term prediction)扩展,通过在各帧的频带中延展恒定的谐波峰值,提高极低带宽场景(例如人声或独奏钢琴音乐编码)下的编码效率。此选项由 profile:a aac_low 隐式启用。请与 -ar 搭配使用以降低采样率。

profile

设置编码 profile,可选值:

‘aac_low’

默认值,即 AAC "Low-complexity" profile。兼容性最好,能产生尚可的质量。

‘mpeg2_aac_low’

等效于 -profile:a aac_low -aac_pns 0。PNS 是随 MPEG4 规范引入的。

‘aac_ltp’

长期预测 profile,由 aac_ltp 选项启用,同时也会启用该选项。随 MPEG4 引入。

如果未指定此选项,则设为 ‘aac_low’。

8.2 ac3 和 ac3_fixed

AC-3 音频 encoder。

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

ac3 encoder 使用浮点数学运算,而 ac3_fixed encoder 仅使用定点整数运算。这并不意味着其中一个总是更快,只是说明两者中某一个可能更适合特定系统。ac3_fixed encoder 不是任何输出格式的默认 codec,因此要使用它,必须通过 -acodec ac3_fixed 选项显式指定。

8.2.1 AC-3 元数据

AC-3 元数据选项用于设置描述音频的参数,但在大多数情况下并不影响音频编码本身。部分选项会直接影响或作用于所生成 bitstream 的解码和播放,而其他选项仅用于提供信息。少数选项会向输出流添加原本可用于音频数据的比特,从而影响输出质量。下面的选项列表中会用注记相应标明这些选项。

这些参数在多份公开可用的文档中有详细说明。

8.2.1.1 元数据控制选项

-per_frame_metadata boolean

Allow Per-Frame Metadata。指定 encoder 是否应在每一帧检查元数据的变化。

0

初始化时设置的元数据值将用于流中的每一帧。(默认)

1

可以在编码每一帧之前更改元数据值。

8.2.1.2 下混电平

-center_mixlev level

Center Mix Level。decoder 在向立体声下混时应对中央声道施加的增益量。仅当存在中央声道时,此字段才会写入 bitstream。该值以缩放系数的形式指定。有 3 个有效值:

0.707

应用 -3dB 增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用 -6dB 增益

-surround_mixlev level

Surround Mix Level。decoder 在向立体声下混时应对环绕声道施加的增益量。仅当存在一个或多个环绕声道时,此字段才会写入 bitstream。该值以缩放系数的形式指定。有 3 个有效值:

0.707

应用 -3dB 增益

0.500

应用 -6dB 增益(默认)

0.000

使环绕声道静音

8.2.1.3 音频制作信息

Audio Production Information 是描述混音环境的可选信息。这些字段要么都不写入 bitstream,要么都写入。

-mixing_level number

Mixing Level。指定混音制作定版(mastered)时,制作环境中的峰值声压级(SPL)。有效值为 80 到 111,-1 表示未知或未指定。默认值为 -1,但如果 Audio Production Information 会写入 bitstream,则不能使用该值。因此,如果 room_type 选项不是默认值,则 mixing_level 选项不得为 -1。

-room_type type

Room Type。描述在录音室或配音舞台进行最终混音时所使用的均衡设置。large room 是采用行业标准 X-curve 均衡的配音舞台;small room 则采用平直均衡。如果 mixing_level 选项和 room_type 选项都为默认值,此字段将不会写入 bitstream。

0 notindicated

未指定(默认)

1 large

大房间

2 small

小房间

8.2.1.4 其他元数据选项

-copyright boolean

版权标识。指定此音频是否存在版权。

0 off

不存在版权(默认)

1 on

存在版权

-dialnorm value

对白归一化(Dialogue Normalization)。指示节目的平均对白电平低于数字满量程 100%(0 dBFS)的程度。此参数决定音频回放时的电平偏移,用于将对白的平均音量设置到预设电平。其目的是在不同节目来源之间匹配音量电平。值为 -31dB 时,回放过程中相对于源音量不会产生音量变化。有效值为 -31 到 -1 之间的整数,默认值为 -31。

-dsur_mode mode

Dolby Surround 模式。指定立体声信号是否使用 Dolby Surround(Pro Logic)。仅当音频流为立体声时,此字段才会写入 bitstream。使用此选项并不意味着 encoder 会实际应用 Dolby Surround 处理。

0 notindicated

未指定(默认)

1 off

未采用 Dolby Surround 编码

2 on

采用 Dolby Surround 编码

-original boolean

原始 Bitstream 标识。指定此音频是否来自原始来源而非副本。

0 off

非原始来源

1 on

原始来源(默认)

8.2.2 扩展 Bitstream 信息

扩展 bitstream 选项是 A/52:2010 标准附录 D 中规定的 Alternate Bit Stream Syntax 的一部分,分为 2 个部分。如果某一组内指定了任意一个参数,该组的所有值都会写入 bitstream。已写入但未指定的值将使用默认值。如果写入了混音电平,且 decoder 支持 Alternate Bit Stream Syntax,则 decoder 会使用这些值,而不是 center_mixlevsurround_mixlev 选项中指定的值。

8.2.2.1 扩展 Bitstream 信息 - 第 1 部分

-dmix_mode mode

首选立体声下混模式。允许用户选择 Lt/Rt(Dolby Surround)或 Lo/Ro(普通立体声)作为首选的立体声下混模式。

0 notindicated

未指定(默认)

1 ltrt

首选 Lt/Rt 下混

2 loro

首选 Lo/Ro 下混

-ltrt_cmixlev level

Lt/Rt 中央混音电平。decoder 在以 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 环绕混音电平。decoder 在以 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 中央混音电平。decoder 在以 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 环绕混音电平。decoder 在以 Lo/Ro 模式向立体声下混时应对环绕声道施加的增益量。

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益

0.500

应用 -6.0dB 增益(默认)

0.000

使环绕声道静音

8.2.2.2 扩展 Bitstream 信息 - 第 2 部分

-dsurex_mode mode

Dolby Surround EX 模式。指示该流是否使用 Dolby Surround EX(将 7.1 矩阵编码为 5.1)。使用此选项并不意味着 encoder 会实际应用 Dolby Surround EX 处理。

0 notindicated

未指定(默认)

1 on

关闭 Dolby Surround EX

2 off

开启 Dolby Surround EX

-dheadphone_mode mode

Dolby Headphone 模式。指示该流是否使用 Dolby Headphone 编码(将多声道矩阵编码为用于耳机播放的 2.0)。使用此选项并不意味着 encoder 会实际应用 Dolby Headphone 处理。

0 notindicated

未指定(默认)

1 on

关闭 Dolby Headphone

2 off

开启 Dolby Headphone

-ad_conv_type type

A/D 转换器类型。指示该音频是否经过了 HDCD A/D 转换。

0 standard

标准 A/D 转换器(默认)

1 hdcd

HDCD A/D 转换器

8.2.3 其他 AC-3 编码选项

-stereo_rematrixing boolean

立体声重新矩阵化(Stereo Rematrixing)。启用/禁用对立体声输入使用重新矩阵化。这是一项可选的 AC-3 特性,通过有选择地将左/右声道编码为 mid/side 来提升质量。此选项默认启用,强烈建议除测试目的外始终保持启用。

cutoff frequency

设置低通截止频率。如果未指定,encoder 会根据其他多种编码参数选择一个默认值。

8.2.4 仅浮点 AC-3 编码选项

这些选项仅对浮点 encoder 有效,定点 encoder 中不存在这些选项,因为相应功能未在定点实现中实现。

-channel_coupling boolean

启用/禁用声道耦合的使用,这是一项可选的 AC-3 特性,通过将多个声道的高频信息合并为单个声道来提升质量。每个声道的高频信息会以较低的频域和时域精度发送。这样可以为低频使用更多比特,同时保留足够的信息以重建高频。此选项在浮点 encoder 中默认启用,除测试目的或提高编码速度外,通常应保持启用。

-1 auto

由 encoder 选择(默认)

0 off

禁用声道耦合

1 on

启用声道耦合

-cpl_start_band number

耦合起始频带(Coupling Start Band)。设置声道耦合的起始频带,范围为 1 到 15。如果使用的值高于带宽,会被降低为比耦合结束频带小 1 的值。如果使用 auto,起始频带将由 encoder 根据比特率、采样率和声道布局决定。如果声道耦合已禁用,此选项不起作用。

-1 auto

由 encoder 选择(默认)

8.3 flac

FLAC(Free Lossless Audio Codec)Encoder

8.3.1 选项

FFmpeg 的 flac encoder 支持以下选项。

compression_level

设置压缩级别,如果未显式设置其他许多选项,会据此选择默认值。有效值为 0 到 12,默认值为 5。

frame_size

以每声道采样数设置帧的大小。

lpc_coeff_precision

设置 LPC 系数精度,有效值为 1 到 15,默认值为 15。

lpc_type

设置第一阶段的 LPC 算法

‘none’

不使用 LPC

‘fixed’

固定 LPC 系数

‘levinson’ ‘cholesky’ lpc_passes

LPC 分析过程中 Cholesky 分解使用的迭代次数

min_partition_order

最小分区阶数

max_partition_order

最大分区阶数

prediction_order_method

‘estimation’ ‘2level’ ‘4level’ ‘8level’ ‘search’

暴力搜索

‘log’ ch_mode

声道模式

‘auto’

模式针对每一帧自动选择

‘indep’

各声道独立编码

‘left_side’ ‘right_side’ ‘mid_side’ exact_rice_parameters

选择 rice 参数是精确计算还是近似计算。如果设为 1,则精确选择,这会使代码稍微变慢,但压缩率也会略有提升。

multi_dim_quant

Multi Dimensional Quantization(多维量化)。如果设为 1,则在第一阶段之后应用第二阶段 LPC 算法以微调系数。这个过程相当慢,但会略微提升压缩率。

8.4 opus

Opus encoder。

这是 FFmpeg 针对 Opus 格式的原生 encoder。目前仍在开发中,仅实现了该 codec 中的 CELT 部分。其质量通常较差,最好的情况下也仅与 libopus encoder 持平。

8.4.1 选项

b

以 bits/s 设置比特率。若未指定,会根据声道数和布局给出合理的估计值。

opus_delay

设置最大延迟(毫秒)。延迟低于 20ms 会导致质量迅速下降。

8.5 libfdk_aac

libfdk-aac AAC(Advanced Audio Coding)encoder 包装器。

libfdk-aac 库基于 Android 项目中的 Fraunhofer FDK AAC 代码。

配置时需要存在 libfdk-aac 的头文件和库。构建时需要显式使用 --enable-libfdk-aac 进行配置。该库还与 GPL 不兼容,因此如果允许使用 GPL,应使用 --enable-gpl --enable-nonfree --enable-libfdk-aac 进行配置。

此 encoder 支持 AAC-HE profile。

通过 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 codec 选项。

b

以 bits/s 设置比特率。若未显式指定比特率,会根据所选 profile 自动设为合适的值。

若启用了 VBR 模式,此选项将被忽略。

ar

设置音频采样率(Hz)。

channels

设置音频声道数。

flags +qscale

启用固定质量的 VBR(Variable Bit Rate)模式。请注意,当 vbr 的值为正时,VBR 会被隐式启用。

cutoff

设置截止频率。若未指定(或显式设为 0),将使用库自动计算得到的值。默认值为 0。

profile

设置音频 profile。

可识别以下 profile:

‘aac_low’

Low Complexity AAC(LC)

‘aac_he’

High Efficiency AAC(HE-AAC)

‘aac_he_v2’

High Efficiency AAC version 2(HE-AACv2)

‘aac_ld’

Low Delay AAC(LD)

‘aac_eld’

Enhanced Low Delay AAC(ELD)

若未指定,则设为 ‘aac_low’。

以下是 libfdk_aac encoder 的私有选项。

afterburner

设为 1 时启用 afterburner 功能,设为 0 时禁用。这会提升质量,但也会增加所需的处理能力。

默认值为 1。

eld_sbr

设为 1 时为 ELD 启用 SBR(Spectral Band Replication),设为 0 时禁用。

默认值为 0。

eld_v2

设为 1 时为 ELDv2(用于 ELD 立体声信号的 LD-MPS 扩展)启用 ELDv2,设为 0 时禁用。

请注意,此选项仅当 fdk-aac 版本 (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) 大于 (4.0.0) 时才可用。

默认值为 0。

signaling

设置 SBR/PS 信令方式。

可取以下值之一:

‘default’

隐式选择信令方式(默认情况下为 explicit hierarchical,若禁用了 global header 则为 implicit)

‘implicit’

implicit 后向兼容信令

‘explicit_sbr’

explicit SBR,implicit PS 信令

‘explicit_hierarchical’

explicit hierarchical 信令

默认值为 ‘default’。

latm

设为 1 时输出 LATM/LOAS 封装的数据,设为 0 时禁用。

默认值为 0。

header_period

设置在 LATM/LOAS 传输层内发送带内配置缓冲区时使用的 StreamMuxConfig 和 PCE 重复周期(以帧为单位)。

必须是 16 位非负整数。

默认值为 0。

vbr

设置 VBR 模式,取值范围为 1 到 5。1 为最低质量(但仍相当不错),5 为最高质量。设为 0 会禁用 VBR,并启用 CBR(Constant Bit Rate)。

目前只有 ‘aac_low’ profile 支持 VBR 编码。

VBR 模式 1-5 大致对应以下平均比特率:

‘1’

32 kbps/channel

‘2’

40 kbps/channel

‘3’

48-56 kbps/channel

‘4’

64 kbps/channel

‘5’

about 80-96 kbps/channel

默认值为 0。

frame_length

以采样点数设置音频帧长度。默认值为库的内部默认值。有关支持的取值,请参阅库的文档。

8.5.2 示例

  • 使用 ffmpeg 将音频文件转换为 M4A(MP4)容器中的 VBR AAC:

    ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
    
  • 使用 ffmpeg 以 High-Efficiency AAC profile 将音频文件转换为 CBR 64k kbps 的 AAC:

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

8.6 liblc3

liblc3 LC3(Low Complexity Communication Codec)encoder 包装器。

配置时需要存在 liblc3 的头文件和库。构建时需要显式使用 --enable-liblc3 进行配置。

此 encoder 支持用于 LE Audio 协议的 Bluetooth SIG LC3 codec,以及 LC3plus 的以下特性:

  • 2.5ms 和 5ms 的帧时长。
  • High-Resolution 模式,48 KHz 和 96 kHz 采样率。

更多信息请参阅 liblc3 项目 https://github.com/google/liblc3

8.6.1 选项

以下选项映射到共享的 FFmpeg codec 选项。

b bitrate

以 bits/s 设置比特率。这将决定所选帧时长下已编码帧的固定大小。

ar frequency

设置音频采样率(Hz)。

channels

设置音频声道数。

frame_duration

以毫秒设置音频帧时长。默认值为 10ms。允许的帧时长为 2.5ms、5ms、7.5ms 和 10ms。LC3(Bluetooth LE Audio)允许 7.5ms 和 10ms;LC3plus 允许 2.5ms、5ms 和 10ms。

10ms 帧时长在 LC3 和 LC3plus 标准中均可用。在此模式下,生成的 bitstream 既可视为 LC3,也可视为 LC3plus。

high_resolution boolean

设为 1 时启用 high-resolution 模式。high-resolution 模式适用于所有 LC3plus 帧时长,以及 48 KHz 和 96 KHz 采样率。

encoder 会在较低采样率下自动关闭此模式,并在 96 KHz 时启用。

高比特率下应优先使用此模式。在此模式下,音频带宽始终可达奈奎斯特频率,相比之下 48 KHz 的 LC3 会将带宽限制在 20 KHz。

8.7 libmp3lame

LAME(Lame Ain’t an MP3 Encoder)MP3 encoder 包装器。

配置时需要存在 libmp3lame 的头文件和库。构建时需要显式使用 --enable-libmp3lame 进行配置。

关于定点 MP3 encoder,请参阅 libshine,不过其质量较低。

8.7.1 选项

libmp3lame 包装器支持以下选项。括号中给出 lame 对应的选项。

b (-b)

为 CBR 或 ABR 设置以 bits/s 表示的比特率。LAME 的 bitrate 以 kilobits/s 表示。

q (-V)

为 VBR 设置固定质量设置。此选项仅在使用 ffmpeg 命令行工具时有效。使用库接口的用户请改用 global_quality。

compression_level (-q)

设置算法质量。有效参数为 0-9 范围内的整数,0 表示质量最高但速度最慢,9 表示速度最快但质量最差。

cutoff (--lowpass)

设置低通截止频率。若未指定,encoder 会动态调整截止频率。

reservoir

设为 1 时启用比特储备。默认值为 1。LAME 默认启用此功能,但可以通过 --nores 选项覆盖。

joint_stereo (-m j)

使 encoder 能够(逐帧地)使用 L/R 立体声或 mid/side 立体声。默认值为 1。

abr (--abr)

设为 1 时使 encoder 能够使用 ABR。lame 的 --abr 会设置目标比特率,而此选项只是告知 FFmpeg 使用 ABR,比特率的设置仍依赖于 b。

copyright (-c)

设为 1 时设置 MPEG 音频的 copyright 标志。默认值为 0(禁用)。

original (-o)

设为 1 时设置 MPEG 音频的 original 标志。默认值为 1(启用)。

8.8 libopencore-amrnb

OpenCORE Adaptive Multi-Rate Narrowband encoder。

配置时需要存在 libopencore-amrnb 的头文件和库。构建时需要显式使用 --enable-libopencore-amrnb --enable-version3 进行配置。

这是一个仅支持单声道的 encoder。官方仅支持 8000Hz 采样率,但可以通过将 strict 设置为 ‘unofficial’ 或更低值来覆盖。

8.8.1 选项

b

以比特每秒设置比特率。仅支持以下比特率,否则 libavcodec 会四舍五入到最接近的有效比特率。

4750 5150 5900 6700 7400 7950 10200 12200 dtx

设为 1 时允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。

8.9 libopus

libopus Opus Interactive Audio Codec encoder 包装器。

配置时需要存在 libopus 的头文件和库。构建时需要显式使用 --enable-libopus 进行配置。

8.9.1 选项映射

libopus 的大多数选项都参照 opus-tools 中的 opusenc 工具建模。下表描述了 libopus 包装器所支持的选项,及其对应的 opusenc 选项(括号内)。

b (bitrate)

以 bits/s 设置比特率。FFmpeg 的 b 选项以 bits/s 表示,而 opusenc 的 bitrate 以 kilobits/s 表示。

vbr (vbr , hard-cbr , and cvbr)

设置 VBR 模式。FFmpeg 的 vbr 选项具有以下有效参数,括号内为对应的 opusenc 选项:

‘off (hard-cbr)’

使用固定比特率编码。

‘on (vbr)’

使用可变比特率编码(默认)。

‘constrained (cvbr)’

使用受约束的可变比特率编码。

compression_level (comp)

设置编码算法复杂度。有效选项为 0-10 范围内的整数。0 编码速度最快但质量较低,10 质量最高但编码最慢。默认值为 10。

frame_duration (framesize)

设置最大帧大小,即单帧的时长(毫秒)。参数必须严格为以下值之一:2.5、5、10、20、40、60。帧大小越小,延迟越低,但在给定比特率下质量也越低。大于 20ms 的帧大小仅在比特率相当低时才有意义。默认值为 20ms。

packet_loss (expect-loss)

设置预期的数据包丢失百分比。默认值为 0。

fec (n/a)

启用带内前向纠错。要发挥作用,packet_loss 必须非零 —— FEC ’side-data’的频率与预期的数据包丢失成正比。默认禁用。

application (N.A.)

设置预期的应用类型。可选值如下:

‘voip’

优先提升语音清晰度。

‘audio’

优先保证与输入的一致性(默认)。

‘lowdelay’

通过禁用语音优化模式,仅限制为最低延迟模式。

cutoff (N.A.)

以 Hz 设置截止带宽。参数必须严格为以下值之一:4000、6000、8000、12000 或 20000,分别对应 narrowband、mediumband、wideband、super wideband 和 fullband。默认值为 0(禁用截止)。请注意,除非使用仅 CELT(application 设为 ‘lowdelay’)模式,否则 libopus 会在比特率低于 15 kbps 时强制使用 wideband 截止。

mapping_family (mapping_family)

设置 encoder 使用的声道映射族。默认值 -1 表示对单声道和立体声输入使用 mapping family 0,其他情况使用 mapping family 1。默认值还会禁用 libopus 中的环绕声掩蔽和 LFE 带宽优化,并要求输入声道数不超过 8。

其他取值包括:0 用于单声道和立体声,1 用于带掩蔽和 LFE 带宽优化的环绕声,255 用于声道布局未指定的独立流。

dtx (N.A.)

设为 1 时允许不连续传输。默认值为 0(禁用)。

apply_phase_inv (N.A.) (requires libopus >= 1.2)

设为 0 时,禁用强度立体声中的相位反转,从而提高单声道下混的质量,但会略微降低正常立体声的质量。默认值为 1(启用相位反转)。

8.10 libshine

Shine Fixed-Point MP3 encoder 包装器。

Shine 是一个定点 MP3 encoder。它在没有 FPU 的平台(例如 armel CPU,以及部分手机和平板)上性能要好得多。不过,由于它更侧重性能而非质量,在质量上不及 LAME 等生产级 encoder。此外,据该项目主页介绍,由于代码编写时间已久,且项目至少停滞了 5 年,此 encoder 可能仍存在一些 bug。

此 encoder 仅支持立体声和单声道输入,并且仅支持 CBR。

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

配置时需要存在 libshine 的头文件和库。构建时需要显式使用 --enable-libshine 进行配置。

另请参阅 libmp3lame。

8.10.1 选项

libshine 包装器支持以下选项。括号中给出 shineenc 对应的选项。

b (-b)

为 CBR 设置以 bits/s 表示的比特率。shineenc 的 -b 选项以 kilobits/s 表示。

8.11 libtwolame

TwoLAME MP2 encoder 包装器。

配置时需要存在 libtwolame 的头文件和库。构建时需要显式使用 --enable-libtwolame 进行配置。

8.11.1 选项

libtwolame 包装器支持以下选项。对应的 twolame 选项跟在 FFmpeg 选项之后,以括号给出。

b (-b)

为 CBR 设置以 bits/s 表示的比特率。twolame 的 b 选项以 kilobits/s 表示。默认值为 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)

设为 1 时启用 CRC 错误保护。默认值为 0(禁用)。

copyright (--copyright)

设为 1 时设置 MPEG 音频的 copyright 标志。默认值为 0(禁用)。

original (--original)

设为 1 时设置 MPEG 音频的 original 标志。默认值为 0(禁用)。

8.12 libvo-amrwbenc

VisualOn Adaptive Multi-Rate Wideband encoder。

配置时需要存在 libvo-amrwbenc 的头文件和库。构建时需要显式使用 --enable-libvo-amrwbenc --enable-version3 进行配置。

这是一个仅支持单声道的 encoder。官方仅支持 16000Hz 采样率,但可以通过将 strict 设置为 ‘unofficial’ 或更低值来覆盖。

8.12.1 选项

b

以 bits/s 设置比特率。仅支持以下比特率,否则 libavcodec 会四舍五入到最接近的有效比特率。

‘6600’ ‘8850’ ‘12650’ ‘14250’ ‘15850’ ‘18250’ ‘19850’ ‘23050’ ‘23850’ dtx

设为 1 时允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。

8.13 libvorbis

libvorbis encoder 包装器。

配置时需要存在 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 设置以 bits/s 表示的比特率。oggenc 的 -b 以 kilobits/s 表示。

q (-q)

为 VBR 设置固定质量。取值应为 -1.0 到 10.0 范围内的浮点数。值越高质量越好。默认值为 ‘3.0’。

此选项仅在使用 ffmpeg 命令行工具时有效。使用库接口的用户请改用 global_quality。

cutoff (--advanced-encode-option lowpass_frequency=N)

以 Hz 设置截止带宽,设为 0 会禁用截止。oggenc 对应选项以 kHz 表示。默认值为 ‘0’(禁用截止)。

minrate (-m)

以 bits/s 设置最小比特率。oggenc 的 -m 以 kilobits/s 表示。

maxrate (-M)

以 bits/s 设置最大比特率。oggenc 的 -M 以 kilobits/s 表示。此选项仅在 ABR 模式下有效。

iblock (--advanced-encode-option impulse_noisetune=N)

设置脉冲块的噪声基底偏置。取值为 -15.0 到 0.0 的浮点数。负偏置会指示 encoder 特别关注已编码音频中瞬态的清晰度。更好瞬态响应的代价是更高的比特率。

8.14 mjpeg

Motion JPEG encoder。

8.14.1 选项

huffman

设置 huffman 编码策略。可选值如下:

‘default’

使用默认的 huffman 表。这是默认策略。

‘optimal’

计算并使用最优 huffman 表。

8.15 wavpack

WavPack 无损音频 encoder。

8.15.1 选项

括号中给出 wavpack 命令行工具对应的选项。

8.15.1.1 共享选项

以下共享选项对该 encoder 有效。此处仅记录该特定 encoder 的特别说明。有关这些选项的一般含义,请参阅 Codec Options 一章。

frame_size (--blocksize)

对于此 encoder,此选项的取值范围为 128 到 131072。默认值根据采样率和声道数自动决定。

完整的默认值计算公式请参阅 libavcodec/wavpackenc.c。

compression_level (-f , -h , -hh , and -x)

8.15.1.2 私有选项

joint_stereo (-j)

设置是否启用联合立体声。有效值如下:

‘on (1)’

强制 mid/side 音频编码。

‘off (0)’

强制 left/right 音频编码。

‘auto’

让 encoder 自动决定。

optimize_mono

设置是否启用针对单声道的优化。此选项仅对非单声道流有效。可选值如下:

‘on’

启用

‘off’

禁用

9 视频 Encoders

以下介绍当前部分可用的视频 encoder。

9.1 a64_multi, a64_multi5

A64 / Commodore 64 多彩字符集 encoder。a64_multi5 扩展了第 5 种颜色(colram)。

9.2 Cinepak

Cinepak(又称 CVID)encoder。兼容 Windows 3.1 和早期 MacOS。

9.2.1 选项

g integer

keyframe 间隔。至少每 -g 帧插入一个 keyframe,有时会更早插入。

q:v integer

质量系数。越低越好。越高比特率越低。下表列出了在使用 -g 100 时,以不同 -q:v 值编码 akiyo_cif.y4m 所得到的比特率:

-q:v 1 1918 kb/s -q:v 2 1735 kb/s -q:v 4 1500 kb/s -q:v 10 1041 kb/s -q:v 20 826 kb/s -q:v 40 553 kb/s -q:v 100 394 kb/s -q:v 200 312 kb/s -q:v 400 266 kb/s -q:v 1000 237 kb/s max_extra_cb_iterations integer

额外的码本重新计算的最大遍数,越多越好但越慢。

skip_empty_cb boolean

避免浪费字节,忽略早期 MacOS decoder。

max_strips integer min_strips integer

使用的条带(strip)数量的最小值和最大值。放宽范围有时能提升质量。条带数越多通常质量越好,但会消耗更多比特。条带数越少,往往会产生更多 keyframe。与早期环境兼容的范围是 1..3。

strip_number_adaptivity integer

允许条带数量在各帧之间变化的程度。越高越好但越慢。

9.3 ffv1

FFv1 encoder

9.3.1 选项

FFmpeg 的 FFv1 encoder 支持以下选项。

context

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

coder

设置 coder,

‘rice’

Golomb rice coder

‘range_def’

使用默认表的 range coder

‘range_tab’

使用自定义表的 range coder

slicecrc

-1(默认,自动)、1 表示使用初始和最终状态均为零的 crc,2 表示使用初始和最终状态均为非零的 crc

qtable

‘default’

默认,自动

‘8bit’

使用 8bit 默认值

‘greater8bit’

使用 >8bit 默认值

remap_optimizer

0 - 5,默认 3,指定 encoder 在优化 remap 表上投入的力度。

9.4 GIF

GIF 图像/动画 encoder。

9.4.1 选项

gifflags integer

设置用于 GIF 编码的标志。

offsetting

启用图像偏移。

默认启用。

transdiff

启用帧间透明检测。

默认启用。

gifimage integer

启用逐帧编码为一张完整 GIF 图像,而非生成一个动画 GIF。

默认值为 0。

global_palette integer

在可行的情况下将调色板写入全局 GIF 头。

若禁用,即使提供了全局调色板,每一帧也总是会写入调色板。

默认值为 1。

9.5 Hap

Vidvox Hap 视频 encoder。

9.5.1 选项

format integer

指定要编码的 Hap 格式。

hap hap_alpha hap_q

默认值为 hap。

chunks integer

指定将帧拆分成的块(chunk)数,取值范围为 1 到 64。这样可以对大帧进行多线程解码,但可能会牺牲数据速率。encoder 可能会调整此值,以便将帧均匀拆分。

默认值为 1。

compressor integer

指定第二阶段使用的压缩器。若设为 none,块数将被限制为 1,因为分块的未压缩帧没有益处。

none snappy

默认值为 snappy。

9.6 jpeg2000

原生 jpeg 2000 encoder 默认为有损,可以使用 -q:v 选项设置编码质量。可以通过 -pred 1 选择无损编码。

9.6.1 选项

format integer

可以设置为 j2kjp2(默认),从而能够存储非 rgb 的 pix_fmts。

tile_width integer

设置分块宽度。范围是 1 到 1073741824。默认值为 256。

tile_height integer

设置分块高度。范围是 1 到 1073741824。默认值为 256。

pred integer

用于设置离散小波变换(DWT)的类型

dwt97int (Lossy) dwt53 (Lossless)

默认值是 dwt97int

sop boolean

启用后会在每个数据包的开头添加 SOP 标记。默认禁用。

eph boolean

启用后会在每个数据包头部的末尾添加 EPH 标记。默认禁用。

prog integer

设置 encoder 使用的渐进顺序。可选值如下:

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 个层:第一层中的数据被压缩了 1000 倍,前两层被压缩了 100 倍,而使用全部 3 层时则包含全部数据。

9.7 librav1e

rav1e AV1 encoder 封装。

需要在配置阶段提供 rav1e 的头文件和库。必须在构建时显式加上 --enable-librav1e

9.7.1 选项

qmax

设置使用比特率模式时所用的最大量化器。

qmin

设置使用比特率模式时所用的最小量化器。

qp

使用量化器模式,以给定的量化器(0-255)进行编码。

speed

选择编码时使用的速度预设(0-10)。

tiles

选择编码时使用的分块数量。

tile-rows

选择编码时使用的分块行数。

tile-columns

选择编码时使用的分块列数。

rav1e-params

使用以 ":" 分隔的 key=value 列表设置 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 encoder 封装。

需要在配置阶段提供 libaom 的头文件和库。必须在构建时显式加上 --enable-libaom

9.8.1 选项

该封装支持以下标准 libavcodec 选项:

b

以 bits/second 设置目标比特率。默认使用可变比特率模式。如果 maxrate 与 minrate 也被设置为相同的值,则会使用恒定比特率模式;否则,如果同时设置了 crf,则会使用受限质量模式。

g keyint_min

设置 key frame 的放置方式。GOP 大小设置 key frame 之间的最大距离;如果为零,输出流将只包含 intra 帧。最小距离会被忽略,除非它与 GOP 大小相同,这种情况下 key frame 将始终以固定间隔出现。默认不设置,因此如果不使用该选项,库可以完全自由地选择 key frame 的放置位置。

qmin qmax

设置最小/最大量化值。有效范围是 0 到 63(警告:这与 AV1 实际使用的量化值并不一致——将实际量化值除以 4 才能映射到该范围)。默认值为最小/最大(不做限制)。

minrate maxrate bufsize rc_init_occupancy

设置码率控制的缓冲参数。不设置时不使用,默认采用无约束的可变比特率。

threads

设置编码时使用的线程数。要充分利用所指定的线程数,可能还需要同时设置 tiles 或 row-mt 选项。默认值为主机所支持的硬件线程数。

profile

设置编码 profile。默认使用与输入的位深度和色度二次采样相匹配的 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)

设置 encoder 调优所依据的失真度量。默认值为 psnr

‘psnr (0)’ ‘ssim (1)’ lag-in-frames

设置 encoder 出于前瞻(lookahead)目的,在任一时刻可同时处理的最大帧数。默认值为库内部的默认设置。

error-resilience

启用差错恢复能力(error resilience)特性:

default

提高对整帧丢失的恢复能力。

默认不启用。

crf

设置恒定质量模式(无比特率目标)和受限质量模式(有最大比特率目标)下质量与大小之间的折衷。有效范围是 0 到 63,数值越大表示质量越低、输出体积越小。仅在设置后才会生效;默认只使用比特率目标。

static-thresh

设置块变化阈值,低于该阈值的块会被 encoder 跳过。以任意单位的非负整数表示,默认值为零(不跳过任何块)。

drop-threshold

设置在接近码率控制边界时丢帧的阈值。以目标缓冲区的百分比表示——当码率控制缓冲区低于该百分比时,将持续丢帧,直到缓冲区重新填充到阈值以上。默认值为零(不丢帧)。

denoise-noise-level (level)

为颗粒合成(grain synthesis)所去除的噪声量。若不设置该选项或设置为 0,则禁用颗粒合成。

denoise-block-size (pixels)

用于颗粒合成降噪的块大小。若不设置,AV1 codec 使用默认值 32。

undershoot-pct (pct)

设置目标比特率的数据速率欠冲(最小)百分比。范围是 -1 到 100。默认值为 -1。

overshoot-pct (pct)

设置目标比特率的数据速率过冲(最大)百分比。范围是 -1 到 1000。默认值为 -1。

minsection-pct (pct)

GOP 比特率相对目标比特率的最小变化百分比。若不设置 minsection-pct,libaomenc 封装会按如下方式计算:(minrate * 100 / bitrate)。范围是 -1 到 100。默认值为 -1(未设置)。

maxsection-pct (pct)

GOP 比特率相对目标比特率的最大变化百分比。若不设置 maxsection-pct,libaomenc 封装会按如下方式计算:(maxrate * 100 / bitrate)。范围是 -1 到 5000。默认值为 -1(未设置)。

frame-parallel (boolean)

启用帧并行可解码特性。默认值为 true。

tiles

以“列 x 行”的形式设置编码输入视频时使用的分块数量。数值越大,编码和解码的并行度越高,但可能降低编码效率。默认值为输入视频尺寸所需的最小分块数(对于不超过 4K 的尺寸,即为 1x1,也就是单个分块)。

tile-columns tile-rows

以分块行数和列数的 log2 值来设置分块数量。用于与 libvpx/VP9 兼容。

row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)

启用基于行的多线程。默认禁用。

enable-cdef (boolean)

启用 Constrained Directional Enhancement Filter(CDEF)。libaom-av1 encoder 默认启用 CDEF。

enable-restoration (boolean)

启用 Loop Restoration Filter。libaom-av1 默认值为 true。

enable-global-motion (boolean)

启用全局运动(global motion)用于块预测。默认值为 true。

enable-intrabc (boolean)

为帧内块预测启用块复制模式。该模式适用于屏幕内容。默认值为 true。

enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)

启用矩形分区。默认值为 true。

enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)

启用 1:4/4:1 分区。默认值为 true。

enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)

启用 AB 形分区。默认值为 true。

enable-angle-delta (boolean) (Requires libaom >= v2.0.0)

启用角度增量(angle delta)帧内预测。默认值为 true。

enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)

启用由亮度预测色度的帧内预测(CfL)。默认值为 true。

enable-filter-intra (boolean) (Requires libaom >= v2.0.0)

启用滤波帧内预测器。默认值为 true。

enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)

启用帧内边缘滤波。默认值为 true。

enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)

启用平滑帧内预测模式。默认值为 true。

enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)

在帧内预测中启用 Paeth 预测器。默认值为 true。

enable-palette (boolean) (Requires libaom >= v2.0.0)

启用调色板预测模式。默认值为 true。

enable-flip-idtx (boolean) (Requires 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。默认值为 true。

enable-tx64 (boolean) (Requires libaom >= v2.0.0)

启用 64 点变换。默认值为 true。

reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)

使用精简的变换类型集合。默认值为 false。

use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)

INTRA 模式仅使用 DCT。默认值为 false。

use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)

INTER 模式仅使用 DCT。默认值为 false。

use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)

INTRA 模式仅使用默认变换(Default-transform)。默认值为 false。

enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)

启用时域 mv 预测。默认值为 true。

enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)

使用精简的单向和复合参考集合。默认值为 false。

enable-obmc (boolean) (Requires libaom >= v2.0.0)

启用 obmc。默认值为 true。

enable-dual-filter (boolean) (Requires libaom >= v2.0.0)

启用双重滤波(dual filter)。默认值为 true。

enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)

启用差值加权复合预测(difference-weighted compound)。默认值为 true。

enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)

启用距离加权复合预测(distance-weighted compound)。默认值为 true。

enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)

启用单向复合预测(one sided compound)。默认值为 true。

enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)

启用 inter-inter 楔形复合预测(wedge compound)。默认值为 true。

enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)

启用 inter-intra 楔形复合预测(wedge compound)。默认值为 true。

enable-masked-comp (boolean) (Requires libaom >= v2.0.0)

启用掩码复合预测(masked compound)。默认值为 true。

enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)

启用 inter-intra 复合预测。默认值为 true。

enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)

启用平滑 inter-intra 模式。默认值为 true。

aom-params

使用以 ":" 分隔的 key=value 列表设置 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 封装。

该 encoder 需要在配置阶段提供 liboapv 的头文件和库。必须在构建时显式加上 --enable-liboapv。

liboapv 的许多 encoder 选项都映射到 FFmpeg 的全局 codec 选项,而其特有的 encoder 选项则通过私有选项提供。

apv 项目的网站地址为 https://github.com/AcademySoftwareFoundation/openapv

9.9.1 选项

liboapv 封装支持以下选项。

如需查阅 liboapv 选项更详尽的文档,请参阅 liboapv 的文档。

preset

设置质量与速度之间的折衷 [fastest, fast, medium, slow, placebo, default]

qp

设置 CQP 码率控制模式下的量化参数值。

oapv-params (parse_apv_params)

使用以 ":" 分隔的 key=value 列表设置 liboapvenc 的选项。可接受的参数列表参见 liboapv encoder 用户指南。

9.10 libsvtav1

SVT-AV1 encoder 封装。

需要在配置阶段提供 SVT-AV1 的头文件和库。必须在构建时显式加上 --enable-libsvtav1

9.10.1 选项

profile

设置编码 profile。

‘main’ ‘high’ ‘professional’ level

设置操作点(operating point)级别。例如:’4.0’

hielevel

设置分层预测(Hierarchical prediction)级别。

‘3level’ ‘4level’

这是默认值。

tier

设置操作点 tier。

‘main’

这是默认值。

‘high’ qmax

设置使用比特率模式时所用的最大量化器。

qmin

设置使用比特率模式时所用的最小量化器。

crf

crf 码率控制模式下使用的恒定速率因子(constant rate factor)值(0-63)。

qp

设置 cqp 码率控制模式下使用的量化器(0-63)。

sc_detection

启用场景切换检测。

la_depth

设置前瞻(look ahead)的帧数(0-120)。

preset

设置质量与速度之间的折衷,范围是 0 到 13。数值越大速度越快,但质量越低。

tile_rows

设置所用分块行数的 log2 值(0-6)。

tile_columns

设置所用分块列数的 log2 值(0-4)。

svtav1-params

使用以 ":" 分隔的 key=value 列表设置 SVT-AV1 的选项。可接受的参数列表参见 SVT-AV1 encoder 用户指南。

9.11 libsvtjpegxs

SVT-JPEG-XS encoder 封装。

需要在配置阶段提供 SVT-JPEG-XS 的头文件和库。必须在构建时显式加上 --enable-libsvtjpegxs

9.11.1 选项

decomp_v

设置垂直分解层级

decomp_h

设置水平分解层级

quantization

设置量化算法。

‘deadzone’ ‘uniform’ coding-signs

启用符号(Signs)处理策略

‘disable’ ‘fast’ ‘full’ coding-sigf

启用显著性(Significance)编码

coding-vpred

启用垂直预测(Vertical Prediction)编码

‘disable’ ‘no_residuals’ ‘no_coeffs’

9.12 libjxl

libjxl JPEG XL encoder 封装。

需要在配置阶段提供 libjxl 的头文件和库。必须在构建时显式加上 --enable-libjxl

9.12.1 选项

libjxl 封装支持以下选项:

distance

设置目标 Butteraugli 距离。这是一个质量设置:distance 越小质量越高,对于照片类内容,distance=1.0 大致相当于 libjpeg 的 Quality 90。设置 distance=0.0 可实现真正的无损编码。有效值范围是 0.0 到 15.0,合理取值很少超过 5.0。设置 distance=0.1 通常可以为大多数输入实现视觉无损(transparency)。默认值为 1.0。

effort

设置所用的编码努力程度(effort)。effort 值越大,质量越稳定,通常也能获得更好的质量/bpp 曲线,但代价是需要更多的 CPU 时间。有效值范围是 1 到 9,默认值为 7。

modular

强制 encoder 使用 Modular 模式,而不是自动选择。默认情况下有损编码使用 VarDCT,无损编码使用 Modular。对于有损编码,VarDCT 通常优于 Modular,但 VarDCT 不支持无损编码。

9.13 libkvazaar

Kvazaar H.265/HEVC encoder。

需要在配置阶段提供 libkvazaar 的头文件和库。必须在构建时显式加上 --enable-libkvazaar。

9.13.1 选项

b

以 bit/s 设置目标视频比特率并启用码率控制。

kvazaar-params

以逗号(,)分隔的 name=value 列表设置 kvazaar 参数。可用选项列表参见 kvazaar 的文档。

9.14 libopenh264

Cisco libopenh264 H.264/MPEG-4 AVC encoder 封装。

该 encoder 需要在配置阶段提供 libopenh264 的头文件和库。必须在构建时显式加上 --enable-libopenh264。该库通过 pkg-config 检测。

有关该库的更多信息请参见 http://www.openh264.org

9.14.1 选项

以下 FFmpeg 全局选项会影响 libopenh264 encoder 的配置。

b

设置比特率(以每秒比特数表示)。

g

设置 GOP 大小。

maxrate

设置最大比特率(以每秒比特数表示)。

flags +global_header

在 bitstream 中设置全局头。

slices

设置条带(slices)数量,用于并行编码。默认值为 0。仅在 slice_mode 设置为 ‘fixed’ 时才会使用。

loopfilter

设置为 1 时启用环路滤波(自动启用)。设置为 0 可禁用。

profile

设置 profile 限制。若设置为 ‘main’,则启用 CABAC(将 SEncParamExt.iEntropyCodingModeFlag 标志设为 1)。

max_nal_size

以字节为单位设置最大 NAL 大小。

allow_skip_frames

设置为 1 时允许跳帧以达到目标比特率。

9.15 libtheora

libtheora Theora encoder 封装。

需要在配置阶段提供 libtheora 的头文件和库。必须在构建时显式加上 --enable-libtheora

有关 libtheora 项目的更多信息请参见 http://www.theora.org/

9.15.1 选项

以下全局选项会映射到 libtheora 内部选项,从而影响编码后流的质量与比特率。

b

以 bit/s 设置 CBR(恒定比特率)模式下的视频比特率。若启用了 VBR(可变比特率)模式,该选项会被忽略。

flags

用于通过 qscale 标志启用恒定质量模式(VBR)编码,以及启用 pass1pass2 模式。

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.15.2 示例

  • 使用 ffmpeg 设置最大恒定质量(VBR)编码:

    ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
    
  • 使用 ffmpeg 转换 CBR 1000 kbps 的 Theora 视频流:

    ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
    

9.16 libvpx

通过 libvpx 支持的 VP8/VP9 格式。

需要在配置阶段提供 libvpx 的头文件和库。必须在构建时显式加上 --enable-libvpx

9.16.1 选项

libvpx 封装支持以下选项。为便于迁移,vpxenc 中对应的选项或值列在括号中。

为减少文档的重复,这里只记录了私有选项以及一些需要特别注意的其他选项。未在此记录的通用选项的说明请参见 Codec Options 一章。

如需获取 libvpx 选项的更多文档,可执行命令 ffmpeg -h encoder=libvpxffmpeg -h encoder=libvpx-vp9vpxenc --help。更多信息参见 libvpx 的 API 文档。

b (target-bitrate)

以 bits/s 设置比特率。请注意,FFmpeg 的 b 选项以 bits/s 表示,而 vpxenc 的 target-bitrate 以 kilobits/s 表示。

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)

设置在解码开始前应装入 rc 缓冲区的比特数。请注意 vpxenc 的对应选项以毫秒指定,libvpx 封装会按如下方式转换该值:rc_init_occupancy * 1000 / bitrate

undershoot-pct

设置目标比特率的数据速率欠冲(最小)百分比。

overshoot-pct

设置目标比特率的数据速率过冲(最大)百分比。

skip_threshold (drop-frame) qcomp (bias-pct) maxrate (maxsection-pct)

以 bits/s 设置 GOP 最大比特率。请注意 vpxenc 的对应选项以目标比特率的百分比指定,libvpx 封装会按如下方式转换该值:(maxrate * 100 / bitrate)

minrate (minsection-pct)

以 bits/s 设置 GOP 最小比特率。请注意 vpxenc 的对应选项以目标比特率的百分比指定,libvpx 封装会按如下方式转换该值:(minrate * 100 / bitrate)

minrate, maxrate, b end-usage=cbr

(minrate == maxrate == bitrate)

crf (end-usage=cq , cq-level) tune (tune)

‘psnr (psnr)’ ‘ssim (ssim)’ quality, deadline (deadline)

‘best’

使用最佳质量截止时间(deadline)。该选项命名欠佳且速度很慢,应尽量避免使用,因为其输出质量可能反而不如 good。

‘good’

使用 good 质量截止时间(deadline)。与 cpu-used 选项配合使用时,可在速度与质量之间取得良好折衷。

‘realtime’

使用 realtime 质量截止时间(deadline)。

speed, cpu-used (cpu-used)

设置质量/速度比例调节值。数值越大编码速度越快,但会牺牲质量。

nr (noise-sensitivity) static-thresh

设置块变化阈值,低于该阈值的块会被 encoder 跳过。

slices (token-parts)

请注意,FFmpeg 的 slices 选项给出的是分区总数,而 vpxenc 的 token-parts 则以 log2(partitions) 给出。

max-intra-rate

以目标比特率的百分比设置最大 I 帧比特率。值为 0 表示不限制。

force_key_frames

VPX_EFLAG_FORCE_KF

Alternate reference frame related

auto-alt-ref

启用备用参考帧的使用(仅限 2-pass)。大于 1 的值将启用多层备用参考帧(仅限 VP9)。

arnr-maxframes

设置备用参考帧降噪的最大帧数。

arnr-type

设置备用参考帧降噪滤波的类型:backward、forward、centered。

arnr-strength

设置备用参考帧降噪滤波的强度。

rc-lookahead, lag-in-frames (lag-in-frames)

设置用于帧类型判断和码率控制的前瞻帧数。

min-gf-interval

设置最小 golden/备用参考帧间隔(仅限 VP9)。

error-resilient

启用差错恢复能力特性。

sharpness integer

以牺牲 PSNR 为代价提高锐度。有效范围是 [0, 7]。

ts-parameters

使用以 : 分隔的 key=value 列表设置时域可分级性(temporal scalability)配置。例如,要通过 ffmpeg 指定时域可分级性参数:

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

各时域层的帧率抽取(decimation)系数。

ts_periodicity

定义帧所属时域层的序列长度。

ts_layer_id

定义帧归属于各时域层的模板。

ts_layering_mode

(可选)从一组预定义的时域分层模式中选择时域结构。目前支持以下选项。

0

内部不提供时域分层标志,依赖于通过 AVFramemetadata 字段以下列键传入标志。

vp8-flags

设置传给 encoder 的标志,用以指示当前帧的参考方案。更多细节请参见 vpx/vpx_encoder.h 中的函数 vpx_codec_encode

temporal_id

显式设置待编码当前帧的时域 id。

2

两个时域层。0-1……

3

三个时域层。0-2-1-2……;使用单个参考帧。

4

与选项 "3" 相同,区别在于同一时域周期内两个时域层 2 的帧之间存在依赖关系。

VP8-specific options

screen-content-mode

屏幕内容模式,取值之一:0(关闭)、1(screen)、2(screen,采用更激进的码率控制)。

VP9-specific options

lossless

启用无损模式。

tile-columns

设置要使用的分块列数。请注意该值以 log2(tile_columns) 给出。例如,要请求 8 个分块列,需将 tile-columns 选项设置为 3。

tile-rows

设置要使用的分块行数。请注意该值以 log2(tile_rows) 给出。例如,要请求 4 个分块行,需将 tile-rows 选项设置为 2。

frame-parallel

启用帧并行可解码特性。

aq-mode

设置自适应量化模式(0:off(默认),1:variance,2:complexity,3:cyclic refresh,4:equator360)。

colorspace color-space

设置输入色彩空间。VP9 bitstream 支持标示以下色彩空间:

‘rgb’ sRGB ‘bt709’ bt709 ‘unspecified’ unknown ‘bt470bg’ bt601 ‘smpte170m’ smpte170 ‘smpte240m’ smpte240 ‘bt2020_ncl’ bt2020 row-mt boolean

启用基于行的多线程。

tune-content

设置内容类型:default(0)、screen(1)、film(2)。

corpus-complexity

Corpus VBR 模式是标准 VBR 的一个变体,其复杂度分布中点是外部传入的,而不是针对特定片段或块计算得出的。

有效范围是 [0, 10000]。0(默认)使用标准 VBR。

enable-tpl boolean

启用时域依赖模型。

ref-frame-config

通过逐帧元数据设置 vpx/vp8cx.hvpx_svc_ref_frame_config_t 结构体的成员,可以精细控制参考方案和帧缓冲区管理。
使用以 ":" 分隔的 key=value 列表。例如,

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

表示是否更新 LAST 帧

rfc_update_golden

表示是否更新 GOLDEN 帧

rfc_update_alt_ref

表示是否更新 ALT_REF 帧

rfc_lst_fb_idx

LAST 帧缓冲区索引

rfc_gld_fb_idx

GOLDEN 帧缓冲区索引

rfc_alt_fb_idx

ALT_REF 帧缓冲区索引

rfc_reference_last

表示是否参考 LAST 帧

rfc_reference_golden

表示是否参考 GOLDEN 帧

rfc_reference_alt_ref

表示是否参考 ALT_REF 帧

rfc_reference_duration

表示帧时长

有关 libvpx 的更多信息,请参阅:http://www.webmproject.org/

9.17 libvvenc

VVenC H.266/VVC encoder 封装。

需要在配置阶段提供 libvvenc 的头文件和库。必须在构建时显式加上 --enable-libvvenc。

VVenC 项目的网站地址为 https://github.com/fraunhoferhhi/vvenc

9.17.1 支持的 Pixel Format

VVenC 仅支持 10-bit 色彩空间作为输入。但内部(编码后)的位深度可以在运行时设置为 8-bit 或 10-bit。

9.17.2 选项

b

设置目标视频比特率。

g

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

preset

设置 VVenC 的预设。

levelidc

设置 level idc。

tier

设置 vvc tier。

qp

设置恒定量化参数。

subopt boolean

设置主观(基于感知的)优化。默认值为 1(开启)。

bitdepth8 boolean

设置使用 8bit 而非 10bit 的编码模式。默认值为 0(关闭)。

period

以秒为单位设置(intra)刷新周期。

vvenc-params

使用以 ":" 分隔的 key=value 列表设置 vvenc 的选项。选项列表请参阅 vvencapp --fullhelpvvencFFapp --fullhelp

例如,选项可以按以下方式提供:

intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8

例如,编码选项可以通过 -vvenc-params 提供:

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

9.18 libwebp

libwebp WebP 图像 encoder 封装

libwebp 是 Google 官方的 WebP 图像 encoder。它可以以有损或无损模式进行编码。有损图像本质上是对 VP8 帧的封装。无损图像是 Google 开发的另一种独立 codec。

9.18.1 Pixel Format

目前,受限于该格式和 libwebp 自身的限制,libwebp 在有损模式下仅支持 YUV420,在无损模式下仅支持 RGB。两种模式均支持 Alpha。由于 API 的限制,如果在有损编码时传入 RGB,或在无损编码时传入 YUV,libwebp 会使用其自身的函数自动转换 pixel format。这并不理想,仅为方便起见而这样做。

9.18.2 选项

-lossless boolean

启用/禁用无损模式的使用。默认值为 0。

-compression_level integer

对于有损模式,这是质量与速度之间的折衷。数值越大,在给定大小下质量越好,但编码时间会增加。对于无损模式,这是体积与速度之间的折衷。数值越大,体积越小,但编码时间会增加。更具体地说,它控制所使用的额外算法和压缩工具的数量,并改变这些工具的组合方式。这对应于 libwebp 中的 method 选项。有效范围是 0 到 6。默认值为 4。

-quality float

对于有损编码,这控制图像质量。对于无损编码,这控制压缩所花费的精力和时间。范围是 0 到 100。默认值为 75。

-preset type

配置预设。它会根据图像的一般类型进行一些自动设置。

none

不使用预设。

default

使用 encoder 的默认值。

picture

数码图片,例如人像、室内摄影

photo

户外照片,具有自然光线

drawing

手绘或线条画,具有高对比度细节

icon

小尺寸的彩色图像

text

类似文本的图像

9.19 libx264, libx264rgb

x264 H.264/MPEG-4 AVC encoder 封装。

需要在配置阶段提供 libx264 的头文件和库。必须在构建时显式加上 --enable-libx264

libx264 支持大量功能,包括 8x8 和 4x4 自适应空间变换、自适应 B 帧放置、CAVLC/CABAC 熵编码、隔行扫描(MBAFF)、无损模式,以及用于保留细节的 psy 优化(自适应量化、psy-RD、psy-trellis)。

libx264 的许多 encoder 选项都映射到 FFmpeg 的全局 codec 选项,而独有的 encoder 选项则通过私有选项提供。此外,x264opts 和 x264-params 私有选项允许传入一组 libx264 x264_param_parse 函数所接受的 key=value 形式的键值对。

x264 项目的网站地址为 http://www.videolan.org/developers/x264.html

libx264rgb encoder 与 libx264 相同,不同之处在于它接受打包格式的 RGB pixel format 作为输入,而不是 YUV。

9.19.1 支持的 Pixel Format

x264 支持 8 到 10-bit 的色彩空间。确切的位深度在 x264 的 configure 阶段决定。

9.19.2 选项

以下选项由 libx264 封装支持。为便于迁移,对应的 x264 选项或值列在括号中。

为减少文档的重复,这里只记录了私有选项以及一些需要特别注意的其他选项。未在此记录的通用选项的说明请参见 Codec Options 一章。

如需获取更准确、更详尽的 libx264 选项文档,请执行 x264 --fullhelp 命令,或查阅 libx264 的文档。

在下面的列表中,如果存在直接对应关系,则会在 libavcodec 对应名称之后的括号中给出 x264 的选项名。

b (bitrate)

以 bits/s 设置比特率。请注意,FFmpeg 的 b 选项以 bits/s 表示,而 x264 的 bitrate 以 kilobits/s 表示。

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 设置(例如直接设置 AVCodecContext 的值),并以映射到相应 level 的整数形式指定(例如值 31 对应 x264_levels 表中定义的 H.264 level IDC "3.1")。当设置为非正值时会被忽略。

也可以将其作为私有选项设置,从而覆盖 AVCodecContext 中设置的值,此时必须以 H.264 Annex A 定义的 level IDC 标识符(例如 "3.1")形式指定。

sc_threshold (scenecut)

设置场景切换检测的阈值。

trellis (trellis)

执行 Trellis 量化以提高效率。默认启用。

nr (nr)

降噪

me_range (merange)

运动搜索的最大范围(以像素为单位)。

me_method (me)

设置运动估计方法。按速度从快到慢排列,可选值如下:

‘dia (dia)’ ‘epzs (dia)’

半径为 1 的菱形搜索(最快)。‘epzs’ 是 ‘dia’ 的别名。

‘hex (hex)’

半径为 2 的六边形搜索。

‘umh (umh)’

非均匀多六边形搜索。

‘esa (esa)’

穷举搜索。

‘tesa (tesa)’

阿达玛穷举搜索(最慢)。

forced-idr

通常,在强制指定 I 帧类型时,encoder 可以选择任意类型的 I 帧。此选项强制其选择 IDR 帧。

subq (subme)

亚像素运动估计方法。

b_strategy (b-adapt)

自适应 B 帧放置的判定算法。仅在第一遍编码时使用。

keyint_min (min-keyint)

最小 GOP 大小。

coder

设置熵 encoder。可选值:

‘ac’

启用 CABAC。

‘vlc’

启用 CAVLC 并禁用 CABAC。效果与 x264 的 --no-cabac 选项相同。

cmp

设置全像素运动估计的比较算法。可选值:

‘chroma’

在运动估计中启用色度。

‘sad’

在运动估计中忽略色度。效果与 x264 的 --no-chroma-me 选项相同。

threads (threads)

编码线程数。

thread_type

设置多线程方式。可选值:

‘slice’

基于 slice 的多线程。效果与 x264 的 --sliced-threads 选项相同。

‘frame’

基于帧的多线程。

flags

设置编码标志。可以通过设置为 -cgop 来禁用闭合 GOP 并启用开放 GOP。效果类似于 x264 的 --open-gop 选项的行为。

rc_init_occupancy (vbv-init)

VBV 缓冲区的初始占用量

preset (preset)

设置编码预设。

tune (tune)

设置编码参数的调优。

profile (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 时,使用周期性帧内刷新(Periodic Intra Refresh)代替 IDR 帧。

avcintra-class (class)

配置 encoder 以生成 AVC-Intra。有效值为 50、100 和 200

bluray-compat (bluray-compat)

配置 encoder 以兼容 Blu-ray 标准。这是设置 "bluray-compat=1 force-cfr=1" 的简写。

b-bias (b-bias)

设置 B 帧使用频率的影响程度。

b-pyramid (b-pyramid)

设置将部分 B 帧保留为参考帧的方式。可选值:

‘none (none)’

禁用。

‘strict (strict)’

严格分层金字塔。

‘normal (normal)’

非严格(非 Blu-ray 兼容)。

mixed-refs

设为 1 时,启用按分区而非按宏块使用一个参考帧。设为 0 时,效果与 x264 的 --no-mixed-refs 选项相同。

8x8dct

设为 1 时,启用自适应空间变换(high profile 的 8x8 变换)。设为 0 时,效果与 x264 的 --no-8x8dct 选项相同。

fast-pskip

设为 1 时,启用 P 帧的早期 SKIP 检测。设为 0 时,效果与 x264 的 --no-fast-pskip 选项相同。

aud (aud)

设为 1 时启用访问单元分隔符的使用。

mbtree

设为 1 时启用宏块树码率控制。设为 0 时,效果与 x264 的 --no-mbtree 选项相同。

deblock (deblock)

以 alpha:beta 形式设置环路滤波器参数。

cplxblur (cplxblur)

设置 QP 波动的减少量(在曲线压缩之前)。

partitions (partitions)

将要考虑的分区设置为逗号分隔的值列表。列表中的可选值:

‘p8x8’

8x8 的 P 帧分区。

‘p4x4’

4x4 的 P 帧分区。

‘b8x8’

4x4 的 B 帧分区。

‘i8x8’

8x8 的 I 帧分区。

‘i4x4’

4x4 的 I 帧分区。(启用 ‘p4x4’ 需要先启用 ‘p8x8’;启用 ‘i8x8’ 则需要先启用自适应空间变换(8x8dct 选项)。)

‘none (none)’

不考虑任何分区。

‘all (all)’

考虑所有分区。

direct-pred (direct)

设置 direct MV 预测模式。可选值:

‘none (none)’

禁用 MV 预测。

‘spatial (spatial)’

启用空间预测。

‘temporal (temporal)’

启用时间预测。

‘auto (auto)’

自动决定。

slice-max-size (slice-max-size)

设置每个条带的大小上限(以字节为单位)。如果未指定,但指定了 RTP 负载大小(ps),则使用该值。

stats (stats)

设置多遍统计信息的文件名。

nal-hrd (nal-hrd)

设置 HRD 信息的信令(需要设置 vbv-bufsize)。可选值:

‘none (none)’

禁用 HRD 信息信令。

‘vbr (vbr)’

可变比特率。

‘cbr (cbr)’

恒定比特率(MP4 container 中不允许)。

x264opts opts x264-params opts

使用以 ":" 分隔的 key=value 选项列表覆盖 x264 的配置。

这两个选项的参数都是以 ":" 分隔的 key=value 组列表。使用 x264opts 时可以省略值,此时假定值为 1

对于值本身使用 ":" 作为分隔符的 filter 和 psy-rd 选项,请改用 ","。它们其实很早就已支持 ",",只是出于某种原因未在文档中说明。

例如,选项可以按以下方式提供:

level=30:bframes=0:weightp=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1:subq=6:8x8dct=0:trellis=0

例如,要通过 ffmpeg 指定 libx264 的编码选项:

ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv

如需获取 libx264 选项的完整列表,请执行 x264 --fullhelp 命令,或查阅 libx264 的文档。

a53cc boolean

将隐藏式字幕(必须为 ATSC 兼容格式)导入输出。仅 mpeg2 和 h264 decoder 提供这些信息。默认值为 1(开启)。

udu_sei boolean

如果可用,则将用户数据未注册 SEI 导入输出。默认值为 0(关闭)。

mb_info boolean

通过 AVFrameSideData 设置 mb_info 数据,仅在通过 API 使用时有用。默认值为 0(关闭)。

提供了用于常见用途的编码 ffpreset,可与通用预设系统一起使用(例如传入 pre 选项)。

9.20 libx265

x265 H.265/HEVC encoder 封装。

需要在配置阶段提供 libx265 的头文件和库。必须在构建时显式加上 --enable-libx265。

9.20.1 选项

b

设置目标视频比特率。

bf g

设置 GOP 大小。

keyint_min

最小 GOP 大小。

refs

每个 P 帧可使用的参考帧数量。范围是从 1 到 16。

preset

设置 x265 预设。

tune

设置 x265 的 tune 参数。

profile

设置 profile 限制。

crf

设置恒定质量模式下的质量。

qp

设置恒定量化码率控制方法的参数。

qmin

最小量化器比例。

qmax

最大量化器比例。

qdiff

量化器比例之间的最大差值。

qblur

量化曲线模糊

qcomp

量化曲线压缩系数

i_qfactor b_qfactor forced-idr

通常,在强制指定 I 帧类型时,encoder 可以选择任意类型的 I 帧。此选项强制其选择 IDR 帧。

x265-stats

指定 2 遍统计信息的文件名。使用 -passlogfile 选项时会自动设置此项。

udu_sei boolean

如果可用,则将用户数据未注册 SEI 导入输出。默认值为 0(关闭)。

x265-params

使用以 ":" 分隔的 key=value 列表设置 x265 的选项。选项列表请参阅 x265 --help

例如,要通过 -x265-params 指定 libx265 的编码选项:

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

9.21 libxavs2

xavs2 AVS2-P2/IEEE1857.4 encoder 封装。

需要在配置阶段提供 libxavs2 的头文件和库。必须在构建时显式加上 --enable-libxavs2。

使用以下标准 libavcodec 选项:

  • b / bit_rate
  • g / gop_size
  • bf / max_b_frames

该 encoder 还有自己特有的选项:

9.21.1 选项

lcu_row_threads

设置行并行线程数,范围为 1 到 8(默认值为 5)。

initial_qp

设置 xavs2 的量化参数,范围为 1 到 63(默认值为 34)。用于设置首帧的初始 qp。

qp

设置 xavs2 的量化参数,范围为 1 到 63(默认值为 34)。用于在恒定 QP 模式下设置 qp 值。

max_qp

设置码率控制的最大 qp,范围为 1 到 63(默认值为 55)。

min_qp

设置码率控制的最小 qp,范围为 1 到 63(默认值为 20)。

speed_level

设置速度级别,范围为 0 到 9(默认值为 0)。数值越大,质量越好,但速度越慢。

log_level

设置日志级别,范围为 -1 到 3(默认值为 0)。-1:无,0:错误,1:警告,2:信息,3:调试。

xavs2-params

使用以 ":" 分隔的 key=value 列表设置 xavs2 的选项。

例如,要通过 -xavs2-params 指定 libxavs2 的编码选项:

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

9.22 libxeve

eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC encoder 封装。为便于迁移,对应的 xeve 选项或值在括号中列出。

使用此 encoder 要求在 configure 时存在 libxeve 的头文件和库。你需要在构建时显式指定 --enable-libxeve。

许多 libxeve encoder 选项被映射到 FFmpeg 的全局 codec 选项,而独有的 encoder 选项则通过私有选项提供。此外,xeve-params 私有选项允许传入一组 libxeve parse_xeve_params 函数所接受的 key=value 形式的键值对。

xeve 项目网站位于 https://github.com/mpeg5/xeve

9.22.1 选项

libxeve 封装支持以下选项。为便于迁移,对应的 xeve 选项或值在括号中列出。

为减少文档的重复,这里只记录了私有选项以及一些需要特别注意的其他选项。未在此记录的通用选项的说明请参见 Codec Options 一章。

要获取更准确、更详尽的 libxeve 选项文档,请执行 xeve_app --help 命令,或查阅 libxeve 的文档。

b (bitrate)

设置目标视频比特率,单位为 bits/s。注意 FFmpeg 的 b 选项以 bits/s 表示,而 xeve 的 bitrate 以 kilobits/s 表示。

bf (bframes)

设置 B 帧的最大数量 (1,3,7,15)。

g (keyint)

设置 GOP 大小(I 帧周期)。

preset (preset)

设置 xeve 预设。设置 encoder 预设值以确定编码速度 [fast, medium, slow, placebo]

tune (tune)

设置 encoder 调优参数 [psnr, zerolatency]

profile (profile)

设置 encoder profile [0: baseline; 1: main]

crf (crf)

设置恒定质量模式下的质量。恒定速率因子 <10..49>[默认值:32]

qp (qp)

设置恒定量化码率控制方法的参数。量化参数 qp <0..51>[默认值:32]

threads (threads)

强制使用指定数量的线程

9.23 libxvid

Xvid MPEG-4 Part 2 encoder 封装。

使用此 encoder 要求在 configure 时存在 libxvidcore 的头文件和库。你需要在构建时显式指定 --enable-libxvid --enable-gpl

原生的 mpeg4 encoder 已支持 MPEG-4 Part 2 格式,因此用户无需该库即可编码为此格式。

9.23.1 选项

libxvid 封装支持以下选项。以下部分选项虽然列出但未加说明,它们对应于共享 codec 选项,其文档请参阅 Codec Options 一章。未列出的其他共享选项对 libxvid encoder 没有作用。

b g qmin qmax mpeg_quant threads bf b_qfactor b_qoffset flags

设置特定的编码标志。可能的取值:

‘mv4’

按宏块使用四个运动矢量。

‘aic’

启用高质量 AC 预测。

‘gray’

仅编码灰度。

‘qpel’

启用四分之一像素运动补偿。

‘cgop’

启用闭合 GOP。

‘global_header’

将全局头写入 extradata,而不是每个 keyframe。

gmc

启用全局运动补偿(GMC)。默认值为 0(禁用)。

me_quality

设置运动估计的质量级别。可能的取值按速度递减、质量递增的顺序排列:

‘0’

不使用运动估计(默认值)。

‘1, 2’

对 16x16 块启用高级菱形区域搜索,并对 16x16 块启用半像素细化。

‘3, 4’

启用以上所有内容,并对 8x8 块启用高级菱形区域搜索和半像素细化,同时对 P 帧和 B 帧的色度平面也启用运动估计。

‘5, 6’

启用以上所有内容,并扩展 16x16 和 8x8 块的搜索。

mbd

设置宏块判定算法。可能的取值按质量递增的顺序排列:

‘simple’

使用宏块比较函数算法(默认值)。

‘bits’

对 16x16 块启用基于率失真的半像素和四分之一像素细化。

‘rd’

启用以上所有内容,并对 8x8 块启用基于率失真的半像素和四分之一像素细化,以及使用方形模式的基于率失真的搜索。

lumi_aq

设为 1 时启用亮度掩蔽自适应量化。默认值为 0(禁用)。

variance_aq

设为 1 时启用方差自适应量化。默认值为 0(禁用)。

与 lumi_aq 组合使用时,最终质量不会优于单独使用这两种效果中的任何一种。换句话说,最终质量将是两种效果中较差的那一种。

trellis

设置基于率失真最优的量化。

ssim

设置结构相似性(SSIM)的显示方式。可能的取值:

‘off’

禁用 SSIM 信息的显示。

‘avg’

在编码结束时向 stdout 输出平均 SSIM。显示平均 SSIM 的格式为:

Average SSIM: %f

对不熟悉 C 语言的用户来说,%f 表示一个浮点数,即十进制数(例如 0.939232)。

‘frame’

在编码期间输出每帧的 SSIM 数据,并在编码结束时向 stdout 输出平均 SSIM。每帧信息的格式为:

       SSIM: avg: %1.3f min: %1.3f max: %1.3f

对不熟悉 C 语言的用户来说,%1.3f 表示四舍五入到小数点后 3 位的浮点数(例如 0.932)。

ssim_acc

设置 SSIM 精度。有效选项为 0-4 范围内的整数,其中 0 给出最准确的结果,4 计算速度最快。

9.24 MediaCodec

MediaCodec encoder 封装可在 Android 设备上实现硬件加速的视频编码。它支持 H.264、H.265 (HEVC)、VP8、VP9、MPEG-4 以及 AV1 编码(能否实际工作取决于设备)。

Android 提供两套 API:Java MediaCodec 和 NDK MediaCodec。MediaCodec encoder 封装两者都支持。注意 NDK MediaCodec API 无需 JVM 即可运行,但由于依赖系统框架服务,在 JVM 环境之外可能无法正常工作,尤其是在 Android 15 之后。

ndk_codec boolean

使用基于 NDK 的 MediaCodec API,而不是 Java API。如果 av_jni_get_java_vm() 返回 NULL,则默认启用。

ndk_async boolean

以异步模式使用 NDK MediaCodec。异步模式比在同步模式下循环轮询的开销更小。异步模式的缺点是 AV_CODEC_FLAG_GLOBAL_HEADER 不起作用(必要时使用 extract_extradata bsf)。在低于 Android 8.0 的设备上不起作用,会被自动禁用。

codec_name string

一种编码类型在同一设备上可能有多种实现,此选项用于指定使用哪个后端(通过 MediaCodec 的 createCodecByName API)。默认值为 NULL,此时 encoder 由 createEncoderByType 创建。

bitrate_mode integer

可选值:

‘cq’

恒定质量模式

‘vbr’

可变比特率模式

‘cbr’

恒定比特率模式

‘cbr_fd’

带丢帧的恒定比特率模式

pts_as_dts boolean

将 PTS 用作 DTS。这是针对 MediaCodec API 不提供解码时间戳这一问题的变通方案。当 B 帧数为 0 时会自动启用。

operating_rate integer

codec 需要运行的期望运行速率,0 表示未指定。此选项用于高速/慢动作视频采集等场景,其中视频 encoder 格式包含目标播放速率(例如 30fps),但该部件必须能够处理更高的采集速率(例如 240fps)。codec 会用此速率进行资源规划并设置运行点。

qp_i_min integer

I 帧的最小量化参数。

qp_p_min integer

P 帧的最小量化参数。

qp_b_min integer

B 帧的最小量化参数。

qp_i_max integer

I 帧的最大量化参数。

qp_p_max integer

P 帧的最大量化参数。

qp_b_max integer

B 帧的最大量化参数。

9.25 MediaFoundation

MediaFoundation 框架中提供以下 encoder 封装:

  • h264_mf
  • hevc_mf
  • av1_mf

它们同时支持软件编码和硬件编码。

视频 encoder 可接受 nv12 或 yuv420p 格式的输入(有些 encoder 两者都支持,有些只支持其中之一——实践中 nv12 是更安全的选择,尤其对硬件 encoder 而言)。

硬件加速编码需要 D3D11,包括通过 scale_d3d11 滤镜实现的硬件缩放能力。

要列出 MediaFoundation encoder 的所有可用选项,请使用:ffmpeg -h encoder=<encoder>,例如 ffmpeg -h encoder=h264_mf

9.25.1 选项

rate_control

选择码率控制模式。可用模式:

‘default’

默认模式

‘cbr’

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.25.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.26 Microsoft RLE

Microsoft RLE(又名 MSRLE)encoder。仅支持 8 位调色板模式。与 Windows 3.1 和 Windows 95 兼容。

9.26.1 选项

g integer

keyframe 间隔。至少每隔 -g 帧插入一个 keyframe,有时会更早。

9.27 mpeg2

MPEG-2 视频 encoder。

9.27.1 选项

profile

选择要编码的 mpeg2 profile:

‘422’ ‘high’ ‘ss’

空间可伸缩

‘snr’

信噪比可伸缩

‘main’ ‘simple’ level

选择要编码的 mpeg2 level:

‘high’ ‘high1440’ ‘main’ ‘low’ seq_disp_ext integer

指定 encoder 是否应向输出写入 sequence_display_extension。

-1 auto

通过检查待写入的数据是否与默认值或未指定的值不同,来自动决定是否写入它(这是默认值)。

0 never

从不写入。

1 always

始终写入。

video_format integer

指定写入 sequence display extension 的 video_format,用于表明视频图像的来源。默认值为 ‘unspecified’,可取值为 ‘component’、‘pal’、‘ntsc’、‘secam’ 或 ‘mac’。为获得最大兼容性,请使用 ‘component’。

a53cc boolean

将隐藏式字幕(必须为 ATSC 兼容格式)导入输出。默认值为 1(开启)。

9.28 png

PNG 图像 encoder。

9.28.1 选项

compression_level

设置压缩级别,范围为 0 到 9(默认值)

9.28.2 私有选项

dpi integer

设置像素的物理密度,单位为每英寸点数,默认未设置

dpm integer

设置像素的物理密度,单位为每米点数,默认未设置

pred method

设置预测方法(none、sub、up、avg、paeth、mixed),默认值为 paeth

9.29 ProRes

Apple ProRes encoder。

FFmpeg 包含 2 个 ProRes encoder,即 prores-aw 和 prores-ks encoder。可以通过 -vcodec 选项选择要使用的 encoder。

9.29.1 prores-ks 的私有选项

profile integer

选择要编码的 ProRes profile

‘proxy’ ‘lt’ ‘standard’ ‘hq’ ‘4444’ ‘4444xq’ quant_mat integer

选择量化矩阵。

‘auto’ ‘default’ ‘proxy’ ‘lt’ ‘standard’ ‘hq’

如果设为 auto,将选取与 profile 匹配的矩阵。如果未设置,将选取提供最高质量的矩阵,即 default。

bits_per_mb integer

编码一个宏块所分配的比特数。不同 profile 每个宏块使用的比特数在 200 到 2400 之间,最大值为 8000。

mbs_per_slice integer

每个 slice 中的宏块数量(1-8);默认值(8)在几乎所有情况下都应该合适。

vendor string

覆盖 4 字节的供应商 ID。类似 apl0 这样的自定义供应商 ID 会声称该流是由 Apple encoder 生成的。

alpha_bits integer

指定 alpha 分量的比特数。可能的取值为 0、8 和 16。使用 0 可禁用 alpha 平面编码。

9.29.2 速度方面的考量

在默认工作模式下,encoder 必须遵守帧约束(即不生成比要求更大的帧),同时仍要尽可能使输出画面质量最好。包含大量细节的帧更难压缩,encoder 需要花费更多时间为每个 slice 搜索合适的量化器。

设置更高的 bits_per_mb 上限可以提升速度。

若要获得最快的编码速度,请设置 qscale 参数(推荐值为 4),且不要设置大小约束。

9.30 QSV encoder

Intel QuickSync Video encoder 系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)

9.30.1 码率控制方法

码率控制方法按如下方式选择:

  • 当指定了 global_quality 时,使用基于质量的模式。具体来说这意味着以下之一
    • - CQP - 恒定量化器比例,当同时设置了 qscale codec 标志时(-qscale ffmpeg 选项)。
    • - LA_ICQ - 带前瞻的智能恒定质量,当同时设置了 look_ahead 选项时。
    • - ICQ – 其余情况下的智能恒定质量。对于 ICQ 模式,全局质量范围为 1 到 51,1 为最佳质量。
  • 否则,当用 b 选项指定了期望的平均比特率时,使用基于比特率的模式。
    • - LA - 带前瞻的 VBR,当指定了 look_ahead 选项时。
    • - VCM - 视频会议模式,当设置了 vcm 选项时。
    • - CBR - 恒定比特率,当指定了 maxrate 且等于平均比特率时。
    • - VBR - 可变比特率,当指定了 maxrate,但高于平均比特率时。
    • - AVBR - 平均 VBR 模式,当未指定 maxrate,且 avbr_accuracy 和 avbr_convergence 均设为非零值时。此模式在 Windows 上适用于 H264 和 HEVC。
  • 否则使用默认的码率控制方法 CQP。

注意根据你的系统不同,encoder 实际选择的模式可能与你指定的不同。将详细程度级别设为 verbose 或更高,可查看 QSV 运行时实际使用的设置。

9.30.2 全局选项 -> MSDK 选项

额外的 libavcodec 全局选项按如下方式映射到 MSDK 选项:

  • g/gop_size -> GopPicSize
  • bf/max_b_frames+1 -> GopRefDist
  • rc_init_occupancy/rc_initial_buffer_occupancy -> InitialDelayInKB
  • slices -> NumSlice
  • refs -> NumRefFrame
  • b_strategy/b_frame_strategy -> BRefType
  • cgop/CLOSED_GOP codec 标志 -> GopOptFlag
  • 对于 CQP 模式,i_qfactor/i_qoffset 和 b_qfactor/b_qoffset 分别设置 QPP 与 QPI、QPP 与 QPB 之间的差值。
  • 将 coder 选项设为 vlc 会使 H.264 encoder 使用 CAVLC 而非 CABAC。

9.30.3 通用选项

以下选项被所有 qsv encoder 使用。

async_depth

指定应用程序在显式同步结果之前执行多少个异步操作。如果为零,表示未指定该值。

preset

此选项列举了从 veryfast(最快速度)到 veryslow(最佳质量)的一系列选择。

‘veryfast’ ‘faster’ ‘fast’ ‘medium’ ‘slow’ ‘slower’ ‘veryslow’ forced_idr

将 I 帧强制为 IDR 帧。

low_power

对于 encoder,将此标志设为 ON 可降低功耗和 GPU 使用率。

9.30.4 运行时选项

以下选项可在 qsv 编码期间使用。

global_quality i_quant_factor i_quant_offset b_quant_factor b_quant_offset

在 h264_qsv 和 hevc_qsv 中支持。更改这些值可重置 qsv codec 的 qp 配置。

max_frame_size

在 h264_qsv 和 hevc_qsv 中支持。更改此值可重置 qsv codec 的 MaxFrameSize 配置。

gop_size

更改此值可重置 qsv codec 的 gop 配置。

int_ref_type int_ref_cycle_size int_ref_qp_delta int_ref_cycle_dist

在 h264_qsv 和 hevc_qsv 中支持。更改这些值可重置 qsv codec 的 Intra Refresh 配置。

qmax qmin max_qp_i min_qp_i max_qp_p min_qp_p max_qp_b min_qp_b

在 h264_qsv 中支持。更改这些值可重置 qsv codec 的最大/最小 qp 配置。

low_delay_brc

在 h264_qsv、hevc_qsv 和 av1_qsv 中支持。更改此值可重置 qsv codec 的 low_delay_brc 配置。

framerate

更改此值可重置 qsv codec 的 framerate 配置。

bit_rate rc_buffer_size rc_initial_buffer_occupancy rc_max_rate

更改这些值可重置 qsv codec 的码率控制配置。

pic_timing_sei

在 h264_qsv 和 hevc_qsv 中支持。更改此值可重置 qsv codec 的 pic_timing_sei 配置。

qsv_params

以冒号分隔的键值对列表形式设置 QSV encoder 参数。

qsv_params 的格式应为 key1=value1:key2=value2:...

这些参数会通过 MFXSetParameter 函数直接传递给底层的 Intel Quick Sync Video (QSV) encoder。

示例:

ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4

此选项允许对 QSV encoder 提供的各种 encoder 专属设置进行精细控制。

9.30.5 H264 选项

以下选项由 h264_qsv 使用

extbrc

扩展码率控制。

recovery_point_sei

设置此标志,可在每个内部刷新周期开始处插入恢复点 SEI 消息。

rdo

启用率失真优化。

max_frame_size

编码后帧的最大大小(字节)。

max_frame_size_i

I 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 I 帧会忽略 max_frame_size 设置的值。

max_frame_size_p

P 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 P 帧会忽略 max_frame_size 设置的值。

max_slice_size

编码后 slice 的最大大小(字节)。

bitrate_limit

切换比特率限制。将比特率修改为 QSV encoder 所允许的范围之内。将此标志关闭可能导致违反 HRD 一致性。请注意,将比特率指定为低于 QSV encoder 范围可能会显著影响质量。若开启,此选项在非 CQP 模式下生效:如果比特率不在 QSV encoder 所允许的范围内,将被更改到该范围内。

mbbrc

设置此标志可启用宏块级别的码率控制,通常能改善主观视觉质量。启用此标志可能对性能和客观视觉质量指标产生负面影响。

low_delay_brc

设置此标志可开启或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更精确的码率控制,以最小化逐帧 bitstream 大小的差异。取值:-1 为默认,0 为关闭,1 为开启

adaptive_i

此标志控制 QSV encoder 对 I 帧的插入。开启此标志可允许将帧类型从 P 和 B 更改为 I。

adaptive_b

此标志控制将帧类型从 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

指定内部刷新类型。内部刷新的主要目标是在不显著影响编码 bitstream 大小的前提下(该影响通常由 I 帧引起)改善错误恢复能力。SDK encoder 通过在刷新周期中使用 intra MB 编码每帧的一部分来实现这一点。none 表示不刷新。vertical 表示按列的 MB 进行垂直刷新。horizontal 表示按行的 MB 进行水平刷新。slice 表示按 slice 进行水平刷新,不重叠。在 slice 情况下,in_ref_cycle_size 会被忽略。要启用内部刷新,B 帧数应设为 0。

int_ref_cycle_size

指定刷新周期内的图片数量,从 2 开始。0 和 1 为无效值。

int_ref_qp_delta

指定为插入的 intra MB 设置的 QP 差值。如果亮度样本的目标编码位深度为 8,则此值为 [-51, 51] 范围内的有符号值;对于 10 位深度为 [-63, 63],对于 12 位深度则为 [-75, 75]。

int_ref_cycle_dist

以帧为单位,内部刷新周期起始点之间的距离。

profile

‘unknown’ ‘baseline’ ‘main’ ‘high’ a53cc

使用 A53 隐藏式字幕(如果可用)。

aud

插入访问单元分隔符 NAL。

mfmode

多帧模式。

‘off’ ‘auto’ repeat_pps

对每一帧重复 pps。

max_qp_i

I 帧的最大视频量化器比例。

min_qp_i

I 帧的最小视频量化器比例。

max_qp_p

P 帧的最大视频量化器比例。

min_qp_p

P 帧的最小视频量化器比例。

max_qp_b

B 帧的最大视频量化器比例。

min_qp_b

B 帧的最小视频量化器比例。

scenario

为 encoder 提供有关此次编码会话场景的提示。

‘unknown’ ‘displayremoting’ ‘videoconference’ ‘archive’ ‘livestreaming’ ‘cameracapture’ ‘videosurveillance’ ‘gamestreaming’ ‘remotegaming’ avbr_accuracy

AVBR 码率控制的精度(单位为千分之一)。

avbr_convergence

AVBR 码率控制的收敛性(单位为 100 帧)

avbr_accuracy 和 avbr_convergence 参数用于平均可变比特率控制(AVBR)算法。该算法专注于总体编码质量,同时在经过 avbr_convergence 周期后,在 avbr_accuracy 精度范围内满足指定的比特率 target_bitrate。此方法不遵循 HRD,瞬时比特率既不设上限也不填充。

skip_frame

使用每帧元数据 "qsv_skip_frame" 在编码时跳过帧。此选项定义该元数据的用法。

‘no_skip’

禁用跳帧。

‘insert_dummy’

encoder 向 bitstream 中插入一帧,其中所有宏块都编码为跳过状态。

‘insert_nothing’

与 insert_dummy 类似,但 encoder 不向 bitstream 中插入任何内容。跳过的帧仍会在 brc 中使用。例如,gop 仍会包含跳过的帧,跳过帧之后的帧大小会更大。

‘brc_only’

skip_frame 元数据表示当前帧之前跳过的帧数。

9.30.6 HEVC 选项

这些选项由 hevc_qsv 使用。

extbrc

扩展码率控制。

recovery_point_sei

设置此标志可在每个帧内刷新周期开始时插入恢复点 SEI 消息。

rdo

启用率失真优化。

max_frame_size

编码后的最大帧大小(以字节为单位)。

max_frame_size_i

I 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 I 帧会忽略 max_frame_size 设置的值。

max_frame_size_p

P 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 P 帧会忽略 max_frame_size 设置的值。

max_slice_size

条带编码后的最大大小(以字节为单位)。

mbbrc

设置此标志可启用宏块级码率控制,通常能提升主观视觉质量;启用此标志可能会对性能和客观视觉质量指标产生负面影响。

low_delay_brc

设置此标志可开启或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更精确的码率控制,以最小化逐帧 bitstream 大小的差异。取值:-1 为默认,0 为关闭,1 为开启

adaptive_i

此标志控制 QSV encoder 对 I 帧的插入。开启此标志可允许将帧类型从 P 和 B 更改为 I。

adaptive_b

此标志控制将帧类型从 B 更改为 P。

p_strategy

启用 P 金字塔:0 为默认,1 为 simple,2 为 pyramid(bf 需要设置为 0)。

b_strategy

此选项控制是否将 B 帧用作参考。

dblk_idc

此选项用于禁用去块效应,取值范围为 0~2。

idr_interval

IDR 帧之间的距离(以 I 帧为单位)。

‘begin_only’

仅在流的开头输出 IDR 帧。

load_plugin

要在内部会话中加载的用户插件。

‘none’ ‘hevc_sw’ ‘hevc_hw’ load_plugins

要在内部会话中加载的、以 : 分隔的十六进制插件 UID 列表。

look_ahead_depth

前瞻深度(以帧数计),在启用 extbrc 选项时可用。

profile

设置编码 profile(scc 需要 libmfx >= 1.32)。

‘unknown’ ‘main’ ‘main10’ ‘mainsp’ ‘rext’ ‘scc’ tier

设置编码 tier(只有 level >= 4 才能支持 high tier)。此选项仅在指定 level 选项时生效。

‘main’ ‘high’ gpb

1:GPB(广义 P/B 帧)

0:普通 P 帧。

tile_cols

分块编码的列数。

tile_rows

分块编码的行数。

aud

插入访问单元分隔符 NAL。

pic_timing_sei

插入包含 pic_struct_syntax 元素的图像时序 SEI。

transform_skip

开启此选项可启用 transformskip。该功能在 ICL 及更新的平台上受支持。

int_ref_type

指定帧内刷新的类型。帧内刷新的主要目的是在不因 I 帧对编码后 bitstream 大小造成明显影响的前提下提升容错能力。SDK encoder 通过在刷新周期内使用帧内 MB 对每帧的一部分进行编码来实现这一点。none 表示不刷新,vertical 表示按 MB 列进行垂直刷新,horizontal 表示按 MB 行进行水平刷新,slice 表示按不重叠的条带进行水平刷新。使用 slice 时,in_ref_cycle_size 会被忽略。要启用帧内刷新,需要将 B 帧设置为 0。

int_ref_cycle_size

指定刷新周期内的图像数量,最小为 2。0 和 1 为无效值。

int_ref_qp_delta

指定插入的帧内 MB 的 QP 差值。这是一个有符号值:当亮度采样的目标编码位深度为 8 时,取值范围为 [-51, 51];10 位深度时为 [-63, 63];12 位深度时为 [-75, 75]。

int_ref_cycle_dist

帧内刷新周期起始点之间的距离(以帧为单位)。

max_qp_i

I 帧的最大视频量化尺度。

min_qp_i

I 帧的最小视频量化尺度。

max_qp_p

P 帧的最大视频量化尺度。

min_qp_p

P 帧的最小视频量化尺度。

max_qp_b

B 帧的最大视频量化尺度。

min_qp_b

B 帧的最小视频量化尺度。

scenario

为 encoder 提供有关本次编码会话使用场景的提示。

‘unknown’ ‘displayremoting’ ‘videoconference’ ‘archive’ ‘livestreaming’ ‘cameracapture’ ‘videosurveillance’ ‘gamestreaming’ ‘remotegaming’ avbr_accuracy

AVBR 码率控制的精度(单位为 0.1%)。

avbr_convergence

AVBR 码率控制的收敛速度(单位为 100 帧)

参数 avbr_accuracy 和 avbr_convergence 用于平均可变码率控制(AVBR)算法。该算法在满足指定比特率(target_bitrate)、且精度保持在 avbr_accuracy 范围内的前提下,经过一个 avbr_convergence 周期后,专注于提升整体编码质量。此方法不遵循 HRD,瞬时 bitrate 不会被限制上限或填充。

skip_frame

编码时使用逐帧元数据 "qsv_skip_frame" 来跳过帧。此选项用于定义该元数据的使用方式。

‘no_skip’

禁用跳帧。

‘insert_dummy’

encoder 会在 bitstream 中插入一帧,该帧的所有宏块都编码为跳过状态。

‘insert_nothing’

与 insert_dummy 类似,但 encoder 不向 bitstream 中插入任何内容。跳过的帧仍会在 brc 中使用。例如,gop 仍会包含跳过的帧,跳过帧之后的帧大小会更大。

‘brc_only’

skip_frame 元数据表示当前帧之前跳过的帧数。

9.30.7 MPEG2 选项

这些选项由 mpeg2_qsv 使用。

profile

‘unknown’ ‘simple’ ‘main’ ‘high’

9.30.8 VP9 选项

这些选项由 vp9_qsv 使用。

profile

‘unknown’ ‘profile0’ ‘profile1’ ‘profile2’ ‘profile3’ tile_cols

分块编码的列数(需要 libmfx >= 1.29)。

tile_rows

分块编码的行数(需要 libmfx >= 1.29)。

9.30.9 AV1 选项

这些选项由 av1_qsv 使用(需要 libvpl)。

profile

‘unknown’ ‘main’ tile_cols

分块编码的列数。

tile_rows

分块编码的行数。

adaptive_i

此标志控制 QSV encoder 对 I 帧的插入。开启此标志可允许将帧类型从 P 和 B 更改为 I。

adaptive_b

此标志控制将帧类型从 B 更改为 P。

b_strategy

此选项控制是否将 B 帧用作参考。

extbrc

扩展码率控制。

look_ahead_depth

前瞻深度(以帧数计),在启用 extbrc 选项时可用。

low_delay_brc

设置此标志可开启或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更精确的码率控制,以最小化逐帧 bitstream 大小的差异。取值:-1 为默认,0 为关闭,1 为开启

max_frame_size

设置每帧允许的最大大小(字节)。如果帧大小超出限制,encoder 会调整 QP 值以控制帧大小。在 CQP 码率控制模式下无效。

max_frame_size_i

I 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 I 帧会忽略 max_frame_size 设置的值。

max_frame_size_p

P 帧编码后的最大帧大小(以字节为单位)。如果将此值设置为大于零,则 P 帧会忽略 max_frame_size 设置的值。

9.31 snow

9.31.1 选项

iterative_dia_size

用于迭代运动估计的菱形大小。

9.32 VAAPI encoder

通过 VAAPI 访问硬件 encoder 的封装。

这些 encoder 只接受 VAAPI 硬件 surface 中的输入。如果输入为软件帧,请使用 hwupload 滤镜将其上传到 GPU。

使用以下标准 libavcodec 选项:

  • g / gop_size
  • bf / max_b_frames
  • profile

如果未设置,将根据输入帧的格式以及驱动支持的 profile 自动确定。

  • level
  • b / bit_rate
  • maxrate / rc_max_rate
  • bufsize / rc_buffer_size
  • rc_init_occupancy / rc_initial_buffer_occupancy
  • compression_level

速度与质量的权衡:值越大速度越快,画质越差。

  • q / global_quality

体积与质量的权衡:值越大文件越小,画质越差。

  • qmin
  • qmax
  • i_qfactor / i_quant_factor
  • i_qoffset / i_quant_offset
  • b_qfactor / b_quant_factor
  • b_qoffset / b_quant_offset
  • slices

所有 encoder 都支持以下选项:

low_power

部分驱动/平台会为某些 codec 提供第二个 encoder,其设计目标是比默认 encoder 消耗更少的电力;设置此选项将尝试使用该 encoder。请注意,它可能只支持有限的功能集,因此在此模式下部分其他选项可能不可用。

idr_interval

在 open-GOP 模式下,设置完全刷新(IDR)帧之间的普通帧内帧数量。这些帧内帧仍是 IRAP,但不会包含全局头,并且可能带有无法解码的前导图像。

b_depth

设置 B 帧的参考深度。设置为 1(默认值)时,所有 B 帧都只参考 P 帧或 I 帧。设置为更大的值时,会出现多层 B 帧,每层中的帧只参考更高层中的帧。

async_depth

处理并行度的最大值。增大此值可以提升单通道性能。如果驱动未实现 vaSyncBuffer 函数,此选项不起作用。使用较大的 async_depth 值时,请确保分配了足够的 hw_frames。

max_frame_size

设置每帧允许的最大大小(字节)。如果帧大小超出限制,encoder 会调整 QP 值以控制帧大小。在 CQP 码率控制模式下无效。

rc_mode

设置要使用的码率控制模式。特定驱动可能只支持部分模式。

可选模式:

auto

根据驱动支持情况和其他选项自动选择模式。这是默认值。

CQP

固定质量(Constant-quality)。

CBR

固定比特率(Constant-bitrate)。

VBR

可变比特率(Variable-bitrate)。

ICQ

智能固定质量(Intelligent constant-quality)。

QVBR

质量定义可变比特率(Quality-defined variable-bitrate)。

AVBR

平均可变比特率(Average variable bitrate)。

blbrc

启用块级码率控制,逐块分配不同的比特率。在 CQP 模式下无效。

每个 encoder 还有各自的专有选项:

av1_vaapi

profile 设置 seq_profile 的值。tier 设置 seq_tier 的值。level 设置 seq_level_idx 的值。

tiles

以“列 x 行”的形式设置对输入视频进行编码时使用的分块数量。(默认值为 auto,表示使用最小的分块列数/行数)。

tile_groups

设置分块组的数量。所有分块会尽可能均匀地分配到各个分块组中。(默认值为 1)。

h264_vaapi

profile 设置 profile_idcconstraint_set*_flag s 的值。level 设置 level_idc 的值。

coder

设置熵编码方式(默认为 cabac)。可选值:

‘ac’ ‘cabac’

使用 CABAC。

‘vlc’ ‘cavlc’

使用 CAVLC。

aud

在流中包含访问单元分隔符(默认不包含)。

sei

设置要包含的 SEI 消息类型,可以是以下值的组合:

‘identifier’

包含一条 user_data_unregistered 消息,其中含有关于 encoder 的信息。

‘timing’

包含图像时序参数(buffering_periodpic_timing 消息)。

‘recovery_point’

在适当的位置包含恢复点(recovery_point 消息)。

hevc_vaapi

profile 和 level 分别设置 general_profile_idcgeneral_level_idc 的值。

aud

在流中包含访问单元分隔符(默认不包含)。

tier

设置 general_tier_flag。如果未显式指定,这可能会影响为流选择的 level。

sei

设置要包含的 SEI 消息类型,可以是以下值的组合:

‘hdr’

如果输入帧带有 HDR 元数据,则将其包含在内(mastering_display_colour_volumecontent_light_level 消息)。

tiles

以“列 x 行”的形式设置对输入视频进行编码时使用的分块数量。数值越大,编码和解码的并行度越高,但可能降低编码效率。

mjpeg_vaapi

仅支持基线 DCT 编码。encoder 始终使用标准的量化表和霍夫曼表——global_quality 用于缩放标准量化表(范围 1-100)。

对于 YUV,支持 4:2:0、4:2:2 和 4:4:4 三种二次采样模式。同时也支持 RGB,此时会生成 RGB JPEG。

jfif

在每帧中包含 JFIF 头(默认不包含)。

huffman

包含标准霍夫曼表(默认开启)。关闭此选项可以为每个输出帧节省几百字节,但可能会失去与部分无法完整处理 MJPEG 的 JPEG decoder 的兼容性。

mpeg2_vaapi

profile 和 level 设置 profile_and_level_indication 的值。

vp8_vaapi

不支持 B 帧。

global_quality 设置非 keyframe 使用的 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 帧,但输出流始终按编码顺序而非显示顺序排列。如果启用了 B 帧,可能需要使用 vp9_raw_reorder bitstream 过滤器来修改输出流,使帧按正确的顺序显示。

只会生成普通帧——如果需要生成可供所有 decoder 使用的流,可能需要 vp9_superframe bitstream 过滤器。

9.33 vbn

Vizrt Binary Image encoder。

该格式由广播设备厂商 Vizrt 用于快速的纹理流传输。该格式的高级特性,例如纹理数据的 LZW 压缩或 mipmap 生成,均不受支持。

9.33.1 选项

format string

设置 VBN 文件使用的纹理压缩格式。可以是 dxt1、dxt5 或 raw。默认值为 dxt5。

9.34 vc2

SMPTE VC-2(前身为 BBC Dirac Pro)。该 codec 最初主要面向专业广播领域,但由于它支持 8 位(有限范围或全范围)、10 位或 12 位的 yuv420、yuv422 和 yuv444,因此也适用于其他需要低开销和低压缩率的场景(例如屏幕录制)。

9.34.1 选项

b

设置目标视频比特率。通常约为未压缩视频比特率的 1:6(例如对于 1920x1080 50fps yuv422p10,约为 400Mbps)。数值越高(越接近未压缩比特率)会开启无损压缩模式。

field_order

设置该选项(例如设为 tt,即顶场优先)可为隔行输入启用场编码。由于会将场分离并分别编码,因此对隔行内容应能提高压缩率。

wavelet_depth

设置应用的小波变换总次数,范围为 1 到 5(5 为默认值)。数值越小,压缩率和质量越低。性能较弱的 decoder 可能无法处理大于 3 的 wavelet_depth 值。

wavelet_type

设置变换类型。目前仅实现了 5_3(LeGall)和 9_7(Deslauriers-Dubuc),其中压缩率更好的 9_7 是默认值。

slice_width slice_height

设置每个条带的大小。数值越大压缩率越好。为了与功能更受限的其他 decoder 兼容,请将 slice_width 设为 32、slice_height 设为 8。

tolerance

以百分比设置码率控制系统的欠冲容差。这是为了避免执行开销较大的搜索。

qm

设置默认使用、或在 wavelet_depth 设为 5 时使用的量化矩阵预设

  • - default 使用规范中定义的默认量化矩阵,并针对第五层级进行了扩展。这样能在保留细节和减少伪影之间取得良好平衡。
  • - flat 使用完全置零的量化矩阵。这会提高 PSNR,但可能降低主观感受质量,常用于虚假的基准测试。
  • - color 会降低细节,但会尝试在极低比特率下保留色彩。

10 字幕 encoder

10.1 dvbsub

此 codec 对 DVB 广播和录制中使用的位图字幕格式进行编码。位图通常作为独立的流嵌入 MPEG-TS 等 container 中。

10.1.1 选项

min_bpp integer (2, 4, or 8)

为字幕的调色查找表设置最小的每像素比特数。

DVB 支持 2、4 和 8 每像素比特数的调色查找表。此选项可以强制使用特定的每像素比特数,而不论实际颜色数量。由于并非所有播放器都支持或能正确支持 2 每像素比特数,因此该值默认为 4。

10.2 dvdsub

此 codec 对 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

设为 1 时,启用一个变通方案,使所有字幕的像素行数都变为偶数。这可以修复部分播放器在行数为奇数时截断最下面一行的问题。该变通方案仅在需要时添加一行完全透明的像素。开销很低,平均每条字幕约为 1 字节。

默认情况下,此变通方案处于禁用状态。

10.3 lrc

此 codec 对 LRC 歌词格式进行编码。

10.3.1 选项

precision

指定时间戳小数部分的精度。时间基会根据此值确定。

默认为 2,即精确到百分之一秒(厘秒)。

11 参见

ffmpeg, ffplay, ffprobe, libavcodec

12 作者

FFmpeg 的开发者们。

关于作者身份的详细信息,请参见项目的 Git 历史(https://git.ffmpeg.org/ffmpeg),例如在 FFmpeg 源代码目录中输入 git log 命令,或浏览在线仓库 https://git.ffmpeg.org/ffmpeg

各组件的维护者列在源代码树中的 MAINTAINERS 文件里。

主机托管由 telepoint.bg 提供