FFmpeg编解码器文档

网站翻译由林建有提供支持

目录

1 描述

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

2 编解码器选项

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

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

可通过指定 -选项 在FFmpeg工具中设置,或者通过在AVCodecContext选项中显式设置值或使用libavutil/opt.hAPI以编程方式使用。

以下是支持的选项列表:

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

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

ab 整数 (编码,音频)

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

bt 整数 (编码,视频)

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

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

设置通用标志。

可能的值:

mv4

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

qpel

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

loop

使用循环滤波器。

qscale

使用固定质量比例。

pass1

在第一次通过模式下使用内部两次速率控制。

pass2

在第二次通过模式下使用内部两次速率控制。

gray

仅解码/编码灰度。

psnr

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

truncated

输入位流可能被随机截断。

drop_changed

不输出与流中首次解码帧参数不同的帧。当帧被丢弃时返回错误AVERROR_INPUT_CHANGED。

ildct

使用交错DCT。

low_delay

强制低延迟。

global_header

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

bitexact

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

aic

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

ilme

应用交错运动估计。

cgop

使用封闭GOP。

output_corrupt

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

time_base 有理数

设置编解码器时间基。

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

g 整数 (编码,视频)

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

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

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

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

设置音频通道数。

cutoff 整数 (编码,音频)

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

frame_size 整数 (编码,音频)

设置音频帧大小。

每个提交的帧(除最后一个帧外)必须包含每个通道恰好frame_size个样本。如果编解码器具有CODEC_CAP_VARIABLE_FRAME_SIZE设置,则此处可能为0,在这种情况下帧大小不限。某些解码器会设置此值以显示固定帧大小。

frame_number 整数

设置帧编号。

delay 整数
qcomp 浮点数 (编码,视频)

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

qblur 浮点数 (编码,视频)

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

qmin 整数 (编码,视频)

设置视频量化比例范围的最小值(VBR)。范围应在-1到69之间,默认值为2。

qmax 整数 (编码,视频)

设置视频量化比例范围的最大值(VBR)。范围应在-1到1024之间,默认值为31。

qdiff 整数 (编码,视频)

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

bf 整数 (编码,视频)

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

值必须是-1到16之间的整数。0表示禁用B帧。如果使用-1,编码器将根据需求自动选择值。

默认值为0。

b_qfactor 浮点数 (编码,视频)

在P帧和B帧之间设置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

解决微软解码器中的各种问题。

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

自动选择一个与简单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 有理数 (编码,视频)

设置样本宽高比。等价于宽高比.

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小波,仅用于雪

w97

9/7小波,仅用于雪

dctmax
chroma
subcmp 整数 (编码,视频)

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

可能的值:

sad

绝对差之和,快速(默认)

sse

平方差之和

satd

绝对值哈达玛变换差之和

dct

绝对值DCT变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

保留噪声的平方差

w53

5/3小波,仅用于雪

w97

9/7小波,仅用于雪

dctmax
chroma
mbcmp 整数 (编码,视频)

设置宏块比较函数。

可能的值:

sad

绝对差之和,快速(默认)

sse

平方差之和

satd

绝对值哈达玛变换差之和

dct

绝对值DCT变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

保留噪声的平方差

w53

5/3小波,仅用于雪

w97

9/7小波,仅用于雪

dctmax
chroma
ildctcmp 整数 (编码,视频)

设置隔行DCT比较函数。

可能的值:

sad

绝对差之和,快速(默认)

sse

平方差之和

satd

绝对值哈达玛变换差之和

dct

绝对值DCT变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

保留噪声的平方差

w53

5/3小波,仅用于雪

w97

9/7小波,仅用于雪

dctmax
chroma
dia_size 整数 (编码,视频)

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

(1024, INT_MAX)

完全运动估计(最慢)

(768, 1024]

UMH运动估计

(512, 768]

六边形运动估计

(256, 512]

L2S菱形运动估计

[2,256]

变量菱形运动估计

(-1, 2)

小菱形运动估计

-1

搞笑菱形运动估计

(INT_MIN, -1)

SAB菱形运动估计

last_pred 整数 (编码,视频)

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

precmp 整数 (编码,视频)

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

可能的值:

sad

绝对差之和,快速(默认)

sse

平方差之和

satd

绝对值哈达玛变换差之和

dct

绝对值DCT变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

保留噪声的平方差

w53

5/3小波,仅用于雪

w97

9/7小波,仅用于雪

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

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

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

将编码器生产者参考时间导出到包边数据(参见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 整数 (解码/编码,视频)

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

可能的值:

auto, 0

自动选择要设置的线程数

默认值是'auto’.

dc 整数 (编码,视频)

设置intra_dc_precision。

nssew 整数 (编码,视频)

设置nsse权重。

skip_top 整数 (解码,视频)

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

skip_bottom 整数 (解码,视频)

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

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

设置编码器编解码器配置文件。默认值是'unknown'。编码器特定的配置文件在相关的编码器文档中记录。

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

设置编码器级别。该级别取决于特定的编解码器,可能对应于配置文件级别。默认设置为'unknown’.

可能的值:

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

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

mblmin 整数 (编码,视频)

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

mblmax 整数 (编码,视频)

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

skip_loop_filter 整数 (解码,视频)
skip_idct 整数 (解码,视频)
skip_frame 整数 (解码,视频)

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

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

可能的值:

none

不过滤任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

除关键帧外,丢弃所有帧。

nointra

除I帧外,丢弃所有帧。

all

丢弃所有帧。

默认值是'default’.

bidir_refine 整数 (编码,视频)

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

keyint_min 整数 (编码,视频)

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

refs 整数 (编码,视频)

设置用于运动补偿的参考帧。

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

设置率失真最优量化。

mv0_threshold 整数 (编码,视频)
compression_level 整数 (编码,音频,视频)
bits_per_raw_sample 整数
channel_layout 整数 (解码/编码,音频)

参见(ffmpeg-utils)ffmpeg-utils(1)手册中的声道布局部分需要的语法。

rc_max_vbv_use 浮点数 (编码,视频)
rc_min_vbv_use 浮点数 (编码,视频)
color_primaries 整数 (解码/编码,视频)

可能的值:

bt709

BT.709

bt470m

BT.470 M

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

film

电影

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

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

可能的值:

bt709

BT.709

gamma22

BT.470 M

gamma28

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

linear

线性

log
log100

对数

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 整数 (解码/编码,视频)

可能的值:

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 整数 (解码/编码,视频)

如果用作输入参数,它用作解码器的提示,指示输入的color_range。 可能的值:

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

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

可能的值:

left
center
topleft
top
bottomleft
bottom
log_level_offset 整数

设置日志级别偏移。

slices 整数 (编码,视频)

片数,用于并行编码。

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

选择使用哪些多线程方法。

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

可能的值:

slice

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

使用片的多线程工作仅在视频编码时有片时有效。

frame

一次解码多个帧。

默认值是'slice+frame’.

audio_service_type 整数 (编码,音频)

设置音频服务类型。

可能的值:

ma

主音频服务

ef

效果音

vi

视觉残疾

hi

听觉残疾

di

对话

co

解说

em

紧急情况

vo

旁白

ka

卡拉OK

request_sample_fmt sample_fmt (解码,音频)

设置音频解码器的首选样本格式。默认值是none.

pkt_timebase 有理数
sub_charenc 编码 (解码,字幕)

设置输入字幕字符编码。

field_order field_order (视频)

设置/覆盖视频的字段顺序。 可能的值:

progressive

逐行视频

tt

隔行视频,顶部字段先编码和显示

bb

隔行视频,底部字段先编码和显示

tb

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

bt

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

skip_alpha 布尔值 (解码,视频)

设置为1以禁用处理alpha(透明度)。这类似于gray'标志用于flags选项,该选项跳过而不是alpha的信息。默认值是0。

codec_whitelist 列表 (输入)

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

dump_separator 字符串 (输入)

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

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg
max_pixels 整数 (解码/编码,视频)

每张图像的最大像素数。这值可用于快速避免因大图像而产生的内存不足失败。

apply_cropping 布尔值 (解码,视频)

如果裁剪参数是左侧和顶部参数所需对齐的倍数,则启用裁剪功能。 如果未达到对齐,裁剪将部分应用以保留对齐。 默认值是1(启用)。 注意:需求的对齐取决于是否AV_CODEC_FLAG_UNALIGNED被设置以及CPU。AV_CODEC_FLAG_UNALIGNED不能通过命令行更改。此外,硬件解码器将不应用左/上裁剪。

3 解码器

FFmpeg中的解码器是配置好的元素,用于解码多媒体流。

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

您可以使用配置选项禁用所有解码器--disable-decoders并有选择地启用/禁用单个解码器,选项为--enable-decoder=解码器 / --disable-decoder=解码器.

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

4 视频解码器

以下是一些当前可用视频解码器的说明。

4.1 av1

AOMedia Video 1 (AV1) 解码器。

4.1.1 选项

operating_point

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

4.2 hevc

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

解码器支持最多两个视图的 MV-HEVC 多视图流。输出的视图通过向解码器提供视图 ID 列表来选择(view_ids选项)。此选项可以在解码器初始化之前静态设置,也可以通过get_format()回调设置 - 当视图数量或 ID 在解码过程中动态变化时非常有用。

默认情况下,仅解码基本层。

请注意,如果使用ffmpeg命令行工具,应使用其手册中记录的视图指定器,而不是此处记录的选项。

4.2.1 选项

view_ids (MV-HEVC)

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

view_ids_available (MV-HEVC)

调用者可以读取此选项以检索活动 VPS 中可用视图 ID 的数组。对于单层视频,数组为空。

当从get_format()回调中读取时,该选项的值保证是准确的。它也可能在其他时间(例如打开解码器之后)被设置,但该值仅供参考,可能不正确(例如当流包含多个不同的 VPS NALUs 时)。

view_pos_available (MV-HEVC)

调用者可以读取此选项以检索活动 VPS 中的视图位置数组(左、右或未指定),作为AVStereo3DView值。当数组可用时,其元素适用于view_ids_available的相应元素,也就是说,view_pos_available[i]包含具有 IDview_ids_available[i].

的视图的位置。view_ids_available

4.3 rawvideo

原始视频解码器。

此解码器解码 rawvideo 流。

4.3.1 选项

top top_field_first

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

-1

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

0

假定为底场优先。

1

假定为顶场优先。

4.4 libdav1d

dav1d AV1 解码器。

libdav1d 允许 libavcodec 解码 AOMedia Video 1 (AV1) 编码。配置期间需要存在 libdav1d 标头和库。 您需要显式配置构建,使用--enable-libdav1d.

4.4.1 选项

以下选项由 libdav1d 包装器支持。

framethreads

设置解码时使用的帧线程数。默认值为 0(自动检测)。 此选项对于 libdav1d >= 1.0 已被废弃,未来将被移除。请使用 选项max_frame_delay以及全局选项threads代替。

tilethreads

设置解码时使用的瓦片线程数。默认值为 0(自动检测)。 此选项对于 libdav1d >= 1.0 已被废弃,未来将被移除。请使用 全局选项threads代替。

max_frame_delay

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

filmgrain

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

oppoint

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

alllayers

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

4.5 libdavs2

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

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

4.6 libuavs3d

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

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

4.6.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

4.7 libxevd

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

此解码器在配置期间需要存在 libxevd 标头和库。 您需显式配置构建,使用--enable-libxevd.

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

4.7.1 选项

以下选项由 libxevd 包装器支持。 xevd 等效选项或值被列出以便迁移。

若要更准确和全面的 libxevd 选项文档, 执行命令xevd_app --help或查阅 libxevd 文档。

threads (threads)

强制使用特定的线程数

4.8 QSV 解码器

英特尔 QuickSync 视频解码器家族(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 对无行距的 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 解码互联网低比特率编解码器(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。 如果同时启用了libaribb24libaribcaptionlibaribcaption解码器优先。

6.2.1 libaribcaption 解码器选项

-sub_type subtitle_type

指定解码字幕的格式。

bitmap

图形图像。

ass

ASS 格式化文本。

text

简单的无格式文本输出。

默认为asslibaribb24解码器相同。 某些当前播放器(如mpv)期望 ARIB 字幕为 ASS 格式。

-caption_encoding encoding_scheme

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

auto

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

jis

ARIB STD B24 中定义的 8 位字符 JIS 编码。 此编码用于日本的 ISDB 字幕。

utf8

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

latin

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

-font font_name[,font_name2,...]

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

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

-ass_single_rect 布尔值

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

默认是false.

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

-force_outline_text 布尔值

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

默认是false.

-outline_width 数字 (0.0 - 3.0)

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

默认是1.5.

-ignore_background 布尔值

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

默认是false.

-ignore_ruby 布尔值

指定是否忽略渲染类似于注音(带假名)字符的内容。

默认是false.

-replace_drcs 布尔值

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

默认是true.

-replace_msz_ascii 布尔值

指定是否将MSZ(中号;半宽)全宽字母数字替换为半宽字母数字。

默认是true.

-replace_msz_japanese 布尔值

指定是否将一些MSZ(中号;半宽)全宽日本特殊字符替换为半宽字符。

默认是true.

-replace_msz_glyph 布尔值

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

默认是true.

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

使用输入帧尺寸1920x1080通过ffplay工具显示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未设置,它仅影响在开始框和结束框之间的字符,通常为字幕。默认值是0如果txt_transparent被设置,否则是255。

7 编码器

编码器是FFmpeg中的配置元素,允许编码多媒体流。

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

您可以使用配置选项禁用所有编码器--disable-encoders并使用选项有选择性地启用/禁用单个编码器--enable-encoder=编码器 / --disable-encoder=编码器.

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

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_msaac_pns启用进行自我调节。

anmr

平均噪声与掩蔽比(ANMR)基于网格的解决方案。

这是一个实验性编码器,目前产生较低质量、更加不稳定且比默认双循环编码器慢,但具有潜力。 目前不支持aac_isaac_pns选项。 目前不推荐。

fast

恒定量化器方法。

使用双循环算法的一个较便宜版本,不尝试进行太多智能调整。在低比特率(低于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 等级

中心混音等级。当下混音到立体声时,解码器应对中心通道应用增益的量。只有在存在中心通道时才会将该字段写入比特流。该值指定为比例因子,有效值为:

0.707

应用-3dB增益

0.595

应用-4.5dB增益(默认值)

0.500

应用-6dB增益

-surround_mixlev 等级

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

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规范。这些选项分为两部分。如果组中的任意一个参数被指定,则该组中的所有值都会写入比特流。未指定的参数将使用默认值。如果混音等级被写入,比特流支持替代比特流语法的解码器将使用该值而不是在center_mixlevsurround_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增gain (默认)

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 类型

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

0
standard

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

1
hdcd

HDCD A/D转换器

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。如果自动被使用,则开始频段将由编码器根据比特率、采样率和通道布局决定。如果禁用通道耦合,此选项无效。

-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

对Cholesky分解进行LPC分析时使用的迭代次数

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

选择米糠参数是否精确或近似。如果设置为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 编码是实验性的,并且仅适用于某些参数组合。

支持编码 7.1 音频仅适用于 libfdk-aac 0.1.3 或更高版本。

更多信息请参见 fdk-aac 项目:http://sourceforge.net/p/opencore-amr/fdk-aac/.

8.5.1 选项

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

b

以比特/秒设定比特率。如果未明确指定比特率,则根据所选配置文件自动设置为合适的值。

如果启用了 VBR 模式,该选项将被忽略。

ar

以赫兹单位设置音频采样率。

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 启用 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/通道

默认值为 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.

该编码器支持 Bluetooth SIG LC3 编解码器用于 LE 音频协议,以及以下 LC3plus 的功能:

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

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

8.6.1 选项

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

b bitrate

以比特/秒设置比特率。这将确定编码帧的固定大小(对于选定的帧持续时间)。

ar frequency

以赫兹为单位设置音频采样率。

channels

设置音频通道数。

frame_duration

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

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

high_resolution boolean

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

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

在高比特率下应优先使用此模式。在此模式下,与 48 KHz 的 LC3 相比,音频带宽一直延伸到奈奎斯特频率,而 LC3 将带宽限制在 20 KHz。

8.7 libmp3lame

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

在配置期间需要 libmp3lame 头文件和库的存在。你需要明确配置构建:--enable-libmp3lame.

参见libshine,它是一个固定点 MP3 编码器,但质量较低。

8.7.1 选项

libmp3lame 包装器支持以下选项。lame选项的等效部分列在括号中。

b (-b)

为 CBR 或 ABR 设置比特率,单位为比特/秒。LAMEbitrate单位为千比特/秒。

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)

设置 MPEG 音频版权标志(设置值为 1)。默认值为 0(禁用)。

original (-o)

设置 MPEG 音频原版标志(设置值为 1)。默认值为 1(启用)。

8.8 libopencore-amrnb

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

需要在配置过程中存在 libopencore-amrnb 头文件和库。你需要明确配置构建:--enable-libopencore-amrnb --enable-version3.

这是一个仅支持单声道的编码器。官方仅支持 8000Hz 采样率,但可以通过设置strict至“unofficial”或更低值来覆盖。

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 选项是根据opusenc工具的模型定义的。以下是描述 libopus 包装器支持的选项及其opusenc等效选项的选项映射图表。

b (bitrate)

以比特/秒设置比特率。FFmpeg 的b选项以比特/秒表示,而opusencbitrate以千比特/秒表示。

vbr (vbr, hard-cbr, and cvbr)

设置 VBR 模式。FFmpeg 的vbr选项包含以下有效参数,与opusenc选项的等效值在括号中:

off (hard-cbr)

使用恒定比特率(CBR)编码。

on (vbr)

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

constrained (cvbr)

使用受限可变比特率(CVBR)编码。

compression_level (comp)

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

frame_duration (framesize)

设置最大帧大小,或帧的持续时间(以毫秒为单位)。参数必须严格为以下值之一:2.5、5、10、20、40、60。较小的帧大小可实现更低延迟,但在给定比特率下质量较低。帧大小超过 20 毫秒仅适用于相对较低的比特率。默认值为 20 毫秒。

packet_loss (expect-loss)

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

fec (n/a)

启用带内前向纠错编码。packet_loss必须为非零,才能利用 FEC“边数据”(辅助数据)的频率与预期数据包丢失率成正比。默认情况下禁用。

application (N.A.)

设置预期的应用程序类型。以下列出有效选项:

voip

倾向于增强语音清晰度。

audio

倾向于忠实于输入信号(默认)。

lowdelay

限制仅使用延迟最低的模式(禁用语音优化模式)。

cutoff (N.A.)

设置截止带宽(以赫兹为单位)。参数必须严格为以下值之一:4000、6000、8000、12000 或 20000,它们分别对应窄带、中带、宽带、超宽带和全频带。默认值为 0(禁用截止)。注意,libopus 在比特率 < 15 kbps 的情况下强制宽带截止,除非使用 CELT-only 模式(application设置为“lowdelay”)。

mapping_family (mapping_family)

设置编码器使用的声道映射族。默认值为 -1,对于单声道和立体声输入使用映射家族 0;否则使用映射家族 1。默认值还会禁用 libopus 中的环绕屏蔽和低频效果(LFE)带宽优化,并要求输入内容包含不多于 8 个声道。

其他值包括:0(用于单声道和立体声);1(支持环绕声屏蔽和低频效果优化);255(使用独立流且未指定声道布局)。

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

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

8.10 libshine

Shine定点MP3编码器包装器。

Shine是一个定点MP3编码器。在没有浮点运算单元的平台上(如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的比特率(单位为bit/s)。shineenc -b选项以千比特每秒为单位表示。

8.11 libtwolame

TwoLAME MP2编码器包装器。

配置过程中需要存在libtwolame头文件和库。你需要显式地配置构建方式--enable-libtwolame.

8.11.1 选项

libtwolame包装器支持以下选项。twolame等价选项遵循FFmpeg规范,用括号注明。

b (-b)

设置CBR的比特率(单位为bit/s)。twolame b选项以千比特每秒为单位表示。默认值为128k。

q (-V)

设置实验性VBR的质量。最大值范围为-50到50,推荐范围为-10到10,值越高质量越好。此选项仅对ffmpeg命令行工具有效。对于库接口用户,使用global_quality.

mode (--mode)

设置生成音频的模式。可能的值:

auto

根据输入自动选择模式。这是默认选项。

stereo

立体声

joint_stereo

联合立体声

dual_channel

双声道

mono

单声道

psymodel (--psyc-mode)

设置编码中使用的心理声学模型。参数必须是-1至4之间的整数,包含边界。值越高,质量越好。默认值为3。

energy_levels (--energy)

设置为1时启用能量水平扩展。默认值为0(禁用)。

error_protection (--protect)

设置为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采样率,但你可通过设置strict为‘unofficial’或更低值来覆盖。

8.12.1 选项

b

设置比特率(单位bit/s)。仅以下比特率受支持,否则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的比特率(单位为bit/s)。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)

设置最小比特率(单位为bit/s)。oggenc -m选项以千比特每秒为单位表示。

maxrate (-M)

设置最大比特率(单位为bit/s)。oggenc -M选项以千比特每秒为单位表示,仅对ABR模式有效。

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

为瞬态块设置噪声底线偏移。是-15.0至0.0之间的浮点数。负偏移指示编码器特别注意编码音频的瞬态清晰度。为更好的瞬态响应质量,可能需要更高的比特率。

8.14 mjpeg

运动JPEG编码器。

8.14.1 选项

huffman

设置Huffman编码策略。可能的值:

default

使用默认Huffman表。这是默认策略。

optimal

计算并使用最佳Huffman表。

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扩展为第五种颜色(色彩RAM)。

9.2 Cinepak

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

9.2.1 选项

g 整数

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

q:v 整数

质量因子。值越低越好。值越高比特率越低。 下表列出为各种-q:v值的akiyo_cif.y4m编码的比特率:-g 100:

-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 整数

可以设置为j2kjp2(默认值),使其可以存储非rgb色彩空间。

tile_width 整数

设置瓦片宽度。范围为1到1073741824。默认值为256。

tile_height 整数

设置瓦片高度。范围为1到1073741824。默认值为256。

pred 整数

允许设置离散小波变换(DWT)类型

dwt97int (Lossy)
dwt53 (Lossless)

默认值为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

使用一组=对以":"分隔来设置rav1e选项。参见rav1e --help了解选项列表。

例如使用-rav1e-params:

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

设置目标比特率(单位:bit/s)。默认情况下将使用可变比特率模式。若同时设置了maxrateminrate为相同值,则使用恒定比特率模式。若另外设置了crf,则将使用受限质量模式。

g keyint_min

设置关键帧的位置。GOP大小设置关键帧之间的最大距离;若设置为0,输出流将仅包括内部帧。最小距离将被忽略,除非它与GOP大小相同,此时关键帧将总是以固定间隔出现。默认不设置,所以在没有此选项的情况下,库可以完全自由地决定关键帧的位置。

qmin qmax

设置最小/最大量化值。有效范围为0到63(警告:这并不匹配AV1实际使用的量化值 - 除以四可将真实量化值映射至此范围)。默认为最大/最小值(无约束)。

minrate maxrate bufsize rc_init_occupancy

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

threads

设置编码时使用的线程数量。这可能需要设置tilesrow-mt选项以实现在指定线程数量下的完全利用。默认值为主机支持的硬件线程数。

profile

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

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

cpu-used

设置质量/编码速度权衡。有效范围是0到8,较高的数值表示更快的速度和较低的质量。默认值为1,即速度较慢但质量较高。

auto-alt-ref

启用备用参考帧功能。默认使用库的内部默认值。

arnr-max-frames ()

设置备用参考帧降噪的最大帧计数。默认值为-1。

arnr-strength (强度)

设置备用参考帧降噪滤波强度。范围为-1到6。默认值为-1。

aq-mode (aq-mode)

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

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

设置编码器在变化阈值低于此值时跳过块的阈值。定义为任意单位的非负整数,默认值为0(没有块被跳过)。

drop-threshold

设置接近速率控制范围时丢弃帧的阈值。当速率控制缓冲区低于目标缓冲区的这个百分比时,帧会被丢弃,直到缓冲区再次填充超过阈值为止。默认值为0(没有帧被丢弃)。

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 (Requires 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 (布尔值) (Requires libaom >= v2.0.0)

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

enable-1to4-partitions (布尔值) (Requires libaom >= v2.0.0)

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

enable-ab-partitions (布尔值) (Requires libaom >= v2.0.0)

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

enable-angle-delta (布尔值) (Requires libaom >= v2.0.0)

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

enable-cfl-intra (布尔值) (Requires libaom >= v2.0.0)

启用色度预测来自于亮度内预测。默认值为true。

enable-filter-intra (布尔值) (Requires libaom >= v2.0.0)

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

enable-intra-edge-filter (布尔值) (Requires libaom >= v2.0.0)

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

enable-smooth-intra (布尔值) (Requires libaom >= v2.0.0)

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

enable-paeth-intra (布尔值) (Requires libaom >= v2.0.0)

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

enable-palette (布尔值) (Requires libaom >= v2.0.0)

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

enable-flip-idtx (布尔值) (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 (布尔值) (Requires libaom >= v2.0.0)

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

reduced-tx-type-set (布尔值) (Requires libaom >= v2.0.0)

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

use-intra-dct-only (布尔值) (Requires libaom >= v2.0.0)

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

use-inter-dct-only (布尔值) (Requires libaom >= v2.0.0)

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

use-intra-default-tx-only (布尔值) (Requires libaom >= v2.0.0)

仅对INTRA模式使用Default-transform。默认值为false。

enable-ref-frame-mvs (布尔值) (Requires libaom >= v2.0.0)

启用时间运动矢量预测。默认值为true。

enable-reduced-reference-set (布尔值) (Requires libaom >= v2.0.0)

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

enable-obmc (布尔值) (Requires libaom >= v2.0.0)

启用OBMC。默认值为true。

enable-dual-filter (布尔值) (Requires libaom >= v2.0.0)

启用双滤波器。默认值为true。

enable-diff-wtd-comp (布尔值) (Requires libaom >= v2.0.0)

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

enable-dist-wtd-comp (布尔值) (Requires libaom >= v2.0.0)

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

enable-onesided-comp (布尔值) (Requires libaom >= v2.0.0)

启用单边合成。默认值为true。

enable-interinter-wedge (布尔值) (Requires libaom >= v2.0.0)

启用interinter楔形合成。默认值为true。

enable-interintra-wedge (布尔值) (Requires libaom >= v2.0.0)

启用interintra楔形合成。默认值为true。

enable-masked-comp (布尔值) (Requires libaom >= v2.0.0)

启用遮罩合成。默认值为true。

enable-interintra-comp (布尔值) (Requires libaom >= v2.0.0)

启用interintra合成。默认值为true。

enable-smooth-interintra (布尔值) (Requires libaom >= v2.0.0)

启用平滑的interintra模式。默认值为true。

aom-params

使用键值对列表设置libaom选项=以":"分隔。有关支持的选项列表,请参见aomenc --help在“AV1特定选项”部分。

例如,使用以下方式指定libaom编码选项-aom-params:

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。设置距离=0.1通常能实现大多数输入的透明度。默认值为1.0。

effort

设置使用的编码努力。较高的努力值产生更一致的质量,并通常生成更优的质量/比特率曲线,但需要更多的CPU时间。有效值范围为1到9,默认值为7。

modular

强制编码器使用模块模式,而非自动选择。默认值为有损编码使用VarDCT,无损编码使用模块。VarDCT通常优于模块用于有损编码,但不支持无损编码。

9.10 libkvazaar

Kvazaar H.265/HEVC编码器。

配置过程中需要存在libkvazaar头文件和库。需要显式配置构建为--enable-libkvazaar.

9.10.1 选项

b

设置目标视频比特率(bit/s),并启用速率控制。

kvazaar-params

将kvazaar参数设置为一组以逗号分隔的名称值对(,)。具体选项请参见kvazaar文档。name=value pairs separated by commas (,). See kvazaar documentation for a list of options.

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 is set to ‘fixed’.

loopfilter

启用环路滤波器(如果设置为1则自动启用)。禁用时设置为0。

profile

设置配置文件限制。如果设置为值‘main’则启用CABAC(将标志设置为1)。SEncParamExt.iEntropyCodingModeFlag flag to 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

设置视频比特率(bit/s),用于CBR(恒定比特率)模式。如果启用VBR(可变比特率)模式,忽略此选项。

flags

用于通过flag启用恒定质量模式(VBR)编码,并启用qscale flag, and to enable the pass1pass2模式。

g

设置 GOP 大小。

global_quality

以 lambda 单位设置全局质量(整数)。

仅当以 VBR 模式启用时相关flags +qscale。该值通过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 示例

  • 设置最大恒定质量(VBR)编码,ffmpeg:
    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-vp9vpxenc --help。更多信息可在 libvpx API 文档中找到。

b (目标码率)

以比特/秒设置比特率。请注意,FFmpeg 的b选项以比特/秒表示, 而vpxenctarget-bitrate以千比特/秒表示。

g (kf-max-dist)
keyint_min (kf-min-dist)
qmin (min-q)

最小(最佳质量)量化器。

qmax (max-q)

最大(最差质量)量化器。 可按帧更改。

bufsize (buf-sz, buf-optimal-sz)

设置速率控制缓冲区大小(以比特为单位)。注意vpxenc的选项以毫秒为单位,libvpx 包装器将其值转换为:buf-sz = bufsize * 1000 / bitrate, buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6.

rc_init_occupancy (buf-initial-sz)

设置解码前需要加载到速率控制缓冲区中的比特数。 注意vpxenc的选项以毫秒为单位,libvpx 包装器将其值转换为:rc_init_occupancy * 1000 / bitrate.

undershoot-pct

设置目标比特率的数据率下限百分比。

overshoot-pct

设置目标比特率的数据率上限百分比。

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

以比特/秒设置 GOP 最大比特率。注意vpxenc的选项以目标比特率的百分比表示,libvpx 包装器将其值转换为:(maxrate * 100 / bitrate).

minrate (minsection-pct)

以比特/秒设置 GOP 最小比特率。注意vpxenc的选项以目标比特率的百分比表示,libvpx 包装器将其值转换为:(minrate * 100 / bitrate).

minrate, maxrate, b end-usage=cbr

(minrate == maxrate == bitrate).

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

使用最佳质量截止时间。命名不恰当且相当慢,应避免使用此选项, 因为它可能会导致质量比“好”更差。

good

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

realtime

使用实时质量截止时间。

speed, cpu-used (cpu-used)

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

nr (noise-sensitivity)
static-thresh

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

slices (token-parts)

请注意,FFmpeg 的slices选项给出了分区总数, 而vpxenctoken-parts给出的是log2(partitions).

max-intra-rate

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

force_key_frames

VPX_EFLAG_FORCE_KF

Alternate reference frame related
auto-alt-ref

启用替代参考帧的使用(仅双通道)。 值大于 1 时启用多层替代参考帧(仅 VP9)。

arnr-maxframes

设置替代参考帧降噪的最大帧数。

arnr-type

设置替代参考帧降噪滤波类型:前向、后向、居中。

arnr-strength

设置替代参考帧降噪滤波强度。

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

设置用于帧类型和速率控制的前视帧数。

min-gf-interval

设置黄金帧/备用参考帧的最小间隔(仅 VP9)。

error-resilient

启用错误恢复功能。

sharpness 整数

以降低 PSNR 的代价增加锐度。 有效范围为 [0, 7]。

ts-parameters

使用以冒号分隔的 key=value 对列表设置时间扩展配置。 例如,通过以下方式指定时间扩展参数: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

以下是每个参数的简单说明, 请参考struct vpx_codec_enc_cfg部分内容vpx/vpx_encoder.h了解更多详细信息。

ts_number_layers

时间编码层数。

ts_target_bitrate

每个时间层的目标比特率(单位为 kbps)。 (比特率应包括较低时间层的比特率)。

ts_rate_decimator

每个时间层的帧率递减因子。

ts_periodicity

定义帧时间层成员的序列长度。

ts_layer_id

定义帧时间层成员的模板。

ts_layering_mode

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

0

内部未提供时间分层标志, 依赖于通过metadata字段传入的标志,AVFrame包含以下键。

vp8-flags

设置传递给编码器的标志, 以指示当前帧的参考方案。 参考函数vpx_codec_encode中的vpx/vpx_encoder.h部分内容了解更多详情。

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)的形式给出。例如, 通过将tile-columns选项设置为 3 即可请求 8 列瓦片。

tile-rows

设置使用的瓦片行数。注意,这以log2(tile_rows)的形式给出。 例如,通过将tile-rows选项设置为 2 即可请求 4 行瓦片。

frame-parallel

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

aq-mode

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

colorspace color-space

设置输入色彩空间。VP9 比特流支持指示以下色彩空间:

rgbsRGB
bt709bt709
unspecified未知
bt470bgbt601
smpte170msmpte170
smpte240msmpte240
bt2020_nclbt2020
row-mt 布尔值

启用基于行的多线程处理。

tune-content

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

corpus-complexity

语料库 VBR 模式是标准 VBR 的一种变体,其中的复杂性分布中点是传递进来的,而不是为特定剪辑或块计算得出的。

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

enable-tpl 布尔值

启用时间依赖模型。

ref-frame-config

使用每帧元数据,设置结构的成员vpx_svc_ref_frame_config_t中的vpx/vp8cx.h来精确控制参考方案和帧缓冲区管理。
使用以冒号分隔的 key=value 对列表。 例如,

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

指示要更新的缓冲区槽编号。

rfc_update_last

指示是否更新 LAST 帧。

rfc_update_golden

指示是否更新 GOLDEN 帧。

rfc_update_alt_ref

指示是否更新 ALT_REF 帧。

rfc_lst_fb_idx

LAST 帧缓冲区索引。

rfc_gld_fb_idx

GOLDEN 帧缓冲区索引。

rfc_alt_fb_idx

ALT_REF 帧缓冲区索引。

rfc_reference_last

指示是否参考 LAST 帧。

rfc_reference_golden

指示是否参考 GOLDEN 帧。

rfc_reference_alt_ref

指示是否参考 ALT_REF 帧。

rfc_reference_duration

指示帧持续时间。

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

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

设置级别 idc。

tier

设置 vvc 层级。

qp

设置恒定量化参数。

subopt 布尔值

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

bitdepth8 布尔值

设置 8 位编码模式,而不是使用 10 位。默认值为 0(关闭)。

period

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

vvenc-params

通过列表设置 vvenc 选项,=对以 “:” 分隔。参见vvencapp --fullhelpvvencFFapp --fullhelp以获取选项列表。

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

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

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

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

9.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 的方法选项,有效范围为 0 到 6。 默认值为 4。

-quality 浮点数

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

-preset 类型

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

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)、 无损模式、用于细节保留的心理优化(自适应量化、心理 RD、心理网格)。

许多 libx264 的编码器选项被映射到 FFmpeg 的全局编解码器选项, 而唯一的编码器选项则通过私有选项提供。 此外,x264optsx264-params私有选项允许以 key=value 对列表的形式传递到 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 (比特率)

设置比特率,单位为比特每秒。注意FFmpeg的b选项以比特每秒表达,而x264bitrate为千比特每秒。

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值;如果是正值则忽略,否则将被使用。

此值可以通过AVCodecContextAPI设置(例如直接设置AVCodecContext值),并作为整数值映射到对应的级别(例如值31映射到H.264级别IDC "3.1",如在x264_levels表格中定义的)。当值非正数时将忽略。

或者它可以作为一个私有选项设置,覆盖在AVCodecContext中设置的值,在这种情况下必须指定为级别IDC标识符(例如"3.1"),如H.264附录A中定义的。

sc_threshold (scenecut)

设置场景变化检测的阈值。

trellis (trellis)

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

nr (nr)

噪声减少

me_range (merange)

像素运动搜索的最大范围。

me_method (me)

设置运动估计方法。可能的值按速度递减顺序为:

dia (dia)
epzs (dia)

半径为1的菱形搜索(最快)。“epzs”是“dia’.

hex (hex)

半径为2的六边形搜索。

umh (umh)

不均匀多六边形搜索。

esa (esa)

穷举搜索。

tesa (tesa)

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

在B帧中启用权重预测时设置为1。当设置为0时,其效果与x264--no-weightb选项相同。

weightp (weightp)

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

none (0)

禁用。

simple (1)

仅启用有权重的参考。

smart (2)

同时启用有权重的参考和副本。

ssim (ssim)

在编码后启用计算和输出SSIM统计信息。

intra-refresh (intra-refresh)

启用周期性内部刷新代替IDR帧时设置为1。

avcintra-class (class)

将编码器配置为生成AVC内部帧。 有效值为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

对于filterpsy-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

例如,要指定libx264编码选项,可以使用ffmpeg:

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

运行命令以获取完整的libx264选项列表,或查阅libx264文档。x264 --fullhelp or consult the libx264 documentation.

a53cc boolean

将封闭字幕(必须是ATSC兼容格式)导入到输出中。 仅mpeg2和h264解码器提供这些功能。默认值为1(开)。

udu_sei boolean

如果可用,将非注册的用户数据SEI导入到输出中。默认值为0(关)。

mb_info boolean

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

提供常用用法的编码预设,以便它们可以与通用预设系统一起使用(例如传递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选项,列表以key=value对分隔,以":"分隔。详见x265 --help选项列表。

例如指定libx265编码选项可以使用-x265-params:

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选项,列表以key=value对分隔,以":"分隔。

例如指定libxavs2编码选项可以使用-xavs2-params:

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"允许传递一个key=value元组列表, 这些元组列表可以通过libxeveparse_xeve_params功能接受。

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

9.19.1 选项

以下选项由libxeve包装器支持。 列出了与xeve对应的选项或值,以便简化迁移。

为了减少文档重复,仅记录私有选项和一些需要特别注意的选项。 有关未记录的通用选项的文档,请参阅Codec选项章节.

要获得更准确和广泛的libxeve选项文档,请执行命令xeve_app --help或参考libxeve文档。

b (比特率)

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

bf (B帧数量)

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

g (关键帧间隔)

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

preset (预设)

设置xeve预设。 设置编码器预设值以确定编码速度[快、中、慢、极慢]

tune (调优)

设置编码器的调优参数[PSNR,无延迟]

profile (配置文件)

设置编码器配置文件[0: 基线; 1: 主流]

crf (CRF)

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

qp (QP)

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

threads (线程数)

强制使用指定数量的线程

9.20 libxvid

Xvid MPEG-4 Part 2编码器包装器。

该编码器在配置期间需要libxvidcore头文件和库的存在。 需要显式配置构建,使用--enable-libxvid --enable-gpl.

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

9.20.1 选项

以下选项由libxvid包装器支持。一些 选项虽列出但未被记录,它们 对应于共享编解码器选项。请参阅Codec选项章节以了解它们的文档。其他未列出的共享选项 对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区块的高级菱形区域搜索以及半像素的细化。

3, 4

启用上述所有功能,加上8x8区块的高级菱形区域搜索和半像素细化, 还启用用于P帧和B帧的色度平面运动估算。

5, 6

启用上述所有功能,加上扩展16x16和8x8区块搜索。

mbd

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

simple

使用宏块比较功能算法(默认值)。

bits

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

rd

启用上述所有功能,加上基于率失真的半像素和四分之一像素细化 8x8区块,以及使用方形模式的基于率失真的搜索。

lumi_aq

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

variance_aq

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

lumi_aq结合使用时,结果质量不会 优于两者中的任一独立指定效果。换句话说,结果质量将是两者中较差的一个效果。

trellis

设置率失真最优量化。

ssim

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

off

禁用SSIM信息显示。

avg

在编码结束时将平均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框架中的编码器(包括音频和视频)提供了包装器。 它可以访问软件和硬件编码器。 视频编码器可以接受nv12或yuv420p的输入(某些编码器支持两者, 有些仅支持其中之一——实际上,nv12在硬件编码器中更安全)。

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 整数

指定写入到sequence display extension中的video_format, 指示视频画面的来源。默认值为‘unspecified’, 可以是‘component’, ‘pal’, ‘ntsc’, ‘secam’或‘mac’。 为了最大兼容性,使用‘component’.

a53cc 布尔值

将闭合字幕(必须是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

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

bits_per_mb 整数

分配给一个宏块编码的位数。不同配置文件使用 200到2400位每宏块之间的范围,最大值为8000。

mbs_per_slice 整数

每个片中的宏块数量(1-8);默认值(8) 在几乎所有情况下都适用。

vendor 字符串

覆盖4字节的供应商ID。 一个自定义供应商ID例如apl0将声明程序是由 Apple编码器生成的。

alpha_bits 整数

指定alpha通道的位数。 可能的值是0, 816。 使用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编解码器标志 (该-qscaleffmpeg选项)。
    • - LA_ICQ- 带有前瞻的智能恒定质量,当同时设置了look_ahead选项时。
    • - ICQ- 否则,为智能恒定质量。对于ICQ模式,全局 质量范围为1到51,其中1代表最佳质量。
  • 否则,当用b选项指定所需的平均比特率时,使用基于比特率的模式。
    • - LA- 带有前瞻的可变比率,当同时指定了look_ahead选项时。
    • - VCM- 视频会议模式,当设置了vcm选项时。
    • - CBR- 恒定比特率,当设置了maxrate并等于平均比特率时。
    • - VBR- 可变比特率,当设置了maxrate但高于平均比特率时。
    • - AVBR- 平均可变比特率模式,当未设置maxrate,同时avbr_accuracyavbr_convergence都设为非零值。该模式在Windows上可用于H264和HEVC。
  • 否则使用默认的码率控制方法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编解码器标志 ->GopOptFlag
  • 对于CQP模式,i_qfactor/i_qoffsetb_qfactor/b_qoffset设置QPPQPI的差异, 以及QPPQPB的差异。
  • coder选项设置为值vlc将使H.264编码器使用CAVLC而不是CABAC。

9.26.3 通用选项

以下选项由所有qsv编码器使用。

异步深度

指定应用程序在显式同步结果之前执行的异步操作数。 如果为零,则未指定值。

预设

此选项列出了从最快(最佳速度)到最慢(最佳质量)的选择范围。

veryfast
faster
fast
medium
slow
slower
veryslow
强制IDR

将I帧强制为IDR帧。

低功耗

对于编码器,设置该标志为ON以降低功耗和GPU使用量。

9.26.4 运行时选项

以下选项可以在qsv编码期间使用。

全局质量
i量化因子
i量化偏移
b量化因子
b量化偏移

在h264_qsv和hevc_qsv中支持。 更改这些值以重置qsv编解码器的qp配置。

最大帧大小

在h264_qsv和hevc_qsv中支持。 更改此值以重置qsv编解码器的最大帧大小配置。

gop大小

更改此值以重置qsv编解码器的gop配置。

内部参考类型
内部参考周期大小
内部参考qp偏移
内部参考周期距离

在h264_qsv和hevc_qsv中支持。 更改这些值以重置qsv编解码器的内部刷新配置。

最大qp值
最小qp值
最大I帧qp值
最小I帧qp值
最大P帧qp值
最小P帧qp值
最大B帧qp值
最小B帧qp值

在h264_qsv中支持。 更改这些值以重置qsv编解码器的最大/最小qp配置。

低延迟brc

在h264_qsv、hevc_qsv和av1_qsv中支持。 更改此值以重置qsv编解码器的低延迟brc配置。

帧率

更改此值以重置qsv编解码器的帧率配置。

比特率
码率缓冲区大小
初始缓冲区占用率
码率最大值

更改这些值以重置 QSV 编解码器的比特率控制配置。

图片定时 SEI

支持 h264_qsv 和 hevc_qsv。 更改该值以重置 QSV 编解码器的图片定时 SEI 配置。

qsv 参数

设置 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 对 I 帧的设置。

max_frame_size_p

P 帧的最大编码大小(单位:字节)。如果该值设置为大于零,则会忽略 max_frame_size 对 P 帧的设置。

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 消息放入一个 NAL 单元中。

max_dec_frame_buffering

DPB 缓冲的最大帧数。

look_ahead

使用带前视的 VBR 算法。

look_ahead_depth

前视的帧深度数量。

look_ahead_downsampling

用于前视分析保存帧的缩放因子。

unknown
auto
off
2x
4x
int_ref_type

指定内部刷新类型。内部刷新的主要目标是在不显著影响由于 I 帧引起编码比特流大小的情况下改善抗误码性。SDK 编码器通过在每个刷新周期的每帧部分使用内部 MBs 的编码实现这一目标。none表示无刷新。vertical表示垂直刷新,按宏块列刷新。horizontal表示水平刷新,按宏块行刷新。slice表示按切片水平刷新,且无重叠。在slice情况下,忽略 in_ref_cycle_size。要启用内部刷新,B 帧应设置为 0。

int_ref_cycle_size

指定刷新周期内的图片数量,从 2 开始。0 和 1 为无效值。

int_ref_qp_delta

为插入的内部 MBs 指定 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_accuracyavbr_convergence用于平均可变比特率控制(AVBR)算法。 该算法专注于整体编码质量,同时在指定的比特率target_bitrate范围内达到avbr_accuracy的精确度, 在avbr_Convergence周期后。此方法不遵循 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 帧的最大编码大小(单位:字节)。如果该值设置为大于零,则会忽略 max_frame_size 对 I 帧的设置。

max_frame_size_p

P 帧的最大编码大小(单位:字节)。如果该值设置为大于零,则会忽略 max_frame_size 对 P 帧的设置。

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 可以支持高层级)。 该选项仅在指定 level 选项时生效。

main
high
gpb

1: GPB(通用 P/B 帧)

0: 普通 P 帧。

tile_cols

用于瓦片编码的列数。

tile_rows

用于瓦片编码的行数。

aud

插入访问单元分隔符 NAL。

pic_timing_sei

插入含有 pic_struct_syntax 元素的图片定时 SEI。

transform_skip

启用 transformskip,可在 ICL 或更新的平台上支持。

int_ref_type

指定内部刷新类型。内部刷新的主要目标是在不显著影响由于 I 帧引起编码比特流大小的情况下改善抗误码性。SDK 编码器通过在每个刷新周期的每帧部分使用内部 MBs 的编码实现这一目标。none表示无刷新。vertical表示垂直刷新,按宏块列刷新。horizontal表示水平刷新,按宏块行刷新。slice表示按切片水平刷新,且无重叠。在slice情况下,忽略 in_ref_cycle_size。要启用内部刷新,B 帧应设置为 0。

int_ref_cycle_size

指定刷新周期内的图片数量,从 2 开始。0 和 1 为无效值。

int_ref_qp_delta

为插入的内部 MBs 指定 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_accuracyavbr_convergence用于平均可变比特率控制(AVBR)算法。 该算法专注于整体编码质量,同时在指定的比特率target_bitrate范围内达到avbr_accuracy的精确度, 在avbr_Convergence周期后。此方法不遵循 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 使用。

配置文件
unknown
simple
main
high

9.26.8 VP9选项

这些选项由 vp9_qsv 使用。

配置文件
unknown
profile0
profile1
profile2
profile3
tile_cols

用于分块编码的列数(需要 libmfx >= 1.29)。

tile_rows

用于分块编码的行数(需要 libmfx >= 1.29)。

9.26.9 AV1选项

这些选项由 av1_qsv 使用(需要 libvpl)。

配置文件
unknown
main
tile_cols

用于分块编码的列数。

tile_rows

用于分块编码的行数。

adaptive_i

此标志控制 QSV 编码器插入 I 帧,将此标志打开以允许将帧类型从 P 和 B 改变为 I。

adaptive_b

此标志控制将帧类型从 B 改变为 P。

b_strategy

此选项控制 B 帧作为参考帧的使用。

extbrc

扩展码率控制。

look_ahead_depth

look ahead 的深度,以帧数为单位。扩展码率控制选项开启时可用。

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

迭代运动估算的搜索区域大小。

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 功能,此选项不起作用。请确保分配足够的 hw_frames 以适应大量 async_depth 的使用。

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_idcconstraint_set*_flaglevel设置level_idc.

coder

设置熵编码器(默认为cabac)。可能的值:

ac
cabac

使用 CABAC。

vlc
cavlc

使用 CAVLC。

aud

在流中包含访问单元分隔符(默认情况下未包含)。

sei

设置要包含的 SEI 消息类型。 以下值的某些组合:

identifier

包含一个user_data_unregistered消息,其中包含有关 编码器的信息。

timing

包含图片计时参数(buffering_periodpic_timing消息)。

recovery_point

适当位置包含恢复点(recovery_point消息)。

hevc_vaapi

profilelevel设置general_profile_idcgeneral_level_idc的值。

aud

在流中包含访问单元分隔符(默认情况下未包含)。

tier

设置general_tier_flag。如果未明确指定,则此设置可能 会影响为流选择的等级。

sei

设置要包含的 SEI 消息类型。 以下值的某些组合:

hdr

如果输入帧具有 HDR 元数据,则包含 HDR 元数据 (mastering_display_colour_volumecontent_light_level消息)。

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设置q_idx用于 P 帧(范围 0-255)。

loop_filter_level
loop_filter_sharpness

手动设置循环滤波器参数。

支持 B 帧,但输出流始终以编码顺序排列,而非显示顺序。启用 B 帧时,可能需要使用vp9_raw_reorder位流过滤器将输出流修改为正确的显示顺序。

仅生成正常帧 -vp9_superframe位流过滤器可能 需要生成可用于所有解码器的流。

9.29 vbn

Vizrt 二进制图像编码器。

此格式由广播供应商 Vizrt 使用,用于快速纹理流传输。 格式的先进功能如纹理数据的 LZW 压缩或生成 mipmaps 未被支持。

9.29.1选项

format 字符串

设置 VBN 文件使用的纹理压缩。 可设置为dxt1, dxt5raw。默认值为dxt5.

9.30 vc2

SMPTE VC-2(以前为 BBC Dirac Pro)。 此编解码器主要针对专业广播,但由于它支持 yuv420、yuv422 和 yuv444,具有 8 位(有限范围或完整范围)、10 位或 12 位,这使其适合其他需要低开销和低压缩(如录屏)任务。

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

设置每个分片的大小。值越大,压缩效果越好。 兼容其他限制较多的解码器推荐使用slice_width为 32 和slice_height为 8。

tolerance

设置率控制系统的欠冲容忍度百分比。 这样做是为了防止运行昂贵的搜索。

qm

设置默认使用的量化矩阵预设或当wavelet_depth设置为 5 时

  • - default使用规格中的默认量化矩阵, 扩展了第 5 层的值。这在保持细节和省去伪影之间提供了良好的平衡。
  • - 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),例如,通过输入命令git log在 FFmpeg 源代码目录中,或浏览 在线存储库:https://git.ffmpeg.org/ffmpeg.

特定组件的维护人员列在文件中MAINTAINERS在源代码树中。

此文档是使用以下工具生成的makeinfo.

由以下机构提供托管服务telepoint.bg