目录
- 1 描述
- 2 编解码器选项
- 3 解码器
- 4 视频解码器
- 5 音频解码器
- 6 字幕解码器
- 7 编码器
- 8 音频编码器
- 9 视频编码器
- 9.1 a64_multi, a64_multi5
- 9.2 Cinepak
- 9.3 GIF
- 9.4 Hap
- 9.5 jpeg2000
- 9.6 librav1e
- 9.7 libaom-av1
- 9.8 libsvtav1
- 9.9 libjxl
- 9.10 libkvazaar
- 9.11 libopenh264
- 9.12 libtheora
- 9.13 libvpx
- 9.14 libvvenc
- 9.15 libwebp
- 9.16 libx264, libx264rgb
- 9.17 libx265
- 9.18 libxavs2
- 9.19 libxeve
- 9.20 libxvid
- 9.21 MediaFoundation
- 9.22 Microsoft RLE
- 9.23 mpeg2
- 9.24 png
- 9.25 ProRes
- 9.26 QSV 编码器
- 9.27 snow
- 9.28 VAAPI 编码器
- 9.29 vbn
- 9.30 vc2
- 10 字幕编码器
- 11 另请参阅
- 12 作者
1 描述
本文档描述了 libavcodec 库提供的编解码器(解码器和编码器)。
2 编解码器选项
libavcodec 提供了一些通用的全局选项,可以在所有编码器和解码器上设置。此外,每个编解码器可能支持所谓的私有选项,这些选项是特定于给定编解码器的。
有时,全局选项可能只会影响特定类型的编解码器,并且对于另一个编解码器可能是无意义的或被忽略的,因此您需要了解指定选项的含义。此外,某些选项仅用于解码或编码。
可以通过在 FFmpeg 工具中指定 -选项 值,或者通过在 AVCodecContext
选项中显式设置值,或者使用 libavutil/opt.h API 进行编程使用来设置选项。
支持的选项列表如下
- b 整数 (编码、音频、视频)
设置比特率,单位为位/秒。默认值为 200K。
- ab 整数 (编码、音频)
设置音频比特率(单位为位/秒)。默认值为 128K。
- bt 整数 (编码、视频)
设置视频比特率容差(单位为位/秒)。在 1-pass 模式下,比特率容差指定码率控制愿意偏离目标平均比特率值的程度。这与最小/最大比特率无关。过低地降低容差会对质量产生不利影响。
- flags 标志 (解码/编码、音频、视频、字幕)
设置通用标志。
可能的值
- ‘mv4’
使用每个宏块四个运动矢量 (mpeg4)。
- ‘qpel’
使用 1/4 像素运动补偿。
- ‘loop’
使用循环滤波器。
- ‘qscale’
使用固定 qscale。
- ‘pass1’
在第一遍模式下使用内部 2pass 码率控制。
- ‘pass2’
在第二遍模式下使用内部 2pass 码率控制。
- ‘gray’
仅解码/编码灰度。
- ‘psnr’
在编码期间设置 error[?] 变量。
- ‘truncated’
输入比特流可能被随机截断。
- ‘drop_changed’
不要输出参数与流中第一个解码帧不同的帧。当丢弃帧时,会返回错误 AVERROR_INPUT_CHANGED。
- ‘ildct’
使用隔行 DCT。
- ‘low_delay’
强制低延迟。
- ‘global_header’
将全局头信息放在 extradata 中,而不是每个关键帧中。
- ‘bitexact’
只写入与平台、构建和时间无关的数据(除了 (I)DCT)。这确保文件和数据校验和在不同平台之间是可重现和匹配的。它的主要用途是进行回归测试。
- ‘aic’
应用 H263 高级帧内编码 / mpeg4 AC 预测。
- ‘ilme’
应用隔行运动估计。
- ‘cgop’
使用闭合 GOP。
- ‘output_corrupt’
输出即使可能损坏的帧。
- time_base 有理数
设置编解码器时间基准。
它是表示帧时间戳的基本时间单位(以秒为单位)。对于固定帧率的内容,timebase 应为
1 / frame_rate
,时间戳增量应始终为 1。- g 整数 (编码,视频)
设置图像组(GOP)大小。默认值为 12。
- ar 整数 (解码/编码,音频)
设置音频采样率(以 Hz 为单位)。
- 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 帧之间的 qp 因子。
- codec_tag 整数
- bug 标志 (解码,视频)
解决无法自动检测到的编码器错误。
可能的值
- ‘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 损坏解码器中的各种错误。
- ‘trunc’
截断帧
- strict 整数 (解码/编码,音频,视频)
指定严格遵守标准的程度。
可能的值
- ‘very’
严格遵守旧版本的更严格规范或参考软件
- ‘strict’
严格遵守规范中的所有内容,无论后果如何
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准化的实验性内容、实验性(未完成/正在进行中/未经良好测试)的解码器和编码器。注意:实验性解码器可能存在安全风险,不要将其用于解码不受信任的输入。
- b_qoffset 浮点数 (编码,视频)
设置 P 帧和 B 帧之间的 QP 偏移。
- 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 帧之间的 QP 因子。
- i_qoffset 浮点数 (编码,视频)
设置 P 帧和 I 帧之间的 QP 偏移。
- dct 整数 (编码,视频)
设置 DCT 算法。
可能的值
- ‘auto’
自动选择一个好的算法(默认)
- ‘fastint’
快速整数
- ‘int’
精确整数
- ‘mmx’
- ‘altivec’
- ‘faan’
浮点 AAN DCT
- lumi_mask 浮点数 (编码,视频)
对明亮区域的压缩力度强于中等区域。
- tcplx_mask 浮点数 (编码,视频)
设置时间复杂度掩蔽。
- scplx_mask 浮点数 (编码,视频)
设置空间复杂度掩蔽。
- p_mask 浮点数 (编码,视频)
设置帧间掩蔽。
- dark_mask 浮点数 (编码,视频)
对深色区域的压缩强度大于中间区域。
- idct 整数 (解码/编码,视频)
选择 IDCT 实现。
可能的值
- ‘auto’
- ‘int’
- ‘simple’
- ‘simplemmx’
- ‘simpleauto’
自动选择与 simple 兼容的 IDCT
- ‘arm’
- ‘altivec’
- ‘sh4’
- ‘simplearm’
- ‘simplearmv5te’
- ‘simplearmv6’
- ‘simpleneon’
- ‘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’
- ‘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’
- ‘chroma’
- subcmp 整数 (编码,视频)
设置亚像素运动估计比较函数。
可能的值
- ‘sad’
绝对差之和,快速 (默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和 (避免使用,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保留平方差之和
- ‘w53’
5/3 小波,仅在 snow 中使用
- ‘w97’
9/7 小波,仅在 snow 中使用
- ‘dctmax’
- ‘chroma’
- mbcmp 整数 (编码,视频)
设置宏块比较函数。
可能的值
- ‘sad’
绝对差之和,快速 (默认)
- ‘sse’
平方误差之和
- ‘satd’
绝对哈达玛变换差之和
- ‘dct’
绝对 DCT 变换差之和
- ‘psnr’
平方量化误差之和 (避免使用,质量低)
- ‘bit’
块所需的比特数
- ‘rd’
率失真最优,慢
- ‘zero’
0
- ‘vsad’
绝对垂直差之和
- ‘vsse’
平方垂直差之和
- ‘nsse’
噪声保留平方差之和
- ‘w53’
5/3 小波,仅在 snow 中使用
- ‘w97’
9/7 小波,仅在 snow 中使用
- ‘dctmax’
- ‘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’
- ‘chroma’
- dia_size 整数 (编码,视频)
设置运动估计的菱形类型和大小。
- ‘(1024, INT_MAX)’
全运动估计 (最慢)
- ‘(768, 1024]’
umh 运动估计
- ‘(512, 768]’
hex 运动估计
- ‘(256, 512]’
l2s 菱形运动估计
- ‘[2,256]’
var 菱形运动估计
- ‘(-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’
- ‘chroma’
- pre_dia_size 整数 (编码,视频)
设置运动估计预处理的菱形类型和大小。
- subq 整数 (编码,视频)
设置亚像素运动估计质量。
- me_range 整数 (编码,视频)
设置限制运动矢量范围 (DivX 播放器为 1023)。
- global_quality 整数 (编码,音频,视频)
- slice_flags 整数
- mbd 整数 (编码,视频)
设置宏块决策算法 (高质量模式)。
可能的值
- ‘simple’
使用 mbcmp (默认)
- ‘bits’
使用最少的比特数
- ‘rd’
使用最佳率失真
- rc_init_occupancy 整数 (编码,视频)
设置在解码开始之前应加载到 rc 缓冲区中的比特数。
- flags2 标志 (解码/编码,音频,视频,字幕)
-
可能的值
- ‘fast’
允许不符合规范的加速技巧。
- ‘noout’
跳过比特流编码。
- ‘ignorecrop’
忽略 sps 中的裁剪信息。
- ‘local_header’
将全局标头放置在每个关键帧,而不是在 extradata 中。
- ‘chunks’
帧数据可能会分成多个块。
- ‘showall’
显示第一个关键帧之前的所有帧。
- ‘export_mvs’
将运动矢量导出到帧边数据 (请参阅
AV_FRAME_DATA_MOTION_VECTORS
),用于支持此功能的编解码器。另请参阅 doc/examples/export_mvs.c。- ‘skip_manual’
不要跳过采样并以帧边数据的形式导出跳过信息。
- ‘ass_ro_flush_noop’
在刷新时不要重置 ASS ReadOrder 字段。
- ‘icc_profiles’
从/向颜色标签生成/解析嵌入式 ICC 配置文件。
- export_side_data 标志 (解码/编码,音频,视频,字幕)
-
可能的值
- ‘mvs’
将运动矢量导出到帧边数据 (请参阅
AV_FRAME_DATA_MOTION_VECTORS
),用于支持此功能的编解码器。另请参阅 doc/examples/export_mvs.c。- ‘prft’
将编码器 Producer Reference Time 导出到数据包边数据 (请参阅
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 整数 (解码/编码,视频)
如果所选编解码器实现支持多线程,则设置要使用的线程数。
可能的值
- ‘auto, 0’
自动选择要设置的线程数
默认值为 ‘auto’。
- dc 整数 (编码,视频)
设置 intra_dc_precision。
- nssew 整数 (编码,视频)
设置 nsse 权重。
- skip_top 整数 (解码,视频)
设置要跳过的顶部宏块行数。
- skip_bottom 整数 (解码,视频)
设置要跳过的底部宏块行数。
- profile 整数 (编码,音频,视频)
-
设置编码器编解码器配置文件。默认值为 ‘unknown’。编码器特定的配置文件在相关的编码器文档中说明。
- level 整数 (编码,音频,视频)
-
设置编码器级别。此级别取决于特定的编解码器,并且可能对应于配置文件级别。默认设置为“unknown”。
可能的值
- “unknown”
- lowres integer (解码,音频,视频)
以 1= 1/2、2=1/4、3=1/8 的分辨率解码。
- mblmin integer (编码,视频)
设置最小宏块拉格朗日因子 (VBR)。
- mblmax integer (编码,视频)
设置最大宏块拉格朗日因子 (VBR)。
- skip_loop_filter integer (解码,视频)
- skip_idct integer (解码,视频)
- skip_frame integer (解码,视频)
-
使解码器根据选项值选择的帧类型丢弃处理。
skip_loop_filter 跳过帧循环滤波, skip_idct 跳过帧 IDCT/反量化, skip_frame 跳过解码。
可能的值
- “none”
不丢弃任何帧。
- “default”
丢弃无用帧,例如大小为 0 的帧。
- “noref”
丢弃所有非参考帧。
- “bidir”
丢弃所有双向帧。
- “nokey”
丢弃除关键帧之外的所有帧。
- “nointra”
丢弃除 I 帧之外的所有帧。
- “all”
丢弃所有帧。
默认值为“default”。
- bidir_refine integer (编码,视频)
优化双向宏块中使用的两个运动矢量。
- keyint_min integer (编码,视频)
设置 IDR 帧之间的最小间隔。
- refs integer (编码,视频)
设置用于运动补偿的参考帧。
- trellis integer (编码,音频,视频)
设置率失真最优量化。
- mv0_threshold integer (编码,视频)
- compression_level integer (编码,音频,视频)
- bits_per_raw_sample integer
- channel_layout integer (解码/编码,音频)
有关所需语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的“通道布局”部分。
- rc_max_vbv_use float (编码,视频)
- rc_min_vbv_use float (编码,视频)
- color_primaries integer (解码/编码,视频)
可能的值
- “bt709”
BT.709
- “bt470m”
BT.470 M
- “bt470bg”
BT.470 BG
- “smpte170m”
SMPTE 170 M
- “smpte240m”
SMPTE 240 M
- “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 (解码/编码,视频)
可能的值
- “bt709”
BT.709
- “gamma22”
BT.470 M
- “gamma28”
BT.470 BG
- “smpte170m”
SMPTE 170 M
- “smpte240m”
SMPTE 240 M
- “linear”
线性
- “log”
- “log100”
对数
- “log_sqrt”
- “log316”
对数平方根
- “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 integer (解码/编码,视频)
可能的值
- “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 integer (解码/编码,视频)
如果用作输入参数,它将作为解码器的提示,指示输入具有的 color_range。可能的值
- “tv”
- “mpeg”
- “limited”
MPEG (219*2^(n-8))
- “pc”
- “jpeg”
- “full”
JPEG (2^n-1)
- chroma_sample_location integer (解码/编码,视频)
可能的值
- “left”
- “center”
- “topleft”
- “top”
- “bottomleft”
- “bottom”
- log_level_offset integer
设置日志级别偏移。
- slices integer (编码,视频)
切片的数量,用于并行编码。
- thread_type flags (解码/编码,视频)
选择要使用的多线程方法。
使用“frame”将使每个线程的解码延迟增加一帧,因此无法提供未来帧的客户端不应使用它。
可能的值
- “slice”
一次解码单个帧的多个部分。
仅当视频使用切片进行编码时,使用切片的多线程才起作用。
- “frame”
一次解码多个帧。
默认值为“slice+frame”。
- audio_service_type integer (编码,音频)
设置音频服务类型。
可能的值
- “ma”
主要音频服务
- “ef”
效果
- “vi”
视觉障碍
- “hi”
听力障碍
- “di”
对话
- “co”
评论
- “em”
紧急
- “vo”
画外音
- “ka”
卡拉 OK
- request_sample_fmt sample_fmt (解码,音频)
设置音频解码器应首选的采样格式。默认值为
none
。- pkt_timebase 有理数
- sub_charenc encoding (解码,字幕)
设置输入字幕字符编码。
- field_order field_order (视频)
设置/覆盖视频的场序。可能的值
- “progressive”
逐行扫描视频
- “tt”
隔行扫描视频,顶场先编码和显示
- “bb”
隔行扫描视频,底场先编码和显示
- “tb”
隔行扫描视频,顶场先编码,底场先显示
- “bt”
隔行扫描视频,底场先编码,顶场先显示
- skip_alpha bool (解码,视频)
设置为 1 以禁用处理 alpha(透明度)。这类似于 flags 选项中的“gray”标志,它跳过色度信息而不是 alpha。默认值为 0。
- codec_whitelist list (输入)
以“,”分隔的允许的解码器列表。默认情况下,允许所有解码器。
- dump_separator string (输入)
用于分隔命令行上打印的有关流参数的字段的分隔符。例如,要使用换行符和缩进分隔字段
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_pixels integer (解码/编码,视频)
每个图像的最大像素数。此值可用于避免因大图像而导致的内存不足错误。
- apply_cropping bool (解码,视频)
如果裁剪参数是左侧和顶部参数所需对齐的倍数,则启用裁剪。如果不满足对齐,则将部分应用裁剪以保持对齐。默认值为 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
CLI 工具,则应使用其手册中记录的视角说明符,而不是此处记录的选项。
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
eXtra-fast Essential Video Decoder (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 解码器
Intel 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_hw’
- load_plugins
要在内部会话中加载的十六进制插件 UID 的 :-分隔列表
4.9 v210
未压缩的 4:2:2 10 位解码器。
4.9.1 选项
- custom_stride
设置 v210 数据行的字节大小。默认值为 0(自动检测)。您可以将特殊值 -1 用于 BOXX 文件中看到的无步幅 v210。
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。响亮的声音被完全压缩。柔和的声音被增强。
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 和 Microsoft 变体。
5.6 libilbc
libilbc 解码器包装器。
libilbc 允许 libavcodec 解码 Internet 低比特率编解码器 (iLBC) 音频编解码器。配置期间需要 libilbc 头文件和库。您需要使用 --enable-libilbc
显式配置构建。
5.6.1 选项
libilbc 包装器支持以下选项。
- enhance
-
设置为 1 时,启用解码音频的增强。默认值为 0(禁用)。
5.7 libopencore-amrnb
libopencore-amrnb 解码器包装器。
libopencore-amrnb 允许 libavcodec 解码自适应多速率窄带音频编解码器。使用它需要配置期间存在 libopencore-amrnb 头文件和库。您需要使用 --enable-libopencore-amrnb
显式配置构建。
存在一个 FFmpeg 原生 AMR-NB 解码器,因此用户无需此库即可解码 AMR-NB。
5.8 libopencore-amrwb
libopencore-amrwb 解码器包装器。
libopencore-amrwb 允许 libavcodec 解码自适应多速率宽带音频编解码器。使用它需要配置期间存在 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
告知解码器包装器跳过包含半高 ruby 文本的文本块。
默认启用。
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’
没有格式的简单文本输出。
默认值与 libaribb24 解码器相同,为 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 中定义的拉丁字符编码。这种编码在南美洲用于 SBTVD / ISDB-Tb 字幕。
- -font font_name[,font_name2,...]
指定用于 bitmap 或 ass 类型字幕渲染的逗号分隔的字体系列名称列表。只有第一个字体名称用于 ass 类型字幕。
如果未指定,则使用内部定义的默认字体系列。
- -ass_single_rect boolean
ARIB STD-B24 规定,一些字幕可以同时在不同的位置显示(多矩形字幕)。由于一些播放器(例如,旧的 mpv)无法处理单个 AVSubtitle 中的多个 ASS 矩形,或者具有相同起始时间戳的多个不确定持续时间的 ASS 矩形,因此此选项可以更改行为,以便所有文本都显示在单个 ASS 矩形中。
默认值为 false。
如果您的播放器无法正确处理具有多个 ASS 矩形的 AVSubtitles,请将此选项设置为 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 式(furigana)字符的渲染。
默认值为 false。
- -replace_drcs boolean
指定是否将替换的 DRCS 字符渲染为 Unicode 字符。
默认值为 true。
- -replace_msz_ascii boolean
指定是否将 MSZ(中等大小;半宽)全角字母数字字符替换为半角字母数字字符。
默认值为 true。
- -replace_msz_japanese boolean
指定是否将一些 MSZ(中等大小;半宽)全角日文特殊字符替换为半角字符。
默认值为 true。
- -replace_msz_glyph boolean
指定如果字体支持,是否将 MSZ(中等大小;半宽)字符替换为半宽字形。此选项适用于使用 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 解码器假设用于位图渲染的输入帧大小如下
- 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 文件
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
此编解码器解码 DVD 中使用的位图字幕;相同的字幕也可以在 VobSub 文件对和某些 Matroska 文件中找到。
6.4.1 选项
- palette
指定位图使用的全局调色板。当存储在 VobSub 中时,调色板通常在索引文件中指定;在 Matroska 中,调色板以与 VobSub 相同的格式存储在编解码器额外数据中。在 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
仅解码标记为强制的字幕条目。一些标题在同一轨道中包含强制字幕和非强制字幕。将此标志设置为
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) 编码器。
此编码器是默认的 AAC 编码器,在 FFmpeg 中本地实现。
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) 基于格栅的解决方案。
这是一个实验性编码器,目前产生较低的质量,更不稳定,并且比默认的 twoloop 编码器慢,但具有潜力。目前不支持 aac_is 或 aac_pns 选项。目前不推荐使用。
- ‘fast’
恒定量化器方法。
使用 twoloop 算法的较便宜版本,该版本不会尝试进行太多巧妙的调整。在低比特率(低于 64kbps)时较差,但在较高比特率时更好,速度更快。
- aac_ms
设置中/侧编码模式。“auto”的默认值将自动对将从这种编码中受益的频带使用 M/S。可以使用值“enable”强制用于所有频带,这主要用于调试或使用“disable”禁用。
- aac_is
设置强度立体声编码工具的使用。默认情况下,它是启用的,并且如果对相似的立体声频带有利,它将自动切换 IS。可以通过将值设置为“disable”来禁用以进行调试。
- aac_pns
使用感知噪声替换在解码过程中用无法察觉的白噪声替换低熵高频频带。默认情况下,它是启用的,但可以通过使用“disable”禁用以进行调试。
- aac_tns
启用使用贯穿高频频段的多抽头 FIR 滤波器,以在编码过程中隐藏量化噪声,并在解码器中恢复。除了减少高频范围内的不愉快伪像之外,这还可以减少高频频带中的熵,并允许更多位用于中低频带。默认情况下,它是启用的,但可以通过将选项设置为“disable”来禁用以进行调试。
- aac_ltp
启用长期预测扩展的使用,通过扩展整个帧中频带中的恒定谐波峰值,从而提高非常低的带宽情况下的编码效率,例如语音或独奏钢琴音乐的编码。此选项由配置文件:a aac_low 暗示,并且与 aac_pred 不兼容。与 -ar 结合使用可降低采样率。
- aac_pred
启用更传统的预测方式,即将传输的频谱系数替换为当前系数减去先前“预测”系数的差值。理论上,有时在实践中,这可以提高中低比特率音频的质量。此选项暗示使用 aac_main 配置文件,并且与 aac_ltp 不兼容。
- profile
设置编码配置文件,可能的值有
- ‘aac_low’
默认值,AAC“低复杂度”配置文件。兼容性最好,并且产生不错的质量。
- ‘mpeg2_aac_low’
等同于
-profile:a aac_low -aac_pns 0
。PNS 是随 MPEG4 规范引入的。- ‘aac_ltp’
长期预测配置文件,由 aac_ltp 选项启用并将启用该选项。在 MPEG4 中引入。
- ‘aac_main’
主要类型预测配置文件,由 aac_pred 选项启用并将启用该选项。在 MPEG2 中引入。
如果未指定此选项,则设置为 ‘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 元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。某些选项会直接影响或影响解码和播放生成的比特流,而另一些选项仅用于提供信息。一些选项会在输出流中添加原本可用于音频数据的比特,从而影响输出的质量。这些选项将在下面的选项列表中相应地标明。
这些参数在多个公开可用的文档中进行了详细描述。
8.2.1.1 元数据控制选项
- -per_frame_metadata 布尔值
允许每帧元数据。指定编码器是否应检查每帧的元数据变化。
- 0
在初始化时设置的元数据值将用于流中的每一帧。(默认)
- 1
可以在编码每一帧之前更改元数据值。
8.2.1.2 降混音电平
- -center_mixlev 级别
中心混合级别。解码器在下混为立体声时应应用于中心声道的增益量。只有存在中心声道时,此字段才会写入比特流。该值指定为比例因子。有 3 个有效值
- 0.707
应用 -3dB 增益
- 0.595
应用 -4.5dB 增益(默认)
- 0.500
应用 -6dB 增益
- -surround_mixlev 级别
环绕混合级别。解码器在下混为立体声时应应用于环绕声道的增益量。只有存在一个或多个环绕声道时,此字段才会写入比特流。该值指定为比例因子。有 3 个有效值
- 0.707
应用 -3dB 增益
- 0.500
应用 -6dB 增益(默认)
- 0.000
静音环绕声道
8.2.1.3 音频制作信息
音频制作信息是描述混音环境的可选信息。将不写入任何字段或两个字段都写入比特流。
- -mixing_level 数字
混音级别。指定混音制作完成后,制作环境中峰值声压级 (SPL)。有效值为 80 到 111,或 -1 表示未知或未指示。默认值为 -1,但如果将音频制作信息写入比特流,则不能使用该值。因此,如果
room_type
选项不是默认值,则mixing_level
选项不得为 -1。- -room_type 类型
房间类型。描述在工作室或配音阶段的最终混音过程中使用的均衡。大型房间是具有行业标准 X 曲线均衡的配音阶段;小型房间具有平坦的均衡。如果
mixing_level
选项和room_type
选项都具有默认值,则此字段不会写入比特流。- 0
- notindicated
未指示(默认)
- 1
- large
大型房间
- 2
- small
小型房间
8.2.1.4 其他元数据选项
- -copyright 布尔值
版权指示符。指定此音频是否存在版权。
- 0
- off
不存在版权(默认)
- 1
- on
存在版权
- -dialnorm 值
对话归一化。指示程序的平均对话级别低于数字 100% 满量程 (0 dBFS) 的程度。此参数确定音频再现期间的电平偏移,该偏移将对话的平均音量设置为预设级别。目的是匹配节目源之间的音量级别。值 -31dB 将导致音频再现期间的音量级别相对于源音量没有变化。有效值是范围 -31 到 -1 中的整数,其中 -31 是默认值。
- -dsur_mode 模式
杜比环绕声模式。指定立体声信号是否使用杜比环绕声(Pro Logic)。只有当音频流是立体声时,此字段才会写入比特流。使用此选项不意味着编码器将实际应用杜比环绕声处理。
- 0
- notindicated
未指示(默认)
- 1
- off
未编码杜比环绕声
- 2
- on
已编码杜比环绕声
- -original 布尔值
原始比特流指示符。指定此音频是否来自原始来源而不是副本。
- 0
- off
非原始来源
- 1
- on
原始来源(默认)
8.2.2 扩展比特流信息
扩展比特流选项是 A/52:2010 标准附件 D 中指定的备用比特流语法的一部分。它分为 2 部分。如果指定了组中的任何一个参数,则该组中的所有值都将写入比特流。默认值用于已写入但未指定的值。如果写入了混音级别,则解码器将使用这些值,而不是 center_mixlev
和 surround_mixlev
选项中指定的值(如果它支持备用比特流语法)。
8.2.2.1 扩展比特流信息 - 第 1 部分
- -dmix_mode 模式
首选立体声下混模式。允许用户选择 Lt/Rt(杜比环绕声)或 Lo/Ro(普通立体声)作为首选立体声下混模式。
- 0
- notindicated
未指示(默认)
- 1
- ltrt
首选 Lt/Rt 下混
- 2
- loro
首选 Lo/Ro 下混
- -ltrt_cmixlev 级别
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 级别
Lt/Rt 环绕混合级别。解码器在 Lt/Rt 模式下下混为立体声时应应用于环绕声道的增益量。
- 0.841
应用 -1.5dB 增益
- 0.707
应用 -3.0dB 增益
- 0.595
应用 -4.5dB 增益
- 0.500
应用 -6.0dB 增益(默认)
- 0.000
静音环绕声道
- -loro_cmixlev 级别
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 级别
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 扩展比特流信息 - 第 2 部分
- -dsurex_mode 模式
杜比环绕 EX 模式。指示流是否使用杜比环绕 EX(7.1 矩阵化为 5.1)。使用此选项不意味着编码器将实际应用杜比环绕 EX 处理。
- 0
- notindicated
未指示(默认)
- 1
- on
杜比环绕 EX 关闭
- 2
- off
杜比环绕 EX 开启
- -dheadphone_mode 模式
杜比耳机模式。指示流是否使用杜比耳机编码(多声道矩阵化为 2.0,用于耳机)。使用此选项不表示编码器将实际应用杜比耳机处理。
- 0
- notindicated
未指示(默认)
- 1
- on
杜比耳机关闭
- 2
- off
杜比耳机开启
- -ad_conv_type 类型
模数转换器类型。指示音频是否已通过 HDCD 模数转换。
- 0
- standard
标准模数转换器(默认)
- 1
- hdcd
HDCD 模数转换器
8.2.3 其他 AC-3 编码选项
- -stereo_rematrixing 布尔值
立体声重矩阵化。启用/禁用对立体声输入使用重矩阵化。这是一个可选的 AC-3 功能,通过选择性地将左/右声道编码为中/侧来提高质量。默认情况下启用此选项,强烈建议保持启用状态,除非用于测试目的。
- cutoff 频率
设置低通截止频率。如果未指定,编码器会根据其他各种编码参数选择默认值。
8.2.4 仅限浮点 AC-3 编码选项
这些选项仅对浮点编码器有效,并且由于相应的功能未在定点中实现,因此对定点编码器不存在。
- -channel_coupling 布尔值
启用/禁用通道耦合的使用,这是一个可选的 AC-3 功能,通过将多个通道的高频信息组合到一个通道中来提高质量。每个通道的高频信息在频率和时域上的精度都较低。这允许使用更多比特用于较低频率,同时保留足够的信息来重建高频。默认情况下,对于浮点编码器启用此选项,通常应保持启用状态,除非用于测试目的或提高编码速度。
- -1
- auto
由编码器选择(默认)
- 0
- off
禁用通道耦合
- 1
- on
启用通道耦合
- -cpl_start_band 数字
耦合起始频带。设置通道耦合起始频带,从 1 到 15。如果使用高于带宽的值,它将减小到小于耦合结束频带 1 的值。如果使用 auto,起始频带将由编码器根据比特率、采样率和通道布局确定。如果禁用通道耦合,则此选项无效。
- -1
- auto
由编码器选择(默认)
8.3 ffv1
FFv1 编码器
8.3.1 选项
FFmpeg 的 FFv1 编码器支持以下选项。
- context
设置上下文大小,0(默认)为小,1 为大。
- coder
设置编码器,
- ‘rice’
Golomb rice 编码器
- ‘range_def’
带有默认表的范围编码器
- ‘range_tab’
带有自定义表的范围编码器
- slicecrc
-1(默认,自动),1 使用带有零初始状态和最终状态的 crc,2 使用带有非零初始状态和最终状态的 crc
- qtable
- “default”
默认,自动
- ‘8bit’
使用 8 位默认值
- ‘greater8bit’
使用 >8 位默认值
8.4 flac
FLAC (无损音频编解码器) 编码器
8.4.1 选项
FFmpeg 的 flac 编码器支持以下选项。
- 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
多维量化。如果设置为 1,则在第一阶段之后应用第二阶段 LPC 算法以微调系数。这非常慢,但会稍微提高压缩率。
8.5 opus
Opus 编码器。
这是 Opus 格式的本机 FFmpeg 编码器。目前,它正在开发中,仅实现了编解码器的 CELT 部分。它的质量通常较差,最多与 libopus 编码器相同。
8.5.1 选项
- b
以比特/秒为单位设置比特率。如果未指定,它会使用通道数和布局来做出很好的猜测。
- opus_delay
设置最大延迟,以毫秒为单位。低于 20 毫秒的延迟会迅速降低质量。
8.6 libfdk_aac
libfdk-aac AAC(高级音频编码)编码器封装。
libfdk-aac 库基于 Android 项目中的 Fraunhofer 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.6.1 选项
以下选项映射到共享的 FFmpeg 编解码器选项。
- b
以比特/秒为单位设置比特率。如果未显式指定比特率,则会根据所选的配置文件自动设置为合适的值。
如果启用了 VBR 模式,则忽略该选项。
- ar
设置音频采样率(以 Hz 为单位)。
- channels
设置音频通道的数量。
- flags +qscale
启用固定质量 VBR(可变比特率)模式。请注意,当 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,则启用 afterburner 功能,如果设置为 0,则禁用。这提高了质量,但同时也提高了所需的处理能力。
默认值为 1。
- eld_sbr
如果设置为 1,则为 ELD 启用 SBR(频谱带复制),如果设置为 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”
隐式选择信令(默认情况下为显式分层,如果禁用全局头则为隐式)
- “implicit”
隐式向后兼容信令
- “explicit_sbr”
显式 SBR,隐式 PS 信令
- “explicit_hierarchical”
显式分层信令
默认值为“default”。
- latm
如果设置为 1,则输出 LATM/LOAS 封装的数据;如果设置为 0,则禁用。
默认值为 0。
- header_period
设置 StreamMuxConfig 和 PCE 重复周期(以帧为单位),以便在 LATM/LOAS 传输层内发送带内配置缓冲区。
必须是 16 位非负整数。
默认值为 0。
- vbr
设置 VBR 模式,从 1 到 5。1 是最低质量(尽管仍然相当不错),而 5 是最高质量。值为 0 将禁用 VBR,并启用 CBR(恒定比特率)。
目前只有“aac_low”配置文件支持 VBR 编码。
VBR 模式 1-5 大致对应于以下平均比特率:
- “1”
32 kbps/通道
- “2”
40 kbps/通道
- “3”
48-56 kbps/通道
- “4”
64 kbps/通道
- “5”
大约 80-96 kbps/通道
默认值为 0。
- frame_length
设置音频帧长度,以采样数为单位。默认值是库的内部默认值。有关支持的值的信息,请参阅库的文档。
8.6.2 示例
- 使用
ffmpeg
将音频文件转换为 M4A (MP4) 容器中的 VBR AACffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
- 使用
ffmpeg
将音频文件转换为 CBR 64k kbps AAC,使用高效率 AAC 配置文件ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
8.7 liblc3
liblc3 LC3(低复杂度通信编解码器)编码器封装器。
在配置期间需要存在 liblc3 头文件和库。您需要使用 --enable-liblc3
显式配置构建。
此编码器支持 LE Audio 协议的蓝牙 SIG LC3 编解码器,以及 LC3plus 的以下功能:
- 2.5 毫秒和 5 毫秒的帧持续时间。
- 高分辨率模式,48 KHz 和 96 kHz 采样率。
有关更多信息,请参阅 liblc3 项目,网址为 https://github.com/google/liblc3。
8.7.1 选项
以下选项映射到共享的 FFmpeg 编解码器选项。
- b 比特率
设置比特率,以比特/秒为单位。这将决定编码帧的固定大小,对于选定的帧持续时间。
- ar 频率
设置音频采样率(以 Hz 为单位)。
- channels
设置音频通道的数量。
- frame_duration
设置音频帧持续时间,以毫秒为单位。默认值为 10 毫秒。允许的帧持续时间为 2.5 毫秒、5 毫秒、7.5 毫秒和 10 毫秒。LC3(蓝牙 LE 音频)允许 7.5 毫秒和 10 毫秒;而 LC3plus 允许 2.5 毫秒、5 毫秒和 10 毫秒。
10 毫秒的帧持续时间在 LC3 和 LC3plus 标准中都可用。在此模式下,生成的比特流可以被引用为 LC3 或 LC3plus。
- high_resolution 布尔值
如果设置为 1,则启用高分辨率模式。高分辨率模式适用于所有 LC3plus 帧持续时间,以及 48 KHz 和 96 KHz 的采样率。
编码器会自动在较低的采样率下关闭此模式,并在 96 KHz 时激活它。
在高比特率下,应首选此模式。在此模式下,音频带宽始终高达奈奎斯特频率,而 48 KHz 的 LC3 将带宽限制为 20 KHz。
8.8 libmp3lame
LAME (Lame Ain’t an MP3 Encoder) MP3 编码器封装器。
在配置期间需要存在 libmp3lame 头文件和库。您需要使用 --enable-libmp3lame
显式配置构建。
有关固定点 MP3 编码器,请参阅 libshine,尽管质量较低。
8.8.1 选项
libmp3lame 封装器支持以下选项。选项的 lame
等效项列在括号中。
- b (-b)
设置 CBR 或 ABR 的比特率,以比特/秒为单位表示。LAME
比特率
以千比特/秒为单位表示。- q (-V)
设置 VBR 的恒定质量设置。此选项仅在使用
ffmpeg
命令行工具时有效。对于库接口用户,请使用 global_quality。- compression_level (-q)
设置算法质量。有效参数是 0-9 范围内的整数,其中 0 表示最高质量但最慢,而 9 表示最快但产生最差的质量。
- cutoff (--lowpass)
设置低通截止频率。如果未指定,则编码器会动态调整截止频率。
- reservoir
设置为 1 时,启用位存储器的使用。默认值为 1。LAME 默认启用此功能,但可以使用 --nores 选项覆盖。
- joint_stereo (-m j)
启用编码器以(逐帧)使用 L/R 立体声或中/侧立体声。默认值为 1。
- abr (--abr)
设置为 1 时,启用编码器使用 ABR。
lame
--abr 设置目标比特率,而此选项仅告诉 FFmpeg 使用 ABR,仍然依赖于 b 来设置比特率。- copyright (-c)
设置为 1 时,设置 MPEG 音频版权标志。默认值为 0(禁用)。
- original (-o)
设置为 1 时,设置 MPEG 音频原始标志。默认值为 1(启用)。
8.9 libopencore-amrnb
OpenCORE 自适应多速率窄带编码器。
在配置期间需要存在 libopencore-amrnb 头文件和库。您需要使用 --enable-libopencore-amrnb --enable-version3
显式配置构建。
这是一个仅单声道的编码器。官方仅支持 8000Hz 采样率,但您可以通过将 strict 设置为“unofficial”或更低来覆盖它。
8.9.1 选项
- b
设置比特率,以比特/秒为单位。仅支持以下比特率,否则 libavcodec 将四舍五入到最近的有效比特率。
- 4750
- 5150
- 5900
- 6700
- 7400
- 7950
- 10200
- 12200
- dtx
设置为 1 时,允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。
8.10 libopus
libopus Opus 交互式音频编解码器编码器封装器。
在配置期间需要存在 libopus 头文件和库。您需要使用 --enable-libopus
显式配置构建。
8.10.1 选项映射
大多数 libopus 选项都以 opus-tools 中的 opusenc
实用程序为模型。以下是一个选项映射图表,描述了 libopus 封装器支持的选项,以及它们在括号中的 opusenc
等效项。
- b (bitrate)
设置比特率,以比特/秒为单位。FFmpeg 的 b 选项以比特/秒为单位表示,而
opusenc
的 bitrate 以千比特/秒为单位表示。- 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。较小的帧大小在给定的比特率下实现较低的延迟,但质量较差。大于 20 毫秒的大小仅在相当低的比特率下才有趣。默认值为 20 毫秒。
- packet_loss (expect-loss)
设置预期的丢包百分比。默认值为 0。
- fec (n/a)
启用带内前向纠错。packet_loss 必须为非零值才能利用 - FEC“辅助数据”的频率与预期的丢包成正比。默认情况下禁用。
- application (N.A.)
设置预期的应用程序类型。有效选项如下:
- “voip”
倾向于提高语音清晰度。
- “audio”
倾向于忠实于输入(默认值)。
- “lowdelay”
通过禁用语音优化模式,仅限使用最低延迟模式。
- 截止频率(N.A.)
设置截止带宽,单位为 Hz。参数必须是以下值之一:4000、6000、8000、12000 或 20000,分别对应窄带、中带、宽带、超宽带和全频带。默认值为 0(禁用截止频率)。请注意,除非使用仅 CELT 模式(application 设置为 ‘lowdelay’),否则对于比特率 < 15 kbps,libopus 会强制使用宽带截止频率。
- mapping_family(映射族)
设置编码器使用的通道映射族。默认值 -1 对于单声道和立体声输入使用映射族 0,否则使用映射族 1。默认值还会禁用 libopus 中的环绕声掩蔽和 LFE 带宽优化,并要求输入包含 8 个或更少的通道。
其他值包括 0(用于单声道和立体声)、1(用于具有掩蔽和 LFE 带宽优化的环绕声),以及 255(用于具有未指定通道布局的独立流)。
- apply_phase_inv(N.A.)(需要 libopus >= 1.2)
如果设置为 0,则禁用强度立体声的相位反转,从而提高单声道混音的质量,但略微降低正常的立体声质量。默认值为 1(启用相位反转)。
8.11 libshine
Shine 定点 MP3 编码器封装器。
Shine 是一款定点 MP3 编码器。它在没有 FPU 的平台上(例如 armel CPU,以及一些手机和平板电脑)具有更好的性能。但是,由于它更注重性能而非质量,因此在质量方面不如 LAME 和其他生产级编码器。此外,根据该项目的主页,该编码器可能并非没有 bug,因为代码是很久以前编写的,并且该项目已经停止至少 5 年了。
此编码器仅支持立体声和单声道输入。它也仅支持 CBR。
原始项目(上次更新于 2007 年初)位于 http://sourceforge.net/projects/libshine-fxp/。我们仅支持 Savonet/Liquidsoap 项目在 https://github.com/savonet/shine 上更新的分支。
需要在配置期间存在 libshine 头文件和库。您需要使用 --enable-libshine
显式配置构建。
另请参阅 libmp3lame。
8.11.1 选项
libshine 封装器支持以下选项。选项的 shineenc
等效项在括号中列出。
- b (-b)
设置 CBR 的比特率,单位为比特/秒。
shineenc
-b 选项以千比特/秒表示。
8.12 libtwolame
TwoLAME MP2 编码器封装器。
需要在配置期间存在 libtwolame 头文件和库。您需要使用 --enable-libtwolame
显式配置构建。
8.12.1 选项
libtwolame 封装器支持以下选项。twolame
等效选项遵循 FFmpeg 的选项,并在括号中列出。
- 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 之间的整数(包括 -1 和 4)。值越高,质量越好。默认值为 3。
- energy_levels (--energy)
设置为 1 时启用能量级别扩展。默认值为 0(禁用)。
- error_protection (--protect)
设置为 1 时启用 CRC 错误保护。默认值为 0(禁用)。
- copyright (--copyright)
设置为 1 时,设置 MPEG 音频版权标志。默认值为 0(禁用)。
- original (--original)
设置为 1 时设置 MPEG 音频原始标志。默认值为 0(禁用)。
8.13 libvo-amrwbenc
VisualOn 自适应多速率宽带编码器。
需要在配置期间存在 libvo-amrwbenc 头文件和库。您需要使用 --enable-libvo-amrwbenc --enable-version3
显式配置构建。
这是一个仅限单声道的编码器。官方只支持 16000Hz 采样率,但您可以通过将 strict 设置为 ‘unofficial’ 或更低来覆盖它。
8.13.1 选项
- b
设置比特率,单位为比特/秒。仅支持以下比特率,否则 libavcodec 会舍入到最接近的有效比特率。
- ‘6600’
- ‘8850’
- ‘12650’
- ‘14250’
- ‘15850’
- ‘18250’
- ‘19850’
- ‘23050’
- ‘23850’
- dtx
设置为 1 时,允许不连续传输(生成舒适噪声)。默认值为 0(禁用)。
8.14 libvorbis
libvorbis 编码器封装器。
需要在配置期间存在 libvorbisenc 头文件和库。您需要使用 --enable-libvorbis
显式配置构建。
8.14.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)
设置截止带宽,单位为 Hz,值为 0 时禁用截止频率。
oggenc
的相关选项以 kHz 表示。默认值为 ‘0’(禁用截止频率)。- minrate (-m)
设置最小比特率,单位为比特/秒。
oggenc
-m 以千比特/秒表示。- maxrate (-M)
设置最大比特率,单位为比特/秒。
oggenc
-M 以千比特/秒表示。这仅在 ABR 模式下有效。- iblock (--advanced-encode-option impulse_noisetune=N)
设置脉冲块的噪声基底偏差。该值是 -15.0 到 0.0 范围内的浮点数。负偏差指示编码器特别注意编码音频中瞬态的清晰度。更好瞬态响应的代价是更高的比特率。
8.15 mjpeg
Motion JPEG 编码器。
8.15.1 选项
- huffman
设置霍夫曼编码策略。可能的值
- “default”
使用默认的霍夫曼表。这是默认策略。
- ‘optimal’
计算并使用最佳霍夫曼表。
8.16 wavpack
WavPack 无损音频编码器。
8.16.1 选项
wavpack
命令行实用程序的等效选项在括号中列出。
8.16.1.1 共享选项
以下共享选项对此编码器有效。此处仅记录有关此特定编码器的特殊说明。有关选项的一般含义,请参阅 编解码器选项章节。
- frame_size (--blocksize)
对于此编码器,此选项的范围在 128 到 131072 之间。默认值根据采样率和通道数自动决定。
有关计算默认值的完整公式,请参阅 libavcodec/wavpackenc.c。
- compression_level (-f, -h, -hh, 和 -x)
8.16.1.2 私有选项
- joint_stereo (-j)
设置是否启用联合立体声。有效值如下:
- “on(1)”
强制使用中间/侧边音频编码。
- “off(0)”
强制使用左/右音频编码。
- ‘auto’
让编码器自动决定。
- optimize_mono
设置是否启用单声道优化。此选项仅对非单声道流有效。可用值:
- ‘on’
启用
- ‘off’
禁用
9 视频编码器
以下是一些当前可用的视频编码器的描述。
9.1 a64_multi, a64_multi5
A64 / Commodore 64 多色字符集编码器。a64_multi5
扩展了第 5 种颜色 (colram)。
9.2 Cinepak
Cinepak 又名 CVID 编码器。兼容 Windows 3.1 和老式 MacOS。
9.2.1 选项
- g 整数
关键帧间隔。至少每
-g
帧插入一个关键帧,有时会更早。- q:v 整数
质量因子。值越低越好。值越高,比特率越低。下表列出了使用
-g 100
对 akiyo_cif.y4m 进行编码时,-q:v
各种值的比特率:-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 整数
最大额外代码本重新计算次数,次数越多越好,速度越慢。
- skip_empty_cb 布尔值
避免浪费字节,忽略老式 MacOS 解码器。
- max_strips 整数
- min_strips 整数
要使用的最小和最大条带数。更宽的范围有时可以提高质量。更多的条带通常质量更好,但会消耗更多比特。更少的条带往往会产生更多的关键帧。老式兼容的范围是 1..3。
- strip_number_adaptivity 整数
允许条带数在帧之间变化的程度。值越高越好,但速度越慢。
9.3 GIF
GIF 图像/动画编码器。
9.3.1 选项
- gifflags 整数
设置用于 GIF 编码的标志。
- offsetting
启用图片偏移。
默认启用。
- transdiff
启用帧之间的透明度检测。
默认启用。
- gifimage 整数
启用每帧编码一个完整的 GIF 图像,而不是一个动画 GIF。
默认值为 0。
- global_palette 整数
在可行的情况下将调色板写入全局 GIF 标头。
如果禁用,即使提供了全局调色板,每帧也始终会写入调色板。
默认值为 1。
9.4 Hap
Vidvox Hap 视频编码器。
9.4.1 选项
- format 整数
指定要编码的 Hap 格式。
- hap
- hap_alpha
- hap_q
默认值为 hap。
- chunks 整数
指定要将帧分割成的块数,介于 1 和 64 之间。这允许对大型帧进行多线程解码,可能会以数据速率为代价。编码器可能会修改此值以均匀分割帧。
默认值为 1。
- compressor 整数
指定要使用的第二阶段压缩器。如果设置为 none,则 chunks 将限制为 1,因为分块的未压缩帧没有任何好处。
- none
- snappy
默认值为 snappy。
9.5 jpeg2000
默认情况下,原生 jpeg 2000 编码器是有损的,可以使用 -q:v
选项设置编码质量。可以使用 -pred 1
选择无损编码。
9.5.1 选项
- format 整数
可以设置为
j2k
或jp2
(默认值),这使得存储非 rgb pix_fmts 成为可能。- tile_width 整数
设置瓦片宽度。范围是 1 到 1073741824。默认值为 256。
- tile_height 整数
设置瓦片高度。范围是 1 到 1073741824。默认值为 256。
- pred 整数
允许设置离散小波变换 (DWT) 类型
- dwt97int (有损)
- dwt53 (无损)
默认值为
dwt97int
- sop 布尔值
启用此项可在每个数据包的开头添加 SOP 标记。默认情况下禁用。
- eph 布尔值
启用此项可在每个数据包标头的末尾添加 EPH 标记。默认情况下禁用。
- prog 整数
设置编码器使用的渐进顺序。可能的值为:
- lrcp
- rlcp
- rpcl
- pcrl
- cprl
默认设置为
lrcp
。- layer_rates 字符串
默认情况下,当不使用此选项时,压缩使用质量指标进行。此选项允许使用压缩比进行压缩。可以指定每个级别的压缩比。层
l
的压缩比指定前l
层中包含的总文件大小的比率。用法示例:
ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k
这将压缩图像以包含 3 层,其中第一层中包含的数据将被压缩 1000 倍,在前两层中压缩 100 倍,并且在使用所有 3 层时应包含所有数据。
9.6 librav1e
rav1e AV1 编码器包装器。
在配置期间需要存在 rav1e 标头和库。您需要使用 --enable-librav1e
显式配置构建。
9.6.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.7 libaom-av1
libaom AV1 编码器包装器。
在配置期间需要存在 libaom 标头和库。您需要使用 --enable-libaom
显式配置构建。
9.7.1 选项
包装器支持以下标准 libavcodec 选项:
- b
设置比特率目标(以比特/秒为单位)。默认情况下,这将使用可变比特率模式。如果 maxrate 和 minrate 也设置为相同的值,则将使用恒定比特率模式,否则,如果还设置了 crf,则将使用约束质量模式。
- g keyint_min
设置关键帧位置。GOP 大小设置关键帧之间的最大距离;如果为零,则输出流将仅包含帧内编码。最小距离将被忽略,除非它与 GOP 大小相同,在这种情况下,关键帧将始终以固定间隔出现。默认情况下未设置,因此如果没有此选项,库可以完全自由地选择放置关键帧的位置。
- qmin qmax
设置最小/最大量化值。有效范围为 0 到 63(警告:这与 AV1 实际使用的量化值不匹配 - 除以 4 以将实际量化值映射到此范围)。默认为最小/最大值(无约束)。
- minrate maxrate bufsize rc_init_occupancy
设置速率控制缓冲参数。如果未设置则不使用 - 默认为无约束可变比特率。
- threads
设置编码时使用的线程数。这可能需要同时设置 tiles 或 row-mt 选项才能充分利用指定的线程数。默认为主机支持的硬件线程数。
- profile
设置编码配置文件。默认为使用与输入位的深度和色度二次采样匹配的配置文件。
包装器还有一些特定的选项
- cpu-used
设置质量/编码速度的权衡。有效范围为 0 到 8,数值越高表示速度越快,质量越低。默认值为 1,这将是慢速和高质量的。
- auto-alt-ref
启用备用参考帧的使用。默认为库的内部默认值。
- arnr-max-frames (帧数)
设置备用参考帧降噪的最大帧计数。默认为 -1。
- arnr-strength (强度)
设置备用参考帧降噪滤波器的强度。范围是 -1 到 6。默认为 -1。
- aq-mode (aq-模式)
设置自适应量化模式。可能的值
- ‘none (0)’
禁用。
- ‘variance (1)’
基于方差。
- ‘complexity (2)’
基于复杂度。
- ‘cyclic (3)’
循环刷新。
- tune (调优)
设置编码器调整所使用的失真度量。默认为
psnr
。- ‘psnr (0)’
- ‘ssim (1)’
- lag-in-frames
设置编码器在任何给定时间为了前瞻目的可以保持在途的最大帧数。默认为库的内部默认值。
- error-resilience
启用错误恢复功能
- default
提高对整帧丢失的恢复能力。
默认情况下不启用。
- crf
设置恒定质量(无比特率目标)和约束质量(具有最大比特率目标)模式的质量/大小权衡。有效范围为 0 到 63,数值越高表示质量越低,输出大小越小。仅在设置时使用;默认情况下,仅使用比特率目标。
- static-thresh
设置块的更改阈值,低于此阈值的块将被编码器跳过。以任意单位定义为非负整数,默认为零(不跳过任何块)。
- drop-threshold
设置当接近速率控制边界时丢弃帧的阈值。定义为目标缓冲区的百分比 - 当速率控制缓冲区低于此百分比时,将丢弃帧,直到它重新填充到阈值以上。默认为零(不丢弃任何帧)。
- denoise-noise-level (级别)
要为颗粒合成去除的噪声量。如果未设置此选项或设置为 0,则禁用颗粒合成。
- denoise-block-size (像素)
用于颗粒合成的降噪的块大小。如果未设置,AV1 编解码器将使用默认值 32。
- undershoot-pct (百分比)
设置数据速率下冲(最小)目标比特率的百分比。范围是 -1 到 100。默认为 -1。
- overshoot-pct (百分比)
设置数据速率过冲(最大)目标比特率的百分比。范围是 -1 到 1000。默认为 -1。
- minsection-pct (百分比)
GOP 比特率与目标比特率的最小百分比变化。如果未设置 minsection-pct,则 libaomenc 包装器会按如下方式计算:
(minrate * 100 / bitrate)
。范围是 -1 到 100。默认为 -1(未设置)。- maxsection-pct (百分比)
GOP 比特率与目标比特率的最大百分比变化。如果未设置 maxsection-pct,则 libaomenc 包装器会按如下方式计算:
(maxrate * 100 / bitrate)
。范围是 -1 到 5000。默认为 -1(未设置)。- frame-parallel (布尔值)
启用帧并行解码功能。默认为 true。
- tiles
设置用于编码输入视频的图块数,格式为 列数 x 行数。更大的数字允许在编码和解码中实现更高的并行性,但可能会降低编码效率。默认为输入视频大小所需的最小图块数(对于高达 4K 的大小,这是一个 1x1(即单个图块))。
- tile-columns tile-rows
将图块数设置为图块行数和列数的 log2。为与 libvpx/VP9 的兼容性而提供。
- row-mt (需要 libaom >= 1.0.0-759-g90a15f4f2)
启用基于行的多线程。默认情况下禁用。
- enable-cdef (布尔值)
启用约束方向增强滤波器。libaom-av1 编码器默认启用 CDEF。
- enable-restoration (布尔值)
启用循环恢复滤波器。对于 libaom-av1,默认为 true。
- enable-global-motion (布尔值)
启用全局运动以进行块预测。默认为 true。
- enable-intrabc (布尔值)
启用内部块预测的块复制模式。此模式对于屏幕内容很有用。默认为 true。
- enable-rect-partitions (布尔值) (需要 libaom >= v2.0.0)
启用矩形分区。默认为 true。
- enable-1to4-partitions (布尔值) (需要 libaom >= v2.0.0)
启用 1:4/4:1 分区。默认为 true。
- enable-ab-partitions (布尔值) (需要 libaom >= v2.0.0)
启用 AB 形状分区。默认为 true。
- enable-angle-delta (布尔值) (需要 libaom >= v2.0.0)
启用角度增量内部预测。默认为 true。
- enable-cfl-intra (布尔值) (需要 libaom >= v2.0.0)
启用从亮度预测的色度内部预测。默认为 true。
- enable-filter-intra (布尔值) (需要 libaom >= v2.0.0)
启用滤波器内部预测器。默认为 true。
- enable-intra-edge-filter (布尔值) (需要 libaom >= v2.0.0)
启用内部边缘滤波器。默认为 true。
- enable-smooth-intra (布尔值) (需要 libaom >= v2.0.0)
启用平滑内部预测模式。默认为 true。
- enable-paeth-intra (布尔值) (需要 libaom >= v2.0.0)
在内部预测中启用 paeth 预测器。默认为 true。
- enable-palette (布尔值) (需要 libaom >= v2.0.0)
启用调色板预测模式。默认为 true。
- enable-flip-idtx (布尔值) (需要 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 (布尔值) (需要 libaom >= v2.0.0)
启用 64 点变换。默认为 true。
- reduced-tx-type-set (布尔值) (需要 libaom >= v2.0.0)
使用缩减的变换类型集。默认为 false。
- use-intra-dct-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTRA 模式使用 DCT。默认为 false。
- use-inter-dct-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTER 模式使用 DCT。默认为 false。
- use-intra-default-tx-only (布尔值) (需要 libaom >= v2.0.0)
仅对 INTRA 模式使用默认变换。默认为 false。
- enable-ref-frame-mvs (布尔值) (需要 libaom >= v2.0.0)
启用时间运动矢量预测。默认为 true。
- enable-reduced-reference-set (布尔值) (需要 libaom >= v2.0.0)
使用缩减的单参考和复合参考集。默认为 false。
- enable-obmc (布尔值) (需要 libaom >= v2.0.0)
启用 OBMC。默认为 true。
- enable-dual-filter (布尔值) (需要 libaom >= v2.0.0)
启用双滤波器。默认为 true。
- enable-diff-wtd-comp (布尔值) (需要 libaom >= v2.0.0)
启用差异加权复合。默认为 true。
- enable-dist-wtd-comp (布尔值) (需要 libaom >= v2.0.0)
启用距离加权复合。默认为 true。
- enable-onesided-comp (布尔值) (需要 libaom >= v2.0.0)
启用单侧复合。默认为 true。
- enable-interinter-wedge (布尔值) (需要 libaom >= v2.0.0)
启用帧间楔形复合。默认为 true。
- enable-interintra-wedge (布尔值) (需要 libaom >= v2.0.0)
启用帧内帧间楔形复合。默认为 true。
- enable-masked-comp (布尔值) (需要 libaom >= v2.0.0)
启用掩码复合。默认为 true。
- enable-interintra-comp (布尔值) (需要 libaom >= v2.0.0)
启用帧内帧间复合。默认为 true。
- enable-smooth-interintra (布尔值) (需要 libaom >= v2.0.0)
启用平滑帧内帧间模式。默认为 true。
- aom-params
使用由 ":" 分隔的 key=value 对列表设置 libaom 选项。有关支持的选项列表,请参阅“AV1 Specific Options”部分下的
aomenc --help
。例如,要使用 -aom-params 指定 libaom 编码选项
ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4
9.8 libsvtav1
SVT-AV1 编码器封装器。
需要在配置期间存在 SVT-AV1 头文件和库。您需要使用 --enable-libsvtav1
显式配置构建。
9.8.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-6)。
- tile_columns
设置要使用的瓦片列数的以 2 为底的对数 (0-4)。
- svtav1-params
使用由 ":" 分隔的 key=value 对列表设置 SVT-AV1 选项。有关接受的参数列表,请参阅 SVT-AV1 编码器用户指南。
9.9 libjxl
libjxl JPEG XL 编码器封装器。
需要在配置期间存在 libjxl 头文件和库。您需要使用 --enable-libjxl
显式配置构建。
9.9.1 选项
libjxl 封装器支持以下选项
- distance
设置目标 Butteraugli 距离。这是一个质量设置:较低的距离产生较高的质量,距离 = 1.0 大致相当于用于照片内容的 libjpeg 质量 90。设置 distance = 0.0 将产生真正的无损编码。有效值范围在 0.0 到 15.0 之间,合理的数值很少超过 5.0。设置 distance = 0.1 通常可以实现大多数输入的透明度。默认值为 1.0。
- effort
设置使用的编码努力程度。较高的努力值产生更一致的质量,并且通常会产生更好的质量/bpp 曲线,但代价是需要更多的 CPU 时间。有效值范围从 1 到 9,默认值为 7。
- modular
强制编码器使用模块模式而不是自动选择。默认情况下,有损编码使用 VarDCT,无损编码使用模块。对于有损编码,VarDCT 通常优于模块,但不支持无损编码。
9.10 libkvazaar
Kvazaar H.265/HEVC 编码器。
需要在配置期间存在 libkvazaar 头文件和库。您需要使用 --enable-libkvazaar 显式配置构建。
9.10.1 选项
- b
以比特/秒为单位设置目标视频比特率,并启用速率控制。
- kvazaar-params
将 kvazaar 参数设置为以逗号 (,) 分隔的 name=value 对列表。有关选项列表,请参阅 kvazaar 文档。
9.11 libopenh264
Cisco libopenh264 H.264/MPEG-4 AVC 编码器封装器。
此编码器需要在配置期间存在 libopenh264 头文件和库。您需要使用 --enable-libopenh264
显式配置构建。该库是使用 pkg-config
检测的。
有关该库的更多信息,请参阅 http://www.openh264.org。
9.11.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.12 libtheora
libtheora Theora 编码器封装器。
需要在配置期间存在 libtheora 头文件和库。您需要使用 --enable-libtheora
显式配置构建。
有关 libtheora 项目的更多信息,请参阅 http://www.theora.org/。
9.12.1 选项
以下全局选项映射到影响编码流质量和比特率的内部 libtheora 选项。
- b
以比特/秒为单位设置 CBR(恒定比特率)模式的视频比特率。如果启用了 VBR(可变比特率)模式,则忽略此选项。
- flags
用于通过 qscale 标志启用恒定质量模式 (VBR) 编码,并启用
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.12.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.13 libvpx
通过 libvpx 支持 VP8/VP9 格式。
配置期间需要 libvpx 头文件和库。 你需要使用 --enable-libvpx
显式配置构建。
9.13.1 选项
libvpx 封装器支持以下选项。为了方便迁移,括号中列出了与 vpxenc
等效的选项或值。
为了减少文档重复,此处仅记录私有选项和其他需要特别注意的选项。 有关未记录的通用选项的文档,请参阅编解码器选项章节。
要获取更多关于 libvpx 选项的文档,请调用命令 ffmpeg -h encoder=libvpx
,ffmpeg -h encoder=libvpx-vp9
或 vpxenc --help
。更多信息请参考 libvpx API 文档。
- b (目标比特率)
设置比特率,单位为 比特/秒。请注意,FFmpeg 的 b 选项的单位是 比特/秒,而
vpxenc
的 target-bitrate 的单位是 千比特/秒。- g (关键帧最大距离)
- keyint_min (关键帧最小距离)
- qmin (最小量化器)
最小(最佳质量)量化器。
- qmax (最大量化器)
最大(最差质量)量化器。可以逐帧更改。
- bufsize (缓冲区大小,缓冲区最佳大小)
设置码率控制缓冲区大小(单位为 比特)。 请注意,
vpxenc
的选项以毫秒为单位指定,libvpx 封装器将此值转换如下:buf-sz = bufsize * 1000 / 比特率
,buf-optimal-sz = bufsize * 1000 / 比特率 * 5 / 6
。- rc_init_occupancy (缓冲区初始大小)
设置解码开始前应加载到 rc 缓冲区中的比特数。请注意,
vpxenc
的选项以毫秒为单位指定,libvpx 封装器将此值转换如下:rc_init_occupancy * 1000 / 比特率
。- undershoot-pct
设置数据率低于(最小)目标比特率的百分比。
- overshoot-pct
设置数据率高于(最大)目标比特率的百分比。
- skip_threshold (丢帧)
- qcomp (偏置百分比)
- maxrate (最大段百分比)
设置 GOP 最大比特率,单位为 比特/秒。请注意,
vpxenc
的选项被指定为目标比特率的百分比,libvpx 封装器将此值转换如下:(maxrate * 100 / 比特率)
。- minrate (最小段百分比)
设置 GOP 最小比特率,单位为 比特/秒。请注意,
vpxenc
的选项被指定为目标比特率的百分比,libvpx 封装器将此值转换如下:(minrate * 100 / 比特率)
。- minrate, maxrate, b end-usage=cbr
(minrate == maxrate == 比特率)
.- crf (end-usage=cq, cq-level)
- tune (调优)
- ‘psnr (psnr)’
- ‘ssim (ssim)’
- quality, deadline (截止时间)
- ‘best’
使用最佳质量截止时间。这个选项命名不当且速度很慢,应该避免使用,因为它可能会产生比“good”更差的质量输出。
- ‘good’
使用良好质量截止时间。当与 cpu-used 选项一起使用时,这是速度和质量之间很好的折衷。
- ‘realtime’
使用实时质量截止时间。
- speed, cpu-used (cpu-used)
设置质量/速度比率修饰符。更高的值会加速编码,但会牺牲质量。
- nr (噪声敏感度)
- static-thresh
设置一个块上的变化阈值,低于该阈值的块将被编码器跳过。
- slices (标记部分)
请注意,FFmpeg 的 slices 选项给出了分区的总数,而
vpxenc
的 token-parts 则以log2(partitions)
给出。- max-intra-rate
设置最大 I 帧比特率,作为目标比特率的百分比。值为 0 表示无限制。
- force_key_frames
VPX_EFLAG_FORCE_KF
- 备用参考帧相关
- auto-alt-ref
启用备用参考帧的使用(仅限 2 次编码)。大于 1 的值会启用多层备用参考帧(仅限 VP9)。
- arnr-maxframes
设置 altref 降噪的最大帧数。
- arnr-type
设置 altref 降噪滤波器类型:向后,向前,居中。
- arnr-strength
设置 altref 降噪滤波器的强度。
- rc-lookahead, lag-in-frames (帧延迟)
设置用于帧类型和码率控制的向前查看的帧数。
- min-gf-interval
设置最小 golden/备用参考帧间隔(仅限 VP9)。
- error-resilient
启用错误恢复功能。
- sharpness 整数
增加清晰度,但会降低 PSNR。有效范围是 [0, 7]。
- ts-parameters
使用 :- 分隔的键=值对列表设置时间可扩展性配置。例如,要使用
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
每个时间层的帧速率抽取因子。
- ts_periodicity
定义帧时间层成员关系的序列长度。
- ts_layer_id
定义帧到时间层成员关系的模板。
- ts_layering_mode
(可选)从一组预定义的时间分层模式中选择时间结构。目前支持以下选项。
- 0
内部不提供任何时间分层标志,依赖于使用
AVFrame
中的metadata
字段传入带有以下键的标志。- vp8-flags
设置传递给编码器的标志,以指示当前帧的参考方案。有关更多详细信息,请参阅
vpx/vpx_encoder.h
中的函数vpx_codec_encode
。- temporal_id
显式设置当前要编码的帧的时间 ID。
- 2
两个时间层。 0-1...
- 3
三个时间层。 0-2-1-2...;使用单个参考帧。
- 4
与选项“3”相同,只是时间周期内的两个时间层 2 帧之间存在依赖关系。
- VP8 特定选项
- screen-content-mode
屏幕内容模式,选项之一:0(关闭),1(屏幕),2(带有更激进码率控制的屏幕)。
- VP9 特定选项
- lossless
启用无损模式。
- tile-columns
设置使用的瓦片列数。请注意,此值以
log2(tile_columns)
的形式给出。例如,要请求 8 列瓦片,应将 tile-columns 选项设置为 3。- tile-rows
设置使用的瓦片行数。请注意,此值以
log2(tile_rows)
的形式给出。例如,要请求 4 行瓦片,应将 tile-rows 选项设置为 2。- frame-parallel
启用帧并行解码功能。
- aq-mode
设置自适应量化模式(0:关闭(默认),1:方差,2:复杂度,3:循环刷新,4:equator360)。
- colorspace 颜色空间
设置输入颜色空间。VP9 码流支持以下颜色空间的信号传输
- ‘rgb’ sRGB
- ‘bt709’ bt709
- ‘unspecified’ 未知
- ‘bt470bg’ bt601
- ‘smpte170m’ smpte170
- ‘smpte240m’ smpte240
- ‘bt2020_ncl’ bt2020
- 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
指示是否更新 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.14 libvvenc
VVenC H.266/VVC 编码器封装器。
此编码器在配置期间需要存在 libvvenc 头文件和库。您需要使用 --enable-libvvenc 显式配置构建。
VVenC 项目网站位于 https://github.com/fraunhoferhhi/vvenc。
9.14.1 支持的像素格式
VVenC 仅支持 10 位颜色空间作为输入。但是,内部(编码)位深度可以在运行时设置为 8 位或 10 位。
9.14.2 选项
- b
设置目标视频比特率。
- g
设置 GOP 大小。目前支持 g=1(仅帧内)或默认值。
- preset
设置 VVenC 预设。
- levelidc
设置 level idc。
- tier
设置 vvc 层级。
- qp
设置常量量化参数。
- subopt 布尔值
设置主观(感知驱动)优化。默认为 1(开启)。
- bitdepth8 布尔值
设置 8 位编码模式,而不是使用 10 位。默认为 0(关闭)。
- period
以秒为单位设置(帧内)刷新周期。
- vvenc-params
使用以 ":" 分隔的 键=值 对列表设置 vvenc 选项。有关选项列表,请参见
vvencapp --fullhelp
或vvencFFapp --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.15 libwebp
libwebp WebP 图像编码器封装器
libwebp 是 Google 官方的 WebP 图像编码器。它可以以有损或无损模式进行编码。有损图像本质上是 VP8 帧的封装器。无损图像是 Google 开发的单独编解码器。
9.15.1 像素格式
目前,由于格式和 libwebp 的限制,libwebp 仅支持有损的 YUV420 和无损的 RGB。两种模式都支持 Alpha 通道。由于 API 的限制,如果在编码有损图像时传入 RGB,或者在编码无损图像时传入 YUV,则像素格式将自动使用 libwebp 中的函数进行转换。这并不理想,仅为了方便起见而这样做。
9.15.2 选项
- -lossless 布尔值
启用/禁用无损模式的使用。默认为 0。
- -compression_level 整数
对于有损模式,这是质量/速度的折衷。较高的值在给定大小的情况下提供更好的质量,但会增加编码时间。对于无损模式,这是大小/速度的折衷。较高的值会减小大小,但会增加编码时间。更具体地说,它控制使用的额外算法和压缩工具的数量,并改变这些工具的组合。这映射到 libwebp 中的 method 选项。有效范围是 0 到 6。默认为 4。
- -quality 浮点数
对于有损编码,这控制图像质量。对于无损编码,这控制压缩中花费的精力和时间。范围是 0 到 100。默认为 75。
- -preset 类型
配置预设。这将根据图像的通用类型进行一些自动设置。
- none
不使用预设。
- default
使用编码器默认值。
- picture
数字图片,如肖像、室内拍摄
- photo
室外照片,具有自然光照
- drawing
手绘或线条图,具有高对比度细节
- icon
小型彩色图像
- text
Text-like
9.16 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.16.1 支持的像素格式
x264 支持 8 到 10 位颜色空间。确切的位深度在 x264 的配置时控制。
9.16.2 选项
libx264 封装器支持以下选项。为了便于迁移,在括号中列出了 x264
等效选项或值。
为了减少文档重复,此处仅记录私有选项和其他需要特别注意的选项。 有关未记录的通用选项的文档,请参阅编解码器选项章节。
要获得更准确和更广泛的 libx264 选项文档,请调用命令 x264 --fullhelp
或查阅 libx264 文档。
在下面的列表中,请注意,x264
选项名称显示在 libavcodec 对应名称之后的括号中,以防存在直接映射。
- 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)
设置
x264_param_t.i_level_idc
的值,如果该值为正数,则使用该值,否则忽略。这个值可以使用
AVCodecContext
API 设置(例如,直接设置AVCodecContext
的值),并且指定为映射到相应级别的整数(例如,值 31 映射到 H.264 级别 IDC “3.1”,如x264_levels
表格中所定义)。如果设置为非正数,则忽略此值。或者,它可以设置为私有选项,覆盖在
AVCodecContext
中设置的值,在这种情况下,必须指定为级别 IDC 标识符(例如“3.1”),如 H.264 附件 A 所定义。- sc_threshold(scenecut)
设置场景切换检测的阈值。
- 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)’
Hadamard 穷举搜索(最慢)。
- forced-idr
通常,当强制使用 I 帧类型时,编码器可以选择任何类型的 I 帧。此选项强制它选择 IDR 帧。
- 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 (调优)
设置编码参数的调整。
- profile(profile)
设置配置文件限制。
- fastfirstpass
当设置为 1 时,在编码第一遍时启用快速设置。当设置为 0 时,它与
x264
的 --slow-firstpass 选项具有相同的效果。- crf(crf)
设置恒定质量模式的质量。
- crf_max(crf-max)
在 CRF 模式下,防止 VBV 将质量降低到此点以下。
- qp(qp)
设置恒定量化率控制方法的参数。
- aq-mode (aq-模式)
设置 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(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)
设置直接 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 容器中使用)。
- x264opts opts
- x264-params opts
使用以“:”分隔的键=值选项列表覆盖 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 解码器提供这些。默认值为 1(开启)。
- udu_sei boolean
如果可用,将用户数据未注册 SEI 导入到输出中。默认值为 0(关闭)。
- mb_info boolean
通过 AVFrameSideData 设置 mb_info 数据,仅在从 API 使用时有用。默认值为 0(关闭)。
提供了用于常见用途的编码 ffpresets,因此可以将它们与常规预设系统一起使用(例如,传递 pre 选项)。
9.17 libx265
x265 H.265/HEVC 编码器封装器。
此编码器需要在配置期间存在 libx265 头文件和库。您需要使用 --enable-libx265 显式配置构建。
9.17.1 选项
- b
设置目标视频比特率。
- bf
- g
设置 GOP 大小。
- keyint_min
最小 GOP 大小。
- refs
每个 P 帧可以使用的参考帧数量。范围是 1-16。
- preset
设置 x265 预设。
- tune
设置 x265 调优参数。
- profile
设置配置文件限制。
- crf
设置恒定质量模式的质量。
- qp
设置恒定量化率控制方法的参数。
- qmin
最小量化器缩放。
- qmax
最大量化器缩放。
- qdiff
量化器缩放之间的最大差异。
- qblur
量化器曲线模糊
- qcomp
量化器曲线压缩因子
- i_qfactor
- b_qfactor
- forced-idr
通常,当强制使用 I 帧类型时,编码器可以选择任何类型的 I 帧。此选项强制它选择 IDR 帧。
- 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.18 libxavs2
xavs2 AVS2-P2/IEEE1857.4 编码器封装器。
此编码器需要在配置期间存在 libxavs2 头文件和库。您需要使用 --enable-libxavs2 显式配置构建。
使用以下标准 libavcodec 选项
- b / bit_rate
- g / gop_size
- bf / max_b_frames
编码器还有其自己的特定选项
9.18.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.19 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.19.1 选项
libxeve 封装器支持以下选项。为了便于迁移,xeve 等效的选项或值列在括号中。
为了减少文档重复,此处仅记录私有选项和其他需要特别注意的选项。 有关未记录的通用选项的文档,请参阅编解码器选项章节。
要获取更准确和更广泛的 libxeve 选项文档,请调用命令 xeve_app --help
或查阅 libxeve 文档。
- b (bitrate)
设置目标视频比特率,单位为比特/秒。请注意,FFmpeg 的 b 选项以比特/秒表示,而 xeve 的比特率以千比特/秒表示。
- bf (bframes)
设置 B 帧的最大数量(1、3、7、15)。
- g (keyint)
设置 GOP 大小(I 帧周期)。
- preset(preset)
设置 xeve 预设。设置编码器预设值以确定编码速度 [fast, medium, slow, placebo]
- tune (调优)
设置编码器调优参数 [psnr, zerolatency]
- profile(profile)
设置编码器配置文件 [0: baseline; 1: main]
- crf(crf)
设置恒定质量模式的质量。恒定速率因子 <10..49> [默认值:32]
- qp(qp)
设置恒定量化率控制方法参数。量化参数 qp <0..51> [默认值:32]
- threads (threads)
强制使用特定数量的线程
9.20 libxvid
Xvid MPEG-4 Part 2 编码器封装器。
此编码器需要在配置期间存在 libxvidcore 头文件和库。您需要使用 --enable-libxvid --enable-gpl
显式配置构建。
本机 mpeg4
编码器支持 MPEG-4 Part 2 格式,因此用户无需此库即可编码为这种格式。
9.20.1 选项
libxvid 封装器支持以下选项。列出了以下一些选项,但未记录,它们对应于共享编解码器选项。有关其文档,请参见 编解码器选项章节。未列出的其他共享选项对 libxvid 编码器没有影响。
- b
- g
- qmin
- qmax
- mpeg_quant
- threads
- bf
- b_qfactor
- b_qoffset
- flags
设置特定的编码标志。可能的值
- ‘mv4’
每个宏块使用四个运动矢量。
- ‘aic’
启用高质量 AC 预测。
- ‘gray’
仅编码灰度。
- ‘qpel’
启用四分之一像素运动补偿。
- ‘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 块启用基于率失真(rate distortion)的半像素和四分之一像素精细化。
- ‘rd’
启用上述所有功能,外加针对 8x8 块的基于率失真的半像素和四分之一像素精细化,以及使用方形模式的基于率失真的搜索。
- lumi_aq
设置为 1 时启用亮度掩蔽自适应量化。默认值为 0(禁用)。
- variance_aq
设置为 1 时启用方差自适应量化。默认值为 0(禁用)。
与 lumi_aq 结合使用时,最终质量不会优于单独指定的这两个中的任何一个。换句话说,最终质量将是这两个效果中较差的一个。
- trellis
设置率失真最优量化。
- ssim
设置结构相似性 (SSIM) 显示方法。可能的取值
- ‘off’
禁用 SSIM 信息的显示。
- “avg”
在编码结束时将平均 SSIM 输出到 stdout。显示平均 SSIM 的格式为
Average SSIM: %f
对于不熟悉 C 的用户,%f 表示浮点数或十进制数(例如 0.939232)。
- “frame”
在编码期间输出每帧 SSIM 数据,并在编码结束时将平均 SSIM 输出到 stdout。每帧信息的格式为
SSIM: avg: %1.3f min: %1.3f max: %1.3f
对于不熟悉 C 的用户,%1.3f 表示四舍五入到小数点后 3 位的浮点数(例如 0.932)。
- ssim_acc
设置 SSIM 精度。有效选项是 0-4 范围内的整数,其中 0 提供最准确的结果,而 4 计算速度最快。
9.21 MediaFoundation
这为 MediaFoundation 框架中的编码器(音频和视频)提供了封装。它可以访问 SW 和 HW 编码器。视频编码器可以采用 nv12 或 yuv420p 格式的输入(有些编码器同时支持这两种格式,有些仅支持其中一种 - 实际上,nv12 是更安全的选择,尤其是在 HW 编码器中)。
9.22 Microsoft RLE
Microsoft RLE(又名 MSRLE)编码器。仅支持 8 位调色板模式。与 Windows 3.1 和 Windows 95 兼容。
9.22.1 选项
- g 整数
关键帧间隔。至少每
-g
帧插入一个关键帧,有时会更早。
9.23 mpeg2
MPEG-2 视频编码器。
9.23.1 选项
- profile
选择要编码的 mpeg2 配置文件
- “422”
- ‘high’
- “ss”
空间可伸缩
- “snr”
SNR 可伸缩
- ‘main’
- ‘simple’
- level
选择要编码的 mpeg2 级别
- ‘high’
- “high1440”
- ‘main’
- “low”
- seq_disp_ext 整数
指定编码器是否应将 sequence_display_extension 写入输出。
- -1
- auto
通过检查要写入的数据是否与默认值或未指定值不同,自动决定是否写入它(这是默认值)。
- 0
- never
从不写入。
- 1
- always
始终写入它。
- video_format 整数
指定写入序列显示扩展中的 video_format,指示视频图片的来源。默认值为“unspecified”,可以是“component”、“pal”、“ntsc”、“secam”或“mac”。为了获得最大的兼容性,请使用“component”。
- a53cc boolean
将隐藏式字幕(必须是 ATSC 兼容格式)导入输出。默认值为 1(启用)。
9.24 png
PNG 图像编码器。
9.24.1 私有选项
- dpi 整数
设置像素的物理密度,单位为每英寸点数,默认情况下未设置
- dpm 整数
设置像素的物理密度,单位为每米点数,默认情况下未设置
9.25 ProRes
Apple ProRes 编码器。
FFmpeg 包含 2 个 ProRes 编码器,即 prores-aw 和 prores-ks 编码器。可以使用 -vcodec
选项选择使用的编码器。
9.25.1 prores-ks 的私有选项
- profile 整数
选择要编码的 ProRes 配置文件
- “proxy”
- “lt”
- “standard”
- “hq”
- “4444”
- “4444xq”
- quant_mat 整数
选择量化矩阵。
- ‘auto’
- “default”
- “proxy”
- “lt”
- “standard”
- “hq”
如果设置为 auto,则会选择与配置文件匹配的矩阵。如果未设置,则会选择提供最高质量的矩阵 default。
- bits_per_mb 整数
为编码一个宏块分配多少位。不同的配置文件使用每宏块 200 到 2400 位,最大值为 8000 位。
- mbs_per_slice 整数
每个切片中的宏块数 (1-8);默认值 (8) 在几乎所有情况下都应该很好。
- vendor 字符串
覆盖 4 字节的供应商 ID。像 apl0 这样的自定义供应商 ID 会声明该流是由 Apple 编码器生成的。
- alpha_bits 整数
指定 Alpha 分量的位数。可能的值为 0、8 和 16。使用 0 禁用 Alpha 平面编码。
9.25.2 速度注意事项
在默认操作模式下,编码器必须遵守帧约束(即不生成大小大于请求的帧),同时仍然使输出图片尽可能好。包含大量小细节的帧更难压缩,编码器会花费更多时间为每个切片搜索合适的量化器。
设置更高的 bits_per_mb 限制将提高速度。
为了获得最快的编码速度,请设置 qscale 参数(推荐值为 4),并且不设置大小约束。
9.26 QSV 编码器
Intel QuickSync Video 编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)
9.26.1 码率控制方法
速率控制方法的选择如下
- 指定 global_quality 时,使用基于质量的模式。具体来说,这意味着以下之一
- - CQP - 常量量化器标度,当同时设置 qscale 编解码器标志时(-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。
请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。将详细程度设置为 verbose 或更高,以查看 QSV 运行时使用的实际设置。
9.26.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 编解码器标志 -> GopOptFlag
- 对于 CQP 模式,i_qfactor/i_qoffset 和 b_qfactor/b_qoffset 分别设置 QPP 和 QPI 以及 QPP 和 QPB 之间的差值。
- 将 coder 选项设置为值 vlc 将使 H.264 编码器使用 CAVLC 而不是 CABAC。
9.26.3 通用选项
以下选项供所有 qsv 编码器使用。
- async_depth
指定应用程序在显式同步结果之前执行的异步操作的数量。如果为零,则表示未指定该值。
- preset
此选项列出了一系列选择,从 veryfast(最佳速度)到 veryslow(最佳质量)。
- “veryfast”
- “faster”
- ‘fast’
- “medium”
- “slow”
- “slower”
- “veryslow”
- forced_idr
强制将 I 帧作为 IDR 帧。
- low_power
对于编码器,将此标志设置为 ON 以降低功耗和 GPU 使用率。
9.26.4 运行时选项
以下选项可在 qsv 编码期间使用。
- global_quality
- i_quant_factor
- i_quant_offset
- b_quant_factor
- b_quant_offset
在 h264_qsv 和 hevc_qsv 中受支持。更改这些值以重置 qsv 编解码器的 qp 配置。
- max_frame_size
在 h264_qsv 和 hevc_qsv 中受支持。更改此值以重置 qsv 编解码器的 MaxFrameSize 配置。
- gop_size
更改此值以重置 qsv 编解码器的 gop 配置。
- int_ref_type
- int_ref_cycle_size
- int_ref_qp_delta
- int_ref_cycle_dist
在 h264_qsv 和 hevc_qsv 中受支持。更改这些值以重置 qsv 编解码器的帧内刷新配置。
- qmax
- qmin
- max_qp_i
- min_qp_i
- max_qp_p
- min_qp_p
- max_qp_b
- min_qp_b
在 h264_qsv 中受支持。更改这些值以重置 qsv 编解码器的最大/最小 qp 配置。
- low_delay_brc
在 h264_qsv、hevc_qsv 和 av1_qsv 中受支持。更改此值以重置 qsv 编解码器的 low_delay_brc 配置。
- framerate
更改此值以重置 qsv 编解码器的帧率配置。
- bit_rate
- rc_buffer_size
- rc_initial_buffer_occupancy
- rc_max_rate
更改这些值以重置 qsv 编解码器的码率控制配置。
- pic_timing_sei
在 h264_qsv 和 hevc_qsv 中受支持。更改此值以重置 qsv 编解码器的 pic_timing_sei 配置。
- qsv_params
将 QSV 编码器参数设置为以冒号分隔的键值对列表。
qsv_params 的格式应为
key1=value1:key2=value2:...
。这些参数使用 MFXSetParameter 函数直接传递给底层的 Intel Quick Sync Video (QSV) 编码器。
示例
ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4
此选项允许对 QSV 编码器提供的各种编码器特定设置进行细粒度控制。
9.26.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
最大编码切片大小(以字节为单位)。
- bitrate_limit
切换码率限制。修改码率,使其在 QSV 编码器施加的范围内。关闭此标志可能会导致违反 HRD 一致性。请注意,指定低于 QSV 编码器范围的码率可能会显著影响质量。如果启用此选项,它在非 CQP 模式下生效:如果码率不在 QSV 编码器施加的范围内,它将被更改为在范围内。
- mbbrc
设置此标志可启用宏块级别码率控制,这通常会提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。
- low_delay_brc
设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的码率控制,以最大限度地减少逐帧比特流大小的变化。值:-1-默认 0-关闭 1-打开
- adaptive_i
此标志控制 QSV 编码器插入 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
指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会因 I 帧而对编码比特流大小产生显著影响。SDK 编码器通过使用帧内 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
帧内刷新周期开始之间的距离(以帧为单位)。
- 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
向编码器提供有关编码会话场景的提示。
- “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’
编码器在比特流中插入所有宏块都被编码为跳过的帧。
- ‘insert_nothing’
类似于 insert_dummy,但编码器不向比特流中插入任何内容。跳过的帧仍用于比特率控制 (brc)。例如,GOP 仍包括跳过的帧,并且跳过帧之后的帧大小会更大。
- ‘brc_only’
skip_frame 元数据表示当前帧之前错过的帧数。
9.26.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 功能,该功能提供更准确的码率控制,以最大限度地减少逐帧比特流大小的变化。值:-1-默认 0-关闭 1-打开
- adaptive_i
此标志控制 QSV 编码器插入 I 帧。打开此标志以允许将帧类型从 P 和 B 更改为 I。
- adaptive_b
此标志控制将帧类型从 B 更改为 P。
- p_strategy
启用 P 金字塔:0-默认 1-简单 2-金字塔(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
设置编码配置文件 (scc 需要 libmfx >= 1.32)。
- “unknown”
- ‘main’
- ‘main10’
- ‘mainsp’
- ‘rext’
- ‘scc’
- tier
设置编码层级(只有级别 >= 4 才能支持高层级)。此选项仅在指定级别选项时生效。
- ‘main’
- ‘high’
- gpb
1:GPB(广义 P/B 帧)
0:常规 P 帧。
- tile_cols
分块编码的列数。
- tile_rows
分块编码的行数。
- aud
插入访问单元分隔符 NAL。
- pic_timing_sei
插入带有 pic_struct_syntax 元素的图像定时 SEI。
- transform_skip
打开此选项以启用变换跳过。ICL 或更新的平台支持此选项。
- int_ref_type
指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会因 I 帧而对编码比特流大小产生显著影响。SDK 编码器通过使用帧内 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
向编码器提供有关编码会话场景的提示。
- “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’
编码器在比特流中插入所有宏块都被编码为跳过的帧。
- ‘insert_nothing’
类似于 insert_dummy,但编码器不向比特流中插入任何内容。跳过的帧仍用于比特率控制 (brc)。例如,GOP 仍包括跳过的帧,并且跳过帧之后的帧大小会更大。
- ‘brc_only’
skip_frame 元数据表示当前帧之前错过的帧数。
9.26.7 MPEG2 选项
这些选项被 mpeg2_qsv 使用
- profile
- “unknown”
- ‘simple’
- ‘main’
- ‘high’
9.26.8 VP9 选项
这些选项被 vp9_qsv 使用
- profile
- “unknown”
- ‘profile0’
- ‘profile1’
- ‘profile2’
- ‘profile3’
- tile_cols
分块编码的列数(需要 libmfx >= 1.29)。
- tile_rows
分块编码的行数(需要 libmfx >= 1.29)。
9.26.9 AV1 选项
这些选项被 av1_qsv 使用 (需要 libvpl)。
- profile
- “unknown”
- ‘main’
- tile_cols
分块编码的列数。
- tile_rows
分块编码的行数。
- adaptive_i
此标志控制 QSV 编码器插入 I 帧。打开此标志以允许将帧类型从 P 和 B 更改为 I。
- adaptive_b
此标志控制将帧类型从 B 更改为 P。
- b_strategy
此选项控制 B 帧作为参考帧的使用。
- extbrc
扩展码率控制。
- look_ahead_depth
前瞻的深度,以帧数为单位,当启用 extbrc 选项时可用。
- low_delay_brc
设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的码率控制,以最大限度地减少逐帧比特流大小的变化。值:-1-默认 0-关闭 1-打开
- max_frame_size
设置每帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值以控制帧大小。在 CQP 速率控制模式下无效。
- max_frame_size_i
I 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 I 帧,将忽略 max_frame_size 设置的值。
- max_frame_size_p
P 帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对于 P 帧,将忽略 max_frame_size 设置的值。
9.27 snow
9.27.1 选项
- iterative_dia_size
迭代运动估计的 dia 大小
9.28 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 / 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
所有编码器都支持以下选项
- low_power
一些驱动程序/平台为某些编解码器提供了第二个编码器,旨在比默认编码器消耗更少的功率;设置此选项将尝试使用该编码器。请注意,它可能支持简化的功能集,因此某些其他选项可能在此模式下不可用。
- idr_interval
在开放 GOP 模式下,设置两次完整刷新(IDR)帧之间常规帧内帧的数量。帧内帧仍然是 IRAP,但不包括全局标头,并且可能具有不可解码的前导图片。
- b_depth
设置 B 帧参考深度。当设置为 1(默认值)时,所有 B 帧将仅引用 P 帧或 I 帧。当设置为更大的值时,将存在多个 B 帧层,每层中的帧仅引用更高层中的帧。
- async_depth
最大处理并行度。增加此值可以提高单通道性能。如果驱动程序未实现 vaSyncBuffer 函数,则此选项不起作用。如果使用大量的 async_depth,请确保分配了足够的 hw_frames。
- max_frame_size
设置每帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值以控制帧大小。在 CQP 速率控制模式下无效。
- rc_mode
设置要使用的速率控制模式。给定的驱动程序可能只支持一部分模式。
可能的模式
- auto
根据驱动程序支持和其他选项自动选择模式。这是默认设置。
- CQP
恒定质量。
- CBR
恒定比特率。
- VBR
可变比特率。
- ICQ
智能恒定质量。
- QVBR
质量定义的可变比特率。
- AVBR
平均可变比特率。
- blbrc
启用块级别速率控制,该控制逐块分配不同的比特率。CQP 模式无效。
每个编码器也有其自己的特定选项
- av1_vaapi
profile 设置 seq_profile 的值。tier 设置 seq_tier 的值。level 设置 seq_level_idx 的值。
- tiles
设置用于编码输入视频的图块数量,格式为列 x 行。(默认值为 auto,表示使用最少的图块列/行数)。
- tile_groups
设置图块组的数量。所有图块将尽可能均匀地分配到每个图块组。(默认值为 1)。
- h264_vaapi
profile 设置 profile_idc 和 constraint_set*_flag 的值。level 设置 level_idc 的值。
- coder
设置熵编码器(默认值为 cabac)。可能的值
- ‘ac’
- ‘cabac’
使用 CABAC。
- ‘vlc’
- ‘cavlc’
使用 CAVLC。
- aud
在流中包含访问单元分隔符(默认情况下不包含)。
- sei
设置要包含的 SEI 消息类型。以下值的一些组合
- ‘identifier’
包含一个 user_data_unregistered 消息,其中包含有关编码器的信息。
- ‘timing’
包括图片定时参数(buffering_period 和 pic_timing 消息)。
- ‘recovery_point’
在适当的地方包括恢复点(recovery_point 消息)。
- hevc_vaapi
profile 和 level 分别设置 general_profile_idc 和 general_level_idc 的值。
- aud
在流中包含访问单元分隔符(默认情况下不包含)。
- tier
设置 general_tier_flag。如果未明确指定,这可能会影响为流选择的级别。
- sei
设置要包含的 SEI 消息类型。以下值的一些组合
- ‘hdr’
如果输入帧具有 HDR 元数据(mastering_display_colour_volume 和 content_light_level 消息),则包含 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
包含标准霍夫曼表(默认启用)。关闭此选项将在每个输出帧中节省几百字节,但可能会失去与一些不完全处理 MJPEG 的 JPEG 解码器的兼容性。
- 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 帧,但输出流始终按编码顺序而不是显示顺序排列。如果启用了 B 帧,可能需要使用 vp9_raw_reorder 比特流过滤器来修改输出流,以按正确的顺序显示帧。
仅生成普通帧 - 可能需要使用 vp9_superframe 比特流过滤器来生成可用于所有解码器的流。
9.29 vbn
Vizrt 二进制图像编码器。
这种格式由广播供应商 Vizrt 用于快速纹理流式传输。不支持该格式的高级功能,如纹理数据的 LZW 压缩或 mipmap 的生成。
9.29.1 选项
- format string
设置 VBN 文件使用的纹理压缩。可以是 dxt1、dxt5 或 raw。默认值为 dxt5。
9.30 vc2
SMPTE VC-2(以前的 BBC Dirac Pro)。此编解码器主要针对专业广播,但由于它支持 8(有限范围或全范围)、10 或 12 位的 yuv420、yuv422 和 yuv444,因此它适用于需要低开销和低压缩的其他任务(如屏幕录制)。
9.30.1 选项
- b
设置目标视频比特率。通常约为未压缩视频比特率的 1:6(例如,对于 1920x1080 50fps yuv422p10,约为 400Mbps)。更高的值(接近未压缩比特率)会启用无损压缩模式。
- field_order
设置后启用场编码(例如,tt - 顶场优先)用于隔行扫描输入。应该可以通过分割场并单独编码每个场来提高隔行扫描内容的压缩率。
- wavelet_depth
设置要应用的小波变换的总量,介于 1 和 5 之间(默认值)。较低的值会降低压缩率和质量。功能较差的解码器可能无法处理 wavelet_depth 值超过 3 的情况。
- wavelet_type
设置变换类型。目前仅实现了 5_3 (LeGall) 和 9_7 (Deslauriers-Dubuc),其中 9_7 具有更好的压缩率,因此是默认值。
- slice_width
- slice_height
设置每个切片的切片大小。较大的值会带来更好的压缩效果。为了与其他更有限的解码器兼容,请使用 32 的 slice_width 和 8 的 slice_height。
- tolerance
设置速率控制系统的欠冲容差(百分比)。这是为了防止运行昂贵的搜索。
- qm
设置默认情况下使用或在 wavelet_depth 设置为 5 时使用的量化矩阵预设。
- - default 使用规范中的默认量化矩阵,并扩展了第五级的值。这在保持细节和省略伪像之间提供了良好的平衡。
- - flat 使用完全清零的量化矩阵。这会增加 PSNR,但可能会降低感知度。在虚假基准测试中使用。
- - color 降低细节,但尝试在极低的比特率下保留颜色。
10 字幕编码器
10.1 dvdsub
此编解码器编码 DVD 中使用的位图字幕格式。通常,它们存储在 VOBSUB 文件对 (*.idx + *.sub) 中,它们也可以在 Matroska 文件中使用。
10.1.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 时,启用一个解决方法,使所有字幕中的像素行数均为偶数。这修复了一些播放器在数字为奇数时会截断底行的问题。如果需要,该解决方法只会添加一个完全透明的行。开销很低,平均每个字幕通常为一个字节。
默认情况下,此解决方法已禁用。
11 另请参阅
ffmpeg, ffplay, ffprobe, libavcodec
12 作者
FFmpeg 开发人员。
有关作者的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如,通过在 FFmpeg 源代码目录中键入命令 git log
,或浏览在线存储库 https://git.ffmpeg.org/ffmpeg。
特定组件的维护人员列在源代码树中的文件 MAINTAINERS 中。
本文档于 2025 年 1 月 21 日 使用 makeinfo 生成。
由 telepoint.bg 提供托管