教程菜单 本页目录

编码器和解码器(编解码器)

1 描述

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

2 编解码器选项

libavcodec 提供了一些通用的全局选项,可以在所有编码器和解码器上设置。此外,每个编解码器可能支持所谓的私有选项,这些选项特定于给定的编解码器。

有时,全局选项可能只影响特定类型的编解码器,并且可能毫无意义或被其他编解码器忽略,因此您需要了解指定选项的含义。此外,有些选项仅用于解码或编码。

可以通过在 FFmpeg 工具中指定 -option 值来设置选项,或者通过在 AVCodecContext 选项中明确设置值或使用 libavutil/opt.h API 进行编程使用。

支持的选项列表如下:

b integer (encoding,audio,video)

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

ab integer (encoding,audio)

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

bt integer (encoding,video)

设置视频比特率容差(以比特/秒为单位)。在 1-pass 模式下,比特率容差指定速率控制愿意偏离目标平均比特率值的程度。这与最小/最大比特率无关。容差过低会对质量产生不利影响。

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

设置通用标志。

可能的值:

mv4

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

qpel

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

loop

使用环路滤波器。

qscale

使用固定 qscale。

pass1

在第一遍模式下使用内部 2 遍速率控制。

pass2

在第二遍模式下使用内部 2 遍速率控制。

gray

仅解码/编码灰度。

psnr

在编码期间设置错误[?]变量。

truncated

输入比特流可能会被随机截断。

drop_changed

不要输出参数与流中第一个解码帧不同的帧。丢弃帧时返回错误 AVERROR_INPUT_CHANGED。

ildct

使用隔行 DCT。

low_delay

强制低延迟。

global_header

将全局标头放置在额外数据中,而不是每个关键帧中。

bitexact

仅写入与平台、构建和时间无关的数据。((I)DCT 除外)。这可确保文件和数据校验和可重现并在平台之间匹配。其主要用途是回归测试。

aic

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

ilme

应用隔行扫描运动估计。

cgop

使用封闭的 gop。

output_corrupt

输出甚至可能损坏的帧。

time_base rational number

设置编解码器时间基准。

它是表示帧时间戳的基本时间单位(以秒为单位)。对于固定 fps 内容,时间基数应为 1 / frame_rate,时间戳增量应为相同的 1。

g integer (encoding,video)

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

ar integer (decoding/encoding,audio)

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

ac integer (decoding/encoding,audio)

设置音频通道数。

cutoff integer (encoding,audio)

设置截止带宽。(仅受选定编码器支持,请参阅其各自的文档部分。)

frame_size integer (encoding,audio)

设置音频帧大小。

除最后一帧之外,每个提交的帧必须包含每个通道恰好 frame_size 个样本。当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时,该值可能为 0,在这种情况下,帧大小不受限制。某些解码器会设置该值以指示恒定的帧大小。

frame_number integer

设置帧号。

delay integer
qcomp float (encoding,video)

设置视频量化器比例压缩 (VBR)。它在速率控制方程中用作常数。默认 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 值,它将根据编码器选择一个自动值。

默认值为 0。

b_qfactor float (encoding,video)

设置 P 和 B 帧之间的 qp 因子。

codec_tag integer
bug flags (decoding,video)

解决未自动检测到编码器错误的解决方法。

可能的值:

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

解决微软损坏解码器中的各种错误。

trunc

截断帧

strict integer (decoding/encoding,audio,video)

指定如何严格遵循标准。

可能的值:

very

严格遵守规范或参考软件的较旧更严格版本

strict

严格遵守规范中的所有内容,无论后果如何

normal
unofficial

允许非官方扩展

experimental

允许非标准化的实验性事物、实验性(未完成/正在进行中/未经过充分测试)解码器和编码器。注意:实验性解码器可能存在安全风险,请勿将其用于解码不受信任的输入。

b_qoffset float (encoding,video)

设置 P 帧和 B 帧之间的 QP 偏移。

err_detect flags (decoding,audio,video)

设置错误检测标志。

可能的值:

crccheck

验证嵌入的 CRC

bitstream

检测比特流规范偏差

buffer

检测不正确的比特流长度

explode

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

ignore_err

忽略解码错误并继续解码。如果您想要分析视频内容,因此无论如何都希望解码所有内容,这将非常有用。如果出现错误,此选项将不会产生令人愉悦的视频。

careful

将违反规范且未在野外发现的内容视为错误

compliant

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

aggressive

将一个理智的编码器不应该做的事情视为错误

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

设置最大比特率容差(以比特/秒为单位)。需要设置 bufsize。

minrate integer (encoding,audio,video)

设置最小比特率容差(以比特/秒为单位)。在设置 CBR 编码时最有用。否则用处不大。

bufsize integer (encoding,audio,video)

设置速率控制缓冲区大小(以位为单位)。

i_qfactor float (encoding,video)

设置 P 和 I 帧之间的 QP 因子。

i_qoffset float (encoding,video)

设置 P 和 I 帧之间的 QP 偏移。

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

自动选择与简单 IDCT 兼容的一

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点 AAN IDCT

slice_count integer
ec flags (decoding,video)

设置错误隐藏策略。

可能的值:

guess_mvs

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

deblock

对损坏的 MB 使用强去块滤波器

favor_inter

倾向于从前一帧而不是当前帧进行预测

bits_per_coded_sample integer
aspect rational number (encoding,video)

设置样本纵横比。

sar rational number (encoding,video)

设置样本纵横比。别名为纵横比。

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)

设置全像素比较功能。

可能的值:

sad

绝对差异总和,快速(默认)

sse

平方误差总和

satd

绝对 Hadamard 变换差异总和

dct

绝对 DCT 变换差异总和

psnr

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

bit

块所需的位数

rd

速率失真最佳,慢速

zero

0

vsad

绝对垂直差异之和

vsse

垂直差异平方和

nsse

噪声保持平方和差异

w53

5/3 小波,仅在雪中使用

w97

9/7 小波,仅在雪中使用

dctmax
chroma
subcmp integer (encoding,video)

设置子像素比较功能。

可能的值:

sad

绝对差异总和,快速(默认)

sse

平方误差总和

satd

绝对 Hadamard 变换差异总和

dct

绝对 DCT 变换差异总和

psnr

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

bit

块所需的位数

rd

速率失真最佳,慢速

zero

0

vsad

绝对垂直差异之和

vsse

垂直差异平方和

nsse

噪声保持平方和差异

w53

5/3小波,仅在雪中使用

w97

9/7小波,仅在雪中使用

dctmax
chroma
mbcmp integer (encoding,video)

设置宏块比较函数。

可能的值:

sad

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

sse

平方误差总和

satd

绝对 Hadamard 变换差异之和

dct

绝对 DCT 变换差异之和

psnr

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

bit

块所需的位数

rd

速率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差之平方和

nsse

噪声保留差之平方和

w53

5/3 小波,仅用于雪中

w97

9/7小波,仅在雪中使用

dctmax
chroma
ildctcmp integer (encoding,video)

设置隔行 dct 比较函数。

可能的值:

sad

绝对差异总和,快速(默认)

sse

平方误差总和

satd

绝对 Hadamard 变换差异总和

dct

绝对 DCT 变换差异总和

psnr

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

bit

块所需的位数

rd

速率失真最佳,慢速

zero

0

vsad

绝对垂直差异之和

vsse

垂直差异平方和

nsse

噪声保持平方和差异

w53

5/3 小波,仅在雪中使用

w97

9/7 小波,仅在雪中使用

dctmax
chroma
dia_size integer (encoding,video)

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

(1024, INT_MAX)

完整运动估计(最慢)

(768, 1024]

umh 运动估计

(512, 768]

十六进制运动估计

(256, 512]

l2s 菱形运动估计

[2,256]

var 菱形运动估计

(-1, 2)

小菱形运动估计

-1

有趣的钻石运动估计

(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 小波,仅在雪中使用

w97

9/7 小波,仅在雪中使用

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

跳过比特流编码。

ignorecrop

忽略来自 sps 的裁剪信息。

local_header

将全局标头放置在每个关键帧处,而不是放置在额外数据中。

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 flags (decoding/encoding,audio,video,subtitles)

可能的值:

mvs

对于支持该功能的编解码器,将运动矢量导出到帧侧数据中(请参阅 AV_FRAME_DATA_MOTION_VECTORS)。另请参阅 doc/examples/export_mvs.c。

prft

对于支持该功能的编解码器,将编码器生产者参考时间导出到数据包侧数据中(请参阅 AV_PKT_DATA_PRFT)。

venc_params

对于支持该功能的编解码器,通过帧侧数据导出视频编码参数(请参阅 AV_FRAME_DATA_VIDEO_ENC_PARAMS)。目前,支持 H.264 和 VP9。

film_grain

通过帧侧数据导出胶片颗粒参数(参见 AV_FRAME_DATA_FILM_GRAIN_PARAMS)。目前 AV1 解码器支持此功能。

threads integer (decoding/encoding,video)

如果所选编解码器实现支持多线程,请设置要使用的线程数。

可能的值:

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)

设置编码器编解码器配置文件。默认值为‘unknown’。编码器特定配置文件记录在相关编码器文档中。

level integer (encoding,audio,video)

设置编码器级别。此级别取决于特定的编解码器,可能与配置文件级别相对应。默认情况下设置为“未知”。

可能的值:

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)

根据选项值选择的帧类型使解码器丢弃处理。

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

可能的值:

none

不丢弃任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

丢弃除关键帧之外的所有帧。

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) 手册中的“通道布局”部分。

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

电影

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

线性

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 (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

色度衍生的 NCL

chroma-derived-c

色度衍生的 CL

ictcp

ICtCp

color_range integer (decoding/encoding,video)

如果用作输入参数,它将作为对解码器的提示,提示输入具有哪个 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
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)

设置音频解码器应优先使用的样本格式。默认值为无。

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)

“,”分隔的允许解码器列表。默认情况下,所有解码器都允许。

dump_separator string (input)

用于分隔命令行上打印的有关 Stream 参数的字段的分隔符。例如,使用换行符和缩进分隔字段:ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg

max_pixels integer (decoding/encoding,video)

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

apply_cropping bool (decoding,video)

如果裁剪参数是左侧和顶部参数所需对齐的倍数,则启用裁剪。如果对齐不满足要求,将部分应用裁剪以保持对齐。默认值为 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 rawvideo

原始视频解码器。

此解码器解码原始视频流。

4.2.1 选项

top top_field_first

指定输入视频的假定字段类型。

-1

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

0

假定为底场优先

1

假定为顶场优先

4.3 libdav1d

dav1d AV1 解码器。

libdav1d 允许 libavcodec 解码 AOMedia Video 1 (AV1) 编解码器。配置期间需要 libdav1d 标头和库。您需要使用 --enable-libdav1d 明确配置构建。

4.3.1 选项

libdav1d 包装器支持以下选项。

framethreads

设置解码期间使用的帧线程数量。默认值为 0(自动检测)。此选项在 libdav1d >= 1.0 中已弃用,将来会被删除。请改用选项 max_frame_delay 和全局选项线程。

tilethreads

设置解码期间使用的图块线程数量。默认值为 0(自动检测)。此选项在 libdav1d >= 1.0 中已弃用,将来会被删除。请改用全局选项线程。

max_frame_delay

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

filmgrain

如果比特流中存在胶片颗粒,则将胶片颗粒应用于解码后的视频。默认为库的内部默认值。此选项已弃用,将来会被删除。请参阅全局选项 export_side_data 以导出胶片颗粒参数而不是应用它。

oppoint

选择可扩展 AV1 比特流 (0 - 31) 的操作点。默认为库的内部默认值。

alllayers

输出可扩展 AV1 比特流的所有空间层。默认值为 false。

4.4 libdavs2

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

此解码器允许 libavcodec 使用 davs2 库解码 AVS2 流。

4.5 libuavs3d

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

libuavs3d 允许 libavcodec 解码 AVS3 流。配置期间需要存在 libuavs3d 标头和库。您需要使用 --enable-libuavs3d 明确配置构建。

4.5.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

4.6 libxevd

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

此解码器在配置期间需要 libxevd 标头和库。您需要使用 --enable-libxevd 明确配置构建。

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

4.6.1 选项

libxevd 包装器支持以下选项。xevd 等效选项或值列在括号中,以便于迁移。

要获取更准确、更全面的 libxevd 选项文档,请调用命令 xevd_app --help 或查阅 libxevd 文档。

threads (threads)

强制使用特定数量的线程

4.7 QSV 解码器

Intel QuickSync 视频解码器系列(VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1)。

4.7.1 常用选项

所有 qsv 解码器均支持以下选项。

async_depth

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

gpu_copy

视频和系统内存之间的 GPU 加速复制

default
on
off

4.7.2 HEVC 选项

hevc_qsv 的额外选项。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

在内部会话中加载的 :-separated 十六进制插件 UID 列表

4.8 v210

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

4.8.1 选项

custom_stride

设置 v210 数据的行大小(以字节为单位)。默认值为 0(自动检测)。您可以使用特殊的 -1 值表示无步长 v210,如 BOXX 文件中所示。

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 Low Bitrate Codec (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 明确配置构建。

存在用于 AMR-NB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-NB。

5.8 libopencore-amrwb

libopencore-amrwb 解码器包装器。

libopencore-amrwb 允许 libavcodec 解码自适应多速率宽带音频编解码器。使用它需要在配置期间存在 libopencore-amrwb 标头和库。您需要使用 --enable-libopencore-amrwb 明确配置构建。

存在用于 AMR-WB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-WB。

5.9 libopus

libopus 解码器包装器。

libopus 允许 libavcodec 解码 Opus 交互式音频编解码器。需要在配置期间存在 libopus 标头和库。您需要使用 --enable-libopus 明确配置构建。

存在用于 Opus 的 FFmpeg 本机解码器,因此用户无需此库即可解码 Opus。

6 字幕解码器

6.1 libaribb24

ARIB STD-B24 字幕解码器。

实现 ARIB STD-B24 标准的配置文件 A 和 C。

6.1.1 libaribb24 解码器选项

-aribb24-base-path path

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

默认未设置。

-aribb24-skip-ruby-text boolean

告诉解码器包装器跳过包含半高注音文本的文本块。

默认启用。

6.2 libaribcaption

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

实现日本 ARIB STD-B24 标准、巴西 ABNT NBR 15606-1 和菲律宾版 ISDB-T 的配置文件 A 和 C。

配置期间需要 libaribcaption 标头和库 (https://github.com/xqq/libaribcaption)。您需要使用 --enable-libaribcaption 明确配置构建。如果 libaribb24 和 libaribcaption 都已启用,则 libaribcaption 解码器优先。

6.2.1 libaribcaption 解码器选项

-sub_type subtitle_type

指定解码字幕的格式。

bitmap

图形图像。

ass

ASS 格式的文本。

text

简单的基于文本的输出,无格式。

默认值与 libaribb24 解码器相同。一些现有播放器(例如 mpv)需要 ARIB 字幕的 ASS 格式。

-caption_encoding encoding_scheme

指定输入字幕文本的编码方案。

auto

自动检测文本编码(默认)。

jis

ARIB STD B24 中定义的 8bit-char JIS 编码。此编码在日本用于 ISDB 字幕。

utf8

ARIB STD B24 中定义的 UTF-8 编码。此编码在菲律宾用于 ISDB-T 字幕。

latin

ABNT NBR 15606-1 中定义的拉丁字符编码。此编码在南美用于 SBTVD / ISDB-Tb 字幕。

-font font_name[,font_name2,...]

指定用于位图或 ass 类型字幕渲染的字体系列名称的逗号分隔列表。ass 类型字幕仅使用第一个字体名称。

如果未指定,则使用内部定义的默认字体系列。

-ass_single_rect boolean

ARIB STD-B24 规定某些字幕可以同时显示在不同位置(多矩形字幕)。由于某些播放器(例如旧版 mpv)无法处理单个 AVSubtitle 中的多个 ASS 矩形,或具有相同开始时间戳的多个持续时间不确定的 ASS 矩形,因此此选项可以更改行为,以便所有文本都显示在单个 ASS 矩形中。

默认值为 false。

如果您的播放器无法正确处理具有多个 ASS 矩形的 AVSubtitle,请将此选项设置为 true 或定义 ASS_SINGLE_RECT=1 以更改编译时的默认行为。

-force_outline_text boolean

指定是否始终为所有字符渲染轮廓文本,而不管字符样式的指示如何。

默认值为 false。

-outline_width number (0.0 - 3.0)

指定轮廓文本的宽度,以点为单位(相对)。

默认值为 1.5。

-ignore_background boolean

指定是否忽略背景颜色渲染。

默认值为 false。

-ignore_ruby boolean

指定是否忽略注音(注音假名)字符的渲染。

默认值为 false。

-replace_drcs boolean

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

默认值为 true。

-replace_msz_ascii boolean

指定是否将 MSZ(中等大小;半角)全角字母数字替换为半角字母数字。

默认为 true。

-replace_msz_japanese boolean

指定是否将某些 MSZ(中等大小;半角)全角日语特殊字符替换为半角字符。

默认为 true。

-replace_msz_glyph boolean

如果字体支持,指定是否用半宽字形替换 MSZ(中等大小;半宽)字符。此选项在 FreeType 或 DirectWrite 渲染器下使用 Adobe-Japan1 兼容字体。例如,IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、Yu Gothic、Yu Mincho 和 Meiryo。

默认为 true。

-canvas_size image_size

指定渲染字幕的画布分辨率;通常,这应该是输入视频的帧大小。这仅适用于将 -subtitle_type 设置为位图的情况。

libaribcaption 解码器假设位图渲染的输入帧大小如下:

  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 解码器使用示例

使用 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。可以通过将值设置为“禁用”来禁用此功能以进行调试。

aac_pns

使用感知噪声替代在解码过程中用不可察觉的白噪声替换低熵高频带。默认情况下,此功能处于启用状态,但可以通过使用“禁用”来禁用此功能以进行调试。

aac_tns

启用多抽头 FIR 滤波器的使用,该滤波器横跨高频带以在编码过程中隐藏量化噪声,并由解码器恢复。除了减少高范围内令人不快的伪影外,这还降低了高频段的熵,并允许中低频段使用更多位。默认情况下,它是启用的,但可以通过将选项设置为“禁用”来禁用它以进行调试。

aac_ltp

启用长期预测扩展,通过在整个帧中扩展频带中的恒定谐波峰值,可以提高非常低带宽情况下(例如语音或独奏钢琴音乐的编码)的编码效率。此选项由 profile: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 元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。一些选项会直接影响或影响生成的比特流的解码和播放,而其他选项仅供参考。一些选项会将原本可用于音频数据的比特添加到输出流,从而影响输出的质量。这些将在下面的选项列表中用注释相应地指出。

这些参数在几个公开的文档中有详细描述。

  • A/52:2010 - 数字音频压缩 (AC-3) (E-AC-3) 标准
  • A/54 - ATSC 数字电视标准使用指南
  • 杜比元数据指南
  • 杜比数字专业编码指南

8.2.1.1 元数据控制选项

-per_frame_metadata boolean

允许每帧元数据。指定编码器是否应检查每帧的元数据变化。

0

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

1

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

8.2.1.2 降混级别

-center_mixlev level

中心混合级别。降混为立体声时,解码器应应用于中心声道的增益量。仅当存在中心声道时,此字段才会写入比特流。该值指定为比例因子。有 3 个有效值:

0.707

应用 -3dB 增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用 -6dB 增益

-surround_mixlev level

环绕混音级别。解码器在混音为立体声时应应用于环绕声道的增益量。仅当存在一个或多个环绕声道时,此字段才会写入比特流。该值指定为比例因子。有 3 个有效值:

0.707

应用 -3dB 增益

0.500

应用 -6dB 增益(默认)

0.000

静音环绕声道

8.2.1.3 音频制作信息

音频制作信息是描述混音环境的可选信息。可以将两个字段全部或全部写入比特流。

-mixing_level number

混音级别。指定混音制作时制作环境中的峰值声压级 (SPL)。有效值为 80 到 111,或 -1(表示未知或未指示)。默认值为 -1,但如果将音频制作信息写入比特流,则不能使用该值。因此,如果 room_type 选项不是默认值,则 grinding_level 选项不能为 -1。

-room_type type

房间类型。描述在工作室或配音阶段的最终混音会话中使用的均衡。大房间是具有行业标准 X 曲线均衡的配音阶段;小房间具有平坦均衡。如果mixing_level选项和room_type选项都具有默认值,则该字段将不会写入比特流。

0
notindicated

未指示(默认)

1
large

大房间

2
small

小房间

8.2.1.4 其他元数据选项

-copyright boolean

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

0
off

不存在版权(默认)

1
on

存在版权

-dialnorm value

对话标准化。指示节目的平均对话音量低于数字 100% 满量程 (0 dBFS) 的程度。此参数确定音频再现期间的音量变化,将对话的平均音量设置为预设音量。目标是匹配节目源之间的音量。-31dB 的值将导致音频再现期间音量相对于源音量没有变化。有效值为 -31 到 -1 范围内的整数,默认值为 -31。

-dsur_mode mode

杜比环绕声模式。指定立体声信号是否使用杜比环绕声 (Pro Logic)。仅当音频流为立体声时,此字段才会写入比特流。使用此选项并不意味着编码器将实际应用杜比环绕声处理。

0
notindicated

未指示(默认)

1
off

未采用杜比环绕声编码

2
on

采用杜比环绕声编码

-original boolean

原始比特流指示器。指定此音频是否来自原始源而非副本。

0
off

非原始来源

1
on

原始来源(默认)

8.2.2 扩展比特流信息

扩展比特流选项是 A/52:2010 标准附件 D 中指定的备用比特流语法的一部分。它分为两部分。如果指定了组中的任何一个参数,则该组中的所有值都将写入比特流。对于已写入但未指定的值,将使用默认值。如果写入了混合级别,则解码器将使用这些值,而不是 center_mixlev 和 around_mixlev 选项中指定的值(如果它支持备用比特流语法)。

8.2.2.1 扩展比特流信息 - 第 1 部分

-dmix_mode mode

首选立体声下混模式。允许用户选择 Lt/Rt(杜比环绕声)或 Lo/Ro(普通立体声)作为首选立体声下混模式。

0
notindicated

未指示(默认)

1
ltrt

首选 Lt/Rt 降混

2
loro

首选 Lo/Ro 降混

-ltrt_cmixlev level

Lt/Rt 中心混音级别。在 Lt/Rt 模式下降混为立体声时,解码器应应用于中心声道的增益量。

1.414

应用 +3dB 增益

1.189

应用 +1.5dB 增益

1.000

应用 0dB 增益

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用 -6.0dB 增益

0.000

静音中心声道

-ltrt_surmixlev level

Lt/Rt 环绕声混合级别。在 Lt/Rt 模式下混音为立体声时,解码器应应用于环绕声道的增益量。

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益

0.500

应用 -6.0dB 增益(默认)

0.000

静音环绕声道

-loro_cmixlev level

Lo/Ro 中心混音级别。解码器在 Lo/Ro 模式下混音为立体声时应应用于中心声道的增益量。

1.414

应用 +3dB 增益

1.189

应用 +1.5dB 增益

1.000

应用 0dB 增益

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用 -6.0dB 增益

0.000

静音中心声道

-loro_surmixlev level

Lo/Ro 环绕声混合级别。在 Lo/Ro 模式下混音为立体声时,解码器应应用于环绕声道的增益量。

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益

0.500

应用 -6.0dB 增益(默认)

0.000

静音环绕声道

8.2.2.2 扩展比特流信息 - 部分2

-dsurex_mode mode

杜比环绕 EX 模式。指示流是否使用杜比环绕 EX(7.1 矩阵转换为 5.1)。使用此选项并不意味着编码器将实际应用杜比环绕 EX 处理。

0
notindicated

未指示(默认)

1
on

杜比环绕声 EX 关闭

2
off

杜比环绕声 EX 开启

-dheadphone_mode mode

杜比耳机模式。指示流是否使用杜比耳机编码(多声道矩阵化为 2.0 以用于耳机)。使用此选项并不意味着编码器将实际应用杜比耳机处理。

0
notindicated

未指示(默认)

1
on

杜比耳机关闭

2
off

杜比耳机打开

-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

立体声重矩阵化。启用/禁用立体声输入的重矩阵化。这是可选的 AC-3 功能,通过选择性地将左/右声道编码为中/侧来提高质量。此选项默认启用,强烈建议除测试目的外保持启用状态。

cutoff frequency

设置低通截止频率。如果未指定,编码器将选择由各种其他编码参数确定的默认值。

8.2.4 仅浮点 AC-3 编码选项

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

-channel_coupling boolean

启用/禁用通道耦合,这是一项可选的 AC-3 功能,通过将来自多个通道的高频信息合并到单个通道来提高质量。每个通道的高频信息在频域和时域中以较低的精度发送。这允许在较低频率中使用更多位,同时保留足够的信息来重建高频。此选项默认为浮点编码器启用,通常应保持启用状态,除非出于测试目的或为了提高编码速度。

-1
auto

由编码器选择(默认)

0
off

禁用通道耦合

1
on

启用通道耦合

-cpl_start_band number

耦合起始带。设置通道耦合起始带,范围从 1 到 15。如果使用高于带宽的值,它将降低到比耦合结束带小 1。如果使用自动,编码器将根据比特率、采样率和通道布局确定起始频带。如果禁用通道耦合,此选项无效。

-1
auto

由编码器选择(默认)

8.3 flac

FLAC(免费无损音频编解码器)编码器

8.3.1 选项

FFmpeg 的 flac 编码器支持以下选项。

compression_level

设置压缩级别,如果未明确设置,则为许多其他选项选择默认值。有效值为 0 到 12,默认值为 5。

frame_size

设置每个通道的帧大小(以样本为单位)。

lpc_coeff_precision

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

lpc_type

设置第一阶段 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.4 opus

Opus 编码器。

这是 Opus 格式的原生 FFmpeg 编码器。目前,它正在开发中,仅实现了编解码器的 CELT 部分。它的质量通常较差,最多与 libopus 编码器相同。

8.4.1 选项

b

以比特/秒为单位设置比特率。如果未指定,则使用通道数和布局进行良好猜测。

opus_delay

以毫秒为单位设置最大延迟。低于 20 毫秒的延迟将很快降低质量。

8.5 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 配置文件。

通过vbrflags +qscale选项启用的 VBR 编码是实验性的,仅适用于某些参数组合。

只有 libfdk-aac 0.1.3 或更高版本才支持编码 7.1 音频。

有关更多信息,请参阅 http://sourceforge.net/p/opencore-amr/fdk-aac/ 上的 fdk-aac 项目。

8.5.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,则启用加力燃烧器功能,如果设置为 0,则禁用。这不仅提高了质量,还提高了所需的处理能力。

默认值为 1。

eld_sbr

如果设置为 1,则为 ELD 启用 SBR(频谱带复制),如果设置为 0,则禁用。

默认值为 0。

eld_v2

如果设置为 1,则为 ELDv2 启用 ELDv2(用于 ELD 立体声信号的 LD-MPS 扩展),如果设置为 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/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 将音频文件转换为 CBR 64k kbps AAC,使用高效 AAC 配置文件:ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a

8.6 liblc3

liblc3 LC3(低复杂度通信编解码器)编码器包装器。

配置期间需要 liblc3 标头和库。您需要使用 --enable-liblc3 明确配置构建。

该编码器支持蓝牙 SIG LC3 编解码器的 LE Audio 协议,以及 LC3plus 的以下功能:

  • 帧持续时间为 2.5 和 5ms。
  • 高分辨率模式,48 KHz 和 96 kHz 采样率。

有关更多信息,请参阅 https://github.com/google/liblc3 上的 liblc3 项目。

8.6.1 选项

以下选项映射到共享 FFmpeg 编解码器选项。

b bitrate

以比特/秒为单位设置比特率。这将确定选定帧持续时间的编码帧的固定大小。

ar frequency

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

channels

设置音频通道数。

frame_duration

设置音频帧持续时间(单位:毫秒)。默认值为 10ms。允许的帧持续时间为 2.5ms、5ms、7.5ms 和 10ms。LC3(蓝牙 LE 音频)允许 7.5ms 和 10ms;LC3plus 允许 2.5ms、5ms 和 10ms。

10ms 帧持续时间在 LC3 和 LC3 plus 标准中可用。在此模式下,生成的比特流可以引用为 LC3 或 LC3plus。

high_resolution boolean

如果设置为 1,则启用高分辨率模式。高分辨率模式适用于所有 LC3plus 帧持续时间,采样率为 48 KHz 和 96 KHz。

编码器在较低采样率时自动关闭此模式,并在 96 KHz 时激活它。

在高比特率下应首选此模式。在此模式下,音频带宽始终达到奈奎斯特频率,而 LC3 在 48 KHz 时将带宽限制为 20 KHz。

8.7 libmp3lame

LAME(Lame 不是 MP3 编码器)MP3 编码器包装器。

配置期间需要 libmp3lame 标头和库。您需要使用 --enable-libmp3lame 明确配置构建。

请参阅 libshine 了解定点 MP3 编码器,但质量较低。

8.7.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.8 libopencore-amrnb

OpenCORE 自适应多速率窄带编码器。

配置期间需要 libopencore-amrnb 标头和库。您需要使用 --enable-libopencore-amrnb --enable-version3 明确配置构建。

这是一个单声道编码器。官方仅支持 8000Hz 采样率,但您可以通过将严格设置为“非官方”或更低来覆盖它。

8.8.1 选项

b

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

4750
5150
5900
6700
7400
7950
10200
12200
dtx

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

8.9 libopus

libopus Opus 交互式音频编解码器编码器包装器。

配置期间需要 libopus 标头和库。您需要使用 --enable-libopus 明确配置构建。

8.9.1 选项映射

大多数 libopus 选项都是仿照 opus-tools 中的 opusenc 实用程序建模的。以下是选项映射图,描述了 libopus 包装器支持的选项,以及括号中对应的 opusenc。

b (bitrate)

以比特/秒为单位设置比特率。FFmpeg 的 b 选项以比特/秒为单位表示,而 opusenc 的比特率以千比特/秒为单位。

vbr (vbr, hard-cbr, and cvbr)

设置 VBR 模式。 FFmpegvbr选项具有以下有效参数,括号中为 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“侧数据”的频率与预期数据包丢失成正比。默认值为禁用。

application (N.A.)

设置预期应用类型。有效选项如下:

voip

支持提高语音清晰度。

audio

支持忠实于输入(默认)。

lowdelay

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

cutoff (N.A.)

以 Hz 为单位设置截止带宽。参数必须是以下之一:4000、6000、8000、12000 或 20000,分别对应窄带、中带、宽带、超宽带和全带。默认值为 0(截止禁用)。请注意,libopus 强制对比特率 < 进行宽带截止15 kbps,除非使用仅 CELT(应用程序设置为“低延迟”)模式。

mapping_family (mapping_family)

设置编码器要使用的通道映射系列。默认值 -1 对单声道和立体声输入使用映射系列 0,否则使用映射系列 1。默认值还会禁用 libopus 中的环绕声掩蔽和 LFE 带宽优化,并要求输入包含 8 个或更少的通道。

其他值包括 0(单声道和立体声)、1(带掩蔽和 LFE 带宽优化的环绕声)和 255(具有未指定通道布局的独立流)。

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

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

8.10 libshine

Shine 定点 MP3 编码器包装器。

Shine 是一个定点 MP3 编码器。它在没有 FPU 的平台上性能要好得多,例如 armel CPU 和一些手机和平板电脑。但是,由于它更注重性能而不是质量,因此在质量方面它无法与 LAME 和其他生产级编码器相提并论。此外,根据该项目的主页,这个编码器可能存在错误,因为代码是很久以前编写的,而且该项目至少已经停工 5 年了。

这个编码器仅支持立体声和单声道输入。这也是仅限 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 的比特率(以比特/秒为单位)。shineenc -b 选项以千比特/秒为单位。

8.11 libtwolame

TwoLAME MP2 编码器包装器。

配置期间需要 libtwolame 标头和库。您需要使用 --enable-libtwolame 明确配置构建。

8.11.1 选项

libtwolame 包装器支持以下选项。 twolame 等效选项位于 FFmpeg 选项之后,位于括号中。

b (-b)

设置 CBR 的比特率(以比特/秒表示)。twolameb选项以千比特/秒表示。默认值为 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 音频版权标志。默认值为 0(禁用)。

original (--original)

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

8.12 libvo-amrwbenc

VisualOn 自适应多速率宽带编码器。

配置期间需要存在 libvo-amrwbenc 标头和库。您需要使用 --enable-libvo-amrwbenc --enable-version3 明确配置构建。

这是一个单声道编码器。官方仅支持 16000Hz 采样率,但您可以通过将严格设置为“非官方”或更低来覆盖它。

8.12.1 选项

b

以比特/秒为单位设置比特率。仅支持以下比特率,否则 libavcodec 将四舍五入到最接近的有效比特率。

6600
8850
12650
14250
15850
18250
19850
23050
23850
dtx

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

8.13 libvorbis

libvorbis 编码器包装器。

配置期间需要 libvorbisenc 标头和库。您需要使用 --enable-libvorbis 明确配置构建。

8.13.1 选项

libvorbis 包装器支持以下选项。这些选项的 oggenc 等效项列在括号中。

要获得更准确、更全面的 libvorbis 选项文档,请查阅 libvorbisenc 和 oggenc 的文档。请参阅 http://xiph.org/vorbis/、http://wiki.xiph.org/Vorbis-tools 和 oggenc(1)。

b (-b)

设置 ABR 的比特率(以比特/秒表示)。oggenc-b以千比特/秒表示。

q (-q)

设置 VBR 的恒定质量设置。该值应为 -1.0 到 10.0 范围内的浮点数。值越高,质量越好。默认值为“3.0”。

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

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

以 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.14 mjpeg

运动 JPEG 编码器。

8.14.1 选项

huffman

设置霍夫曼编码策略。可能的值:

default

使用默认的哈夫曼表。这是默认策略。

optimal

计算并使用最佳哈夫曼表。

8.15 wavpack

WavPack 无损音频编码器。

8.15.1 选项

括号中列出了 wavpack 命令行实用程序的等效选项。

8.15.1.1 共享选项

以下共享选项对此编码器有效。这里只记录有关此特定编码器的特殊说明。有关选项的一般含义,请参阅编解码器选项章节。

frame_size (--blocksize)

对于此编码器,此选项的范围在 128 到 131072 之间。默认值根据采样率和通道数自动确定。

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

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

8.15.1.2 私有选项

joint_stereo (-j)

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

on (1)

强制中/侧音频编码。

off (0)

强制左/右音频编码。

auto

让编码器自动决定。

optimize_mono

设置是否启用单声道优化。该选项仅对非单声道流有效。可用值:

on

启用

off

禁用

9 视频编码器

以下是一些当前可用的视频编码器的描述。

9.1 a64_multi、a64_multi5

A64 / Commodore 64 多色字符集编码器。a64_multi5 扩展了第五种颜色 (colram)。

9.2 Cinepak

Cinepak 又名 CVID 编码器。兼容 Windows 3.1 和旧版 MacOS。

9.2.1 选项

g integer

关键帧间隔。至少每 -g 帧插入一个关键帧,有时更快。

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 解码器。

max_strips integer
min_strips integer

要使用的最小和最大条带数。范围越宽,质量就越好。条带越多,质量就越好,但需要的比特数也越多。条带越少,产生的关键帧就越多。老式兼容的是 1..3。

strip_number_adaptivity integer

允许在帧之间更改多少条带。越高越好,但速度越慢。

9.3 GIF

GIF 图像/动画编码器。

9.3.1 选项

gifflags integer

设置用于 GIF 编码的标志。

offsetting

启用图片偏移。

默认启用。

transdiff

启用帧之间的透明度检测。

默认启用。

gifimage integer

启用每帧编码一个完整的 GIF 图像,而不是动画 GIF。

默认值为0

global_palette integer

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

如果禁用,则即使提供了全局调色板,每个帧也将始终写入调色板。

默认值为1

9.4 Hap

Vidvox Hap 视频编码器。

9.4.1 选项

format integer

指定要编码的 Hap 格式。

hap
hap_alpha
hap_q

默认值为hap

chunks integer

指定将帧分割成的块数,介于 1 和 64 之间。这允许对大帧进行多线程解码,但可能会以数据速率为代价。编码器可能会修改此值以均匀划分帧。

默认值为 1。

compressor integer

指定要使用的第二阶段压缩器。如果设置为 none,则块数将限制为 1,因为分块的未压缩帧没有任何好处。

none
snappy

默认值为snappy

9.5 jpeg2000

本机 jpeg 2000 编码器默认是有损的,可以使用 -q:v 选项设置编码质量。可以使用 -pred 1 选择无损编码。

9.5.1 选项

format integer

可以设置为 j2k 或 jp2(默认值),以便可以存储非 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

设置编码器要使用的进程顺序。可能的值包括:

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.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

使用以“:”分隔的键=值对列表设置 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 实际使用的量化器值不匹配 - 除以四以将实际量化器值映射到此范围)。默认为最小/最大(无约束)。

minrate maxrate bufsize rc_init_occupancy

设置速率控制缓冲参数。如果未设置则不使用 - 默认为不受约束的可变比特率。

threads

设置编码时要使用的线程数。这可能需要将 tiles 或 row-mt 选项也设置为实际完全使用指定的线程数。默认为主机支持的硬件线程数。

profile

设置编码配置文件。默认使用与输入的位深度和色度子采样相匹配的配置文件。

包装器还有一些特定选项:

cpu-used

设置质量/编码速度权衡。有效范围为 0 到 8,数字越大表示速度越快但质量越低。默认值为 1,速度越慢但质量越高。

auto-alt-ref

启用备用参考帧。默认为库的内部默认值。

arnr-max-frames (frames)

设置 altref 降噪最大帧数。默认值为 -1。

arnr-strength (strength)

设置 altref 降噪过滤器强度。范围为 -1 到 6。默认值为 -1。

aq-mode (aq-mode)

设置自适应量化模式。可能的值:

none (0)

已禁用。

variance (1)

基于方差。

complexity (2)

基于复杂度。

cyclic (3)

循环刷新。

tune (tune)

设置编码器调整的失真度量。默认为 psnr。

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

设置编码器在任何时候可以保持的最大帧数,以便进行前瞻。默认为库的内部默认值。

error-resilience

启用错误恢复功能:

default

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

默认情况下未启用。

crf

设置恒定质量(无比特率目标)和受限质量(具有最大比特率目标)模式的质量/大小权衡。有效范围为 0 到 63,数字越大表示质量越低,输出大小越小。仅在设置时使用;默认情况下仅使用比特率目标。

static-thresh

设置块的变化阈值,低于该阈值的块将被编码器跳过。以任意单位定义为非负整数,默认为零(不跳过任何块)。

drop-threshold

设置接近速率控制边界时丢弃帧的阈值。定义为目标缓冲区的百分比 - 当速率控制缓冲区低于此百分比时,将丢弃帧,直到重新填充到阈值以上。默认为零(不丢弃任何帧)。

denoise-noise-level (level)

颗粒合成要去除的噪声量。如果未设置此选项或将其设置为 0,则禁用颗粒合成。

denoise-block-size (pixels)

用于颗粒合成去噪的块大小。如果未设置,AV1 编解码器将使用默认值 32。

undershoot-pct (pct)

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

overshoot-pct (pct)

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

minsection-pct (pct)

GOP 比特率与目标比特率的最小百分比变化。如果未设置 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

将图块数量设置为图块行数和列数的对数 2。提供与 libvpx/VP9 的兼容性。

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

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

enable-cdef (boolean)

启用受限方向增强滤波器。libaom-av1 编码器默认启用 CDEF。

enable-restoration (boolean)

启用循环恢复过滤器。对于 libaom-av1,默认值为 true。

enable-global-motion (boolean)

启用使用全局运动进行块预测。默认值为 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)

启用角度增量帧内预测。默认为 true。

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

启用从亮度帧内预测预测色度。默认为 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)

在帧内预测中启用路径预测器。默认为 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 pt 变换。默认为 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 模式使用默认变换。默认为 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)

启用双重过滤。默认为 true。

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

启用差异加权复合。默认为 true。

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

启用距离加权复合。默认为 true。

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

启用单侧复合。默认为 true。

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

启用帧间楔形复合。默认为 true。

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

启用帧内楔形复合。默认为 true。

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

启用蒙版复合。默认为 true。

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

启用帧内复合。默认为 true。

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

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

aom-params

使用以“:”分隔的键值对列表设置 libaom 选项。有关受支持选项的列表,请参阅“AV1 特定选项”部分下的 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

设置要使用的图块行数的 log2(0-6)。

tile_columns

设置要使用的图块列数的 log2(0-4)。

svtav1-params

使用以“:”分隔的键=值对列表设置 SVT-AV1 选项。有关可接受参数的列表,请参阅 SVT-AV1 编码器用户指南。

9.9 libjxl

libjxl JPEG XL 编码器包装器。

配置期间需要 libjxl 标头和库。您需要使用 --enable-libjxl 明确配置构建。

9.9.1 选项

libjxl 包装器支持以下选项:

distance

设置目标 Butteraugli 距离。这是一个质量设置:距离越低,质量越高,距离 = 1.0 大致相当于 libjpeg 的摄影内容质量 90。设置距离 = 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 参数设置为以逗号 (,) 分隔的名称=值对列表。请参阅 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 单位的整数。

仅当使用标志 +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 -hcoder=libvpx、ffmpeg -hcoder=libvpx-vp9 或 vpxenc --help。更多信息可在 libvpx API 文档中找到。

b (target-bitrate)

以比特/秒为单位设置比特率。请注意,FFmpeg 的 b 选项以比特/秒为单位,而 vpxenc 的目标比特率以千比特/秒为单位。

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 / 比特率,buf-optimal-sz = bufsize * 1000 / 比特率 * 5 / 6。

rc_init_occupancy (buf-initial-sz)

设置在解码开始前应加载到 rc 缓冲区的位数。注意 vpxenc 的选项以毫秒为单位,libvpx 包装器会按如下方式转换该值:rc_init_occupancy * 1000 / 比特率。

undershoot-pct

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

overshoot-pct

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

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

设置 GOP 最大比特率(以比特/秒为单位)。注意,vpxenc 的选项指定为目标比特率的百分比,libvpx 包装器会按如下方式转换该值:(最大比特率 * 100 / 比特率)。

minrate (minsection-pct)

设置 GOP 最小比特率(以比特/秒为单位)。注意,vpxenc 的选项指定为目标比特率的百分比,libvpx 包装器会按如下方式转换该值:(最小比特率 * 100 / 比特率)。

minrate, maxrate, b end-usage=cbr

(最小比特率 == 最大比特率 == 比特率)。

crf (end-usage=cq, cq-level)
tune (tune)
psnr (psnr)
ssim (ssim)
quality, deadline (deadline)
best

使用最佳质量截止期限。名称不当且速度较慢,应避免使用此选项,因为它可能产生比良好质量更差的输出。

good

使用良好质量截止期限。与 cpu-used 选项一起使用时,这是速度和质量之间的良好权衡。

realtime

使用实时质量截止时间。

speed, cpu-used (cpu-used)

设置质量/速度比修饰符。较高的值会以牺牲质量为代价加快编码速度。

nr (noise-sensitivity)
static-thresh

设置块的变化阈值,低于该阈值的块将被编码器跳过。

slices (token-parts)

请注意,FFmpeg 的切片选项给出了分区总数,而 vpxenc 的标记部分则以 log2(分区) 的形式给出。

max-intra-rate

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

force_key_frames

VPX_EFLAG_FORCE_KF

Alternate reference frame related
auto-alt-ref

启用备用参考帧(仅限 2 次通过)。大于 1 的值可启用多层备用参考帧(仅限 VP9)。

arnr-maxframes

设置 altref 降噪最大帧数。

arnr-type

设置 altref 降噪滤波器类型:后向、前向、居中。

arnr-strength

设置 altref 降噪滤波器强度。

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

设置要提前查看帧类型和速率控制的帧数。

min-gf-interval

设置最小黄金/替代参考帧间隔(仅限 VP9)。

error-resilient

启用错误弹性功能。

sharpness integer

以降低 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 中的元数据字段传递带有以下键的标志。

vp8-flags

设置传入编码器的标志以指示当前帧的引用方案。有关更多详细信息,请参阅 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(屏幕)、2(具有更积极速率控制的屏幕)。

VP9-specific options
lossless

启用无损模式。

tile-columns

设置要使用的图块列数。注意,这是以 log2(tile_columns) 的形式给出的。例如,通过将图块列选项设置为 3,将请求 8 个图块列。

tile-rows

设置要使用的图块行数。注意,这是以 log2(tile_rows) 的形式给出的。例如,通过将图块行选项设置为 2,将请求 4 个图块行。

frame-parallel

启用帧并行可解码性功能。

aq-mode

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

colorspace color-space

设置输入颜色空间。 VP9 比特流支持发送以下色彩空间的信号:

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

启用基于行的多线程。

tune-content

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

corpus-complexity

语料库 VBR 模式是标准 VBR 的一种变体,其中复杂度分布中点是传入的,而不是针对特定剪辑或块计算的。

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

enable-tpl boolean

启用时间依赖模型。

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(仅限 Intra)或默认值。

preset

设置 VVenC 预设。

levelidc

设置 level idc。

tier

设置 vvc 层。

qp

设置恒定量化参数。

subopt boolean

设置主观(感知驱动)优化。默认值为 1(开启)。

bitdepth8 boolean

设置 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 boolean

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

-compression_level integer

对于有损,这是一个质量/速度权衡。对于给定的大小,值越高,质量越好,但编码时间越长。对于无损,这是一个大小/速度权衡。值越高,尺寸越小,但代价是编码时间增加。更具体地说,它控制使用的额外算法和压缩工具的数量,并改变这些工具的组合。这映射到 libwebp 中的方法选项。有效范围是 0 到 6。默认值为 4。

-quality float

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

-preset type

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

none

不要使用预设。

default

使用编码器默认值。

picture

数码照片,如肖像、内拍

photo

户外照片,自然光

drawing

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

icon

小尺寸彩色图像

text

文本类

9.16 libx264,libx264rgb

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

此编码器在配置期间需要 libx264 标头和库。您需要使用 --enable-libx264 明确配置构建。

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

许多 libx264 编码器选项都映射到 FFmpeg 全局编解码器选项,而独特的编码器选项则通过私有选项提供。此外,x264opts 和 x264-params 私有选项允许传递 libx264 x264_param_parse 函数接受的 key=value 元组列表。

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 的比特率以千比特/秒为单位。

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 值),并指定为映射到相应级别的整数(例如,值 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

设置编码标志。它可用于禁用封闭式 GOP 并通过将其设置为 -cgop 来启用开放式 GOP。结果类似于 x264 的 --open-gop 选项的行为。

rc_init_occupancy (vbv-init)

初始 VBV 缓冲区占用率

preset (preset)

设置编码预设。

tune (tune)

设置编码参数的调整。

profile (profile)

设置配置文件限制。

fastfirstpass

设置为 1 时,在编码第一遍时启用快速设置。设置为 0 时,与 x264 的 --slow-firstpass 选项具有相同的效果。

crf (crf)

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

crf_max (crf-max)

在 CRF 模式下,防止 VBV 降低此点以外的质量。

qp (qp)

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

aq-mode (aq-mode)

设置 AQ 方法。可能的值:

none (0)

已禁用。

variance (1)

方差 AQ(复杂性掩码)。

autovariance (2)

自动方差 AQ(实验性)。

aq-strength (aq-strength)

设置 AQ 强度,减少平坦和纹理区域的阻塞和模糊。

psy

设置为 1 时使用心理视觉优化。设置为 0 时,与 x264 的 --no-psy 选项具有相同的效果。

psy-rd (psy-rd)

设置心理视觉优化的强度,采用 psy-rd:psy-trellis 格式。

rc-lookahead (rc-lookahead)

设置要提前查看帧类型和速率控制的帧数。

weightb

设置为 1 时启用 B 帧的加权预测。设置为 0 时,与 x264 的 --no-weightb 选项具有相同的效果。

weightp (weightp)

设置 P 帧的加权预测方法。可能的值:

none (0)

已禁用

simple (1)

仅启用加权引用

smart (2)

同时启用加权引用和重复项

ssim (ssim)

在编码后启用计算和打印 SSIM 统计数据。

intra-refresh (intra-refresh)

设置为 1 时,启用周期性帧内刷新,而不是 IDR 帧。

avcintra-class (class)

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

bluray-compat (bluray-compat)

配置编码器以兼容蓝光标准。它是设置“bluray-compat=1 force-cfr=1”的简写。

b-bias (b-bias)

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

b-pyramid (b-pyramid)

设置保留某些 B 帧作为参考的方法。可能的值:

none (none)

已禁用。

strict (strict)

严格分层金字塔。

normal (normal)

非严格(不兼容蓝光)。

mixed-refs

设置为 1 时,启用每个分区使用一个引用,而不是每个宏块使用一个引用。设置为 0 时,其效果与 x264 的 --no-mixed-refs 选项相同。

8x8dct

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

fast-pskip

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

aud (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

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

这两个选项的参数都是用“:”分隔的 key=value 对列表。使用 x264opts 可以省略值,在这种情况下假定值为 1。

对于使用“:”作为分隔符的过滤器和 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

使用以“:”分隔的键=值对列表设置 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

使用以“:”分隔的键=值对列表设置 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 函数接受的 key=value 元组列表。

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 预设。设置编码器预设值以确定编码速度 [快、中、慢、安慰剂]

tune (tune)

设置编码器调谐参数 [psnr、zerolatency]

profile (profile)

设置编码器配置文件 [0:基线; 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

将全局标头放置在额外数据中,而不是每个关键帧中。

gmc

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

me_quality

设置运动估计质量级别。可能的值按速度降序排列,按质量升序排列:

0

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

1, 2

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

3, 4

启用上述所有功能,以及 8x8 块的高级菱形区域搜索和 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

编码结束时将平均 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 integer

关键帧间隔。至少每 -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 integer

指定编码器是否应将sequence_display_extension写入输出。

-1
auto

通过检查要写入的数据是否与默认值或未指定的值不同,自动决定是否写入(这是默认值)。

0
never

从不写入。

1
always

始终写入。

video_format integer

指定写入序列显示扩展的 video_format,指示视频图片的来源。默认值为“未指定”,可以是“component”、“pal”、“ntsc”、“secam”或“mac”。为了获得最大兼容性,请使用“component”。

a53cc boolean

将隐藏字幕(必须是 ATSC 兼容格式)导入输出。默认值为 1(开启)。

9.24 png

PNG 图像编码器。

9.24.1 私有选项

dpi integer

设置像素的物理密度,单位为每英寸点数,默认未设置

dpm integer

设置像素的物理密度,单位为每米点数,默认未设置

9.25 ProRes

Apple ProRes 编码器。

FFmpeg 包含 2 个 ProRes 编码器,即 prores-aw 和 prores-ks 编码器。可以使用 -vcodec 选项选择使用的编码器。

9.25.1 prores-ks 的私有选项

profile integer

选择要编码的 ProRes 配置文件

proxy
lt
standard
hq
4444
4444xq
quant_mat integer

选择量化矩阵。

auto
default
proxy
lt
standard
hq

如果设置为自动,将选择与配置文件匹配的矩阵。如果未设置,将选择提供最高质量的矩阵(默认)。

bits_per_mb integer

编码一个宏块需要分配多少位。不同的配置文件每个宏块使用 200 到 2400 位,最大值为 8000。

mbs_per_slice integer

每个切片中的宏块数(1-8);默认值(8)在几乎所有情况下都应该很好。

vendor string

覆盖 4 字节供应商 ID。自定义供应商 ID(如 apl0)将声明该流是由 Apple 编码器生成的。

alpha_bits integer

指定 alpha 分量的位数。可能值为 0、8 和 16。使用 0 可禁用 alpha 平面编码。

9.25.2 速度考虑因素

在默认操作模式下,编码器必须遵守帧约束(即不生成大于要求大小的帧),同时仍使输出图片尽可能好。包含大量小细节的帧更难压缩,编码器将花费更多时间为每个切片搜索合适的量化器。

设置更高的 bits_per_mb 限制将提高速度。

要获得最快的编码速度,请设置 qscale 参数(建议值为 4),不要设置大小约束。

9.26 QSV 编码器

Intel QuickSync 视频编码器系列 (MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)

9.26.1 速率控制方法

速率控制方法的选择如下:

  • 当指定 global_quality 时,将使用基于质量的模式。具体来说,这意味着
  • 否则,当使用b选项指定所需的平均比特率时,将使用基于比特率的模式。
  • 否则,将使用默认的速率控制方法 CQP。

请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。将详细程度设置为详细或更高,以查看 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 codec flag -> GopOptFlag
  • 对于 CQP 模式,i_qfactor/i_qoffset 和 b_qfactor/b_qoffset 分别设置 QPP 和 QPI 以及 QPP 和 QPB 之间的差异。
  • 将编码器选项设置为值 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 编解码器的 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 编解码器的最大/最小 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 帧,将忽略 max_frame_size 设置的值。

max_frame_size_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 表示按不重叠的切片进行水平刷新。对于切片,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 的 :-separated 列表。

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

打开此选项以启用 transformskip。它在与 ICL 相同或更新的平台上受支持。

int_ref_type

指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会对 I 帧造成的编码比特流大小产生重大影响。SDK 编码器通过使用帧内 MB 在刷新周期中对每帧的一部分进行编码来实现此目的。none 表示不刷新。vertical 表示按 MB 列进行垂直刷新。horizontal 表示按 MB 行进行水平刷新。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 速率控制模式下无效。

9.27 snow

9.27.1 选项

iterative_dia_size

迭代运动估计的直径大小

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

在 open-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 行表示。(默认为自动,即使用最小图块列/行数)。

tile_groups

设置图块组数。所有图块将尽可能均匀地分布到每个图块组中。(默认为 1)。

h264_vaapi

profile 设置 profile_idc 和 constrain_set*_flags 的值。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

profilelevel分别设置 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

profilelevel设置 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 之间(默认值)。较低的值会降低压缩率和质量。功能较差的解码器可能无法处理超过 3 的 wavelet_depth 值。

wavelet_type

设置变换类型。目前仅实施 5_3(LeGall)和 9_7(Deslauriers-Dubuc),其中 9_7 的压缩率更高,因此是默认值。

slice_width
slice_height

设置每个切片的切片大小。值越大,压缩效果越好。为了与其他限制较多的解码器兼容,请使用 32 的切片宽度和 8 的切片高度。

tolerance

以百分比设置速率控制系统的下冲容差。这是为了防止运行昂贵的搜索。

qm

设置默认使用的量化矩阵预设或当 wavelet_depth 设置为 5 时使用的量化矩阵预设ㆍ- 默认 使用规范中的默认量化矩阵,并使用第五级的值进行扩展。这在保留细节和忽略伪影之间提供了良好的平衡。ㆍ- 平坦 使用完全归零的量化矩阵。这会增加 PSNR,但可能会降低感知度。用于虚假基准测试。ㆍ- 色彩 减少细节,但尝试在极低比特率下保留色彩。

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 时,启用一种解决方法,使所有字幕中的像素行数均等。这解决了某些播放器在行数为奇数时切断底行的问题。如果需要,解决方法只会添加一个完全透明的行。开销很低,通常平均每个字幕一个字节。

默认情况下,此解决方法是禁用的。

本页目录