FFmpeg 滤镜文档

目录

1 描述

本文档描述了 libavfilter 库提供的过滤器、源和接收器。

2 滤镜简介

FFmpeg 中的滤波功能通过 libavfilter 库启用。

在 libavfilter 中,一个过滤器可以有多个输入和多个输出。为了说明可能实现的功能,我们考虑以下滤镜图。

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> crop --> vflip -------+

此滤镜图将输入流拆分为两个流,然后将一个流通过 crop 过滤器和 vflip 过滤器,然后再通过叠加将其与另一个流合并。您可以使用以下命令来实现此目的

ffmpeg -i INPUT -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" OUTPUT

结果是视频的上半部分被镜像到输出视频的下半部分。

同一线性链中的过滤器用逗号分隔,不同的线性链的过滤器用分号分隔。在我们的示例中,crop,vflip 位于一个线性链中,splitoverlay 分别位于另一个线性链中。线性链连接的点用方括号括起来的名称标记。在示例中,split 过滤器生成两个与标签 [main][tmp] 关联的输出。

发送到 split 的第二个输出(标记为 [tmp])的流通过 crop 过滤器进行处理,该过滤器会裁剪掉视频的下半部分,然后垂直翻转。overlay 过滤器接受 split 过滤器的第一个未更改的输出(标记为 [main])作为输入,并将其下半部分叠加到 crop,vflip 过滤器链生成的输出上。

一些过滤器会接收参数列表作为输入:它们在过滤器名称和一个等号后指定,并用冒号分隔。

存在所谓的源过滤器,它们没有音频/视频输入,以及接收器过滤器,它们没有音频/视频输出。

3 graph2dot

FFmpeg tools 目录中包含的 graph2dot 程序可用于解析滤镜图描述,并以 dot 语言发出相应的文本表示。

调用命令

graph2dot -h

了解如何使用 graph2dot

然后,您可以将 dot 描述传递给 dot 程序(来自 graphviz 程序套件),并获得滤镜图的图形表示。

例如,命令序列

echo GRAPH_DESCRIPTION | \
tools/graph2dot -o graph.tmp && \
dot -Tpng graph.tmp -o graph.png && \
display graph.png

可用于创建和显示表示 GRAPH_DESCRIPTION 字符串描述的图形的图像。请注意,此字符串必须是完整的自包含图形,其输入和输出已明确定义。例如,如果您的命令行采用以下形式

ffmpeg -i infile -vf scale=640:360 outfile

您的 GRAPH_DESCRIPTION 字符串将需要采用以下形式

nullsrc,scale=640:360,nullsink

您可能还需要设置 nullsrc 参数并添加一个 format 过滤器以模拟特定的输入文件。

4 滤镜图描述

滤镜图是连接过滤器的有向图。它可以包含循环,并且过滤器对之间可以存在多个链接。每个链接都有一侧的输入衬垫将其连接到从中获取输入的过滤器,另一侧的输出衬垫将其连接到接受其输出的过滤器。

滤镜图中的每个过滤器都是应用程序中注册的过滤器类的实例,该过滤器类定义了过滤器的功能以及输入和输出衬垫的数量。

没有输入衬垫的过滤器称为“源”,没有输出衬垫的过滤器称为“接收器”。

4.1 滤镜图语法

滤镜图具有文本表示形式,该文本表示形式可由 ffmpeg 中的 -filter/-vf/-af-filter_complex 选项以及 ffplay 中的 -vf/-af 识别,并由 libavfilter/avfilter.h 中定义的 avfilter_graph_parse_ptr() 函数识别。

过滤器链由一系列连接的过滤器组成,每个过滤器都连接到序列中的前一个过滤器。过滤器链由以“,”分隔的过滤器描述列表表示。

滤镜图由一系列过滤器链组成。过滤器链序列由以“;”分隔的过滤器链描述列表表示。

过滤器由以下形式的字符串表示:[in_link_1]...[in_link_N]filter_name@id=arguments[out_link_1]...[out_link_M]

filter_name 是描述过滤器所属的过滤器类的名称,并且必须是程序中注册的过滤器类之一的名称,可以选择后跟“@id”。过滤器类的名称可以选择后跟字符串“=arguments”。

arguments 是一个字符串,其中包含用于初始化过滤器实例的参数。它可能具有以下两种形式之一

  • 一个“:”-分隔的 key=value 对列表。
  • 一个“:”-分隔的 value 列表。在这种情况下,键被假定为按声明顺序排列的选项名称。例如,fade 过滤器按此顺序声明三个选项 – typestart_framenb_frames。然后,参数列表 in:0:30 表示将值 in 分配给选项 type0 分配给 start_frame30 分配给 nb_frames
  • 一个“:”-分隔的混合直接 value 和长 key=value 对的列表。直接 value 必须位于 key=value 对之前,并遵循上一点的相同约束顺序。以下 key=value 对可以按任何首选顺序设置。

如果选项值本身是一个项目列表(例如,format 过滤器接受像素格式列表),则列表中的项目通常用“|”分隔。

可以使用字符“'”作为起始和结束标记来引用参数列表,并使用字符“\”来转义引用文本中的字符;否则,当遇到下一个特殊字符(属于集合“[]=;,”)时,参数字符串将被视为终止。

ffmpeg CLI 工具中实现的一种特殊语法允许从文件加载选项值。这是通过在选项名称前添加斜杠“/”来完成的,然后将提供的值解释为从中加载实际值的路径。例如

ffmpeg -i <INPUT> -vf drawtext=/text=/tmp/some_text <OUTPUT>

将从 /tmp/some_text 加载要绘制的文本。希望实现类似功能的 API 用户应将 avfilter_graph_segment_*() 函数与自定义 IO 代码一起使用。

过滤器的名称和参数可以选择性地在链接标签列表之前和之后。链接标签允许您命名一个链接,并将其与过滤器输出或输入端相关联。前面的标签 in_link_1 ... in_link_N 与过滤器输入端相关联,后面的标签 out_link_1 ... out_link_M 与输出端相关联。

当在过滤器图中找到两个名称相同的链接标签时,将在相应的输入和输出端之间创建链接。

如果一个输出端没有标签,它默认会链接到过滤器链中下一个过滤器的第一个未标记的输入端。例如,在过滤器链中

nullsrc, split[L1], [L2]overlay, nullsink

split 过滤器实例有两个输出端,overlay 过滤器实例有两个输入端。split 的第一个输出端标记为“L1”,overlay 的第一个输入端标记为“L2”,split 的第二个输出端链接到 overlay 的第二个输入端,这两个端都没有标签。

在过滤器描述中,如果第一个过滤器的输入标签没有指定,则默认为“in”;如果最后一个过滤器的输出标签没有指定,则默认为“out”。

在一个完整的过滤器链中,所有未标记的过滤器输入和输出端都必须连接。如果所有过滤器链的所有过滤器的输入和输出端都已连接,则过滤器图被认为是有效的。

过滤器图规范中分隔标记的前导和尾随空格(空格、制表符或换行符)将被忽略。这意味着可以使用空行和空格来表示过滤器图,以提高可读性。

例如,过滤器图

testsrc,split[L1],hflip[L2];[L1][L2] hstack

可以表示为

testsrc,
split [L1], hflip [L2];

[L1][L2] hstack

Libavfilter 将在需要格式转换的地方自动插入 scale 过滤器。可以通过在过滤器图描述前面加上 sws_flags=flags; 来为这些自动插入的缩放器指定 swscale 标志。

以下是过滤器图语法的 BNF 描述

NAME             ::= sequence of alphanumeric characters and '_'
FILTER_NAME      ::= NAME["@"NAME]
LINKLABEL        ::= "[" NAME "]"
LINKLABELS       ::= LINKLABEL [LINKLABELS]
FILTER_ARGUMENTS ::= sequence of chars (possibly quoted)
FILTER           ::= [LINKLABELS] FILTER_NAME ["=" FILTER_ARGUMENTS] [LINKLABELS]
FILTERCHAIN      ::= FILTER [,FILTERCHAIN]
FILTERGRAPH      ::= [sws_flags=flags;] FILTERCHAIN [;FILTERGRAPH]

4.2 关于滤镜图转义的说明

过滤器图描述的组成涉及多个级别的转义。有关所使用的转义过程的更多信息,请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“引用和转义”部分

第一级转义会影响每个过滤器选项值的内容,其中可能包含用于分隔值的特殊字符 :,或者转义字符 \'

第二级转义会影响整个过滤器描述,其中可能包含转义字符 \' 或过滤器图描述使用的特殊字符 [],;

最后,当您在 shell 命令行上指定过滤器图时,您需要对其中包含的 shell 特殊字符执行第三级转义。

例如,考虑要嵌入到 drawtext 过滤器描述的 text 值中的以下字符串

this is a 'string': may contain one, or more, special characters

此字符串包含 ' 特殊转义字符和 : 特殊字符,因此需要以这种方式进行转义

text=this is a \'string\'\: may contain one, or more, special characters

当将过滤器描述嵌入到过滤器图描述中时,需要进行第二级转义,以转义所有过滤器图特殊字符。因此,上面的示例变为

drawtext=text=this is a \\\'string\\\'\\: may contain one\, or more\, special characters

(请注意,除了 \' 转义特殊字符外,还需要转义 ,)。

最后,当在 shell 命令中写入过滤器图描述时,需要额外的转义级别,这取决于所采用 shell 的转义规则。例如,假设 \ 是特殊的并且需要用另一个 \ 进行转义,则前面的字符串最终将变为

-vf "drawtext=text=this is a \\\\\\'string\\\\\\'\\\\: may contain one\\, or more\\, special characters"

为了避免在使用接受过滤器规范作为输入的命令行工具时出现繁琐的转义,建议避免在 shell 中直接包含过滤器或选项规范。

例如,对于 drawtext 过滤器,您可能更喜欢使用 textfile 选项而不是 text 来指定要渲染的文本。

5 时间线编辑

某些过滤器支持通用的 enable 选项。对于支持时间轴编辑的过滤器,此选项可以设置为一个表达式,该表达式在将帧发送到过滤器之前进行计算。如果计算结果为非零值,则将启用过滤器,否则,该帧将原封不动地发送到过滤器图中的下一个过滤器。

该表达式接受以下值

t

时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN

n

输入帧的顺序编号,从 0 开始

pos

输入帧在文件中的位置,如果未知,则为 NAN;已弃用,请勿使用

w
h

如果为视频,则为输入帧的宽度和高度

此外,这些过滤器还支持 enable 命令,该命令可用于重新定义表达式。

像任何其他过滤选项一样,enable 选项遵循相同的规则。

例如,要启用从 10 秒到 3 分钟的模糊过滤器 (smartblur),以及从 3 秒开始的 curves 过滤器

smartblur = enable='between(t,10,3*60)',
curves    = enable='gte(t,3)' : preset=cross_process

请参阅 ffmpeg -filters 以查看哪些过滤器支持时间轴。

6 使用命令在运行时更改选项

某些选项可以在过滤器操作期间使用命令进行更改。这些选项在 ffmpeg -h filter=<过滤器名称> 的输出中标记为“T”。命令的名称是选项的名称,参数是新值。

7 具有多个输入的滤镜的选项 (framesync)

某些具有多个输入的过滤器支持一组通用选项。这些选项只能按名称设置,而不能使用简短表示法。

eof_action

在辅助输入端遇到 EOF 时要执行的操作;它接受以下值之一

repeat

重复最后一帧(默认)。

endall

结束两个流。

pass

通过主输入。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

repeatlast

如果设置为 1,则强制过滤器扩展辅助流的最后一帧,直到主流结束。值为 0 时禁用此行为。默认值为 1。

ts_sync_mode

如何根据辅助输入时间戳严格同步流;它接受以下值之一

default

从辅助输入获取时间戳最接近(小于或等于)主输入帧的时间戳的帧。

nearest

从辅助输入获取时间戳与主输入帧的时间戳绝对最接近的帧。

8 音频滤镜

当您配置 FFmpeg 构建时,可以使用 --disable-filters 禁用任何现有过滤器。配置输出将显示构建中包含的音频过滤器。

以下是对当前可用的音频过滤器的描述。

8.1 aap

将仿射投影算法应用于第一个音频流,并使用第二个音频流作为参考。

此自适应滤波器用于根据多个输入音频样本估计未知的音频。仿射投影算法可以在计算复杂性和收敛速度之间进行权衡。

以下是可接受选项的描述。

order

设置滤波器阶数。

projection

设置投影阶数。

mu

设置滤波器 mu。

delta

设置用于初始化内部协方差矩阵的系数。

out_mode

设置滤波器输出样本。它接受以下值

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号(第二个输入)与误差信号估计值之间的差值。

n

传递输入信号(第一个输入)与误差信号估计值之间的差值。

e

传递误差信号的估计样本。

默认值为 o

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

8.2 acompressor

压缩器主要用于减小信号的动态范围。特别是现代音乐大多以高比例压缩,以提高整体响度。这样做是为了获得听众最大的注意力,使声音“饱满”,并为曲目带来更多的“力量”。如果信号被过度压缩,之后可能会听起来沉闷或“死气沉沉”,或者可能会开始“抽动”(这可能是一种强大的效果,但也可能完全破坏曲目)。正确的压缩是获得专业声音的关键,也是混音和母带制作的高超技艺。由于其复杂的设置,可能需要很长时间才能对此类效果有正确的理解。

压缩是通过检测高于选定级别threshold的音量,并将其除以ratio设置的系数来完成的。因此,如果将阈值设置为 -12dB,而您的信号达到 -6dB,则 2:1 的比率将导致信号为 -9dB。由于对信号的精确操作会导致波形失真,因此可以在一段时间内对压缩程度进行均衡。这可以通过设置“Attack”和“Release”来完成。attack 确定信号必须上升到阈值以上多久才会发生任何压缩,而 release 设置信号必须下降到阈值以下多久才能再次减少压缩。比选择的启动时间短的信号将保持不变。可以使用 makeup 设置来弥补信号的整体压缩。因此,将信号的峰值压缩约 6dB,并将补偿提高到此水平,会导致信号比源信号响亮两倍。为了在压缩中获得更柔和的进入效果,knee 会在选定分贝的范围内平滑阈值处的硬边缘。

该滤波器接受以下选项

level_in

设置输入增益。默认值为 1。范围在 0.015625 和 64 之间。

mode

设置压缩器操作模式。可以是 upwarddownward。默认值为 downward

threshold

如果流的信号上升到此级别以上,则会影响增益降低。默认值为 0.125。范围在 0.00097563 和 1 之间。

ratio

设置信号降低的比率。1:2 表示如果电平上升到阈值以上 4dB,则在降低后将仅高于阈值 2dB。默认值为 2。范围在 1 到 20 之间。

attack

信号必须上升到阈值以上多少毫秒才能开始降低增益。默认值为 20。范围在 0.01 和 2000 之间。

release

信号必须下降到阈值以下多少毫秒才能再次减少压缩。默认值为 250。范围在 0.01 和 9000 之间。

makeup

设置处理后信号将被放大多少。默认值为 1。范围在 1 到 64 之间。

knee

弯曲阈值周围的尖锐拐点,以更柔和地进入增益降低。默认值为 2.82843。范围在 1 和 8 之间。

link

选择输入流的所有通道之间的 average 电平,或输入流中较响的(maximum)通道是否影响压缩。默认值为 average

detection

peak 的情况下,应采用确切的信号,还是在 rms 的情况下采用 RMS 信号。默认值为 rms,通常更平滑。

mix

在输出中使用多少压缩信号。默认值为 1。范围在 0 和 1 之间。

8.2.1 命令

此过滤器支持以上所有选项作为 命令

8.3 acontrast

简单的音频动态范围压缩/扩展滤波器。

该滤波器接受以下选项

contrast

设置对比度。默认值为 33。允许的范围在 0 到 100 之间。

8.4 acopy

将输入音频源不变地复制到输出。这主要用于测试目的。

8.5 acrossfade

将交叉淡化从一个输入音频流应用到另一个输入音频流。交叉淡化应用于第一个流末尾附近的指定持续时间。

该滤波器接受以下选项

nb_samples, ns

指定交叉淡化效果必须持续的样本数。在交叉淡化效果结束时,第一个输入音频将完全静音。默认值为 44100。

duration, d

指定交叉淡化效果的持续时间。有关接受的语法,请参见 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。默认情况下,持续时间由 nb_samples 确定。如果设置此选项,则将使用此选项而不是 nb_samples

overlap, o

第一个流结尾是否应与第二个流的开头重叠。默认情况下启用。

curve1

为第一个流的交叉淡化过渡设置曲线。

curve2

为第二个流的交叉淡化过渡设置曲线。

有关可用曲线类型的说明,请参见 afade 过滤器的说明。

8.5.1 示例

  • 从一个输入到另一个输入的交叉淡化
    ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:c1=exp:c2=exp output.flac
    
  • 从一个输入到另一个输入的交叉淡化,但不重叠
    ffmpeg -i first.flac -i second.flac -filter_complex acrossfade=d=10:o=0:c1=exp:c2=exp output.flac
    

8.6 acrossover

将音频流拆分为多个频段。

此滤波器将音频流拆分为两个或多个频率范围。将所有流求和将产生平坦的输出。

该滤波器接受以下选项

split

设置分割频率。这些频率必须为正且递增。

order

为每个频段分割设置滤波器阶数。这控制滤波器的滚降或滤波器传递函数的陡度。可用的值为

2nd

每倍频程 12 dB。

4th

每倍频程 24 dB。

6th

每倍频程 36 分贝。

8阶

每倍频程 48 分贝。

10阶

每倍频程 60 分贝。

12阶

每倍频程 72 分贝。

14阶

每倍频程 84 分贝。

16阶

每倍频程 96 分贝。

18阶

每倍频程 108 分贝。

20阶

每倍频程 120 分贝。

默认值是 4阶

level(电平)

设置输入增益电平。允许范围是 0 到 1。默认值是 1。

gains(增益)

设置每个频段的输出增益。所有频段的默认值都是 1。

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

默认值是 auto

8.6.1 示例

  • 将输入音频流分割成两个频段(低频和高频),分割频率为 1500 Hz,每个频段将位于单独的流中
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
    
  • 与上面相同,但使用更高的滤波器阶数
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500:order=8th[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
    
  • 与上面相同,但也增加了一个中间频段(频率在 1500 到 8000 之间)
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500 8000:order=8th[LOW][MID][HIGH]' -map '[LOW]' low.wav -map '[MID]' mid.wav -map '[HIGH]' high.wav
    

8.7 acrusher

降低音频位分辨率。

这个滤波器是一个具有增强功能的位压缩器。位压缩器用于明显减少音频信号采样的位数。这根本不会改变位深度,它只是产生这种效果。位深度降低的素材听起来更刺耳和“数字化”。这个滤波器甚至能够舍入到连续值而不是离散位深度。此外,它还有一个 D/C 偏移,导致信号的下半部分和上半部分出现不同的压缩。抗混叠设置能够产生“更柔和”的压缩声音。

这个滤波器的另一个特点是对数模式。这个设置从位之间的线性距离切换到对数距离。结果是一个听起来更“自然”的压缩器,例如,它不会门限低信号。人耳具有对数感知,因此这种压缩方式更加令人愉悦。对数压缩也能够进行抗混叠。

该滤波器接受以下选项

level_in

设置输入电平。

level_out(输出电平)

设置输出电平。

bits(位数)

设置位减少量。

mix

设置混合量。

mode

可以是线性的:lin 或对数的:log

dc

设置直流偏移。

aa

设置抗混叠。

samples(采样)

设置采样减少量。

lfo

启用 LFO。默认禁用。

lforange

设置 LFO 范围。

lforate

设置 LFO 速率。

8.7.1 命令

此过滤器支持以上所有选项作为 命令

8.8 acue

延迟音频滤波,直到给定的挂钟时间戳。请参阅 cue 滤波器。

8.9 adeclick

从输入音频中去除脉冲噪声。

检测为脉冲噪声的采样将使用自回归建模,用插值采样替换。

window, w(窗口,w)

设置窗口大小,单位为毫秒。允许范围是 10100。默认值是 55 毫秒。这设置了一次处理的窗口大小。

overlap, o

设置窗口重叠,以窗口大小的百分比表示。允许范围是 5095。默认值是 75%。将其设置为非常高的值会增加脉冲噪声去除,但会使整个过程慢得多。

arorder, a(自回归阶数,a)

设置自回归阶数,以窗口大小的百分比表示。允许范围是 025。默认值是 2%。此选项还控制使用相邻良好采样插值的采样质量。

threshold, t(阈值,t)

设置阈值。允许范围是 1100。默认值是 2。这控制将要去除的脉冲噪声的强度。值越低,被检测为脉冲噪声的采样就越多。

burst, b(突发,b)

设置突发融合,以窗口大小的百分比表示。允许范围是 010。默认值是 2。如果检测为噪声的任何两个采样之间的间隔小于此值,则这两个采样之间的任何采样也将被检测为噪声。

method, m(方法,m)

设置重叠方法。

它接受以下值

add, a(添加,a)

选择重叠-添加方法。即使没有插值的采样,使用此方法也会略有改变。

save, s(保存,s)

选择重叠-保存方法。没有插值的采样保持不变。

默认值是 a

8.10 adeclip

从输入音频中去除削波的采样。

检测为削波的采样将使用自回归建模,用插值采样替换。

window, w(窗口,w)

设置窗口大小,单位为毫秒。允许范围是 10100。默认值是 55 毫秒。这设置了一次处理的窗口大小。

overlap, o

设置窗口重叠,以窗口大小的百分比表示。允许范围是 5095。默认值是 75%。

arorder, a(自回归阶数,a)

设置自回归阶数,以窗口大小的百分比表示。允许范围是 025。默认值是 8%。此选项还控制使用相邻良好采样插值的采样质量。

threshold, t(阈值,t)

设置阈值。允许范围是 1100。默认值是 10。值越高,削波检测的攻击性就越小。

hsize, n(直方图大小,n)

设置用于检测削波的直方图大小。允许范围是 1009999。默认值是 1000。值越高,削波检测的攻击性就越小。

method, m(方法,m)

设置重叠方法。

它接受以下值

add, a(添加,a)

选择重叠-添加方法。即使没有插值的采样,使用此方法也会略有改变。

save, s(保存,s)

选择重叠-保存方法。没有插值的采样保持不变。

默认值是 a

8.11 adecorrelate

对输入音频流应用去相关。

该滤波器接受以下选项

stages(阶段)

设置滤波的去相关阶段数。允许范围是 1 到 16。默认值是 6。

seed(种子)

设置用于设置跨通道采样延迟的随机种子。

8.12 adelay

延迟一个或多个音频通道。

延迟通道中的采样将填充静音。

此滤波器接受以下选项

delays(延迟)

设置每个通道的延迟列表,以“|”分隔,单位为毫秒。未使用的延迟将被静默忽略。如果给定的延迟数小于通道数,则所有剩余通道都不会延迟。如果要延迟精确的采样数,请在数字后附加“S”。如果想要以秒为单位延迟,请在数字后附加“s”。

all(全部)

将最后一个设置的延迟用于所有剩余通道。默认情况下禁用。如果启用此选项,则会更改选项 delays 的解释方式。

8.12.1 示例

  • 将第一个通道延迟 1.5 秒,将第三个通道延迟 0.5 秒,并保持第二个通道(以及可能存在的任何其他通道)不变。
    adelay=1500|0|500
    
  • 将第二个通道延迟 500 个采样,将第三个通道延迟 700 个采样,并保持第一个通道(以及可能存在的任何其他通道)不变。
    adelay=0|500S|700S
    
  • 将所有通道延迟相同的采样数
    adelay=delays=64S:all=1
    

8.13 adenorm

通过添加极低电平噪声来补救音频中的非规范数。

此滤波器应放置在任何可能产生非规范数的滤波器之前。

下面是接受的参数的描述。

level(电平)

设置添加噪声的电平,单位为分贝。默认值为 -351。允许范围是 -451 到 -90。

type(类型)

设置添加噪声的类型。

dc

添加直流信号。

ac

添加交流信号。

square(方波)

添加方波信号。

pulse(脉冲)

添加脉冲信号。

默认值是 dc

8.13.1 命令

此过滤器支持以上所有选项作为 命令

8.14 aderivative, aintegral

计算音频流的导数/积分。

连续应用这两个滤波器会产生原始音频。

8.15 adrc

将频谱动态范围控制器滤波器应用于输入音频流。

以下是可接受选项的描述。

transfer(传递)

设置传递表达式。

表达式可以包含以下常量

ch

当前通道号

sn

当前采样号

nb_channels

通道数

t

时间戳,以秒表示

sr

采样率

p

当前频率功率值,单位为分贝

f

当前频率,单位为赫兹

默认值是 p

attack

设置起音时间,单位为毫秒。默认值为 50 毫秒。允许范围是 1 到 1000 毫秒。

release

设置释放时间,单位为毫秒。默认值为 100 毫秒。允许范围是 5 到 2000 毫秒。

channels(通道)

设置要过滤的通道,默认情况下,音频流中的所有通道都将被过滤。

8.15.1 命令

此过滤器支持以上所有选项作为 命令

8.15.2 示例

  • 对所有频率应用频谱压缩,阈值为 -50 分贝,比例为 1:6
    adrc=transfer='if(gt(p,-50),-50+(p-(-50))/6,p)':attack=50:release=100
    
  • 与上述类似,但比例为 1:2,且仅过滤前置中央声道
    adrc=transfer='if(gt(p,-50),-50+(p-(-50))/2,p)':attack=50:release=100:channels=FC
    
  • 对所有频率应用频谱噪声门,阈值为 -85 dB,并具有短启动时间和短释放时间
    adrc=transfer='if(lte(p,-85),p-800,p)':attack=1:release=5
    
  • 对所有频率应用频谱扩展,阈值为 -10 dB,比例为 1:2
    adrc=transfer='if(lt(p,-10),-10+(p-(-10))*2,p)':attack=50:release=100
    
  • 对所有频率应用限幅器,最大值为 -60 dB,启动时间为 2 毫秒,释放时间为 10 毫秒
    adrc=transfer='min(p,-60)':attack=2:release=10
    

8.16 adynamicequalizer

对输入音频流应用动态均衡。

以下是可接受选项的描述。

threshold

设置用于触发均衡的检测阈值。阈值检测使用检测滤波器。默认值为 0。允许范围为 0 到 100。

dfrequency

设置用于触发均衡的检测滤波器的检测频率,单位为 Hz。默认值为 1000 Hz。允许范围为 2 到 1000000 Hz。

dqfactor

设置用于触发均衡的检测滤波器的检测谐振因子。默认值为 1。允许范围为 0.001 到 1000。

tfrequency

设置均衡滤波器的目标频率。默认值为 1000 Hz。允许范围为 2 到 1000000 Hz。

tqfactor

设置目标均衡滤波器的目标谐振因子。默认值为 1。允许范围为 0.001 到 1000。

attack

设置检测信号必须高于检测阈值多少毫秒后才开始均衡。默认为 20。允许范围为 1 到 2000。

release

设置检测信号必须低于检测阈值多少毫秒后才结束均衡。默认为 200。允许范围为 1 到 2000。

ratio

设置均衡增益的提升比例。默认为 1。允许范围为 0 到 30。

makeup

设置均衡增益的提升偏移量。默认为 0。允许范围为 0 到 100。

range

设置允许的最大衰减/提升量。默认为 50。允许范围为 1 到 200。

mode

设置滤波器操作模式,可以是以下之一

listen

仅输出隔离的检测信号。

cutbelow

衰减低于检测阈值的频率。

cutabove

衰减高于检测阈值的频率。

boostbelow

提升低于检测阈值的频率。

boostabove

提升高于检测阈值的频率。

默认模式为 ‘cutbelow’。

dftype

设置检测滤波器的类型,可以是以下之一

bandpass
lowpass
highpass
peak

默认类型为 ‘bandpass’。

tftype

设置目标滤波器的类型,可以是以下之一

bell
lowshelf
highshelf

默认类型为 ‘bell’。

auto

自动从检测滤波器收集阈值。默认值为 ‘disabled’。此选项可用于在输入音频流的特定时间帧内检测阈值,在这种情况下,选项值在运行时会更改。

可用值为

disabled

禁用使用自动收集的阈值。

off

停止拾取阈值。

on

开始拾取阈值。

adaptive

通过计算滑动窗口熵自适应地拾取阈值。

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

8.16.1 命令

此过滤器支持以上所有选项作为 命令

8.17 adynamicsmooth

对输入音频流应用动态平滑。

以下是可接受选项的描述。

sensitivity

设置对频率波动的灵敏度。默认为 2。允许范围为 0 到 1e+06。

basefreq

设置平滑的基本频率。默认值为 22050。允许范围为 2 到 1e+06。

8.17.1 命令

此过滤器支持以上所有选项作为 命令

8.18 aecho

对输入音频应用回声。

回声是反射的声音,当在山间(有时在大型建筑物中)说话或喊叫时,会自然发生;数字回声效果模拟此行为,通常用于帮助填充单个乐器或人声的声音。原始信号和反射之间的时差为 delay,反射信号的响度为 decay。多个回声可以具有不同的延迟和衰减。

下面是接受的参数的描述。

in_gain

设置反射信号的输入增益。默认为 0.6

out_gain

设置反射信号的输出增益。默认为 0.3

delays(延迟)

设置原始信号和反射之间的时间间隔列表,单位为毫秒,用“|”分隔。每个 delay 的允许范围为 (0 - 90000.0]。默认为 1000

decays

设置反射信号的响度列表,用“|”分隔。每个 decay 的允许范围为 (0 - 1.0]。默认为 0.5

8.18.1 示例

  • 听起来好像有实际演奏乐器数量的两倍
    aecho=0.8:0.88:60:0.4
    
  • 如果延迟非常短,听起来就像一个(金属)机器人演奏音乐
    aecho=0.8:0.88:6:0.4
    
  • 较长的延迟听起来像是在山中的露天音乐会
    aecho=0.8:0.9:1000:0.3
    
  • 与上述相同,但多了一座山
    aecho=0.8:0.9:1000|1800:0.3|0.25
    

8.19 aemphasis

音频加重滤波器直接从 LP 或加重 CD 中创建或恢复材料,具有不同的滤波器曲线。例如,为了将音乐存储在黑胶唱片上,必须首先通过滤波器改变信号,以消除此录音介质的缺点。一旦播放该材料,必须应用反向滤波器以恢复频率响应的失真。

该滤波器接受以下选项

level_in

设置输入增益。

level_out(输出电平)

设置输出增益。

mode

设置滤波器模式。对于恢复材料,请使用 reproduction 模式,否则请使用 production 模式。默认模式为 reproduction 模式。

type(类型)

设置滤波器类型。选择介质。可以是以下之一

col

选择 Columbia。

emi

选择 EMI。

bsi

选择 BSI (78RPM)。

riaa

选择 RIAA。

cd

选择 Compact Disc (CD)。

50fm

选择 50µs (FM)。

75fm

选择 75µs (FM)。

50kf

选择 50µs (FM-KF)。

75kf

选择 75µs (FM-KF)。

8.19.1 命令

此过滤器支持以上所有选项作为 命令

8.20 aeval

根据指定的表达式修改音频信号。

此滤波器接受一个或多个表达式(每个通道一个),这些表达式会被评估并用于修改相应的音频信号。

它接受以下参数

exprs

为每个单独的通道设置以“|”分隔的表达式列表。如果输入通道的数量大于表达式的数量,则将最后指定的表达式用于其余输出通道。

channel_layout, c

设置输出通道布局。如果未指定,则通道布局由表达式的数量指定。如果设置为 ‘same’,则默认情况下将使用相同的输入通道布局。

exprs 中的每个表达式都可以包含以下常量和函数

ch

当前表达式的通道号

n

从 0 开始的已评估样本数

s

采样率

t

以秒为单位的已评估样本时间

nb_in_channels
nb_out_channels

输入和输出通道数

val(CH)

通道号为 CH 的输入通道的值

注意:此滤镜速度较慢。为了更快的处理速度,您应该使用专用滤镜。

8.20.1 示例

  • 半音量
    aeval=val(ch)/2:c=same
    
  • 反转第二个声道的相位
    aeval=val(0)|-val(1)
    

8.21 aexciter

激励器用于产生原始信号中不存在的高音。这是通过创建信号的谐波失真来实现的,这些失真在范围内受到限制并添加到原始信号中。激励器可以提高音频信号的高端,而不仅仅像均衡器那样提高高频,从而创造更“清脆”或“明亮”的声音。

该滤波器接受以下选项

level_in

设置信号处理前的输入电平。允许的范围为 0 到 64。默认值为 1。

level_out(输出电平)

设置信号处理后的输出电平。允许的范围为 0 到 64。默认值为 1。

设置添加到原始信号的谐波量。允许的范围为 0 到 64。默认值为 1。

驱动

设置新创建的谐波量。允许的范围为 0.1 到 10。默认值为 8.5。

混合

设置新创建的谐波的倍频程。允许的范围为 -10 到 10。默认值为 0。

频率

设置产生谐波的频率下限,单位为 Hz。允许的范围为 2000 到 12000 Hz。默认值为 7500 Hz。

上限

设置产生谐波的频率上限。允许的范围为 9999 到 20000 Hz。如果该值低于 10000 Hz,则不应用限制。

监听

使原始信号静音,仅输出添加的谐波。默认情况下禁用。

8.21.1 命令

此过滤器支持以上所有选项作为 命令

8.22 afade

对输入音频应用淡入/淡出效果。

下面是接受的参数的描述。

类型,t

指定效果类型,可以为 in 表示淡入,或者 out 表示淡出效果。默认为 in

起始采样,ss

指定开始应用淡化效果的起始采样数。默认为 0。

nb_samples, ns

指定淡化效果持续的采样数。在淡入效果结束时,输出音频的音量将与输入音频的音量相同;在淡出转换结束时,输出音频将静音。默认值为 44100。

起始时间,st

指定淡化效果的起始时间。默认为 0。该值必须指定为时间长度;请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间长度部分,以了解可接受的语法。如果设置了此选项,则使用此选项而不是 start_sample

duration, d

指定淡化效果的持续时间。请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间长度部分,以了解可接受的语法。在淡入效果结束时,输出音频的音量将与输入音频的音量相同;在淡出转换结束时,输出音频将静音。默认情况下,持续时间由 nb_samples 确定。如果设置了此选项,则使用此选项而不是 nb_samples

曲线

设置淡化转换的曲线。

它接受以下值

三角

选择三角形线性斜率(默认)

四分之一正弦波

选择四分之一正弦波

半正弦波

选择半正弦波

指数正弦波

选择指数正弦波

对数

选择对数

反抛物线

选择反抛物线

二次

选择二次

三次

选择三次

平方根

选择平方根

立方根

选择立方根

抛物线

选择抛物线

指数

选择指数

反四分之一正弦波

选择反四分之一正弦波

反半正弦波

选择反半正弦波

双指数席位

选择双指数席位

双指数 S 形

选择双指数 S 形

逻辑 S 形

选择逻辑 S 形

正弦基函数

选择正弦基函数

反向正弦基函数

选择反向正弦基函数

四次

选择四次

四次根

选择四次根

平方四分之一正弦波

选择平方四分之一正弦波

平方半正弦波

选择平方半正弦波

无淡化

不应用淡化

静音

设置淡入的初始增益或淡出的最终增益。默认值为 0.0

单位增益

设置淡出的初始增益或淡入的最终增益。默认值为 1.0

8.22.1 命令

此过滤器支持以上所有选项作为 命令

8.22.2 示例

  • 淡入音频的前 15 秒
    afade=t=in:ss=0:d=15
    
  • 淡出 900 秒音频的最后 25 秒
    afade=t=out:st=875:d=25
    

8.23 afftdn

使用 FFT 对音频样本进行降噪。

下面是接受的参数的描述。

噪声降低,nr

设置噪声降低量,单位为 dB,允许的范围为 0.01 到 97。默认值为 12 dB。

噪声基底,nf

设置噪声基底,单位为 dB,允许的范围为 -80 到 -20。默认值为 -50 dB。

噪声类型,nt

设置噪声类型。

它接受以下值

白色,w

选择白噪声。

黑胶,v

选择黑胶噪声。

虫胶,s

选择虫胶噪声。

自定义,c

选择自定义噪声,在 bn 选项中定义。

默认值为白噪声。

频带噪声,bn

为 15 个频带中的每一个设置自定义频带噪声配置文件。频带以空格或“|”分隔。

残余基底,rf

设置残余基底,单位为 dB,允许的范围为 -80 到 -20。默认值为 -38 dB。

跟踪噪声,tn

启用噪声基底跟踪。默认情况下禁用。启用此功能后,将自动调整噪声基底。

跟踪残余,tr

启用残余跟踪。默认情况下禁用。

输出模式,om

设置输出模式。

它接受以下值

输入,i

保持输入不变。

输出,o

传递已过滤的噪声。

噪声,n

仅传递噪声。

默认值为 output

自适应性,ad

设置自适应因子,用于确定每个频率箱的增益调整的适应速度。值 0 启用即时适应,而较高的值反应较慢。允许的范围为 01。默认值为 0.5

基底偏移,fo

设置噪声基底偏移因子。此选项用于调整应用于测量的噪声基底的偏移量。仅当启用噪声基底跟踪时才有效。允许的范围为 -2.02.0。默认值为 1.0

噪声链接,nl

设置用于多声道音频的噪声链接。

它接受以下值

使用未更改的声道的噪声基底。

最小值

使用所有声道测量的最小噪声基底。

最大值

使用所有声道测量的最大噪声基底。

平均值

使用所有声道测量的平均噪声基底。

默认值为 min

频带倍增器,bm

设置频带倍增因子,用于确定频带在频率箱上的分布程度。允许的范围为 0.25。默认值为 1.25

采样噪声,sn

切换从输入音频捕获和测量噪声配置文件的功能。

它接受以下值

开始,begin

开始采样噪声捕获。

停止,end

停止采样噪声捕获并测量新的噪声频带配置文件。

默认值为 none

增益平滑,gs

设置增益平滑空间半径,用于平滑应用于每个频率箱的增益。这有助于减少随机的音乐噪声伪像。较高的值会增加增益的平滑度。允许的范围为 050。默认值为 0

8.23.1 命令

此滤镜支持上述一些选项作为命令

8.23.2 示例

  • 将白噪声降低 10dB,并使用先前测量的 -40dB 的噪声基底
    afftdn=nr=10:nf=-40
    
  • 将白噪声降低 10dB,还将初始噪声基底设置为 -80dB 并启用噪声基底的自动跟踪,以便噪声基底在处理过程中逐渐变化
    afftdn=nr=10:nf=-80:tn=1
    
  • 使用 -40dB 的噪声基底将噪声降低 20dB,并使用命令获取输入音频前 0.4 秒的噪声配置文件
    asendcmd=0.0 afftdn sn start,asendcmd=0.4 afftdn sn stop,afftdn=nr=20:nf=-40
    

8.24 afftfilt

将任意表达式应用于频域中的采样。

实部

为每个单独的声道设置频域实部表达式,以“|”分隔。默认为“re”。如果输入声道的数量大于表达式的数量,则将最后指定的表达式用于其余的输出声道。

虚部

为每个单独的声道设置频域虚部表达式,以“|”分隔。默认为“im”。

realimag 中的每个表达式可以包含以下常量和函数:

sr

采样率

b

当前频率箱编号

nb

可用频率箱的数量

ch

当前表达式的通道号

chs

通道数

pts

当前帧的 pts

re

当前通道的当前频率箱的实部

im

当前通道的当前频率箱的虚部

real(b, ch)

返回位置 (bin,channel) 处频率箱的实部值

imag(b, ch)

返回位置 (bin,channel) 处频率箱的虚部值

win_size

设置窗口大小。允许的范围是 16 到 131072。默认值是 4096

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是 hann

overlap

设置窗口重叠。如果设置为 1,将选择所选窗口函数的推荐重叠。默认值是 0.75

8.24.1 示例

  • 几乎只保留音频中的低频
    afftfilt="'real=re * (1-clip((b/nb)*b,0,1))':imag='im * (1-clip((b/nb)*b,0,1))'"
    
  • 应用机器人化效果
    afftfilt="real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=0.75"
    
  • 应用耳语效果
    afftfilt="real='hypot(re,im)*cos((random(0)*2-1)*2*3.14)':imag='hypot(re,im)*sin((random(1)*2-1)*2*3.14)':win_size=128:overlap=0.8"
    
  • 应用相位偏移
    afftfilt="real=re*cos(1)-im*sin(1):imag=re*sin(1)+im*cos(1)"
    

8.25 afir

应用任意有限脉冲响应滤波器。

此滤波器旨在应用长 FIR 滤波器,最长可达 60 秒。

它可以用作数字交叉滤波器、房间均衡、串扰消除、波场合成、听觉化、双声学、环境声和空间化的组件。

此滤波器使用高于第一个的流作为 FIR 系数。如果非第一个流包含单个通道,则它将用于第一个流中的所有输入通道,否则非第一个流中的通道数必须与第一个流中的通道数相同。

它接受以下参数

dry

设置干声增益。这将设置输入增益。

wet

设置湿声增益。这将设置最终输出增益。

length

设置脉冲响应滤波器的长度。默认值为 1,表示处理整个 IR。

gtype

此选项已弃用,不起任何作用。

irnorm

设置在滤波之前应用于 IR 系数的范数。允许的范围是 -12。IR 系数通过此选项设置的计算矢量范数进行归一化。对于负值,不计算范数,并且根本不修改 IR 系数。默认值为 1

irlink

对于多通道 IR,如果此选项设置为 true,则所有 IR 通道将使用所有 IR 通道系数的最大测量增益进行归一化,如 irnorm 选项所设置。禁用时,每个 IR 通道中的所有 IR 系数将独立归一化。默认值为 true

irgain

设置在滤波之前应用于 IR 系数的增益。允许的范围是 0 到 1。此增益在通过 irnorm 选项应用的任何增益之后应用。

irfmt

设置 IR 流的格式。可以是 monoinput。默认值为 input

maxir

设置允许的最大脉冲响应滤波器持续时间(以秒为单位)。默认值为 30 秒。允许的范围是 0.1 到 60 秒。

response

此选项已弃用,不起任何作用。

channel

此选项已弃用,不起任何作用。

size

此选项已弃用,不起任何作用。

rate

此选项已弃用,不起任何作用。

minp

设置用于卷积的最小分区大小。默认值为 8192。允许的范围是 165536。较低的值会降低延迟,但会增加 CPU 使用率。

maxp

设置用于卷积的最大分区大小。默认值为 8192。允许的范围是 865536。较低的值可能会增加 CPU 使用率。

nbirs

设置运行时可切换的输入脉冲响应流的数量。允许的范围是 132。默认值为 1

ir

设置将用于卷积的 IR 流,从 0 开始,应始终低于 nbirs 选项提供的数值。默认值为 0。此选项可以在运行时通过 命令进行更改。

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

默认值为 auto。

irload

设置何时加载 IR 流。可以是 initaccess。第一个在初始化时加载并准备所有 IR,第二个在第一次访问特定的 IR 时加载一次。默认值为 init

8.25.1 示例

  • 使用单声道 IR 文件作为第二个输入,将混响应用于流,使用 ffmpeg 完成命令
    ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
    
  • 给定输入立体声流,以及用于左右声道的两个立体声脉冲响应,应用真正的立体声处理,脉冲响应文件是名为 l_ir.wav 和 r_ir.wav 的文件,并设置 irnorm 选项值
    "pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irnorm=1.2,pan=stereo|FL<c0+c2|FR<c1+c3"
    
  • 与上面的示例类似,但 irgain 显式设置为估计值,并且禁用 irnorm
    "pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irgain=-5dB:irnom=-1,pan=stereo|FL<c0+c2|FR<c1+c3"
    

8.26 aformat

设置输入音频的输出格式约束。框架将协商最合适的格式以最大程度地减少转换。

它接受以下参数

sample_fmts, f

请求的采样格式的 “|” 分隔列表。

sample_rates, r

请求的采样率的 “|” 分隔列表。

channel_layouts, cl

请求的声道布局的 “|” 分隔列表。

有关必需的语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分

如果省略参数,则允许所有值。

强制输出为无符号 8 位或有符号 16 位立体声

aformat=sample_fmts=u8|s16:channel_layouts=stereo

8.27 afreqshift

将频移应用于输入音频样本。

该滤波器接受以下选项

shift

指定频移。允许的范围是 -INT_MAX 到 INT_MAX。默认值为 0.0。

level(电平)

设置应用于最终输出的输出增益。允许的范围是 0.0 到 1.0。默认值为 1.0。

order

设置用于滤波的滤波器阶数。允许的范围是 1 到 16。默认值为 8。

8.27.1 命令

此过滤器支持以上所有选项作为 命令

8.28 afwtdn

使用小波降低输入样本中的宽带噪声。

以下是可接受选项的描述。

sigma

设置噪声 sigma,允许的范围是 0 到 1。默认值为 0。此选项控制应用于输入样本的降噪强度。设置此选项的最有用方法是通过分贝,例如 -45dB。

levels

设置小波分解的级别数。允许的范围是 1 到 12。默认值为 10。将其设置得太低会使降噪性能非常差。

wavet

设置输入帧分解的小波类型。它们按系数的数量排序,从最低到最高。更多的系数意味着更差的滤波速度,但总体上更好的质量。可用的小波是

sym2
sym4
rbior68
deb10
sym10
coif5
bl3
percent

设置完整降噪的百分比。允许的范围是 0 到 100%。默认值为 85% 或部分降噪。

profile

如果启用,则第一个输入帧将用作噪声配置文件。如果第一个帧样本包含非噪声,性能将非常差。

adaptive

如果启用,则会分析输入帧是否存在噪声。如果检测到噪声的可能性很高,则输入帧配置文件将用于处理以下帧,直到检测到新的噪声帧。

samples(采样)

以样本数为单位设置单个帧的大小。允许的范围是 512 到 65536。默认帧大小是 8192 个样本。

softness

设置阈值函数内部应用的柔和度。允许的范围是 0 到 10。默认的柔和度是 1。

8.28.1 命令

此过滤器支持以上所有选项作为 命令

8.29 agate

门限主要用于降低信号的较低部分。这种信号处理减少了有用信号之间的干扰噪声。

通过检测低于选定级别 threshold 的音量并将其除以 ratio 设置的因子来完成门限。噪声基底的底部通过 range 设置。由于对信号进行精确的操作会导致波形失真,因此可以在一段时间内对降低幅度进行平整。这是通过设置 attackrelease 来完成的。

attack(启动)决定信号必须降到阈值以下多长时间才开始进行衰减,而 release(释放)设置信号必须上升到阈值以上多长时间才再次减少衰减。短于所选启动时间的信号将不受影响。

level_in

在滤波前设置输入电平。默认值为 1。允许范围为 0.015625 到 64。

mode

设置操作模式。可以是 upward(向上)或 downward(向下)。默认值为 downward。如果设置为 upward 模式,信号的较高部分将被放大,向上扩展动态范围。否则,在 downward 模式下,信号的较低部分将被衰减。

range

设置当信号低于阈值时增益衰减的程度。默认值为 0.06125。允许范围为 0 到 1。将其设置为 0 将禁用衰减,此时滤波器将表现得像一个扩展器。

threshold

如果信号上升到此电平以上,则会释放增益衰减。默认值为 0.125。允许范围为 0 到 1。

ratio

设置信号衰减的比率。默认值为 2。允许范围为 1 到 9000。

attack

信号必须上升到阈值以上多少毫秒增益衰减才会停止。默认值为 20 毫秒。允许范围为 0.01 到 9000。

release

信号必须降到阈值以下多少毫秒才会再次增加衰减。默认值为 250 毫秒。允许范围为 0.01 到 9000。

makeup

设置处理后信号的放大量。默认值为 1。允许范围为 1 到 64。

knee

弯曲阈值周围的尖锐拐点,使其更柔和地进入增益衰减。默认值为 2.828427125。允许范围为 1 到 8。

detection

选择是使用精确信号进行检测还是使用类似 RMS 的信号。默认值为 rms。可以是 peak(峰值)或 rms(均方根)。

link

选择是所有通道之间的平均电平还是响度更高的通道影响衰减。默认值为 average(平均)。可以是 averagemaximum(最大)。

8.29.1 命令

此过滤器支持以上所有选项作为 命令

8.30 aiir

应用任意的无限脉冲响应滤波器。

它接受以下参数

零点,z

设置 B/分子/零点/反射系数。

极点,p

设置 A/分母/极点/梯形系数。

增益,k

设置通道增益。

干声增益

设置输入增益。

湿声增益

设置输出增益。

格式,f

设置系数格式。

ll

格型-梯形函数

sf

模拟传递函数

tf

数字传递函数

zp

Z 平面零点/极点,笛卡尔坐标(默认)

pr

Z 平面零点/极点,极坐标(弧度)

pd

Z 平面零点/极点,极坐标(角度)

sp

S 平面零点/极点

处理,r

设置处理类型。

d

直接处理

s

串行处理

p

并行处理

精度,e

设置滤波精度。

dbl

双精度浮点数(默认)

flt

单精度浮点数

i32

32 位整数

i16

16 位整数

归一化,n

归一化滤波器系数,默认启用。启用后,直流时的幅度响应将被归一化为 0dB。

mix

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

response

在额外的视频流中显示 IR 频率响应,幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下禁用。

channel

设置要显示频率响应的 IR 通道。默认情况下显示第一个通道。此选项仅在启用 response 时使用。

size

设置视频流大小。此选项仅在启用 response 时使用。

tfsf 格式的系数用空格分隔,并且按升序排列。

zp 格式的系数用空格分隔,并且系数顺序无关紧要。zp 格式的系数是复数,其中 i 为虚数单位。

可以为每个通道提供不同的系数和增益,在这种情况下,请使用“|”分隔系数或增益。最后一个提供的系数将用于所有剩余通道。

8.30.1 示例

  • 在 48000 Hz 采样率下,在 5000Hz 附近应用 2 极椭圆陷波。
    aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d
    
  • 与上述相同,但采用 zp 格式。
    aiir=k=0.79575848078096756:z=0.80918701+0.58773007i 0.80918701-0.58773007i 0.80884700+0.58784055i 0.80884700-0.58784055i:p=0.63892345+0.59951235i 0.63892345-0.59951235i 0.79582691+0.44198673i 0.79582691-0.44198673i:f=zp:r=s
    
  • 使用模拟传递函数格式应用 3 阶模拟归一化巴特沃斯低通滤波器。
    aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
    

8.31 alimiter

限幅器防止输入信号超过所需的阈值。此限幅器使用前瞻技术来防止信号失真。这意味着信号处理后会有一个小延迟。请记住,它产生的延迟是您设置的启动时间。

该滤波器接受以下选项

level_in

设置输入增益。默认值为 1。

level_out(输出电平)

设置输出增益。默认值为 1。

限制

不要让高于此电平的信号通过限幅器。默认值为 1。

attack

限幅器将在该毫秒数内达到其衰减水平。默认值为 5 毫秒。

release

在该毫秒数内从限制恢复到 1.0 的衰减。默认值为 50 毫秒。

asc

当始终需要增益衰减时,ASC 负责释放到平均衰减水平,而不是在释放时间内达到 0 的衰减。

asc_level

选择 ASC 对释放时间的影响程度,0 表示释放时间几乎没有变化,而 1 会产生更长的释放时间。

level(电平)

自动均衡输出信号。默认启用。如果启用,此功能会将音频标准化回 0dB。

延迟

补偿使用由启动参数设置的前瞻缓冲区引入的延迟。当流到达 EOF 时,也会刷新前瞻缓冲区中的有效音频数据。

根据选择的设置,建议在使用此滤波器之前将输入上采样 2 倍或 4 倍,使用 aresample

8.32 allpass

应用一个双极全通滤波器,中心频率(以 Hz 为单位)为 frequency,滤波器宽度为 width。全通滤波器会改变音频的频率与相位关系,而不会改变其频率与幅度关系。

该滤波器接受以下选项

频率,f

设置频率,单位为 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

阶数,o

设置滤波器阶数,可以是 1 或 2。默认值为 2。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

8.32.1 命令

此滤波器支持以下命令

频率,f

更改全通滤波器频率。命令语法为:“frequency

宽度类型,t

更改全通滤波器宽度类型。命令语法为:“width_type

宽度,w

更改全通滤波器宽度。命令语法为:“width

混合,m

更改全通滤波器混合。命令语法为:“mix

8.33 aloop

循环播放音频样本。

该滤波器接受以下选项

循环

设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。

size

设置最大样本数。默认值为 0。

开始

设置循环的第一个样本。默认值为 0。

时间

设置循环开始时间,单位为秒。仅当名为 start 的选项设置为 -1 时使用。

8.34 amerge

将两个或多个音频流合并为单个多通道流。

该滤波器接受以下选项

输入

设置输入数量。默认值为 2。

如果输入的声道布局是不相交的,因此是兼容的,则输出的声道布局将相应设置,并且通道将根据需要重新排序。如果输入的声道布局不相交,则输出将包含第一个输入的所有声道,然后是第二个输入的所有声道,并按此顺序排列,并且输出的声道布局将是与通道总数相对应的默认值。

例如,如果第一个输入是 2.1 (FL+FR+LF),第二个输入是 FC+BL+BR,那么输出将是 5.1,通道顺序如下:a1、a2、b1、a3、b2、b3(a1 是第一个输入的第一个声道,b1 是第二个输入的第一个声道)。

另一方面,如果两个输入都是立体声,则输出通道将按默认顺序排列:a1、a2、b1、b2,并且声道布局将被任意设置为 4.0,这可能不是预期的值。

所有输入必须具有相同的采样率和格式。

如果输入时长不同,则输出将以最短的输入时长为准结束。

8.34.1 示例

  • 将两个单声道文件合并为一个立体声流。
    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
    
  • 假设在 input.mkv 中有 1 个视频流和 6 个音频流的多次合并。
    ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
    

8.35 amix

将多个音频输入混合为一个输出。

请注意,此滤波器仅支持浮点采样(amergepan 音频滤波器支持多种格式)。如果 amix 输入具有整数采样,则会自动插入 aresample 来执行转换为浮点采样的操作。

它接受以下参数

输入

输入的数量。如果未指定,则默认为 2。

时长

如何确定流的结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

dropout_transition

当输入流结束时,用于音量重新归一化的过渡时间,以秒为单位。默认值为 2 秒。

weights

将每个输入音频流的权重指定为一系列以空格分隔的数字。如果指定的权重数量少于输入数量,则最后一个权重将分配给剩余的输入。每个输入的默认权重为 1。

normalize

始终缩放输入,而不是仅对样本进行求和。如果未在此滤波器之前或之后对输入进行归一化,则禁用此选项时要注意严重的削波。默认情况下启用此选项。

8.35.1 示例

  • 这将把 3 个输入音频流混合为一个输出,该输出的持续时间与第一个输入相同,并且具有 3 秒的丢弃过渡时间。
    ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
    
  • 这将把一个声乐和一个音乐输入音频流混合为一个输出,该输出的持续时间与最长输入相同。音乐的权重将是声乐的四分之一,并且输入未归一化。
    ffmpeg -i VOCALS -i MUSIC -filter_complex amix=inputs=2:duration=longest:dropout_transition=0:weights="1 0.25":normalize=0 OUTPUT
    

8.35.2 命令

此滤波器支持以下命令

weights
normalize

语法与同名选项相同。

8.36 amultiply

将第一个音频流与第二个音频流相乘,并将结果存储在输出音频流中。乘法是通过将第一个流的每个样本与第二个流中相同位置的样本相乘来完成的。

通过这种逐元素乘法,可以创建振幅衰减和振幅调制。

8.37 anequalizer

用于每个通道的高阶参数多频带均衡器。

它接受以下参数

params

此选项字符串的格式为:“cchn f=cf w=w g=g t=f | ...”。每个均衡器频带用“|”分隔。

chn

设置要应用均衡的通道号。如果输入没有该通道,则忽略该条目。

f

为频带设置中心频率。如果输入没有该频率,则忽略该条目。

w

设置频带宽度,以赫兹为单位。

g

设置频带增益,以分贝为单位。

t

设置频带的滤波器类型,可选,可以是

0

巴特沃斯,这是默认值。

1

切比雪夫类型 1。

2

切比雪夫类型 2。

curves

启用此选项后,均衡器的频率响应将显示在视频流中。

size

设置视频流大小。仅在激活 curves 选项时才有用。

mgain

设置将显示的最大增益。仅在激活 curves 选项时才有用。将此值设置为合理的值可以显示从彼此太近的相邻频段获得的增益,因此当两者都激活时会产生更高的增益。

fscale

设置用于在视频输出中绘制频率响应的频率刻度。可以是线性的或对数的。默认值是对数的。

colors

设置将要在视频流中显示的每个通道曲线的颜色。这是用空格或“|”分隔的颜色名称列表。无法识别或缺少的颜色将替换为白色。

8.37.1 示例

  • 使用切比雪夫类型 1 滤波器,将前 2 个通道的中心频率 200Hz 和宽度 100Hz 的增益降低 10。
    anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
    

8.37.2 命令

此滤波器支持以下命令

change

更改现有的滤波器参数。命令的语法为:“fN|f=freq|w=width|g=gain

fN 是现有的滤波器编号,从 0 开始,如果没有此类滤波器可用,则返回错误。freq 设置新的频率参数。width 设置新的宽度参数,以赫兹为单位。gain 设置新的增益参数,以分贝为单位。

带有 asendcmd 的完整滤波器调用可能如下所示:asendcmd=c=‘4.0 anequalizer change 0|f=200|w=50|g=1’,anequalizer=...

8.38 anlmdn

使用非局部均值算法降低音频样本中的宽带噪声。

每个样本都通过查找具有相似上下文的其他样本进行调整。此上下文相似性是通过比较大小为 p 的周围补丁来定义的。在样本周围 r 的区域中搜索补丁。

该滤波器接受以下选项

strength, s

设置降噪强度。允许的范围是 0.00001 到 10000。默认值为 0.00001。

patch, p

设置补丁半径持续时间。允许的范围是 1 到 100 毫秒。默认值为 2 毫秒。

research, r

设置研究半径持续时间。允许的范围是 2 到 300 毫秒。默认值为 6 毫秒。

输出,o

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递已过滤的噪声。

n

仅传递噪声。

默认值为 o

smooth, m

设置平滑因子。默认值为 11。允许的范围是 11000

8.38.1 命令

此过滤器支持以上所有选项作为 命令

8.39 anlmf, anlms

使用第二个音频流将归一化最小均方(平方|四次方)算法应用于第一个音频流。

此自适应滤波器用于通过查找与产生误差信号的最小均方相关的滤波器系数来模拟所需的滤波器(所需信号,第二个输入音频流和实际信号,第一个输入音频流之间的差异)。

以下是可接受选项的描述。

order

设置滤波器阶数。

mu

设置滤波器 mu。

eps

设置滤波器 eps。

leakage

设置滤波器泄漏。

out_mode

它接受以下值

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号(第二个输入)与误差信号估计值之间的差值。

n

传递输入信号(第一个输入)与误差信号估计值之间的差值。

e

传递误差信号的估计样本。

默认值为 o

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

8.39.1 示例

  • 此滤波器的众多用途之一是降噪,输入音频使用延迟固定量的相同样本进行滤波,立体声音频的一个示例是
    asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
    

8.39.2 命令

此滤波器支持与选项相同的命令,但选项 order 除外。

8.40 anull

将音频源不变地传递到输出。

8.41 apad

用静音填充音频流的结尾。

这可以与 ffmpeg -shortest 一起使用,以将音频流扩展到与视频流相同的长度。

以下是可接受选项的描述。

packet_size

设置静音数据包大小。默认值为 4096。

pad_len

设置添加到末尾的静音样本数。达到该值后,流将终止。此选项与 whole_len 互斥。

whole_len

设置输出音频流中最小的总样本数。如果该值大于输入音频长度,则会在末尾添加静音,直到达到该值。此选项与 pad_len 互斥。

pad_dur

指定要添加的静音样本的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。仅当设置为非负值时才使用。

whole_dur

指定输出音频流中的最小总持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。仅当设置为非负值时才使用。如果该值大于输入音频长度,则会在末尾添加静音,直到达到该值。此选项与 pad_dur 互斥。

如果未设置 pad_lenwhole_lenpad_durwhole_dur 选项,则过滤器将无限期地向输入流末尾添加静音。

请注意,对于 ffmpeg 4.4 及更早版本,零 pad_durwhole_dur 也会导致过滤器无限期地添加静音。

8.41.1 示例

  • 在输入末尾添加 1024 个静音样本
    apad=pad_len=1024
    
  • 确保音频输出至少包含 10000 个样本,如果需要,用静音填充输入
    apad=whole_len=10000
    
  • 使用 ffmpeg 用静音填充音频输入,以便在使用 shortest 选项时,视频流始终是最短的,并且会在输出文件中转换到末尾
    ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
    

8.42 aphaser

向输入音频添加相位效果。

相位器滤波器在频谱中产生一系列峰和谷。峰和谷的位置被调制,使其随时间变化,从而产生扫描效果。

下面是接受的参数的描述。

in_gain

设置输入增益。默认值为 0.4。

out_gain

设置输出增益。默认值为 0.74。

delay

设置延迟,单位为毫秒。默认值为 3.0。

decay

设置衰减。默认值为 0.4。

speed

设置调制速度,单位为 Hz。默认值为 0.5。

type(类型)

设置调制类型。默认值为三角形。

它接受以下值

triangular, t
sinusoidal, s

8.43 aphaseshift

将相移应用于输入音频样本。

该滤波器接受以下选项

shift

指定相移。允许的范围是 -1.0 到 1.0。默认值为 0.0。

level(电平)

设置应用于最终输出的输出增益。允许的范围是 0.0 到 1.0。默认值为 1.0。

order

设置用于滤波的滤波器阶数。允许的范围是 1 到 16。默认值为 8。

8.43.1 命令

此过滤器支持以上所有选项作为 命令

8.44 apsnr

测量音频峰值信噪比。

此过滤器接受两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,每个声道在任一输入结束时得出。

8.45 apsyclip

将心理声学削波器应用于输入音频流。

该滤波器接受以下选项

level_in

设置输入增益。默认值为 1。范围为 [0.015625 - 64]。

level_out(输出电平)

设置输出增益。默认值为 1。范围为 [0.015625 - 64]。

clip

设置削波开始值。默认值为 0dBFS 或 1。

diff

仅输出差值样本,有助于听到引入的失真。默认情况下禁用。

adaptive

设置应用自适应失真的强度。默认值为 0.5。允许的范围是 0 到 1。

iterations

设置心理声学削波器的迭代次数。允许的范围是 1 到 20。默认值为 10。

level(电平)

自动电平输出信号。默认情况下禁用。如果启用,此选项会将音频标准化回 0dBFS。

8.45.1 命令

此过滤器支持以上所有选项作为 命令

8.46 apulsator

音频脉冲器是自动平移器和颤音之间的东西。但它也可以产生有趣的立体声效果。脉冲器根据 LFO(低频振荡器)改变左右声道的音量,具有不同的波形和相移。此滤波器能够定义左右声道之间的偏移。偏移 0 表示两个 LFO 形状相互匹配。左右声道同样被改变 - 传统的颤音。偏移 50% 表示右声道的形状在相位上完全偏移(或向后移动大约频率的一半)- 脉冲器充当自动平移器。在 1 时,两条曲线再次匹配。两者之间的每个设置都会在所有阶段之间无间隙地移动相移,并使用正弦波和三角波产生一些“旁路”声音。您将偏移设置得越接近 1(从 0.5 开始),信号从左扬声器传递到右扬声器的速度就越快。

该滤波器接受以下选项

level_in

设置输入增益。默认值为 1。范围为 [0.015625 - 64]。

level_out(输出电平)

设置输出增益。默认值为 1。范围为 [0.015625 - 64]。

mode

设置 LFO 将使用的波形形状。可以是以下之一:正弦波、三角形、方波、锯齿波或锯齿波下降。默认值为正弦波。

设置调制。定义有多少原始信号受 LFO 影响。

offset_l

设置左声道偏移。默认值为 0。允许的范围是 [0 - 1]。

offset_r

设置右声道偏移。默认值为 0.5。允许的范围是 [0 - 1]。

width

设置脉冲宽度。默认值为 1。允许的范围是 [0 - 2]。

timing

设置可能的定时模式。可以是以下之一:bpm、ms 或 hz。默认值为 hz。

bpm

设置 bpm。默认值为 120。允许的范围是 [30 - 300]。仅当定时设置为 bpm 时才使用。

ms

设置 ms。默认值为 500。允许的范围是 [10 - 2000]。仅当定时设置为 ms 时才使用。

hz

设置频率,单位为 Hz。默认值为 2。允许的范围是 [0.01 - 100]。仅当定时设置为 hz 时才使用。

8.47 aresample

使用 libswresample 库将输入音频重采样为指定参数。如果未指定任何参数,则过滤器将在其输入和输出之间自动转换。

此过滤器还能够拉伸/挤压音频数据以使其与时间戳匹配,或注入静音/剪切音频以使其与时间戳匹配,或者执行两者或都不执行。

过滤器接受语法 [sample_rate:]resampler_options,其中 sample_rate 表示采样率,resampler_options 是由 ":" 分隔的 key=value 对的列表。有关支持的选项的完整列表,请参阅 (ffmpeg-resampler) ffmpeg-resampler(1) 手册中的“重采样器选项”部分

8.47.1 示例

  • 将输入音频重采样为 44100Hz
    aresample=44100
    
  • 将样本拉伸/挤压到给定的时间戳,每秒最多补偿 1000 个样本
    aresample=async=1000
    

8.48 areverse

反转音频剪辑。

警告:此过滤器需要内存来缓冲整个剪辑,因此建议进行修剪。

8.48.1 示例

  • 获取剪辑的前 5 秒,然后将其反转。
    atrim=end=5,areverse
    

8.49 arls

使用第二个音频流将递归最小二乘算法应用于第一个音频流。

此自适应滤波器用于通过递归查找与产生误差信号(期望信号,即第二个输入音频流,与实际信号,即第一个输入音频流之间的差异)的最小加权线性最小二乘成本函数相关的滤波器系数来模拟期望的滤波器。

以下是可接受选项的描述。

order

设置滤波器阶数。

lambda

设置遗忘因子。

delta

设置用于初始化内部协方差矩阵的系数。

out_mode

设置滤波器输出样本。它接受以下值

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号(第二个输入)与误差信号估计值之间的差值。

n

传递输入信号(第一个输入)与误差信号估计值之间的差值。

e

传递误差信号的估计样本。

默认值为 o

precision

设置处理样本时要使用的精度。

auto

根据其他滤波器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

8.50 arnndn

使用循环神经网络减少语音中的噪声。

此过滤器接受以下选项

model, m

设置要加载的训练模型文件。此选项始终是必需的。

mix

设置将过滤后的样本混合到最终输出中的程度。允许的范围是 -1 到 1。默认值为 1。负值是特殊的,它们设置在最终滤波器输出中保留多少过滤后的噪声。将此选项设置为 -1 可以听到从输入信号中去除的实际噪声。

8.50.1 命令

此过滤器支持以上所有选项作为 命令

8.51 asdr

测量音频信号失真比。

此过滤器接受两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,每个声道在任一输入结束时得出。

8.52 asetnsamples

设置每个输出音频帧的样本数。

最后一个输出数据包可能包含不同数量的样本,因为当输入音频信号表示其结尾时,过滤器将刷新所有剩余的样本。

该滤波器接受以下选项

nb_out_samples, n

设置每个输出音频帧的帧数。该数字表示每个通道的样本数。默认值为 1024。

pad, p

如果设置为 1,则过滤器将用零填充最后一个音频帧,以便最后一个帧将包含与前一个帧相同数量的样本。默认值为 1。

例如,要将每帧的采样数设置为 1234 并禁用最后一帧的填充,请使用:

asetnsamples=n=1234:p=0

8.53 asetrate

设置采样率,而不改变 PCM 数据。这将导致速度和音调的变化。

该滤波器接受以下选项

sample_rate, r

设置输出采样率。默认值为 44100 Hz。

8.54 ashowinfo

显示包含每个输入音频帧的各种信息的行。输入音频不会被修改。

显示的行包含 key:value 形式的键/值对序列。

输出中显示以下值

n

输入帧的(顺序)编号,从 0 开始。

pts

输入帧的表示时间戳,以时间基准单位表示;时间基准取决于滤波器输入填充,通常为 1/sample_rate

pts_time

输入帧的表示时间戳,以秒为单位。

fmt

采样格式。

chlayout

声道布局。

rate

音频帧的采样率。

nb_samples

帧中(每个声道)的采样数。

checksum

音频数据的 Adler-32 校验和(以十六进制打印)。对于平面音频,数据被视为所有平面都已连接。

plane_checksums

每个数据平面的 Adler-32 校验和列表。

8.55 asisdr

测量音频缩放不变信号失真比。

此过滤器接受两个音频流作为输入,并输出第一个音频流。结果以 dB 为单位,每个声道在任一输入结束时得出。

8.56 asoftclip

应用音频软削波。

软削波是一种失真效果,其中信号的幅度沿平滑曲线饱和,而不是硬削波的突兀形状。

此过滤器接受以下选项

type(类型)

设置软削波的类型。

它接受以下值

hard
tanh
atan
cubic
指数
alg
quintic
sin
erf
threshold

设置开始削波的阈值。默认值为 0dB 或 1。

output

设置应用于输出的增益。默认值为 0dB 或 1。

param

设置控制 sigmoid 函数的附加参数。

oversample

设置过采样因子。

8.56.1 命令

此过滤器支持以上所有选项作为 命令

8.57 aspectralstats

显示有关音频通道的频域统计信息。统计信息被计算并存储为每个音频通道和每个音频帧的元数据。

它接受以下选项

win_size

以采样为单位设置窗口长度。默认值为 2048。允许范围为 32 到 65536。

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是 hann

overlap

设置窗口重叠。允许范围为 01。默认值为 0.5

measure

选择要测量的参数。元数据键可以用作标志,默认值为 all,它测量所有内容。none 禁用所有测量。

下面是每个元数据键的列表

mean
variance
centroid
spread
skewness
kurtosis
entropy
flatness
crest
flux
斜率
decrease
rolloff

8.58 asr

自动语音识别

此过滤器使用 PocketSphinx 进行语音识别。要启用此过滤器的编译,您需要使用 --enable-pocketsphinx 配置 FFmpeg。

它接受以下选项

rate

设置输入音频的采样率。默认值为 16000。这需要与语音模型匹配,否则会得到较差的结果。

hmm

设置包含声学模型文件的字典。

dict

设置发音词典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置要使用的语言模型。

logfn

设置日志消息的输出。

过滤器将识别的语音导出为帧元数据 lavfi.asr.text

8.59 astats

显示有关音频通道的时域统计信息。统计信息被计算并显示用于每个音频通道,并且在适用的情况下,还会给出总体的数值。

它接受以下选项

length

短窗口长度,以秒为单位,用于峰值和谷值 RMS 测量。默认值为 0.05(50 毫秒)。允许范围为 [0 - 10]

metadata

设置元数据注入。所有元数据键都以 lavfi.astats.X 为前缀,其中 X 是从 1 开始的通道号或字符串 Overall。默认情况下禁用。

每个通道的可用键是:Bit_depth Crest_factor DC_offset Dynamic_range Entropy Flat_factor Max_difference Max_level Mean_difference Min_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Peak_count Abs_Peak_count Peak_level RMS_difference RMS_peak RMS_trough Zero_crossings Zero_crossings_rate

以及 Overall 的可用键:Bit_depth DC_offset Entropy Flat_factor Max_difference Max_level Mean_difference Min_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Number_of_samples Peak_count Abs_Peak_count Peak_level RMS_difference RMS_level RMS_peak RMS_trough

例如,完整的键看起来像 lavfi.astats.1.DC_offsetlavfi.astats.Overall.Peak_count

请阅读以下键的说明。

reset

设置在重置之前计算累积统计数据的帧数。默认禁用。

measure_perchannel

选择每个通道测量的参数。元数据键可以用作标志,默认值为 all,它测量所有内容。none 禁用所有按通道测量。

measure_overall

选择整体测量的参数。元数据键可以用作标志,默认值为 all,它测量所有内容。none 禁用所有整体测量。

以下是测量键的描述

无测量

all(全部)

所有测量

Bit_depth

音频的整体位深度,即每个采样使用的位数

Crest_factor

峰值与 RMS 标准比率(注意:不是以 dB 为单位)

DC_offset

与零的平均幅度位移

Dynamic_range

以 dB 为单位测量的音频动态范围

Entropy

在整个音频中测量的熵,对于白噪声,通常测得的熵值接近 1.0

Flat_factor

信号在其峰值水平(即 Min_levelMax_level)处的平坦度(即具有相同值的连续采样)

Max_difference

两个连续采样之间的最大差值

Max_level

最大采样水平

Mean_difference

两个连续采样之间的平均差值,即两个连续采样之间每个差值的平均值

Min_difference

两个连续采样之间的最小差值

Min_level

最小采样水平

Noise_floor

在短窗口内测量的最小局部峰值,以 dBFS 为单位

Noise_floor_count

信号达到 Noise floor 的次数(不是采样数)

Number_of_Infs

具有无穷值的采样数

Number_of_NaNs

具有 NaN(不是数字)值的采样数

Number_of_denormals

具有次正规值的采样数

Number_of_samples

采样数

Peak_count

信号达到 Min_levelMax_level 的次数(不是采样数)

Abs_Peak_count

从信号中获取的绝对采样达到 Min_levelMax_level 的最大绝对值的次数

Peak_level

以 dBFS 为单位测量的标准峰值水平

RMS_difference

两个连续采样之间的均方根差

RMS_level

以 dBFS 为单位测量的标准 RMS 水平

RMS_peak
RMS_trough

在短窗口内测量的 RMS 水平的峰值和谷值,以 dBFS 为单位测量。

Zero crossings

波形穿过零水平轴的点的数量

Zero crossings rate

过零率和音频采样数

8.60 asubboost

增强低音炮频率。

该滤波器接受以下选项

dry

设置干声增益,表示保留原始信号的量。允许的范围是 0 到 1。默认值是 1.0。

wet

设置湿声增益,表示保留滤波后信号的量。允许的范围是 0 到 1。默认值是 1.0。

增强

设置最大增强因子。允许的范围是 1 到 12。默认值是 2。

decay

设置延迟线衰减增益值。允许的范围是 0 到 1。默认值是 0.0。

反馈

设置延迟线反馈增益值。允许的范围是 0 到 1。默认值是 0.9。

截止

设置截止频率,单位为赫兹。允许的范围是 50 到 900。默认值是 100。

斜率

设置截止频率的斜率大小。允许的范围是 0.0001 到 1。默认值是 0.5。

delay

设置延迟。允许的范围是 1 到 100。默认值是 20。

channels(通道)

设置要处理的通道。默认值是所有可用通道。

8.60.1 命令

此过滤器支持以上所有选项作为 命令

8.61 asubcut

切除超低音频率。

此滤波器允许设置比高通滤波器更陡峭的滚降,因此能够更好地衰减阻带中的频率成分。

该滤波器接受以下选项

截止

设置截止频率,单位为赫兹。允许的范围是 2 到 200。默认值是 20。

order

设置滤波器阶数。可用值从 3 到 20。默认值是 10。

level(电平)

设置输入增益电平。允许范围是 0 到 1。默认值是 1。

8.61.1 命令

此过滤器支持以上所有选项作为 命令

8.62 asupercut

切除超高频率。

该滤波器接受以下选项

截止

设置截止频率,单位为赫兹。允许的范围是 20000 到 192000。默认值是 20000。

order

设置滤波器阶数。可用值从 3 到 20。默认值是 10。

level(电平)

设置输入增益电平。允许范围是 0 到 1。默认值是 1。

8.62.1 命令

此过滤器支持以上所有选项作为 命令

8.63 asuperpass

应用高阶巴特沃斯带通滤波器。

该滤波器接受以下选项

中心频率

设置中心频率,单位为赫兹。允许的范围是 2 到 999999。默认值是 1000。

order

设置滤波器阶数。可用值从 4 到 20。默认值是 4。

品质因数

设置 Q 值。允许的范围是 0.01 到 100。默认值是 1。

level(电平)

设置输入增益电平。允许的范围是 0 到 2。默认值是 1。

8.63.1 命令

此过滤器支持以上所有选项作为 命令

8.64 asuperstop

应用高阶巴特沃斯带阻滤波器。

该滤波器接受以下选项

中心频率

设置中心频率,单位为赫兹。允许的范围是 2 到 999999。默认值是 1000。

order

设置滤波器阶数。可用值从 4 到 20。默认值是 4。

品质因数

设置 Q 值。允许的范围是 0.01 到 100。默认值是 1。

level(电平)

设置输入增益电平。允许的范围是 0 到 2。默认值是 1。

8.64.1 命令

此过滤器支持以上所有选项作为 命令

8.65 atempo

调整音频速度。

该滤波器只接受一个参数,即音频速度。如果未指定,则滤波器将假定标准速度为 1.0。速度必须在 [0.5, 100.0] 范围内。

请注意,速度大于 2 将跳过某些样本,而不是将它们混合。如果出于任何原因担心这一点,可以始终链式连接多个 atempo 实例来实现所需的速度。

8.65.1 示例

  • 将音频速度减慢至 80%
    atempo=0.8
    
  • 将音频速度加快至 300%
    atempo=3
    
  • 通过链式连接两个 atempo 实例将音频速度加快至 300%
    atempo=sqrt(3),atempo=sqrt(3)
    

8.65.2 命令

此滤波器支持以下命令

速度

更改滤波器速度缩放因子。命令的语法为:“tempo

8.66 atilt

将频谱倾斜滤波器应用于音频流。

此滤波器在任何指定频带上应用任何频谱滚降斜率。

该滤波器接受以下选项

频率

设置倾斜的中心频率,单位为赫兹。默认值为 10000 赫兹。

斜率

设置倾斜的斜率方向。默认值为 0。允许的范围是 -1 到 1。

width

设置倾斜的宽度。默认值为 1000。允许的范围是 100 到 10000。

order

设置倾斜滤波器的阶数。

level(电平)

设置输入音量级别。允许的范围是 0 到 4。默认值是 1。

8.66.1 命令

此过滤器支持以上所有选项作为 命令

8.67 atrim

修剪输入,使输出包含输入的连续子部分。

它接受以下参数

开始

要保留的片段的开始时间戳(以秒为单位)。即,时间戳为 start 的音频样本将是输出中的第一个样本。

结束

指定将丢弃的第一个音频样本的时间,即,时间戳为 end 的样本之前的音频样本将是输出中的最后一个样本。

开始点

start 相同,但此选项设置以样本而非秒为单位的起始时间戳。

结束点

end 相同,但此选项设置以样本而非秒为单位的结束时间戳。

时长

输出的最大持续时间(以秒为单位)。

开始样本

应该输出的第一个样本的编号。

结束样本

应该丢弃的第一个样本的编号。

startendduration 表示为时间持续时间规范;请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分

请注意,前两组 start/end 选项和 duration 选项查看帧时间戳,而 _sample 选项只是计算通过滤波器的样本。因此,当时间戳错误、不准确或未从零开始时,start/end_pts 和 start/end_sample 将给出不同的结果。另请注意,此滤波器不会修改时间戳。如果您希望输出时间戳从零开始,请在 atrim 滤波器之后插入 asetpts 滤波器。

如果设置了多个开始或结束选项,此滤波器会尝试变得贪婪并保留至少匹配一个指定约束的所有样本。要仅保留一次匹配所有约束的部分,请链接多个 atrim 滤波器。

默认值是保留所有输入。因此,可以仅设置例如结束值以保留指定时间之前的所有内容。

示例

  • 丢弃除输入第二分钟之外的所有内容
    ffmpeg -i INPUT -af atrim=60:120
    
  • 仅保留前 1000 个样本
    ffmpeg -i INPUT -af atrim=end_sample=1000
    

8.68 axcorrelate

计算两个输入音频流之间的归一化窗口互相关。

结果样本始终介于 -1 和 1 之间(包括 -1 和 1)。如果结果为 1,则表示两个输入样本在该选定片段中高度相关。结果为 0 表示它们根本不相关。如果结果为 -1,则表示两个输入样本异相,这意味着它们会相互抵消。

该滤波器接受以下选项

size

设置计算互相关的片段大小。默认值为 256。允许的范围是 2 到 131072。

算法

设置互相关算法。可以是 slowfastbest。默认值为 best。快速算法假设任何给定片段的平均值始终为零,因此需要更少的计算。这通常不是真的,但对于典型的音频流有效。

8.68.1 示例

  • 计算立体声音频流中通道之间的相关性
    ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
    

8.69 bandpass

应用一个双极巴特沃斯带通滤波器,其中心频率为 frequency,(3dB 点)带宽为宽度。csg 选项选择恒定的裙边增益(峰值增益 = Q),而不是默认值:恒定的 0dB 峰值增益。滤波器以每倍频程 6dB(每十倍频 20dB)的速度滚降。

该滤波器接受以下选项

频率,f

设置滤波器的中心频率。默认值为 3000

csg

如果设置为 1,则为恒定的裙边增益。默认为 0。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.69.1 命令

此滤波器支持以下命令

频率,f

更改带通频率。命令的语法为:“frequency

宽度类型,t

更改带通宽度类型。命令的语法为:“width_type

宽度,w

更改带通宽度。命令的语法为:“width

混合,m

更改带通混合。命令的语法为:“mix

8.70 bandreject

应用一个二极点巴特沃斯带阻滤波器,中心频率为 frequency,(3dB 点)带宽为 width。滤波器的滚降率为每倍频程 6dB(每十倍频程 20dB)。

该滤波器接受以下选项

频率,f

设置滤波器的中心频率。默认值为 3000

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.70.1 命令

此滤波器支持以下命令

频率,f

更改带阻频率。命令语法为:“frequency

宽度类型,t

更改带阻宽度类型。命令语法为:“width_type

宽度,w

更改带阻宽度。命令语法为:“width

混合,m

更改带阻混合。命令语法为:“mix

8.71 bass, lowshelf

使用类似于标准高保真音调控制的响应的二极点搁架滤波器,增强或衰减音频的低音(较低)频率。这也称为搁架均衡(EQ)。

该滤波器接受以下选项

增益,g

给出 0 Hz 的增益。其有用范围约为 -20(大幅衰减)到 +20(大幅增强)。使用正增益时,请注意削波。

频率,f

设置滤波器的中心频率,因此可用于扩展或减少要增强或衰减的频率范围。默认值为 100 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

确定滤波器搁架转换的陡峭程度。

极点,p

设置极点数。默认为 2。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.71.1 命令

此滤波器支持以下命令

频率,f

更改低音频率。命令语法为:“frequency

宽度类型,t

更改低音宽度类型。命令语法为:“width_type

宽度,w

更改低音宽度。命令语法为:“width

增益,g

更改低音增益。命令语法为:“gain

混合,m

更改低音混合。命令语法为:“mix

8.72 biquad

应用具有给定系数的双二阶 IIR 滤波器。其中 b0b1b2a0a1a2 分别是分子和分母系数。而 channelsc 指定要过滤的声道,默认情况下会过滤所有可用的声道。

8.72.1 命令

此滤波器支持以下命令

a0
a1
a2
b0
b1
b2

更改双二阶参数。命令语法为:“value

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.73 bs2b

Bauer 立体声到双耳转换,可改善立体声音频记录的耳机聆听效果。

要启用此滤波器的编译,您需要使用 --enable-libbs2b 配置 FFmpeg。

它接受以下参数

profile

预定义的串音级别。

default

默认级别(fcut=700,feed=50)。

cmoy

Chu Moy 电路(fcut=700,feed=60)。

jmeier

Jan Meier 电路(fcut=650,feed=95)。

fcut

截止频率(以 Hz 为单位)。

feed

馈送级别(以 Hz 为单位)。

8.74 channelmap

将输入通道重新映射到新的位置。

它接受以下参数

map

将通道从输入映射到输出。该参数是以“|”分隔的映射列表,每个映射的形式为 in_channel-out_channelin_channelin_channel 可以是输入通道的名称(例如,FL 代表前左),也可以是其在输入通道布局中的索引。out_channel 是输出通道的名称或其在输出通道布局中的索引。如果未给出 out_channel,则它隐式地是一个索引,从零开始,并且每个映射递增 1。不允许混合不同类型的映射,否则会导致解析错误。

channel_layout

输出流的通道布局。如果未指定,则过滤器将根据 out_channel 名称或映射数量进行猜测。猜测的布局不一定包含按映射顺序排列的通道。

如果不存在映射,则过滤器将隐式地将输入通道映射到输出通道,并保留索引。

8.74.1 示例

  • 例如,假设一个 5.1+降混输入 MOV 文件,
    ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
    

    将从输入的降混通道创建一个标记为立体的输出 WAV 文件。

  • 修复以 AAC 原生通道顺序错误编码的 5.1 WAV
    ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
    

8.75 channelsplit

将输入音频流中的每个通道拆分为单独的输出流。

它接受以下参数

channel_layout

输入流的通道布局。默认值为“stereo”。

channels(通道)

描述要提取为单独输出流的通道的通道布局,或者使用“all”来将每个输入通道提取为单独的流。默认值为“all”。

选择输入通道布局中不存在的通道将导致错误。

8.75.1 示例

  • 例如,假设一个立体声输入 MP3 文件,
    ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
    

    将创建一个带有两个音频流的输出 Matroska 文件,一个仅包含左声道,另一个包含右声道。

  • 将 5.1 WAV 文件拆分为每个通道的文件
    ffmpeg -i in.wav -filter_complex
    'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
    -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
    front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
    side_right.wav
    
  • 仅从 5.1 WAV 文件中提取 LFE
    ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1:channels=LFE[LFE]'
    -map '[LFE]' lfe.wav
    

8.76 chorus

向音频添加合唱效果。

可以使单个声音听起来像合唱,但也可以应用于乐器。

合唱类似于延迟很短的回声效果,但回声的延迟是恒定的,而合唱则使用正弦或三角形调制来改变延迟。调制深度定义了在延迟之前或之后播放的调制延迟范围。因此,延迟的声音听起来会更慢或更快,也就是说,延迟的声音围绕原始声音进行调整,就像在合唱中,一些人声略微跑调一样。

它接受以下参数

in_gain

设置输入增益。默认值为 0.4。

out_gain

设置输出增益。默认值为 0.4。

delays(延迟)

设置延迟。典型的延迟约为 40 毫秒到 60 毫秒。

decays

设置衰减。

speeds

设置速度。

depths

设置深度。

8.76.1 示例

  • 单延迟
    chorus=0.7:0.9:55:0.4:0.25:2
    
  • 双延迟
    chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3
    
  • 带有三个延迟的更饱满的合唱
    chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
    

8.77 compand

压缩或扩展音频的动态范围。

它接受以下参数

attacks
decays

一个以秒为单位的时间列表,用于计算每个通道的输入信号瞬时电平的平均值以确定其音量。attacks 指的是音量的增加,而 decays 指的是音量的减小。在大多数情况下,起音时间(对音频变大的响应)应短于衰减时间,因为人耳对突然出现的大音量比突然出现的柔和音量更敏感。起音的典型值为 0.3 秒,衰减的典型值为 0.8 秒。如果指定的起音和衰减次数少于通道数,则最后一个设置的起音/衰减将用于所有剩余通道。

points

传输函数的点列表,以相对于最大可能信号幅度的 dB 为单位指定。每个关键点列表必须使用以下语法定义:x0/y0|x1/y1|x2/y2|....x0/y0 x1/y1 x2/y2 ....

输入值必须严格按递增顺序排列,但传输函数不必单调上升。假设点 0/0,但可以被覆盖(通过 0/out-dBn)。传输函数的典型值为 -70/-70|-60/-20|1/0

soft-knee

设置所有接合点的曲线半径(以 dB 为单位)。默认为 0.01。

gain

设置要应用于传输函数上所有点的额外增益(以 dB 为单位)。这样可以轻松调整整体增益。默认为 0。

volume

设置过滤开始时每个通道的假定初始音量(以 dB 为单位)。这允许用户最初提供一个标称电平,这样,例如,在压扩开始工作之前,不会对初始信号电平施加非常大的增益。最初安静的音频的典型值为 -90 dB。默认为 0。

delay

设置延迟(以秒为单位)。立即分析输入音频,但在将音频馈送到音量调节器之前会延迟。指定一个近似等于起音/衰减时间的延迟,可以使滤波器有效地以预测模式而不是反应模式运行。默认为 0。

8.77.1 示例

  • 使同时具有安静和响亮片段的音乐适合在嘈杂的环境中聆听
    compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
    

    另一个用于具有耳语和爆炸声的音频的示例

    compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
    
  • 当噪声级别低于信号级别时使用的噪声门
    compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
    
  • 这是另一个噪声门,这次用于噪声级别高于信号级别的情况(在某些方面,它类似于静噪)
    compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
    
  • 从 -6dB 开始的 2:1 压缩
    compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
    
  • 从 -9dB 开始的 2:1 压缩
    compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
    
  • 从 -12dB 开始的 2:1 压缩
    compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
    
  • 从 -18dB 开始的 2:1 压缩
    compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
    
  • 从 -15dB 开始的 3:1 压缩
    compand=points=-80/-80|-15/-15|0/-10.8|20/-5.2
    
  • 压缩器/门限器
    compand=points=-80/-105|-62/-80|-15.4/-15.4|0/-12|20/-7.6
    
  • 扩展器
    compand=attacks=0:points=-80/-169|-54/-80|-49.5/-64.6|-41.1/-41.1|-25.8/-15|-10.8/-4.5|0/0|20/8.3
    
  • 在 -6dB 处的硬限幅器
    compand=attacks=0:points=-80/-80|-6/-6|20/-6
    
  • 在 -12dB 处的硬限幅器
    compand=attacks=0:points=-80/-80|-12/-12|20/-12
    
  • 在 -35 dB 处的硬噪声门
    compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
    
  • 软限幅器
    compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
    

8.78 compensationdelay

补偿延迟线是一种基于度量的延迟,用于补偿麦克风或扬声器位置的不同。

例如,您用两个放置在不同位置的麦克风录制了吉他。由于声波前沿在正常条件下具有固定的速度,麦克风的相位可能因其位置和相互位置而异。当这些麦克风同相(同步)时,可以获得最佳的混音效果。请注意,麦克风之间约 30 厘米的距离会导致一个麦克风捕获的信号与另一个麦克风的信号反相。这会使最终混音听起来不稳定。此滤波器通过向每个麦克风轨道添加不同的延迟并使其同步来帮助解决相位问题。

当您将一个轨道作为基准并将其与其他轨道逐一同步时,可以达到最佳效果。请记住,同步/延迟容差也取决于采样率。较高的采样率将提供更高的容差。

该滤波器接受以下参数

mm

设置毫米距离。这是用于微调的补偿距离。默认为 0。

cm

设置厘米距离。这是用于收紧距离设置的补偿距离。默认为 0。

m

设置米距离。这是用于硬距离设置的补偿距离。默认为 0。

dry

设置干声量。未处理(干)信号的量。默认为 0。

wet

设置湿声量。已处理(湿)信号的量。默认为 1。

temp

设置摄氏温度。这是环境温度。默认为 20。

8.78.1 命令

此过滤器支持以上所有选项作为 命令

8.79 crossfeed

应用耳机串音滤波器。

串音是混合立体声音频录音的左右声道的过程。它主要用于减少低频的极端立体声分离。

目的是为听者产生更像扬声器的声音。

该滤波器接受以下选项

strength

设置串音的强度。默认为 0.2。允许范围为 0 到 1。这设置了立体声图像侧面的低搁架滤波器的增益。默认为 -6dB。当强度设置为 1 时,允许的最大值为 -30db。

range

设置声场的宽度。默认为 0.5。允许范围为 0 到 1。这设置了低搁架滤波器的截止频率。默认情况下,截止频率接近 1550 Hz。当范围设置为 1 时,截止频率设置为 2100 Hz。

斜率

设置低搁架滤波器的曲线斜率。默认为 0.5。允许范围为 0.01 到 1。

level_in

设置输入增益。默认为 0.9。

level_out(输出电平)

设置输出增益。默认值为 1。

block_size

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.79.1 命令

此过滤器支持以上所有选项作为 命令

8.80 crystalizer

用于音频噪声锐化的简单算法。

此滤波器线性增加每个音频样本之间的差异。

该滤波器接受以下选项

i

设置效果强度(默认值:2.0)。必须在 -10.0 到 0(声音不变)到 10.0(最大效果)之间的范围内。要反转滤波,请使用负值。

c

启用削波。默认情况下启用。

8.80.1 命令

此过滤器支持以上所有选项作为 命令

8.81 dcshift

将直流偏移应用于音频。

这对于从音频中消除直流偏移(可能是由录音链中的硬件问题引起的)非常有用。直流偏移的影响是降低了动态余量,从而降低了音量。可以使用 astats 滤波器来确定信号是否具有直流偏移。

shift

设置直流偏移,允许范围为 [-1, 1]。它指示音频偏移的量。

limitergain

可选。它的值应远小于 1(例如 0.05 或 0.02),用于防止削波。

8.82 deesser

对音频样本应用齿音消除。

i

设置触发齿音消除的强度。允许范围为 0 到 1。默认为 0。

m

设置对声音高音部分进行闪避的量。允许范围为 0 到 1。默认为 0.5。

f

进行齿音消除时保留多少原始频率内容。允许范围为 0 到 1。默认为 0.5。

s

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递过滤掉的齿音。

e

仅传递齿音。

默认值为 o

8.83 dialoguenhance

增强立体声音频中的对话。

此滤波器接受立体声输入并产生环绕声 (3.0) 声道输出。新产生的前置中央声道增强了最初在两个立体声道中都可用的语音对话。此滤波器输出前置左声道和前置右声道,与立体声输入中可用的一样。

该滤波器接受以下选项

original

设置在前置中央声道输出中保留的原始中心因子。允许范围为 0 到 1。默认值为 1。

enhance

设置要放入前置中央声道输出中的对话增强因子。允许范围为 0 到 3。默认值为 1。

voice

设置语音检测因子。允许范围为 2 到 32。默认值为 2。

8.83.1 命令

此过滤器支持以上所有选项作为 命令

8.84 drmeter

测量音频动态范围。

在非常动态的素材中发现 14 及更高的 DR 值。在过渡素材中发现 8 到 13 的 DR。任何小于 8 的值都具有非常差的动态,并且被高度压缩。

该滤波器接受以下选项

length

设置用于将音频分割为等长段的窗口长度(以秒为单位)。默认为 3 秒。

8.85 dynaudnorm

动态音频归一化器。

此滤波器对输入音频应用一定量的增益,以使其峰值幅度达到目标水平(例如 0 dBFS)。但是,与更“简单”的归一化算法相比,“动态音频归一化器”会“动态”地重新调整输入音频的增益因子。这允许对音频的“安静”部分应用额外的增益,同时避免“嘈杂”部分的失真或削波。换句话说:“动态音频归一化器”将“平衡”安静和嘈杂部分的音量,从某种意义上说,每个部分的音量都被带到相同的目标水平。但是,请注意,“动态音频归一化器”在不应用“动态范围压缩”的情况下实现了此目标。它将保留音频文件每个部分中 100% 的动态范围。

framelen, f

设置帧长度(以毫秒为单位)。范围为 10 到 8000 毫秒。默认为 500 毫秒。“动态音频归一化器”以称为帧的小块处理输入音频。这是必需的,因为峰值幅度对于单个样本值没有意义。相反,我们需要确定连续样本值序列的峰值幅度。虽然“标准”归一化器会简单地使用整个文件的峰值幅度,但“动态音频归一化器”会单独确定每一帧的峰值幅度。帧的长度以毫秒为单位指定。默认情况下,“动态音频归一化器”使用 500 毫秒的帧长度,该长度已被发现可以在大多数文件中获得良好的结果。请注意,确切的帧长度(以样本数为单位)将根据各个输入音频文件的采样率自动确定。

gausssize, g

设置高斯滤波器窗口大小。范围为 3 到 301,必须为奇数。默认值为 31。动态音频均衡器最重要的参数可能是高斯平滑滤波器的窗口大小。滤波器的窗口大小以帧为单位指定,以当前帧为中心。为了简单起见,这必须是一个奇数。因此,默认值 31 会考虑当前帧,以及前 15 帧和后 15 帧。使用较大的窗口会产生更强的平滑效果,从而导致较小的增益变化,即较慢的增益自适应。相反,使用较小的窗口会产生较弱的平滑效果,从而导致较大的增益变化,即更快的增益自适应。换句话说,您增加此值越多,动态音频均衡器就越像“传统”均衡滤波器。相反,您减少此值越多,动态音频均衡器就越像动态范围压缩器。

峰值,p

设置目标峰值。这指定了归一化音频输入允许的最高幅度级别。此滤波器将尝试尽可能接近目标峰值幅度,但同时也要确保归一化信号永远不会超过峰值幅度。帧的最大局部增益因子直接由目标峰值幅度决定。默认值为 0.95,因此留有 5% 的余量*。不建议高于此值。

最大增益,m

设置最大增益因子。范围为 1.0 到 100.0。默认值为 10.0。动态音频均衡器确定每个输入帧的最大可能(局部)增益因子,即不会导致削波或失真的最大增益因子。最大增益因子由帧的最高幅度样本确定。但是,动态音频均衡器还会将帧的最大增益因子限制在预定的(全局)最大增益因子范围内。这样做是为了避免在“静音”或几乎静音的帧中出现过高的增益因子。默认情况下,最大增益因子为 10.0。对于大多数输入,默认值应该足够,通常不建议增加此值。但是,对于整体音量水平极低的输入,可能需要允许更高的增益因子。但请注意,动态音频均衡器不会简单地应用“硬”阈值(即,截止高于阈值的值)。相反,将应用“sigmoid”阈值函数。这样,增益因子将平滑地接近阈值,但永远不会超过该值。

目标 RMS,r

设置目标 RMS。范围为 0.0 到 1.0。默认值为 0.0 - 禁用。默认情况下,动态音频均衡器执行“峰值”归一化。这意味着每个帧的最大局部增益因子仅由帧的最高幅度样本定义。这样,可以在不超出最大信号级别(即不削波)的情况下尽可能放大样本。但是,可以选择让动态音频均衡器也考虑帧的均方根值,缩写为 RMS。在电气工程中,RMS 通常用于确定时变信号的功率。因此,人们认为 RMS 比仅仅查看信号的峰值幅度更能近似“感知响度”。因此,通过将所有帧调整为恒定的 RMS 值,可以建立统一的“感知响度”。如果已指定目标 RMS 值,则帧的局部增益因子定义为恰好导致该 RMS 值的因子。但是请注意,最大局部增益因子仍然受到帧的最高幅度样本的限制,以防止削波。

耦合,n

启用通道耦合。默认情况下启用。默认情况下,动态音频均衡器将所有通道放大相同的量。这意味着相同的增益因子将应用于所有通道,即最大可能增益因子由“最响”的通道确定。但是,在某些录音中,可能会出现不同通道的音量不均匀的情况,例如,一个通道可能比其他通道“安静”。在这种情况下,可以使用此选项禁用通道耦合。这样,增益因子将独立地为每个通道确定,仅取决于各个通道的最高幅度样本。这允许协调不同通道的音量。

校正直流偏置,c

启用直流偏置校正。默认情况下禁用。音频信号(在时域中)是一系列样本值。在动态音频均衡器中,这些样本值以 -1.0 到 1.0 的范围表示,而与原始输入格式无关。通常,音频信号或“波形”应以零点为中心。这意味着,如果我们计算文件中或单个帧中所有样本的平均值,则结果应为 0.0 或至少非常接近该值。但是,如果平均值与 0.0 存在显着偏差(无论是正方向还是负方向),则称为直流偏置或直流偏移。由于直流偏置显然是不希望的,因此动态音频均衡器提供可选的直流偏置校正。启用直流偏置校正后,动态音频均衡器将确定每个输入帧的平均值或“直流校正”偏移量,并从该帧的所有样本值中减去该值,从而确保这些样本再次以 0.0 为中心。此外,为了避免帧边界处的“间隙”,直流校正偏移值将在相邻帧之间平滑插值。

备用边界,b

启用备用边界模式。默认情况下禁用。动态音频均衡器会考虑每个帧周围的特定邻域。这包括前面的帧以及后面的帧。但是,对于位于音频文件最开始和最结尾的“边界”帧,并非所有相邻帧都可用。特别是,对于音频文件中的前几个帧,前面的帧是未知的。同样,对于音频文件中的最后几个帧,后面的帧是未知的。因此,问题是如何假设“边界”区域中缺失帧的增益因子。动态音频均衡器实现了两种模式来处理这种情况。默认边界模式假设缺失帧的增益因子正好为 1.0,从而分别在输入的开头和结尾产生平滑的“淡入”和“淡出”。

压缩,s

设置压缩因子。范围从 0.0 到 30.0。默认值为 0.0。默认情况下,动态音频均衡器不应用“传统”压缩。这意味着信号峰值不会被削减,因此每个局部邻域内将保留完整的动态范围。但是,在某些情况下,可能需要将动态音频均衡器的均衡算法与更“传统”的压缩相结合。为此,动态音频均衡器提供了一个可选的压缩(阈值)功能。如果(且仅当)启用了压缩功能,则所有输入帧将在实际均衡过程之前由一个软膝阈值函数处理。简单来说,阈值函数将削减所有幅度超过某个阈值的样本。但是,动态音频均衡器不会简单地应用固定的阈值。相反,阈值将针对每个单独的帧进行调整。通常,较小的参数会导致较强的压缩,反之亦然。不建议使用低于 3.0 的值,因为可能会出现可听失真。

threshold, t(阈值,t)

设置目标阈值。这指定了要均衡的音频输入允许的最低幅度级别。如果输入帧音量高于此值,则将均衡该帧。否则,帧可能根本不会被均衡。默认值设置为 0,这意味着将均衡所有输入帧。如果不想放大数字噪声,此选项最有用。

通道,h

指定要过滤的通道,默认情况下会过滤所有可用通道。

overlap, o

指定帧的重叠。如果设置为 0(默认值),则不进行帧重叠。使用 >0 且 <1 的值将使增益调整不那么保守,就像将 framelen 选项设置为较小的值一样。如果 framelen 选项的值针对非零重叠进行了补偿,则与零重叠情况相比,增益调整在时间上将更平滑。

曲线,v

指定在计算应用于帧的增益时将使用的峰值映射曲线表达式。最大输出帧增益仍将受到此过滤器先前提到的其他选项的限制。

表达式可以包含以下常量

ch

当前通道号

sn

当前采样号

nb_channels

通道数

t

时间戳,以秒表示

sr

采样率

p

当前帧峰值

8.85.1 命令

此过滤器支持以上所有选项作为 命令

8.86 earwax

使音频在耳机上更容易收听。

此滤波器向 44.1kHz 立体声(即音频 CD 格式)音频添加“提示”,以便在耳机上收听时,立体声图像从您的头部内部(耳机的标准)移动到外部和听众的前面(扬声器的标准)。

从 SoX 移植。

8.87 equalizer

应用双极峰值均衡 (EQ) 滤波器。使用此滤波器,可以在选定频率及其周围增加或减少信号电平,同时(与带通和带阻滤波器不同)所有其他频率的信号电平保持不变。

为了产生复杂的均衡曲线,可以多次使用此滤波器,每次使用不同的中心频率。

该滤波器接受以下选项

频率,f

以 Hz 为单位设置滤波器的中心频率。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。

增益,g

以 dB 为单位设置所需的增益或衰减。使用正增益时请注意削波。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.87.1 示例

  • 在 1000 Hz 处衰减 10 dB,带宽为 200 Hz
    equalizer=f=1000:t=h:width=200:g=-10
    
  • 在 1000 Hz 处应用 2 dB 增益,Q 为 1,在 100 Hz 处衰减 5 dB,Q 为 2
    equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
    

8.87.2 命令

此滤波器支持以下命令

频率,f

更改均衡器频率。命令语法为:“频率

宽度类型,t

更改均衡器宽度类型。命令语法为:“宽度类型

宽度,w

更改均衡器宽度。命令语法为:“宽度

增益,g

更改均衡器增益。命令语法为:“增益

混合,m

更改均衡器混合。命令语法为:“混合

8.88 extrastereo

线性增加左右声道之间的差异,这会为播放添加某种“现场”效果。

该滤波器接受以下选项

m

设置差异系数(默认值:2.5)。0.0 表示单声道声音(两个声道的平均值),1.0 表示声音不变,-1.0 表示左右声道将交换。

c

启用削波。默认情况下启用。

8.88.1 命令

此过滤器支持以上所有选项作为 命令

8.89 firequalizer

使用任意频率响应应用 FIR 均衡。

此滤波器接受以下选项

gain

设置增益曲线方程(以 dB 为单位)。表达式可以包含变量

f

评估的频率

sr

采样率

ch

通道号,当禁用多通道评估时,设置为 0

chid

通道 ID,请参阅 libavutil/channel_layout.h,当禁用多通道评估时,设置为第一个通道 ID

chs

通道数

chlayout

channel_layout,请参阅 libavutil/channel_layout.h

和函数

gain_interpolate(f)

基于 gain_entry 在频率 f 上插值增益

cubic_interpolate(f)

与 gain_interpolate 相同,但更平滑

此选项也可用作命令。默认值为 gain_interpolate(f)

gain_entry

为 gain_interpolate 函数设置增益条目。表达式可以包含函数

entry(f, g)

在频率 f 处存储增益条目,值为 g

此选项也可用作命令。

delay

设置滤波器延迟(以秒为单位)。值越高,精度越高。默认值为 0.01

精度

以 Hz 为单位设置滤波器精度。值越低,精度越高。默认值为 5

wfunc

设置窗口函数。可接受的值为

矩形

矩形窗口,当增益曲线已经平滑时很有用

汉宁

汉宁窗口(默认)

海明

海明窗口

布莱克曼

布莱克曼窗口

nuttall3

三项连续一阶导数 nuttall 窗口

mnuttall3

最小三项不连续 nuttall 窗口

nuttall

四项连续一阶导数 nuttall 窗口

bnuttall

最小四项不连续 nuttall(布莱克曼-纳特尔)窗口

bharris

布莱克曼-哈里斯窗口

tukey

tukey 窗口

固定

如果启用,则使用固定数量的音频样本。这在以大延迟进行滤波时提高了速度。默认情况下禁用。

启用增益的多通道评估。默认情况下禁用。

zero_phase

通过减去时间戳来补偿延迟,启用零相位模式。默认情况下禁用。

scale

设置增益使用的刻度。可接受的值为

linlin

线性频率,线性增益

linlog

线性频率,对数(以 dB 为单位)增益(默认)

loglin

对数(以 20 Hz 为 0 的八度音阶)频率,线性增益

loglog

对数频率,对数增益

dumpfile

设置用于转储的文件,适用于 gnuplot。

dumpscale

设置转储文件的刻度。可接受的值与 scale 选项相同。默认值为 linlog。

fft2

使用复数 FFT 启用双通道卷积。这可以显著提高速度。默认情况下禁用。

min_phase

启用最小相位脉冲响应。默认情况下禁用。

8.89.1 示例

  • 在 1000 Hz 处低通
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 在 1000 Hz 处低通,带有 gain_entry
    firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
    
  • 自定义均衡
    firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
    
  • 更高延迟的零相位来补偿延迟
    firequalizer=delay=0.1:fixed=on:zero_phase=on
    
  • 左通道低通,右通道高通
    firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))'
    :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
    

8.90 flanger

将镶边效果应用于音频。

该滤波器接受以下选项

delay

设置基本延迟(以毫秒为单位)。范围从 0 到 30。默认值为 0。

深度

设置添加的扫描延迟(以毫秒为单位)。范围从 0 到 10。默认值为 2。

regen

设置百分比再生(延迟信号反馈)。范围从 -95 到 95。默认值为 0。

width

设置延迟信号与原始信号混合的百分比。范围从 0 到 100。默认值为 71。

speed

设置每秒扫描次数 (Hz)。范围从 0.1 到 10。默认值为 0.5。

波形

设置扫描波形,可以是 三角波正弦波。默认值为 正弦波

相位

设置多通道扫描波的百分比偏移。范围从 0 到 100。默认值为 25。

插值

设置延迟线的插值方式,线性二次。默认值为 线性

8.91 haas

将哈斯效应应用于音频。

请注意,这在单声道信号上应用最有意义。将此滤波器应用于单声道信号时,它可以提供一定的方向感并扩展其立体声图像。

该滤波器接受以下选项

level_in

设置输入电平。默认值为 1,即 0dB。

level_out(输出电平)

设置输出电平。默认值为 1,即 0dB。

侧面增益

设置应用于信号侧面的增益。默认值为 1

中间声源

设置中间声源的类型。可以是以下之一:

选择左声道。

选择右声道。

选择立体声图像的中间部分信号。

选择立体声图像的侧面部分信号。

中间相位

更改中间相位。默认情况下禁用。

左声道延迟

设置左声道延迟。默认值为 2.05 毫秒。

左声道平衡

设置左声道平衡。默认值为 -1

左声道增益

设置左声道增益。默认值为 1

左声道相位

更改左声道相位。默认情况下禁用。

右声道延迟

设置右声道延迟。默认值为 2.12 毫秒。

右声道平衡

设置右声道平衡。默认值为 1

右声道增益

设置右声道增益。默认值为 1

右声道相位

更改右声道相位。默认情况下启用。

8.92 hdcd

解码高清兼容数字 (HDCD) 数据。将带有嵌入式 HDCD 代码的 16 位 PCM 流扩展为 20 位 PCM 流。

该滤波器支持 HDCD 的峰值扩展和低电平增益调整功能,并检测瞬态滤波器标志。

ffmpeg -i HDCD16.flac -af hdcd OUT24.flac

当将此滤波器与 wav 文件一起使用时,请注意 wav 的默认编码为 16 位,因此生成的 20 位流将被截断回 16 位。在滤波器之后使用类似 -acodec pcm_s24le 的命令来获得 24 位 PCM 输出。

ffmpeg -i HDCD16.wav -af hdcd OUT16.wav
ffmpeg -i HDCD16.wav -af hdcd -c:a pcm_s24le OUT24.wav

该滤波器接受以下选项

禁用自动转换

禁用滤波器图中的任何自动格式转换或重采样。

处理立体声

一起处理立体声通道。如果通道之间的 target_gain 不匹配,则将其视为无效,并使用上次有效的 target_gain。

代码检测计时器周期 (毫秒)

设置代码检测计时器周期,以毫秒为单位。

强制峰值扩展

即使未发出 PE 信号,始终扩展高于 -3dBFS 的峰值。

分析模式

用一个纯音代替音频,并调整幅度以指示解码过程的某些特定方面。可以将输出文件与原始文件一起加载到音频编辑器中,以帮助分析。

analyze_mode=pe:force_pe=true 可用于查看 PE 电平以上的所有采样。

模式包括:

0, 关闭

禁用

1, lle

每个采样处的增益调整电平

2, pe

发生峰值扩展的采样

3, cdt

代码检测计时器处于活动状态的采样

4, tgm

通道之间目标增益不匹配的采样

8.93 headphone

应用头部相关传递函数 (HRTF),以通过耳机为用户创建环绕的虚拟扬声器,以进行双耳聆听。HRIR 通过附加的流提供,每个通道都需要一个立体声输入流。

该滤波器接受以下选项

map

设置用于卷积的输入流的映射。参数是以 “|” 分隔的通道名称列表,顺序与作为滤波器的附加流输入给定的顺序相同。这也指定了输入流的数量。输入流的数量必须不小于第一个流中的通道数加一。

gain

设置应用于音频的增益。值以 dB 为单位。默认值为 0。

type(类型)

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq

低频效果

设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。

size

设置一次处理的帧大小,以采样数表示。默认值为 1024。允许的范围是从 1024 到 96000。

HRIR

设置 hrir 流的格式。默认值为 stereo。替代值为 multich。如果值设置为 stereo,则附加流的数量应大于或等于第一个输入流中的输入通道数。此外,每个附加流应具有立体声通道数。如果值设置为 multich,则附加流的数量应恰好为一个。此外,附加流的输入通道数应等于或大于第一个输入流的通道数的两倍。

8.93.1 示例

  • 使用 wav 文件作为系数的完整示例,并使用 amovie 滤波器进行 7.1 降混,每个 amovie 滤波器都使用带有 IR 系数的立体声文件作为输入。这些文件为虚拟扬声器的每个位置提供系数。
    ffmpeg -i input.wav
    -filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR"
    output.wav
    
  • 使用 wav 文件作为系数的完整示例,并使用 amovie 滤波器进行 7.1 降混,但现在采用 multich hrir 格式。
    ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
    output.wav
    

8.94 highpass

应用一个具有 3dB 点频率的高通滤波器。该滤波器可以是单极点或双极点(默认)。滤波器的滚降为每极点每倍频程 6dB(每极点每十倍频程 20dB)。

该滤波器接受以下选项

频率,f

设置频率,以 Hz 为单位。默认值为 3000。

极点,p

设置极点数。默认为 2。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。仅适用于双极点滤波器。默认值为 0.707q,并给出巴特沃斯响应。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.94.1 命令

此滤波器支持以下命令

频率,f

更改高通频率。命令的语法为:“频率

宽度类型,t

更改高通 width_type。命令的语法为:“width_type

宽度,w

更改高通宽度。命令的语法为:“宽度

混合,m

更改高通混合。命令的语法为:“混合

8.95 join

将多个输入流连接到一个多通道流。

它接受以下参数

输入

输入流的数量。默认为 2。

channel_layout

所需的输出通道布局。默认为立体声。

map

将通道从输入映射到输出。参数是一个以 “|” 分隔的映射列表,每个映射的格式为 input_idx.in_channel-out_channelinput_idx 是输入流的从 0 开始的索引。in_channel 可以是输入通道的名称(例如,FL 代表前左声道)或其在指定输入流中的索引。out_channel 是输出通道的名称。

当未明确指定映射时,滤波器将尝试猜测映射。它首先尝试查找未使用的匹配输入通道,如果失败,则选择第一个未使用的输入通道。

连接 3 个输入(具有正确设置的通道布局)

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT

从 6 个单通道流构建 5.1 输出

ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
out

8.96 ladspa

加载 LADSPA (Linux Audio Developer’s Simple Plugin API) 插件。

要启用此滤波器的编译,您需要使用 --enable-ladspa 配置 FFmpeg。

文件,f

指定要加载的 LADSPA 插件库的名称。如果定义了环境变量 LADSPA_PATH,则 LADSPA 插件会在 LADSPA_PATH 中以冒号分隔的目录列表中搜索,否则会在标准 LADSPA 路径中搜索,搜索顺序如下:HOME/.ladspa/lib//usr/local/lib/ladspa//usr/lib/ladspa/

plugin, p

指定库中的插件。有些库只包含一个插件,而另一些库则包含多个插件。如果未设置此项,过滤器将列出指定库中所有可用的插件。

controls, c

设置以'|'分隔的控件列表,该列表包含零个或多个浮点数值,用于确定加载的插件的行为(例如延迟、阈值或增益)。控件需要使用以下语法定义:c0=value0|c1=value1|c2=value2|...,其中 valuei 是设置在第 i 个控件上的值。或者,它们也可以使用以下语法定义:value0|value1|value2|...,其中 valuei 是设置在第 i 个控件上的值。如果 controls 设置为 help,则会打印所有可用控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅当插件没有输入时使用。

nb_samples, n

设置每个输出帧的每个通道的样本数,默认为 1024。仅当插件没有输入时使用。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频总是在完整帧的末尾被截断。如果未指定,或表示的持续时间为负数,则音频应无限期生成。仅当插件没有输入时使用。

latency, l

启用延迟补偿,默认情况下禁用。仅当插件有输入时使用。

8.96.1 示例

  • 列出 amp (LADSPA 示例插件) 库中所有可用的插件
    ladspa=file=amp
    
  • 列出 VCF 库中 vcf_notch 插件所有可用的控件及其有效范围
    ladspa=f=vcf:p=vcf_notch:c=help
    
  • 使用 Computer Music Toolkit (CMT) 插件库模拟低质量的音频设备
    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
    
  • 使用 TAP-plugins (Tom’s Audio Processing plugins) 向音频添加混响
    ladspa=file=tap_reverb:tap_reverb
    
  • 生成振幅为 0.2 的白噪声
    ladspa=file=cmt:noise_source_white:c=c0=.2
    
  • 使用 C* Audio Plugin Suite (CAPS) 库中的插件 C* Click - Metronome 生成 20 bpm 的节拍
    ladspa=file=caps:Click:c=c1=20'
    
  • 应用 C* Eq10X2 - Stereo 10-band equaliser 效果
    ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
    
  • 使用 Steve Harris SWH Plugins 系列中的快速前瞻限制器将音量增加 20dB
    ladspa=fast_lookahead_limiter_1913:fastLookaheadLimiter:20|0|2
    
  • 使用 Steve Harris SWH Plugins 系列中的多频段均衡器衰减低频
    ladspa=mbeq_1197:mbeq:-24|-24|-24|0|0|0|0|0|0|0|0|0|0|0|0
    
  • 使用 C* Audio Plugin Suite (CAPS) 库中的 Narrower 缩小立体声图像
    ladspa=caps:Narrower
    
  • 另一个白噪声,现在使用 C* Audio Plugin Suite (CAPS) 库
    ladspa=caps:White:.2
    
  • 一些分形噪声,使用 C* Audio Plugin Suite (CAPS) 库
    ladspa=caps:Fractal:c=c1=1
    
  • 使用 VLevel 插件进行动态音量标准化
    ladspa=vlevel-ladspa:vlevel_mono
    

8.96.2 命令

此滤波器支持以下命令

cN

修改第 N 个控件的值。

如果指定的值无效,则将其忽略并保留先前的值。

8.97 loudnorm

EBU R128 响度标准化。包括动态和线性标准化模式。支持单通道(直播、文件)和双通道(文件)模式。此算法可以定位 IL、LRA 和最大真实峰值。在动态模式下,为了准确检测真实峰值,音频流将上采样到 192 kHz。使用 -ar 选项或 aresample 过滤器显式设置输出采样率。

该滤波器接受以下选项

I, i

设置综合响度目标。范围是 -70.0 - -5.0。默认值为 -24.0。

LRA, lra

设置响度范围目标。范围是 1.0 - 50.0。默认值为 7.0。

TP, tp

设置最大真实峰值。范围是 -9.0 - +0.0。默认值为 -2.0。

measured_I, measured_i

输入文件的测量的 IL。范围是 -99.0 - +0.0。

measured_LRA, measured_lra

输入文件的测量的 LRA。范围是 0.0 - 99.0。

measured_TP, measured_tp

输入文件的测量的真实峰值。范围是 -99.0 - +99.0。

measured_thresh

输入文件的测量的阈值。范围是 -99.0 - +0.0。

offset

设置偏移增益。增益在真实峰值限制器之前应用。范围是 -99.0 - +99.0。默认值为 +0.0。

linear

通过线性缩放源音频进行标准化。必须指定 measured_Imeasured_LRAmeasured_TPmeasured_thresh。目标 LRA 不应低于源 LRA,并且综合响度的变化不应导致真实峰值超过目标 TP。如果未满足任何这些条件,标准化模式将恢复为 dynamic。选项为 truefalse。默认值为 true

dual_mono

将单声道输入文件视为“双单声道”。如果单声道文件旨在在立体声系统上播放,则其 EBU R128 测量在感知上将不正确。如果设置为 true,此选项将补偿此效果。多通道输入文件不受此选项影响。选项为 true 或 false。默认值为 false。

print_format

设置统计信息的打印格式。选项为 summary、json 或 none。默认值为 none。

8.98 lowpass

应用具有 3dB 点频率的低通滤波器。滤波器可以是单极点或双极点(默认)。滤波器的滚降为每倍频程每极点 6dB(每十倍频程每极点 20dB)。

该滤波器接受以下选项

频率,f

以 Hz 为单位设置频率。默认值为 500。

极点,p

设置极点数。默认为 2。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。仅适用于双极点滤波器。默认值为 0.707q,并给出巴特沃斯响应。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.98.1 示例

  • 仅低通 LFE 通道,如果不存在 LFE,则不执行任何操作
    lowpass=c=LFE
    

8.98.2 命令

此滤波器支持以下命令

频率,f

更改低通频率。命令的语法是:“frequency

宽度类型,t

更改低通宽度类型。命令的语法是:“width_type

宽度,w

更改低通宽度。命令的语法是:“width

混合,m

更改低通混合。命令的语法是:“mix

8.99 lv2

加载 LV2 (LADSPA Version 2) 插件。

要启用此滤波器的编译,您需要使用 --enable-lv2 配置 FFmpeg。

plugin, p

指定插件 URI。您可能需要转义“:”。

controls, c

设置以'|'分隔的控件列表,该列表包含零个或多个浮点数值,用于确定加载的插件的行为(例如延迟、阈值或增益)。如果 controls 设置为 help,则会打印所有可用控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅当插件没有输入时使用。

nb_samples, n

设置每个输出帧的每个通道的样本数,默认为 1024。仅当插件没有输入时使用。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频总是在完整帧的末尾被截断。如果未指定,或表示的持续时间为负数,则音频应无限期生成。仅当插件没有输入时使用。

8.99.1 示例

  • 应用 Calf 中的低音增强器插件
    lv2=p=http\\\\://calf.sourceforge.net/plugins/BassEnhancer:c=amount=2
    
  • 应用 Calf 中的黑胶唱片插件
    lv2=p=http\\\\://calf.sourceforge.net/plugins/Vinyl:c=drone=0.2|aging=0.5
    
  • 应用 ArtyFX 中的位压缩器插件
    lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
    

8.99.2 命令

此过滤器支持插件作为命令导出的所有选项。

8.100 mcompand

多频段压缩或扩展音频的动态范围。

输入音频使用四阶 Linkwitz-Riley IIR 分为多个频段。这类似于扬声器的分频器,并且在没有压扩器动作时会导致平坦的频率响应。

它接受以下参数

args

此选项语法为:attack,decay,[attack,decay..] soft-knee points crossover_frequency [delay [initial_volume [gain]]] | attack,decay ... 有关每个项目的说明,请参阅 compand 过滤器文档。

8.101 pan

以特定的增益水平混合通道。过滤器接受输出通道布局,后跟一组通道定义。

此过滤器还旨在有效地重新映射音频流的通道。

过滤器接受以下形式的参数:“l|outdef|outdef|...”

l

输出通道布局或通道数

outdef

输出通道规范,形式为:“out_name=[gain*]in_name[(+-)[gain*]in_name...]”

out_name

要定义的输出通道,可以是通道名称(FL、FR 等)或通道号(c0、c1 等)

gain

通道的乘法系数,1 表示音量不变

in_name

要使用的输入通道,有关详细信息,请参见 out_name;不能混合命名和编号的输入通道

如果通道规范中的“=”被“<”替换,则将对该规范的增益进行重新规范化,以使总数为 1,从而避免削波噪声。

8.101.1 混音示例

例如,如果要从立体声向下混合到单声道,但左声道的系数更大

pan=1c|c0=0.9*c0+0.1*c1

一个自定义的立体声混音,可自动处理 3、4、5 和 7 声道环绕声

pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR

请注意,ffmpeg 集成了一个默认的降混(和升混)系统,除非您有非常特殊的需求,否则应优先使用(请参阅“-ac”选项)。

8.101.2 重新映射示例

只有在以下情况下,通道重映射才会生效:

  • 增益系数为零或一,
  • 每个输出通道只有一个输入,

如果满足所有这些条件,则过滤器将通知用户(“检测到纯通道映射”),并使用优化且无损的方法进行重映射。

例如,如果您的源是 5.1 声道,并且想通过删除额外的通道来获得立体声音频流

pan="stereo| c0=FL | c1=FR"

给定相同的源,您还可以切换前左和前右声道,并保持输入通道布局

pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"

如果输入是立体声音频流,您可以使用以下命令静音前左声道(并仍然保持立体声通道布局)

pan="stereo|c1=c1"

仍然是立体声音频流输入,您可以将右声道复制到前左和右声道

pan="stereo| c0=FR | c1=FR"

8.102 replaygain

ReplayGain 扫描器过滤器。此过滤器将音频流作为输入,并将其原样输出。在过滤结束时,它会显示 track_gaintrack_peak

该过滤器接受以下导出的只读选项

track_gain

在流结尾导出的音轨增益(以分贝为单位)。

track_peak

在流结尾导出的音轨峰值。

8.103 resample

转换音频采样格式、采样率和通道布局。不应直接使用。

8.104 rubberband

使用 librubberband 应用时间拉伸和音高偏移。

要启用此过滤器的编译,您需要使用 --enable-librubberband 配置 FFmpeg。

该滤波器接受以下选项

速度

设置节奏缩放因子。

pitch

设置音高缩放因子。

transients

设置瞬态检测器。可能的值为

crisp
mixed
smooth
detector

设置检测器。可能的值为

compound
percussive
soft
相位

设置相位。可能的值为

laminar
independent
window

设置处理窗口大小。可能的值为

standard
short
long
smoothing

设置平滑。可能的值为

off
on
formant

在进行音高偏移时启用共振峰保留。可能的值为

shifted
preserved
pitchq

设置音高质量。可能的值为

quality
speed
consistency
channels(通道)

设置通道。可能的值为

apart
together

8.104.1 命令

此滤波器支持以下命令

速度

更改滤波器速度缩放因子。命令的语法为:“tempo

pitch

更改滤波器音高缩放因子。命令的语法为:“pitch

8.105 sidechaincompress

此过滤器的作用类似于普通压缩器,但具有使用第二个输入信号压缩检测到的信号的能力。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。然后,可以在处理的后期阶段使用其他过滤器过滤滤波后的信号。请参阅 panamerge 过滤器。

该滤波器接受以下选项

level_in

设置输入增益。默认值为 1。范围在 0.015625 和 64 之间。

mode

设置压缩器操作模式。可以是 upwarddownward。默认值为 downward

threshold

如果第二个流的信号高于此电平,它将影响第一个流的增益降低。默认值为 0.125。范围介于 0.00097563 和 1 之间。

ratio

设置信号降低的比率。1:2 表示如果电平升高到阈值以上 4dB,则在降低后将仅高于 2dB。默认值为 2。范围介于 1 和 20 之间。

attack

信号必须上升到阈值以上多少毫秒才能开始降低增益。默认值为 20。范围在 0.01 和 2000 之间。

release

信号必须下降到阈值以下多少毫秒才能再次减少压缩。默认值为 250。范围在 0.01 和 9000 之间。

makeup

设置处理后信号将被放大多少。默认值为 1。范围在 1 到 64 之间。

knee

弯曲阈值周围的尖锐拐点,以更柔和地进入增益降低。默认值为 2.82843。范围在 1 和 8 之间。

link

选择边链流的所有通道之间的平均电平还是边链流的较响亮的(最大)通道影响降幅。默认值为 average

detection

peak 的情况下是否应取精确信号,或者在 rms 的情况下是否应取 RMS 信号。默认值为 rms,主要是更平滑的。

level_sc

设置侧链增益。默认值为 1。范围介于 0.015625 和 64 之间。

mix

在输出中使用多少压缩信号。默认值为 1。范围在 0 和 1 之间。

8.105.1 命令

此过滤器支持以上所有选项作为 命令

8.105.2 示例

  • 完整 ffmpeg 示例,它接受 2 个音频输入,第一个输入根据第二个输入的信号进行压缩,稍后将压缩的信号与第二个输入合并
    ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
    

8.106 sidechaingate

侧链门的作用类似于普通(宽带)门,但具有在将其发送到增益降低阶段之前过滤检测到的信号的能力。通常,门使用全范围信号来检测高于阈值的电平。例如:如果您从侧链信号中切除所有较低的频率,则只有在出现足够的高频时,门才会降低音轨的音量。使用这种技术,您可以减少自然鼓的共鸣或消除严重失真的吉他中静音击打的“隆隆声”。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。

该滤波器接受以下选项

level_in

在滤波前设置输入电平。默认值为 1。允许范围为 0.015625 到 64。

mode

设置操作模式。可以是 upward(向上)或 downward(向下)。默认值为 downward。如果设置为 upward 模式,信号的较高部分将被放大,向上扩展动态范围。否则,在 downward 模式下,信号的较低部分将被衰减。

range

设置当信号低于阈值时增益衰减的程度。默认值为 0.06125。允许范围为 0 到 1。将其设置为 0 将禁用衰减,此时滤波器将表现得像一个扩展器。

threshold

如果信号上升到此电平以上,则会释放增益衰减。默认值为 0.125。允许范围为 0 到 1。

ratio

设置信号降低的比率。默认值为 2。允许的范围为 1 到 9000。

attack

信号必须上升到阈值以上多少毫秒增益衰减才会停止。默认值为 20 毫秒。允许范围为 0.01 到 9000。

release

信号必须降到阈值以下多少毫秒才会再次增加衰减。默认值为 250 毫秒。允许范围为 0.01 到 9000。

makeup

设置处理后信号的放大量。默认值为 1。允许范围为 1 到 64。

knee

弯曲阈值周围的尖锐拐点,使其更柔和地进入增益衰减。默认值为 2.828427125。允许范围为 1 到 8。

detection

选择是否应为检测采用精确信号还是 RMS 类似信号。默认值为 rms。可以是 peak 或 rms。

link

选择所有通道之间的平均电平还是较响亮的通道影响降幅。默认值为 average。可以是 average 或 maximum。

level_sc

设置侧链增益。默认值为 1。范围为 0.015625 到 64。

8.106.1 命令

此过滤器支持以上所有选项作为 命令

8.107 silencedetect

检测音频流中的静音。

当检测到输入音频音量小于或等于噪声容限值的时间大于或等于最小检测到的噪声持续时间时,此过滤器会记录一条消息。

打印的时间和持续时间以秒表示。lavfi.silence_startlavfi.silence_start.X 元数据键设置在时间戳等于或超过检测持续时间的第一个帧上,它包含静音的第一个帧的时间戳。

lavfi.silence_durationlavfi.silence_duration.X 以及 lavfi.silence_endlavfi.silence_end.X 元数据键设置在静音后的第一个帧上。如果启用了 mono,并且每个通道分别进行评估,则使用带有 .X 后缀的键,并且 X 对应于通道号。

该滤波器接受以下选项

噪声,n

设置噪声容限。可以用分贝(如果指定的值附加了“dB”)或幅度比率指定。默认值为 -60dB 或 0.001。

duration, d

设置静音持续时间,直到发出通知(默认值为 2 秒)。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分

mono, m

分别处理每个通道,而不是组合处理。默认情况下禁用。

8.107.1 示例

  • 使用 -50dB 噪声容限检测 5 秒的静音
    silencedetect=n=-50dB:d=5
    
  • 使用 ffmpeg 的完整示例,以检测 silence.mp3 中噪声容限为 0.0001 的静音
    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
    

8.108 silenceremove

从音频的开头、中间或结尾删除静音。

该滤波器接受以下选项

start_periods

此值用于指示是否应在音频开头修剪音频。值为零表示不应从开头修剪静音。当指定非零值时,它会修剪音频,直到找到非静音部分。通常,当从音频开头修剪静音时,start_periods 将为 1,但可以将其增加到更高的值,以修剪所有音频,直到达到特定的非静音周期计数。默认值为 0

start_duration

指定在停止修剪音频之前必须检测到非静音的时间量。通过增加持续时间,可以将噪声突发视为静音并修剪掉。默认值为 0

start_threshold

这表示应该将哪个采样值视为静音。对于数字音频,值 0 可能就足够了,但是对于从模拟录制的音频,您可能希望增加该值以考虑背景噪声。可以以分贝为单位指定(如果指定的值附加了 "dB"),也可以指定为振幅比。默认值为 0

start_silence

指定修剪后在开头保留的最大静音持续时间。默认值为 0,这等于修剪所有检测为静音的采样。

start_mode

指定在多声道音频开头检测静音结束的模式。可以是 anyall。默认值为 any。使用 any,来自任何通道的任何被检测为非静音的采样都将触发音频流开头静音修剪的结束。使用 all,只有当来自每个通道的每个采样都被检测为非静音时,才会触发音频流开头静音修剪的结束,使用场景有限。

stop_periods

设置从音频末尾修剪静音的计数。当指定正值时,它会在找到指定的静音周期后修剪音频。要从文件的中间删除静音,请指定一个负值的 stop_periods。然后,该值将作为正值处理,并用于指示效果应按照 stop_periods 指定重新开始处理,使其适用于删除音频中间的静音周期。默认值为 0

stop_duration

指定在不再复制音频之前必须存在的静音持续时间。通过指定更长的持续时间,可以将想要的静音保留在音频中。默认值为 0

stop_threshold

这与 start_threshold 相同,但用于从音频末尾修剪静音。可以以分贝为单位指定(如果指定的值附加了 "dB"),也可以指定为振幅比。默认值为 0

stop_silence

指定修剪后在末尾保留的最大静音持续时间。默认值为 0,这等于修剪所有检测为静音的采样。

stop_mode

指定在多声道音频开头之后检测静音开始的模式。可以是 anyall。默认值为 all。使用 any,来自任何通道的任何被检测为静音的采样都将触发音频流开头后静音修剪的开始,使用场景有限。使用 all,只有当来自每个通道的每个采样都被检测为静音时,才会触发音频流开头后静音修剪的开始。

detection

设置如何检测静音。

avg

移动窗口中采样绝对值的平均值。

rms

移动窗口中采样绝对值的均方根。

peak

移动窗口中采样绝对值的最大值。

median

移动窗口中采样绝对值的中位数。

ptp

移动窗口中采样最大峰值与最小峰值差的绝对值。

dev

移动窗口中采样值的标准差。

默认值为 rms

window

设置用于计算静音检测窗口大小(以采样数为单位)的持续时间(以秒为单位)。使用 0 将有效地禁用任何窗口化,并且仅对每个通道使用单个采样进行静音检测。在这种情况下,可能还需要将 start_silence 和/或 stop_silence 设置为非零值,并将 start_duration 和/或 stop_duration 设置为非零值。默认值为 0.02。允许的范围为 010

timestamp

设置每个音频帧输出时间戳的处理模式。

write

完全重写时间戳,仅保留第一个输出帧的开始时间。

copy

未丢弃的帧将保留与输入音频帧相同的时间戳。

默认值为 write

8.108.1 示例

  • 以下示例显示了如何使用此过滤器来启动录音,该录音不包含通常在按下录音按钮和表演开始之间发生的开头延迟
    silenceremove=start_periods=1:start_duration=5:start_threshold=0.02
    
  • 修剪从头到尾遇到的所有静音,其中音频中有超过 1 秒的静音
    silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB
    
  • 使用峰值检测,从头到尾修剪所有数字静音采样,其中音频中有超过 0 个数字静音采样,并且在流中的相同位置在所有通道中检测到数字静音
    silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0
    
  • 修剪从头到尾遇到的每个第二个静音周期,其中每个静音周期音频中有超过 1 秒的静音
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB
    
  • 与上述类似,但从每个修剪的周期保留最多 0.5 秒的静音
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5
    
  • 与上述类似,但从音频开头保留最多 1.5 秒的静音
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5:start_periods=1:start_duration=1:start_silence=1.5:stop_threshold=-90dB
    

8.108.2 命令

此过滤器支持上述某些选项作为命令

8.109 sofalizer

SOFAlizer 使用头部相关传输函数 (HRTF) 为用户在耳机上创建虚拟扬声器,以进行双耳听音(支持高达 9 声道的音频格式)。HRTF 存储在 SOFA 文件中(有关数据库,请参阅 http://www.sofacoustics.org/)。SOFAlizer 是在奥地利科学院声学研究所 (ARI) 开发的。

要启用此过滤器的编译,您需要使用 --enable-libmysofa 配置 FFmpeg。

该滤波器接受以下选项

sofa

设置用于渲染的 SOFA 文件。

gain

设置应用于音频的增益。值以 dB 为单位。默认值为 0。

rotation

设置虚拟扬声器的旋转角度(以度为单位)。默认值为 0。

elevation

设置虚拟扬声器的高度角(以度为单位)。默认值为 0。

radius

设置扬声器与使用近场 HRTF 的听众之间的距离(以米为单位)。默认值为 1。

type(类型)

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq

speakers

设置虚拟扬声器的自定义位置。此选项的语法为:<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都使用短通道名称以及方位角和高度角(以度为单位)进行描述。每个虚拟扬声器描述都用“|”分隔。例如,要覆盖前左声道和前右声道的位置,请使用:'speakers=FL 45 15|FR 345 15'。将忽略具有无法识别的通道名称的描述。

lfegain

设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。

framesize

设置自定义帧大小(以采样数为单位)。默认值为 1024。允许的范围为 1024 到 96000。仅当选项 'type' 设置为 freq 时才使用。

normalize

是否应在导入 SOFA 文件时对所有 IR 进行标准化。默认情况下启用。

interpolate

如果确切位置不匹配,是否应使用相邻的 IR 对最近的 IR 进行插值。默认情况下禁用。

minphase

在加载 SOFA 文件时对所有 IR 进行最小相位处理。默认情况下禁用。

anglestep

设置邻域搜索角度步长。仅当启用选项 interpolate 时才使用。

radstep

设置邻域搜索半径步长。仅当启用选项 interpolate 时才使用。

8.109.1 示例

  • 使用 ClubFritz6 sofa 文件
    sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
    
  • 使用 ClubFritz12 sofa 文件,更大的半径和较小的旋转
    sofalizer=sofa=/path/to/ClubFritz12.sofa:type=freq:radius=2:rotation=5
    
  • 与上述类似,但具有前左、前右、后左和后右的自定义扬声器位置,以及自定义增益
    "sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=2:speakers=FL 45|FR 315|BL 135|BR 225:gain=28"
    

8.110 speechnorm

语音标准化器。

此滤波器会根据阈值,扩展或压缩音频样本的每个半周期(本地一组样本,全部高于或全部低于零,且在两个最近的过零点之间),从而使音频在以下选项控制的条件下达到目标峰值。

该滤波器接受以下选项

峰值,p

设置扩展目标峰值。这指定了归一化音频输入允许的最高绝对幅度级别。默认值为 0.95。允许范围为 0.0 到 1.0。

扩展,e

设置最大扩展因子。允许范围为 1.0 到 50.0。默认值为 2.0。此选项控制样本的局部半周期的最大扩展。最大扩展将使局部峰值达到目标峰值,但永远不会超过它,并且新峰值和先前峰值之间的比率不会超过此选项的值。

压缩,c

设置最大压缩因子。允许范围为 1.0 到 50.0。默认值为 2.0。此选项控制样本的局部半周期的最大压缩。仅当threshold选项设置为大于 0.0 的值时才使用此选项,在这种情况下,当局部峰值低于或等于threshold设置的值时,属于该峰值的半周期的所有样本都将按当前压缩因子压缩。

threshold, t(阈值,t)

设置阈值。默认值为 0.0。允许范围为 0.0 到 1.0。此选项指定哪些样本的半周期将被压缩,哪些将被扩展。任何局部峰值低于或等于此选项值的半周期样本都将按当前压缩因子压缩,否则,如果大于阈值,则它们将按扩展因子扩展,以便达到峰值目标值但永远不会超过它。

提升,r

设置每个样本半周期的扩展提升量。默认值为 0.001。允许范围为 0.0 到 1.0。这控制了每个新的半周期扩展因子提升的速度,直到它达到expansion值。将此选项设置得太高可能会导致失真。

衰减,f

设置每个样本半周期的压缩提升量。默认值为 0.001。允许范围为 0.0 到 1.0。这控制了每个新的半周期压缩因子提升的速度,直到它达到compression值。

通道,h

指定要过滤的通道,默认情况下会过滤所有可用通道。

反转,i

启用反转滤波,默认情况下禁用。这会反转threshold选项的解释。启用后,任何局部峰值低于或等于threshold选项的半周期样本将被扩展,否则将被压缩。

链接,l

计算应用于每个滤波通道样本的增益时链接通道,默认情况下禁用。禁用时,每个滤波通道的增益计算是独立的,否则,启用此选项时,将使用每个滤波通道所有可能的增益中的最小值。

均方根,m

设置扩展目标 RMS 值。这指定了归一化音频输入允许的最高 RMS 电平。默认值为 0.0,因此禁用。允许范围为 0.0 到 1.0。

8.110.1 命令

此过滤器支持以上所有选项作为 命令

8.110.2 示例

  • 弱且缓慢的放大
    speechnorm=e=3:r=0.00001:l=1
    
  • 中等且缓慢的放大
    speechnorm=e=6.25:r=0.00001:l=1
    
  • 强且快速的放大
    speechnorm=e=12.5:r=0.0001:l=1
    
  • 非常强且快速的放大
    speechnorm=e=25:r=0.0001:l=1
    
  • 极端且快速的放大
    speechnorm=e=50:r=0.0001:l=1
    

8.111 stereotools

此滤波器有一些方便的实用程序来管理立体声信号,用于在控制参数的同时将 M/S 立体声录音转换为 L/R 信号,或扩展主音轨的立体声图像。

该滤波器接受以下选项

level_in

设置滤波前两个通道的输入电平。默认值为 1。允许范围为 0.015625 到 64。

level_out(输出电平)

设置滤波后两个通道的输出电平。默认值为 1。允许范围为 0.015625 到 64。

balance_in

设置两个通道之间的输入平衡。默认值为 0。允许范围为 -1 到 1。

balance_out

设置两个通道之间的输出平衡。默认值为 0。允许范围为 -1 到 1。

软削波

启用软削波。产生模拟失真而不是刺耳的数字 0dB 削波。默认情况下禁用。

静音左声道

使左声道静音。默认情况下禁用。

静音右声道

使右声道静音。默认情况下禁用。

左声道相位

更改左声道的相位。默认情况下禁用。

右声道相位

更改右声道的相位。默认情况下禁用。

mode

设置立体声模式。可用值为

lr>lr

左/右到左/右,这是默认值。

lr>ms

左/右到中/侧。

ms>lr

中/侧到左/右。

lr>ll

左/右到左/左。

lr>rr

左/右到右/右。

lr>l+r

左/右到左+右。

lr>rl

左/右到右/左。

ms>ll

中/侧到左/左。

ms>rr

中/侧到右/右。

ms>rl

中/侧到右/左。

lr>l-r

左/右到左-右。

slev

设置侧信号的电平。默认值为 1。允许范围为 0.015625 到 64。

sbal

设置侧信号的平衡。默认值为 0。允许范围为 -1 到 1。

mlev

设置中间信号的电平。默认值为 1。允许范围为 0.015625 到 64。

mpan

设置中间信号的声像。默认值为 0。允许范围为 -1 到 1。

base

设置单声道和反相通道之间的立体声基准。默认值为 0。允许范围为 -1 到 1。

delay

设置以毫秒为单位的延迟,将左声道相对于右声道延迟多少,反之亦然。默认值为 0。允许范围为 -20 到 20。

sclevel

设置 S/C 电平。默认值为 1。允许范围为 1 到 100。

相位

设置以度为单位的立体声相位。默认值为 0。允许范围为 0 到 360。

bmode_in,bmode_out

为 balance_in/balance_out 选项设置平衡模式。

可以是以下之一

balance

经典平衡模式。一次衰减一个通道。增益提高到 1。

amplitude

类似于上述经典模式,但增益提高到 2。

power

等功率分布,范围为 -6dB 到 +6dB。

8.111.1 命令

此过滤器支持以上所有选项作为 命令

8.111.2 示例

  • 应用类似卡拉 OK 的效果
    stereotools=mlev=0.015625
    
  • 将 M/S 信号转换为 L/R
    "stereotools=mode=ms>lr"
    

8.112 stereowiden

此滤波器通过抑制两个通道共有的信号,并将左信号延迟到右信号,反之亦然,从而增强立体声效果,从而扩大立体声效果。

该滤波器接受以下选项

delay

左信号延迟到右信号(反之亦然)的毫秒时间。默认值为 20 毫秒。

反馈

延迟信号到右信号(反之亦然)的增益量。在右输出中给出左信号的延迟效果,反之亦然,从而产生扩展效果。默认值为 0.3。

交叉馈送

将具有反相的左信号交叉馈送到右信号。这有助于抑制单声道。如果值为 1,它将取消两个通道共有的所有信号。默认值为 0.3。

干混

设置原始通道输入信号的电平。默认值为 0.8。

8.112.1 命令

此滤波器支持除 delay 之外的所有上述选项,作为命令

8.113 superequalizer

应用 18 波段均衡器。

该滤波器接受以下选项

1b

设置 65Hz 波段增益。

2b

设置 92Hz 波段增益。

3b

设置 131Hz 波段增益。

4b

设置 185Hz 波段增益。

5b

设置 262Hz 波段增益。

6b

设置 370Hz 波段增益。

7b

设置 523Hz 波段增益。

8b

设置 740Hz 波段增益。

9b

设置 1047Hz 波段增益。

10b

设置 1480Hz 波段增益。

11b

设置 2093Hz 波段增益。

12b

设置 2960Hz 波段增益。

13b

设置 4186Hz 波段增益。

14b

设置 5920Hz 波段增益。

15b

设置 8372Hz 波段增益。

16b

设置 11840Hz 波段增益。

17b

设置 16744Hz 波段增益。

18b

设置 20000Hz 波段增益。

8.114 surround

应用音频环绕上混滤波器。

此滤波器允许从音频流产生多通道输出。

该滤波器接受以下选项

chl_out

设置输出通道布局。默认情况下,这是 5.1

有关必需的语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分

chl_in

设置输入通道布局。默认情况下,这是 立体声

有关必需的语法,请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分

level_in

设置输入音量级别。默认值为 1

level_out(输出电平)

设置输出音量级别。默认值为 1

低频效果

如果输出通道布局包含 LFE 通道,则启用 LFE 通道输出。默认情况下启用此项。

lfe_low

设置 LFE 低截止频率。默认值为 128 Hz。

lfe_high

设置 LFE 高截止频率。默认值为 256 Hz。

lfe_mode

设置 LFE 模式,可以是 addsub。默认值为 add。在 add 模式下,LFE 通道从输入音频创建并添加到输出。在 sub 模式下,LFE 通道从输入音频创建并添加到输出,但所有非 LFE 输出通道也会减去输出 LFE 通道。

smooth

设置时间平滑强度,用于在时间上转换立体声音频时逐步改变因子。允许的范围是从 0.01.0。对于 focus 选项值大于 0.0 时,此选项可用于提高输出质量。默认值为 0.0。仅此范围内的值且没有边缘的值有效。

angle

设置立体声环绕转换的角度,允许的范围是从 0360。默认值为 90

focus

设置立体声环绕转换的焦点,允许的范围是从 -11。默认值为 0

fc_in

设置前置中心输入音量。默认值为 1

fc_out

设置前置中心输出音量。默认值为 1

fl_in

设置前置左输入音量。默认值为 1

fl_out

设置前置左输出音量。默认值为 1

fr_in

设置前置右输入音量。默认值为 1

fr_out

设置前置右输出音量。默认值为 1

sl_in

设置侧左输入音量。默认值为 1

sl_out

设置侧左输出音量。默认值为 1

sr_in

设置侧右输入音量。默认值为 1

sr_out

设置侧右输出音量。默认值为 1

bl_in

设置后置左输入音量。默认值为 1

bl_out

设置后置左输出音量。默认值为 1

br_in

设置后置右输入音量。默认值为 1

br_out

设置后置右输出音量。默认值为 1

bc_in

设置后置中心输入音量。默认值为 1

bc_out

设置后置中心输出音量。默认值为 1

lfe_in

设置 LFE 输入音量。默认值为 1

lfe_out

设置 LFE 输出音量。默认值为 1

allx

设置所有通道在 X 轴上立体声图像的扩展使用。允许的范围是从 -115。默认值是负值 -1,因此不使用。

ally

设置所有通道在 Y 轴上立体声图像的扩展使用。允许的范围是从 -115。默认值是负值 -1,因此不使用。

fcx, flx, frx, blx, brx, slx, srx, bcx

设置每个通道在 X 轴上立体声图像的扩展使用。允许的范围是从 0.0615。默认值为 0.5

fcy, fly, fry, bly, bry, sly, sry, bcy

设置每个通道在 Y 轴上立体声图像的扩展使用。允许的范围是从 0.0615。默认值为 0.5

win_size

设置窗口大小。允许的范围是从 102465536。默认大小为 4096

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是 hann

overlap

设置窗口重叠。如果设置为 1,将选择所选窗口函数的推荐重叠。默认值为 0.5

8.115 tiltshelf

使用双极搁架滤波器,以类似于标准高保真音调控制的响应来增强或削减音频的较低频率,并削减或增强较高频率。这也称为搁架均衡 (EQ)。

该滤波器接受以下选项

增益,g

给出 0 Hz 的增益。其有用范围约为 -20(大幅衰减)到 +20(大幅增强)。使用正增益时,请注意削波。

频率,f

设置滤波器的中心频率,因此可用于扩展或减小要增强或削减的频率范围。默认值为 3000 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

确定滤波器搁架转换的陡峭程度。

极点,p

设置极点数。默认为 2。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.115.1 命令

此滤波器支持一些选项作为 命令

8.116 treble, highshelf

使用双极搁架滤波器,以类似于标准高保真音调控制的响应来增强或削减音频的高音(较高)频率。这也称为搁架均衡 (EQ)。

该滤波器接受以下选项

增益,g

给出 ~22 kHz 和奈奎斯特频率中较低者的增益。其有用范围约为 -20(大幅削减)到 +20(大幅增强)。使用正增益时,请注意削波。

频率,f

设置滤波器的中心频率,因此可用于扩展或减小要增强或削减的频率范围。默认值为 3000 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

确定滤波器搁架转换的陡峭程度。

极点,p

设置极点数。默认为 2。

混合,m

在输出中使用滤波信号的程度。默认值为 1。范围为 0 到 1。

通道,c

指定要滤波的通道,默认情况下,将滤波所有可用通道。

归一化,n

归一化双二次系数,默认禁用。启用后,直流时的幅度响应将被归一化为 0dB。

变换,a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用 16 位有符号整数。

s32

始终使用 32 位有符号整数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

块大小,b

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度在达到接近零值时被截断的长度),则滤波将变为线性相位,否则如果不够大,则只会产生令人讨厌的伪像。

请注意,设置为非零值时,滤波器延迟将恰好是这么多样本。

8.116.1 命令

此滤波器支持以下命令

频率,f

更改高音频率。命令的语法为:“频率

宽度类型,t

更改高音宽度类型。命令的语法为:“宽度类型

宽度,w

更改高音宽度。命令的语法为:“宽度

增益,g

更改高音增益。命令的语法为:“增益

混合,m

更改高音混合。命令的语法为:“混合

8.117 tremolo

正弦振幅调制。

该滤波器接受以下选项

f

调制频率,单位为赫兹。次谐波范围(20 Hz 或更低)的调制频率将产生颤音效果。此滤波器也可通过指定高于 20 Hz 的调制频率用作环形调制器。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

调制的深度(百分比)。范围为 0.0 - 1.0。默认值为 0.5。

8.118 vibrato

正弦相位调制。

该滤波器接受以下选项

f

调制频率,单位为赫兹。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

调制的深度(百分比)。范围为 0.0 - 1.0。默认值为 0.5。

8.119 virtualbass

应用音频虚拟低音滤波器。

此滤波器接受立体声输入,并产生带 LFE (2.1) 通道输出的立体声。新产生的 LFE 通道具有增强的虚拟低音,最初是从两个立体声通道获得的。此滤波器输出前置左和前置右通道,与立体声输入中可用的一样,保持不变。

该滤波器接受以下选项

截止

设置虚拟低音截止频率。默认值为 250 Hz。允许的范围为 100 到 500 Hz。

strength

设置虚拟低音强度。允许的范围为 0.5 到 3。默认值为 3。

8.120 volume

调整输入音频音量。

它接受以下参数

volume

设置音频音量表达式。

输出值将被裁剪为最大值。

输出音频音量由以下关系给出:

output_volume = volume * input_volume

音量 的默认值为“1.0”。

precision

此参数表示数学精度。

它决定允许哪些输入采样格式,这会影响音量缩放的精度。

固定

8 位定点;这会将输入采样格式限制为 U8、S16 和 S32。

float

32 位浮点;这会将输入采样格式限制为 FLT。(默认)

double

64 位浮点;这会将输入采样格式限制为 DBL。

replaygain

选择在输入帧中遇到 ReplayGain 侧数据时的行为。

drop

删除 ReplayGain 侧数据,忽略其内容(默认)。

ignore

忽略 ReplayGain 侧数据,但将其保留在帧中。

track

如果存在,则首选音轨增益。

album

如果存在,则首选专辑增益。

replaygain_preamp

要应用于所选 ReplayGain 增益的预放大增益(以分贝为单位)。

replaygain_preamp 的默认值为 0.0。

replaygain_noclip

通过限制应用的增益来防止削波。

replaygain_noclip 的默认值为 1。

eval

设置何时评估音量表达式。

它接受以下值

once

仅在过滤器初始化期间或发送 ‘volume’ 命令时评估表达式一次

frame

为每个传入帧评估表达式

默认值为 ‘once’。

音量表达式可以包含以下参数。

n

帧号(从零开始)

nb_channels

通道数

nb_consumed_samples

过滤器消耗的采样数

nb_samples

当前帧中的采样数

pos

文件中原始帧的位置;已弃用,请勿使用

pts

帧 PTS

sample_rate

采样率

startpts

流开始时的 PTS

startt

流开始时的时间

t

帧时间

tb

时间戳时基

volume

上次设置的音量值

请注意,当 eval 设置为 ‘once’ 时,只有 sample_ratetb 变量可用,所有其他变量的计算结果都将为 NAN。

8.120.1 命令

此滤波器支持以下命令

volume

修改音量表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

8.120.2 示例

  • 将输入音频音量减半
    volume=volume=0.5
    volume=volume=1/2
    volume=volume=-6.0206dB
    

    在以上所有示例中,volume 的命名键都可以省略,例如像这样:

    volume=0.5
    
  • 使用定点精度将输入音频功率增加 6 分贝
    volume=volume=6dB:precision=fixed
    
  • 在时间 10 之后淡化音量,衰减期为 5 秒
    volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
    

8.121 volumedetect

检测输入视频的音量。

该滤波器没有参数。它仅支持 16 位有符号整数样本,因此在需要时会转换输入。当输入流结束时,有关音量的统计信息将打印在日志中。

特别是,它将显示平均音量(均方根)、最大音量(基于每个样本)以及已注册音量值的直方图的开始部分(从最大值到样本累计的 1/1000)。

所有音量都以分贝表示,相对于最大 PCM 值。

8.121.1 示例

以下是输出的摘录:

[Parsed_volumedetect_0  0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0  0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0  0xa23120] histogram_4db: 6
[Parsed_volumedetect_0  0xa23120] histogram_5db: 62
[Parsed_volumedetect_0  0xa23120] histogram_6db: 286
[Parsed_volumedetect_0  0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0  0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0  0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0  0xa23120] histogram_10db: 8409

这意味着:

  • 平均平方能量约为 -27 分贝,或 10^-2.7。
  • 最大的样本为 -4 分贝,或者更准确地说,在 -4 分贝和 -5 分贝之间。
  • 有 6 个样本在 -4 分贝,62 个在 -5 分贝,286 个在 -6 分贝,等等。

换句话说,将音量提高 +4 分贝不会导致任何削波,将其提高 +5 分贝会导致 6 个样本削波,等等。

9 音频源

以下是当前可用的音频源的描述。

9.1 abuffer

缓冲音频帧,并使其可用于过滤器链。

此源主要用于编程用途,特别是通过 libavfilter/buffersrc.h 中定义的接口。

它接受以下参数

time_base

将用于提交的帧的时间戳的时间基准。它必须是浮点数或 numerator/denominator 形式。

sample_rate

传入音频缓冲区的采样率。

sample_fmt

传入音频缓冲区的采样格式。可以是采样格式名称或 libavutil/samplefmt.h 中枚举 AVSampleFormat 的相应整数表示形式。

channel_layout

传入音频缓冲区的通道布局。可以是 libavutil/channel_layout.c 中 channel_layout_map 中的通道布局名称,也可以是 libavutil/channel_layout.h 中 AV_CH_LAYOUT_* 宏的相应整数表示形式。

channels(通道)

传入音频缓冲区的通道数。如果同时指定了 channelschannel_layout,则它们必须一致。

9.1.1 示例

abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo

将指示源接受 44100Hz 的平面 16 位有符号立体声。由于名称为“s16p”的采样格式对应于数字 6,“stereo”通道布局对应于值 0x3,这等效于:

abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3

9.2 aevalsrc

生成由表达式指定的音频信号。

此源接受一个或多个表达式(每个通道一个)作为输入,这些表达式将被评估并用于生成相应的音频信号。

此源接受以下选项:

exprs

为每个单独的通道设置以 ’|’ 分隔的表达式列表。如果未指定 channel_layout 选项,则选择的通道布局取决于提供的表达式的数量。否则,最后指定的表达式将应用于其余的输出通道。

channel_layout, c

设置通道布局。指定布局中的通道数必须等于指定的表达式的数量。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,生成的音频总是在完整帧的末尾被截断,因此最终的持续时间可能大于指定的持续时间。

如果未指定,或表示的持续时间为负,则假定音频将无限期地生成。

nb_samples, n

设置每个输出帧的每个通道的样本数,默认为 1024。

sample_rate, s

指定采样率,默认为 44100。

exprs 中的每个表达式都可以包含以下常量:

n

从 0 开始的已评估样本数

t

以秒表示的已评估样本的时间,从 0 开始

s

采样率

9.2.1 示例

  • 生成静音
    aevalsrc=0
    
  • 生成频率为 440 Hz 的正弦信号,并将采样率设置为 8000 Hz
    aevalsrc="sin(440*2*PI*t):s=8000"
    
  • 生成双通道信号,显式指定通道布局(前中心 + 后中心)
    aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
    
  • 生成白噪声
    aevalsrc="-2+random(0)"
    
  • 生成幅度调制信号
    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
    
  • 在 360 Hz 载波上生成 2.5 Hz 双耳节拍
    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
    

9.3 afdelaysrc

生成分数延迟 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤波器接受以下选项

delay, d

设置分数延迟。默认为 0。

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的样本数。默认为 1024。

taps, t

设置输出音频流中的滤波器系数的数量。默认值为 0。

channel_layout, c

指定通道布局,可以是表示通道布局的字符串。channel_layout 的默认值为“stereo”。

9.4 afireqsrc

生成 FIR 均衡器系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤波器接受以下选项

preset, p

设置均衡器预设。默认预设为 flat

可用的预设为:

custom
flat
acoustic
bass
beats
classic
clear
deep bass
dubstep
electronic
hard-style
hip-hop
jazz
metal
movie
pop
r&b
rock
vocal booster
gains, g

设置每个频段的自定义增益。仅当预设选项设置为 custom 时使用。增益以空格分隔,每个增益都以 dBFS 设置。默认为 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

bands, b

设置从中设置自定义均衡器增益的自定义频段。这必须严格递增。仅当预设选项设置为 custom 时使用。频段以空格分隔,每个频段表示频率,单位为 Hz。默认为 25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000

taps, t

设置输出音频流中的滤波器系数的数量。默认值为 4096

sample_rate, r

设置输出音频流的采样率,默认为 44100

nb_samples, n

设置输出音频流中每帧的样本数。默认为 1024

interp, i

设置 FIR 均衡器系数的插值方法。可以是 linearcubic

phase, h

设置 FIR 滤波器的相位类型。可以是 linearmin:最小相位。默认是最小相位滤波器。

9.5 afirsrc

使用频率采样方法生成 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤波器接受以下选项

taps, t

设置输出音频流中的滤波器系数的数量。默认值为 1025。

频率,f

设置从中设置幅度和相位的频率点。这必须是非递减的顺序,并且第一个元素必须为 0,而最后一个元素必须为 1。元素以空格分隔。

magnitude, m

frequency 设置的每个频率点设置幅度值。值的数量必须与频率点的数量相同。值以空格分隔。

phase, p

frequency 设置的每个频率点设置相位值。值的数量必须与频率点的数量相同。值以空格分隔。

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的样本数。默认为 1024。

win_func, w

设置窗函数。默认为 blackman。

9.6 anullsrc

空音频源,返回未经处理的音频帧。它主要用作模板,用于分析/调试工具,或作为忽略输入数据的滤波器的源(例如 sox synth 滤波器)。

此源接受以下选项:

channel_layout, cl

指定声道布局,可以是整数或表示声道布局的字符串。channel_layout 的默认值为“stereo”。

查看 libavutil/channel_layout.c 中的 channel_layout_map 定义,了解字符串和声道布局值之间的映射关系。

sample_rate, r

指定采样率,默认为 44100。

nb_samples, n

设置每个请求帧的样本数。

duration, d

设置源音频的持续时间。有关接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或表示的持续时间为负,则假定音频将无限期地生成。

9.6.1 示例

  • 将采样率设置为 48000 Hz,并将声道布局设置为 AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更清晰的语法执行相同的操作
    anullsrc=r=48000:cl=mono
    

所有参数都需要显式定义。

9.7 flite

使用 libflite 库合成语音。

要启用此滤波器的编译,您需要使用 --enable-libflite 配置 FFmpeg。

请注意,2.0 之前的 flite 库版本不是线程安全的。

该滤波器接受以下选项

list_voices

如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。

nb_samples, n

设置每帧的最大样本数。默认值为 512。

textfile

设置包含要朗读的文本的文件名。

text

设置要朗读的文本。

voice, v

设置用于语音合成的语音。默认值为 kal。另请参阅 list_voices 选项。

9.7.1 示例

  • 从文件 speech.txt 读取,并使用标准 flite 语音合成文本
    flite=textfile=speech.txt
    
  • 读取指定的文本,选择 slt 语音
    flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
    
  • 向 ffmpeg 输入文本
    ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
    
  • 使用 flitelavfi 设备,使 ffplay 朗读指定的文本
    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
    

有关 libflite 的更多信息,请查看:http://www.festvox.org/flite/

9.8 anoisesrc

生成噪声音频信号。

该滤波器接受以下选项

sample_rate, r

指定采样率。默认值为 48000 Hz。

amplitude, a

指定生成的音频流的幅度 (0.0 - 1.0)。默认值为 1.0。

duration, d

指定生成的音频流的持续时间。不指定此选项会导致噪声具有无限的长度。

color, colour, c

指定噪声的颜色。可用的噪声颜色有白色、粉色、棕色、蓝色、紫色和天鹅绒色。默认颜色为白色。

seed, s

指定用于为 PRNG 播种的值。

nb_samples, n

设置每个输出帧的样本数,默认为 1024。

density

设置天鹅绒噪声发生器的密度 (0.0 - 1.0),默认值为 0.05。

9.8.1 示例

  • 生成 60 秒的粉色噪声,采样率为 44.1 kHz,幅度为 0.5
    anoisesrc=d=60:c=pink:r=44100:a=0.5
    

9.9 hilbert

生成奇数阶希尔伯特变换 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以将信号相移 90 度。

这在许多矩阵编码方案和分析信号生成中都有使用。该过程通常写为乘以 i(或 j),即虚数单位。

该滤波器接受以下选项

sample_rate, s

设置采样率,默认为 44100。

taps, t

设置 FIR 滤波器的长度,默认值为 22051。

nb_samples, n

设置每帧的样本数。

win_func, w

设置生成 FIR 系数时要使用的窗函数。

9.10 sinc

生成 sinc kaiser 加窗的低通、高通、带通或带阻 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤波器接受以下选项

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的样本数。默认为 1024。

hp

设置高通频率。默认值为 0。

lp

设置低通频率。默认值为 0。如果高通频率低于低通频率,且低通频率高于 0,则滤波器将创建带通滤波器系数,否则将创建带阻滤波器系数。

相位

设置滤波器相位响应。默认值为 50。允许的范围是 0 到 100。

beta

设置 Kaiser 窗口 beta。

att

设置阻带衰减。默认值为 120dB,允许的范围为 40 到 180 dB。

round

启用舍入,默认情况下禁用。

hptaps

设置高通滤波器的抽头数。

lptaps

设置低通滤波器的抽头数。

9.11 sine

生成一个由幅度为 1/8 的正弦波组成的音频信号。

音频信号是按位精确的。

该滤波器接受以下选项

频率,f

设置载波频率。默认值为 440 Hz。

beep_factor, b

启用每秒一次的周期性哔声,频率为载波频率的 beep_factor 倍。默认值为 0,表示禁用哔声。

sample_rate, r

指定采样率,默认值为 44100。

duration, d

指定生成的音频流的持续时间。

samples_per_frame

设置每个输出帧的样本数。

表达式可以包含以下常量

n

输出音频帧的(顺序)编号,从 0 开始。

pts

输出音频帧的 PTS(Presentation TimeStamp),以 TB 单位表示。

t

输出音频帧的 PTS,以秒为单位表示。

TB

输出音频帧的时间基。

默认值为 1024

9.11.1 示例

  • 生成一个简单的 440 Hz 正弦波
    sine
    
  • 生成一个 220 Hz 正弦波,每秒钟发出一个 880 Hz 的哔声,持续 5 秒
    sine=220:4:d=5
    sine=f=220:b=4:d=5
    sine=frequency=220:beep_factor=4:duration=5
    
  • 生成一个遵循 1602,1601,1602,1601,1602 NTSC 模式的 1 kHz 正弦波
    sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
    

10 音频接收器

以下是对当前可用的音频接收器的描述。

10.1 abuffersink

缓冲音频帧,并使它们在过滤器链的末尾可用。

此接收器主要用于编程用途,特别是通过 libavfilter/buffersink.h 中定义的接口或选项系统。

它接受指向 AVABufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给 avfilter_init_filter 以进行初始化。

10.2 anullsink

空音频接收器;完全不对输入音频进行任何操作。它主要用作模板,用于分析/调试工具。

11 视频滤镜

当您配置 FFmpeg 构建时,您可以使用 --disable-filters 禁用任何现有过滤器。配置输出将显示您的构建中包含的视频过滤器。

以下是对当前可用的视频过滤器的描述。

11.1 addroi

在视频帧中标记感兴趣区域。

帧数据保持不变地传递,但元数据附加到帧上,指示感兴趣区域,这些区域会影响后续编码的行为。可以通过多次应用过滤器来标记多个区域。

x

区域距帧左边缘的像素距离。

y

区域距帧顶边缘的像素距离。

w

区域宽度(以像素为单位)。

h

区域高度(以像素为单位)。

参数 xywh 是表达式,可以包含以下变量

iw

输入帧的宽度。

ih

输入帧的高度。

qoffset

在区域内应用的量化偏移。

这必须是 -1 到 +1 范围内的实数值。值为零表示质量没有变化。负值要求更高的质量(更少的量化),而正值要求更低的质量(更多的量化)。

该范围经过校准,因此极端值表示最大可能的偏移量 - 如果帧的其余部分以最差的质量进行编码,则 -1 的偏移量表示该区域无论如何都应以最佳质量进行编码。然后以某种取决于编解码器的方式内插中间值。

例如,在10位 H.264 编码中,量化参数在 -12 到 51 之间变化。一个典型的 qoffset 值为 -1/10,表示该区域的编码质量应比帧的其余部分好大约十分之一的完整范围。因此,如果帧的大部分以大约 30 的 QP 进行编码,则该区域将获得大约 24 的 QP (偏移量约为 -1/10 * (51 - -12) = -6.3)。-1 的极端值表示,无论帧的其余部分如何处理,该区域都应以可能的最佳质量进行编码,即应以 -12 的 QP 进行编码。

清除

如果设置为 true,则在添加新区域之前,删除帧上标记的任何现有感兴趣区域。

11.1.1 示例

  • 将帧的中心四分之一标记为感兴趣区域。
    addroi=iw/4:ih/4:iw/2:ih/2:-1/10
    
  • 将帧左边缘的 100 像素宽的区域标记为非常不感兴趣(以比帧的其余部分低得多的质量进行编码)。
    addroi=0:0:100:ih:+1/5
    

11.2 alphaextract

从输入中提取 alpha 分量作为灰度视频。这在使用 alphamerge 滤镜时特别有用。

11.3 alphamerge

使用第二个输入的灰度值添加或替换主输入的 alpha 分量。这旨在与 alphaextract 一起使用,以允许传输或存储具有 alpha 的帧序列,而该格式不支持 alpha 通道。

例如,要从正常的 YUV 编码视频和使用 alphaextract 创建的单独视频重建完整帧,您可以使用

movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]

11.4 amplify

放大当前像素与同一像素位置的相邻帧像素之间的差异。

此过滤器接受以下选项

radius

设置帧半径。默认值为 2。允许的范围是 1 到 63。例如,半径为 3 将指示过滤器计算 7 帧的平均值。

因子

设置放大差异的因子。默认值为 2。允许的范围是 0 到 65535。

threshold

设置差异放大的阈值。任何大于或等于此值的差异都不会改变源像素。默认值为 10。允许的范围是 0 到 65535。

容差

设置差异放大的容差。任何低于此值的差异都不会改变源像素。默认值为 0。允许的范围是 0 到 65535。

设置更改源像素的下限。默认值为 65535。允许的范围是 0 到 65535。此选项控制将减少源像素值的最大可能值。

设置更改源像素的上限。默认值为 65535。允许的范围是 0 到 65535。此选项控制将增加源像素值的最大可能值。

平面

设置要过滤的平面。默认值为全部。允许的范围是 0 到 15。

11.4.1 命令

此滤镜支持以下与同名选项对应的 命令

因子
threshold
容差
平面

11.5 ass

字幕 滤镜相同,只是它不需要 libavcodec 和 libavformat 即可工作。另一方面,它仅限于 ASS(高级 Substation Alpha)字幕文件。

除了 字幕 滤镜中的常用选项之外,此滤镜还接受以下选项

整形

设置整形引擎

可用值为

auto

默认的 libass 整形引擎,它是可用的最佳引擎。

simple

快速、与字体无关的整形器,只能进行替换

complex

较慢的整形器,使用 OpenType 进行替换和定位

默认值为 auto

11.6 atadenoise

将自适应时间平均降噪器应用于视频输入。

该滤波器接受以下选项

0a

设置第一平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。

0b

设置第一平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。

1a

设置第二平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。

1b

设置第二平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。

2a

设置第三平面的阈值 A。默认值为 0.02。有效范围为 0 到 0.3。

2b

设置第三平面的阈值 B。默认值为 0.04。有效范围为 0 到 5。

阈值 A 旨在对输入信号的突变做出反应,阈值 B 旨在对输入信号的连续变化做出反应。

s

设置过滤器将用于平均的帧数。默认值为 9。必须是 [5, 129] 范围内的奇数。

p

设置过滤器将用于平均的帧的哪些平面。默认值为全部。

a

设置过滤器将用于平均的算法的哪个变体。默认值为 p 并行。或者可以设置为 s 串行。

并行可能比串行更快,而反之则不然。并行会在第一次更改大于阈值时提前中止,而串行会继续处理帧的其他侧面(如果它们相等或低于阈值)。

0s
1s
2s

设置第一平面、第二平面或第三平面的 sigma。默认值为 32767。有效范围为 0 到 32767。此选项控制大小定义的半径中每个像素的权重。默认值表示每个像素的权重相同。将此选项设置为 0 会有效地禁用过滤。

11.6.1 命令

此滤镜支持与选项相同的 命令,除了选项 s。该命令接受相应选项的相同语法。

11.7 avgblur

应用平均模糊滤镜。

该滤波器接受以下选项

sizeX

设置水平半径大小。

平面

设置要过滤的平面。默认情况下,会过滤所有平面。

sizeY

设置垂直半径大小,如果为零,则与 sizeX 相同。默认值为 0

11.7.1 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.8 backgroundkey

将静态背景变为透明。

此滤波器接受以下选项

threshold

场景更改检测的阈值。

相似度

与背景的相似度百分比。

混合

设置不相似像素的混合量。

11.8.1 命令

此过滤器支持以上所有选项作为 命令

11.9 bbox

计算输入帧亮度平面中非黑色像素的边界框。

此滤镜计算包含所有亮度值大于允许的最小值像素的边界框。描述边界框的参数会打印在滤镜日志上。

此滤波器接受以下选项

min_val

设置最小亮度值。默认值为 16

11.9.1 命令

此过滤器支持以上所有选项作为 命令

11.10 bilateral

应用双边滤镜,在保持边缘的同时进行空间平滑。

该滤波器接受以下选项

sigmaS

设置高斯函数的 sigma 以计算空间权重。允许的范围是 0 到 512。默认值为 0.1。

sigmaR

设置高斯函数的 sigma 以计算范围权重。允许的范围是 0 到 1。默认值为 0.1。

平面

设置要过滤的平面。默认值为仅第一平面。

11.10.1 命令

此过滤器支持以上所有选项作为 命令

11.11 bilateral_cuda

CUDA 加速的双边滤镜,一种边缘保留滤镜。由于使用了 GPU 加速,此滤镜在数学上是精确的。为了获得最佳输出质量,请使用一对一的色度二次采样,即 yuv444p 格式。

该滤波器接受以下选项

sigmaS

设置高斯函数的 sigma 以计算空间权重,也称为 sigma 空间。允许的范围是 0.1 到 512。默认值为 0.1。

sigmaR

设置高斯函数的 sigma 以计算颜色范围权重,也称为 sigma 颜色。允许的范围是 0.1 到 512。默认值为 0.1。

window_size

设置双边函数的窗口大小,以确定要循环的邻居数。如果输入的数字是偶数,则会自动加 1。允许的范围是 1 到 255。默认值为 1。

11.11.1 示例

  • 在视频上应用双边滤镜。
    ./ffmpeg -v verbose \
    -hwaccel cuda -hwaccel_output_format cuda -i input.mp4  \
    -init_hw_device cuda \
    -filter_complex \
    " \
    [0:v]scale_cuda=format=yuv444p[scaled_video];
    [scaled_video]bilateral_cuda=window_size=9:sigmaS=3.0:sigmaR=50.0" \
    -an -sn -c:v h264_nvenc -cq 20 out.mp4
    

11.12 bitplanenoise

显示和测量位平面噪声。

该滤波器接受以下选项

位平面

设置要分析的平面。默认值为 1

过滤器

从上面设置的 bitplane 中过滤掉噪声像素。默认禁用。

11.13 blackdetect

检测(几乎)完全黑色的视频片段。可用于检测章节过渡、广告或无效录制。

此滤镜将其检测分析输出到日志和帧元数据。如果发现至少达到指定最短持续时间的黑色片段,则会将带有开始和结束时间戳以及持续时间的行以 info 级别打印到日志中。此外,还会为每帧打印一条 debug 级别的日志行,显示该帧检测到的黑色量。

此滤镜还会将元数据附加到黑色片段的第一帧,键为 lavfi.black_start,以及黑色片段结束后第一帧的键为 lavfi.black_end。该值为帧的时间戳。无论指定的最短持续时间如何,都会添加此元数据。

该滤波器接受以下选项

black_min_duration, d

设置检测到的最短黑色持续时间,以秒为单位。它必须是非负浮点数。

默认值为 2.0。

picture_black_ratio_th, pic_th

设置将图片视为“黑色”的阈值。表示图片被视为黑色的最小比率值

nb_black_pixels / nb_pixels

。默认值为 0.98。

pixel_black_th, pix_th

设置将像素视为“黑色”的阈值。

此阈值表示将像素视为“黑色”的最大像素亮度值。提供的值根据以下公式进行缩放

absolute_threshold = luma_minimum_value + pixel_black_th * luma_range_size

luma_range_sizeluma_minimum_value 取决于输入视频格式,对于 YUV 全范围格式,范围是 [0-255],对于 YUV 非全范围格式,范围是 [16-235]。

默认值为 0.10。

以下示例将最大像素阈值设置为最小值,并且仅检测 2 秒或更长的黑色间隔

blackdetect=d=2:pix_th=0.00

11.14 blackframe

检测(几乎)完全黑色的帧。可用于检测章节过渡或广告。输出行包含检测到的帧的帧号、黑色百分比、文件中位置(如果已知)或 -1 以及以秒为单位的时间戳。

为了显示输出行,您需要将日志级别至少设置为 AV_LOG_INFO 值。

此滤镜导出帧元数据 lavfi.blackframe.pblack。该值表示图片中低于阈值的像素百分比。

它接受以下参数

必须低于阈值的像素百分比;默认为 98

threshold, thresh

低于此阈值,像素值被视为黑色;默认为 32

11.15 blend

将两个视频帧混合在一起。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出也会终止。

tblend (时间混合) 滤镜从一个单一流中获取两个连续的帧,并输出通过将新帧混合在旧帧之上而获得的结果。

以下是可接受选项的描述。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

为特定像素分量或所有像素分量(如果是 all_mode)设置混合模式。默认值为 normal

组件模式的可用值包括

addition
and
average
bleach
burn
darken
difference
divide
dodge
exclusion
extremity
freeze
geometric
glow
grainextract
grainmerge
hardlight
hardmix
hardoverlay
harmonic
heat
interpolate
lighten
linearlight
multiply
multiply128
negation
normal
or
overlay
phoenix
pinlight
reflect
screen
softdifference
softlight
stain
subtract
vividlight
xor
c0_opacity
c1_opacity
c2_opacity
c3_opacity
all_opacity

为特定像素分量或所有像素分量(如果是 all_opacity)设置混合不透明度。仅与像素分量混合模式结合使用。

c0_expr
c1_expr
c2_expr
c3_expr
all_expr

为特定像素分量或所有像素分量(如果是 all_expr)设置混合表达式。请注意,如果设置了相关模式选项,则这些选项将被忽略。

表达式可以使用以下变量

N

已过滤帧的序列号,从 0 开始。

X
Y

当前样本的坐标

W
H

当前已过滤平面的宽度和高度

SW
SH

正在过滤的平面的宽度和高度比例。它是当前平面尺寸与亮度平面尺寸之间的比率,例如,对于 yuv420p 帧,亮度平面的值为 1,1,色度平面的值为 0.5,0.5

T

当前帧的时间,以秒为单位表示。

TOP, A

第一个视频帧(顶层)在当前位置的像素分量的值。

BOTTOM, B

第二个视频帧(底层)在当前位置的像素分量的值。

blend 滤镜还支持 framesync 选项。

11.15.1 示例

  • 在前 10 秒内应用从底层到顶层的过渡
    blend=all_expr='A*(if(gte(T,10),1,T/10))+B*(1-(if(gte(T,10),1,T/10)))'
    
  • 应用从顶层到底层的线性水平过渡
    blend=all_expr='A*(X/W)+B*(1-X/W)'
    
  • 应用 1x1 棋盘格效果
    blend=all_expr='if(eq(mod(X,2),mod(Y,2)),A,B)'
    
  • 应用左侧展开效果
    blend=all_expr='if(gte(N*SW+X,W),A,B)'
    
  • 应用向下展开效果
    blend=all_expr='if(gte(Y-N*SH,0),A,B)'
    
  • 应用左上展开效果
    blend=all_expr='if(gte(T*SH*40+Y,H)*gte((T*40*SW+X)*W/H,W),A,B)'
    
  • 对角分割视频并在每一侧显示顶层和底层
    blend=all_expr='if(gt(X,Y*(W/H)),A,B)'
    
  • 显示当前帧和上一帧之间的差异
    tblend=all_mode=grainextract
    

11.15.2 命令

此滤镜支持与选项相同的 commands

11.16 blockdetect

确定帧的块状感,而不改变输入帧。

基于 Remco Muijs 和 Ihor Kirenko 的研究:“一种用于自适应视频处理的无参考块伪影度量”。2005 年第 13 届欧洲信号处理会议。

该滤波器接受以下选项

period_min
period_max

设置用于确定像素网格(周期)的最小值和最大值。默认值为 [3,24]。

平面

设置要过滤的平面。默认值为仅第一平面。

11.16.1 示例

  • 确定第一个平面的块状感,并在 [8,32] 范围内搜索周期
    blockdetect=period_min=8:period_max=32:planes=1
    

11.17 blurdetect

确定帧的模糊度,而不改变输入帧。

基于 Marziliano, Pina 等人。“无参考感知模糊度量”。允许基于块的缩写。

该滤波器接受以下选项

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过 8 连接性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

radius

定义在边缘像素周围搜索局部最大值的半径。

block_pct

仅为最重要的块确定模糊度,以百分比表示。

block_width

确定宽度为 block_width 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且无论 block_height 如何,都将整个图像作为一个整体进行处理。

block_height

确定高度为 block_height 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且无论 block_width 如何,都将整个图像作为一个整体进行处理。

平面

设置要过滤的平面。默认值为仅第一平面。

11.17.1 示例

  • 确定 80% 最重要的 32x32 块的模糊度
    blurdetect=block_width=32:block_height=32:block_pct=80
    

11.18 bm3d

使用块匹配 3D 算法对帧进行去噪。

此滤镜接受以下选项。

sigma

设置去噪强度。默认值为 1。允许的范围为 0 到 999.9。去噪算法对 sigma 非常敏感,因此请根据源调整它。

block

设置局部块大小。这将设置 2D 中的尺寸。

bstep

设置处理块的滑动步长。默认值为 4。允许的范围为 1 到 64。较小的值允许处理更多的参考块,但速度较慢。

group

设置第三维相似块的最大数量。默认值为 1。设置为 1 时,不进行块匹配。较大的值允许单个组中包含更多块。允许的范围为 1 到 256。

range

设置块匹配的搜索半径。默认值为 9。允许的范围为 1 到 INT32_MAX。

mstep

设置块匹配中两个搜索位置之间的步长。默认值为 1。允许的范围为 1 到 64。较小的值速度较慢。

thmse

设置块匹配的均方误差阈值。有效范围为 0 到 INT32_MAX。

hdthr

设置 3D 变换域中硬阈值的阈值参数。较大的值会导致频域中更强的硬阈值滤波。

estim

设置滤波估计模式。可以是 basicfinal。默认值为 basic

ref

如果启用,滤镜将使用第二个流进行块匹配。对于 estim 选项的 basic 值,默认情况下禁用,如果 estim 的值为 final,则始终启用。

平面

设置要过滤的平面。默认值为除 alpha 之外的所有可用平面。

11.18.1 示例

  • 使用 bm3d 进行基本滤波
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic
    
  • 与上面相同,但仅过滤亮度
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic:planes=1
    
  • 与上面相同,但使用两种估计模式
    split[a][b],[a]bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
    
  • 与上面相同,但首先使用 nlmeans 滤镜进行预过滤
    split[a][b],[a]nlmeans=s=3:r=7:p=3[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
    

11.19 boxblur

对输入视频应用盒式模糊算法。

它接受以下参数

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

以下是可接受选项的描述。

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

设置用于模糊相应输入平面的盒半径(以像素为单位)的表达式。

半径值必须是非负数,并且对于亮度平面和 alpha 平面,不得大于表达式 min(w,h)/2 的值,对于色度平面,不得大于 min(cw,ch)/2 的值。

luma_radius 的默认值为“2”。如果未指定,chroma_radiusalpha_radius 默认设置为与 luma_radius 设置的相应值。

表达式可以包含以下常量

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像的宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定对相应平面应用盒式模糊滤镜的次数。

luma_power 的默认值为 2。如果未指定,chroma_poweralpha_power 默认设置为与 luma_power 设置的相应值。

值为 0 将禁用效果。

11.19.1 示例

  • 应用盒式模糊滤镜,亮度、色度和 alpha 半径设置为 2
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • 将亮度半径设置为 2,alpha 和色度半径设置为 0
    boxblur=2:1:cr=0:ar=0
    
  • 将亮度和色度半径设置为视频尺寸的一部分
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

11.20 bwdif

对输入视频进行去隔行处理(“bwdif”代表“Bob Weaver Deinterlacing Filter”,即鲍勃·韦弗去隔行滤镜)。

基于 yadif 并使用 w3fdif 和立方插值算法的自适应运动去隔行处理。它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

0,send_frame

为每个帧输出一个帧。

1,send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

0,all

对所有帧进行去隔行处理。

1,interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

11.21 bwdif_cuda

使用 bwdif 算法对输入视频进行去隔行处理,但它在 CUDA 中实现,因此可以作为具有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分工作。

它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

0,send_frame

为每个帧输出一个帧。

1,send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

0,all

对所有帧进行去隔行处理。

1,interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

11.22 ccrepack

重新打包 CEA-708 字幕侧数据

此滤镜修复了与商业编码器相关的各种问题,这些问题与上游格式错误的 CEA-708 有效载荷有关,特别是元组数量不正确(目标 FPS 的 cc_count 错误)以及元组排序不正确(即 CEA-608 元组不在有效载荷的第一个条目中)。

11.23 cas

将对比度自适应锐化滤镜应用于视频流。

该滤波器接受以下选项

strength

设置锐化强度。默认值为 0。

平面

设置要过滤的平面。默认值为过滤除 alpha 平面之外的所有平面。

11.23.1 命令

此滤镜支持与选项相同的 commands

11.24 chromahold

删除除特定颜色之外的所有颜色的所有颜色信息。

该滤波器接受以下选项

color

不会被中性色度替换的颜色。

相似度

与上述颜色的相似度百分比。0.01 仅匹配精确的键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。0.0 使像素完全为灰色或完全不为灰色。较高的值会导致保留更多颜色。

yuv

表示传递的颜色已在 YUV 中,而不是 RGB 中。

像“绿色”或“红色”这样的字面颜色在此启用后不再有意义。这可以用于以十六进制数字传递精确的 YUV 值。

11.24.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.25 chromakey

YUV 色彩空间颜色/色度键控。

该滤波器接受以下选项

color

将替换为透明度的颜色。

相似度

与键颜色的相似度百分比。

0.01 仅匹配精确的键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。

0.0 使像素完全透明或完全不透明。

更高的值会产生半透明像素,像素颜色与关键颜色越相似,透明度越高。

yuv

表示传递的颜色已在 YUV 中,而不是 RGB 中。

像“绿色”或“红色”这样的字面颜色在此启用后不再有意义。这可以用于以十六进制数字传递精确的 YUV 值。

11.25.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.25.2 示例

  • 使输入图像中的每个绿色像素透明
    ffmpeg -i input.png -vf chromakey=green out.png
    
  • 将绿幕视频叠加在静态黑色背景之上。
    ffmpeg -f lavfi -i color=c=black:s=1280x720 -i video.mp4 -shortest -filter_complex "[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.mkv
    

11.26 chromakey_cuda

CUDA 加速的 YUV 色彩空间颜色/色度键控。

此滤镜的工作方式类似于普通色度键控滤镜,但它在 CUDA 帧上运行。有关更多详细信息和参数,请参见chromakey

11.26.1 示例

  • 使输入视频中的所有绿色像素透明,并将其用作另一个视频的叠加层
    ./ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
        -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
        -init_hw_device cuda \
        -filter_complex \
        " \
            [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
            [1:v]scale_cuda=format=yuv420p[base]; \
            [base][overlay_video]overlay_cuda" \
        -an -sn -c:v h264_nvenc -cq 20 output.mp4
    
  • 处理两个软件源,显式上传帧
    ./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
        -f lavfi -i color=size=800x600:color=white,format=yuv420p \
        -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
        -filter_complex \
        " \
            [0]hwupload[under]; \
            [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
            [under][over]overlay_cuda" \
        -c:v hevc_nvenc -cq 18 -preset slow output.mp4
    

11.27 chromanr

减少色度噪声。

该滤波器接受以下选项

thres

设置色度值平均的阈值。当前像素和相邻像素的 Y、U 和 V 像素分量的绝对差之和低于此阈值时,将用于平均。亮度分量保持不变并复制到输出。默认值为 30。允许的范围是 1 到 200。

sizew

设置用于平均的矩形的水平半径。允许的范围是 1 到 100。默认值为 5。

sizeh

设置用于平均的矩形的垂直半径。允许的范围是 1 到 100。默认值为 5。

stepw

设置平均时的水平步长。默认值为 1。允许的范围是 1 到 50。主要用于加速过滤。

steph

设置平均时的垂直步长。默认值为 1。允许的范围是 1 到 50。主要用于加速过滤。

threy

设置用于平均色度值的 Y 阈值。为当前像素和相邻像素的 Y 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围是 1 到 200。

threu

设置用于平均色度值的 U 阈值。为当前像素和相邻像素的 U 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围是 1 到 200。

threv

设置用于平均色度值的 V 阈值。为当前像素和相邻像素的 V 分量之间允许的最大差异设置更精细的控制。默认值为 200。允许的范围是 1 到 200。

distance

设置计算中使用的距离类型。

manhattan

绝对差。

euclidean

差的平方。

默认的距离类型是 manhattan。

11.27.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

11.28 chromashift

水平和/或垂直移动色度像素。

该滤波器接受以下选项

cbh

设置水平移动色度蓝色的量。

cbv

设置垂直移动色度蓝色的量。

crh

设置水平移动色度红色的量。

crv

设置垂直移动色度红色的量。

edge

设置边缘模式,可以是smear(默认)或warp

11.28.1 命令

此过滤器支持以上所有选项作为 命令

11.29 ciescope

显示 CIE 色彩图,并将像素叠加在其上。

该滤波器接受以下选项

system

设置颜色系统。

ntsc, 470m
ebu, 470bg
smpte
240m
apple
widergb
cie1931
rec709, hdtv
uhdtv, rec2020
dcip3
cie

设置 CIE 系统。

xyy
ucs
luv
gamuts

设置要绘制的色域。

有关可用值,请参见 system 选项。

size, s

设置色域范围大小,默认设置为 512。

intensity, i

设置用于将输入像素值映射到 CIE 图的强度。

contrast

设置用于绘制超出活动颜色系统色域的舌形颜色的对比度。

corrgamma

校正显示在范围上的伽玛,默认启用。

showwhite

在 CIE 图上显示白点,默认禁用。

gamma

设置输入伽玛。仅与 XYZ 输入色彩空间一起使用。

fill

用 CIE 颜色填充。默认情况下启用。

11.30 codecview

可视化某些编解码器导出的信息。

某些编解码器可以使用边数据或其他方式通过帧导出信息。例如,某些基于 MPEG 的编解码器通过编解码器 flags2 选项中的 export_mvs 标志导出运动矢量。

此滤波器接受以下选项

block

使用亮度平面显示块分区结构。

mv

设置要可视化的运动矢量。

mv 的可用标志为

pf

P 帧的前向预测运动矢量

bf

B 帧的前向预测运动矢量

bb

B 帧的后向预测运动矢量

qp

使用色度平面显示量化参数。

mv_type, mvt

设置要可视化的运动矢量类型。包括来自所有帧的运动矢量,除非由 frame_type 选项指定。

mv_type 的可用标志为

fp

前向预测运动矢量

bp

后向预测运动矢量

frame_type, ft

设置要可视化其运动矢量的帧类型。

frame_type 的可用标志为

if

帧内编码帧(I 帧)

pf

预测帧(P 帧)

bf

双向预测帧(B 帧)

11.30.1 示例

  • 使用 ffplay 可视化所有帧的前向预测运动矢量
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 使用 ffplay 可视化 P 帧和 B 帧的多向运动矢量
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

11.31 colorbalance

修改输入帧的原色(红色、绿色和蓝色)的强度。

该滤镜允许在红色-青色、绿色-洋红色或蓝色-黄色平衡的阴影、中间调或高光区域中调整输入帧。

正调整值使平衡向原色移动,负值向补色移动。

该滤波器接受以下选项

rs
gs
bs

调整红色、绿色和蓝色阴影(最暗的像素)。

rm
gm
bm

调整红色、绿色和蓝色中间调(中等像素)。

rh
gh
bh

调整红色、绿色和蓝色高光(最亮的像素)。

选项的允许范围是 [-1.0, 1.0]。默认值为 0

pl

在更改颜色平衡时保留亮度。默认情况下禁用。

11.31.1 示例

  • 为阴影添加红色色偏
    colorbalance=rs=.3
    

11.31.2 命令

此过滤器支持以上所有选项作为 命令

11.32 colorcontrast

调整 RGB 分量之间的颜色对比度。

该滤波器接受以下选项

rc

设置红色-青色对比度。默认值为 0.0。允许的范围是 -1.0 到 1.0。

gm

设置绿色-洋红色对比度。默认值为 0.0。允许的范围是 -1.0 到 1.0。

by

设置蓝色-黄色对比度。默认值为 0.0。允许的范围是 -1.0 到 1.0。

rcw
gmw
byw

设置每个 rcgmby 选项值的权重。默认值为 0.0。允许的范围是 0.0 到 1.0。如果所有权重均为 0.0,则禁用过滤。

pl

设置保留亮度的量。默认值为 0.0。允许的范围是 0.0 到 1.0。

11.32.1 命令

此过滤器支持以上所有选项作为 命令

11.33 colorcorrect

为黑色和白色选择性地调整颜色白平衡。此滤镜在 YUV 色彩空间中运行。

该滤波器接受以下选项

rl

设置红色阴影点。允许的范围是 -1.0 到 1.0。默认值为 0。

bl

设置蓝色阴影点。允许的范围是 -1.0 到 1.0。默认值为 0。

rh

设置红色高光点。允许的范围是 -1.0 到 1.0。默认值为 0。

bh

设置蓝色高光点。允许的范围是 -1.0 到 1.0。默认值为 0。

saturation

设置饱和度量。允许的范围是 -3.0 到 3.0。默认值为 1。

analyze

如果设置为除 manual 之外的任何值,它将分析每个帧,并使用导出的参数来过滤输出帧。

可能的值为

manual
average
minmax
median

默认值为 manual

11.33.1 命令

此过滤器支持以上所有选项作为 命令

11.34 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此滤镜通过添加与同一像素的其他通道关联的值来修改颜色通道。例如,如果要修改的值为红色,则输出值将为

red=red*rr + blue*rb + green*rg + alpha*ra

该滤波器接受以下选项

rr
rg
rb
ra

调整输出红色通道中输入红色、绿色、蓝色和 Alpha 通道的贡献。默认情况下,rr1rgrbra0

gr
gg
gb
ga

调整输出绿色通道中输入红色、绿色、蓝色和 Alpha 通道的贡献。默认情况下,gg1grgbga0

br
bg
bb
ba

调整输出蓝色通道中输入红色、绿色、蓝色和 Alpha 通道的贡献。默认情况下,bb1brbgba0

ar
ag
ab
aa

调整输出 Alpha 通道中输入红色、绿色、蓝色和 Alpha 通道的贡献。默认情况下,aa1aragab0

选项的允许范围为 [-2.0, 2.0]

pc

设置保留颜色模式。可接受的值为

none

禁用颜色保留,这是默认值。

lum

保留亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的总和值。

nrm

保留 RGB 三元组的归一化值。

pwr

保留 RGB 三元组的功率值。

pa

设置更改颜色时保留的颜色量。允许范围为 [0.0, 1.0]。默认值为 0.0,因此禁用。

11.34.1 示例

  • 将源转换为灰度
    colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3
    
  • 模拟棕褐色调
    colorchannelmixer=.393:.769:.189:0:.349:.686:.168:0:.272:.534:.131
    

11.34.2 命令

此过滤器支持以上所有选项作为 命令

11.35 colorize

在视频流上叠加纯色。

该滤波器接受以下选项

hue

设置颜色色调。允许范围为 0 到 360。默认值为 0。

saturation

设置颜色饱和度。允许范围为 0 到 1。默认值为 0.5。

lightness

设置颜色亮度。允许范围为 0 到 1。默认值为 0.5。

mix

设置源亮度的混合。默认设置为 1.0。允许范围为 0.0 到 1.0。

11.35.1 命令

此过滤器支持以上所有选项作为 命令

11.36 colorkey

RGB 颜色空间颜色键控。此滤镜通过将每个位于键颜色相似度半径内的像素的 alpha 分量设置为 0,从而在 8 位 RGB 格式帧上操作。相似度半径之外的像素的 alpha 值取决于混合选项的值。

该滤波器接受以下选项

color

设置 alpha 将被设置为 0 (完全透明) 的颜色。请参阅 ffmpeg-utils 手册中的“(ffmpeg-utils)“Color”部分。默认值为 black

相似度

设置距离键颜色半径,在此半径内,其他颜色也具有完全透明度。计算出的距离与键颜色和像素颜色的 RGB 值之间在 3D 空间中的单位分数距离有关。范围为 0.01 到 1.0。0.01 匹配键颜色周围非常小的半径内的颜色,而 1.0 匹配所有颜色。默认值为 0.01

混合

设置如何计算落在相似度半径之外的像素的 alpha 值。0.0 使像素完全透明或完全不透明。较高的值会导致半透明像素,像素颜色与键颜色越相似,透明度越高。范围为 0.0 到 1.0。默认值为 0.0

11.36.1 示例

  • 使输入图像中的每个绿色像素透明
    ffmpeg -i input.png -vf colorkey=green out.png
    
  • 在静态背景图像之上叠加绿屏视频。
    ffmpeg -i background.png -i video.mp4 -filter_complex "[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]" -map "[out]" output.flv
    

11.36.2 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.37 colorhold

删除除特定颜色外的所有 RGB 颜色的所有颜色信息。

该滤波器接受以下选项

color

不会被替换为中性灰色的颜色。

相似度

与上述颜色的相似度百分比。0.01 仅匹配精确的键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。0.0 使像素完全变为灰色。较高的值会导致保留更多颜色。

11.37.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.38 colorlevels

使用 levels 调整视频输入帧。

该滤波器接受以下选项

rimin
gimin
bimin
aimin

调整红色、绿色、蓝色和 alpha 输入黑点。选项的允许范围为 [-1.0, 1.0]。默认值为 0

rimax
gimax
bimax
aimax

调整红色、绿色、蓝色和 alpha 输入白点。选项的允许范围为 [-1.0, 1.0]。默认值为 1

输入 levels 用于提亮高光(亮色调),加深阴影(暗色调),更改亮色调和暗色调的平衡。

romin
gomin
bomin
aomin

调整红色、绿色、蓝色和 alpha 输出黑点。选项的允许范围为 [0, 1.0]。默认值为 0

romax
gomax
bomax
aomax

调整红色、绿色、蓝色和 alpha 输出白点。选项的允许范围为 [0, 1.0]。默认值为 1

输出 levels 允许手动选择受限的输出 level 范围。

preserve

设置保留颜色模式。可接受的值为

none

禁用颜色保留,这是默认值。

lum

保留亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的总和值。

nrm

保留 RGB 三元组的归一化值。

pwr

保留 RGB 三元组的功率值。

11.38.1 示例

  • 使视频输出变暗
    colorlevels=rimin=0.058:gimin=0.058:bimin=0.058
    
  • 增加对比度
    colorlevels=rimin=0.039:gimin=0.039:bimin=0.039:rimax=0.96:gimax=0.96:bimax=0.96
    
  • 使视频输出变亮
    colorlevels=rimax=0.902:gimax=0.902:bimax=0.902
    
  • 增加亮度
    colorlevels=romin=0.5:gomin=0.5:bomin=0.5
    

11.38.2 命令

此过滤器支持以上所有选项作为 命令

11.39 colormap

将自定义颜色映射应用于视频流。

此滤镜需要三个输入视频流。第一个流是将要过滤掉的视频流。第二个和第三个视频流指定源颜色到目标颜色映射的颜色块。

该滤波器接受以下选项

patch_size

设置源和目标视频流的颜色块大小(以像素为单位)。

nb_patches

设置源和目标视频流中使用的最大颜色块数。默认值是附加视频流中可用的颜色块数。允许的最大颜色块数为 64

type(类型)

设置用于目标颜色的调整。可以是 relativeabsolute。默认为 absolute

kernel

设置用于测量映射颜色之间颜色差异的内核。

可接受的值为

euclidean
weuclidean

默认值为 euclidean

11.40 colormatrix

转换颜色矩阵。

该滤波器接受以下选项

src
dst

指定源和目标颜色矩阵。必须指定两个值。

可接受的值为

bt709

BT.709

fcc

FCC

bt601

BT.601

bt470

BT.470

bt470bg

BT.470BG

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

例如,要从 BT.601 转换为 SMPTE-240M,请使用以下命令

colormatrix=bt601:smpte240m

11.41 colorspace

转换颜色空间、传输特性或颜色原色。输入视频需要具有偶数大小。

该滤波器接受以下选项

all(全部)

一次指定所有颜色属性。

可接受的值为

bt470m

BT.470M

bt470bg

BT.470BG

bt601-6-525

BT.601-6 525

bt601-6-625

BT.601-6 625

bt709

BT.709

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

space

指定输出颜色空间。

可接受的值为

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

ycgco

YCgCo

bt2020ncl

BT.2020,具有非恒定亮度

trc

指定输出传输特性。

可接受的值为

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG

gamma22

恒定 gamma 为 2.2

gamma28

恒定 gamma 为 2.8

smpte170m

SMPTE-170M、BT.601-6 625 或 BT.601-6 525

smpte240m

SMPTE-240M

srgb

SRGB

iec61966-2-1

iec61966-2-1

iec61966-2-4

iec61966-2-4

xvycc

xvycc

bt2020-10

BT.2020,适用于 10 位内容

bt2020-12

BT.2020,适用于 12 位内容

primaries

指定输出颜色原色。

可接受的值为

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

film

film

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22 荧光粉

range

指定输出颜色范围。

可接受的值为

tv

TV(受限)范围

mpeg

MPEG(受限)范围

pc

PC(完整)范围

jpeg

JPEG(完整)范围

format

指定输出颜色格式。

可接受的值为

yuv420p

YUV 4:2:0 平面 8 位

yuv420p10

YUV 4:2:0 平面 10 位

yuv420p12

YUV 4:2:0 平面格式 12 位

yuv422p

YUV 4:2:2 平面格式 8 位

yuv422p10

YUV 4:2:2 平面格式 10 位

yuv422p12

YUV 4:2:2 平面格式 12 位

yuv444p

YUV 4:4:4 平面格式 8 位

yuv444p10

YUV 4:4:4 平面格式 10 位

yuv444p12

YUV 4:4:4 平面格式 12 位

fast

进行快速转换,跳过伽玛/原色校正。这将占用显著较少的 CPU,但数学上不正确。要获得与 colormatrix 滤镜产生的输出兼容的输出,请使用 fast=1。

dither

指定抖动模式。

可接受的值为

none

无抖动

fsb

Floyd-Steinberg 抖动

wpadapt

白点适应模式。

可接受的值为

bradford

Bradford 白点适应

vonkries

von Kries 白点适应

identity

恒等白点适应(即无白点适应)

iall

一次性覆盖所有输入属性。接受的值与 all 相同。

ispace

覆盖输入色彩空间。接受的值与 space 相同。

iprimaries

覆盖输入颜色原色。接受的值与 primaries 相同。

itrc

覆盖输入传递特性。接受的值与 trc 相同。

irange

覆盖输入颜色范围。接受的值与 range 相同。

该滤镜将传递特性、色彩空间和颜色原色转换为指定的用户值。如果未指定输出值,则会根据“all”属性将其设置为默认值。如果该属性也未指定,则滤镜将记录一个错误。输出颜色范围和格式默认为与输入颜色范围和格式相同的值。输入传递特性、色彩空间、颜色原色和颜色范围应在输入数据上设置。如果缺少任何这些,滤镜将记录一个错误,并且不会进行转换。

例如,要将输入转换为 SMPTE-240M,请使用以下命令

colorspace=smpte240m

11.42 colorspace_cuda

CUDA 加速实现的色彩空间滤镜。

与软件色彩空间滤镜相比,它绝不是功能完备的,并且目前仅支持 jpeg/full 和 mpeg/limited 范围之间的颜色范围转换。

该滤波器接受以下选项

range

指定输出颜色范围。

可接受的值为

tv

TV(受限)范围

mpeg

MPEG(受限)范围

pc

PC(完整)范围

jpeg

JPEG(完整)范围

11.43 colortemperature

调整视频中的色温,以模拟环境色温的变化。

该滤波器接受以下选项

temperature

以开尔文为单位设置温度。允许的范围是 1000 到 40000。默认值为 6500 K。

mix

设置与过滤后的输出的混合。允许的范围是 0 到 1。默认值为 1。

pl

设置保留亮度的量。允许的范围是 0 到 1。默认值为 0。

11.43.1 命令

此滤镜支持与选项相同的 commands

11.44 convolution

应用 3x3、5x5、7x7 的卷积或水平/垂直卷积,最多 49 个元素。

该滤波器接受以下选项

0m
1m
2m
3m

为每个平面设置矩阵。在 square 模式下,矩阵是 9、25 或 49 个有符号整数的序列,在 row 模式下,矩阵是 1 到 49 个奇数个有符号整数的序列。

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面设置计算值的乘数。如果未设置或为 0,则它将是所有矩阵元素之和的倒数。

0bias
1bias
2bias
3bias

为每个平面设置偏差。此值将添加到乘法结果中。对于使整体图像更亮或更暗很有用。默认为 0.0。

0mode
1mode
2mode
3mode

为每个平面设置矩阵模式。可以是 squarerowcolumn。默认为 square

11.44.1 命令

此过滤器支持以上所有选项作为 命令

11.44.2 示例

  • 应用锐化
    convolution="0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0"
    
  • 应用模糊
    convolution="1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9"
    
  • 应用边缘增强
    convolution="0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128"
    
  • 应用边缘检测
    convolution="0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128"
    
  • 应用包含对角线的拉普拉斯边缘检测器
    convolution="1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0"
    
  • 应用浮雕
    convolution="-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2"
    

11.45 convolve

使用第二个流作为脉冲,在频域中应用视频流的 2D 卷积。

该滤波器接受以下选项

平面

设置要处理的平面。

impulse

设置将处理哪个脉冲视频帧,可以是 firstall。默认为 all

convolve 滤镜还支持 framesync 选项。

11.46 copy

将输入视频源不变地复制到输出。这主要用于测试目的。

11.47 coreimage

在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上进行视频过滤。

硬件加速基于 OpenGL 上下文。通常,这意味着它由视频硬件处理。但是,存在基于软件的 OpenGL 实现,这意味着不能保证硬件处理。这取决于各自的 OSX。

Apple 提供了许多滤镜和图像生成器,它们带有各种各样的选项。必须通过其名称及其选项引用该滤镜。

coreimage 滤镜接受以下选项

list_filters

列出所有可用的滤镜和生成器以及它们各自的所有选项,以及可能的最小值和最大值以及默认值。

list_filters=true
过滤器

通过它们各自的名称和选项指定所有滤镜。使用 list_filters 来确定所有有效的滤镜名称和选项。数值选项由浮点值指定,并且会自动钳制到它们各自的值范围。向量和颜色选项必须由空格分隔的浮点值列表指定。必须进行字符转义。一个特殊的选项名称 default 可用于为滤镜使用默认选项。

需要指定 default 或至少一个滤镜选项。所有省略的选项都使用它们的默认值。滤镜字符串的语法如下

filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]
output_rect

指定将滤镜链的输出复制到输入图像中的矩形。它由空格分隔的浮点值列表给出

output_rect=x\ y\ width\ height

如果未给出,则输出矩形等于输入图像的尺寸。输出矩形会自动在输入图像的边界处裁剪。每个组件的负值都是有效的。

output_rect=25\ 25\ 100\ 100

可以将多个滤镜链接起来进行连续处理,而无需 GPU-HOST 传输,从而可以快速处理复杂的滤镜链。目前,仅支持具有零个(生成器)或恰好一个(滤镜)输入图像和一个输出图像的滤镜。此外,过渡滤镜尚未按预期使用。

一些滤镜会根据各自的滤镜内核生成带有额外填充的输出图像。会自动删除填充以确保滤镜输出与输入图像的大小相同。

对于图像生成器,输出图像的大小分别由滤镜链的前一个输出图像或整个滤镜链的输入图像决定。生成器不使用此图像的像素信息来生成其输出。但是,生成的输出会混合到此图像上,从而导致部分或完全覆盖输出图像。

可以使用 coreimagesrc 视频源来生成直接馈入滤镜链的输入图像。通过使用它,不需要通过另一个视频源或输入视频来提供输入图像。

11.47.1 示例

  • 列出所有可用的滤镜
    coreimage=list_filters=true
    
  • 使用默认选项的 CIBoxBlur 滤镜来模糊图像
    coreimage=filter=CIBoxBlur@default
    
  • 使用默认值的 CISepiaTone 和中心点位于 100x100 且半径为 50 像素的 CIVignetteEffect 的滤镜链
    coreimage=filter=CIBoxBlur@default#CIVignetteEffect@inputCenter=100\ 100@inputRadius=50
    
  • 使用 nullsrc 和 CIQRCodeGenerator 为 FFmpeg 主页创建一个二维码,以 Apple 的标准 bash shell 的完整且转义的命令行形式给出
    ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

11.48 corr

获取两个输入视频之间的相关性。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假定两个输入具有相同数量的帧,这些帧会逐一进行比较。

通过日志系统打印获得的每个分量、平均值、最小值和最大值相关性。

此滤镜将每帧计算出的相关性存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -

11.49 cover_rect

覆盖矩形对象

它接受以下选项

覆盖

可选覆盖图像的文件路径,需要为 yuv420 格式。

mode

设置覆盖模式。

它接受以下值

cover

使用提供的图像覆盖它

blur

通过插值周围的像素来覆盖它

默认值为 blur

11.49.1 示例

  • 使用 ffmpeg 通过给定的视频的提供的图像来覆盖矩形对象
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    

11.50 crop

将输入视频裁剪为给定的尺寸。

它接受以下参数

w, out_w

输出视频的宽度。默认为 iw。此表达式仅在滤镜配置期间或发送 ‘w’ 或 ‘out_w’ 命令时计算一次。

h, out_h

输出视频的高度。默认为 ih。此表达式仅在滤镜配置期间或发送 ‘h’ 或 ‘out_h’ 命令时计算一次。

x

输出视频的左边缘在输入视频中的水平位置。它默认为 (in_w-out_w)/2。此表达式每帧计算一次。

y

输出视频的上边缘在输入视频中的垂直位置。它默认为 (in_h-out_h)/2。此表达式每帧计算一次。

keep_aspect

如果设置为 1,则通过更改输出样本纵横比来强制输出显示纵横比与输入的相同。默认为 0。

exact

启用精确裁剪。如果启用,则将按指定的确切宽度/高度/x/y裁剪子采样视频,并且不会舍入为最接近的较小值。默认为 0。

out_wout_hxy 参数是包含以下常数的表达式

x
y

计算出的 xy 的值。它们为每个新帧计算。

in_w
in_h

输入宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(裁剪)宽度和高度。

ow
oh

这些与 out_wout_h 相同。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

n

输入帧的编号,从 0 开始。

pos

输入帧在文件中的位置,如果未知,则为 NAN;已弃用,请勿使用

t

时间戳以秒为单位表示。如果输入时间戳未知,则为 NAN。

out_w 的表达式可能取决于 out_h 的值,而 out_h 的表达式可能取决于 out_w,但是它们不能取决于 xy,因为 xyout_wout_h 之后计算。

xy 参数指定输出(非裁剪)区域左上角位置的表达式。它们为每一帧计算。如果计算出的值无效,则将其近似为最接近的有效值。

x 的表达式可能取决于 y,而 y 的表达式可能取决于 x

11.50.1 示例

  • 在位置 (12,34) 处裁剪大小为 100x100 的区域。
    crop=100:100:12:34
    

    使用命名选项,上面的示例变为

    crop=w=100:h=100:x=12:y=34
    
  • 裁剪大小为 100x100 的中心输入区域
    crop=100:100
    
  • 裁剪大小为输入视频 2/3 的中心输入区域
    crop=2/3*in_w:2/3*in_h
    
  • 裁剪输入视频的中心正方形
    crop=out_w=in_h
    crop=in_h
    
  • 使用放置在位置 100:100 的左上角和与输入图像的右下角对应的右下角来划定矩形。
    crop=in_w-100:in_h-100:100:100
    
  • 从左右边界裁剪 10 个像素,从顶部和底部边界裁剪 20 个像素
    crop=in_w-2*10:in_h-2*20
    
  • 仅保留输入图像的右下四分之一
    crop=in_w/2:in_h/2:in_w/2:in_h/2
    
  • 裁剪高度以获得希腊和谐
    crop=in_w:1/PHI*in_w
    
  • 应用颤抖效果
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
    
  • 应用取决于时间戳的不规则相机效果
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)
    
  • 根据 y 的值设置 x
    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
    

11.50.2 命令

此滤波器支持以下命令

w, out_w
h, out_h
x
y

设置输出视频的宽度/高度以及输入视频中的水平/垂直位置。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.51 cropdetect

自动检测裁剪大小。

它计算必要的裁剪参数,并通过日志系统打印推荐的参数。检测到的尺寸对应于输入视频的非黑色或视频区域,具体取决于 mode

它接受以下参数

mode

根据 mode,裁剪检测基于周围像素的纯黑色值或运动矢量和边缘像素的组合。

black

检测播放视频周围的黑色像素。对于精细控制,请使用选项 limit

mvedges

通过视频内的运动矢量并扫描通常形成播放视频边界的边缘像素来检测播放视频。

限制

设置更高的黑色值阈值,可以从无 (0) 可选指定到所有 (对于基于 8 位格式为 255)。大于设置的值的强度值被认为是非黑色。默认为 24。您还可以指定介于 0.0 和 1.0 之间的值,该值将根据像素格式的位深度进行缩放。

round

宽度/高度应可被整除的值。默认为 16。偏移量会自动调整以使视频居中。使用 2 仅获取偶数尺寸(4:2:2 视频所需)。编码为大多数视频编解码器时,16 最佳。

skip

设置跳过评估的初始帧数。默认值为 2。范围为 0 到 INT_MAX。

reset_count, reset

设置计数器,该计数器确定在多少帧之后,cropdetect 将重置先前检测到的最大视频区域,并重新开始检测当前的最佳裁剪区域。默认值为 0。

当频道徽标扭曲视频区域时,这可能很有用。0 表示“从不重置”,并返回播放期间遇到的最大区域。

mv_threshold

设置运动检测的像素单位运动阈值。默认为 8。

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过 8 连接性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high

low 的默认值为 5/255high 的默认值为 15/255

11.51.1 示例

  • 查找被黑色边框包围的视频区域
    ffmpeg -i file.mp4 -vf cropdetect,metadata=mode=print -f null -
    
  • 查找嵌入的视频区域,预先生成运动矢量
    ffmpeg -i file.mp4 -vf mestimate,cropdetect=mode=mvedges,metadata=mode=print -f null -
    
  • 查找嵌入的视频区域,使用解码器的运动矢量
    ffmpeg -flags2 +export_mvs -i file.mp4 -vf cropdetect=mode=mvedges,metadata=mode=print -f null -
    

11.51.2 命令

此滤波器支持以下命令

限制

该命令接受相应选项的相同语法。如果指定的表达式无效,则保持其当前值。

11.52 cue

延迟视频滤波,直到给定的挂钟时间戳。该滤波器首先传递 preroll 数量的帧,然后最多缓冲 buffer 数量的帧并等待提示。达到提示后,它会转发缓冲的帧以及随后的任何输入帧。

该滤波器可用于同步多个 ffmpeg 进程的输出,用于诸如 decklink 之类的实时输出设备。通过将延迟放在滤波链中并预缓冲帧,该进程可以在达到目标挂钟时间戳后几乎立即将数据传递到输出。

无法保证完美的帧精度,但结果对于某些用例来说足够好。

cue

以微秒为单位表示的 UNIX 时间戳的提示时间戳。默认为 0。

preroll

以秒为单位表示的作为预滚传递的内容的持续时间。默认为 0。

buffer

在等待提示之前要缓冲的最大内容持续时间,以秒为单位。默认为 0。

11.53 curves

使用曲线应用颜色调整。

此滤镜类似于 Adobe Photoshop 和 GIMP 曲线工具。每个分量(红色、绿色和蓝色)的值由 N 个关键点定义,这些关键点使用平滑曲线彼此连接。x 轴表示输入帧的像素值,y 轴表示要为输出帧设置的新像素值。

默认情况下,分量曲线由两个点 (0;0)(1;1) 定义。这将创建一条直线,其中每个原始像素值都被“调整”为其自身的值,这意味着图像没有变化。

该滤镜允许您重新定义这两个点并添加更多点。将定义一条新曲线,以平滑地通过所有这些新坐标。新定义的点需要在 x 轴上严格递增,并且它们的 xy 值必须在 [0;1] 区间内。曲线是通过使用自然或单调三次样条插值形成的,具体取决于 interp 选项(默认值:natural)。natural 样条通常产生更平滑的曲线,而单调 (pchip) 样条则保证指定点之间的过渡是单调的。如果计算出的曲线碰巧超出向量空间,则会相应地裁剪这些值。

该滤波器接受以下选项

preset

选择一个可用的颜色预设。除了 rgb 参数外,还可以使用此选项;在这种情况下,后面的选项优先于预设值。可用的预设为

none
color_negative
cross_process
darker
increase_contrast
lighter
linear_contrast
medium_contrast
negative
strong_contrast
vintage

默认为 none

master, m

设置主关键点。这些点将定义第二次映射。有时称为“亮度”或“值”映射。它可以与 rgball 一起使用,因为它就像后处理 LUT 一样。

red, r

设置红色分量的关键点。

green, g

设置绿色分量的关键点。

blue, b

设置蓝色分量的关键点。

all(全部)

设置所有分量(不包括主分量)的关键点。可以与其他的关键点分量选项一起使用。在这种情况下,未设置的分量将回退到此 all 设置。

psfile

指定要从中导入设置的 Photoshop 曲线文件 (.acv)。

plot

将曲线的 Gnuplot 脚本保存在指定的文件中。

插值

指定插值的类型。可用的算法有

natural

使用分段三次多项式的自然三次样条,该多项式是两次连续可微分的。

pchip

使用分段三次 Hermite 插值多项式 (PCHIP) 的单调三次样条。

为了避免一些 filtergraph 语法冲突,每个关键点列表都需要使用以下语法定义:x0/y0 x1/y1 x2/y2 ...

11.53.1 命令

此滤镜支持与选项相同的 commands

11.53.2 示例

  • 稍微增加蓝色中间级别
    curves=blue='0/0 0.5/0.58 1/1'
    
  • 复古效果
    curves=r='0/0.11 .42/.51 1/0.95':g='0/0 0.50/0.48 1/1':b='0/0.22 .49/.44 1/0.8'
    

    这里我们获得每个分量的以下坐标

    红色

    (0;0.11) (0.42;0.51) (1;0.95)

    绿色

    (0;0) (0.50;0.48) (1;1)

    蓝色

    (0;0.22) (0.49;0.44) (1;0.80)

  • 前面的示例也可以通过关联的内置预设来实现
    curves=preset=vintage
    
  • 或简单地
    curves=vintage
    
  • 使用 Photoshop 预设并重新定义绿色分量的点
    curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
    
  • 使用 ffmpeggnuplot 查看 cross_process 配置文件的曲线
    ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
    gnuplot -p /tmp/curves.plt
    

11.54 datascope

视频数据分析滤镜。

此滤镜显示视频部分区域的十六进制像素值。

该滤波器接受以下选项

size, s

设置输出视频大小。

x

设置从中选取像素的 x 偏移量。

y

设置从中选取像素的 y 偏移量。

mode

设置范围模式,可以是以下之一

mono

在黑色背景上用白色绘制十六进制像素值。

color

在黑色背景上使用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中选取的彩色背景上绘制十六进制像素值,文本颜色以始终可见的方式选取。

axis

在视频的左侧和顶部绘制行号和列号。

opacity

设置背景不透明度。

format

设置显示数字格式。可以是 hexdec。默认为 hex

components

设置要显示的像素分量。默认情况下,将显示所有像素分量。

11.54.1 命令

此滤镜支持与选项相同的 命令,但不包括 size 选项。

11.55 dblur

应用定向模糊滤镜。

该滤波器接受以下选项

angle

设置定向模糊的角度。默认为 45

radius

设置定向模糊的半径。默认为 5

平面

设置要过滤的平面。默认情况下,会过滤所有平面。

11.55.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.56 dctdnoiz

使用 2D DCT(频域滤波)对帧进行去噪。

此滤镜并非为实时设计。

该滤波器接受以下选项

sigma, s

设置噪声 sigma 常数。

sigma 定义了 3 * sigma 的硬阈值;任何低于此阈值的 DCT 系数(绝对值)都将被丢弃。

如果需要更高级的滤波,请参阅 expr

默认为 0

overlap

设置每个块的重叠像素数。由于滤镜可能很慢,您可能需要降低此值,但代价是滤镜的效果较差,并且存在各种伪影的风险。

如果重叠值不允许处理整个输入宽度或高度,则会显示警告,并且不会对相应的边界进行去噪。

默认值为 blocksize-1,这是最佳设置。

expr, e

设置系数因子表达式。

对于 DCT 块的每个系数,将评估此表达式作为系数的乘数值。

如果设置了此选项,则将忽略 sigma 选项。

可以通过 c 变量访问系数的绝对值。

n

使用位数设置 blocksize1<<n 定义了 blocksize,它是处理块的宽度和高度。

默认值为 3 (8x8),可以提高到 4 以获得 16x16 的 blocksize。请注意,更改此设置会对处理速度产生巨大影响。此外,更大的块大小并不一定意味着更好的去噪效果。

11.56.1 示例

使用 4.5sigma 应用去噪。

dctdnoiz=4.5

可以使用表达式系统实现相同的操作。

dctdnoiz=e='gte(c, 4.5*3)'

使用 16x16 的块大小进行强力去噪。

dctdnoiz=15:n=4

11.57 deband

从输入视频中去除条带伪影。它的工作原理是用参考像素的平均值替换条带像素。

该滤波器接受以下选项

1thr
2thr
3thr
4thr

设置每个平面的条带检测阈值。默认值为 0.02。有效范围为 0.00003 到 0.5。如果当前像素和参考像素之间的差异小于阈值,则将其视为条带。

范围, r

以像素为单位的条带检测范围。默认值为 16。如果为正值,将使用 0 到设置值范围内的随机数。如果为负值,将使用绝对值的精确值。该范围定义了当前像素周围的四个像素的平方。

方向, d

设置从哪个方向比较四个像素,单位为弧度。如果为正值,将选择 0 到设置方向的随机方向。如果为负值,将选择绝对值的精确值。例如,方向 0、-PI 或 -2*PI 弧度将仅选择同一行上的像素,而 -PI/2 将仅选择同一列上的像素。

模糊, b

如果启用,则将当前像素与所有四个周围像素的平均值进行比较。默认情况下启用。如果禁用,则将当前像素与所有四个周围像素进行比较。如果只有所有四个与周围像素的差异都小于阈值,则该像素被认为是条带。

耦合, c

如果启用,则仅当所有像素分量都为条带时才更改当前像素,例如,所有颜色分量都触发了条带检测阈值。默认情况下禁用。

11.57.1 命令

此过滤器支持以上所有选项作为 命令

11.58 deblock

从输入视频中删除块效应伪影。

该滤波器接受以下选项

过滤器

设置过滤器类型,可以是 weakstrong。默认值为 strong。这控制应用哪种类型的去块。

block

设置块的大小,允许的范围为 4 到 512。默认值为 8

alpha
beta
gamma
delta

设置块效应检测阈值。允许的范围是 0 到 1。默认值为:alpha0.098,其余为 0.05。使用较高的阈值会产生更强的去块强度。设置 alpha 控制块边缘的确切阈值检测。其余选项控制边缘附近的阈值检测。每个选项都用于下方/上方或左侧/右侧。将任何一个设置为 0 将禁用去块。

平面

设置要过滤的平面。默认是过滤所有可用的平面。

11.58.1 示例

  • 使用弱过滤器和 4 像素的块大小进行去块。
    deblock=filter=weak:block=4
    
  • 使用强过滤器、4 像素的块大小和自定义阈值进行去块,以便去块更多边缘。
    deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05
    
  • 与上述类似,但仅过滤第一个平面。
    deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=1
    
  • 与上述类似,但仅过滤第二个和第三个平面。
    deblock=filter=strong:block=4:alpha=0.12:beta=0.07:gamma=0.06:delta=0.05:planes=6
    

11.58.2 命令

此过滤器支持以上所有选项作为 命令

11.59 decimate

定期删除重复的帧。

该滤波器接受以下选项

循环

设置将删除一帧的帧数。将其设置为 N 意味着每批 N 帧将删除一帧。默认值为 5

dupthresh

设置重复检测的阈值。如果帧的差异度量小于或等于此值,则将其声明为重复。默认值为 1.1

scthresh

设置场景更改阈值。默认值为 15

blockx
blocky

设置在度量计算期间使用的 x 轴和 y 轴块的大小。较大的块可提供更好的噪声抑制,但也会使小运动的检测效果更差。必须是 2 的幂。默认值为 32

ppsrc

将主输入标记为预处理输入,并激活干净的源输入流。这允许使用各种过滤器预处理输入,以帮助进行度量计算,同时保持帧选择的无损性。设置为 1 时,第一个流用于预处理输入,第二个流是选择保留帧的干净源。默认值为 0

色度

设置度量计算中是否考虑色度。默认值为 1

mixed

设置输入是否仅部分包含要抽取的内容。默认值为 false。如果启用,视频输出流将采用可变帧率。

11.60 deconvolve

使用第二个流作为脉冲,在频域中对视频流应用 2D 反卷积。

该滤波器接受以下选项

平面

设置要处理的平面。

impulse

设置将处理哪个脉冲视频帧,可以是 firstall。默认为 all

噪声

设置进行除法时的噪声。默认值为 0.0000001。当宽度和高度不同且不是 2 的幂,或者卷积之前的流有噪声时,此设置很有用。

deconvolve 过滤器还支持 framesync 选项。

11.61 dedot

减少视频中的交叉亮度(点爬)和交叉颜色(彩虹)。

它接受以下选项

m

设置操作模式。可以是交叉亮度减少的 dotcrawl 和/或交叉颜色减少的 rainbows 的组合。

lt

设置空间亮度阈值。较低的值会增加交叉亮度的减少。

tl

设置时间亮度容差。较高的值会增加交叉亮度的减少。

tc

设置色度时间变化的容差。较高的值会增加交叉颜色的减少。

ct

设置时间色度阈值。较低的值会增加交叉颜色的减少。

11.62 deflate

将放气效果应用于视频。

此过滤器通过仅考虑小于像素的值,用局部 (3x3) 平均值替换像素。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大更改,默认为 65535。如果为 0,则平面将保持不变。

11.62.1 命令

此过滤器支持以上所有选项作为 命令

11.63 deflicker

消除时间帧亮度变化。

它接受以下选项

size, s

以帧为单位设置移动平均滤波器大小。默认值为 5。允许的范围为 2 - 129。

模式, m

设置平均模式以平滑时间亮度变化。

可用值为

am

算术平均值

gm

几何平均值

hm

调和平均值

qm

二次平均值

cm

立方平均值

pm

幂平均值

median

中位数

旁路

不实际修改帧。当仅需要元数据时很有用。

11.64 dejudder

消除由部分隔行扫描的电视电影内容产生的抖动。

例如,可以通过 pullup 过滤器引入抖动。如果原始源是部分电视电影内容,则 pullup,dejudder 的输出将具有可变的帧率。可能会更改容器的记录帧率。除了该更改之外,此过滤器不会影响恒定帧率视频。

此过滤器中可用的选项是

循环

指定抖动重复的窗口长度。

接受任何大于 1 的整数。有用的值是

4

如果原始素材是从 24 帧转换为 30 帧(电影到 NTSC)的电视电影。

5

如果原始素材是从 25 帧转换为 30 帧(PAL 到 NTSC)的电视电影。

20

如果两者混合。

默认值为 ‘4’。

11.65 delogo

通过简单地插值周围的像素来抑制电视台的台标。只需设置一个覆盖台标的矩形,就可以看到它消失(有时会出现更难看的东西 - 效果因情况而异)。

它接受以下参数

x
y

指定台标左上角的坐标。必须指定这些坐标。

w
h

指定要清除的台标的宽度和高度。必须指定这些参数。

显示

当设置为 1 时,会在屏幕上绘制一个绿色矩形,以简化查找正确的 xywh 参数的过程。默认值为 0。

矩形绘制在最外层的像素上,这些像素将被(部分)替换为插值的值。矩形外侧紧邻的像素值将用于计算矩形内部的插值像素值。

11.65.1 示例

  • 设置一个覆盖区域的矩形,左上角坐标为 0,0,大小为 100x77
    delogo=x=0:y=0:w=100:h=77
    

11.66 derain

通过应用基于卷积神经网络的去雨方法来去除输入图像/视频中的雨。支持的模型

存储库中提供了训练和模型生成脚本,地址为 https://github.com/XueweiMeng/derain_filter.git

该滤波器接受以下选项

filter_type

指定要使用的滤镜。此选项接受以下值

derain

去雨滤镜。要执行去雨滤镜,您需要使用去雨模型。

dehaze

去雾滤镜。要执行去雾滤镜,您需要使用去雾模型。

默认值为 ‘derain’。

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow C 库(参见 https://tensorflowcn.cn/install/lang_c),并使用 --enable-libtensorflow 配置 FFmpeg

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 只能加载其格式的文件。

要获得完整的功能(例如异步执行),请使用 dnn_processing 滤镜。

11.67 deshake

尝试修复水平和/或垂直偏移中的微小变化。此滤镜有助于消除手持相机、碰撞三脚架、在车辆上移动等引起的相机抖动。

该滤波器接受以下选项

x
y
w
h

指定一个矩形区域,以限制运动向量的搜索范围。如果需要,可以将运动向量的搜索范围限制为由其左上角、宽度和高度定义的帧矩形区域。这些参数的含义与 drawbox 滤镜相同,后者可用于可视化边界框的位置。

当帧内主体的同时移动可能被运动向量搜索误认为是相机运动时,这很有用。

如果 xywh 中的任何一个或全部设置为 -1,则使用整个帧。这允许在不指定运动向量搜索的边界框的情况下设置后面的选项。

默认值 - 搜索整个帧。

rx
ry

指定 x 和 y 方向的最大移动范围,范围为 0-64 像素。默认值为 16。

edge

指定如何生成像素来填充帧边缘的空白。可用值如下:

blank, 0

在空白位置填充零

original, 1

在空白位置使用原始图像

clamp, 2

在空白位置使用挤出的边缘值

mirror, 3

在空白位置使用镜像的边缘

默认值为 ‘mirror’。

blocksize

指定用于运动搜索的块大小。范围为 4-128 像素,默认值为 8。

contrast

指定块的对比度阈值。仅考虑对比度(最暗像素和最亮像素之间的差异)大于指定值的块。范围为 1-255,默认值为 125。

search

指定搜索策略。可用值如下:

exhaustive, 0

设置穷举搜索

less, 1

设置较少穷举的搜索。

默认值为 ‘exhaustive’。

filename

如果设置,则将运动搜索的详细日志写入指定的文件。

11.68 despill

去除由绿幕或蓝幕反射颜色引起的前景颜色不必要的污染。

此过滤器接受以下选项

type(类型)

设置要使用的去溢出类型。

mix

设置如何生成溢出图。

expand

设置要去除剩余溢出的量。

红色

控制溢出区域中红色的量。

绿色

控制溢出区域中绿色的量。对于绿幕应为 -1。

蓝色

控制溢出区域中蓝色的量。对于蓝幕应为 -1。

brightness

控制溢出区域的亮度,保留颜色。

alpha

从生成的溢出图修改 Alpha 值。

11.68.1 命令

此过滤器支持以上所有选项作为 命令

11.69 detelecine

应用电视电影操作的精确逆过程。它需要使用 pattern 选项指定的预定义模式,该模式必须与传递给 telecine 滤镜的模式相同。

此过滤器接受以下选项

first_field
top, t

顶场优先

bottom, b

底场优先。默认值为 top

pattern

一个数字字符串,表示您要应用的下拉模式。默认值为 23

start_frame

一个数字,表示第一帧相对于电视电影模式的位置。如果流被剪切,则可以使用此值。默认值为 0

11.70 dilation

将膨胀效果应用于视频。

此滤镜将像素替换为局部 (3x3) 最大值。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大更改,默认为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

局部 3x3 坐标标志如下所示

1 2 3 4 5 6 7 8

11.70.1 命令

此过滤器支持以上所有选项作为 命令

11.71 displace

按照第二个和第三个输入流指示的方式位移像素。

它接受三个输入流并输出一个流,第一个输入是源,第二个和第三个输入是位移图。

第二个输入指定沿 x 轴位移像素的量,而第三个输入指定沿 y 轴位移像素的量。如果其中一个位移图流终止,将使用该位移图的最后一帧。

请注意,一旦生成,位移图可以反复重用。

以下是可接受选项的描述。

edge

设置超出范围的像素的位移行为。

可用值为

blank

丢失的像素由黑色像素替换。

smear

相邻像素将扩散以替换丢失的像素。

wrap

超出范围的像素被包裹,因此它们指向另一侧的像素。

mirror

超出范围的像素将替换为镜像像素。

默认值为 ‘smear’。

11.71.1 示例

  • 为 hd720 大小的视频的 rgb 输入添加波纹效果
    ffmpeg -i INPUT -f lavfi -i nullsrc=s=hd720,lutrgb=128:128:128 -f lavfi -i nullsrc=s=hd720,geq='r=128+30*sin(2*PI*X/400+T):g=128+30*sin(2*PI*X/400+T):b=128+30*sin(2*PI*X/400+T)' -lavfi '[0][1][2]displace' OUTPUT
    
  • 为 hd720 大小的视频的 rgb 输入添加波浪效果
    ffmpeg -i INPUT -f lavfi -i nullsrc=hd720,geq='r=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):g=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):b=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T))' -lavfi '[1]split[x][y],[0][x][y]displace' OUTPUT
    

11.72 dnn_classify

基于边界框使用深度神经网络进行分类。

该滤波器接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项目前仅接受 openvino,后续将添加 tensorflow 后端。

model

设置模型文件路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

输入

设置 DNN 网络的输入名称。

output

设置 DNN 网络的输出名称。

置信度

设置置信度阈值(默认值:0.5)。

标签

设置标签文件路径,指定标签 ID 和名称之间的映射关系。每个标签名称写在一行中,尾随空格和空行将被跳过。第一行是标签 ID 0 的名称,第二行是标签 ID 1 的名称,以此类推。如果未提供标签文件,则标签 ID 将被视为名称。

后端配置

设置要传递到后端的配置。

对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置。请使用 tools/python/tf_sess_config.py 来获取适用于您系统的配置。

11.73 dnn_detect

使用深度神经网络进行目标检测。

该滤波器接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项目前仅接受 openvino,后续将添加 tensorflow 后端。

model

设置模型文件路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

输入

设置 DNN 网络的输入名称。

output

设置 DNN 网络的输出名称。

置信度

设置置信度阈值(默认值:0.5)。

标签

设置标签文件路径,指定标签 ID 和名称之间的映射关系。每个标签名称写在一行中,尾随空格和空行将被跳过。第一行是标签 ID 0 的名称(通常是“背景”),第二行是标签 ID 1 的名称,以此类推。如果未提供标签文件,则标签 ID 将被视为名称。

后端配置

设置要传递到后端的配置。要使用异步执行,请设置 async(默认:已设置)。如果后端不支持异步,则回滚到同步执行。

11.74 dnn_processing

使用深度神经网络进行图像处理。它与另一个过滤器一起工作,该过滤器将帧的像素格式转换为 DNN 网络所需的格式。

该滤波器接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow C 库(参见 https://tensorflowcn.cn/install/lang_c),并使用 --enable-libtensorflow 配置 FFmpeg

openvino

OpenVINO 后端。要启用此后端,您需要构建并安装用于 C 库的 OpenVINO(请参阅 https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用 --enable-libopenvino 配置 FFmpeg(如果头文件和库未安装到系统路径中,则可能需要 –extra-cflags=-I... –extra-ldflags=-L...)。

torch

Libtorch 后端。要启用此后端,您需要构建并安装用于 C++ 库的 Libtorch。请下载 cxx11 ABI 版本(请参阅 https://pytorch.ac.cn/get-started/locally)并使用 --enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/ 配置 FFmpeg。

model

设置模型文件路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其格式的文件。

输入

设置 DNN 网络的输入名称。

output

设置 DNN 网络的输出名称。

后端配置

设置要传递到后端的配置。要使用异步执行,请设置 async(默认:已设置)。如果后端不支持异步,则回滚到同步执行。

对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置。请使用 tools/python/tf_sess_config.py 来获取适用于您系统的 TensorFlow 后端的配置。

11.74.1 示例

  • 使用 can.pb 在 rgb24 帧中去除雨(请参阅 derain 过滤器)。
    ./ffmpeg -i rain.jpg -vf format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y derain.jpg
    
  • 使用 srcnn.pb 处理 yuv420p 格式(支持平面 YUV 格式)帧的 Y 通道(请参阅 sr 过滤器)。
    ./ffmpeg -i 480p.jpg -vf format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y -y srcnn.jpg
    
  • 使用 espcn.pb 处理 yuv420p 格式(支持平面 YUV 格式)帧的 Y 通道,这将改变帧大小(请参阅 sr 过滤器)。请使用 tools/python/tf_sess_config.py 来获取适用于您系统的 TensorFlow 后端的配置。
    ./ffmpeg -i 480p.jpg -vf format=yuv420p,dnn_processing=dnn_backend=tensorflow:model=espcn.pb:input=x:output=y:backend_configs=sess_config=0x10022805320e09cdccccccccccec3f20012a01303801 -y tmp.espcn.jpg
    

11.75 drawbox

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框左上角坐标的表达式。默认值为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认值为 0。

颜色,c

指定要写入的框的颜色。有关此选项的通用语法,请查阅 ffmpeg-utils 手册中的“Color”部分。如果使用特殊值 invert,则框边缘颜色与具有反转亮度的视频相同。

粗细,t

设置框边缘粗细的表达式。值为 fill 将创建一个填充的框。默认值为 3

请参阅下文了解接受的常量列表。

替换

如果输入具有 alpha 通道,则适用。值为 1 时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它会将框复合到输入上,保持视频的 alpha 通道不变。

xywh 以及 t 的参数是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

in_h, ih
in_w, iw

输入宽度和高度。

sar

输入采样宽高比。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制的框的宽度和高度。

box_source

如果您想使用边数据检测边界框中的框数据,则可以将框源设置为 side_data_detection_bboxes。

如果设置了 box_source,则将忽略 xywidthheight,并仍然使用边数据检测边界框中的框数据。因此,如果不确定框源,请不要使用此参数。

t

绘制的框的粗细。

这些常量允许 xywht 表达式相互引用,因此您可以例如指定 y=x/darh=w/dar

11.75.1 示例

  • 在输入图像边缘周围绘制一个黑色框
    drawbox
    
  • 绘制一个颜色为红色且不透明度为 50% 的框
    drawbox=10:20:200:60:[email protected]
    

    前面的示例可以指定为

    drawbox=x=10:y=20:w=200:h=60:[email protected]
    
  • 用粉红色填充框
    drawbox=x=10:y=10:w=100:h=100:[email protected]:t=fill
    
  • 绘制一个 2 像素的红色 2.40:1 蒙版
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

11.75.2 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.76 drawgraph

使用输入视频元数据绘制图表。

它接受以下参数

m1

设置第一个帧元数据键,从中获取元数据值以绘制图表。

fg1

设置第一个前景颜色表达式。

m2

设置第二个帧元数据键,从中获取元数据值以绘制图表。

fg2

设置第二个前景颜色表达式。

m3

设置第三个帧元数据键,从中获取元数据值以绘制图表。

fg3

设置第三个前景颜色表达式。

m4

设置第四个帧元数据键,从中获取元数据值以绘制图表。

fg4

设置第四个前景颜色表达式。

最小值

设置元数据值的最小值。

最大值

设置元数据值的最大值。

bg

设置图表背景颜色。默认为白色。

mode

设置图表模式。

模式的可用值为

bar
dot
line

默认值为 line

slide

设置滑动模式。

滑动的可用值为

frame

当到达右边界时绘制新帧。

replace

用新列替换旧列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单张图片。

默认值为 frame

size

设置图表视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中“视频大小”部分。默认值为 900x256

rate, r

设置输出帧率。默认值为 25

前景色表达式可以使用以下变量

MIN

元数据值的最小值。

MAX

元数据值的最大值。

VAL

当前元数据键值。

颜色定义为 0xAABBGGRR。

使用来自 signalstats 过滤器的元数据的示例

signalstats,drawgraph=lavfi.signalstats.YAVG:min=0:max=255

使用来自 ebur128 过滤器的元数据的示例

ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-120:max=5

11.77 drawgrid

在输入图像上绘制网格。

它接受以下参数

x
y

指定网格交点(用于配置偏移)的某些点的坐标的表达式。两者默认为 0。

宽度,w
高度,h

指定网格单元格的宽度和高度的表达式,如果为 0,则分别解释为输入宽度和高度减去 thickness,因此图像会被框住。默认为 0。

颜色,c

指定网格的颜色。有关此选项的通用语法,请查看 (ffmpeg-utils)手册中的“颜色”部分。如果使用特殊值 invert,则网格颜色与具有反转亮度的视频相同。

粗细,t

设置网格线粗细的表达式。默认值为 1

请参阅下文了解接受的常量列表。

替换

如果输入具有 alpha 通道,则适用。当值为 1 时,绘制的网格的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将网格合成到输入上,保持视频的 alpha 通道不变。

xywh 以及 t 的参数是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

in_h, ih
in_w, iw

输入网格单元格的宽度和高度。

sar

输入采样宽高比。

x
y

网格交点(用于配置偏移)的某个点的 x 和 y 坐标。

w
h

绘制的单元格的宽度和高度。

t

绘制的单元格的粗细。

这些常量允许 xywht 表达式相互引用,因此您可以例如指定 y=x/darh=w/dar

11.77.1 示例

  • 绘制一个 100x100 像素的网格,粗细为 2 像素,颜色为红色,不透明度为 50%
    drawgrid=width=100:height=100:thickness=2:[email protected]
    
  • 绘制一个白色 3x3 网格,不透明度为 50%
    drawgrid=w=iw/3:h=ih/3:t=2:[email protected]
    

11.77.2 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.78 drawtext

使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。

要启用此过滤器的编译,您需要使用 --enable-libfreetype--enable-libharfbuzz 配置 FFmpeg。要启用默认字体回退和 font 选项,您需要使用 --enable-libfontconfig 配置 FFmpeg。要启用 text_shaping 选项,您需要使用 --enable-libfribidi 配置 FFmpeg。

11.78.1 语法

它接受以下参数

box

用于使用背景颜色在文本周围绘制一个框。该值必须为 1(启用)或 0(禁用)。box 的默认值为 0。

boxborderw

设置使用 boxcolor 在框周围绘制的边框的宽度。必须使用以下格式之一指定该值

  • boxborderw=10 将所有边框的宽度设置为 10
  • boxborderw=10|20 将顶部和底部边框的宽度设置为 10,并将左侧和右侧边框的宽度设置为 20
  • boxborderw=10|20|30 将顶部边框的宽度设置为 10,将底部边框的宽度设置为 30,并将左侧和右侧边框的宽度设置为 20
  • boxborderw=10|20|30|40 将边框宽度设置为 10(顶部)、20(右侧)、30(底部)、40(左侧)

boxborderw 的默认值为 "0"。

boxcolor

用于在文本周围绘制框的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

boxcolor 的默认值为“白色”。

line_spacing

设置行间距,以像素为单位。line_spacing 的默认值为 0。

text_align

设置文本相对于框边界的垂直和水平对齐方式。该值是标志的组合,一个用于垂直对齐(T=顶部、M=中间、B=底部),另一个用于水平对齐(L=左侧、C=居中、R=右侧)。请注意,制表符仅支持左侧水平对齐。

y_align

指定 y 值引用的内容。可能的值为

  • text 第一行文本的最高字形的顶部位于 y
  • baseline 第一行文本的基线位于 y
  • font 第一行文本的基线位于 y 加上字体度量中定义的上升高度(以像素为单位)处

为了向后兼容,y_align 的默认值为“text”。

borderw

设置使用 bordercolor 在文本周围绘制的边框的宽度。borderw 的默认值为 0。

bordercolor

设置用于在文本周围绘制边框的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

bordercolor 的默认值为“黑色”。

expansion

选择如何扩展 text。可以是 nonestrftime(已弃用)或 normal(默认)。有关详细信息,请参阅下面的 文本扩展 部分。

basetime

设置计数的起始时间。值以微秒为单位。仅在已弃用的 strftime 扩展模式下应用。要在普通扩展模式下模拟,请使用 pts 函数,将起始时间(以秒为单位)作为第二个参数提供。

fix_bounds

如果为 true,则检查并修复文本坐标以避免剪切。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

fontcolor 的默认值为“黑色”。

fontcolor_expr

以与 text 相同的方式扩展的字符串,以获取动态 fontcolor 值。默认情况下,此选项的值为空,并且不进行处理。设置此选项后,它将覆盖 fontcolor 选项。

font

用于绘制文本的字体系列。默认值为 Sans。

fontfile

用于绘制文本的字体文件。必须包含路径。如果禁用了 fontconfig 支持,则此参数是强制性的。

alpha

绘制文本时应用 alpha 混合。该值可以是 0.0 到 1.0 之间的数字。表达式接受相同的变量 x, y。默认值为 1。请参阅 fontcolor_expr

fontsize

用于绘制文本的字体大小。fontsize 的默认值为 16。

text_shaping

如果设置为 1,则尝试在绘制文本之前对其进行整形(例如,反转从右到左的文本的顺序并连接阿拉伯字符)。否则,只需按原样绘制文本。默认值为 1(如果支持)。

ft_load_flags

用于加载字体的标志。

这些标志映射了 libfreetype 支持的相应标志,并且是以下值的组合

default
no_scale
no_hinting
render
no_bitmap
vertical_layout
force_autohint
crop_bitmap
pedantic
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint

默认值为“default”。

有关详细信息,请查阅 FT_LOAD_* libfreetype 标志的文档。

shadowcolor

用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

shadowcolor 的默认值为“黑色”。

boxw

设置要在文本周围绘制的框的宽度。boxw 的默认值是自动计算以匹配文本宽度

boxh

设置要在文本周围绘制的框的高度。boxh 的默认值是自动计算以匹配文本高度

shadowx
shadowy

文本阴影位置相对于文本位置的 x 和 y 偏移量。它们可以是正值或负值。两者的默认值均为“0”。

start_number

n/frame_num 变量的起始帧号。默认值为“0”。

tabsize

用于渲染制表符的空格数量大小。默认值为 4。

timecode

设置初始时间码表示,格式为 “hh:mm:ss[:;.]ff”。它可以与或不与文本参数一起使用。必须指定 timecode_rate 选项。

timecode_rate, rate, r

设置时间码帧率(仅限时间码)。该值将四舍五入到最接近的整数。最小值是“1”。帧率 30 和 60 支持丢帧时间码。

tc24hmax

如果设置为 1,时间码选项的输出将在 24 小时后回绕。默认为 0(禁用)。

text

要绘制的文本字符串。文本必须是 UTF-8 编码字符序列。如果未用参数 textfile 指定文件,则此参数是必需的。

textfile

包含要绘制文本的文本文件。文本必须是 UTF-8 编码字符序列。

如果未用参数 text 指定文本字符串,则此参数是必需的。

如果同时指定了 texttextfile,则会抛出错误。

text_source

如果要使用边数据检测边界框中的文本数据,则应将文本源设置为 side_data_detection_bboxes。

如果设置了文本源,将忽略 texttextfile,并且仍然使用边数据检测边界框中的文本数据。因此,如果您不确定文本源,请不要使用此参数。

reload

textfile 将在指定的帧间隔重新加载。请务必原子性地更新 textfile,否则可能会部分读取或甚至失败。范围是 0 到 INT_MAX。默认为 0。

x
y

指定在视频帧内绘制文本偏移量的表达式。它们相对于输出图像的顶部/左侧边界。

xy 的默认值是“0”。

请参阅下文,了解可接受的常量和函数列表。

xy 的参数是包含以下常量和函数的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

line_h, lh

每行文本的高度

main_h, h, H

输入高度

main_w, w, W

输入宽度

max_glyph_a, ascent

对于所有渲染的字形,从基线到用于放置字形轮廓点的最高/上部网格坐标的最大距离。由于网格的 Y 轴向上方向,这是一个正值。

max_glyph_d, descent

对于所有渲染的字形,从基线到用于放置字形轮廓点的最低网格坐标的最大距离。由于网格的方向,Y 轴向上,这是一个负值。

max_glyph_h

最大字形高度,即渲染文本中包含的所有字形的最大高度,它等效于 ascent - descent

max_glyph_w

最大字形宽度,即渲染文本中包含的所有字形的最大宽度

font_a

字体指标中定义的上升尺寸

font_d

字体指标中定义的下降尺寸

top_a

第一行文本的字形的最大上升值

bottom_d

最后一行文本的字形的最大下降值

n

输入帧数,从 0 开始

rand(min, max)

返回 minmax 之间的随机数

sar

输入采样宽高比。

t

时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN

text_h, th

渲染文本的高度

text_w, tw

渲染文本的宽度

x
y

绘制文本的 x 和 y 偏移坐标。

这些参数允许 xy 表达式相互引用,因此例如可以指定 y=x/dar

pict_type

当前帧图像类型的一个字符描述。

pkt_pos

当前数据包在输入文件或流中的位置(以字节为单位,从输入的开头开始)。-1 值表示此信息不可用。

时长

当前数据包的持续时间,以秒为单位。

pkt_size

当前数据包的大小(以字节为单位)。

11.78.2 文本扩展

如果 expansion 设置为 strftime,则过滤器会识别提供的文本中 strftime C 函数接受的序列,并相应地展开它们。请查看 strftime 的文档。此功能已被弃用,取而代之的是使用 gmtimelocaltime 扩展函数的 normal 扩展。

如果 expansion 设置为 none,则按原样打印文本。

如果 expansion 设置为 normal(默认值),则使用以下扩展机制。

反斜杠字符“\”后跟任何字符,始终扩展为第二个字符。

%{...} 形式的序列将被扩展。大括号之间的文本是函数名称,后跟用“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应转义它们。

请注意,它们可能也必须作为过滤器参数字符串中的 text 选项的值,以及作为过滤器图形描述中的过滤器参数进行转义,并且可能还必须为 shell 进行转义,这构成了多达四个级别的转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用

expr, e

表达式求值结果。

它必须采用一个参数,指定要评估的表达式,该表达式接受与 xy 值相同的常量和函数。请注意,并非所有常量都应使用,例如在评估表达式时文本大小是未知的,因此常量 text_wtext_h 将具有未定义的值。

expr_int_format, eif

评估表达式的值并以格式化整数输出。

第一个参数是要评估的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为“x”、“X”、“d”和“u”。它们与 printf 函数中的处理方式完全相同。第三个参数是可选的,用于设置输出所占用的位置数。它可用于从左侧添加零填充。

gmtime

过滤器正在运行的时间,以 UTC 表示。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串被扩展以支持变量 %[1-6]N,该变量打印秒的小数部分,并可选地指定位数。

localtime

过滤器正在运行的时间,以本地时区表示。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串被扩展以支持变量 %[1-6]N,该变量打印秒的小数部分,并可选地指定位数。

metadata

帧元数据。接受一个或两个参数。

第一个参数是强制性的,并指定元数据键。

第二个参数是可选的,并指定一个默认值,当找不到元数据键或元数据键为空时使用。

可以通过检查运行 ffprobe -show_frames 打印的每个帧部分中包含的以 TAG 开头的条目来识别可用的元数据。

在导向 drawtext 过滤器的过滤器中生成的字符串元数据也可用。

n, frame_num

帧号,从 0 开始。

pict_type

当前图像类型的一个字符描述。

pts

当前帧的时间戳。它最多可以接受三个参数。

第一个参数是时间戳的格式;默认为 flt,表示以微秒精度表示的十进制秒数;hms 表示格式化的 [-]HH:MM:SS.mmm 时间戳,精度为毫秒。gmtime 表示帧的时间戳,格式为 UTC 时间;localtime 表示帧的时间戳,格式为本地时区时间。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 hms,可以提供第三个参数 24HH,以 24 小时格式 (00-23) 显示格式化时间戳的小时部分。

如果格式设置为 localtimegmtime,可以提供第三个参数:一个 strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

11.78.3 命令

此过滤器支持通过命令更改参数

reinit

更改现有过滤器参数。

参数的语法与过滤器调用相同,例如

fontsize=56:fontcolor=green:text='Hello World'

使用 sendcmd 的完整过滤器调用如下所示

sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'

如果整个参数无法解析或应用为有效值,则过滤器将继续使用其现有参数。

以下选项也支持作为 命令

  • x
  • y
  • alpha
  • fontsize
  • fontcolor
  • boxcolor
  • bordercolor
  • shadowcolor
  • box
  • boxw
  • boxh
  • boxborderw
  • line_spacing
  • text_align
  • shadowx
  • shadowy
  • borderw

11.78.4 示例

  • 使用 FreeSerif 字体绘制“Test Text”,使用可选参数的默认值。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 使用大小为 24 的 FreeSerif 字体,在 x=100 和 y=50 的位置(从屏幕的左上角开始计数)绘制“Test Text”,文本为黄色,周围有一个红色框。文本和框的透明度均为 20%。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
              x=100: y=50: fontsize=24: [email protected]: box=1: [email protected]"
    

    请注意,如果参数列表中未使用空格,则不需要双引号。

  • 在视频帧的中心显示文本
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
    
  • 在随机位置显示文本,每 30 秒切换到新位置
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
    
  • 在视频帧的最后一行中显示从右向左滑动的文本行。假设文件 LONG_LINE 包含没有换行符的单行文本。
    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
    
  • 显示文件 CREDITS 的内容,使其从帧底部向上滚动。
    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
    
  • 在输入视频的中心绘制一个绿色的字母“g”。字形基线放置在屏幕高度的一半处。
    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
    
  • 每 3 秒显示文本 1 秒
    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
    
  • 使用 fontconfig 设置字体。请注意,冒号需要转义。
    drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
    
  • 绘制“Test Text”,字体大小取决于视频的高度。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(请参阅 strftime C 函数的文档)
    drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
    
  • 显示文本淡入淡出(出现/消失)
    #!/bin/sh
    DS=1.0 # display start
    DE=10.0 # display end
    FID=1.5 # fade in duration
    FOD=5 # fade out duration
    ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
    
  • 水平对齐多个单独的文本。请注意,max_glyph_afontsize 值包含在 y 偏移中。
    drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
    drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
    
  • 如果存在特殊 lavf.image2dec.source_basename 元数据,则将其绘制到每一帧上。否则,绘制字符串“NA”。请注意,image2 demuxer 必须具有选项 -export_path_metadata 1,特殊元数据字段才能用于过滤器。
    drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%{metadata\:lavf.image2dec.source_basename\:NA}':x=10:y=10"
    

有关 libfreetype 的更多信息,请查看:http://www.freetype.org/

有关 fontconfig 的更多信息,请查看:http://freedesktop.org/software/fontconfig/fontconfig-user.html

有关 libfribidi 的更多信息,请查看:http://fribidi.org/

有关 libharfbuzz 的更多信息,请查看:https://github.com/harfbuzz/harfbuzz

11.79 edgedetect

检测并绘制边缘。该过滤器使用 Canny 边缘检测算法。

该滤波器接受以下选项

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过 8 连接性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

mode

定义绘图模式。

wires

在黑色背景上绘制白色/灰色线条。

colormix

混合颜色以创建绘画/卡通效果。

canny

在所有选定的平面上应用 Canny 边缘检测器。

默认值为 wires

平面

选择要过滤的平面。默认情况下,将过滤所有可用的平面。

11.79.1 示例

  • 使用自定义滞后阈值进行标准边缘检测
    edgedetect=low=0.1:high=0.4
    
  • 没有阈值的绘画效果
    edgedetect=mode=colormix:high=0
    

11.80 elbg

使用 ELBG (增强 LBG) 算法应用海报化效果。

对于每个输入图像,过滤器将计算从输入到输出的最佳映射,给定码本长度,即不同的输出颜色数量。

此过滤器接受以下选项。

codebook_length, l

设置码本长度。该值必须为正整数,表示不同的输出颜色数量。默认值为 256。

nb_steps, n

设置计算最佳映射时应用的最大迭代次数。该值越高,结果越好,计算时间也越长。默认值为 1。

seed, s

设置一个随机种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,则过滤器将尽力使用良好的随机种子。

pal8

设置 pal8 输出像素格式。此选项不适用于大于 256 的码本长度。默认禁用。

use_alpha

在量化计算中包含 alpha 值。允许创建具有多个 alpha 平滑混合的调色板输出图像(例如 PNG8)。

11.81 entropy

测量视频帧颜色通道直方图中的灰度熵。

它接受以下参数

mode

可以是 normaldiff。默认值为 normal

diff 模式测量直方图增量值的熵,即相邻直方图值之间的绝对差值。

11.82 epx

应用专为像素艺术设计的 EPX 放大过滤器。

它接受以下选项

n

设置缩放尺寸:2 表示 2xEPX3 表示 3xEPX。默认值为 3

11.83 eq

设置亮度、对比度、饱和度和近似伽玛调整。

该滤波器接受以下选项

contrast

设置对比度表达式。该值必须是 -1000.01000.0 范围内的浮点值。默认值为“1”。

brightness

设置亮度表达式。该值必须是 -1.01.0 范围内的浮点值。默认值为“0”。

saturation

设置饱和度表达式。该值必须是 0.03.0 范围内的浮点值。默认值为“1”。

gamma

设置伽玛表达式。该值必须是 0.110.0 范围内的浮点值。默认值为“1”。

gamma_r

设置红色伽玛表达式。该值必须是 0.110.0 范围内的浮点值。默认值为“1”。

gamma_g

设置绿色伽玛表达式。该值必须是 0.110.0 范围内的浮点值。默认值为“1”。

gamma_b

设置蓝色伽玛表达式。该值必须是 0.110.0 范围内的浮点值。默认值为“1”。

gamma_weight

设置伽玛权重表达式。它可以用于减少高伽玛值对明亮图像区域的影响,例如防止它们被过度放大而变成纯白色。该值必须是 0.01.0 范围内的浮点数。值为 0.0 时,伽玛校正完全关闭,而值为 1.0 时,伽玛校正保持其全部强度。默认值为“1”。

eval

设置亮度、对比度、饱和度和伽玛表达式的计算时间。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算表达式一次

frame

为每个传入帧计算表达式

默认值为 ‘init’。

表达式接受以下参数

n

从 0 开始的输入帧的帧计数

pos

输入文件中相应数据包的字节位置,如果未指定则为 NAN;已弃用,请勿使用

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN

11.83.1 命令

该过滤器支持以下命令

contrast

设置对比度表达式。

brightness

设置亮度表达式。

saturation

设置饱和度表达式。

gamma

设置伽玛表达式。

gamma_r

设置 gamma_r 表达式。

gamma_g

设置 gamma_g 表达式。

gamma_b

设置 gamma_b 表达式。

gamma_weight

设置 gamma_weight 表达式。

该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

11.84 erosion

对视频应用腐蚀效果。

此过滤器将像素替换为局部(3x3)最小值。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大更改,默认为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

局部 3x3 坐标标志如下所示

1 2 3 4 5 6 7 8

11.84.1 命令

此过滤器支持以上所有选项作为 命令

11.85 estdif

对输入视频进行去隔行处理(“estdif”代表“边缘斜率跟踪去隔行滤波器”)。

仅使用边缘斜率跟踪算法来插值缺失行的空间过滤器。它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

为每个帧输出一个帧。

为每个场输出一个帧。

默认值为 field

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

tff

假设顶场优先。

bff

假设底场优先。

auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

all(全部)

对所有帧进行去隔行处理。

隔行扫描

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

rslope

指定边缘斜率跟踪的搜索半径。默认值为 1。允许的范围是 1 到 15。

redge

指定最佳边缘匹配的搜索半径。默认值为 2。允许的范围是 0 到 15。

ecost

指定边缘匹配的边缘成本。默认值为 2。允许的范围是 0 到 50。

mcost

指定边缘匹配的中间成本。默认值为 1。允许的范围是 0 到 50。

dcost

指定边缘匹配的距离成本。默认值为 1。允许的范围是 0 到 50。

插值

指定使用的插值。默认是 4 点插值。它接受以下值之一

2p

两点插值。

4p

四点插值。

6p

六点插值。

11.85.1 命令

此滤镜支持与选项相同的 commands

11.86 exposure

调整视频流的曝光。

该滤波器接受以下选项

曝光

以 EV 为单位设置曝光校正。允许的范围是 -3.0 到 3.0 EV。默认值为 0 EV。

设置黑电平校正。允许的范围是 -1.0 到 1.0。默认值为 0。

11.86.1 命令

此滤镜支持与选项相同的 commands

11.87 extractplanes

将输入视频流的颜色通道分量提取到单独的灰度视频流中。

此滤波器接受以下选项

平面

设置要提取的平面。

平面的可用值是

y
u
v
a
r
g
b

选择输入中不可用的平面将导致错误。这意味着您不能同时选择 rgb 平面和 yuv 平面。

11.87.1 示例

  • 将输入视频帧的亮度、u 和 v 颜色通道分量提取到 3 个灰度输出中
    ffmpeg -i video.avi -filter_complex 'extractplanes=y+u+v[y][u][v]' -map '[y]' y.avi -map '[u]' u.avi -map '[v]' v.avi
    

11.88 fade

对输入视频应用淡入/淡出效果。

它接受以下参数

类型,t

效果类型可以是“in”表示淡入,或“out”表示淡出效果。默认值为 in

start_frame, s

指定开始应用淡化效果的帧数。默认值为 0。

nb_frames, n

淡化效果持续的帧数。在淡入效果结束时,输出视频的强度将与输入视频相同。在淡出过渡结束时,输出视频将被选定的 color 填充。默认值为 25。

alpha

如果设置为 1,则仅淡化 alpha 通道(如果输入中存在)。默认值为 0。

起始时间,st

指定开始应用淡化效果的帧的时间戳(以秒为单位)。如果同时指定了 start_frame 和 start_time,则淡化将从最后一个开始。默认值为 0。

duration, d

淡化效果必须持续的秒数。在淡入效果结束时,输出视频的强度将与输入视频相同;在淡出过渡结束时,输出视频将被选定的 color 填充。如果同时指定了 duration 和 nb_frames,则使用 duration。默认值为 0(默认情况下使用 nb_frames)。

颜色,c

指定淡化的颜色。默认值为“黑色”。

11.88.1 示例

  • 淡入视频的前 30 帧
    fade=in:0:30
    

    上面的命令等效于

    fade=t=in:s=0:n=30
    
  • 淡出 200 帧视频的最后 45 帧
    fade=out:155:45
    fade=type=out:start_frame=155:nb_frames=45
    
  • 淡入 1000 帧视频的前 25 帧,并淡出最后 25 帧
    fade=in:0:25, fade=out:975:25
    
  • 使前 5 帧为黄色,然后从第 5-24 帧淡入
    fade=in:5:20:color=yellow
    
  • 淡入视频前 25 帧的 alpha
    fade=in:0:25:alpha=1
    
  • 使前 5.5 秒为黑色,然后淡入 0.5 秒
    fade=t=in:st=5.5:d=0.5
    

11.89 feedback

应用反馈视频过滤器。

此过滤器将裁剪的输入帧传递到第二个输出。从那里可以使用其他视频过滤器进行过滤。在过滤器从第二个输入接收帧后,该帧将与来自第一个输入的原始帧组合在一起,并传递到第一个输出。

典型用法是仅过滤帧的一部分。

该滤波器接受以下选项

x
y

设置左上角裁剪位置。

w
h

设置裁剪大小。

11.89.1 示例

  • 仅使用 gblur 过滤器模糊视频帧左上角大小为 100x100 的矩形部分。
    [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
    
  • 使用 drawbox 过滤器在视频帧的左上角绘制一个大小为 100x100 的黑色方框。
    [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]drawbox=x=0:y=0:w=100:h=100:t=100[blurin]
    
  • 使用像素化过滤器像素化视频帧大小为 100x100 的矩形部分。
    [in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
    

11.90 fftdnoiz

使用 3D FFT(频域滤波)对帧进行降噪。

该滤波器接受以下选项

sigma

设置噪声 sigma 常数。这会设置降噪强度。默认值为 1。允许的范围是 0 到 30。使用非常高的 sigma 和低重叠可能会产生块状伪影。

设置降噪量。默认情况下,会减少所有检测到的噪声。默认值为 1。允许的范围是 0 到 1。

block

设置块的大小(以像素为单位),默认值为 32,可以是 8 到 256。

overlap

设置块重叠。默认值为 0.5。允许的范围是 0.2 到 0.8。

方法

设置降噪方法。默认值为 wiener,也可以是 hard

prev

设置用于降噪的先前帧数。默认情况下设置为 0。

next

设置用于降噪的下一个帧数。默认情况下设置为 0。

平面

设置将要过滤的平面,默认情况下会过滤所有可用的平面,alpha 除外。

11.91 fftfilt

将任意表达式应用于频域中的样本

dc_Y

调整图像亮度平面的直流值(增益)。该过滤器接受 01000 范围内的整数值。默认值设置为 0

dc_U

调整图像第一个色度平面的直流值(增益)。该过滤器接受 01000 范围内的整数值。默认值设置为 0

dc_V

调整图像第二个色度平面的直流值(增益)。该滤镜接受 01000 范围内的整数值。默认值设置为 0

weight_Y

设置亮度平面的频域权重表达式。

weight_U

设置第一个色度平面的频域权重表达式。

weight_V

设置第二个色度平面的频域权重表达式。

eval

设置表达式的计算时机。

它接受以下值

init

仅在滤镜初始化期间计算一次表达式。

frame

为每个传入的帧计算表达式。

默认值为 ‘init’。

该滤镜接受以下变量

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

N

输入帧的数量,从 0 开始。

WS
HS

用于水平和垂直处理的 FFT 数组的大小。

11.91.1 示例

  • 高通
    fftfilt=dc_Y=128:weight_Y='squish(1-(Y+X)/100)'
    
  • 低通
    fftfilt=dc_Y=0:weight_Y='squish((Y+X)/100-1)'
    
  • 锐化
    fftfilt=dc_Y=0:weight_Y='1+squish(1-(Y+X)/100)'
    
  • 模糊
    fftfilt=dc_Y=0:weight_Y='exp(-4 * ((Y+X)/(W+H)))'
    

11.92 field

使用步幅算法从隔行扫描图像中提取单个场,以避免浪费 CPU 时间。输出帧标记为非隔行扫描。

该滤波器接受以下选项

type(类型)

指定是提取顶场(如果值为 0top)还是底场(如果值为 1bottom)。

11.93 fieldhint

通过从提示文件中提供的周围帧复制顶场和底场来创建新帧。

hint

设置包含提示的文件:绝对/相对帧号。

剪辑中的每个帧必须有一行。每行必须包含两个用逗号分隔的数字,可选地后跟 -+。对于 absolute 模式,文件中每行提供的数字不能超出 [N-1,N+1] 的范围,其中 N 是当前帧号;对于 relative 模式,不能超出 [-1, 1] 的范围。第一个数字表示从哪个帧选取顶场,第二个数字表示从哪个帧选取底场。

如果可选地后跟 +,则输出帧将标记为隔行扫描,否则如果后跟 -,则输出帧将标记为逐行扫描,否则将标记为与输入帧相同。如果可选地后跟 t,则输出帧将仅使用顶场,或者在 b 的情况下,将仅使用底场。如果行以 #; 开头,则该行将被跳过。

mode

可以是 absoluterelativepattern。默认为 absolutepattern 模式与 relative 模式相同,只是如果需要处理的帧多于 hint 文件,则在文件的最后一个条目处会向后跳转到开头。

relative 模式下 hint 文件的前几行示例

0,0 - # first frame
1,0 - # second frame, use third's frame top field and second's frame bottom field
1,0 - # third frame, use fourth's frame top field and third's frame bottom field
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -

11.94 fieldmatch

用于反向电影电视的场匹配滤镜。它旨在从电影电视流中重建逐行帧。该滤镜不会删除重复的帧,因此要实现完整的反向电影电视,fieldmatch 需要后跟一个抽取滤镜,例如滤镜图中的 decimate

场匹配和抽取的拆分尤其受到在两者之间插入去隔行滤镜后备的可能性驱动。如果源具有混合的电影电视和真实的隔行扫描内容,fieldmatch 将无法匹配隔行扫描部分的场。但是,这些剩余的梳状帧将被标记为隔行扫描,因此可以通过稍后的滤镜(例如 yadif)在抽取之前进行去隔行扫描。

除了各种配置选项之外,fieldmatch 还可以使用可选的第二个流,通过 ppsrc 选项激活。如果启用,则帧重建将基于此第二个流中的场和帧。这允许预处理第一个输入,以帮助滤镜的各种算法,同时保持输出无损(假设场匹配正确)。通常,场感知降噪器或亮度/对比度调整可能会有所帮助。

请注意,此滤镜使用与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)相同的算法。后者是 TFM 的一个轻量级克隆,fieldmatch 基于此克隆。虽然语义和用法非常接近,但某些行为和选项名称可能会有所不同。

decimate 滤镜目前仅适用于恒定帧率输入。如果您的输入具有混合的电影电视(30fps)和较低帧率(例如 24fps)的逐行内容,请使用以下滤镜链生成必要的 cfr 流:dejudder,fps=30000/1001,fieldmatch,decimate

该滤波器接受以下选项

order

指定输入流的假定场序。可用值有

auto

自动检测奇偶性(使用 FFmpeg 的内部奇偶性值)。

bff

假定底场优先。

tff

假定顶场优先。

请注意,有时建议不要信任流宣布的奇偶性。

默认值为 auto

mode

设置要使用的匹配模式或策略。 pc 模式是最安全的,因为它不会冒险因重复帧而产生抖动,但如果存在不良编辑或混合场,它最终会输出梳状帧,而实际上可能存在良好的匹配。另一方面,pcn_ub 模式在产生抖动方面风险最大,但如果存在匹配的帧,几乎总能找到一个好的帧。其他值在风险抖动、创建重复帧与在存在不良编辑、孤立场、混合场等的部分中寻找良好匹配方面,都介于 pcpcn_ub 之间。

有关 p/c/n/u/b 的更多详细信息,请参见 p/c/n/u/b 含义 部分。

可用值为

pc

双向匹配 (p/c)

pc_n

双向匹配,如果仍然梳状,则尝试第三个匹配 (p/c + n)

pc_u

双向匹配,如果仍然梳状,则尝试第三个匹配(相同顺序)(p/c + u)

pc_n_ub

双向匹配,如果仍然梳状,则尝试第三个匹配,如果仍然梳状,则尝试第四/第五个匹配 (p/c + n + u/b)

pcn

三向匹配 (p/c/n)

pcn_ub

三向匹配,如果原始的 3 个匹配都被检测为梳状,则尝试第四/第五个匹配 (p/c/n + u/b)

末尾的括号表示如果 order=tff(并且 fieldautotop),则将用于该模式的匹配项。

就速度而言,pc 模式是最快的,而 pcn_ub 是最慢的。

默认值为 pc_n

ppsrc

将主输入流标记为预处理的输入,并启用辅助输入流作为从中选取场的干净源。有关更多详细信息,请参阅滤镜介绍。它类似于 VFM/TFM 中的 clip2 功能。

默认值为 0(禁用)。

设置要从中匹配的场。建议将其设置为与 order 相同的值,除非您在使用该设置时遇到匹配失败。在某些情况下,更改用于匹配的场可能会对匹配性能产生很大影响。可用值有

auto

自动(与 order 相同的值)。

bottom

从底场匹配。

top

从顶场匹配。

默认值为 auto

mchroma

设置在匹配比较期间是否包含色度。在大多数情况下,建议保持启用此功能。仅当您的剪辑存在严重的色度问题(例如严重的彩虹效应或其他伪影)时,才应将其设置为 0。将此设置为 0 也可以加快速度,但会牺牲一些准确性。

默认值为 1

y0
y1

这些定义了一个排除带,该排除带将 y0y1 之间的行排除在场匹配决策之外。可以使用排除带忽略字幕、徽标或其他可能干扰匹配的内容。y0 设置起始扫描线,y1 设置结束线;y0y1 之间的所有行(包括 y0y1)将被忽略。将 y0y1 设置为相同的值将禁用此功能。y0y1 的默认值为 0

scthresh

设置场景切换检测阈值,以亮度平面上最大变化的百分比表示。较好的值在 [8.0, 14.0] 范围内。场景切换检测仅在 combmatch=sc 时相关。scthresh 的范围为 [0.0, 100.0]

默认值为 12.0

combmatch

combatch 不为 none 时,fieldmatch 在决定使用哪个匹配作为最终匹配时,会考虑匹配的梳状分数。可用的值有

none

不基于梳状分数进行最终匹配。

sc

仅在检测到场景切换时使用梳状分数。

full

始终使用梳状分数。

默认值为 sc

combdbg

强制 fieldmatch 计算某些匹配的梳状指标并打印它们。此设置在 TFM/VFM 术语中称为 micout。可用的值有

none

不强制计算。

pcn

强制计算 p/c/n。

pcnub

强制计算 p/c/n/u/b。

默认值为 none

cthresh

这是用于梳状帧检测的区域梳状阈值。它本质上控制梳状必须“强”或“可见”到何种程度才能被检测到。较大的值意味着梳状必须更可见,而较小的值意味着梳状可以较不明显或较弱,但仍然可以被检测到。有效设置范围为 -1(每个像素都将被检测为梳状)到 255(没有像素会被检测为梳状)。这基本上是一个像素差异值。一个好的范围是 [8, 12]

默认值为 9

色度

设置在梳状帧决策中是否考虑色度。仅当您的源存在色度问题(彩虹效应等)导致启用色度时梳状帧检测出现问题时才禁用此选项。实际上,使用 chroma=0 通常更可靠,除非源中存在仅色度的梳状。

默认值为 0

blockx
blocky

分别设置梳状帧检测期间使用的窗口的 x 轴和 y 轴大小。这与在 combpel 像素被检测为梳状时,声明帧为梳状帧所需的区域大小有关。有关更多信息,请参见 combpel 参数说明。可能的值是任何 2 的幂,从 4 开始,最高可达 512。

默认值为 16

combpel

帧上任何 blocky x blockx 大小的块内被检测为梳状的像素数量,该帧才会被检测为梳状帧。虽然 cthresh 控制梳状必须“可见”到何种程度,但此设置控制在帧的任何局部区域(由 blockxblocky 设置定义的窗口)中必须存在“多少”梳状。最小值是 0,最大值是 blocky x blockx(此时,永远不会检测到任何帧为梳状)。此设置在 TFM/VFM 术语中称为 MI

默认值为 80

11.94.1 p/c/n/u/b 的含义

11.94.1.1 p/c/n

我们假设以下电视电影流

Top fields:     1 2 2 3 4
Bottom fields:  1 2 3 4 4

数字对应于字段相关的渐进帧。这里,前两个帧是渐进的,第 3 个和第 4 个是梳状的,依此类推。

fieldmatch 配置为从底部运行匹配时(field=bottom),这就是此输入流的转换方式

Input stream:
                T     1 2 2 3 4
                B     1 2 3 4 4   <-- matching reference

Matches:              c c n n c

Output stream:
                T     1 2 3 4 4
                B     1 2 3 4 4

由于字段匹配,我们可以看到一些帧被重复了。要执行完整的反向电视电影,您需要在该操作后依赖抽取滤波器。例如,请参见 decimate 过滤器。

现在,从顶部字段匹配(field=top)的相同操作如下所示

Input stream:
                T     1 2 2 3 4   <-- matching reference
                B     1 2 3 4 4

Matches:              c c p p c

Output stream:
                T     1 2 2 3 4
                B     1 2 2 3 4

在这些示例中,我们可以看到 pcn 的含义;基本上,它们指的是相反奇偶性的帧和字段

  • p 匹配前一帧中相反奇偶性的字段
  • c 匹配当前帧中相反奇偶性的字段
  • n 匹配下一帧中相反奇偶性的字段

11.94.1.2 u/b

ub 匹配有点特殊,因为它们是从相反奇偶性标志匹配的。在以下示例中,我们假设我们当前正在匹配第 2 帧(顶:2,底:2)。根据匹配,在每个匹配字段的上方和下方放置一个“x”。

使用底部匹配(field=bottom

Match:           c         p           n          b          u

                 x       x               x        x          x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x         x           x        x              x

Output frames:
                 2          1          2          2          2
                 2          2          2          1          3

使用顶部匹配(field=top

Match:           c         p           n          b          u

                 x         x           x        x              x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x       x               x        x          x

Output frames:
                 2          2          2          1          2
                 2          1          3          2          2

11.94.2 示例

顶部场优先电视电影流的简单 IVTC

fieldmatch=order=tff:combmatch=none, decimate

高级 IVTC,对于仍然是梳状的帧回退到 yadif

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

11.95 fieldorder

转换输入视频的字段顺序。

它接受以下参数

order

输出字段顺序。有效值为 tff(顶部场优先)或 bff(底部场优先)。

默认值为 'tff'。

通过将图像内容向上或向下移动一行,并用适当的图像内容填充剩余的行来完成转换。此方法与大多数广播场序转换器一致。

如果输入视频未标记为隔行扫描,或者已经标记为所需的输出字段顺序,则此过滤器不会更改传入的视频。

在转换到或从 PAL DV 材料(底部场优先)时非常有用。

例如

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

11.96 fillborders

填充输入视频的边框,而不更改视频流尺寸。有时,视频的四个边缘可能会有垃圾,您可能不想裁剪视频输入以保持大小为某个数字的倍数。

此过滤器接受以下选项

left

从左边框填充的像素数。

right

从右边框填充的像素数。

top

从上边框填充的像素数。

bottom

从下边框填充的像素数。

mode

设置填充模式。

它接受以下值

smear

使用最外侧的像素填充像素

mirror

使用镜像(半采样对称)填充像素

fixed

使用常量值填充像素

reflect

使用反射(全采样对称)填充像素

wrap

使用包裹填充像素

fade

将像素淡化为常量值

margins

使用靠近边框的加权平均像素填充顶部和底部的像素

默认值为 smear

color

设置固定或淡化模式下像素的颜色。默认为 black

11.96.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.97 find_rect

在输入视频中查找矩形对象。

要搜索的对象必须指定为使用 object 选项指定的 gray8 图像。

对于每个可能的匹配,都会计算一个分数。如果分数达到指定的阈值,则认为找到了该对象。

如果输入视频包含该对象的多个实例,则过滤器将只找到其中一个。

找到对象后,将在匹配帧中设置以下元数据条目

lavfi.rect.w

对象的宽度

lavfi.rect.h

对象的高度

lavfi.rect.x

对象的 x 位置

lavfi.rect.y

对象的 y 位置

lavfi.rect.score

找到对象的匹配得分

它接受以下选项

对象

对象图像的文件路径,必须为 gray8 格式。

threshold

检测阈值,表示为 0-1 范围内的十进制数。

阈值 0.01 表示仅精确匹配,阈值 0.99 表示几乎所有都匹配。

默认值为 0.5。

mipmap

mipmap 的数量,默认为 3。

xmin, ymin, xmax, ymax

指定要搜索的矩形区域。

丢弃

丢弃未检测到对象的帧。默认禁用。

11.97.1 示例

  • 使用 ffmpeg 通过给定的视频的提供的图像来覆盖矩形对象
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    
  • 使用 ffprobe 查找每一帧中对象的位置,并将其写入日志文件
    ffprobe -f lavfi movie=test.mp4,find_rect=object=object.pgm:threshold=0.3 \
      -show_entries frame=pkt_pts_time:frame_tags=lavfi.rect.x,lavfi.rect.y \
      -of csv -o find_rect.csv
    

11.98 floodfill

使用另一个值填充具有相同像素组件值的区域。

它接受以下选项

x

设置像素的 x 坐标。

y

设置像素的 y 坐标。

s0

设置源 #0 组件的值。

s1

设置源 #1 组件的值。

s2

设置源 #2 组件的值。

s3

设置源 #3 组件的值。

d0

设置目标 #0 组件的值。

d1

设置目标 #1 组件的值。

d2

设置目标 #2 组件的值。

d3

设置目标 #3 组件的值。

11.99 format

将输入视频转换为指定的像素格式之一。Libavfilter 将尝试选择一个适合作为下一个滤镜输入的格式。

它接受以下参数

pix_fmts

一个以 ’|’ 分隔的像素格式名称列表,例如 “pix_fmts=yuv420p|monow|rgb24”。

color_spaces

一个以 ’|’ 分隔的色彩空间名称列表,例如 “color_spaces=bt709|bt470bg|bt2020nc”。

color_ranges

一个以 ’|’ 分隔的色彩范围名称列表,例如 “color_spaces=tv|pc”。

11.99.1 示例

  • 将输入视频转换为 yuv420p 格式
    format=pix_fmts=yuv420p
    

    将输入视频转换为列表中的任何格式

    format=pix_fmts=yuv420p|yuv444p|yuv410p
    

11.100 fps

通过复制或丢弃帧,将视频转换为指定恒定帧率。

它接受以下参数

fps

所需的输出帧率。它接受包含以下常量的表达式

source_fps

输入的帧率

ntsc

NTSC 帧率,为 30000/1001

pal

PAL 帧率,为 25.0

film

电影帧率,为 24.0

ntsc_film

NTSC 电影帧率,为 24000/1001

默认值为 25

start_time

假设第一个 PTS 应该是给定值(以秒为单位)。这允许在流的开始处进行填充/修剪。默认情况下,不对第一帧的预期 PTS 做任何假设,因此不会进行填充或修剪。例如,如果视频流在音频流之后开始,或者要修剪任何具有负 PTS 的帧,则可以将其设置为 0,以使用第一帧的重复项填充开头。

round

时间戳 (PTS) 的舍入方法。

可能的值为

zero

向 0 舍入

inf

远离 0 舍入

down

向 - 无穷大舍入

up

向 + 无穷大舍入

near

舍入到最近

默认值为 near

eof_action

读取最后一帧时执行的操作。

可能的值为

round

使用与其他帧相同的的时间戳舍入方法。

pass

如果尚未达到输入持续时间,则传递最后一帧。

默认值为 round

或者,这些选项可以指定为平面字符串:fps[:start_time[:round]]。

另请参阅 setpts 滤镜。

11.100.1 示例

  • 一个典型的用法,用于将 fps 设置为 25
    fps=fps=25
    
  • 将 fps 设置为 24,使用缩写和舍入方法舍入到最近
    fps=fps=film:round=near
    

11.101 framepack

将两个不同的视频流打包成一个立体视频,在支持的编解码器上设置适当的元数据。两个视图应具有相同的大小和帧率,并且当较短的视频结束时,处理将停止。请注意,您可以使用 scalefps 滤镜方便地调整视图属性。

它接受以下参数

format

所需的打包格式。支持的值为

sbs

视图彼此相邻(默认)。

tab

视图上下堆叠。

lines

视图按行打包。

columns

视图按列打包。

frameseq

视图在时间上交错。

一些示例

# Convert left and right views into a frame-sequential video
ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT

# Convert views into a side-by-side video with the same output resolution as the input
ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT

11.102 framerate

通过从源帧插值新的视频输出帧来更改帧率。

此滤镜并非旨在与隔行媒体正确配合工作。如果您希望更改隔行媒体的帧率,则需要在该滤镜之前进行去隔行处理,并在该滤镜之后进行重新隔行处理。

以下是可接受选项的描述。

fps

指定每秒输出帧数。此选项也可以单独指定为一个值。默认值为 50

interp_start

指定输出帧将创建为两个帧的线性插值的范围的开始。范围是 [0-255],默认值为 15

interp_end

指定输出帧将创建为两个帧的线性插值的范围的结束。范围是 [0-255],默认值为 240

scene

指定场景变化的检测级别,值在 0 到 100 之间,表示一个新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更可能是新场景。默认值为 8.2

flags

指定影响滤镜过程的标志。

flags 的可用值为

scene_change_detect, scd

使用选项 scene 的值启用场景变化检测。默认启用此标志。

11.103 framestep

每 N 帧选择一帧。

此滤镜接受以下选项

step

step 帧选择一帧。允许的值是大于 0 的正整数。默认值为 1

11.104 freezedetect

检测冻结的视频。

当检测到输入视频在指定持续时间内内容没有明显变化时,此滤镜会记录一条消息并设置帧元数据。视频冻结检测会计算视频帧所有组件的平均绝对差,并将其与噪声底限进行比较。

打印的时间和持续时间以秒为单位表示。lavfi.freezedetect.freeze_start 元数据键设置在时间戳等于或超过检测持续时间的第一个帧上,并且包含冻结的第一个帧的时间戳。lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end 元数据键设置在冻结后的第一帧上。

该滤波器接受以下选项

噪声,n

设置噪声容限。可以以 dB(如果指定的值附加了“dB”)或以 0 到 1 之间的差异比率指定。默认值为 -60dB 或 0.001。

duration, d

设置冻结持续时间直到通知(默认为 2 秒)。

11.105 freezeframes

冻结视频帧。

此滤镜使用第二个输入的帧冻结视频帧。

该滤波器接受以下选项

first

设置开始冻结的第一个帧的编号。

last

设置结束冻结的最后一个帧的编号。

替换

设置将用作替换帧的第二个输入中的帧的编号。

11.106 frei0r

将 frei0r 效果应用于输入视频。

要启用此滤镜的编译,您需要安装 frei0r 标头并使用 --enable-frei0r 配置 FFmpeg。

它接受以下参数

filter_name

要加载的 frei0r 效果的名称。如果定义了环境变量 FREI0R_PATH,则会在 FREI0R_PATH 中以冒号分隔的列表中指定的每个目录中搜索 frei0r 效果。否则,将按以下顺序搜索标准 frei0r 路径:HOME/.frei0r-1/lib//usr/local/lib/frei0r-1//usr/lib/frei0r-1/

filter_params

要传递给 frei0r 效果的参数的以 ’|’ 分隔的列表。

frei0r 效果的参数可以是布尔值(其值为“y”或“n”),双精度浮点数,颜色(指定为 R/G/B,其中 RGB 是介于 0.0 和 1.0 之间的浮点数,包括 0.0 和 1.0),或者是在 (ffmpeg-utils) 手册的“Color”部分中指定的颜色描述,位置(指定为 X/Y,其中 XY 是浮点数)和/或字符串。

参数的数量和类型取决于加载的效果。如果未指定效果参数,则会设置默认值。

11.106.1 示例

  • 应用 distort0r 效果,设置前两个双精度浮点参数
    frei0r=filter_name=distort0r:filter_params=0.5|0.01
    
  • 应用 colordistance 效果,将颜色作为第一个参数
    frei0r=colordistance:0.2/0.3/0.4
    frei0r=colordistance:violet
    frei0r=colordistance:0x112233
    
  • 应用 perspective 效果,指定左上角和右上角的图像位置
    frei0r=perspective:0.2/0.2|0.8/0.2
    

有关更多信息,请参阅 http://frei0r.dyne.org

11.106.2 命令

此滤镜支持将 filter_params 选项作为 命令

11.107 fspp

应用快速简单的后处理。它是 spp 的更快版本。

它将 (I)DCT 分割为水平/垂直通道。与简单的后处理滤镜不同,其中一个通道是按块执行一次,而不是按像素执行一次。这可以实现更高的速度。

该滤波器接受以下选项

quality

设置质量。此选项定义平均的级别数。它接受范围为 4-5 的整数。默认值为 4

qp

强制使用常量量化参数。它接受范围为 0-63 的整数。如果未设置,则滤镜将使用视频流中的 QP(如果可用)。

strength

设置滤镜强度。它接受范围为 -15 到 32 的整数。较低的值意味着更多细节但也意味着更多伪影,而较高的值使图像更平滑但也更模糊。默认值为 0 − PSNR 最优。

use_bframe_qp

如果设置为 1,则启用使用来自 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有更大的 QP。默认为 0(未启用)。

11.108 fsync

使用来自文件的外部映射同步视频帧。

对于映射文件中给出的每个输入 PTS,它会丢弃或创建尽可能多的帧,以重新创建映射文件中给出的输出帧序列。

此滤镜对于重新创建由 fps 滤镜执行的帧率转换的输出帧非常有用,该转换使用 ffmpeg 选项 -stats_mux_pre 记录到映射文件中,并对相应的帧进行进一步处理,例如质量比较。

映射文件的每一行必须包含每个输入帧的三个项目,输入 PTS(十进制)、输出 PTS(十进制)和输出 TIMEBASE(十进制/十进制),以空格分隔。此文件格式对应于 -stats_mux_pre_fmt="{ptsi} {pts} {tb}" 的输出。

滤镜假设映射文件按输入 PTS 递增排序。

该滤波器接受以下选项

文件,f

要使用的映射文件的文件名。

示例

# Convert a video to 25 fps and record a MAP_FILE file with the default format of this filter
ffmpeg -i INPUT -vf fps=fps=25 -stats_mux_pre MAP_FILE -stats_mux_pre_fmt "{ptsi} {pts} {tb}" OUTPUT

# Sort MAP_FILE by increasing input PTS
sort -n MAP_FILE

# Use INPUT, OUTPUT and the MAP_FILE from above to compare the corresponding frames in INPUT and OUTPUT via SSIM
ffmpeg -i INPUT -i OUTPUT -filter_complex '[0:v]fsync=file=MAP_FILE[ref];[1:v][ref]ssim' -f null -

11.109 gblur

应用高斯模糊滤镜。

该滤波器接受以下选项

sigma

设置水平 sigma,即高斯模糊的标准差。默认值为 0.5

steps

设置高斯近似的步数。默认值为 1

平面

设置要过滤的平面。默认情况下,会过滤所有平面。

sigmaV

设置垂直 sigma,如果为负数,则与 sigma 相同。默认值为 -1

11.109.1 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.110 geq

对每个像素应用通用方程。

该滤波器接受以下选项

lum_expr, lum

设置亮度表达式。

cb_expr, cb

设置色度蓝色表达式。

cr_expr, cr

设置色度红色表达式。

alpha_expr, a

设置 alpha 表达式。

red_expr, r

设置红色表达式。

green_expr, g

设置绿色表达式。

blue_expr, b

设置蓝色表达式。

颜色空间根据指定的选项选择。如果指定了 lum_exprcb_exprcr_expr 选项之一,则滤镜将自动选择 YCbCr 颜色空间。如果指定了 red_exprgreen_exprblue_expr 选项之一,则它将选择 RGB 颜色空间。

如果未定义其中一个色度表达式,则会回退到另一个表达式。如果未指定 alpha 表达式,则它将求值为不透明值。如果没有指定色度表达式,则它们将求值为亮度表达式。

表达式可以使用以下变量和函数

N

已过滤帧的序列号,从 0 开始。

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

SW
SH

宽度和高度缩放取决于当前过滤的平面。它是相应的亮度平面像素数与当前平面像素数之间的比率。例如,对于 YUV4:2:0,亮度平面的值为 1,1,色度平面的值为 0.5,0.5

T

当前帧的时间,以秒为单位表示。

p(x, y)

返回当前平面中位置 (x,y) 处的像素值。

lum(x, y)

返回亮度平面中位置 (x,y) 处的像素值。

cb(x, y)

返回蓝色差色度平面中位置 (x,y) 处的像素值。如果没有这样的平面,则返回 0。

cr(x, y)

返回红色差色度平面中位置 (x,y) 处的像素值。如果没有这样的平面,则返回 0。

r(x, y)
g(x, y)
b(x, y)

返回红色/绿色/蓝色分量中位置 (x,y) 处的像素值。如果没有这样的分量,则返回 0。

alpha(x, y)

返回 alpha 平面中位置 (x,y) 处的像素值。如果没有这样的平面,则返回 0。

psum(x,y), lumsum(x, y), cbsum(x,y), crsum(x,y), rsum(x,y), gsum(x,y), bsum(x,y), alphasum(x,y)

矩形中从 (0,0) 到 (x,y) 的样本值之和,这允许获得矩形内样本的总和。请参阅没有 sum 后缀的函数。

interpolation

设置插值方法之一

nearest, n
bilinear, b

默认值为双线性。

对于函数,如果 xy 在区域之外,则该值将自动裁剪到较近的边缘。

请注意,此滤镜可以使用多个线程,在这种情况下,每个切片都有自己的表达式状态。如果您希望仅使用单个表达式状态,因为您的表达式依赖于之前的状态,则应将滤镜线程数限制为 1。

11.110.1 示例

  • 水平翻转图像
    geq=p(W-X\,Y)
    
  • 生成一个二维正弦波,角度为 PI/3,波长为 100 像素
    geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
    
  • 生成一个奇特的神秘移动光
    nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
    
  • 生成一个快速浮雕效果
    format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
    
  • 根据像素位置修改 RGB 分量
    geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
    
  • 创建一个与输入大小相同的径向渐变(另请参阅 vignette 滤镜)
    geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
    

11.111 gradfun

修复因截断为 8 位颜色深度而有时在近乎平坦的区域中引入的条带伪影。插值应该出现在条带位置的梯度,并进行抖动处理。

它仅用于回放。请勿在有损压缩之前使用它,因为压缩往往会丢失抖动并带回条带。

它接受以下参数

strength

滤波器将更改任何一个像素的最大量。这也是检测近乎平坦区域的阈值。可接受的值范围为 .51 到 64;默认值为 1.2。超出范围的值将被裁剪到有效范围内。

radius

拟合梯度的邻域。更大的半径可以产生更平滑的梯度,但也阻止滤波器修改详细区域附近的像素。可接受的值为 8-32;默认值为 16。超出范围的值将被裁剪到有效范围内。

或者,可以将选项指定为平面字符串:强度[:半径]

11.111.1 示例

  • 使用 3.5 的强度和 8 的半径应用滤波器
    gradfun=3.5:8
    
  • 指定半径,省略强度(将回退到默认值)
    gradfun=radius=8
    

11.112 graphmonitor

显示各种滤镜图统计信息。

使用此滤镜可以调试完整的滤镜图。特别是链接中填充了排队帧的问题。

该滤波器接受以下选项

size, s

设置视频输出大小。默认为 hd720

不透明度, o

设置视频不透明度。默认为 0.9。允许的范围为 01

模式, m

设置输出模式标志。

标志的可用值为

full

无任何过滤。默认。

compact

仅显示带有排队帧的滤镜。

nozero

仅显示具有非零统计信息的滤镜。

noeof

仅显示具有非 eof 状态的滤镜。

nodisabled

仅显示时间轴中启用的滤镜。

标志, f

设置标志,启用视频中显示的统计信息。

标志的可用值为

none

所有标志都关闭。

all

所有标志都打开。

queue

显示每个链接中排队的帧数。

frame_count_in

显示从滤镜获取的帧数。

frame_count_out

显示从滤镜输出的帧数。

frame_count_delta

显示上述两个值之间的帧数差值。

pts

显示当前过滤帧的 pts。

pts_delta

显示当前帧和上一帧之间的 pts 差值。

time

显示当前过滤帧的时间。

time_delta

显示当前帧和上一帧之间的时间差值。

timebase

显示滤镜链接的时间基准。

format

显示滤镜链接使用的格式。

size

显示视频大小或滤镜链接使用的音频通道数(如果使用音频)。

rate

显示视频帧率或音频采样率(如果滤镜链接使用音频)。

eof

显示链接输出状态。

sample_count_in

显示从滤镜获取的样本数。

sample_count_out

显示从滤镜输出的样本数。

sample_count_delta

显示上述两个值之间的样本数差值。

disabled

显示时间轴滤镜状态。

rate, r

设置输出流的视频速率上限,默认值为 25。这保证输出视频帧率不会高于此值。

11.113 grayworld

一种基于灰度世界假设应用颜色校正的颜色恒常性滤镜

请参阅:https://www.researchgate.net/publication/275213614_A_New_Color_Correction_Method_for_Underwater_Imaging

该算法使用线性光,因此应事先对输入数据进行线性化处理(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,grayworld,zscale=transfer=bt709,format=yuv420p OUTPUT

11.114 greyedge

一种颜色恒常性变体滤镜,通过灰色边缘算法估计场景光照并相应地校正场景颜色。

请参阅:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

该滤波器接受以下选项

difford

应用于场景的微分阶数。必须在 [0,2] 范围内选择,默认值为 1。

minknorm

用于计算 Minkowski 距离的 Minkowski 参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 以获取最大值,而不是计算 Minkowski 距离。

sigma

应用于场景的高斯模糊的标准偏差。必须在 [0,1024.0] 范围内选择,默认值为 1。如果 difford 大于 0,则 floor( sigma * break_off_sigma(3) ) 不能等于 0。

11.114.1 示例

  • 灰色边缘
    greyedge=difford=1:minknorm=5:sigma=2
    
  • 最大边缘
    greyedge=difford=1:minknorm=0:sigma=2
    

11.115 guided

应用引导滤波进行边缘保留平滑、去雾等操作。

该滤波器接受以下选项

radius

以像素为单位设置框半径。允许的范围为 1 到 20。默认值为 3。

eps

设置正则化参数(带平方)。允许的范围为 0 到 1。默认值为 0.01。

mode

设置滤镜模式。可以是 basicfast。默认值为 basic

子采样

fast 模式设置子采样率。范围为 2 到 64。默认值为 4。在 basic 模式下不会发生子采样。

引导

设置引导模式。可以是 offon。默认值为 off。如果为 off,则需要单个输入。如果为 on,则需要两个具有相同分辨率和像素格式的输入。第二个输入用作引导。

平面

设置要过滤的平面。默认值为仅第一平面。

11.115.1 命令

此过滤器支持以上所有选项作为 命令

11.115.2 示例

  • 使用引导滤波进行边缘保留平滑
    ffmpeg -i in.png -vf guided out.png
    
  • 使用引导滤波进行去雾、结构传递过滤、细节增强。有关引导图像的生成,请参阅论文“引导图像滤波”。请参阅:http://kaiminghe.com/publications/pami12guidedfilter.pdf
    ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
    

11.116 haldclut

将 Hald CLUT 应用于视频流。

第一个输入是要处理的视频流,第二个输入是 Hald CLUT。Hald CLUT 输入可以是简单的图片或完整的视频流。

该滤波器接受以下选项

clut

设置将从第二个输入流处理哪个 CLUT 视频帧,可以是 firstall。默认值为 all

shortest

当最短输入终止时强制终止。默认值为 0

repeatlast

在流结束后继续应用最后一个 CLUT。值为 0 将在到达 CLUT 的最后一帧后禁用滤镜。默认值为 1

haldclut 也具有与 lut3d 相同的插值选项(两个滤镜共享相同的内部结构)。

此滤镜还支持 framesync 选项。

有关 Hald CLUT 的更多信息,请访问 Eskil Steenberg 的网站(Hald CLUT 作者):http://www.quelsolaar.com/technology/clut.html

11.116.1 命令

此滤镜支持 interp 选项,如 commands 中所述。

11.116.2 工作流程示例

11.116.2.1 Hald CLUT 视频流

生成受各种效果影响的恒等 Hald CLUT 流

ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut

注意:请确保使用无损编解码器。

然后将其与 haldclut 一起使用,将其应用于某些随机流

ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv

Hald CLUT 将应用于前 10 秒(clut.nut 的持续时间),然后该 CLUT 流的最新图片将应用于 mandelbrot 流的剩余帧。

11.116.2.2 带有预览的 Hald CLUT

一个 Hald CLUT 应该是一个 Level*Level*Level 像素乘 Level*Level*Level 像素的正方形图像。对于给定的 Hald CLUT,FFmpeg 将会选择从图像左上角开始的最大可能正方形。剩余的填充像素(底部或右侧)将被忽略。这部分区域可以用来添加 Hald CLUT 的预览。

通常,以下生成的 Hald CLUT 将被 haldclut 滤镜支持

ffmpeg -f lavfi -i haldclutsrc=8 -vf "
   pad=iw+320 [padded_clut];
   smptebars=s=320x256, split [a][b];
   [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
   [main][b] overlay=W-320" -frames:v 1 clut.png

它包含原始图像和 CLUT 效果的预览:SMPTE 彩色条显示在右上角,下方是经过颜色变化处理的相同彩色条。

然后,可以使用以下命令可视化此 Hald CLUT 的效果

ffplay input.mkv -vf "movie=clut.png, [in] haldclut"

11.117 hflip

水平翻转输入视频。

例如,要使用 ffmpeg 水平翻转输入视频

ffmpeg -i in.avi -vf "hflip" out.avi

11.118 histeq

此滤镜在逐帧的基础上应用全局颜色直方图均衡化。

它可以用来校正像素强度范围被压缩的视频。该滤镜重新分配像素强度,以均衡它们在强度范围内的分布。它可以被视为“自动调整对比度滤镜”。此滤镜仅对于校正退化或拍摄不良的源视频有用。

该滤波器接受以下选项

strength

确定要应用的均衡化量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认为 0.200。

强度

设置可以生成的最大强度,并相应地缩放输出值。应根据需要设置强度,然后可以在需要时限制强度以避免冲淡效果。该值必须是 [0,1] 范围内的浮点数,默认为 0.210。

抗条带

设置抗条带级别。如果启用,滤镜将随机少量改变输出像素的亮度,以避免直方图出现条带。可能的值为 noneweakstrong。默认为 none

11.119 histogram

计算并绘制输入视频的颜色分布直方图。

计算出的直方图是图像中颜色分量分布的表示。

标准直方图显示图像中颜色分量的分布。显示每个颜色分量的颜色图。显示当前帧中 Y、U、V、A 或 R、G、B 分量的分布,具体取决于输入格式。每个图下方都会显示一个颜色分量刻度仪。

该滤波器接受以下选项

级别高度

设置级别高度。默认值为 200。允许的范围是 [50, 2048]。

刻度高度

设置颜色刻度的高度。默认值为 12。允许的范围是 [0, 40]。

显示模式

设置显示模式。它接受以下值

堆叠

每个颜色分量的图都彼此放置在下方。

游行

每个颜色分量的图并排排列。

overlay

呈现与 游行 中相同的信息,除了代表颜色分量的图直接相互叠加。

默认为 堆叠

级别模式

设置模式。可以是 linearlogarithmic。默认为 linear

components

设置要显示哪些颜色分量。默认为 7

前景不透明度

设置前景不透明度。默认为 0.7

背景不透明度

设置背景不透明度。默认为 0.5

颜色模式

设置颜色模式。它接受以下值

白底黑字
黑底白字
灰底白字
灰底黑字
黑底彩色
白底彩色
灰底彩色
彩色底黑字
彩色底白字
彩色底灰字

默认为 白底黑字

11.119.1 示例

  • 计算并绘制直方图
    ffplay -i input -vf histogram
    

11.120 hqdn3d

这是一个高精度/高质量的 3D 降噪滤镜。它的目的是减少图像噪声,产生平滑的图像并使静止图像真正静止。它应该增强可压缩性。

它接受以下可选参数

亮度空间

一个非负浮点数,指定空间亮度强度。它默认为 4.0。

色度空间

一个非负浮点数,指定空间色度强度。它默认为 3.0*亮度空间/4.0。

亮度时间

一个浮点数,指定亮度时间强度。它默认为 6.0*亮度空间/4.0。

色度时间

一个浮点数,指定色度时间强度。它默认为 亮度时间*色度空间/亮度空间

11.120.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.121 hwdownload

将硬件帧下载到系统内存。

输入必须是硬件帧,输出必须是非硬件格式。并非所有格式都将在输出上支持 - 可能需要在图中紧接其后插入额外的 格式 滤镜,以使输出采用受支持的格式。

11.122 hwmap

将硬件帧映射到系统内存或其他设备。

此滤镜具有几种不同的操作模式;使用哪种模式取决于输入和输出格式

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并将其传递给输出。如果以后需要原始硬件帧(例如,在部分覆盖其他内容后),则可以在下一个模式中再次使用 hwmap 滤镜来检索它。

  • 普通帧输入,硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射它 - 即,返回原始硬件帧。

    否则,必须提供设备。在该设备上为输出创建新的硬件表面,然后将它们映射回输入端的软件格式,并将这些帧提供给前面的滤镜。然后,它将像 hwupload 滤镜一样工作,但当输入已经是兼容格式时,可能会避免额外的复制。

  • 硬件帧输入和输出

    必须为输出提供设备,可以直接提供,也可以通过 derive_device 选项提供。输入和输出设备必须是不同类型且兼容的 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用同一张显卡)。

    如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。

    否则,将帧映射到输出设备 - 在与输入帧对应的输出上创建新的硬件帧。

接受以下附加参数

mode

设置帧映射模式。一些组合

读取

映射的帧应该是可读的。

write

映射的帧应该是可写的。

覆盖

映射将始终覆盖整个帧。

在某些情况下,这可以提高性能,因为不需要加载帧的原始内容。

直接

映射不得涉及任何复制。

在某些情况下,如果无法进行直接映射或直接映射会产生意外的属性,则会创建到帧副本的间接映射。设置此标志可确保映射是直接的,如果无法实现直接映射,则会失败。

如果未指定,则默认为 read+write

derive_device type

不使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。

反向

在硬件到硬件的映射中,反向映射 - 在接收器中创建帧并将它们映射回源。在某些情况下,可能需要单向映射,但所使用的设备仅支持相反的方向时,此操作是必要的。

此选项很危险 - 如果前一个过滤器对其输出有任何其他约束,则可能会以未定义的方式破坏它。请在完全理解其使用含义后使用它。

11.123 hwupload

将系统内存帧上传到硬件表面。

初始化过滤器时必须提供要上传到的设备。如果使用 ffmpeg,请使用 -filter_hw_device 选项或 derive_device 选项选择合适的设备。输入和输出设备必须是不同类型且兼容的 - 其确切含义取决于系统,但通常表示它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。

接受以下附加参数

derive_device type

不使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。

11.124 hwupload_cuda

将系统内存帧上传到 CUDA 设备。

它接受以下可选参数

设备

要使用的 CUDA 设备的编号

11.125 hqx

应用专为像素艺术设计的高质量放大滤镜。此滤镜最初由 Maxim Stepin 创建。

它接受以下选项

n

设置缩放维度:2 表示 hq2x3 表示 hq3x4 表示 hq4x。默认为 3

11.126 hstack

水平堆叠输入视频。

所有流必须具有相同的像素格式和相同的高度。

请注意,此过滤器比使用 overlaypad 过滤器创建相同输出的速度更快。

此滤波器接受以下选项

输入

设置输入流的数量。默认为 2。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

11.127 hsvhold

将某个 HSV 范围转换为灰度值。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,输出颜色可以更改为灰色或不更改为灰色。

该滤波器接受以下选项

hue

设置将在色差计算中使用的色相值。允许的范围是从 -360 到 360。默认值为 0。

饱和度

设置将在色差计算中使用的饱和度值。允许的范围是从 -1 到 1。默认值为 0。

设置将在色差计算中使用的值。允许的范围是从 -1 到 1。默认值为 0。

相似度

设置与关键颜色的相似度百分比。允许的范围是从 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。允许的范围是从 0 到 1。默认值为 0。

0.0 使像素完全变成灰色,或完全不变成灰色。

更高的值会导致更多的灰色像素,像素颜色与关键颜色越相似,灰色像素就越高。

11.128 hsvkey

将某个 HSV 范围转换为透明度。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,可以通过添加 alpha 通道将输出颜色更改为透明。

该滤波器接受以下选项

hue

设置将在色差计算中使用的色相值。允许的范围是从 -360 到 360。默认值为 0。

饱和度

设置将在色差计算中使用的饱和度值。允许的范围是从 -1 到 1。默认值为 0。

设置将在色差计算中使用的值。允许的范围是从 -1 到 1。默认值为 0。

相似度

设置与关键颜色的相似度百分比。允许的范围是从 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。允许的范围是从 0 到 1。默认值为 0。

0.0 使像素完全透明或完全不透明。

更高的值会产生半透明像素,像素颜色与关键颜色越相似,透明度越高。

11.129 hue

修改输入的色相和/或饱和度。

它接受以下参数

h

将色相角指定为度数。它接受表达式,默认为“0”。

s

在 [-10,10] 范围内指定饱和度。它接受表达式,默认为“1”。

H

将色相角指定为弧度数。它接受表达式,默认为“0”。

b

在 [-10,10] 范围内指定亮度。它接受表达式,默认为“0”。

hH 是互斥的,不能同时指定。

bhHs 选项值是包含以下常量的表达式

n

从 0 开始的输入帧的帧计数

pts

以时间基准单位表示的输入帧的表示时间戳

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN

tb

输入视频的时间基准

11.129.1 示例

  • 将色相设置为 90 度,饱和度设置为 1.0
    hue=h=90:s=1
    
  • 相同的命令,但以弧度表示色相
    hue=H=PI/2:s=1
    
  • 旋转色相并使饱和度在一个周期内在 0 和 2 之间波动 1 秒
    hue="H=2*PI*t: s=sin(2*PI*t)+1"
    
  • 应用从 0 开始的 3 秒饱和度淡入效果
    hue="s=min(t/3\,1)"
    

    通用淡入表达式可以写为

    hue="s=min(0\, max((t-START)/DURATION\, 1))"
    
  • 应用从 5 秒开始的 3 秒饱和度淡出效果
    hue="s=max(0\, min(1\, (8-t)/3))"
    

    通用淡出表达式可以写为

    hue="s=max(0\, min(1\, (START+DURATION-t)/DURATION))"
    

11.129.2 命令

此滤波器支持以下命令

b
s
h
H

修改输入视频的色相和/或饱和度和/或亮度。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.130 huesaturation

对输入视频流应用色相-饱和度-强度调整。

此过滤器在 RGB 色彩空间中运行。

此过滤器接受以下选项

hue

设置要应用的色相偏移(以度为单位)。默认为 0。允许的范围是从 -180 到 180。

saturation

设置饱和度偏移。默认为 0。允许的范围是从 -1 到 1。

强度

设置强度偏移。默认为 0。允许的范围是从 -1 到 1。

colors

设置将要调整哪些原色和补色。通过提供一个或多个值来设置此选项。这可以一次选择多种颜色。默认情况下,选择所有颜色。

r

调整红色。

y

调整黄色。

g

调整绿色。

c

调整青色。

b

调整蓝色。

m

调整洋红色。

a

调整所有颜色。

strength

设置过滤强度。允许的范围是从 0 到 100。默认值为 1。

rw, gw, bw

设置每个 RGB 分量的权重。允许的范围是从 0 到 1。默认情况下设置为 0.333、0.334、0.333。这些选项用于饱和度和亮度处理。

lightness

设置保留亮度,默认情况下禁用。调整色相可能会更改原始 RGB 三元组的亮度,启用此选项后,亮度将保持相同的值。

11.131 hysteresis

通过连接组件将第一个流扩展到第二个流。这使得构建更强大的边缘遮罩成为可能。

此过滤器接受以下选项

平面

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。

threshold

设置用于过滤的阈值。如果像素分量值高于此值,则会激活用于连接组件的过滤算法。默认值为 0。

hysteresis 过滤器还支持 framesync 选项。

11.132 iccdetect

从嵌入式 ICC 配置文件(如果存在)检测色彩空间,并相应地更新帧的标签。

此过滤器接受以下选项

强制

如果为 true,则帧的现有色彩空间标签将始终被从 ICC 配置文件中检测到的值覆盖。否则,它们仅在包含 unknown 时才会被分配。默认启用。

11.133 iccgen

生成 ICC 配置文件并将其附加到帧。

此过滤器接受以下选项

color_primaries
color_trc

配置将为其生成 ICC 配置文件的色彩空间。auto 的默认值从输入帧的元数据推断该值,默认为 BT.709/sRGB(如果合适)。

请参阅 setparams 过滤器以获取可能的值的列表,但请注意,unknown 不是此过滤器的有效值。

强制

如果为 true,即使会覆盖已存在的 ICC 配置文件,也将生成 ICC 配置文件。默认情况下禁用。

11.134 identity

获取两个输入视频之间的同一性分数。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假定两个输入具有相同数量的帧,这些帧会逐一进行比较。

通过日志系统打印每个组件、平均值、最小值和最大值的同一性分数。

过滤器将每帧计算的同一性分数存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -

11.135 idet

检测视频隔行扫描类型。

此过滤器尝试检测输入帧是隔行扫描、逐行扫描、顶场优先还是底场优先。它还会尝试检测相邻帧之间重复的场(电视电影的标志)。

单帧检测在分类每一帧时,仅考虑紧邻的帧。多帧检测则会纳入之前帧的分类历史。

此滤镜将记录以下元数据值

single.current_frame

使用单帧检测检测到的当前帧类型。选项包括:“tff”(顶场优先)、“bff”(底场优先)、“progressive”(逐行扫描)或“undetermined”(未确定)

single.tff

使用单帧检测检测为顶场优先的帧的累积数量。

multiple.tff

使用多帧检测检测为顶场优先的帧的累积数量。

single.bff

使用单帧检测检测为底场优先的帧的累积数量。

multiple.current_frame

使用多帧检测检测到的当前帧类型。选项包括:“tff”(顶场优先)、“bff”(底场优先)、“progressive”(逐行扫描)或“undetermined”(未确定)

multiple.bff

使用多帧检测检测为底场优先的帧的累积数量。

single.progressive

使用单帧检测检测为逐行扫描的帧的累积数量。

multiple.progressive

使用多帧检测检测为逐行扫描的帧的累积数量。

single.undetermined

使用单帧检测无法分类的帧的累积数量。

multiple.undetermined

使用多帧检测无法分类的帧的累积数量。

repeated.current_frame

当前帧中重复自上一帧的场。选项包括“neither”(都不重复)、“top”(顶场重复)或“bottom”(底场重复)。

repeated.neither

没有重复场的帧的累积数量。

repeated.top

顶场与上一帧的顶场重复的帧的累积数量。

repeated.bottom

底场与上一帧的底场重复的帧的累积数量。

该滤波器接受以下选项

intl_thres

设置隔行扫描阈值。

prog_thres

设置逐行扫描阈值。

rep_thres

重复场检测的阈值。

half_life

在多少帧之后,给定帧对统计数据的贡献减半(即,其对分类的贡献仅为0.5)。默认值0表示所有已看到的帧始终给予1.0的完整权重。

analyze_interlaced_flag

当此值不为0时,idet 将使用指定的帧数来确定隔行扫描标志是否准确,它不会计算未确定的帧。如果发现标志准确,它将被使用而无需任何进一步的计算,如果发现标志不准确,它将被清除而无需任何进一步的计算。这允许将 idet 滤镜作为一种低计算量的方法来清理隔行扫描标志。

11.135.1 示例

以详细模式检查视频中前 360 帧的场序

ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -

idet 滤镜会将分析元数据添加到每一帧,然后将其丢弃。最后,该滤镜还将打印带有统计数据的最终报告。

11.136 il

解交错或交错场。

此滤镜允许您处理隔行扫描图像的场,而无需对其进行去隔行。解交错将输入帧分成 2 个场(所谓的半图)。奇数行移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(过滤)它们,然后重新交错它们。

该滤波器接受以下选项

luma_mode, l
chroma_mode, c
alpha_mode, a

luma_modechroma_modealpha_mode 的可用值包括

none

不做任何事情。

deinterleave, d

解交错场,将一个场置于另一个之上。

interleave, i

交错场。反转解交错的效果。

默认值为 none

luma_swap, ls
chroma_swap, cs
alpha_swap, as

交换亮度/色度/alpha 场。交换偶数行和奇数行。默认值为 0

11.136.1 命令

此过滤器支持以上所有选项作为 命令

11.137 inflate

对视频应用膨胀效果。

此滤镜通过仅考虑高于像素的值,将像素替换为局部 (3x3) 平均值。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大更改,默认为 65535。如果为 0,则平面将保持不变。

11.137.1 命令

此过滤器支持以上所有选项作为 命令

11.138 interlace

来自逐行内容的简单交错滤镜。这会将奇数帧的上(或下)行与偶数帧的下(或上)行交错,使帧率减半并保留图像高度。

   Original        Original             New Frame
   Frame 'j'      Frame 'j+1'             (tff)
  ==========      ===========       ==================
    Line 0  -------------------->    Frame 'j' Line 0
    Line 1          Line 1  ---->   Frame 'j+1' Line 1
    Line 2 --------------------->    Frame 'j' Line 2
    Line 3          Line 3  ---->   Frame 'j+1' Line 3
     ...             ...                   ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on

它接受以下可选参数

scan

这决定了隔行扫描帧是从逐行扫描帧的偶数行(tff - 默认)还是奇数行 (bff) 中获取的。

lowpass

垂直低通滤波器,以避免出现推特交错并减少莫尔图案。

0, 关闭

禁用垂直低通滤波器

1, linear

启用线性滤波器(默认)

2, complex

启用复杂滤波器。这会稍微减少推特和莫尔纹,但更好地保留细节和主观清晰度印象。

11.139 kerndeint

通过应用 Donald Graft 的自适应内核去隔行算法对输入视频进行去隔行处理。处理视频的隔行扫描部分以生成逐行扫描帧。

以下是对接受参数的描述。

thresh

设置阈值,该阈值会影响滤镜在确定是否必须处理像素线时的容差。它必须是 [0,255] 范围内的整数,默认值为 10。值为 0 将导致对每个像素应用该过程。

map

如果设置为 1,则将超过阈值的像素涂成白色。默认值为 0。

order

设置场的顺序。如果设置为 1,则交换场,如果设置为 0,则保留场。默认值为 0。

sharp

如果设置为 1,则启用额外锐化。默认值为 0。

twoway

如果设置为 1,则启用双向锐化。默认值为 0。

11.139.1 示例

  • 应用默认值
    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
    
  • 启用额外锐化
    kerndeint=sharp=1
    
  • 将处理后的像素涂成白色
    kerndeint=map=1
    

11.140 kirsch

对输入视频流应用 kirsch 算子。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

11.140.1 命令

此过滤器支持以上所有选项作为 命令

11.141 lagfun

缓慢更新较暗的像素。

此滤镜使短暂的光闪烁显得更长。此滤镜接受以下选项

decay

设置衰减因子。默认值为 .95。允许范围为 0 到 1。

平面

设置要过滤的平面。默认值为全部。允许的范围是 0 到 15。

11.141.1 命令

此过滤器支持以上所有选项作为 命令

11.142 lenscorrection

校正径向镜头失真

此滤镜可用于校正因使用广角镜头而产生的径向失真,从而重新校正图像。要找到正确的参数,可以使用诸如 opencv 中的工具,或者只是试错。要使用 opencv,请使用 opencv 源代码中的 calibration 示例(在 samples/cpp 下),并从结果矩阵中提取 k1 和 k2 系数。

请注意,实际上在 KDE 项目的开源工具 Krita 和 Digikam 中也提供了相同的滤镜。

vignette 滤镜(也可用于补偿镜头误差)相比,此滤镜校正图像的失真,而 vignette 校正亮度分布,因此您可能需要在某些情况下一起使用这两个滤镜,但您必须注意顺序,即渐晕应该在镜头校正之前还是之后应用。

11.142.1 选项

该滤波器接受以下选项

cx

图像焦点(以及失真中心)的相对 x 坐标。此值的范围为 [0,1],并表示为图像宽度的分数。默认值为 0.5。

cy

图像焦点(以及失真中心)的相对 y 坐标。此值的范围为 [0,1],并表示为图像高度的分数。默认值为 0.5。

k1

二次校正项的系数。此值的范围为 [-1,1]。0 表示不校正。默认值为 0。

k2

双二次校正项的系数。此值的范围为 [-1,1]。0 表示不校正。默认值为 0。

i

设置插值类型。可以是 nearestbilinear。默认值为 nearest

fc

指定未映射像素的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。默认颜色为 black@0

生成校正的公式为

r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)

其中 r_0 是图像对角线的一半,而 r_srcr_tgt 分别是源图像和目标图像中距焦点距离。

11.142.2 命令

此过滤器支持以上所有选项作为 命令

11.143 lensfun

通过 lensfun 库应用镜头校正 (http://lensfun.sourceforge.net/)。

lensfun 滤镜需要相机品牌、相机型号和镜头型号才能应用镜头校正。该滤镜将加载 lensfun 数据库并查询它以查找数据库中相应的相机和镜头条目。只要可以通过给定的选项找到这些条目,该滤镜就可以对帧进行校正。请注意,不完整的字符串将导致滤镜选择与给定选项的最佳匹配项,并且滤镜将输出所选的相机和镜头型号(使用“info”级别记录)。您必须提供所需的品牌、相机型号和镜头型号。

要获取可用品牌和型号的列表,请省略 makemodel 选项中的一个或两个。该滤镜会将完整列表发送到日志,级别为 INFO。第一列是品牌,第二列是型号。要获取可用镜头的列表,请为品牌和型号设置任意值,并省略 lens_model 选项。该滤镜会将镜头完整列表发送到日志,级别为 INFO。ffmpeg 工具将在打印列表后退出。

该滤波器接受以下选项

make

相机品牌(例如,“Canon”)。此选项是必需的。

model

相机的型号(例如,“Canon EOS 100D”)。此选项是必需的。

lens_model

镜头的型号(例如,“Canon EF-S 18-55mm f/3.5-5.6 IS STM”)。此选项是必需的。

db_path

镜头数据库文件夹的完整路径。如果未设置,则滤镜将尝试从构建库时的安装路径加载数据库。默认情况下未设置。

mode

要应用的校正类型。以下值是有效选项

vignetting

启用修复镜头渐晕。

geometry

启用修复镜头几何形状。这是默认值。

subpixel

启用修复色差。

vig_geo

启用修复镜头渐晕和镜头几何形状。

vig_subpixel

启用修复镜头渐晕和色差。

distortion

启用修复镜头几何形状和色差。

all

启用所有可能的校正。

focal_length

图像/视频的焦距(变焦;预计对于视频恒定)。例如,18-55 毫米镜头的焦距范围为 [18-55],因此在使用该镜头时应选择该范围内的值。默认值为 18。

aperture

图像/视频的光圈(预计对于视频恒定)。请注意,光圈仅用于渐晕校正。默认值为 3.5。

focus_distance

图像/视频的对焦距离(预计对于视频恒定)。请注意,对焦距离仅用于渐晕,并且只会稍微影响渐晕校正过程。如果未知,请将其保留为默认值(即 1000)。

scale

变换后应用的比例因子。校正后,视频不再一定是矩形的。此参数控制可见结果图像的多少。值 0 表示将自动选择一个值,使得输出图像中几乎没有或没有未映射区域。1.0 表示不进行额外的缩放。较低的值可能会使更多校正后的图像可见,而较高的值可能会避免输出中出现未映射的区域。

target_geometry

输出图像/视频的目标几何形状。以下值是有效选项

rectilinear (default)
fisheye
panoramic
equirectangular
fisheye_orthographic
fisheye_stereographic
fisheye_equisolid
fisheye_thoby
反向

应用图像校正的反向操作(而不是校正失真,而是应用失真)。

interpolation

校正失真时使用的插值类型。以下值是有效选项

nearest
linear (default)
lanczos

11.143.1 示例

  • 应用镜头校正,品牌为“Canon”,相机型号为“Canon EOS 100D”,镜头型号为“Canon EF-S 18-55mm f/3.5-5.6 IS STM”,焦距为“18”,光圈为“8.0”。
    ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8 -c:v h264 -b:v 8000k output.mov
    
  • 应用与之前相同的校正,但仅适用于视频的前 5 秒。
    ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8:enable='lte(t\,5)' -c:v h264 -b:v 8000k output.mov
    

11.144 lcevc

基于 liblcevc_dec 的低复杂度增强视频编解码器滤镜 (https://github.com/v-novaltd/LCEVCdec)。

11.145 libplacebo

基于 libplacebo 的灵活 GPU 加速处理滤镜 (https://code.videolan.org/videolan/libplacebo)。

11.145.1 选项

此滤镜的选项分为以下几部分

11.145.1.1 输出模式

这些选项控制整体输出模式。默认情况下,libplacebo 将尝试尽可能保留源色彩和大小,但它将应用源帧中存在的任何嵌入的胶片颗粒、杜比视界元数据或变形 SAR。

输入

设置输入数量。可以结合 idx 变量使用,以允许将多个输入放置/混合到输出帧中。这有效地启用了类似于 hstackoverlay 等的功能。

w
h

设置输出视频维度表达式。默认值是 iwih

允许与 scale 滤镜相同的表达式。

crop_x
crop_y

设置输入裁剪 x/y 表达式,默认值是 (iw-cw)/2(ih-ch)/2

crop_w
crop_h

设置输入裁剪宽度/高度表达式,默认值是 iwih

pos_x
pos_y

设置输出放置 x/y 表达式,默认值是 (ow-pw)/2(oh-ph)/2

pos_w
pos_h

设置输出放置宽度/高度表达式,默认值是 owoh

fps

设置输出帧率。这可以是合理的,例如 60000/1001。如果设置为特殊字符串 none(默认值),则输入时间戳将改为原封不动地传递到输出。否则,将根据需要对输入视频帧进行插值,以将视频缩放到指定的目标帧率,方式由 frame_mixer 选项决定。

format

设置输出格式覆盖。如果未设置(默认值),帧将以与各个输入帧相同的格式输出。否则,将执行格式转换。

force_original_aspect_ratio
force_divisible_by

与相同的 scale 滤镜选项的作用相同。

normalize_sar

如果启用,则输出帧始终具有 1:1 的像素宽高比。这将根据需要引入额外的填充/裁剪。如果禁用(默认值),任何宽高比不匹配(包括来自变形视频源的宽高比不匹配)都将转发到输出像素宽高比。

pad_crop_ratio

指定一个比率(介于 0.01.0 之间),用于当输入宽高比与输出宽高比不匹配且 normalize_sar 生效时,填充和裁剪之间的平衡。默认值 0.0 始终使用黑色边框填充内容,而值 1.0 始终裁剪掉部分内容。中间值也是可能的,从而导致两种方法的混合。

fillcolor

设置用于填充输出图像未覆盖的输出区域的颜色,例如,由于 normalize_sar 导致。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的 “Color” 部分。默认为 black

corner_rounding

渲染带有圆角的帧。该值以浮点数形式给出,范围从 0.01.0,表示圆角的相对程度,从完全方形到完全圆形。换句话说,它给出了半径除以较小边长的一半的值。默认为 0.0

extra_opts

传递额外的 libplacebo 内部配置选项。这些可以指定为以 ':' 分隔的 key=value 对列表。以下示例展示了如何配置自定义的滤波器内核(“EWA LanczosSharp”),并使用它来使输入图像分辨率加倍

-vf "libplacebo=w=iw*2:h=ih*2:extra_opts='upscaler=custom\:upscaler_preset=ewa_lanczos\:upscaler_blur=0.9812505644269356'"
colorspace
color_primaries
color_trc
range

配置输出帧将以何种色彩空间传递。默认值 auto 以与输入帧相同的格式输出帧,不会导致任何更改。对于任何其他值,将执行转换。

有关可能的值的列表,请参阅 setparams 过滤器。

apply_filmgrain

如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则应用胶片颗粒,并从输出中剥离它。默认启用。

apply_dolbyvision

如果源帧中存在杜比视界 RPU 元数据,则应用杜比视界 RPU 元数据,并从输出中剥离它。默认启用。请注意,杜比视界将始终输出 BT.2020+PQ,从而覆盖通常的输入帧元数据。这些也将被选为各自帧输出选项的 auto 值。

除了为 scale 过滤器记录的表达式常量之外,crop_wcrop_hcrop_xcrop_ypos_wpos_hpos_xpos_y 选项还可以包含以下常量

in_idx, idx

当前活动输入流的(从 0 开始的)数字索引。

crop_w, cw
crop_h, ch

crop_wcrop_h 的计算值。

pos_w, pw
pos_h, ph

pos_wpos_h 的计算值。

in_t, t

输入帧时间戳,以秒为单位。如果输入时间戳未知,则为 NAN。

out_t, ot

输入帧时间戳,以秒为单位。如果输入时间戳未知,则为 NAN。

n

输入帧编号,从 0 开始。

11.145.1.2 缩放

本节中的选项控制 libplacebo 如何执行放大和(如果需要)缩小。请注意,libplacebo 将始终在内部对 4:4:4 内容进行操作,因此任何子采样的色度格式(例如 yuv420p)都必须作为渲染过程的一部分进行上采样和下采样。这意味着即使源和目标分辨率相同,缩放也可能生效。

upscaler
downscaler

配置用于放大和缩小的滤波器内核。各自的默认值为 spline36mitchell。有关可能的值的完整列表,请将 help 传递给这些选项。最重要的值是

none

强制使用内置 GPU 纹理采样(通常为双线性)。速度非常快,但质量差,尤其是在缩小时。

bilinear

双线性插值。通常可以在 GPU 上免费完成,除非这样做会导致混叠。速度快,质量低。

nearest

最近邻插值。清晰但高度混叠。

oversample

在视觉上看起来与最近邻插值相似,但试图保留像素宽高比的算法。适合像素艺术,因为它能最大程度地减少艺术外观的失真。

lanczos

标准 sinc-sinc 插值内核。

spline36

lanczos 的三次样条逼近。性能没有差异,但振铃效应略微减少。

ewa_lanczos

lanczos 的椭圆加权平均版本,基于 jinc-sinc 内核。这也通常被称为“Jinc 缩放”。速度慢但质量非常高。

gaussian

高斯内核。具有某些理想的数学特性,但主观上非常模糊。

mitchell

Mitchell 和 Netravali 推荐的参数的三次 BC 样条。振铃效应非常小。

frame_mixer

控制用于时间混合帧的内核。默认值为 none,这将禁用帧混合。有关可能的值的完整列表,请将 help 传递给此选项。最重要的值是

none

禁用帧混合,使结果等效于“最近邻”语义。

oversample

对输入视频进行过采样以创建“平滑运动”类型的效果:如果输出帧恰好落在两个视频帧之间的过渡处,则根据相对重叠进行混合。如果希望保留原始的主观外观,建议使用此选项。

mitchell_clamp

更大的滤波器内核,以设计用于尽可能消除振铃和其他伪影的方式平滑地插值多个帧。如果希望获得最大的视觉平滑度,建议使用此选项。

linear

帧之间的线性混合/淡入淡出。特别适用于构建例如幻灯片。

lut_entries

配置缩放器 LUT 的大小,范围从 1256。默认值 0 将选择 libplacebo 的内部默认值,通常为 64

antiringing

启用抗振铃(对于非 EWA 滤波器)。该值(介于 0.01.0 之间)配置抗振铃算法的强度。如果设置得过高,可能会增加混叠。默认禁用。

sigmoid

在放大期间启用 sigmoid 压缩。稍微减少振铃。默认启用。

11.145.1.3 去条带

Libplacebo 配备了内置的去带状滤波器,可以很好地抵消许多常见的带状和块状来源。如果希望获得质量,强烈建议启用此功能。

deband

启用(快速)去带状算法。默认禁用。

deband_iterations

去带状算法的去带状迭代次数。每次迭代都以逐渐增加的半径(和减小的阈值)执行。建议的值范围为 14。默认为 1

deband_threshold

去带状滤波器强度。较高的数字会导致更积极的去带状处理。默认为 4.0

deband_radius

去带状滤波器半径。较高的半径更适合缓慢的渐变,而较低的半径更适合陡峭的渐变。默认为 16.0

deband_grain

要添加的额外输出颗粒量。有助于隐藏瑕疵。默认为 6.0

11.145.1.4 颜色调整

一系列主观色彩控制。不是很严格,因此确切的效果会因输入原色和色彩空间而略有不同。

brightness

亮度提升,介于 -1.01.0 之间。默认为 0.0

contrast

对比度增益,介于 0.016.0 之间。默认为 1.0

saturation

饱和度增益,介于 0.016.0 之间。默认为 1.0

hue

色相偏移,以弧度表示,介于 -3.143.14 之间。默认为 0.0。这将旋转 UV 子向量,对于 RGB 输入,默认为 BT.709 系数。

gamma

伽玛调整,介于 0.016.0 之间。默认为 1.0

cones

用于色盲模拟的锥体模型。接受 lms 的任意组合。以下是一些示例

m

Deuteranomaly/deuteranopia(影响 3%-4% 的人口)

l

Protanomaly/protanopia(影响 1%-2% 的人口)

l+m

单色视(非常罕见)

l+m+s

Achromatopsy(完全丧失白天视觉,极其罕见)

cone-strength

cones 指定的锥状细胞的增益因子,取值范围为 0.010.0。值为 1.0 时,颜色视觉无变化。值为 0.0(默认值)时,模拟这些锥状细胞的完全丧失。大于 1.0 的值会夸大锥状细胞之间的差异,这可能有助于补偿颜色视觉的减退。

11.145.1.5 峰值检测

为了帮助处理只有静态 HDR10 元数据(或根本没有标签)的源,libplacebo 使用其内部的帧分析计算着色器来分析源帧并实时调整色调映射函数。如果这太慢,或者需要精确可重复的逐帧结果,建议关闭此功能。

峰值检测

启用 HDR 峰值检测。忽略静态 MaxCLL/MaxFALL 值,而选择从输入动态检测。请注意,检测到的值不会写回输出帧,它们仅指导内部色调映射过程。默认启用。

平滑周期

峰值检测平滑周期,取值范围为 0.01000.0。值越高,峰值检测对输入变化的响应越不灵敏。默认为 100.0

最小峰值

检测到的峰值的下限(相对于 SDR 白色),取值范围为 0.0100.0。默认为 1.0

场景阈值低
场景阈值高

场景变化检测的下限和上限阈值。以 0.0100.0 之间的对数刻度表示。默认值分别为 5.510.0。将任一值设置为负值将禁用此功能。

百分位数

将帧亮度直方图的哪个百分位数用作色调映射的源峰值。默认为 99.995,这是一个相当保守的值。将其设置为 100.0 将禁用帧直方图测量,而是使用真实的峰值亮度进行色调映射。

11.145.1.6 色调映射

本节中的选项控制 libplacebo 在处理宽色域或 HDR 内容之间的不匹配时如何执行色调映射和色域映射。通常,libplacebo 依赖于准确的源标记和母带显示色域信息来产生最佳结果。

色域模式

如何处理由于色彩色域映射而可能发生的超出色域的颜色。

剪切

不执行任何操作,只需将超出范围的颜色剪切到 RGB 体积。质量低但速度极快。

感知

将颜色感知地柔化剪切到色域体积。这是默认值。

相对

相对比色硬剪切。类似于 perceptual,但没有软膝盖。

饱和度

饱和度映射,将原色直接映射到 RGB 空间中的原色。不推荐,除非用于需要明亮饱和显示的计算机人工图形。

绝对

绝对比色硬剪切。不对白点进行任何调整。

去饱和

将超出色域的颜色硬去饱和化为白色,同时保留亮度。有扭曲亮物体视觉外观的趋势。

darken

线性降低内容亮度以保留饱和细节,然后剪切剩余的超出色域的颜色。

警告

突出显示超出色域的像素(通过反转/标记它们)。

linear

线性降低整个图像的色度,使其适应目标颜色体积。在没有适当母带元数据的情况下在 BT.2020 源上使用此选项时要小心,因为这样做会导致过度去饱和。

色调映射

要使用的色调映射算法。可用值包括

auto

基于内部启发式的自动选择。这是默认值。

剪切

不执行色调映射,仅剪切超出范围的颜色。对于范围内颜色,保留完美的颜色精度,但完全破坏超出范围的信息。不执行任何黑点适应。不可配置。

st2094-40

来自 SMPTE ST 2094-40 附录 B 的 EETF,它应用基于贝塞尔曲线的 HDR10+ 动态元数据中的贝塞尔曲线来执行色调映射。使用的 OOTF 根据目标显示峰值亮度和实际显示峰值亮度之间的比率进行调整。

st2094-10

来自 SMPTE ST 2094-10 附录 B.2 的 EETF,它除了最大值/最小值外,还考虑了输入信号的平均亮度。可配置的对比度参数会影响线性输出段的斜率,默认为 1.0,表示对比度没有增加/减少。请注意,这目前不包括附录 B.3 中定义的主观增益/偏移/伽玛控制。

bt.2390

来自 ITU-R 报告 BT.2390 的 EETF,这是一个带有线性段的埃尔米特样条衰减。膝点偏移量可配置。请注意,此参数的默认值为 1.0,而不是 ITU-R 规范中的值 0.5

bt.2446a

来自 ITU-R 报告 BT.2446 的 EETF,方法 A。专为精心制作的 HDR 源而设计。可用于正向和反向色调映射。不可配置。

样条

由两个多项式组成的简单样条,通过单个枢轴点连接。该参数给出枢轴点(在 PQ 空间中),默认为 0.30。可用于正向和反向色调映射。

reinhard

简单的非线性全局色调映射算法。该参数指定显示峰值处的局部对比度系数。基本上,参数为 0.5 意味着参考白色将大约为剪切时的一半亮度。默认为 0.5,这将导致此函数最简单的公式。

mobius

reinhard 色调映射算法的泛化,以支持黑色附近的额外线性斜率。色调映射参数表示线性部分和非线性部分之间的权衡。基本上,对于给定的参数 x,低于 x 的每个颜色值都将线性映射,而较高的值将进行非线性色调映射。接近 1.0 的值会使此曲线的行为类似于 clip,而接近 0.0 的值会使此曲线的行为类似于 reinhard。默认值为 0.3,这在比色精度和保留超出色域的细节之间提供了良好的平衡。

hable

约翰·黑布尔为《神秘海域 2》开发的分段电影式色调映射算法,其灵感来自柯达使用的类似色调映射算法。由于在具有 HDR 渲染的视频游戏中使用而广受欢迎。可以很好地保留暗部和亮部细节,但缺点是会显著改变平均亮度。这有点类似于参数为 0.24reinhard

伽玛

拟合伽玛(幂)函数,以在源色彩空间和目标色彩空间之间进行转换,有效地产生一个感知硬膝盖,连接两个大致线性的部分。这可以相当准确地保留所有比例的细节,但可能会导致图像外观柔和或暗淡。该参数用作截止点,默认为 0.5

linear

在 PQ 空间中,将输入范围线性拉伸到输出范围。这将准确地保留所有细节,但会导致平均亮度显著不同。除了常规色调映射外,还可用于反向色调映射。该参数可以用作额外的线性增益系数(默认为 1.0)。

色调映射参数

对于可调的色调映射函数,此参数可用于微调曲线行为。请参阅 tonemapping 的文档。0.0 的默认值将被曲线的首选默认设置所替换。

inverse_tonemapping

如果启用,此滤镜还将尝试拉伸 SDR 信号以填充 HDR 输出色彩空间。默认情况下禁用。

tonemapping_lut_size

色调映射 LUT 的大小,介于 21024 之间。默认为 256。请注意,当与 peak_detect 结合使用时,此数字会平方。

contrast_recovery

对比度恢复强度。如果设置为高于 0.0 的值,则源图像将分为高频和低频分量,并且一部分高频图像会添加回色调映射的输出。对于某些 HDR 源,可能会导致过多的振铃伪影,但可以提高色调映射后图像中残留的主观清晰度和细节。默认为 0.30

contrast_smoothness

对比度恢复低通内核大小。默认为 3.5。增加或减少此值将显著影响视觉外观。当 contrast_recovery 被禁用时,无效。

11.145.1.7 抖动

默认情况下,libplacebo 会在必要时进行抖动,包括渲染到任何低于 16 位精度的整数格式。建议始终保持启用状态,因为不这样做可能会导致输出中出现可见的条带,即使启用了 debanding 滤镜也是如此。如果需要最大性能,请使用 ordered_fixed 而不是禁用抖动。

dithering

要使用的抖动方法。接受以下值

none

完全禁用抖动。可能导致可见的条带。

blue

使用伪蓝色噪声进行抖动。这是默认值。

ordered

可调的有序抖动模式。

ordered_fixed

更快的有序抖动,固定大小为 6。无纹理。

white

使用白色噪声进行抖动。无纹理。

dither_lut_size

抖动 LUT 大小,以 18 之间的 2 为底的对数表示。默认为 6,对应于 64x64 的 LUT 大小。

dither_temporal

启用时间抖动。默认情况下禁用。

11.145.1.8 自定义着色器

libplacebo 支持许多基于 mpv .hook GLSL 语法的自定义着色器。可以在此处找到此类着色器的集合:https://github.com/mpv-player/mpv/wiki/User-Scripts#user-shaders

对 mpv 着色器格式的完整描述超出了本节的范围,但可以在此处找到摘要:https://mpv.io/manual/master/#options-glsl-shader

custom_shader_path

指定要在运行时加载的自定义着色器文件的路径。

custom_shader_bin

将完整的自定义着色器指定为原始字符串。

11.145.1.9 调试/性能

本节中的所有选项默认都关闭。当试图以牺牲质量为代价来榨取最大性能时,它们可能会有所帮助。

skip_aa

在缩小比例时禁用抗锯齿。

polar_cutoff

将极坐标 (EWA) 缩放器内核截断到此绝对幅度以下,介于 0.01.0 之间。

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置 GPU 采样(强制使用 LUT)。

disable_fbos

强制禁用 FBO,导致几乎所有功能都丢失,但提供尽可能快的速度。

11.145.2 命令

此滤镜支持几乎所有上述选项作为命令

11.145.3 示例

  • 将输入色调映射到标准色域 BT.709 输出
    libplacebo=colorspace=bt709:color_primaries=bt709:color_trc=bt709:range=tv
    
  • 将输入缩放到适合标准 1080p,具有高质量缩放
    libplacebo=w=1920:h=1080:force_original_aspect_ratio=decrease:normalize_sar=true:upscaler=ewa_lanczos:downscaler=ewa_lanczos
    
  • 将低 FPS/VFR 输入插值到平滑的恒定 60 fps 输出
    libplacebo=fps=60:frame_mixer=mitchell_clamp
    
  • 将输入转换为标准 sRGB JPEG
    libplacebo=format=yuv420p:colorspace=bt470bg:color_primaries=bt709:color_trc=iec61966-2-1:range=pc
    
  • 使用更高质量的去条带设置
    libplacebo=deband=true:deband_iterations=3:deband_radius=8:deband_threshold=6
    
  • 在安装了 Mesa 的系统上(并且禁用最昂贵的选项)在 CPU 上运行此滤镜
    ffmpeg ... -init_hw_device vulkan:llvmpipe ... -vf libplacebo=upscaler=none:downscaler=none:peak_detect=false
    
  • 在解码器中抑制基于 CPU 的 AV1/H.274 胶片颗粒应用,转而使用此滤镜进行处理。请注意,只有当帧已经位于 GPU 上,或者您将 libplacebo 用于其他目的时,这才能带来收益,因为否则 VRAM 往返传输将抵消任何预期的加速。
    ffmpeg -export_side_data +film_grain ... -vf libplacebo=apply_filmgrain=true
    
  • 与 VAAPI hwdec 互操作,以避免通过 RAM 进行往返传输
    ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
    

11.146 libvmaf

计算一对输入视频的参考/失真对的 VMAF(视频多方法评估融合)分数。

第一个输入是失真视频,第二个输入是参考视频。

获得的 VMAF 分数通过日志系统打印。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用:./configure --enable-libvmaf

该滤镜具有以下选项

model

一个以“|”分隔的 vmaf 模型列表。每个模型都可以配置许多参数。默认值:"version=vmaf_v0.6.1"

feature

一个以“|”分隔的特性列表。每个特性都可以配置许多参数。

log_path

设置用于存储日志文件的文件路径。

log_fmt

设置日志文件的格式(xml、json、csv 或 sub)。

pool

设置用于计算 vmaf 的池化方法。选项为 minharmonic_meanmean(默认)。

n_threads

设置初始化 libvmaf 时要使用的线程数。默认值:0,无线程。

n_subsample

设置要使用的帧子采样间隔。

此滤镜还支持 framesync 选项。

11.146.1 示例

  • 在下面的示例中,将失真视频 distorted.mpg 与参考文件 reference.mpg 进行比较。
  • 基本用法
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null -
    
  • 包含多个模型的示例
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null -
    
  • 包含多个附加特性的示例
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null -
    
  • 包含选项和不同容器的示例
    ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null -
    

11.147 libvmaf_cuda

这是 libvmaf 滤镜的 CUDA 变体。它只接受 CUDA 帧。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf

11.147.1 示例

  • 基本用法,显示 CUVID 硬件解码和使用 scale_cuda 进行 CUDA 缩放
    ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
        -filter_complex "
            [0:v]scale_cuda=format=yuv420p[dis]; \
            [1:v]scale_cuda=format=yuv420p[ref]; \
            [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
        " \
        -f null -
    

11.148 limitdiff

使用第二和可选的第三个视频流应用有限差异滤镜。

该滤波器接受以下选项

threshold

设置允许视频流之间存在某些差异时要使用的阈值。任何低于或等于此阈值的绝对差异值都将从第一个视频流中选择像素分量。

elasticity

设置处理视频流时软阈值的弹性。此值乘以第一个值设置第二个阈值。任何大于或等于第二个阈值的绝对差值都将从第二个视频流中选择像素分量。对于介于这两个阈值之间的值,将使用第一个和第二个视频流之间的线性插值。

reference

启用参考(第三个)视频流处理。默认情况下禁用。如果设置,此视频流将用于计算与第一个视频流的绝对差异。

平面

指定将要处理的平面。默认为所有可用的平面。

11.148.1 命令

此滤镜支持上述所有选项作为命令,除了选项 ‘reference’。

11.149 limiter

将像素分量值限制在指定的范围 [min, max] 内。

该滤波器接受以下选项

最小值

下限。默认为输入允许的最小值。

最大值

上限。默认为输入允许的最大值。

平面

指定将要处理的平面。默认为所有可用的平面。

11.149.1 命令

此过滤器支持以上所有选项作为 命令

11.150 loop

循环播放视频帧。

该滤波器接受以下选项

循环

设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。

size

设置最大帧数。默认为 0。

开始

设置循环的第一帧。默认为 0。

时间

设置循环开始时间,单位为秒。仅当名为 start 的选项设置为 -1 时使用。

11.150.1 示例

  • 无限循环播放第一帧。
    loop=loop=-1:size=1:start=0
    
  • 循环播放第一帧 10 次。
    loop=loop=10:size=1:start=0
    
  • 循环播放前 10 帧 5 次。
    loop=loop=5:size=10:start=0
    

11.151 lut1d

将 1D LUT 应用于输入视频。

该滤波器接受以下选项

文件

设置 1D LUT 文件名。

当前支持的格式

cube

Iridas

csp

cineSpace

插值

选择插值模式。

可用值为

nearest

使用最近定义的点的值。

linear

使用线性插值来插值。

cosine

使用余弦插值来插值。

cubic

使用立方插值来插值。

样条

使用样条插值来插值。

11.151.1 命令

此过滤器支持以上所有选项作为 命令

11.152 lut3d

将 3D LUT 应用于输入视频。

该滤波器接受以下选项

文件

设置 3D LUT 文件名。

当前支持的格式

3dl

AfterEffects

cube

Iridas

dat

DaVinci

m3d

Pandora

csp

cineSpace

插值

选择插值模式。

可用值为

nearest

使用最近定义的点的值。

trilinear

使用定义立方体的 8 个点进行插值。

tetrahedral

使用四面体进行插值。

pyramid

使用棱锥进行插值。

prism

使用棱柱进行插值。

11.152.1 命令

此滤镜支持 interp 选项,如 commands 中所述。

11.153 lumakey

将某些亮度值转换为透明度。

该滤波器接受以下选项

threshold

设置将用作透明度基准的亮度值。默认值为 0

容差

设置要抠出的亮度值范围。默认值为 0.01

softness

设置柔化范围。默认值为 0。使用此项来控制从零到完全透明的渐变过渡。

11.153.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.154 lut, lutrgb, lutyuv

计算一个查找表,用于将每个像素分量输入值绑定到一个输出值,并将其应用于输入视频。

lutyuv 将查找表应用于 YUV 输入视频,lutrgb 应用于 RGB 输入视频。

这些滤镜接受以下参数

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 alpha 分量

r

设置红色分量表达式

g

设置绿色分量表达式

b

设置蓝色分量表达式

a

alpha 分量表达式

y

设置 Y/亮度分量表达式

u

设置 U/Cb 分量表达式

v

设置 V/Cr 分量表达式

它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。

与每个 c* 选项关联的确切分量取决于输入中的格式。

lut 滤镜需要在输入中使用 YUV 或 RGB 像素格式,lutrgb 需要在输入中使用 RGB 像素格式,而 lutyuv 需要 YUV。

这些表达式可以包含以下常量和函数

w
h

输入宽度和高度。

像素分量的输入值。

clipval

输入值,被裁剪到 minval-maxval 范围。

maxval

像素分量的最大值。

minval

像素分量的最小值。

negval

像素分量值的取反值,被裁剪到 minval-maxval 范围;它对应于表达式 "maxval-clipval+minval"。

clip(val)

val 中计算的值,被裁剪到 minval-maxval 范围。

gammaval(gamma)

像素分量值的计算伽玛校正值,被裁剪到 minval-maxval 范围。它对应于表达式 "pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval"

所有表达式默认为 "clipval"。

11.154.1 命令

此滤镜支持与选项相同的 commands

11.154.2 示例

  • 反转输入视频
    lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
    lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
    

    以上与以下相同

    lutrgb="r=negval:g=negval:b=negval"
    lutyuv="y=negval:u=negval:v=negval"
    
  • 反转亮度
    lutyuv=y=negval
    
  • 删除色度分量,将视频转换为灰度图像
    lutyuv="u=128:v=128"
    
  • 应用亮度燃烧效果
    lutyuv="y=2*val"
    
  • 删除绿色和蓝色分量
    lutrgb="g=0:b=0"
    
  • 在输入上设置一个恒定的 alpha 通道值
    format=rgba,lutrgb=a="maxval-minval/2"
    
  • 将亮度伽玛校正 0.5 倍
    lutyuv=y=gammaval(0.5)
    
  • 丢弃亮度最低有效位
    lutyuv=y='bitand(val, 128+64+32)'
    
  • 类似特艺色彩的效果
    lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
    

11.155 lut2, tlut2

lut2 滤镜接收两个输入流并输出一个流。

tlut2 (时间 lut2) 滤镜从一个单独的流中获取两个连续的帧。

此滤镜接受以下参数

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 alpha 分量

d

设置输出位深度,仅适用于 lut2 滤镜。默认值为 0,表示位深度自动从第一个输入格式中选取。

lut2 滤镜还支持 framesync 选项。

它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。

与每个 c* 选项关联的确切分量取决于输入中的格式。

表达式可以包含以下常量

w
h

输入宽度和高度。

x

像素分量的第一个输入值。

y

像素分量的第二个输入值。

bdx

第一个输入视频的位深度。

bdy

第二个输入视频的位深度。

所有表达式默认为 "x"。

11.155.1 命令

此滤镜支持上述所有选项作为命令,除了选项 d

11.155.2 示例

  • 突出显示两个 RGB 视频流之间的差异
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
    
  • 突出显示两个 YUV 视频流之间的差异
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
    
  • 显示两个视频流之间的最大差异
    lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
    

11.156 maskedclamp

使用第二个输入流和第三个输入流钳制第一个输入流。

返回第一个流的值,使其介于第二个输入流 - undershoot 和第三个输入流 + overshoot 之间。

此过滤器接受以下选项

undershoot

默认值为 0

overshoot

默认值为 0

平面

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。

11.156.1 命令

此过滤器支持以上所有选项作为 命令

11.157 maskedmax

使用第二个输入流与第一个输入流之间的绝对差值,以及第三个输入流与第一个输入流之间的绝对差值,将第二个和第三个输入流合并到输出流中。如果第二个绝对差值大于第一个,则选择第二个输入流的值,否则选择第三个输入流的值。

此过滤器接受以下选项

平面

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。

11.157.1 命令

此过滤器支持以上所有选项作为 命令

11.158 maskedmerge

使用第三个输入流中的每个像素权重,将第一个输入流与第二个输入流合并。

第三个流像素分量中的值 0 表示第一个流中的像素分量保持不变,而最大值(例如,对于 8 位视频为 255)表示第二个流中的像素分量保持不变。中间值定义了两个输入流的像素分量之间的合并量。

此过滤器接受以下选项

平面

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。

11.158.1 命令

此过滤器支持以上所有选项作为 命令

11.159 maskedmin

使用第二个输入流与第一个输入流之间的绝对差值,以及第三个输入流与第一个输入流之间的绝对差值,将第二个和第三个输入流合并到输出流中。如果第二个绝对差值小于第一个,则选择第二个输入流的值,否则选择第三个输入流的值。

此过滤器接受以下选项

平面

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,将处理所有平面。

11.159.1 命令

此过滤器支持以上所有选项作为 命令

11.160 maskedthreshold

通过比较两个视频流的绝对差值与固定阈值来选择像素。

如果第一个和第二个视频流的像素分量之间的绝对差值等于或小于用户提供的阈值,则选择第一个视频流的像素分量,否则选择第二个视频流的像素分量。

此过滤器接受以下选项

threshold

设置从两个输入视频流的绝对差值中选择像素时使用的阈值。

平面

设置哪些平面将作为位图处理,未处理的平面将从第二个流复制。默认值为 0xf,所有平面都将被处理。

mode

设置滤镜操作模式。可以是 absdiff。默认为 abs

11.160.1 命令

此过滤器支持以上所有选项作为 命令

11.161 maskfun

从输入视频创建蒙版。

例如,在 tblend 滤镜之后创建运动蒙版很有用。

此过滤器接受以下选项

设置低阈值。任何小于或等于此值的像素分量都将设置为 0。

设置高阈值。任何像素分量高于此值的像素将被设置为当前像素格式允许的最大值。

平面

设置要过滤的平面,默认情况下会过滤所有可用的平面。

fill

使用此值填充所有帧像素。

求和

设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,输出帧将完全填充由 fill 选项设置的值。通常与 tblend 滤镜结合使用时,对场景切换很有用。

11.161.1 命令

此过滤器支持以上所有选项作为 命令

11.162 mcdeint

应用运动补偿去隔行。

它需要每个帧一个场作为输入,因此必须与 yadif=1/3 或等效项一起使用。

此过滤器接受以下选项

mode

设置去隔行模式。

它接受以下值之一

fast
medium
slow

使用迭代运动估计

extra_slow

与“slow”类似,但使用多个参考帧。

默认值为“fast”。

parity

设置输入视频的假设图像场奇偶性。它必须是以下值之一

0, tff

假设顶场优先

1, bff

假设底场优先

默认值为“bff”。

qp

设置内部编码器使用的每个块的量化参数 (QP)。

更高的值应该会产生更平滑的运动矢量场,但单个矢量可能不是最优的。默认值为 1。

11.163 median

从由半径定义的特定矩形中选取中值像素。

此过滤器接受以下选项

radius

设置水平半径大小。默认值为 1。允许的范围是 1 到 127 的整数。

平面

设置要处理的平面。默认为 15,即所有可用平面。

radiusV

设置垂直半径大小。默认值为 0。允许的范围是 0 到 127 的整数。如果为 0,则将从水平 radius 选项中选取值。

百分位数

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选取中值,而 0 将选取最小值,1 将选取最大值。

11.163.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.164 mergeplanes

合并来自多个视频流的颜色通道分量。

该滤镜最多接受 4 个输入流,并将选定的输入平面合并到输出视频中。

此过滤器接受以下选项

映射

设置输入到输出平面的映射。默认为 0

映射指定为位图。它应以十六进制数形式指定,如 0xAa[Bb[Cc[Dd]]]。’Aa’ 描述输出流的第一个平面的映射。’A’ 设置要使用的输入流的编号(从 0 到 3),’a’ 设置要使用的相应输入的平面编号(从 0 到 3)。其余映射类似,’Bb’ 描述输出流的第二个平面的映射,’Cc’ 描述输出流的第三个平面的映射,’Dd’ 描述输出流的第四个平面的映射。

format

设置输出像素格式。默认为 yuva444p

map0s
map1s
map2s
map3s

设置输出第 N 个平面的输入到输出流的映射。默认为 0

map0p
map1p
map2p
map3p

设置输出第 N 个平面的输入到输出平面的映射。默认为 0

11.164.1 示例

  • 将三个具有相同宽度和高度的灰度视频流合并为单个视频流
    [a0][a1][a2]mergeplanes=0x001020:yuv444p
    
  • 将第一个 yuv444p 流和第二个灰度视频流合并为 yuva444p 视频流
    [a0][a1]mergeplanes=0x00010210:yuva444p
    
  • 交换 yuva444p 流中的 Y 和 A 平面
    format=yuva444p,mergeplanes=0x03010200:yuva444p
    
  • 交换 yuv420p 流中的 U 和 V 平面
    format=yuv420p,mergeplanes=0x000201:yuv420p
    
  • 将 rgb24 剪辑转换为 yuv444p
    format=rgb24,mergeplanes=0x000102:yuv444p
    

11.165 mestimate

使用块匹配算法估计并导出运动矢量。运动矢量存储在帧边数据中,供其他滤镜使用。

此过滤器接受以下选项

方法

指定运动估计方法。接受以下值之一

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认值为“esa”。

mb_size

宏块大小。默认值为 16

search_param

搜索参数。默认值为 7

11.166 midequalizer

使用两个视频流应用中间图像均衡效果。

中间图像均衡调整一对图像,使其具有相同的直方图,同时尽可能保持其动态。例如,它对于匹配来自一对立体摄像机的曝光很有用。

此滤镜有两个输入和一个输出,它们的像素格式必须相同,但大小可能不同。滤镜的输出是第一个输入,使用两个输入的中间直方图进行调整。

此滤镜接受以下选项

平面

设置要处理的平面。默认为 15,即所有可用平面。

11.167 minterpolate

使用运动插值将视频转换为指定的帧率。

此过滤器接受以下选项

fps

指定输出帧率。它可以是合理的,例如 60000/1001。如果 fps 低于源 fps,则会丢帧。默认值为 60

mi_mode

运动插值模式。接受以下值

dup

复制前一帧或下一帧以插值新帧。

blend

混合源帧。插值帧是前一帧和下一帧的平均值。

mci

运动补偿插值。选择此模式时,以下选项有效

mc_mode

运动补偿模式。接受以下值

obmc

重叠块运动补偿。

aobmc

自适应重叠块运动补偿。窗口加权系数根据相邻运动矢量的可靠性自适应控制,以减少过度平滑。

默认模式为“obmc”。

me_mode

运动估计模式。接受以下值

bidir

双向运动估计。为每个源帧估计向前和向后方向的运动矢量。

bilat

双边运动估计。直接为插值帧估计运动矢量。

默认模式为“bilat”。

me

用于运动估计的算法。接受以下值

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认算法为“epzs”。

mb_size

宏块大小。默认值为 16

search_param

运动估计搜索参数。默认值为 32

vsbmc

启用可变大小块运动补偿。运动估计应用于对象边界处的较小块大小,以使其不那么模糊。默认值为 0(禁用)。

scd

场景更改检测方法。场景更改会导致运动矢量朝随机方向。场景更改检测会将插值帧替换为重复的帧。对于其他模式,可能不需要。接受以下值

none

禁用场景更改检测。

fdiff

帧差异。比较相应的像素值,如果满足 scd_threshold,则会检测到场景更改。

默认方法为“fdiff”。

scd_threshold

场景更改检测阈值。默认值为 10.

11.168 mix

将多个视频输入流混合到一个视频流中。

以下是可接受选项的描述。

输入

输入的数量。如果未指定,则默认为 2。

weights

将每个输入视频流的权重指定为序列。每个权重以空格分隔。如果权重数小于 frames 的数量,则最后一个指定的权重将用于所有剩余的未设置权重。

scale

指定比例,如果设置了比例,它将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale 会自动缩放到权重总和。

平面

设置要过滤的平面。默认值为全部。允许的范围是 0 到 15。

时长

指定如何确定流的结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

11.168.1 命令

此滤波器支持以下命令

weights
scale
平面

语法与同名选项相同。

11.169 monochrome

使用自定义颜色滤镜将视频转换为灰色。

以下是可接受选项的描述。

cb

设置色度蓝色点。允许范围为 -1 到 1。默认值为 0。

cr

设置色度红色点。允许范围为 -1 到 1。默认值为 0。

size

设置颜色滤镜大小。允许范围为 .1 到 10。默认值为 1。

设置高光强度。允许范围为 0 到 1。默认值为 0。

11.169.1 命令

此过滤器支持以上所有选项作为 命令

11.170 morpho

此滤镜允许应用主要的形态学灰度变换,使用在第二个输入流中设置的任意结构进行腐蚀和膨胀。

腐蚀膨胀滤镜中较慢的朴素实现不同,当速度至关重要时,应改用morpho滤镜。

下面是接受的选项的描述:

mode

设置要应用的形态学变换,可以是

erode’(腐蚀)
dilate’(膨胀)
open’(开运算)
close’(闭运算)
gradient’(梯度)
tophat’(顶帽)
blackhat’(黑帽)

默认值为 erode(腐蚀)。

平面

设置要过滤的平面,默认情况下,除了 alpha 平面之外的所有平面都会被过滤。

结构

设置将从第二个输入流处理哪个结构视频帧,可以是first(第一个)或 all(全部)。默认值为 all(全部)。

morpho滤镜还支持framesync选项。

11.170.1 命令

此滤镜支持与选项相同的 commands

11.171 mpdecimate

丢弃与前一帧差异不大的帧,以降低帧率。

此滤镜的主要用途是用于极低比特率编码(例如,通过拨号调制解调器进行流式传输),但理论上也可用于修复错误反向电视电影的电影。

以下是可接受选项的描述。

最大值

设置可以丢弃的最大连续帧数(如果为正数),或者丢弃帧之间的最小间隔(如果为负数)。如果值为 0,则会丢弃该帧,而忽略先前连续丢弃的帧数。

默认值为 0。

keep

设置在开始丢弃之前要忽略的最大连续相似帧数。如果值为 0,则会丢弃该帧,而忽略先前连续相似的帧数。

默认值为 0。

hi
lo
frac

设置丢弃阈值。

hilo 的值用于 8x8 像素块,并表示实际像素值差异,因此阈值 64 对应于每个像素的 1 个单位的差异,或在整个块上以不同方式分布的相同差异。

如果没有 8x8 块的差异超过 hi 的阈值,并且如果超过 lo 阈值的块不超过 frac 块(1 表示整个图像),则该帧是丢弃的候选帧。

hi 的默认值为 64*12,lo 的默认值为 64*5,frac 的默认值为 0.33。

11.172 msad

获取两个输入视频之间的 MSAD(平均绝对差之和)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假定两个输入具有相同数量的帧,这些帧会逐一进行比较。

通过日志系统打印获得的每个分量、平均值、最小值和最大值 MSAD。

该滤镜将每帧计算的 MSAD 存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

11.173 multiply

将第一个视频流像素值乘以第二个视频流像素值。

该滤波器接受以下选项

scale

设置应用于第二个视频流的缩放。默认值为 1。允许范围为 09

offset

设置应用于第二个视频流的偏移。默认值为 0.5。允许范围为 -11

平面

指定将处理来自输入视频流的哪些平面。默认情况下,会处理所有平面。

11.173.1 命令

此滤镜支持与选项相同的 commands

11.174 negate

对输入视频进行反色(反转)。

它接受以下选项

components

设置要反色的分量。

可用分量值为

y
u
v
a
r
g
b
negate_alpha

值为 1 时,如果存在,则反色 alpha 分量。默认值为 0。

11.174.1 命令

此滤镜支持与选项相同的 commands

11.175 nlmeans

使用非局部均值算法对帧进行去噪。

通过查找具有相似上下文的其他像素来调整每个像素。这种上下文相似性是通过比较它们周围 pxp 大小的补丁来定义的。在像素周围 rxr 的区域中搜索补丁。

请注意,搜索区域定义了补丁的中心,这意味着某些补丁将由该搜索区域之外的像素组成。

此滤镜接受以下选项。

s

设置去噪强度。默认值为 1.0。必须在 [1.0, 30.0] 范围内。

p

设置补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。

pc

p 相同,但用于色度平面。

默认值为 0,表示自动。

r

设置搜索大小。默认值为 15。必须是 [0, 99] 范围内的奇数。

rc

r 相同,但用于色度平面。

默认值为 0,表示自动。

11.176 nnedi

使用神经网络边缘导向插值对视频进行去隔行扫描。

此过滤器接受以下选项

weights

强制选项,没有二进制文件,滤镜无法工作。当前文件可以在这里找到:https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

deint

设置要进行去隔行扫描的帧,默认值为 all(全部)。可以是 all(全部)或 interlaced(隔行扫描)。

设置操作模式。

可以是以下之一

af

使用帧标志,两个场。

a

使用帧标志,单场。

t

仅使用顶部场。

b

仅使用底部场。

tf

使用两个场,顶部优先。

bf

使用两个场,底部优先。

平面

设置要处理的平面,默认情况下,滤镜处理所有帧。

nsize

设置每个像素周围的局部邻域大小,由预测器神经网络使用。

可以是以下之一

s8x6
s16x6
s32x6
s48x6
s8x4
s16x4
s32x4
nns

设置预测器神经网络中的神经元数量。可以是以下之一

n16
n32
n64
n128
n256
qual

控制将混合在一起以计算最终输出值的不同神经网络预测的数量。可以是 fast(快速)、默认值或 slow(慢速)。

etype

设置要在预测器中使用哪一组权重。可以是以下之一

a, abs

训练用于最小化绝对误差的权重

s, mse

训练用于最小化平方误差的权重

pscrn

控制是否使用预筛选器神经网络来决定哪些像素应由预测器神经网络处理,哪些像素可以通过简单的三次插值处理。预筛选器经过训练,可以知道三次插值对于像素是否足够,或者是否应由预测器 nn 进行预测。预筛选器 nn 的计算复杂度远低于预测器 nn。由于大多数像素可以通过三次插值处理,因此使用预筛选器通常会大大加快处理速度。预筛选器非常准确,因此使用与不使用之间的差异几乎总是微不足道的。

可以是以下之一

none
original’(原始)
new’(新)
new2’(新2)
new3

默认值是 new

11.176.1 命令

此滤镜支持与选项相同的 命令,但不包括 weights 选项。

11.177 noformat

强制 libavfilter 不要对下一个滤镜的输入使用任何指定的像素格式。

它接受以下参数

pix_fmts

一个用'|'分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

11.177.1 示例

  • 强制 libavfilter 对 vflip 滤镜的输入使用与 yuv420p 不同的格式
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式
    noformat=yuv420p|yuv444p|yuv410p
    

11.178 noise

在视频输入帧上添加噪声。

该滤波器接受以下选项

all_seed
c0_seed
c1_seed
c2_seed
c3_seed

设置特定像素分量的噪声种子,或者在 all_seed 的情况下设置所有像素分量的噪声种子。默认值是 123457

all_strength, alls
c0_strength, c0s
c1_strength, c1s
c2_strength, c2s
c3_strength, c3s

设置特定像素分量的噪声强度,或者在 all_strength 的情况下设置所有像素分量的噪声强度。默认值为 0。允许的范围是 [0, 100]。

all_flags, allf
c0_flags, c0f
c1_flags, c1f
c2_flags, c2f
c3_flags, c3f

设置像素分量标志,或者在 all_flags 的情况下设置所有分量的标志。可用的分量标志值是

a

平均时间噪声(更平滑)

p

将随机噪声与(半)规则模式混合

t

时间噪声(帧之间的噪声模式会发生变化)

u

均匀噪声(否则为高斯噪声)

11.178.1 示例

向输入视频添加时间和均匀噪声

noise=alls=20:allf=t+u

11.179 normalize

规范化 RGB 视频(又称直方图拉伸,对比度拉伸)。参见:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每个帧的每个通道,滤镜计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的全动态范围。

时间平滑可用于输入范围,以减少当小的黑暗或明亮物体进入或离开场景时引起的闪烁(亮度快速变化)。这类似于视频摄像机上的自动曝光(自动增益控制),并且像视频摄像机一样,它可能会导致视频出现一段时间的过度曝光或曝光不足。

R、G、B 通道可以独立规范化,这可能会导致一些颜色偏移,或者可以作为一个单独的通道链接在一起,从而防止颜色偏移。链接的规范化会保留色调。独立的规范化不会保留色调,因此可以用于消除某些色偏。独立和链接的规范化可以以任何比例组合。

normalize 滤镜接受以下选项

blackpt
whitept

定义输出范围的颜色。最小输入值映射到 blackpt。最大输入值映射到 whitept。默认值分别为黑色和白色。为 blackpt 指定白色,为 whitept 指定黑色将给出颜色反转的规范化视频。可以使用灰度来减小动态范围(对比度)。在此处指定饱和颜色可以产生一些有趣的效果。

smoothing

用于时间平滑的先前帧数。使用当前帧和 smoothing 个先前帧的滚动平均值来平滑每个通道的输入范围。默认值为 0(无时间平滑)。

independence

控制独立(颜色偏移)通道规范化与链接(颜色保留)规范化的比率。0.0 表示完全链接,1.0 表示完全独立。默认为 1.0(完全独立)。

strength

滤镜的总体强度。1.0 表示完全强度。0.0 是一个相当昂贵的空操作。默认为 1.0(完全强度)。

11.179.1 命令

此滤镜支持与选项相同的 命令,但不包括 smoothing 选项。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.179.2 示例

拉伸视频对比度以使用全动态范围,不进行时间平滑;可能会根据源内容闪烁

normalize=blackpt=black:whitept=white:smoothing=0

与上述相同,但具有 50 帧的时间平滑;应减少闪烁,具体取决于源内容

normalize=blackpt=black:whitept=white:smoothing=50

与上述相同,但具有保留色调的链接通道规范化

normalize=blackpt=black:whitept=white:smoothing=50:independence=0

与上述相同,但强度为一半

normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5

将最暗的输入颜色映射到红色,将最亮的输入颜色映射到青色

normalize=blackpt=red:whitept=cyan

11.180 null

将视频源原封不动地传递到输出。

11.181 ocr

光学字符识别

此滤镜使用 Tesseract 进行光学字符识别。要启用此滤镜的编译,您需要使用 --enable-libtesseract 配置 FFmpeg。

它接受以下选项

datapath

设置 tesseract 数据的 datapath。默认情况下使用安装时设置的路径。

language

设置语言,默认为“eng”。

whitelist

设置字符白名单。

blacklist

设置字符黑名单。

滤镜将识别的文本导出为帧元数据 lavfi.ocr.text。滤镜将识别的单词的置信度导出为帧元数据 lavfi.ocr.confidence

11.182 ocv

使用 libopencv 应用视频转换。

要启用此滤镜,请安装 libopencv 库和头文件,并使用 --enable-libopencv 配置 FFmpeg。

它接受以下参数

filter_name

要应用的 libopencv 滤镜的名称。

filter_params

要传递给 libopencv 滤镜的参数。如果未指定,则采用默认值。

有关更精确的信息,请参阅 libopencv 官方文档:https://docs.opencv.ac.cn/master/modules/imgproc/doc/filtering.html

支持多个 libopencv 滤镜;请参阅以下小节。

11.182.1 膨胀

使用特定的结构元素膨胀图像。它对应于 libopencv 函数 cvDilate

它接受以下参数:struct_el|nb_iterations

struct_el 表示结构元素,其语法为:colsxrows+anchor_xxanchor_y/shape

colsrows 表示结构元素的列数和行数,anchor_xanchor_y 表示锚点,shape 表示结构元素的形状。shape 必须为 “rect”、“cross”、“ellipse” 或 “custom”。

如果 shape 的值为 “custom”,则必须后跟一个形如 “=filename” 的字符串。假定名称为 filename 的文件表示二进制图像,其中每个可打印字符对应一个亮像素。当使用自定义 shape 时,将忽略 colsrows,而改用读取文件的列数和行数。

struct_el 的默认值为 “3x3+0x0/rect”。

nb_iterations 指定将变换应用于图像的次数,默认为 1。

一些示例

# Use the default values
ocv=dilate

# Dilate using a structuring element with a 5x5 cross, iterating two times
ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2

# Read the shape from the file diamond.shape, iterating two times.
# The file diamond.shape may contain a pattern of characters like this
#   *
#  ***
# *****
#  ***
#   *
# The specified columns and rows are ignored
# but the anchor point coordinates are not
ocv=dilate:0x0+2x2/custom=diamond.shape|2

11.182.2 腐蚀

使用特定的结构元素腐蚀图像。它对应于 libopencv 函数 cvErode

它接受参数:struct_el:nb_iterations,其语法和语义与 dilate 滤镜相同。

11.182.3 平滑

平滑输入视频。

该滤镜采用以下参数:type|param1|param2|param3|param4

type 是要应用的平滑滤镜的类型,必须是以下值之一:“blur”、“blur_no_scale”、“median”、“gaussian” 或 “bilateral”。默认值为 “gaussian”。

param1param2param3param4 的含义取决于平滑类型。param1param2 接受正整数值或 0。param3param4 接受浮点值。

param1 的默认值为 3。其他参数的默认值为 0。

这些参数对应于分配给 libopencv 函数 cvSmooth 的参数。

11.183 oscilloscope

2D 视频示波器。

可用于测量空间脉冲、阶跃响应、色度延迟等。

它接受以下参数

x

设置示波器中心 x 位置。

y

设置示波器中心 y 位置。

s

设置示波器大小,相对于帧对角线。

t

设置示波器的倾斜/旋转角度。

o

设置轨迹不透明度。

tx

设置轨迹中心 x 坐标。

ty

设置轨迹中心 y 坐标。

tw

设置轨迹宽度,相对于帧的宽度。

th

设置轨迹高度,相对于帧的高度。

c

设置要追踪的组件。默认情况下,它会追踪前三个组件。

g

绘制轨迹网格。默认启用。

st

绘制一些统计信息。默认启用。

sc

绘制示波器。默认启用。

11.183.1 命令

此滤镜支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.183.2 示例

  • 检查视频帧的第一整行。
    oscilloscope=x=0.5:y=0:s=1
    
  • 检查视频帧的最后整行。
    oscilloscope=x=0.5:y=1:s=1
    
  • 检查高度为 1080 的视频帧的第 5 行。
    oscilloscope=x=0.5:y=5/1080:s=1
    
  • 检查视频帧的最后一整列。
    oscilloscope=x=1:y=0.5:s=1:t=1
    

11.184 overlay

将一个视频覆盖在另一个视频之上。

它接受两个输入,并有一个输出。第一个输入是“主要”视频,第二个输入覆盖在其上。

它接受以下参数

以下是可接受选项的描述。

x
y

设置覆盖视频在主视频上的 x 和 y 坐标的表达式。两个表达式的默认值都为 "0"。如果表达式无效,则将其设置为一个很大的值(意味着覆盖层将不会显示在输出可见区域内)。

eof_action

请参阅framesync

eval

设置何时计算 xy 的表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算表达式一次

frame

为每个传入帧计算表达式

默认值为 'frame'。

shortest

请参阅framesync

format

设置输出视频的格式。

它接受以下值

yuv420

强制输出 YUV 4:2:0 8 位平面格式

yuv420p10

强制输出 YUV 4:2:0 10 位平面格式

yuv422

强制输出 YUV 4:2:2 8 位平面格式

yuv422p10

强制输出 YUV 4:2:2 10 位平面格式

yuv444

强制输出 YUV 4:4:4 8 位平面格式

yuv444p10

强制输出 YUV 4:4:4 10 位平面格式

rgb

强制输出 RGB 8 位打包格式

gbrp

强制输出 RGB 8 位平面格式

auto

自动选择格式

默认值为 'yuv420'。

repeatlast

请参阅framesync

alpha

设置覆盖视频的 Alpha 格式,可以是 straightpremultiplied。默认值为 straight

xy 表达式可以包含以下参数。

main_w, W
main_h, H

主输入的宽度和高度。

overlay_w, w
overlay_h, h

覆盖输入的宽度和高度。

x
y

计算出的 xy 的值。它们为每个新帧计算。

hsub
vsub

输出格式的水平和垂直色度二次采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

n

输入帧数,从 0 开始

pos

输入帧在文件中的位置,如果未知,则为 NAN;已弃用,请勿使用

t

时间戳,以秒为单位表示。如果输入时间戳未知,则为 NAN。

此滤镜还支持 framesync 选项。

请注意,只有当按帧进行评估时,nt 变量才可用,并且当 eval 设置为 'init' 时,其值将为 NAN。

请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好通过 setpts=PTS-STARTPTS 过滤器传递两个输入,以使它们从相同的时间戳 0 开始,如 movie 过滤器的示例所示。

你可以将更多的覆盖层链接在一起,但你应该测试这种方法的效率。

11.184.1 命令

此滤波器支持以下命令

x
y

修改覆盖输入的 x 和 y 坐标。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.184.2 示例

  • 在主视频右下角 10 像素的位置绘制覆盖层
    overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

    使用命名选项,上面的例子变成

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
    
  • 使用带有 -filter_complex 选项的 ffmpeg 工具,在输入的左下角插入透明 PNG 徽标
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用 ffmpeg 工具插入 2 个不同的透明 PNG 徽标(第二个徽标在右下角)
    ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加透明颜色层;WxH 必须指定覆盖滤镜的主输入大小
    [email protected]:size=WxH [over]; [in][over] overlay [out]
    
  • 使用 ffplay 工具并排播放原始视频和过滤版本(此处使用 deshake 过滤器)
    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
    

    上面的命令等同于

    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
    
  • 从屏幕左上角开始,创建一个从左向右滑动、从时间 2 开始出现的覆盖层
    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
    
  • 通过将两个输入视频并排放置来合成输出
    ffmpeg -i left.avi -i right.avi -filter_complex "
    nullsrc=size=200x100 [background];
    [0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
    [1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
    [background][left]       overlay=shortest=1       [background+left];
    [background+left][right] overlay=shortest=1:x=100 [left+right]
    "
    
  • 通过对某个部分应用 delogo 过滤器来屏蔽视频的 10-20 秒
    ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
    -vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
    masked.avi
    
  • 级联链接多个覆盖层
    nullsrc=s=200x200 [bg];
    testsrc=s=100x100, split=4 [in0][in1][in2][in3];
    [in0] lutrgb=r=0, [bg]   overlay=0:0     [mid0];
    [in1] lutrgb=g=0, [mid0] overlay=100:0   [mid1];
    [in2] lutrgb=b=0, [mid1] overlay=0:100   [mid2];
    [in3] null,       [mid2] overlay=100:100 [out0]
    

11.185 overlay_cuda

将一个视频覆盖在另一个视频之上。

这是 overlay 滤镜的 CUDA 变体。它只接受 CUDA 帧。底层的输入像素格式必须匹配。

它接受两个输入,并有一个输出。第一个输入是“主要”视频,第二个输入覆盖在其上。

它接受以下参数

x
y

设置覆盖视频在主视频上的 x 和 y 坐标的表达式。

它们可以包含以下参数

main_w, W
main_h, H

主输入的宽度和高度。

overlay_w, w
overlay_h, h

覆盖输入的宽度和高度。

x
y

计算出的 xy 的值。它们为每个新帧计算。

n

主输入帧的序号索引,从 0 开始。

pos

主输入帧在文件中的字节偏移位置,如果未知则为 NAN。已弃用,请勿使用。

t

主输入帧的时间戳,以秒为单位表示,如果未知则为 NAN。

两个表达式的默认值都为 "0"。

eval

设置何时计算 xy 的表达式。

它接受以下值

init

在过滤器初始化期间或处理命令时计算表达式一次。

为每个传入的帧计算表达式

默认值为 frame

eof_action

请参阅framesync

shortest

请参阅framesync

repeatlast

请参阅framesync

此滤镜还支持 framesync 选项。

11.186 owdenoise

应用过完备小波去噪器。

该滤波器接受以下选项

深度

设置深度。

较大的深度值会更多地去噪较低频率分量,但会减慢过滤速度。

必须是 8-16 范围内的整数,默认值为 8

luma_strength, ls

设置亮度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

chroma_strength, cs

设置色度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

11.187 pad

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下参数

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,以便输入图像在填充区域内居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

color 的默认值为 “black”。

eval

指定何时计算 widthheightxy 表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算表达式一次。

frame

为每个传入的帧计算表达式。

默认值为 ‘init’。

aspect

填充到宽高比,而不是分辨率。

widthheightxy 选项的值是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

ow
oh

这些与 out_wout_h 相同。

x
y

x 和 y 偏移量,由 xy 表达式指定,如果尚未指定,则为 NAN。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

11.187.1 示例

  • 向输入视频添加颜色为“紫色”的填充。输出视频大小为 640x480,输入视频的左上角位于第 0 列,第 40 行。
    pad=640:480:0:40:violet
    

    上面的示例等效于以下命令:

    pad=width=640:height=480:x=0:y=40:color=violet
    
  • 填充输入以获得尺寸增加 3/2 的输出,并将输入视频放置在填充区域的中心。
    pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
    
  • 填充输入以获得一个大小等于输入宽度和高度之间最大值的方形输出,并将输入视频放置在填充区域的中心。
    pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
    
  • 填充输入以获得 16:9 的最终宽高比。
    pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
    
  • 对于变形视频,为了正确设置输出显示宽高比,有必要根据以下关系式在表达式中使用 sar
    (ih * X / ih) * sar = output_dar
    X = output_dar / sar
    

    因此,之前的示例需要修改为:

    pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
    
  • 将输出大小加倍,并将输入视频放置在输出填充区域的右下角。
    pad="2*iw:2*ih:ow-iw:oh-ih"
    

11.188 palettegen

为整个视频流生成一个调色板。

它接受以下选项

max_colors

设置调色板中量化的最大颜色数。注意:调色板仍然包含 256 种颜色;未使用的调色板条目将为黑色。

reserve_transparent

创建一个最多包含 255 种颜色的调色板,并将最后一个颜色保留为透明色。保留透明色对于 GIF 优化很有用。如果不设置,调色板中的最大颜色数将为 256。对于独立图像,您可能需要禁用此选项。默认情况下设置。

transparency_color

设置将用作透明背景的颜色。

stats_mode

设置统计模式。

它接受以下值

full

计算完整帧的直方图。

diff

仅计算与前一帧不同的部分的直方图。如果背景是静态的,这可能有助于更重视输入的移动部分。

single

为每一帧计算新的直方图。

默认值为 full

该滤镜还导出帧元数据 lavfi.color_quant_rationb_color_in / nb_color_out),您可以使用它来评估调色板的颜色量化程度。此信息在 info 日志级别也可见。

11.188.1 示例

  • 使用 ffmpeg 生成给定视频的代表性调色板:
    ffmpeg -i input.mkv -vf palettegen palette.png
    

11.189 paletteuse

使用调色板对输入视频流进行降采样。

该滤镜需要两个输入:一个视频流和一个调色板。调色板必须是一个 256 像素的图像。

它接受以下选项

dither

选择抖动模式。可用的算法有:

bayer

有序的 8x8 拜耳抖动(确定性)

heckbert

Paul Heckbert 于 1982 年定义的抖动(简单的误差扩散)。注意:此抖动有时被认为是“错误的”,仅作为参考。

floyd_steinberg

Floyd 和 Steingberg 抖动(误差扩散)

sierra2

Frankie Sierra 抖动 v2(误差扩散)

sierra2_4a

Frankie Sierra 抖动 v2 “精简版”(误差扩散)

sierra3

Frankie Sierra 抖动 v3(误差扩散)

burkes

Burkes 抖动(误差扩散)

atkinson

Bill Atkinson 在 Apple Computer 提出的 Atkinson 抖动(误差扩散)

none

禁用抖动。

默认值为 sierra2_4a

bayer_scale

当选择 bayer 抖动时,此选项定义图案的比例(网格图案的可见程度)。较低的值意味着更可见的图案,但带状效应较少,较高的值意味着更不可见的图案,但以更多的带状效应为代价。

该选项必须是 [0,5] 范围内的整数值。默认值为 2

diff_mode

如果设置,则定义要处理的区域。

rectangle

仅重新处理变化的矩形。这类似于 GIF 裁剪/偏移压缩机制。如果只有一部分图像发生变化,则此选项可以提高速度,并且有诸如将误差扩散 dither 的范围限制在移动场景边界矩形的用例(如果场景没有太大变化,这会导致更具确定性的输出,从而减少移动噪声并更好地压缩 GIF)。

默认值为 none

new

为每个输出帧使用新的调色板。

alpha_threshold

设置透明度的 alpha 阈值。高于此阈值的 alpha 值将被视为完全不透明,低于此阈值的 alpha 值将被视为完全透明。

该选项必须是 [0,255] 范围内的整数值。默认值为 128

11.189.1 示例

  • 使用调色板(例如使用 palettegen 生成)使用 ffmpeg 对 GIF 进行编码。
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

11.190 透视

校正未垂直于屏幕记录的视频的透视。

下面是接受的参数的描述。

x0
y0
x1
y1
x2
y2
x3
y3

设置左上角、右上角、左下角和右下角的坐标表达式。默认值是 0:0:W:0:0:H:W:H,透视不会改变。如果 sense 选项设置为 source,则指定的点将发送到目标角的顶点。如果 sense 选项设置为 destination,则源的顶点将发送到指定的坐标。

表达式可以使用以下变量

W
H

视频帧的宽度和高度。

in

输入帧计数。

on

输出帧计数。

interpolation

设置透视校正的插值。

它接受以下值

linear
cubic

默认值为 ‘linear’。

sense

设置坐标选项的解释。

它接受以下值

0, source

将给定坐标指定的源中的点发送到目标的角。

1, destination

将源的角发送到给定坐标指定的目标中的点。

默认值为 ‘source’。

eval

设置何时评估坐标 x0,y0,...x3,y3 的表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算表达式一次

frame

为每个传入帧计算表达式

默认值为 ‘init’。

11.191 相位

将隔行扫描视频延迟一个场时间,以便更改场顺序。

预期用途是修复以与胶片到视频传输相反的场顺序捕获的 PAL 电影。

下面是接受的参数的描述。

mode

设置相位模式。

它接受以下值

t

捕获场顺序为顶场优先,传输底场优先。过滤器将延迟底场。

b

捕获场顺序为底场优先,传输顶场优先。过滤器将延迟顶场。

p

以相同的场顺序捕获和传输。此模式仅用于记录其他选项以供参考,但如果您实际选择它,则过滤器将忠实地不执行任何操作。

a

根据场标志自动确定捕获场序,传输相反场序。过滤器使用场标志逐帧在 ‘t’ 和 ‘b’ 模式之间选择。如果没有场信息可用,则其工作方式与 ‘u’ 相同。

u

捕获场序未知或变化,传输相反场序。过滤器通过分析图像并选择产生最佳场匹配的方案,逐帧在 ‘t’ 和 ‘b’ 之间选择。

T

捕获顶场优先,传输场序未知或变化。过滤器使用图像分析在 ‘t’ 和 ‘p’ 之间选择。

B

捕获底场优先,传输场序未知或变化。过滤器使用图像分析在 ‘b’ 和 ‘p’ 之间选择。

A

捕获场序由场标志确定,传输场序未知或变化。过滤器使用场标志和图像分析在 ‘t’、‘b’ 和 ‘p’ 之间选择。如果没有场信息可用,则其工作方式与 ‘U’ 相同。这是默认模式。

U

捕获和传输场序都未知或变化。过滤器仅使用图像分析在 ‘t’、‘b’ 和 ‘p’ 之间选择。

11.191.1 命令

此过滤器支持以上所有选项作为 命令

11.192 光敏性

减少视频中的各种闪烁,以帮助患有癫痫的用户。

它接受以下选项

帧数,f

设置过滤时使用的帧数。默认值为 30。

threshold, t(阈值,t)

设置检测阈值因子。默认值为 1。较低的值表示更严格。

skip

设置采样帧时跳过的像素数。默认值为 1。允许的范围为 1 到 1024。

旁路

保持帧不变。默认禁用。

11.193 像素描述测试

像素格式描述符测试过滤器,主要用于内部测试。输出视频应与输入视频相同。

例如

format=monow, pixdesctest

可用于测试单色像素格式描述符的定义。

11.194 像素化

对视频流应用像素化处理。

该滤波器接受以下选项

宽度,w
高度,h

设置用于像素化的块尺寸。默认值为 16

模式, m

设置使用的像素化模式。

可能的值为

avg
min
max

默认值为 avg

平面,p

设置要过滤的平面。默认情况下,过滤所有平面。

11.194.1 命令

此过滤器支持所有选项作为命令

11.195 像素范围

显示颜色通道的样本值。主要用于检查颜色和色阶。支持的最小分辨率为 640x480。

这些过滤器接受以下选项

x

设置示波器 X 位置,X 轴上的相对偏移。

y

设置示波器 Y 位置,Y 轴上的相对偏移。

w

设置示波器宽度。

h

设置示波器高度。

o

设置窗口不透明度。此窗口还包含像素区域的统计信息。

wx

设置窗口 X 位置,X 轴上的相对偏移。

wy

设置窗口 Y 位置,Y 轴上的相对偏移。

11.195.1 命令

此滤镜支持与选项相同的 commands

11.196 pp

使用 libpostproc 启用指定的后处理子过滤器链。此库应使用 GPL 构建 (--enable-gpl) 自动选择。子过滤器必须用 ‘/’ 分隔,可以通过在前面加上 ‘-’ 来禁用。每个子过滤器和某些选项都有一个可以互换使用的短名称和长名称,即 dr/dering 是相同的。

这些过滤器接受以下选项

子过滤器

设置后处理子过滤器字符串。

所有子过滤器共享用于确定其范围的通用选项

a/autoq

为此子过滤器遵循质量命令。

c/chrom

也进行色度过滤(默认)。

y/nochrom

仅进行亮度过滤(不进行色度过滤)。

n/noluma

仅进行色度过滤(不进行亮度过滤)。

这些选项可以附加在子过滤器名称之后,用 ‘|’ 分隔。

可用的子过滤器有

hb/hdeblock[|difference[|flatness]]

水平去块过滤器

difference

差异因子,值越高表示去块效果越强(默认值:32)。

flatness

平坦度阈值,值越低表示去块效果越强(默认值:39)。

vb/vdeblock[|difference[|flatness]]

垂直去块过滤器

difference

差异因子,值越高表示去块效果越强(默认值:32)。

flatness

平坦度阈值,值越低表示去块效果越强(默认值:39)。

ha/hadeblock[|difference[|flatness]]

精确水平去块过滤器

difference

差异因子,值越高表示去块效果越强(默认值:32)。

flatness

平坦度阈值,值越低表示去块效果越强(默认值:39)。

va/vadeblock[|difference[|flatness]]

精确垂直去块过滤器

difference

差异因子,值越高表示去块效果越强(默认值:32)。

flatness

平坦度阈值,值越低表示去块效果越强(默认值:39)。

水平和垂直去块过滤器共享差异和平坦度值,因此您无法设置不同的水平和垂直阈值。

h1/x1hdeblock

实验性水平去块过滤器

v1/x1vdeblock

实验性垂直去块过滤器

dr/dering

去振铃过滤器

tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], 时间噪声降低器
阈值1

值越大 -> 滤波强度越高

阈值2

值越大 -> 滤波强度越高

阈值3

值越大 -> 滤波强度越高

al/autolevels[:f/fullyrange], 自动亮度/对比度校正
f/fullyrange

将亮度拉伸到 0-255

lb/linblenddeint

线性混合去隔行过滤器,通过使用 (1 2 1) 过滤器过滤所有行来去隔行给定块。

li/linipoldeint

线性插值去隔行过滤器,通过对每隔一行进行线性插值来去隔行给定块。

ci/cubicipoldeint

三次插值去隔行过滤器,通过对每隔一行进行三次插值来去隔行给定块。

md/mediandeint

中值去隔行过滤器,通过对每隔一行应用中值过滤器来去隔行给定块。

fd/ffmpegdeint

FFmpeg 去隔行过滤器,通过使用 (-1 4 2 4 -1) 过滤器过滤每隔一行来去隔行给定块。

l5/lowpass5

垂直应用的 FIR 低通去隔行过滤器,通过使用 (-1 2 6 2 -1) 过滤器过滤所有行来去隔行给定块。

fq/forceQuant[|quantizer]

使用您指定的常量量化器覆盖来自输入的量化表。

quantizer

要使用的量化器

de/default

默认的 pp 过滤器组合 (hb|a,vb|a,dr|a)

fa/fast

快速 pp 过滤器组合 (h1|a,v1|a,dr|a)

ac

高质量 pp 过滤器组合 (ha|a|128|7,va|a,dr|a)

11.196.1 示例

  • 应用水平和垂直去块、去振铃和自动亮度/对比度
    pp=hb/vb/dr/al
    
  • 应用默认过滤器,不进行亮度/对比度校正
    pp=de/-al
    
  • 应用默认过滤器和时间去噪器
    pp=default/tmpnoise|1|2|3
    
  • 仅对亮度应用去块,并根据可用的 CPU 时间自动打开或关闭垂直去块
    pp=hb|y/vb|a
    

11.197 pp7

应用后处理过滤器 7。它是 spp 过滤器的变体,类似于 spp = 6 的 7 点 DCT,其中仅在 IDCT 之后使用中心样本。

该滤波器接受以下选项

qp

强制使用恒定的量化参数。它接受 0 到 63 范围内的整数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式有

hard

设置硬阈值。

soft

设置软阈值(去振铃效果更好,但可能更模糊)。

medium

设置中等阈值(效果良好,默认)。

11.198 预乘

使用第二流的第一平面作为 alpha,对输入视频流应用 alpha 预乘效果。

两个流必须具有相同的尺寸和相同的像素格式。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

inplace

不需要第二个输入进行处理,而是使用来自输入流的 alpha 平面。

11.199 普瑞维特

对输入视频流应用 Prewitt 算子。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

11.199.1 命令

此过滤器支持以上所有选项作为 命令

11.200 伪彩色

使用伪彩色更改视频中的帧颜色。

此过滤器接受以下选项

c0

设置像素第一分量表达式

c1

设置像素第二分量表达式

c2

设置像素第三分量表达式

c3

设置像素第四分量表达式,对应于 alpha 分量

索引,i

设置要用作更改颜色基础的分量

preset, p

选择一个内置的 LUT。默认设置为无。

可用的 LUT

magma
inferno
plasma
viridis
turbo
cividis
range1
range2
shadows
highlights
solar
nominal
preferred
total
频谱
冷色调
heat
火热色调
蓝色调
绿色调
螺旋色调
opacity

设置输出颜色的不透明度。允许的范围是从 0 到 1。默认值设置为 1。

每个表达式选项指定用于计算相应像素分量值的查找表的表达式。

这些表达式可以包含以下常量和函数

w
h

输入宽度和高度。

像素分量的输入值。

ymin、umin、vmin、amin

允许的最小分量值。

ymax、umax、vmax、amax

允许的最大分量值。

所有表达式默认为 "val"。

11.200.1 命令

此过滤器支持以上所有选项作为 命令

11.200.2 示例

  • 将过高的亮度值更改为渐变
    pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
    

11.201 psnr

获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。

此滤镜接受两个输入视频,第一个输入被视为“主”源,并保持不变地传递到输出。第二个输入用作计算 PSNR 的“参考”视频。

为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,并且这些帧会逐个进行比较。

获得的平均 PSNR 通过日志系统打印出来。

该滤镜存储每个帧的累积 MSE(均方误差),并在处理结束时对所有帧进行平均,并应用以下公式来获得 PSNR

PSNR = 10*log10(MAX^2/MSE)

其中 MAX 是图像每个分量最大值的平均值。

以下是对接受参数的描述。

stats_file, f

如果指定,滤镜将使用指定的文件来保存每个单独帧的 PSNR。当文件名等于 "-" 时,数据将发送到标准输出。

stats_version

指定要使用的统计文件格式的版本。每个格式的详细信息如下所述。默认值为 1。

stats_add_max

确定是否将最大值输出到统计日志。默认值为 0。需要 stats_version >= 2。如果设置此项且 stats_version < 2,则滤镜将返回错误。

此滤镜还支持 framesync 选项。

如果选择 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。

如果指定大于 1 的 stats_version,则在每帧对统计列表之前会有一个标题行,其中键值对遵循以下参数的帧格式

psnr_log_version

日志文件格式的版本。将与 stats_version 匹配。

fields

日志中包含的每帧对参数的逗号分隔列表。

下面是每个显示的每帧对参数的描述

n

输入帧的顺序编号,从 1 开始

mse_avg

比较的帧的逐像素平均差的均方误差,在所有图像分量上取平均值。

mse_y、mse_u、mse_v、mse_r、mse_g、mse_b、mse_a

比较的帧的逐像素平均差的均方误差,用于由后缀指定的分量。

psnr_y、psnr_u、psnr_v、psnr_r、psnr_g、psnr_b、psnr_a

比较的帧的峰值信噪比,用于由后缀指定的分量。

max_avg、max_y、max_u、max_v

每个通道的最大允许值,以及所有通道的平均值。

11.201.1 示例

  • 例如
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] psnr="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件 ref_movie.mpg 进行比较。每个单独帧的 PSNR 存储在 stats.log 中。

  • 另一个具有不同容器的示例
    ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
    

11.202 上拉

下拉反转(反向电视电影)滤镜,能够处理混合硬电视电影、24000/1001 fps 逐行和 30000/1001 fps 逐行内容。

pullup 滤镜旨在利用未来的上下文做出决策。此滤镜是无状态的,因为它不会锁定要遵循的模式,而是会向前查看后续的场,以便识别匹配项并重建逐行帧。

为了生成具有均匀帧率的内容,请在 pullup 之后插入 fps 滤镜,如果输入帧率为 29.97fps,则使用 fps=24000/1001,对于 30fps 和(罕见的)电视电影 25fps 输入,则使用 fps=24

该滤波器接受以下选项

jl
jr
jt
jb

这些选项设置要忽略的图像左侧、右侧、顶部和底部“垃圾”量。左侧和右侧的单位为 8 像素,而顶部和底部的单位为 2 行。默认值为每侧 8 像素。

sb

设置严格的中断。将此选项设置为 1 将减少滤镜生成偶尔不匹配帧的可能性,但它也可能导致在高运动序列期间丢弃过多的帧。相反,将其设置为 -1 将使滤镜更容易匹配场。这可能有助于处理场之间存在轻微模糊的视频,但也可能导致输出中出现隔行扫描帧。默认值为 0

mp

设置要使用的度量平面。它接受以下值

l

使用亮度平面。

u

使用色度蓝色平面。

v

使用色度红色平面。

可以设置此选项以使用色度平面而不是默认的亮度平面进行滤镜的计算。这可以提高非常干净的源材料的精度,但更可能降低精度,特别是如果存在色度噪声(彩虹效应)或任何灰度视频。将 mp 设置为色度平面的主要目的是减少 CPU 负载,并使 pullup 能够在慢速机器上实时使用。

为了获得最佳结果(输出文件中没有重复的帧),有必要更改输出帧率。例如,要反向电视电影 NTSC 输入

ffmpeg -i input -vf pullup -r 24000/1001 ...

11.203 qp

更改视频量化参数 (QP)。

此滤波器接受以下选项

qp

设置量化参数的表达式。

该表达式通过 eval API 计算,并且可以包含以下常量等

known

如果索引不是 129,则为 1,否则为 0。

qp

从 -129 到 128 的顺序索引。

11.203.1 示例

  • 类似以下等式
    qp=2+2*sin(PI*qp)
    

11.204 qrencode

使用 libqrencode 库(请参阅 https://fukuchi.org/works/qrencode/)生成 QR 码,并将其叠加在当前帧的顶部。

要启用此滤镜的编译,您需要使用 --enable-libqrencode 配置 FFmpeg。

QR 码从提供的文本或文本模式生成。根据指定的选项,相应的 QR 码将缩放并叠加到视频输出中。

如果没有指定文本,则不会叠加 QR 码。

此过滤器接受以下选项

qrcode_width, q
padded_qrcode_width, Q

指定渲染的 QR 码宽度的表达式,无论是否带有填充。 qrcode_width 表达式可以引用 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参阅 qrencode 表达式 部分。

x
y

指定用于定位填充的 QR 码左上角的表达式。 x 表达式可以引用 y 表达式设置的值,反之亦然。

默认情况下,xy 设置为 0,这意味着 QR 码放置在输入的左上角。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参阅 qrencode 表达式 部分。

case_sensitive, cs

指示 libqrencode 使用区分大小写的编码。默认情况下启用此功能。可以禁用此功能以减小 QR 编码的大小。

level, l

指定二维码编码的纠错级别。纠错级别越高,编码尺寸会越大,但代码对损坏的鲁棒性会更强。最低级别为 L

它接受以下值

L
M
Q
H
expansion

选择如何展开输入文本。可以是 none,或者 normal(默认)。详情请参阅下方的qrencode 文本展开部分。

text
textfile

定义要渲染的文本。如果两者都未指定,则不会编码 QR 码(仅为一个空的彩色框架)。

如果启用了展开,则文本被视为文本模板,使用 qrencode 展开机制。详情请参阅下方的qrencode 文本展开部分。

背景颜色,bc
前景颜色,fc

设置 QR 码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

有关颜色选项的语法,请查阅 ffmpeg-utils 手册中的“颜色”部分

11.204.1 qrencode 表达式

选项设置的表达式包含以下常量和函数。

dar

输入显示宽高比,它与 (w / h) * sar 相同

时长

当前帧的持续时间,以秒为单位

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

main_h, H

输入高度

main_w, W

输入宽度

n

输入帧数,从 0 开始

pict_type

表示图片类型的数字

qr_w,w

编码的 QR 码的宽度

rendered_qr_w,q
rendered_padded_qr_w,Q

渲染的 QR 码的宽度,不带和带填充。

这些参数允许 qQ 表达式相互引用,因此您可以例如指定 q=3/4*Q

rand(min, max)

返回 minmax 之间的随机数

sar

输入样本的纵横比

t

时间戳,以秒为单位表示,如果输入时间戳未知,则为 NAN

x
y

绘制文本的 x 和 y 偏移坐标。

这些参数允许 xy 表达式相互引用,因此例如可以指定 y=x/dar

11.204.2 qrencode 文本扩展

如果 expansion 设置为 none,则按原样打印文本。

如果 expansion 设置为 normal(默认值),则使用以下扩展机制。

反斜杠字符“\”后跟任何字符,始终扩展为第二个字符。

%{...} 形式的序列将被扩展。大括号之间的文本是函数名称,后跟用“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应转义它们。

请注意,它们可能也必须作为过滤器参数字符串中的 text 选项的值,以及作为过滤器图形描述中的过滤器参数进行转义,并且可能还必须为 shell 进行转义,这构成了多达四个级别的转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用

n, frame_num

返回帧号

pts

返回当前帧的展示时间戳。

它可以接受最多两个参数。

第一个参数是时间戳的格式;它默认为 flt,表示以秒为单位的十进制数字,精确到微秒;hms 代表格式化的 [-]HH:MM:SS.mmm 时间戳,精确到毫秒。gmtime 代表格式化为 UTC 时间的帧的时间戳;localtime 代表格式化为本地时区时间的帧的时间戳。如果格式设置为 hms24hh,则时间以 24 小时格式(00-23)格式化。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 localtimegmtime,可以提供第三个参数:一个 strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

expr, e

评估表达式的值并输出为 double。

它必须接受一个参数,指定要评估的表达式,该表达式接受 qrencode_expressions 中定义的常量和函数。

expr_formatted,ef

评估表达式的值并输出为格式化的字符串。

第一个参数是要评估的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为“x”、“X”、“d”和“u”。它们与 printf 函数中的处理方式完全相同。第三个参数是可选的,用于设置输出所占用的位置数。它可用于从左侧添加零填充。

gmtime

过滤器正在运行的时间,以 UTC 表示。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串被扩展以支持变量 %[1-6]N,该变量打印秒的小数部分,并可选地指定位数。

localtime

过滤器正在运行的时间,以本地时区表示。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串被扩展以支持变量 %[1-6]N,该变量打印秒的小数部分,并可选地指定位数。

metadata

帧元数据。接受一个或两个参数。

第一个参数是强制性的,并指定元数据键。

第二个参数是可选的,并指定一个默认值,当找不到元数据键或元数据键为空时使用。

可以通过检查运行 ffprobe -show_frames 打印的每个帧部分中包含的以 TAG 开头的条目来识别可用的元数据。

在通向 qrencode 滤镜的滤镜中生成的字符串元数据也可用。

rand(min, max)

返回 minmax 之间的随机数

11.204.3 示例

  • 生成一个使用默认大小编码指定文本的 QR 码,并使用默认大小覆盖在输入视频的左上角
    qrencode=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉色
    qrencode=text=www.ffmpeg.org:[email protected]:fc=blue
    
  • 将 QR 码放置在输入视频的右下角
    qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
    
  • 生成宽度为 200 像素并带有填充的 QR 码,使填充后的宽度为 QR 码宽度的 4/3
    qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成填充后宽度为 200 像素并带有填充的 QR 码,使 QR 码的宽度为填充后宽度的 3/4
    qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 使 QR 码为输入视频宽度的一部分
    qrencode=text=www.ffmpeg.org:q=W/5
    
  • 生成一个编码帧号的 QR 码
    qrencode=text=%{n}
    
  • 生成一个编码 GMT 时间戳的 QR 码
    qrencode=text=%{gmtime}
    
  • 生成一个编码为浮点数的时间戳的 QR 码
    qrencode=text=%{pts}
    

11.205 quirc

使用 libquirc 库(请参阅 https://github.com/dlbeer/quirc/)识别和解码 QR 码,并将识别到的 QR 码位置和有效负载打印为元数据。

要启用此滤镜的编译,您需要使用 --enable-libquirc 配置 FFmpeg。

对于输入视频中找到的每个 QR 码,都会添加一些前缀为 lavfi.quirc.N 的元数据条目,其中 N 是与 QR 码关联的索引,从 0 开始。

下面是每个元数据值的描述

lavfi.quirc.count

找到的 QR 码的数量,如果没有找到则不设置

lavfi.quirc.N.corner.M.x
lavfi.quirc.N.coreer.M.y

包含 QR 码的正方形的四个角的 x/y 位置,其中 M 是角的索引,从 0 开始

lavfi.quirc.N.payload

QR 码的有效负载

11.206 随机

以随机顺序从帧的内部缓存中刷新视频帧。不会丢弃任何帧。灵感来自 frei0r nervous 滤镜。

frames

设置内部缓存的帧数大小,范围从 2512。默认值为 30

seed(种子)

设置随机数生成器的种子,必须是介于 0UINT32_MAX 之间的整数。如果未指定,或显式设置为小于 0,则滤镜将尽最大努力尝试使用良好的随机种子。

11.207 readeia608

从视频帧的顶部行读取隐藏式字幕 (EIA-608) 信息。

此滤镜为 lavfi.readeia608.X.cclavfi.readeia608.X.line 添加帧元数据,其中 X 是识别的 EIA-608 数据的行号(从 0 开始)。下面是每个元数据值的描述

lavfi.readeia608.X.cc

以 EIA-608 数据存储的两个字节(以十六进制打印)。

lavfi.readeia608.X.line

识别和读取 EIA-608 数据的行号。

此过滤器接受以下选项

scan_min

设置开始扫描 EIA-608 数据的行。默认值为 0

scan_max

设置结束扫描 EIA-608 数据的行。默认值为 29

spw

设置为同步代码检测保留的宽度比率。默认值为 0.27。允许的范围为 [0.1 - 0.7]

chp

启用奇偶校验位检查。如果出现奇偶校验错误,则滤镜将为该字符输出 0x00。默认值为 false。

lp

在进一步处理之前对行进行低通滤波。默认启用。

11.207.1 命令

此过滤器支持以上所有选项作为 命令

11.207.2 示例

  • 输出带有展示时间和前两行识别的 EIA-608 字幕数据的 csv 文件。
    ffprobe -f lavfi -i movie=captioned_video.mov,readeia608 -show_entries frame=pts_time:frame_tags=lavfi.readeia608.0.cc,lavfi.readeia608.1.cc -of csv
    

11.208 readvitc

从视频帧的顶部行读取垂直消隐期时间码 (VITC) 信息。

如果检测到有效的时间码,则滤镜会添加帧元数据键 lavfi.readvitc.tc_str,其中包含时间码值。如果已找到时间码数据,则其他元数据键 lavfi.readvitc.found 设置为 0/1。

此过滤器接受以下选项

scan_max

设置要扫描 VITC 数据的最大行数。如果该值设置为 -1,则会扫描整个视频帧。默认值为 45

thr_b

设置黑色的亮度阈值。接受范围为 [0.0,1.0] 的浮点数,默认值为 0.2。该值必须等于或小于 thr_w

thr_w

设置白色的亮度阈值。接受范围为 [0.0,1.0] 的浮点数,默认值为 0.6。该值必须等于或大于 thr_b

11.208.1 示例

  • 检测并将 VITC 数据绘制到视频帧上;如果未检测到有效的 VITC,则绘制 --:--:--:-- 作为占位符
    ffmpeg -i input.avi -filter:v 'readvitc,drawtext=fontfile=FreeMono.ttf:text=%{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--}:x=(w-tw)/2:y=400-ascent'
    

11.209 重映射

使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。

位置 (X, Y) 处的目标像素将从源 (x, y) 位置选取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则将为目标像素使用零值。

Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap 和 Ymap 输入视频流为 16 位深度,单通道。

format

指定此滤镜的输出像素格式。可以是 colorgray。默认值为 color

fill

指定未映射像素的颜色。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“颜色”部分。默认颜色为 black

11.210 去噪

removegrain 滤镜是用于逐行视频的空间降噪器。

m0

设置第一个平面的模式。

m1

设置第二个平面的模式。

m2

设置第三个平面的模式。

m3

设置第四个平面的模式。

模式范围为 0 到 24。下面是每个模式的描述

0

保持输入平面不变。默认值。

1

使用 8 个相邻像素的最小值和最大值来裁剪当前像素。

2

使用 8 个相邻像素的第二小值和第二大值来裁剪当前像素。

3

使用 8 个相邻像素的第三小值和第三大值来裁剪当前像素。

4

使用 8 个相邻像素的第四小值和第四大值来裁剪当前像素。这等效于中值滤波器。

5

对线条敏感的裁剪,提供最小的更改。

6

对线条敏感的裁剪,中间级别。

7

对线条敏感的裁剪,中间级别。

8

对线条敏感的裁剪,中间级别。

9

在线条上进行对线条敏感的裁剪,其中相邻像素最接近。

10

将目标像素替换为最接近的相邻像素。

11

[1 2 1] 水平和垂直内核模糊。

12

与模式 11 相同。

13

Bob 模式,从相邻像素最接近的行插值出顶部场。

14

Bob 模式,从相邻像素最接近的行插值出底部场。

15

Bob 模式,插值顶部场。与 13 相同,但具有更复杂的插值公式。

16

Bob 模式,插值底部场。与 14 相同,但具有更复杂的插值公式。

17

分别使用每对相对的相邻像素的最大值和最小值中的最小值和最大值来裁剪当前像素。

18

使用与当前像素距离最小的相对相邻像素进行对线条敏感的裁剪。

19

将像素替换为其 8 个相邻像素的平均值。

20

对 9 个像素进行平均 ([1 1 1] 水平和垂直模糊)。

21

使用相对相邻像素的平均值来裁剪像素。

22

与模式 21 相同,但更简单、更快。

23

小边缘和光晕去除,但据称无用。

24

与 23 类似。

11.211 移除标志

使用图像文件确定哪些像素构成徽标,从而抑制电视节目台标。它的工作原理是用相邻像素填充构成徽标的像素。

该滤波器接受以下选项

文件名, f

设置滤镜位图文件,该文件可以是 libavformat 支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度匹配。

提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果您对徽标使用白色 (255),对其余部分使用黑色 (0),您会很安全。为了制作滤镜位图,建议截取一个带有可见徽标的黑色帧,然后使用阈值滤镜,然后使用腐蚀滤镜一次或两次。

如果需要,可以手动修复小的斑点。请记住,如果徽标像素没有被覆盖,则滤镜质量会大大降低。将太多像素标记为徽标的一部分不会造成太大损害,但这会增加覆盖图像所需的模糊量,并且会破坏不必要的信息,并且额外的像素会降低大型徽标的速度。

11.212 重复场

此滤镜使用来自 Video ES 标头的 repeat_field 标志,并根据其值硬性重复场。

11.213 反转

反转视频片段。

警告:此过滤器需要内存来缓冲整个剪辑,因此建议进行修剪。

11.213.1 示例

  • 获取剪辑的前 5 秒,然后将其反转。
    trim=end=5,reverse
    

11.214 rgbashift

水平和/或垂直移动 R/G/B/A 像素。

该滤波器接受以下选项

rh

设置红色水平移动量。

rv

设置红色垂直移动量。

gh

设置绿色水平移动量。

gv

设置绿色垂直移动量。

bh

设置蓝色水平移动量。

bv

设置蓝色垂直移动量。

ah

设置 Alpha 水平移动量。

av

设置 Alpha 垂直移动量。

edge

设置边缘模式,可以是smear(默认)或warp

11.214.1 命令

此过滤器支持以上所有选项作为 命令

11.215 罗伯茨

将 roberts 交叉算子应用于输入视频流。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

11.215.1 命令

此过滤器支持以上所有选项作为 命令

11.216 旋转

将视频按以弧度表示的任意角度旋转。

该滤波器接受以下选项

以下是可选参数的说明。

角度, a

设置输入视频顺时针旋转的角度的表达式,以弧度表示。负值将导致逆时针旋转。默认情况下,它设置为 "0"。

此表达式针对每一帧进行求值。

out_w, ow

设置输出宽度表达式,默认值为 "iw"。此表达式在配置期间仅求值一次。

out_h, oh

设置输出高度表达式,默认值为 "ih"。此表达式在配置期间仅求值一次。

双线性

如果设置为 1,则启用双线性插值;值为 0 则禁用双线性插值。默认值为 1。

填充颜色, c

设置用于填充未被旋转图像覆盖的输出区域的颜色。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果背景永远不会显示,则很有用)。

默认值为“black”。

角度和输出大小的表达式可以包含以下常量和函数

n

输入帧的顺序编号,从 0 开始。在第一帧被过滤之前,它始终为 NAN。

t

输入帧的时间(以秒为单位),在配置滤镜时设置为 0。在第一帧被过滤之前,它始终为 NAN。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

in_w, iw
in_h, ih

输入视频的宽度和高度

out_w, ow
out_h, oh

输出宽度和高度,即 widthheight 表达式指定的填充区域的大小

rotw(a)
roth(a)

完全包含旋转 a 弧度的输入视频所需的最小宽度/高度。

这些仅在计算 out_wout_h 表达式时可用。

11.216.1 示例

  • 将输入顺时针旋转 PI/6 弧度
    rotate=PI/6
    
  • 将输入逆时针旋转 PI/6 弧度
    rotate=-PI/6
    
  • 将输入顺时针旋转 45 度
    rotate=45*PI/180
    
  • 应用周期为 T 的恒定旋转,从 PI/3 的角度开始
    rotate=PI/3+2*PI*t/T
    
  • 使输入视频旋转以 T 秒为周期,幅度为 A 弧度的方式振荡
    rotate=A*sin(2*PI/T*t)
    
  • 旋转视频,选择输出大小,以便整个旋转输入视频始终完全包含在输出中
    rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
    
  • 旋转视频,减小输出大小,以便永远不显示背景
    rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
    

11.216.2 命令

该过滤器支持以下命令

a, 角度

设置角度表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

11.217 sab

应用形状自适应模糊。

该滤波器接受以下选项

luma_radius, lr

设置亮度模糊滤镜强度,必须是 0.1-4.0 范围内的值,默认值为 1.0。较大的值将导致图像更模糊,并且处理速度更慢。

亮度预滤镜半径, lpfr

设置亮度预滤镜半径,必须是 0.1-2.0 范围内的值,默认值为 1.0。

luma_strength, ls

设置亮度像素之间仍然被认为的最大差异,必须是 0.1-100.0 范围内的值,默认值为 1.0。

chroma_radius, cr

设置色度模糊滤镜强度,必须是 -0.9-4.0 范围内的值。较大的值将导致图像更模糊,并且处理速度更慢。

色度预滤镜半径, cpfr

设置色度预滤镜半径,必须是 -0.9-2.0 范围内的值。

chroma_strength, cs

设置像素之间色度最大差异,该值仍被视为有效,必须在 -0.9 到 100.0 范围内。

每个色度选项值,如果未明确指定,则设置为对应的亮度选项值。

11.218 缩放

使用 libswscale 库缩放(调整大小)输入视频。

缩放滤镜通过更改输出采样宽高比,强制输出显示宽高比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,则缩放滤镜会将输入转换为请求的格式。

11.218.1 选项

该滤镜接受以下选项,libswscale 缩放器支持的任何选项,以及任何 framesync 选项。

有关完整的缩放器选项列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册

宽度,w
高度,h

设置输出视频维度表达式。默认值为输入维度。

如果 widthw 的值为 0,则输出使用输入宽度。如果 heighth 的值为 0,则输出使用输入高度。

如果只有一个值是 -n,且 n >= 1,则缩放滤镜将使用一个值来保持输入图像的宽高比,该值从其他指定的维度计算得出。之后,它还会确保计算出的维度可以被 n 整除,并在必要时调整该值。

如果两个值均为 -n,且 n >= 1,则其行为与两个值都设置为 0 时相同,如前所述。

请参见下文,了解可在维度表达式中使用的接受的常量列表。

eval

指定何时计算 widthheight 表达式。它接受以下值:

init

仅在过滤器初始化期间或处理命令时计算表达式一次。

frame

为每个传入的帧计算表达式。

默认值为 ‘init’。

交错

设置交错模式。它接受以下值:

1

强制进行交错感知缩放。

0

不应用交错缩放。

-1

根据源帧是否标记为交错来选择交错感知缩放。

默认值为 “0”。

flags

设置 libswscale 缩放标志。有关完整的值列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未明确指定,则滤镜会应用默认标志。

param0、param1

为需要它们的缩放算法设置 libswscale 输入参数。有关完整文档,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未明确指定,则滤镜会应用空参数。

intent

设置在不同色彩空间之间转换时使用的 ICC 渲染意图。它接受以下值:

感知

使用感知引导的色调和色域映射曲线。所用映射的具体细节可能随时更改,不应将其视为稳定可靠。建议在典型观看设置中最终查看图像/视频内容时使用此意图。

relative_colorimetric

使用尝试找到色度上最不相似的色域内颜色的色度剪切曲线,静态地剪切色域外的颜色。此意图执行白点适应和黑点适应。这是默认设置。建议在忠实色彩再现至关重要的情况下使用此意图,即使以剪切为代价。

absolute_colorimetric

硬剪切色域外的颜色,不尝试白点或黑点再现。此意图将在输出显示器上 1:1 再现色域内的颜色,就像它们在参考显示器上显示的一样,前提是输出显示器已正确校准。

饱和度

执行饱和度映射 - 即,以非线性的方式将输入颜色体积直接拉伸到输出颜色体积上,从而尽可能地保留原始信号外观。建议将此意图用于信号内容评估,因为它不会导致任何剪切。它大致类似于不执行任何颜色映射,尽管它仍然会考虑母版显示原色和编码 TRC 中的任何差异。

size, s

设置视频大小。有关此选项的语法,请查看 (ffmpeg-utils)ffmpeg-utils 手册中的“视频大小”部分

in_color_matrix
out_color_matrix

设置输入/输出 YCbCr 色彩空间类型。

这允许覆盖自动检测到的值,并允许强制使用特定的值用于输出和编码器。

如果未指定,则色彩空间类型取决于像素格式。

可能的值:

auto

自动选择。

bt709

符合国际电信联盟 (ITU) 建议 BT.709 的格式。

fcc

设置符合美国联邦通信委员会 (FCC) 联邦法规法典 (CFR) 第 47 篇(2003 年)73.682 (a) 的色彩空间。

bt601
bt470
smpte170m

设置符合以下标准的色彩空间:

  • ITU 无线电通信部门 (ITU-R) 建议 BT.601
  • ITU-R Rec. BT.470-6 (1998) 系统 B、B1 和 G
  • 电影与电视工程师协会 (SMPTE) ST 170:2004
smpte240m

设置符合 SMPTE ST 240:1999 的色彩空间。

bt2020

设置符合 ITU-R BT.2020 非恒定亮度系统的色彩空间。

in_range
out_range

设置输入/输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制使用特定的值用于输出和编码器。如果未指定,则范围取决于像素格式。可能的值:

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(在 8 位亮度的情况下为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(在 8 位亮度的情况下为 16-235)。

in_chroma_loc
out_chroma_loc

设置输入/输出色度采样位置。如果未指定,默认情况下使用中心定位的色度。可能的值:

auto, unknown
center
topleft
top
bottomleft
bottom
in_primaries
out_primaries

设置输入/输出 RGB 原色。

这允许覆盖自动检测到的值,并允许强制使用特定的值用于输出和编码器。可能的值:

auto

自动选择。这是默认设置。

bt709
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
ebu3213
in_transfer
out_transfer

设置输入/输出传输响应曲线 (TRC)。

这允许覆盖自动检测到的值,并允许强制使用特定的值用于输出和编码器。可能的值:

auto

自动选择。这是默认设置。

bt709
bt470m
gamma22
bt470bg
gamma28
smpte170m
smpte240m
linear
iec61966-2-1
srgb
iec61966-2-4
xvycc
bt1361e
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
force_original_aspect_ratio

如果需要保持原始宽高比,则启用减小或增加输出视频宽度或高度。可能的值:

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,可以使用此选项将输出视频限制为该分辨率,同时保持宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(将其设置为减小)并在命令行中指定 1280x720 会使输出变为 1280x533。

请注意,这与为 wh 指定 -1 不同,您仍然需要指定输出分辨率才能使此选项生效。

force_divisible_by

当与 force_original_aspect_ratio 一起使用时,确保输出尺寸(宽度和高度)都可以被给定的整数整除。这与在 wh 选项中使用 -n 类似。

此选项会考虑为 force_original_aspect_ratio 设置的值,从而相应地增加或减少分辨率。视频的宽高比可能会略有修改。

如果您需要使用 force_original_aspect_ratio 使视频适合或超出定义的分辨率,但同时编码器对宽度或高度的可除性有限制,则此选项非常方便。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放后的)宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

hsub
vsub

水平和垂直输入色度子采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

ohsub
ovsub

水平和垂直输出色度子采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

n

输入帧的(顺序)编号,从 0 开始。仅当使用 eval=frame 时可用。

t

输入帧的演示时间戳,以秒为单位表示。仅当使用 eval=frame 时可用。

pos

帧在输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在合成视频的情况下),则为 NaN。仅当使用 eval=frame 时可用。已弃用,请勿使用。

ref_w, rw
ref_h, rh
ref_a
ref_dar, rdar
ref_n
ref_t
ref_pos

与上述等效,但用于第二个参考输入。如果存在这些变量中的任何一个,则此过滤器接受两个输入。

11.218.2 示例

  • 将输入视频缩放到 200x100 的大小
    scale=w=200:h=100
    

    这等效于

    scale=200:100
    

    scale=200x100
    
  • 为输出大小指定大小缩写
    scale=qcif
    

    也可以写成

    scale=size=qcif
    
  • 将输入缩放到 2 倍
    scale=w=2*iw:h=2*ih
    
  • 以上与以下相同
    scale=2*in_w:2*in_h
    
  • 以强制隔行扫描缩放将输入缩放到 2 倍
    scale=2*iw:2*ih:interl=1
    
  • 将输入缩放到一半大小
    scale=w=iw/2:h=ih/2
    
  • 增加宽度,并将高度设置为相同大小
    scale=3/2*iw:ow
    
  • 追求希腊和谐
    scale=iw:1/PHI*iw
    scale=ih*PHI:ih
    
  • 增加高度,并将宽度设置为高度的 3/2
    scale=w=3/2*oh:h=3/5*ih
    
  • 增加大小,使大小为色度子采样值的倍数
    scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
    
  • 在保持与输入相同的宽高比的情况下,将宽度增加到最大 500 像素
    scale=w='min(500\, iw*3/2):h=-1'
    
  • 通过组合 scale 和 setsar 使像素为正方形
    scale='trunc(ih*dar):ih',setsar=1/1
    
  • 通过组合 scale 和 setsar 使像素为正方形,确保生成的分辨率为偶数(某些编解码器需要)
    scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
    
  • 缩放字幕流 (sub) 的大小以匹配主视频 (main) 的大小,然后再进行叠加。 ("scale2ref")
    '[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
    
  • 将徽标缩放到视频高度的 1/10,同时保留其显示宽高比。
    [logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
    

11.218.3 命令

此滤波器支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

11.219 scale_cuda

使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的方式与 scale 过滤器相同。

该滤波器接受以下选项

w
h

设置输出视频维度表达式。默认值为输入维度。

允许与 scale 滤镜相同的表达式。

interp_algo

设置用于缩放的算法

nearest

最近邻

如果输入参数与所需的输出匹配,则默认使用此项。

双线性

双线性

双三次

双三次

这是默认值。

lanczos

Lanczos

format

控制输出像素格式。默认情况下,或者如果未指定,则使用输入像素格式。

该过滤器不支持在 YUV 和 RGB 像素格式之间进行转换。

passthrough

如果设置为 0,则会处理每个帧,即使不需要转换也是如此。此模式可用于将过滤器用作下游帧使用者的缓冲区,该帧使用者会耗尽有限的解码器帧池。

如果设置为 1,则如果帧与所需的输出参数匹配,则会按原样传递。这是默认行为。

param

算法特定参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

与相同的 scale 滤镜选项的作用相同。

11.219.1 示例

  • 将输入缩放到 720p,保持宽高比并确保输出为 yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻算法放大到 4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不进行任何转换或缩放,但将所有输入帧复制到新分配的帧中。这对于处理过滤器和编码链很有用,否则会耗尽解码器的帧池。
    scale_cuda=passthrough=0
    

11.220 scale_npp

使用 NVIDIA Performance Primitives (libnpp) 在 CUDA 视频帧上执行缩放和/或像素格式转换。设置输出宽度和高度的方式与 scale 过滤器相同。

接受以下附加选项

format

输出 CUDA 帧的像素格式。如果设置为字符串 “same”(默认值),则会保留输入格式。请注意,硬件帧尚不支持自动格式协商和转换

interp_algo

用于调整大小的插值算法。以下之一

nn

最近邻。

linear
cubic
cubic2p_bspline

2 参数三次 (B=1, C=0)

cubic2p_catmullrom

2 参数三次 (B=0, C=1/2)

cubic2p_b05c03

2 参数三次 (B=1/2, C=3/10)

super

超采样

lanczos
force_original_aspect_ratio

如果需要保持原始宽高比,则启用减小或增加输出视频宽度或高度。可能的值:

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,可以使用此选项将输出视频限制为该分辨率,同时保持宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(将其设置为减小)并在命令行中指定 1280x720 会使输出变为 1280x533。

请注意,这与为 wh 指定 -1 不同,您仍然需要指定输出分辨率才能使此选项生效。

force_divisible_by

当与 force_original_aspect_ratio 一起使用时,确保输出尺寸(宽度和高度)都可以被给定的整数整除。这与在 wh 选项中使用 -n 类似。

此选项会考虑为 force_original_aspect_ratio 设置的值,从而相应地增加或减少分辨率。视频的宽高比可能会略有修改。

如果您需要使用 force_original_aspect_ratio 使视频适合或超出定义的分辨率,但同时编码器对宽度或高度的可除性有限制,则此选项非常方便。

eval

指定何时计算 widthheight 表达式。它接受以下值:

init

仅在过滤器初始化期间或处理命令时计算表达式一次。

frame

为每个传入的帧计算表达式。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放后的)宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

n

输入帧的(顺序)编号,从 0 开始。仅当使用 eval=frame 时可用。

t

输入帧的演示时间戳,以秒为单位表示。仅当使用 eval=frame 时可用。

pos

帧在输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在合成视频的情况下),则为 NaN。仅当使用 eval=frame 时可用。已弃用,请勿使用。

11.221 scale2ref_npp

使用 NVIDIA Performance Primitives (libnpp) 根据参考视频缩放(调整大小)输入视频。

请参阅 scale_npp 过滤器以获取可用选项,scale2ref_npp 支持相同的选项,但使用参考视频而不是主输入作为基础。scale2ref_npp 还支持 wh 选项的以下附加常量

main_w
main_h

主输入视频的宽度和高度

main_a

main_w / main_h 相同

main_sar

主输入视频的样本宽高比

main_dar, mdar

主输入视频的显示宽高比。从 (main_w / main_h) * main_sar 计算得出。

main_n

主输入帧的(顺序)编号,从 0 开始。仅当使用 eval=frame 时可用。

main_t

主输入帧的演示时间戳,以秒为单位表示。仅当使用 eval=frame 时可用。

main_pos

帧在主输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在合成视频的情况下),则为 NaN。仅当使用 eval=frame 时可用。

11.221.1 示例

  • 在叠加之前,缩放字幕流 (b) 的大小以匹配主视频 (a) 的大小
    'scale2ref_npp[b][a];[a][b]overlay_cuda'
    
  • 将徽标缩放到视频高度的 1/10,同时保留其显示宽高比。
    [logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
    

11.222 scale_vt

使用 VTPixelTransferSession 缩放并转换颜色参数。

该滤波器接受以下选项

w
h

设置输出视频维度表达式。默认值为输入维度。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出颜色原色。

color_transfer

设置输出传输特性。

11.223 沙尔

对输入视频流应用 Scharr 算子。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

11.223.1 命令

此过滤器支持以上所有选项作为 命令

11.224 滚动

以恒定速度水平和/或垂直滚动输入视频。

该滤波器接受以下选项

水平, h

设置水平滚动速度。默认值为 0。允许范围为 -1 到 1。负值会改变滚动方向。

垂直, v

设置垂直滚动速度。默认值为 0。允许范围为 -1 到 1。负值会改变滚动方向。

hpos

设置初始水平滚动位置。默认值为 0。允许范围为 0 到 1。

vpos

设置初始垂直滚动位置。默认值为 0。允许范围为 0 到 1。

11.224.1 命令

此滤镜支持以下命令

水平, h

设置水平滚动速度。

垂直, v

设置垂直滚动速度。

11.225 scdet

检测视频场景变化。

此滤镜设置帧元数据,包括帧之间的 mafd、场景得分,并将帧转发到下一个滤镜,以便它们可以使用这些元数据来检测场景变化或其他内容。

此外,当此滤镜通过 threshold 检测到场景变化时,它会记录消息并设置帧元数据。

lavfi.scd.mafd 元数据键设置为每帧的 mafd。

lavfi.scd.score 元数据键设置为每帧的场景变化得分,用于检测场景变化。

lavfi.scd.time 元数据键设置为当前已过滤帧的时间,该时间使用 threshold 检测场景变化。

该滤波器接受以下选项

threshold, t(阈值,t)

将场景变化检测阈值设置为最大变化的百分比。良好的值范围在 [8.0, 14.0] 之间。threshold 的范围为 [0., 100.]

默认值为 10.

sc_pass, s

设置标志以将场景变化帧传递到下一个滤镜。默认值为 0。如果您只想获取场景变化帧的快照,则可以启用它。

11.226 选择颜色

将青色、洋红色、黄色和黑色 (CMYK) 调整到特定颜色范围(例如“红色”、“黄色”、“绿色”、“青色”等)。调整范围由颜色的“纯度”(即,它已经饱和的程度)定义。

此滤镜类似于 Adobe Photoshop 的选择颜色工具。

该滤波器接受以下选项

correction_method

选择颜色校正方法。

可用值为

绝对

指定的调整按“原样”应用(添加到/减去原始像素分量值)。

相对

指定的调整相对于原始分量值。

默认值为 absolute

reds

调整红色像素(红色分量最大的像素)

yellows

调整黄色像素(蓝色分量最小的像素)

greens

调整绿色像素(绿色分量最大的像素)

cyans

调整青色像素(红色分量最小的像素)

blues

调整蓝色像素(蓝色分量最大的像素)

magentas

调整洋红色像素(绿色分量最小的像素)

whites

调整白色像素(所有分量都大于 128 的像素)

neutrals

调整除纯黑色和纯白色之外的所有像素

blacks

调整黑色像素(所有分量都小于 128 的像素)

psfile

指定一个 Photoshop 选择颜色文件 (.asv) 以从中导入设置。

所有调整设置(redsyellows 等)最多接受 4 个空格分隔的浮点调整值,范围在 [-1,1] 之间,分别用于调整其范围像素的青色、洋红色、黄色和黑色的量。

11.226.1 示例

  • 在每个绿色区域中将青色增加 50% 并将黄色减少 33%,并在蓝色区域中将洋红色增加 27%
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用 Photoshop 选择颜色预设
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

11.227 分离场

separatefields 滤镜采用基于帧的视频输入,并将每个帧拆分为其分量场,从而生成一个新的半高剪辑,其帧率和帧数是原来的两倍。

此滤镜使用帧中的场优势信息来决定将每对场中的哪个场首先放置在输出中。如果它弄错了,请在 separatefields 滤镜之前使用 setfield 滤镜。

11.228 setdar, setsar

setdar 滤镜为滤镜输出视频设置显示纵横比。

这是通过根据以下等式更改指定的采样(又名像素)纵横比来完成的

DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR

请记住,setdar 滤镜不会修改视频帧的像素尺寸。此外,此滤镜设置的显示纵横比可能会被滤镜链中后面的滤镜更改,例如,在缩放或应用另一个“setdar”或“setsar”滤镜的情况下。

setsar 滤镜为滤镜输出视频设置采样(又名像素)纵横比。

请注意,由于应用此滤镜的结果,输出显示纵横比将根据上面的等式更改。

请记住,setsar 滤镜设置的采样纵横比可能会被滤镜链中后面的滤镜更改,例如,如果应用了另一个“setsar”或“setdar”滤镜。

它接受以下参数

r, ratio, dar (仅限 setdar), sar (仅限 setsar)

设置滤镜使用的纵横比。

该参数可以是浮点数字符串或表达式。如果未指定该参数,则假定值为 "0",这意味着使用相同的输入值。

最大值

设置在将表示的纵横比简化为有理数时用于表示分子和分母的最大整数值。默认值为 100

参数 sar 是一个包含以下常量的表达式

w, h

输入宽度和高度。

a

w / h 相同。

sar

输入采样宽高比。

dar

输入显示纵横比。它与 (w / h) * sar 相同。

hsub, vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

11.228.1 示例

  • 要将显示纵横比更改为 16:9,请指定以下之一
    setdar=dar=1.77777
    setdar=dar=16/9
    
  • 要将采样纵横比更改为 10:11,请指定
    setsar=sar=10/11
    
  • 要设置 16:9 的显示纵横比,并在纵横比缩减中指定最大整数值 1000,请使用以下命令
    setdar=ratio=16/9:max=1000
    

11.229 setfield

强制输出视频帧的场。

setfield 滤镜标记输出帧的隔行类型场。它不会更改输入帧,而只会设置相应的属性,这会影响后续滤镜(例如 fieldorderyadif)如何处理该帧。

该滤波器接受以下选项

mode

可用值为

auto

保持相同的场属性。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为逐行扫描。

11.230 setparams

强制输出视频帧的帧参数。

setparams 滤镜标记输出帧的隔行扫描和颜色范围。它不会更改输入帧,而只会设置相应的属性,这会影响滤镜/编码器如何处理该帧。

field_mode

可用值为

auto

保持相同的场属性(默认)。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为逐行扫描。

range

可用值为

auto

保持相同的颜色范围属性(默认)。

unspecified, unknown

将帧标记为未指定的颜色范围。

limited, tv, mpeg

将帧标记为有限范围。

full, pc, jpeg

将帧标记为全范围。

color_primaries

设置颜色原色。可用值为

auto

保持相同的颜色原色属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
color_trc

设置颜色传递。可用值包括:

auto

保持相同的颜色 trc 属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
linear
log100
log316
iec61966-2-4
bt1361e
iec61966-2-1
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
colorspace

设置色彩空间。可用值包括:

auto

保持相同的色彩空间属性(默认)。

gbr
bt709
unknown
fcc
bt470bg
smpte170m
smpte240m
ycgco
bt2020nc
bt2020c
smpte2085
chroma-derived-nc
chroma-derived-c
ictcp
chroma_location

设置色度采样位置。可用值包括:

auto

保持相同的色度位置(默认)。

unspecified, unknown
center
topleft
top
bottomleft
bottom

11.231 sharpen_npp

使用 NVIDIA Performance Primitives (libnpp) 执行带边界控制的图像锐化。

接受以下附加选项

border_type

在帧边界处使用的采样类型。 以下之一:

replicate

复制像素值。

11.232 倾斜

对输入视频应用剪切变换。

此滤镜支持以下选项:

shx

X 方向上的剪切因子。默认值为 0。允许的范围是 -2 到 2。

shy

Y 方向上的剪切因子。默认值为 0。允许的范围是 -2 到 2。

填充颜色, c

设置用于填充变换后的视频未覆盖的输出区域的颜色。有关此选项的通用语法,请查阅 ffmpeg-utils 手册中的“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果永远不显示背景,则很有用)。

默认值为“black”。

插值

设置插值类型。可以是 bilinearnearest。默认值为 bilinear

11.232.1 命令

此过滤器支持以上所有选项作为 命令

11.233 showinfo

显示包含每个输入视频帧的各种信息的行。输入视频不会被修改。

此滤镜支持以下选项:

checksum

计算每个平面的校验和。默认启用。

udu_sei_as_ascii

尽可能尝试以 ASCII 字符打印用户数据未注册 SEI,否则以十六进制格式打印。

显示的行包含 key:value 形式的键/值对序列。

输出中显示以下值

n

输入帧的(顺序)编号,从 0 开始。

pts

输入帧的显示时间戳,以时间基准单位表示。时间基准单位取决于滤镜的输入垫。

pts_time

输入帧的显示时间戳,以秒数表示。

fmt

像素格式名称。

sar

输入帧的样本纵横比,以 num/den 的形式表示。

s

输入帧的大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频大小”部分

i

隔行扫描模式的类型(“P”表示“逐行扫描”,“T”表示顶场优先,“B”表示底场优先)。

iskey

如果帧是关键帧,则为 1,否则为 0。

type(类型)

输入帧的图片类型(“I”表示 I 帧,“P”表示 P 帧,“B”表示 B 帧,或“?”表示未知类型)。另请参阅 libavutil/avutil.h 中定义的 AVPictureType 枚举和 av_get_picture_type_char 函数的文档。

checksum

输入帧的所有平面的 Adler-32 校验和(以十六进制打印)。

plane_checksum

输入帧的每个平面的 Adler-32 校验和(以十六进制打印),以“[c0 c1 c2 c3]”的形式表示。

mean

输入帧的每个平面中像素的平均值,以“[mean0 mean1 mean2 mean3]”的形式表示。

stdev

输入帧的每个平面中像素值的标准差,以“[stdev0 stdev1 stdev2 stdev3]”的形式表示。

11.234 showpalette

显示每个帧的 256 色调色板。此滤镜仅适用于 pal8 像素格式的帧。

它接受以下选项

s

设置用于表示一个调色板颜色条目的框的大小。默认值为 30(表示 30x30 像素的框)。

11.235 shuffleframes

重新排序和/或复制和/或删除视频帧。

它接受以下参数

映射

设置输入帧的目标索引。这是以空格或“|”分隔的索引列表,用于将输入帧映射到输出帧。索引的数量也设置每个索引可能具有的最大值。“-1”索引具有特殊含义,即删除帧。

第一帧的索引为 0。默认设置是保持输入不变。

11.235.1 示例

  • 交换输入的每三帧中的第二帧和第三帧
    ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
    
  • 交换输入的每十帧中的第十帧和第一帧
    ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
    

11.236 shufflepixels

重新排序视频帧中的像素。

此过滤器接受以下选项

方向, d

设置混洗方向。可以是正向或反向。默认方向为正向。

模式, m

设置混洗模式。可以是水平模式、垂直模式或块模式。

宽度,w
高度,h

设置混洗 block_size。在水平混洗模式下,仅使用大小的宽度部分;在垂直混洗模式下,仅使用大小的高度部分。

seed, s

设置用于混洗像素的随机种子。主要用于设置以便能够反转过滤过程以获得原始输入。例如,要反转正向混洗,您需要使用相同的参数和完全相同的种子,并将方向设置为反向。

11.237 shuffleplanes

重新排序和/或复制视频平面。

它接受以下参数

map0

用作第一个输出平面的输入平面的索引。

map1

用作第二个输出平面的输入平面的索引。

map2

用作第三个输出平面的输入平面的索引。

map3

用作第四个输出平面的输入平面的索引。

第一个平面的索引为 0。默认设置是保持输入不变。

11.237.1 示例

  • 交换输入的第二和第三个平面
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

11.238 signalstats

评估各种视觉指标,以帮助确定与模拟视频媒体数字化相关的问题。

默认情况下,滤镜将记录这些元数据值

YMIN

显示输入帧中包含的最小 Y 值。范围为 [0-255]。

YLOW

显示输入帧中 10% 分位数处的 Y 值。范围为 [0-255]。

YAVG

显示输入帧内的平均 Y 值。范围为 [0-255]。

YHIGH

显示输入帧中 90% 分位数处的 Y 值。范围为 [0-255]。

YMAX

显示输入帧中包含的最大 Y 值。范围为 [0-255]。

UMIN

显示输入帧中包含的最小 U 值。范围为 [0-255]。

ULOW

显示输入帧中 10% 分位数处的 U 值。范围为 [0-255]。

UAVG

显示输入帧内的平均 U 值。范围为 [0-255]。

UHIGH

显示输入帧中 90% 分位数处的 U 值。范围为 [0-255]。

UMAX

显示输入帧中包含的最大 U 值。范围为 [0-255]。

VMIN

显示输入帧中包含的最小 V 值。范围为 [0-255]。

VLOW

显示输入帧中 10% 分位数处的 V 值。范围为 [0-255]。

VAVG

显示输入帧内的平均 V 值。范围为 [0-255]。

VHIGH

显示输入帧中 90% 分位数处的 V 值。范围为 [0-255]。

VMAX

显示输入帧中包含的最大 V 值。范围为 [0-255]。

SATMIN

显示输入帧中包含的最小饱和度值。范围为 [0-~181.02]。

SATLOW

显示输入帧中 10% 分位数处的饱和度值。范围为 [0-~181.02]。

SATAVG

显示输入帧内的平均饱和度值。范围为 [0-~181.02]。

SATHIGH

显示输入帧中 90% 分位数处的饱和度值。范围为 [0-~181.02]。

SATMAX

显示输入帧中包含的最大饱和度值。范围为 [0-~181.02]。

HUEMED

显示输入帧中色调的中值。范围为 [0-360]。

HUEAVG

显示输入帧中色调的平均值。范围为 [0-360]。

YDIF

显示当前帧 Y 平面所有像素值与前一输入帧对应像素值之间差值的平均值。范围为 [0-255]。

UDIF

显示当前帧 U 平面所有像素值与前一输入帧对应像素值之间差值的平均值。范围为 [0-255]。

VDIF

显示当前帧 V 平面所有像素值与前一输入帧对应像素值之间差值的平均值。范围为 [0-255]。

YBITDEPTH

显示当前帧 Y 平面的位深度。范围为 [0-16]。

UBITDEPTH

显示当前帧 U 平面的位深度。范围为 [0-16]。

VBITDEPTH

显示当前帧 V 平面的位深度。范围为 [0-16]。

该滤波器接受以下选项

stat
out

stat 指定一种额外的图像分析形式。out 输出视频,并突出显示指定类型的像素。

这两个选项都接受以下值

tout

识别时间异常值像素。时间异常值是指与同一场中的相邻像素不同的像素。时间异常值的示例包括视频丢失、磁头堵塞或磁带跟踪问题的结果。

vrep

识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中,垂直线重复很常见,但在从模拟源数字化的视频中,这种模式不常见。当它出现在从模拟源数字化产生的视频中时,可能表示来自丢失补偿器的隐藏。

brng

识别超出合法广播范围的像素。

颜色,c

out 选项设置突出显示颜色。默认颜色为黄色。

11.238.1 示例

  • 输出各种视频指标的数据
    ffprobe -f lavfi movie=example.mov,signalstats="stat=tout+vrep+brng" -show_frames
    
  • 输出每帧 Y 平面最小值和最大值的特定数据
    ffprobe -f lavfi movie=example.mov,signalstats -show_entries frame_tags=lavfi.signalstats.YMAX,lavfi.signalstats.YMIN
    
  • 播放视频,同时以红色突出显示超出广播范围的像素。
    ffplay example.mov -vf signalstats="out=brng:color=red"
    
  • 播放视频,并在帧上绘制 signalstats 元数据。
    ffplay example.mov -vf signalstats=stat=brng+vrep+tout,drawtext=fontfile=FreeSerif.ttf:textfile=signalstat_drawtext.txt
    

    命令中使用的 signalstat_drawtext.txt 的内容是

    time %{pts:hms}
    Y (%{metadata:lavfi.signalstats.YMIN}-%{metadata:lavfi.signalstats.YMAX})
    U (%{metadata:lavfi.signalstats.UMIN}-%{metadata:lavfi.signalstats.UMAX})
    V (%{metadata:lavfi.signalstats.VMIN}-%{metadata:lavfi.signalstats.VMAX})
    saturation maximum: %{metadata:lavfi.signalstats.SATMAX}
    
    

11.239 签名

计算 MPEG-7 视频签名。该过滤器可以处理多个输入。在这种情况下,还可以计算输入之间的匹配。该过滤器始终传递第一个输入。每个流的签名可以写入一个文件。

它接受以下选项

detectmode

启用或禁用匹配过程。

可用值为

off

禁用匹配计算(默认)。

full

计算整个视频的匹配,并输出整个视频是否匹配或仅部分匹配。

fast

仅计算直到找到匹配项或视频结束。在某些情况下应该更快。

nb_inputs

设置输入数量。选项值必须是非负整数。默认值为 1。

filename

设置输出写入的路径。如果输入不止一个,则路径必须是一个原型,即必须包含 %d 或 %0nd(其中 n 是正整数),它将被输入编号替换。如果未指定文件名,则不会写入任何输出。这是默认设置。

format

选择输出格式。

可用值为

binary

使用指定的二进制表示形式(默认)。

xml

使用指定的 xml 表示形式。

th_d

设置检测一个单词相似的阈值。选项值必须是大于零的整数。默认值为 9000。

th_dc

设置检测所有单词相似的阈值。选项值必须是大于零的整数。默认值为 60000。

th_xh

设置检测帧相似的阈值。选项值必须是大于零的整数。默认值为 116。

th_di

设置识别为匹配序列的序列最小长度(以帧为单位)。选项值必须是非负整数值。默认值为 0。

th_it

设置匹配帧与所有帧必须具有的最小关系。选项值必须是介于 0 和 1 之间的双精度值。默认值为 0.5。

11.239.1 示例

  • 要计算输入视频的签名并将其存储在 signature.bin 中
    ffmpeg -i input.mkv -vf signature=filename=signature.bin -map 0:v -f null -
    
  • 要检测两个视频是否匹配,并将签名以 XML 格式存储在 signature0.xml 和 signature1.xml 中
    ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[0:v][1:v] signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml" -map :v -f null -
    

11.240 siti

计算视频的空间信息 (SI) 和时间信息 (TI) 分数,如 ITU-T Rec. P.910 (11/21) 中定义:多媒体应用的主观视频质量评估方法。可用的 PDF 在 https://www.itu.int/rec/T-REC-P.910-202111-S/en。请注意,这是与已被取代的建议对应的旧版实现。有关最新版本,请参阅 ITU-T Rec. P.910 (07/22): https://www.itu.int/rec/T-REC-P.910-202207-I/en

它接受以下选项

print_summary

如果设置为 1,则摘要统计信息将打印到控制台。默认值为 0。

11.240.1 示例

  • 要计算 SI/TI 指标并打印摘要
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

11.241 smartblur

模糊输入视频,而不影响轮廓。

它接受以下选项

luma_radius, lr

设置亮度半径。选项值必须是 [0.1, 5.0] 范围内的浮点数,它指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 1.0。

luma_strength, ls

设置亮度强度。选项值必须是 [-1.0, 1.0] 范围内的浮点数,用于配置模糊。包含在 [0.0, 1.0] 中的值将模糊图像,而包含在 [-1.0, 0.0] 中的值将锐化图像。默认值为 1.0。

luma_threshold, lt

设置亮度阈值,用作确定是否应模糊像素的系数。选项值必须是 [-30, 30] 范围内的整数。值为 0 将过滤所有图像,包含在 [0, 30] 中的值将过滤平坦区域,而包含在 [-30, 0] 中的值将过滤边缘。默认值为 0。

chroma_radius, cr

设置色度半径。选项值必须是 [0.1, 5.0] 范围内的浮点数,它指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 luma_radius

chroma_strength, cs

设置色度强度。选项值必须是 [-1.0, 1.0] 范围内的浮点数,用于配置模糊。包含在 [0.0, 1.0] 中的值将模糊图像,而包含在 [-1.0, 0.0] 中的值将锐化图像。默认值为 luma_strength

chroma_threshold, ct

设置色度阈值,用作确定是否应模糊像素的系数。选项值必须是 [-30, 30] 范围内的整数。值为 0 将过滤所有图像,包含在 [0, 30] 中的值将过滤平坦区域,而包含在 [-30, 0] 中的值将过滤边缘。默认值为 luma_threshold

alpha_radius, ar

设置 Alpha 半径。选项值必须是 [0.1, 5.0] 范围内的浮点数,它指定用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为 luma_radius

alpha_strength, as

设置 alpha 强度。该选项值必须是范围在 [-1.0,1.0] 之间的浮点数,用于配置模糊效果。值在 [0.0,1.0] 范围内会使图像模糊,而值在 [-1.0,0.0] 范围内会使图像锐化。默认值为 luma_strength

alpha_threshold, at

设置 alpha 阈值,用作系数来确定是否应模糊像素。该选项值必须是范围在 [-30,30] 之间的整数。值为 0 将过滤整个图像,值在 [0,30] 范围内将过滤平坦区域,而值在 [-30,0] 范围内将过滤边缘。默认值为 luma_threshold

如果未显式设置色度或 alpha 选项,则将设置相应的亮度值。

11.242 索贝尔

将 Sobel 算子应用于输入视频流。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

11.242.1 命令

此过滤器支持以上所有选项作为 命令

11.243 spp

应用一个简单的后处理过滤器,该过滤器在多个(或者,在 quality 等级为 6 的情况下,是所有)偏移处压缩和解压缩图像,并对结果求平均值。

该滤波器接受以下选项

quality

设置质量。此选项定义用于平均的级别数。它接受 0-6 范围内的整数。如果设置为 0,则过滤器将不起作用。值 6 表示最高质量。对于该值的每次递增,速度将降低约 2 倍。默认值为 3

qp

强制使用恒定的量化参数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式有

hard

设置硬阈值(默认)。

soft

设置软阈值(去振铃效果更好,但可能更模糊)。

use_bframe_qp

如果设置为 1,则启用使用来自 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有更大的 QP。默认为 0(未启用)。

11.243.1 命令

此滤波器支持以下命令

quality, level

设置质量等级。值 max 可用于设置最大级别,目前为 6

11.244 sr

通过应用基于卷积神经网络的超分辨率方法之一来缩放输入。支持的模型

训练脚本以及用于模型文件 (.pb) 保存的脚本可以在 https://github.com/XueweiMeng/sr/tree/sr_dnn_native 找到。原始存储库位于 https://github.com/HighVoltageRocknRoll/sr.git

该滤波器接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow C 库(参见 https://tensorflowcn.cn/install/lang_c),并使用 --enable-libtensorflow 配置 FFmpeg

model

设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 后端只能加载其格式的文件。

scale_factor

设置 SRCNN 模型的缩放因子。允许的值为 234。默认值为 2。缩放因子对于 SRCNN 模型是必要的,因为它接受使用双三次上采样和适当缩放因子进行上采样的输入。

要获得完整的功能(例如异步执行),请使用 dnn_processing 滤镜。

11.245 ssim

获取两个输入视频之间的 SSIM(结构相似性度量)。

此过滤器接收两个输入视频,第一个输入被视为“主要”源并保持不变地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。

为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。此外,它还假设两个输入具有相同数量的帧,并且这些帧会逐个进行比较。

该过滤器存储每个帧计算出的 SSIM。

以下是对接受参数的描述。

stats_file, f

如果指定,过滤器将使用指定的文件保存每个单独帧的 SSIM。当文件名等于 "-" 时,数据将发送到标准输出。

如果选择 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。

以下是每个显示的参数的描述

n

输入帧的顺序编号,从 1 开始

Y、U、V、R、G、B

比较帧中由后缀指定的组件的 SSIM。

全部

比较帧的整个帧的 SSIM。

dB

与上述相同,但以 dB 表示。

此滤镜还支持 framesync 选项。

11.245.1 示例

  • 例如
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] ssim="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件 ref_movie.mpg 进行比较。每个单独帧的 SSIM 存储在 stats.log 中。

  • 另一个同时包含 psnr 和 ssim 的示例
    ffmpeg -i main.mpg -i ref.mpg -lavfi  "ssim;[0:v][1:v]psnr" -f null -
    
  • 另一个具有不同容器的示例
    ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
    

11.246 立体 3D

在不同的立体图像格式之间转换。

这些过滤器接受以下选项

in

设置输入的立体图像格式。

输入图像格式的可用值包括

sbsl

并排平行(左眼左侧,右眼右侧)

sbsr

并排交叉眼(右眼左侧,左眼右侧)

sbs2l

并排平行,分辨率为一半宽度(左眼左侧,右眼右侧)

sbs2r

并排交叉眼,分辨率为一半宽度(右眼左侧,左眼右侧)

abl
tbl

上下(左眼在上,右眼在下)

abr
tbr

上下(右眼在上,左眼在下)

ab2l
tb2l

上下,分辨率为一半高度(左眼在上,右眼在下)

ab2r
tb2r

上下,分辨率为一半高度(右眼在上,左眼在下)

al

交替帧(左眼第一帧,右眼第二帧)

ar

交替帧(右眼第一帧,左眼第二帧)

irl

交错行(左眼具有顶部行,右眼从下一行开始)

irr

交错行(右眼具有顶部行,左眼从下一行开始)

icl

交错列,左眼优先

icr

交错列,右眼优先

默认值为 ‘sbsl’。

out

设置输出的立体图像格式。

sbsl

并排平行(左眼左侧,右眼右侧)

sbsr

并排交叉眼(右眼左侧,左眼右侧)

sbs2l

并排平行,分辨率为一半宽度(左眼左侧,右眼右侧)

sbs2r

并排交叉眼,分辨率为一半宽度(右眼左侧,左眼右侧)

abl
tbl

上下(左眼在上,右眼在下)

abr
tbr

上下(右眼在上,左眼在下)

ab2l
tb2l

上下,分辨率为一半高度(左眼在上,右眼在下)

ab2r
tb2r

上下,分辨率为一半高度(右眼在上,左眼在下)

al

交替帧(左眼第一帧,右眼第二帧)

ar

交替帧(右眼第一帧,左眼第二帧)

irl

交错行(左眼具有顶部行,右眼从下一行开始)

irr

交错行(右眼具有顶部行,左眼从下一行开始)

arbg

红/蓝灰度立体图(左眼红色滤镜,右眼蓝色滤镜)

argg

红/绿灰度立体图(左眼红色滤镜,右眼绿色滤镜)

arcg

红/青灰度立体图(左眼红色滤镜,右眼青色滤镜)

arch

红/青半彩色立体图(左眼红色滤镜,右眼青色滤镜)

arcc

红/青彩色立体图(左眼红色滤镜,右眼青色滤镜)

arcd

红/青彩色立体图,采用 Dubois 最小二乘投影优化(左眼红色滤镜,右眼青色滤镜)

agmg

绿/洋红灰度立体图(左眼绿色滤镜,右眼洋红滤镜)

agmh

绿/洋红半彩色立体图(左眼绿色滤镜,右眼洋红滤镜)

agmc

绿/洋红彩色立体图(左眼绿色滤镜,右眼洋红滤镜)

agmd

绿/洋红彩色立体图,采用 Dubois 最小二乘投影优化(左眼绿色滤镜,右眼洋红滤镜)

aybg

黄/蓝灰度立体图(左眼黄色滤镜,右眼蓝色滤镜)

aybh

黄/蓝半彩色立体图(左眼黄色滤镜,右眼蓝色滤镜)

aybc

黄/蓝彩色立体图(左眼黄色滤镜,右眼蓝色滤镜)

aybd

黄/蓝彩色立体图,采用 Dubois 最小二乘投影优化(左眼黄色滤镜,右眼蓝色滤镜)

ml

单声道输出(仅左眼)

mr

单声道输出(仅右眼)

chl

棋盘格,左眼优先

chr

棋盘格,右眼优先

icl

交错列,左眼优先

icr

交错列,右眼优先

hdmi

HDMI 帧封装

默认值为 ‘arcd’。

11.246.1 示例

  • 将并排平行的输入视频转换为黄/蓝色 Dubois 立体影像。
    stereo3d=sbsl:aybd
    
  • 将上下排列(左眼在上,右眼在下)的输入视频转换为并排交叉眼格式。
    stereo3d=abl:sbsr
    

11.247 streamselect, astreamselect

选择视频或音频流。

该滤波器接受以下选项

输入

设置输入数量。默认值为 2。

map

设置要重新映射到输出的输入索引。

11.247.1 命令

streamselectastreamselect 过滤器支持以下命令

map

设置要重新映射到输出的输入索引。

11.247.2 示例

  • 选择第一个 5 秒的第一个流,其余时间选择第二个流
    sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
    
  • 与上述相同,但用于音频
    asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
    

11.248 字幕

使用 libass 库在输入视频上绘制字幕。

要启用此过滤器的编译,您需要使用 --enable-libass 配置 FFmpeg。此过滤器还需要使用 libavcodec 和 libavformat 进行构建,才能将传入的字幕文件转换为 ASS(高级字幕)字幕格式。

该滤波器接受以下选项

文件名, f

设置要读取的字幕文件的文件名。必须指定此项。

original_size

指定原始视频的大小,即 ASS 文件是为该视频编写的。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。由于 ASS 长宽比算法中的设计缺陷,如果长宽比已更改,则必须这样做才能正确缩放字体。

fontsdir

设置一个目录路径,其中包含过滤器可以使用的字体。这些字体将与字体提供程序使用的任何字体一起使用。

alpha

处理 alpha 通道,默认情况下 alpha 通道保持不变。

charenc

设置字幕输入字符编码。仅限 subtitles 过滤器。仅在非 UTF-8 时有用。

stream_index, si

设置字幕流索引。仅限 subtitles 过滤器。

force_style

覆盖字幕的默认样式或脚本信息参数。它接受一个包含 ASS 样式格式 KEY=VALUE 对的字符串,用“,”分隔。

wrap_unicode

根据 Unicode 换行算法断行。可用性要求至少 libass 版本 0.17.0(或 LIBASS_VERSION 0x01600010),并且 libass 必须使用 libunibreak 构建。

该选项默认启用,除非是原生 ASS。

如果未指定第一个键,则假定第一个值指定 filename

例如,要在输入视频的顶部渲染文件 sub.srt,请使用以下命令

subtitles=sub.srt

它等效于

subtitles=filename=sub.srt

要渲染文件 video.mkv 中的默认字幕流,请使用

subtitles=video.mkv

要渲染该文件中的第二个字幕流,请使用

subtitles=video.mkv:si=1

要使来自 sub.srt 的字幕流以 80% 透明的蓝色 DejaVu Serif 字体显示,请使用

subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'

11.249 super2xsai

使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入缩放 2 倍并进行平滑处理。

可用于放大像素艺术图像而不会降低清晰度。

11.250 swaprect

交换视频中的两个矩形对象。

此过滤器接受以下选项

w

设置对象宽度。

h

设置对象高度。

x1

设置第一个矩形的 x 坐标。

y1

设置第一个矩形的 y 坐标。

x2

设置第二个矩形的 x 坐标。

y2

设置第二个矩形的 y 坐标。

所有表达式都会为每一帧计算一次。

所有选项都是包含以下常量的表达式

w
h

输入宽度和高度。

a

w / h 相同

sar

输入样本纵横比

dar

输入显示宽高比,它与 (w / h) * sar 相同

n

输入帧的编号,从 0 开始。

t

时间戳以秒为单位表示。如果输入时间戳未知,则为 NAN。

pos

输入帧在文件中的位置,如果未知,则为 NAN;已弃用,请勿使用

11.250.1 命令

此过滤器支持以上所有选项作为 命令

11.251 swapuv

交换 U 和 V 平面。

11.252 tblend

混合连续的视频帧。

请参阅 blend

11.253 电视电影

对视频应用电视电影处理。

此过滤器接受以下选项

first_field
top, t

顶场优先

bottom, b

底场优先。默认值为 top

pattern

一个数字字符串,表示您要应用的下拉模式。默认值为 23

Some typical patterns:

NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444

PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334

11.254 直方图

计算并绘制输入视频随时间变化的颜色分布直方图。

histogram 视频过滤器(仅显示特定时间单个输入帧的直方图)不同,此过滤器还显示由 width 选项定义的许多帧的过去直方图。

计算出的直方图是图像中颜色分量分布的表示。

该滤波器接受以下选项

宽度,w

设置单个颜色分量输出的宽度。默认值为 0。值 0 表示将从输入视频中选取宽度。这也会设置要保留的传递直方图的数量。允许范围为 [0, 8192]。

display_mode, d

设置显示模式。它接受以下值

堆叠

每个颜色分量的图都彼此放置在下方。

游行

每个颜色分量的图并排排列。

overlay

呈现与 游行 中相同的信息,除了代表颜色分量的图直接相互叠加。

默认为 堆叠

levels_mode, m

设置模式。可以是 linearlogarithmic。默认为 linear

components, c

设置要显示哪些颜色分量。默认为 7

bgopacity, b

设置背景不透明度。默认为 0.9

envelope, e

显示包络线。默认禁用。

ecolor, ec

设置包络线颜色。默认为 gold

slide

设置滑动模式。

滑动的可用值为

frame

当到达右边界时绘制新帧。

replace

用新列替换旧列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单张图片。

默认为 replace

11.255 阈值

对视频流应用阈值效果。

此过滤器需要四个视频流才能执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后一个(第四个)流保存最大值。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

例如,如果第一个流像素的分量值小于来自第二个阈值流的像素分量值的阈值,则将选取第三个流的值,否则将选取第四个流像素分量值。

使用颜色源过滤器可以执行各种类型的阈值处理

11.255.1 命令

此过滤器支持 commands 中的所有选项。

11.255.2 示例

  • 二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
    
  • 反向二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
    
  • 截断二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
    
  • 阈值置零,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
    
  • 反向阈值置零,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
    

11.256 缩略图

在给定的连续帧序列中选择最具代表性的帧。

该滤波器接受以下选项

n

设置要分析的帧批次大小;在一组 n 帧中,过滤器将选取其中一帧,然后处理下一批 n 帧,直到结束。默认值为 100

对数

设置显示所选帧统计信息的日志级别。默认值为 info

由于过滤器会跟踪整个帧序列,因此较大的 n 值会导致更高的内存使用率,因此不建议使用较大的值。

11.256.1 示例

  • 每 50 帧提取一张图片
    thumbnail=50
    
  • 使用 ffmpeg 创建缩略图的完整示例
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

11.257 平铺

将几个连续的帧平铺在一起。

untile 过滤器可以执行相反的操作。

该滤波器接受以下选项

layout

COLUMNSxROWS 的形式设置网格大小。范围最多为 UINT_MAX 个单元格。默认值为 6x5

nb_frames

设置要在给定区域中渲染的最大帧数。它必须小于或等于 wxh。默认值为 0,表示将使用所有区域。

margin

以像素为单位设置外边框边距。范围为 0 到 1024。默认值为 0

padding

设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如,边缘具有不同的值),请参阅 pad 视频过滤器。范围为 0 到 1024。默认值为 0

color

指定未使用区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分color 的默认值为“black”。

overlap

设置将多个连续帧平铺在一起时要重叠的帧数。该值必须介于 0nb_frames - 1 之间。默认值为 0

init_padding

设置在显示第一个输出帧之前最初要为空的帧数。这将控制何时获得第一个输出帧。该值必须介于 0nb_frames - 1 之间。默认值为 0

11.257.1 示例

  • 生成电影中所有关键帧 (-skip_frame nokey) 的 8x8 PNG 平铺图
    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

    需要使用 -vsync 0 来防止 ffmpeg 为了适应原始检测到的帧率而复制每个输出帧。

  • 使用混合的扁平选项和命名选项,在 3x2 帧的区域中显示 5 张图片,图片之间间隔 7 个像素,初始边距为 2 个像素。
    tile=3x2:nb_frames=5:padding=7:margin=2
    

11.258 倾斜和移位

应用倾斜和移轴效果。

当时间与空间反转时会发生什么?

通常,视频由多个帧组成,这些帧表示不同的时间瞬间,并显示在帧捕获的空间中演变的场景。此滤镜是该概念的对立面,灵感来自倾斜和移轴摄影。

经过滤的帧包含组成序列的整个事件时间线,这是通过将每个帧的像素切片放入单个帧中获得的。但是,由于没有无限宽的帧,因此这会一直执行到输入帧的宽度,并且通过为每个后续帧移开一列来重新组合视频。为了将空间映射到时间,滤镜也会倾斜每个输入帧,从而保留运动。这是通过从每个输入帧中逐步选择不同的列来完成的。

最终结果是一种反向视差,因此远处的物体比前方的物体移动得快得多。这种视频效果的理想条件是当运动很少且背景静态时,或者当运动很多且景深很宽时(例如,在火车上移动时拍摄广阔的全景)。

该滤波器接受以下参数

倾斜

在移位时倾斜视频(默认)。取消设置后,视频将滑动一个静态图像,该静态图像由每个帧的第一列组成。

开始

在过滤开始时执行什么操作(请参见下文)。

结束

在过滤结束时执行什么操作(请参见下文)。

保持

在过滤开始之前应经过多少列。

填充

在过滤结束之前应插入多少列。

通常,滤镜从第一个帧开始移位和倾斜,并在接收到最后一个帧时停止。但是,在过滤开始之前,可以保留正常的视频,以便将效果缓慢地移入到位。类似地,最后一个视频帧可以在最后重建。或者,也可以只以黑色开始和结束。

none

过滤立即开始,并在收到最后一个帧时结束。

frame

在处理过程中,第一个帧或最后一个帧保持不变。

black

在过滤的开头或结尾填充黑色。

11.259 tinterlace

执行各种类型的时间场隔行扫描。

帧从 1 开始计数,因此第一个输入帧被认为是奇数。

该滤波器接受以下选项

mode

指定隔行扫描的模式。此选项也可以单独指定为一个值。有关此选项的值列表,请参见下文。

可用值为

merge, 0

将奇数帧移动到上场,偶数帧移动到下场,以一半的帧率生成双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
drop_even, 1

仅输出奇数帧,偶数帧被丢弃,以一半的帧率生成高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
11111                           33333
11111                           33333
11111                           33333
drop_odd, 2

仅输出偶数帧,奇数帧被丢弃,以一半的帧率生成高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
                22222                           44444
                22222                           44444
                22222                           44444
                22222                           44444
pad, 3

将每个帧扩展到全高,但用黑色填充交替的行,以相同的输入帧率生成双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
interleave_top, 4

将奇数帧的上场与偶数帧的下场交错,以一半的帧率生成高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
interleave_bottom, 5

将奇数帧的下场与偶数帧的上场交错,以一半的帧率生成高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444

Output:
22222                           44444
11111                           33333
22222                           44444
11111                           33333
interlacex2, 6

以不变的高度将帧率加倍。插入的每个帧都包含来自先前输入帧的第二个时间场和来自下一个输入帧的第一个时间场。此模式依赖于 top_field_first 标志。适用于没有场同步的隔行扫描视频显示。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
 11111           22222           33333           44444
11111           22222           33333           44444
 11111           22222           33333           44444

Output:
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
mergex2, 7

将奇数帧移动到上场,偶数帧移动到下场,以相同的帧率生成双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444

数值已弃用,但为了向后兼容而被接受。

默认模式为 merge

flags

指定影响滤镜过程的标志。

flags 的可用值为

低通滤波器,vlpf

在滤镜中启用线性垂直低通滤波。当从包含高频垂直细节的逐行源创建隔行扫描目标时,需要垂直低通滤波。滤波将减少隔行扫描的“闪烁”和莫尔图案。

复杂滤波器,cvlpf

启用复杂的垂直低通滤波。这将稍微减少隔行扫描的“闪烁”和莫尔图案,但可以更好地保留细节和主观清晰度印象。

绕过_il

绕过已经隔行扫描的帧,仅调整帧率。

垂直低通滤波和绕过已经隔行扫描的帧只能为 mode interleave_topinterleave_bottom 启用。

11.260 tmedian

从几个连续的输入视频帧中选取中间像素。

该滤波器接受以下选项

radius

设置中值滤波器的半径。默认值为 1。允许的范围是 1 到 127。

平面

设置要过滤的平面。默认值为 15,这意味着将处理所有平面。

百分位数

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选取中值,而 0 将选取最小值,1 将选取最大值。

11.260.1 命令

此滤镜支持以上所有选项作为命令,但不包括选项 radius

11.261 tmidequalizer

应用时间中点视频均衡效果。

中点视频均衡调整一系列视频帧,使其具有相同的直方图,同时尽可能保持其动态。它对于例如匹配视频帧序列的曝光非常有用。

此滤镜接受以下选项

radius

设置滤波半径。默认值为 5。允许的范围是 1 到 127。

sigma

设置滤波 sigma。默认值为 0.5。这控制滤波的强度。将此选项设置为 0 实际上不起作用。

平面

设置要处理的平面。默认为 15,即所有可用平面。

11.262 tmix

混合连续的视频帧。

以下是可接受选项的描述。

frames

要混合的连续帧的数量。如果未指定,则默认为 3。

weights

指定每个输入视频帧的权重。每个权重用空格分隔。如果权重的数量小于 frames 的数量,则最后指定的权重将用于所有剩余的未设置权重。

scale

指定比例,如果设置了比例,它将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale 会自动缩放到权重总和。

平面

设置要过滤的平面。默认值为全部。允许的范围是 0 到 15。

11.262.1 示例

  • 平均 7 个连续帧
    tmix=frames=7:weights="1 1 1 1 1 1 1"
    
  • 应用简单的时间卷积
    tmix=frames=3:weights="-1 3 -1"
    
  • 与上述类似,但仅显示时间差异
    tmix=frames=3:weights="-1 2 -1":scale=1
    

11.262.2 命令

此滤波器支持以下命令

weights
scale
平面

语法与同名选项相同。

11.263 色调映射

映射来自不同动态范围的颜色。

此滤镜需要单精度浮点数据,因为它需要在(并且可以输出)超出范围的值上操作。需要另一个滤镜(例如 zscale)来将结果帧转换为可用的格式。

实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

11.263.1 选项

此滤镜接受以下选项。

色调映射

设置要使用的色调映射算法。

可能的值为

不应用任何色调映射,仅对过亮的像素进行去饱和处理。

clip

硬裁剪任何超出范围的值。对于范围内值的完美色彩精度,同时扭曲超出范围的值,请使用此选项。

linear

将整个参考色域拉伸到显示的线性倍数。

gamma

在色调曲线之间拟合对数转换。

莱因哈德

使用简单的曲线,使用非线性对比度来保留整体图像亮度,这会导致细节扁平化和色彩精度降低。

hable

reinhard 更好地保留暗部和亮部细节,但代价是整体略微变暗。当细节保留比颜色和亮度准确性更重要时使用。

mobius

平滑映射超出范围的值,同时尽可能保留范围内素材的对比度和颜色。当颜色准确性比细节保留更重要时使用。

默认值为 none。

param

调整色调映射算法。

这会影响以下算法

忽略。

linear

指定拉伸时使用的缩放因子。默认为 1.0。

gamma

指定函数的指数。默认为 1.8。

clip

指定一个额外的线性系数,在剪切之前乘以信号。默认为 1.0。

莱因哈德

指定显示峰值时的局部对比度系数。默认为 0.5,这意味着在色域内的值将约为剪切时亮度的一半。

hable

忽略。

mobius

指定从线性变换到 mobius 变换的过渡点。低于此点的每个值都保证以 1:1 的方式映射。该值越高,结果越准确,但代价是会丢失亮部细节。默认为 0.3,由于初始斜率陡峭,仍然可以相当准确地保留范围内的颜色。

desat

对超过此亮度的亮度应用去饱和度。参数越高,保留的颜色信息越多。此设置通过(平滑地)变为白色,有助于防止超高光出现不自然的色彩过曝。这使得图像感觉更自然,但代价是减少了超出范围的颜色信息。

默认值 2.0 有些保守,主要仅适用于天空或直接被阳光照射的表面。设置为 0.0 则禁用此选项。

仅当输入帧具有支持的颜色标签时,此选项才有效。

peak

使用此值覆盖信号/标称/参考峰值。当显示元数据中嵌入的峰值信息不可靠或从较低范围色调映射到较高范围时很有用。

11.264 tpad

临时填充视频帧。

该滤波器接受以下选项

开始

指定输入视频流之前的延迟帧数。默认为 0。

stop

指定输入视频流之后的填充帧数。设置为 -1 则无限期填充。默认为 0。

start_mode

设置添加到流开头的帧的类型。可以是 addclone。使用 add 添加纯色帧。使用 clone 则复制第一帧。默认为 add

stop_mode

设置添加到流末尾的帧的类型。可以是 addclone。使用 add 添加纯色帧。使用 clone 则复制最后一帧。默认为 add

start_duration, stop_duration

指定开始/停止延迟的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。这些选项会覆盖 startstop。默认为 0。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

color 的默认值为 “black”。

11.265 转置

转置输入视频中的行和列,并可选择翻转。

它接受以下参数

dir

指定转置方向。

可以采用以下值

0, 4, cclock_flip

逆时针旋转 90 度并垂直翻转(默认),即

L.R     L.l
. . ->  . .
l.r     R.r
1, 5, clock

顺时针旋转 90 度,即

L.R     l.L
. . ->  . .
l.r     r.R
2, 6, cclock

逆时针旋转 90 度,即

L.R     R.r
. . ->  . .
l.r     L.l
3, 7, clock_flip

顺时针旋转 90 度并垂直翻转,即

L.R     r.R
. . ->  . .
l.r     l.L

对于 4-7 之间的值,仅当输入视频几何形状为纵向而不是横向时才执行转置。这些值已弃用,应改用 passthrough 选项。

数值已弃用,应改为使用符号常量。

passthrough

如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值

none

始终应用转置。

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

默认值为 none

例如,要顺时针旋转 90 度并保留纵向布局

transpose=dir=1:passthrough=portrait

上面的命令也可以指定为

transpose=1:portrait

11.266 transpose_npp

转置输入视频中的行和列,并可选择翻转。有关更深入的示例,请参阅 transpose 视频过滤器,它在很大程度上共享相同的选项。

它接受以下参数

dir

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

11.267 修剪

修剪输入,使输出包含输入的连续子部分。

它接受以下参数

开始

指定保留部分的开始时间,即时间戳为 start 的帧将是输出中的第一帧。

结束

指定将被丢弃的第一帧的时间,即紧接时间戳为 end 的帧之前的帧将是输出中的最后一帧。

开始点

这与 start 相同,不同之处在于此选项以时基单位而不是秒为单位设置开始时间戳。

结束点

这与 end 相同,不同之处在于此选项以时基单位而不是秒为单位设置结束时间戳。

时长

输出的最大持续时间(以秒为单位)。

start_frame

应传递到输出的第一个帧的编号。

end_frame

应丢弃的第一个帧的编号。

startendduration 表示为时间持续时间规范;有关可接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分

请注意,前两组开始/结束选项和 duration 选项查看帧时间戳,而 _frame 变体只是简单地计算通过过滤器的帧。另请注意,此过滤器不会修改时间戳。如果您希望输出时间戳从零开始,请在 trim 过滤器之后插入 setpts 过滤器。

如果设置了多个开始或结束选项,则此过滤器会尝试贪婪地保留至少匹配指定约束之一的所有帧。要仅保留一次匹配所有约束的部分,请链接多个 trim 过滤器。

默认值是保留所有输入。因此,可以仅设置例如结束值以保留指定时间之前的所有内容。

示例

  • 丢弃除输入第二分钟之外的所有内容
    ffmpeg -i INPUT -vf trim=60:120
    
  • 仅保留第一秒
    ffmpeg -i INPUT -vf trim=duration=1
    

11.268 反预乘

使用第二个流的第一个平面作为 alpha,将 alpha 预乘效果应用于输入视频流。

两个流必须具有相同的尺寸和相同的像素格式。

此滤波器接受以下选项

平面

设置将要处理的平面,未处理的平面将被复制。默认值 0xf 表示将处理所有平面。

如果格式有 1 或 2 个分量,则亮度为位 0。如果格式有 3 或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 为亮度,位 1 为色度-U,位 2 为色度-V。如果存在,则 alpha 通道始终是最后一位。

inplace

不需要第二个输入进行处理,而是使用来自输入流的 alpha 平面。

11.269 反锐化

锐化或模糊输入视频。

它接受以下参数

luma_msize_x, lx

设置亮度矩阵的水平大小。它必须是 3 到 23 之间的奇数整数。默认值为 5。

luma_msize_y, ly

设置亮度矩阵的垂直大小。它必须是介于 3 到 23 之间的奇数整数。默认值为 5。

luma_amount, la

设置亮度效果强度。它必须是一个浮点数,合理的值介于 -1.5 和 1.5 之间。

负值会模糊输入视频,而正值会锐化它,值为零将禁用该效果。

默认值为 1.0。

chroma_msize_x, cx

设置色度矩阵的水平大小。它必须是介于 3 到 23 之间的奇数整数。默认值为 5。

chroma_msize_y, cy

设置色度矩阵的垂直大小。它必须是介于 3 到 23 之间的奇数整数。默认值为 5。

chroma_amount, ca

设置色度效果强度。它必须是一个浮点数,合理的值介于 -1.5 和 1.5 之间。

负值会模糊输入视频,而正值会锐化它,值为零将禁用该效果。

默认值为 0.0。

alpha_msize_x, ax

设置 Alpha 矩阵的水平大小。它必须是介于 3 到 23 之间的奇数整数。默认值为 5。

alpha_msize_y, ay

设置 Alpha 矩阵的垂直大小。它必须是介于 3 到 23 之间的奇数整数。默认值为 5。

alpha_amount, aa

设置 Alpha 效果强度。它必须是一个浮点数,合理的值介于 -1.5 和 1.5 之间。

负值会模糊输入视频,而正值会锐化它,值为零将禁用该效果。

默认值为 0.0。

所有参数都是可选的,默认值等效于字符串“5:5:1.0:5:5:0.0”。

11.269.1 示例

  • 应用强亮度锐化效果
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度和色度参数都应用强模糊效果
    unsharp=7:7:-2:7:7:-2
    

11.270 解平铺

将由平铺图像组成的视频分解为单个图像。

输出视频的帧速率是输入视频的帧速率乘以平铺数量。

此滤镜执行与 tile 相反的操作。

该滤波器接受以下选项

layout

设置网格大小(即行数和列数)。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。

11.270.1 示例

  • 从一个由 25 帧垂直堆叠的静止图像文件生成一个 1 秒的视频,就像一个模拟胶片卷轴
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

11.271 uspp

应用超慢/简单后处理滤镜,该滤镜在多个(或在 quality 等级 8 的情况下,所有)偏移量处压缩和解压缩图像,并对结果进行平均。

此滤镜与 spp 的行为不同之处在于,uspp 实际上使用 libavcodec Snow 对每种情况进行编码和解码,而 spp 使用类似于 MJPEG 的简化版仅帧内 8x8 DCT。

此滤镜在 5.0 到 6.0 之间的 ffmpeg 版本中不可用。

该滤波器接受以下选项

quality

设置质量。此选项定义平均的级别数。它接受 0-8 范围内的整数。如果设置为 0,则滤镜将不起作用。值为 8 表示质量更高。对于该值的每次递增,速度大约降低 2 倍。默认值为 3

qp

强制使用恒定的量化参数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

codec

使用指定的编解码器而不是 snow。

11.272 v360

在各种格式之间转换 360 视频。

该滤波器接受以下选项

输入
output

设置输入/输出视频的格式。

可用格式

e
equirect

等矩形投影。

c3x2
c6x1
c1x6

具有 3x2/6x1/1x6 布局的立方体贴图。

格式特定选项

in_pad
out_pad

设置输入/输出立方体贴图的填充比例。值为十进制。

示例值

0

无填充。

0.01

1% 的面是填充。例如,对于 1920x1280 分辨率,面大小为 640x640,填充将是每边 3 个像素。(640 * 0.01 = 6 像素)

默认值为 0。最大值为 0.1

fin_pad
fout_pad

为输入/输出立方体贴图设置固定填充。值为像素。

默认值为 0。如果大于零,则会覆盖其他填充选项。

in_forder
out_forder

设置输入/输出立方体贴图的面顺序。为每个位置选择一个方向。

方向的指定

r

right

l

left

u

up

d

down

f

向前

b

向后

默认值为 rludfb

in_frot
out_frot

设置输入/输出立方体贴图的面的旋转。为每个位置选择一个角度。

角度的指定

0

顺时针 0 度

1

顺时针 90 度

2

顺时针 180 度

3

顺时针 270 度

默认值为 000000

eac

等角立方体贴图。

flat
gnomonic
rectilinear

常规视频。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

dfisheye

双鱼眼。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

barrel
fb
barrelsplit

Facebook 的 360 格式。

sg

立体投影格式。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

mercator

墨卡托格式。

ball

球体格式,向后方产生明显的失真。

hammer

汉默-艾托夫地图投影格式。

sinusoidal

正弦地图投影格式。

fisheye

鱼眼投影。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

pannini

帕尼尼投影。

格式特定选项

h_fov

设置输出帕尼尼参数。

ih_fov

设置输入帕尼尼参数。

cylindrical

圆柱投影。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

perspective

透视投影。(仅限输出)

格式特定选项

v_fov

设置透视参数。

tetrahedron

四面体投影。

tsp

截断正方锥投影。

he
hequirect

半等矩形投影。

equisolid

等立体格式。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

og

正交格式。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视场。值为度。

如果设置了对角视场,它将覆盖水平和垂直视场。

octahedron

八面体投影。

cylindricalea

圆柱等面积投影。

插值

设置插值方法。
注意:更复杂的插值方法需要更多的内存才能运行。

可用方法

near
nearest

最近邻。

line
linear

双线性插值。

lagrange9

拉格朗日 9 插值。

cube
cubic

双三次插值。

lanc
lanczos

兰索斯插值。

sp16
spline16

样条 16 插值。

gauss
gaussian

高斯插值。

mitchell

米切尔插值。

默认值为 line

w
h

设置输出视频分辨率。

默认分辨率取决于格式。

in_stereo
out_stereo

设置输入/输出立体格式。

2d

2D 单声道

sbs

并排

tb

顶底

输入和输出格式的默认值为 2d

yaw
pitch
roll

设置输出视频的旋转。值为度。

rorder

设置输出视频的旋转顺序。为每个位置选择一个项目。

y, Y

yaw

p, P

pitch

r, R

roll

默认值为 ypr

h_flip
v_flip
d_flip

水平(交换左右)/垂直(交换上下)/深度(交换前后)翻转输出视频。布尔值。

ih_flip
iv_flip

设置输入视频是否水平/垂直翻转。布尔值。

in_trans

设置输入视频是否已转置。布尔值,默认禁用。

out_trans

设置是否需要转置输出视频。布尔值,默认禁用。

h_offset
v_offset

设置输出水平/垂直偏轴偏移量。默认设置为 0。允许的范围是 -1 到 1。

alpha_mask

通过将所有未映射的像素标记为完全透明,在 Alpha 平面中构建掩码。布尔值,默认禁用。

reset_rot

重置输出视频的旋转。布尔值,默认禁用。

11.272.1 示例

  • 使用双三次插值将等矩形视频转换为 3x2 布局和 1% 填充的立方体贴图
    ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
    
  • 提取等角立方体贴图的背面视图
    ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
    
  • 将并排立体格式中转置和水平翻转的等角立方体贴图转换为上下立体等矩形格式
    v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
    

11.272.2 命令

此滤镜支持上述选项的子集,作为命令

11.273 vaguedenoiser

应用基于小波的降噪器。

它使用 Cohen-Daubechies-Feauveau 9/7 将视频输入的每一帧转换为小波域。然后,它对获得的系数进行一些滤波。之后,它进行逆小波变换。由于小波特性,它应该会产生一个平滑的效果,并减少噪声,而不会模糊图像特征。

此过滤器接受以下选项

threshold

滤波强度。值越高,视频滤波效果越强。硬阈值可以使用比软阈值更高的阈值,视频才会看起来过度滤波。默认值为 2。

方法

滤波器将使用的滤波方法。

它接受以下值

hard

所有低于阈值的值都将被置零。

soft

所有低于阈值的值都将被置零。所有高于阈值的值都将减少阈值。

garrote

缩放或取消系数 - 介于(更)软阈值和(更少)硬阈值之间。

默认值为 garrote。

nsteps

小波将分解图像的次数。图像不能分解到某个特定的点之外(通常,对于 640x480 帧为 8 - 因为 2^9 = 512 > 480)。有效值是 1 到 32 之间的整数。默认值为 6。

percent

部分或完全降噪(有限的系数收缩),范围从 0 到 100。默认值为 85。

平面

要处理的平面列表。默认情况下,将处理所有平面。

type(类型)

滤波器将使用的阈值类型。

它接受以下值

universal

所有分解使用的阈值相同。

bayes

使用的阈值还取决于每个分解系数。

默认值为 universal。

11.274 varblur

通过使用第二个视频流设置模糊半径来应用可变模糊滤镜。第二个流必须具有相同的尺寸。

此过滤器接受以下选项

min_r

设置允许的最小半径。允许的范围是 0 到 254。默认值为 0。

max_r

设置允许的最大半径。允许的范围是 1 到 255。默认值为 8。

平面

设置要处理的平面。默认情况下,使用所有平面。

varblur 滤镜还支持 framesync 选项。

11.274.1 命令

此滤镜支持上述所有选项作为命令

11.275 矢量示波器

在二维图形(称为矢量示波器)中显示 2 个颜色分量值。

此过滤器接受以下选项

模式, m

设置矢量示波器模式。

它接受以下值

gray
tint

灰度值显示在图形上,更高的亮度表示更多的像素在图形中的相同位置具有相同的分量颜色值。这是默认模式。

color

灰度值显示在图形上。视频帧中不存在的周围像素值以选项 xy 设置的 2 个颜色分量的渐变绘制。第三个颜色分量是静态的。

color2

视频帧中存在的实际颜色分量值显示在图形上。

color3

与 color2 类似,但图形上相同值 xy 的频率越高,另一个颜色分量的值就越高,对于 xy 的默认值,该分量是亮度。

color4

视频帧中存在的实际颜色显示在图形上。如果两种不同的颜色映射到图形上的同一位置,则会选择图形中不存在的分量值较高的颜色。

color5

灰度值显示在图形上。与 color 类似,但第三个颜色分量从径向渐变中选取。

x

设置哪个颜色分量将表示在 X 轴上。默认值为 1

y

设置哪个颜色分量将表示在 Y 轴上。默认值为 2

intensity, i

设置强度,由模式:gray、color、color3 和 color5 使用,以增加表示图形中 (X, Y) 位置频率的颜色分量的亮度。

envelope, e
none

无包络,这是默认值。

instant

即时包络,即使是最暗的单个像素也会被清晰地突出显示。

peak

保持图形中呈现的最大值和最小值随时间变化。这样,您仍然可以发现超出范围的值,而无需 постоянно 查看矢量示波器。

peak+instant

峰值和即时包络组合在一起。

标线,g

设置要绘制的标线类型。

none
绿色调
color
invert
不透明度, o

设置标线的不透明度。

标志, f

设置标线标志。

white

绘制白点的标线。

black

绘制黑点的标线。

name

绘制颜色点的短名称。

bgopacity, b

设置背景不透明度。

lthreshold,l

设置未在 X 或 Y 轴上表示的颜色分量的低阈值。低于此值的值将被忽略。默认值为 0。请注意,此值乘以一个像素分量可以拥有的实际最大可能值。因此,对于 8 位输入,低阈值 0.1 的实际阈值为 0.1 * 255 = 25。

hthreshold,h

设置未在 X 或 Y 轴上表示的颜色分量的高阈值。高于此值的值将被忽略。默认值为 1。请注意,此值乘以一个像素分量可以拥有的实际最大可能值。因此,对于 8 位输入,高阈值 0.9 的实际阈值为 0.9 * 255 = 230。

色彩空间,c

设置绘制标线时要使用的色彩空间类型。

auto
601
709

默认值为自动。

tint0, t0
tint1, t1

设置灰度/色调矢量示波器模式的颜色色调。默认情况下,两个选项都为零。这意味着没有色调,输出将保持灰色。

11.276 vidstabdetect

分析视频稳定/去抖动。执行 2 个步骤中的第 1 步,有关第 2 步,请参阅 vidstabtransform

此滤镜会生成一个文件,其中包含关于后续帧的相对平移和旋转变换信息,然后由 vidstabtransform 滤镜使用。

要启用此滤镜的编译,您需要使用 --enable-libvidstab 配置 FFmpeg。

此过滤器接受以下选项

result

设置用于写入变换信息的文件路径。默认值为 transforms.trf

shakiness

设置视频的抖动程度和相机的速度。它接受 1-10 范围内的整数,值 1 表示抖动很小,值 10 表示抖动很强。默认值为 5。

精度

设置检测过程的准确性。它必须是 1-15 范围内的值。值 1 表示准确性较低,值 15 表示准确性较高。默认值为 15。

stepsize

设置搜索过程的步长。以 1 像素分辨率扫描最小值附近的区域。默认值为 6。

mincontrast

设置最小对比度。低于此值的局部测量区域将被丢弃。必须是 0-1 范围内的浮点数值。默认值为 0.3。

三脚架

为三脚架模式设置参考帧编号。

如果启用,则将帧的运动与过滤流中由指定编号标识的参考帧进行比较。其目的是补偿或多或少静态场景中的所有运动,并保持相机视图绝对静止。

如果设置为 0,则禁用。帧计数从 1 开始。

显示

在结果帧中显示字段和变换。它接受 0-2 范围内的整数。默认值为 0,这将禁用任何可视化。

文件格式

要写入的变换数据文件的格式。可接受的值包括

ascii

人类可读的纯文本

binary

二进制格式,比 ascii 小大约 40%。(默认)

11.276.1 示例

  • 使用默认值
    vidstabdetect
    
  • 分析剧烈抖动的电影并将结果放入文件 mytransforms.trf
    vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
    
  • 在结果视频中可视化内部变换的结果
    vidstabdetect=show=1
    
  • 使用 ffmpeg 分析具有中等抖动的视频
    ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
    

11.277 vidstabtransform

视频稳定/去抖动:第 2 步,共 2 步,第 1 步请参阅 vidstabdetect

读取包含每帧变换信息的文件并应用/补偿它们。与 vidstabdetect 过滤器一起使用,这可以用于对视频进行去抖动。另请参阅 http://public.hronopik.de/vid.stab。重要的是也要使用 unsharp 过滤器,如下所示。

要启用此滤镜的编译,您需要使用 --enable-libvidstab 配置 FFmpeg。

11.277.1 选项

输入

设置用于读取变换文件的路径。默认值为 transforms.trf

smoothing

设置用于低通滤波相机运动的帧数(值 * 2 + 1)。默认值为 10。

例如,数字 10 表示使用 21 帧(过去 10 帧和未来 10 帧)来平滑视频中的运动。较大的值会导致视频更平滑,但会限制相机的加速度(平移/倾斜运动)。0 是一种特殊情况,表示模拟静态相机。

optalgo

设置相机路径优化算法。

接受的值包括

gauss

相机运动上的高斯核低通滤波器(默认)

avg

变换的平均

maxshift

设置平移帧的最大像素数。默认值为 -1,表示没有限制。

maxangle

设置旋转帧的最大角度,以弧度表示(角度 * PI / 180)。默认值为 -1,表示没有限制。

裁剪

指定如何处理由于运动补偿而可能可见的边框。

可用值为

keep

保留上一帧的图像信息(默认)

black

将边框填充为黑色

反转

如果设置为 1,则反转变换。默认值为 0。

相对

如果设置为 1,则将变换视为相对于上一帧;如果设置为 0,则为绝对变换。默认值为 0。

缩放

设置缩放百分比。正值将导致放大效果,负值将导致缩小效果。默认值为 0(不缩放)。

optzoom

设置最佳缩放以避免边框。

接受的值包括

0

禁用

1

确定最佳静态缩放值(只有非常强烈的运动才会导致可见的边框)(默认)

2

确定最佳自适应缩放值(将看不到边框),请参阅 zoomspeed

请注意,在 zoom 中给出的值将添加到此处计算的值中。

zoomspeed

设置每帧最大缩放百分比(当 optzoom 设置为 2 时启用)。范围为 0 到 5,默认值为 0.25。

插值

指定插值类型。

可用值为

no

无插值

linear

仅水平线性插值

bilinear

在两个方向上线性插值(默认)

bicubic

在两个方向上进行三次插值(慢)

三脚架

如果设置为 1,则启用虚拟三脚架模式,这等效于 relative=0:smoothing=0。默认值为 0。

还使用 vidstabdetecttripod 选项。

调试

如果设置为 1,则增加日志详细程度。检测到的全局运动也会写入临时文件 global_motions.trf。默认值为 0。

11.277.2 示例

  • 使用 ffmpeg 进行具有默认值的典型稳定
    ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
    

    请注意始终推荐使用的 unsharp 过滤器的使用。

  • 稍微放大并从给定文件加载变换数据
    vidstabtransform=zoom=5:input="mytransforms.trf"
    
  • 使视频更加平滑
    vidstabtransform=smoothing=30
    

11.278 垂直翻转

垂直翻转输入视频。

例如,要使用 ffmpeg 垂直翻转视频

ffmpeg -i in.avi -vf "vflip" out.avi

11.279 vfrdet

检测可变帧率视频。

此过滤器尝试检测输入是可变帧率还是恒定帧率。

最后,它将输出检测到具有可变 delta pts 的帧数以及具有恒定 delta pts 的帧数。如果有具有可变 delta 的帧,则它还会显示遇到的最小、最大和平均 delta。

11.280 鲜艳度

增强或改变饱和度。

该滤波器接受以下选项

强度

如果值为正数,则设置增强强度;如果值为负数,则设置改变强度。默认值为 0。允许范围为 -2 到 2。

rbal

设置红色平衡。默认值为 1。允许范围为 -10 到 10。

gbal

设置绿色平衡。默认值为 1。允许范围为 -10 到 10。

bbal

设置蓝色平衡。默认值为 1。允许范围为 -10 到 10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

备选

如果 intensity 为负值,并且此值设置为 1,则颜色将改变,否则颜色饱和度将降低,更接近灰色。

11.280.1 命令

此过滤器支持以上所有选项作为 命令

11.281 vif

获取两个输入视频之间的平均 VIF(视觉信息保真度)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假定两个输入具有相同数量的帧,这些帧会逐一进行比较。

获得的平均 VIF 分数将通过日志系统打印出来。

过滤器会存储每帧计算的 VIF 分数。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

11.282 晕影

制作或反转自然的晕影效果。

该滤波器接受以下选项

角度, a

设置透镜角度表达式,以弧度表示。

该值被限制在 [0,PI/2] 范围内。

默认值:"PI/5"

x0
y0

设置中心坐标表达式。默认情况下分别为 "w/2""h/2"

mode

设置正向/反向模式。

可用的模式包括

正向

离中心点的距离越大,图像越暗。

反向

离中心点的距离越大,图像越亮。这可以用来反转晕影效果,尽管没有自动检测来提取透镜 角度 和其他设置(尚未)。它也可以用来创建燃烧效果。

默认值为 ‘正向’。

eval

设置表达式(anglex0y0)的评估模式。

它接受以下值

init

仅在过滤器初始化期间评估一次表达式。

frame

为每个传入的帧评估表达式。这比 ‘init’ 模式慢得多,因为它需要重新计算所有的缩放器,但它允许高级的动态表达式。

默认值为 ‘init’。

dither

设置抖动以减少圆形条纹效果。默认值为 1(启用)。

aspect

设置晕影纵横比。此设置允许调整晕影的形状。将此值设置为输入的 SAR 将使矩形晕影遵循视频的尺寸。

默认值为 1/1

11.282.1 表达式

alphax0y0 表达式可以包含以下参数。

w
h

输入宽度和高度

n

输入帧数,从 0 开始

pts

已过滤视频帧的 PTS(Presentation TimeStamp)时间戳,以 TB 为单位表示,如果未定义则为 NAN。

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

已过滤视频帧的 PTS(Presentation TimeStamp)时间戳,以秒为单位表示,如果未定义则为 NAN。

tb

输入视频的时间基准

11.282.2 示例

  • 应用简单的强烈晕影效果
    vignette=PI/4
    
  • 制作闪烁的晕影
    vignette='PI/4+random(1)*PI/50':eval=frame
    

11.283 vmafmotion

获取视频的平均 VMAF 运动得分。它是 VMAF 的组成指标之一。

获取的平均运动得分通过日志系统打印。

该滤波器接受以下选项

stats_file

如果指定,过滤器将使用指定的文件来保存每帧相对于前一帧的运动得分。当文件名等于“-”时,数据将发送到标准输出。

示例

ffmpeg -i ref.mpg -vf vmafmotion -f null -

11.284 vstack

垂直堆叠输入视频。

所有流必须具有相同的像素格式和相同的宽度。

请注意,此过滤器比使用 overlaypad 过滤器创建相同输出的速度更快。

该滤波器接受以下选项

输入

设置输入流的数量。默认为 2。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

11.285 w3fdif

对输入视频进行反交错(“w3fdif”代表“Weston 3 场反交错滤波器”)。

基于 Martin Weston 为 BBC R&D 描述的过程,并基于 Jim Easterbrook 为 BBC R&D 编写的反交错算法实现,Weston 3 场反交错滤波器使用由 BBC R&D 计算的滤波器系数。

此过滤器使用帧中的场主导信息来决定在输出中将每对场中的哪个场放在首位。如果它出错,请在 w3fdif 滤波器之前使用 setfield 滤波器。

有两组滤波器系数,称为“简单”和“复杂”。可以通过传递可选参数来设置使用哪组滤波器系数。

过滤器

设置隔行扫描滤波器系数。接受以下值之一

simple

简单滤波器系数集。

complex

更复杂的滤波器系数集。

默认值为 complex

mode

要采用的隔行模式。它接受以下值之一

为每个帧输出一个帧。

为每个场输出一个帧。

默认值为 field

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

tff

假设顶场优先。

bff

假设底场优先。

auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

all

反交错所有帧,

interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

11.285.1 命令

此滤镜支持与选项相同的 commands

11.286 波形

视频波形监视器。

波形监视器绘制颜色分量强度。默认情况下仅限亮度。波形的每一列对应于源视频中的一列像素。

它接受以下选项

模式, m

可以是 rowcolumn。默认为 column。在行模式下,左侧的图表表示颜色分量值 0,右侧表示值 = 255。在列模式下,顶部表示颜色分量值 = 0,底部表示值 = 255。

intensity, i

设置强度。较小的值有助于找出在输入行/列中分布了多少个相同亮度的值。默认值为 0.04。允许的范围为 [0, 1]。

mirror, r

设置镜像模式。0 表示未镜像,1 表示已镜像。在镜像模式下,较高的值将在 row 模式下显示在左侧,在 column 模式下显示在顶部。默认为 1(已镜像)。

display, d

设置显示模式。它接受以下值

overlay

呈现与 游行 中相同的信息,除了代表颜色分量的图直接相互叠加。

此显示模式更容易发现颜色分量重叠区域中相对的差异或相似之处,这些颜色分量应该相同,例如中性白色、灰色或黑色。

堆叠

row 模式下并排显示颜色分量的单独图形,或者在 column 模式下一个接一个地显示颜色分量的单独图形。

游行

column 模式下并排显示颜色分量的单独图形,或者在 row 模式下一个接一个地显示颜色分量的单独图形。

使用此显示模式可以轻松发现图像高光和阴影中的色彩偏移,方法是比较每个波形顶部和底部图表的轮廓。由于白色、灰色和黑色的特征是红色、绿色和蓝色完全相等,因此图片的自然区域应显示三个宽度/高度大致相等的波形。如果不是,则可以通过调整三个波形的电平来轻松进行校正。

默认为 堆叠

components, c

设置要显示的颜色分量。默认为 1,表示如果输入是 RGB 色彩空间,则仅显示亮度或红色颜色分量。例如,如果设置为 7,它将显示所有 3 个(如果)可用的颜色分量。

envelope, e
none

无包络,这是默认值。

instant

即时包络,即使 step 值很小,图中显示的最小值和最大值也清晰可见。

peak

在时间轴上保持图中显示的最小值和最大值。这样您仍然可以发现超出范围的值,而无需不断查看波形。

peak+instant

峰值和即时包络组合在一起。

filter, f
lowpass

不进行过滤,这是默认设置。

flat

亮度和色度组合在一起。

aflat

与上述类似,但显示蓝色和红色色度之间的差异。

xflat

与上述类似,但使用不同的颜色。

yflat

与上述类似,但再次使用不同的颜色。

chroma

仅显示色度。

color

在波形上显示实际颜色值。

acolor

与上述类似,但亮度显示色度值的频率。

标线,g

设置要显示的刻度。

none

不显示刻度。

绿色调

显示绿色刻度,显示合法的广播范围。

orange

显示橙色刻度,显示合法的广播范围。

invert

显示反转刻度,显示合法的广播范围。

不透明度, o

设置标线的不透明度。

flags, fl

设置标线标志。

numbers

在行上方绘制数字。默认情况下启用。

dots

绘制点而不是线。

scale, s

设置用于显示刻度的比例。

digital
millivolts
ire

默认值为 digital。

bgopacity, b

设置背景不透明度。

tint0, t0
tint1, t1

设置输出的色调。仅在低通滤波器和显示不是叠加时以及输入像素格式不是 RGB 时使用。

fitmode, fm

设置视频输出帧的样本宽高比。可用于配置波形,使其在某个方向上不会拉伸太多。

none

将样本宽高比设置为 1/1。

size

设置样本宽高比以匹配视频的输入大小

默认为 none

输入

设置要从中选择的过滤器的输入格式。可以是 all,用于从所有可用格式中选择;也可以是 first,用于选择第一个可用格式。默认值为 first

11.287 交织, 双重交织

weave 接受基于场的视频输入,并将每两个连续场连接到单个帧中,从而生成一个新的双倍高度剪辑,其帧速率和帧数减半。

doubleweave 的工作方式与 weave 相同,但不会将帧速率和帧数减半。

它接受以下选项

first_field

设置第一场。可用值为

top, t

将帧设置为顶场优先。

bottom, b

将帧设置为底场优先。

11.287.1 示例

  • 使用 selectseparatefields 过滤器交错视频
    separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
    

11.288 xbr

应用 xBR 高质量放大滤波器,该滤波器专为像素艺术设计。它遵循一组边缘检测规则,请参阅 https://forums.libretro.com/t/xbr-algorithm-tutorial/123

它接受以下选项

n

设置缩放维度:2 表示 2xBR3 表示 3xBR4 表示 4xBR。默认为 3

11.289 互相关

应用第一个和第二个输入视频流之间的归一化互相关。

第二个输入视频流的尺寸必须小于第一个输入视频流。

该滤波器接受以下选项

平面

设置要处理的平面。

次要的

设置将从第二个输入视频流处理哪个次要视频帧,可以是 firstall。默认为 all

xcorrelate 滤镜也支持 framesync 选项。

11.290 xfade

应用从一个输入视频流到另一个输入视频流的交叉淡入淡出。交叉淡入淡出应用于指定的持续时间。

两个输入都必须是恒定帧率,并且具有相同的分辨率、像素格式、帧率和时基。

该滤波器接受以下选项

过渡

设置可用的过渡效果之一

custom
fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown
circlecrop
rectcrop
distance
fadeblack
fadewhite
radial
smoothleft
smoothright
smoothup
smoothdown
circleopen
circleclose
vertopen
vertclose
horzopen
horzclose
dissolve
pixelize
diagtl
diagtr
diagbl
diagbr
hlslice
hrslice
vuslice
vdslice
hblur
fadegrays
wipetl
wipetr
wipebl
wipebr
squeezeh
squeezev
zoomin
fadefast
fadeslow
hlwind
hrwind
vuwind
vdwind
coverleft
coverright
coverup
coverdown
revealleft
revealright
revealup
revealdown

默认的过渡效果是淡入淡出。

时长

以秒为单位设置交叉淡入淡出持续时间。范围是 0 到 60 秒。默认持续时间为 1 秒。

offset

以秒为单位设置交叉淡入淡出相对于第一个输入流的起始时间。默认偏移量为 0。

expr

设置自定义过渡效果的表达式。

表达式可以使用以下变量和函数

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

P

过渡效果的进度。

PLANE

当前处理的平面。

A

返回当前位置和平面上第一个输入的值。

B

返回当前位置和平面上第二个输入的值。

a0(x, y)
a1(x, y)
a2(x, y)
a3(x, y)

返回第一个输入的第一个/第二个/第三个/第四个分量在位置 (x,y) 的像素值。

b0(x, y)
b1(x, y)
b2(x, y)
b3(x, y)

返回第二个输入的第一个/第二个/第三个/第四个分量在位置 (x,y) 的像素值。

11.290.1 示例

  • 从一个输入视频交叉淡入到另一个输入视频,使用淡入淡出过渡,过渡持续时间为 2 秒,起始偏移量为 5 秒
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

11.291 xmedian

从多个输入视频中选取中位数像素。

该滤波器接受以下选项

输入

设置输入数量。默认为 3。允许的范围是 3 到 255。如果输入数量是偶数,则结果将是两个中位数值之间的平均值。

平面

设置要过滤的平面。默认值为 15,这意味着将处理所有平面。

百分位数

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选取中值,而 0 将选取最小值,1 将选取最大值。

11.291.1 命令

此滤镜支持以上所有选项作为 命令,不包括 inputs 选项。

11.292 xpsnr

获取两个输入视频之间的平均(跨所有输入帧)和最小(跨所有颜色平面平均值)扩展感知加权峰值信噪比(XPSNR)。

XPSNR 是一种低复杂度的心理视觉驱动的失真测量算法,用于评估两个视频流或图像之间的差异。这对于客观地量化由视频和图像编解码器引起的失真特别有用,作为正式主观测试的替代方案。对数 XPSNR 输出值与传统的 psnr 评估值相似,但能更好地反映人对视觉编码质量的印象。有关 XPSNR 度量的更多详细信息,它本质上表示 PSNR 度量的分块加权变体,可以在以下免费提供的论文中找到

  • C. R. Helmrich、M. Siekmann、S. Becker、S. Bosse、D. Marpe 和 T. Wiegand,“XPSNR:用于高分辨率视频质量评估的感知加权峰值信噪比的低复杂度扩展”,载于 IEEE 国际声学、语音、信号处理会议(ICASSP),虚拟/在线,2020 年 5 月。 www.ecodis.de/xpsnr.htm
  • C. R. Helmrich、S. Bosse、H. Schwarz、D. Marpe 和 T. Wiegand,“对不同分辨率和位深度的视频压缩的扩展感知加权峰值信噪比(XPSNR)的研究”,ITU 期刊:ICT Discoveries,第 3 卷,第 1 期,第 65-72 页,2020 年 5 月。 http://handle.itu.int/11.1002/pub/8153d78b-en

当发布使用(例如)此 FFmpeg 滤镜获得的 XPSNR 评估结果时,强烈建议引用以上论文作为文档说明。该滤镜需要两个输入视频。第一个输入被视为(通常未失真的)参考源,并按原样传递到输出,而第二个输入是(失真的)测试信号。除了位深度外,这两个视频输入必须具有相同的像素格式。此外,为了获得最佳性能,两个比较的输入视频都应为 YCbCr 颜色格式。

上述获得的整体 XPSNR 值通过日志系统打印出来。在具有多个颜色平面的输入的情况下,我们建议报告最小 XPSNR 平均值。

接受以下参数,其行为类似于 psnr 滤镜的参数

stats_file, f

如果指定,滤镜将使用命名文件保存每个单独帧和颜色平面的 XPSNR 值。当文件名等于“ - ”时,该数据将发送到标准输出。

此滤镜还支持 framesync 选项。

11.292.1 示例

  • 分析两个 1080p 高清视频 ref_source.yuv 和 test_video.yuv 的 XPSNR,两者都为每秒 24 帧,颜色格式为 4:2:0,位深度为 8,并输出名为“xpsnr.log”的日志文件
    ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate
    24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
    
  • 分析两个 2160p 超高清视频的 XPSNR,其中 ref_source.yuv 的位深度为 8,test_video.yuv 的位深度为 10,两者都为每秒 60 帧,颜色格式为 4:2:0,无日志文件输出
    ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate
    60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
    

11.293 xstack

将视频输入堆叠到自定义布局中。

所有流都必须具有相同的像素格式。

该滤波器接受以下选项

输入

设置输入流的数量。默认为 2。

layout

指定输入布局。此选项要求用户显式设置所需的布局配置。这设置了每个视频输入在输出中的位置。每个输入由“|”分隔。第一个数字表示列,第二个数字表示行。数字从 0 开始,并用“_”分隔。可以选择使用 wX 和 hX,其中 X 是从中获取宽度或高度的视频输入。当使用“+”分隔时,可以使用多个值。在这种情况下,值会相加在一起。

请注意,如果输入大小不同,则可能会出现间隙,因为并非所有输出视频帧都会被填充。同样,如果视频的位置没有为相邻视频的整个帧留出足够的空间,则视频可能会相互重叠。

对于 2 个输入,设置默认布局为 0_0|w0_0(相当于 grid=2x1)。在所有其他情况下,必须由用户设置布局或网格。一次只能指定 gridlayout。同时指定两者会导致错误。

网格

指定输入流的固定大小网格。此选项用于创建输入流的固定大小网格。以 列数x行数 的形式设置网格大小。必须有 行数 * 列数 个输入流,它们将排列成一个具有 行数 行和 列数 列的网格。使用此选项时,同一行中的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。

如果设置了 grid,则 inputs 选项将被忽略,并隐式设置为 行数 * 列数

对于 2 个输入,将设置默认网格 2x1 (相当于 layout=0_0|w0_0)。在所有其他情况下,必须由用户设置布局或网格。gridlayout 只能同时指定一个。同时指定两者将导致错误。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

fill

如果设置为有效的颜色,所有未使用的像素将填充该颜色。默认情况下,填充设置为 none,因此禁用。

11.293.1 示例

  • 将 4 个输入显示为 2x2 网格。

    布局

    input1(0, 0)  | input3(w0, 0)
    input2(0, h0) | input4(w0, h0)
    
    xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0
    

    请注意,如果输入大小不同,则可能会出现间隙或重叠。

  • 将 4 个输入显示为 1x4 网格。

    布局

    input1(0, 0)
    input2(0, h0)
    input3(0, h0+h1)
    input4(0, h0+h1+h2)
    
    xstack=inputs=4:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2
    

    请注意,如果输入宽度不同,则会出现未使用的空间。

  • 将 9 个输入显示为 3x3 网格。

    布局

    input1(0, 0)       | input4(w0, 0)      | input7(w0+w3, 0)
    input2(0, h0)      | input5(w0, h0)     | input8(w0+w3, h0)
    input3(0, h0+h1)   | input6(w0, h0+h1)  | input9(w0+w3, h0+h1)
    
    xstack=inputs=9:layout=0_0|0_h0|0_h0+h1|w0_0|w0_h0|w0_h0+h1|w0+w3_0|w0+w3_h0|w0+w3_h0+h1
    

    请注意,如果输入大小不同,则可能会出现间隙或重叠。

  • 将 16 个输入显示为 4x4 网格。

    布局

    input1(0, 0)       | input5(w0, 0)       | input9 (w0+w4, 0)       | input13(w0+w4+w8, 0)
    input2(0, h0)      | input6(w0, h0)      | input10(w0+w4, h0)      | input14(w0+w4+w8, h0)
    input3(0, h0+h1)   | input7(w0, h0+h1)   | input11(w0+w4, h0+h1)   | input15(w0+w4+w8, h0+h1)
    input4(0, h0+h1+h2)| input8(w0, h0+h1+h2)| input12(w0+w4, h0+h1+h2)| input16(w0+w4+w8, h0+h1+h2)
    
    xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0|
    w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2
    

    请注意,如果输入大小不同,则可能会出现间隙或重叠。

11.294 yadif

对输入视频进行反交错(“yadif” 表示“又一个反交错滤波器”)。

它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

0,send_frame

为每个帧输出一个帧。

1,send_field

为每个场输出一个帧。

2, send_frame_nospatial

类似于 send_frame,但它跳过空间交错检查。

3, send_field_nospatial

类似于 send_field,但它跳过空间交错检查。

默认值是 send_frame

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

0,all

对所有帧进行去隔行处理。

1,interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

11.295 yadif_cuda

使用 yadif 算法对输入视频进行反交错,但该算法在 CUDA 中实现,因此它可以作为带有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分工作。

它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

0,send_frame

为每个帧输出一个帧。

1,send_field

为每个场输出一个帧。

2, send_frame_nospatial

类似于 send_frame,但它跳过空间交错检查。

3, send_field_nospatial

类似于 send_field,但它跳过空间交错检查。

默认值是 send_frame

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

0,all

对所有帧进行去隔行处理。

1,interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

11.296 yaepblur

应用模糊滤镜,同时保留边缘(“yaepblur” 表示“又一个保留边缘的模糊滤镜”)。该算法在“J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980.”中进行了描述。

它接受以下参数

半径, r

设置窗口半径。默认值为 3。

平面,p

设置要过滤的平面。默认情况下仅为第一个平面。

sigma, s

设置模糊强度。默认值为 128。

11.296.1 命令

此滤镜支持与选项相同的 commands

11.297 缩放平移

应用缩放和平移效果。

此过滤器接受以下选项

缩放, z

设置缩放表达式。范围是 1-10。默认值为 1。

x
y

设置 x 和 y 表达式。默认值为 0。

d

以帧数为单位设置持续时间表达式。这设置了单个输入图像的效果将持续多少帧。默认值为 90。

s

设置输出图像大小,默认值为 'hd720'。

fps

设置输出帧率,默认值为 '25'。

每个表达式可以包含以下常量

in_w, iw

输入宽度。

in_h, ih

输入高度。

out_w, ow

输出宽度。

out_h, oh

输出高度。

in

输入帧计数。

on

输出帧计数。

输入时间, it

以秒为单位表示的输入时间戳。如果输入时间戳未知,则为 NAN。

输出时间, time, ot

以秒为单位表示的输出时间戳。

x
y

从当前输入帧的 'x' 和 'y' 表达式计算出的最后 'x' 和 'y' 位置。

px
py

上一个输入帧的最后一个输出帧的 'x' 和 'y',或者当还没有这样的帧时(第一个输入帧)为 0。

缩放

从当前输入帧的 'z' 表达式计算出的最后缩放。

pzoom

上一个输入帧的最后一个输出帧的最后计算的缩放。

时长

当前输入帧的输出帧数。从每个输入帧的 'd' 表达式计算得出。

pduration

为上一个输入帧创建的输出帧数

a

有理数:输入宽度 / 输入高度

sar

样本宽高比

dar

显示宽高比

11.297.1 示例

  • 放大到 1.5 倍,同时平移到画面中心附近的某个点
    zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
    
  • 放大到 1.5 倍,并始终平移到画面中心
    zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    
  • 与上面相同,但没有暂停
    zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    
  • 仅在输入视频的第一秒将画面放大 2 倍到中心
    zoompan=z='if(between(in_time,0,1),2,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    

11.298 zscale

使用 z.lib 库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg。要启用此滤镜的编译,您需要使用 --enable-libzimg 配置 FFmpeg。

zscale 滤镜通过更改输出样本宽高比,强制输出显示宽高比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,zscale 滤镜会将输入转换为请求的格式。

11.298.1 选项

此滤镜接受以下选项。

宽度,w
高度,h

设置输出视频维度表达式。默认值为输入维度。

如果 widthw 的值为 0,则输出使用输入宽度。如果 heighth 的值为 0,则输出使用输入高度。

如果其中一个值且仅有一个值为 -n 且 n >= 1,zscale 滤镜将使用一个值来保持输入图像的宽高比,该值从另一个指定的维度计算得出。之后,它将确保计算出的维度可以被 n 整除,并在必要时调整该值。

如果两个值均为 -n,且 n >= 1,则其行为与两个值都设置为 0 时相同,如前所述。

请参见下文,了解可在维度表达式中使用的接受的常量列表。

size, s

设置视频大小。有关此选项的语法,请查看 (ffmpeg-utils)ffmpeg-utils 手册中的“视频大小”部分

抖动, d

设置抖动类型。

可能的值为

有序
随机
误差扩散

默认值为 none。

filter, f

设置调整大小滤镜类型。

可能的值为

双线性
双三次
样条 16
样条 36
lanczos

默认值为双线性。

范围, r

设置颜色范围。

可能的值为

输入
有限
完整

默认与输入相同。

原色, p

设置颜色原色。

可能的值为

输入
709
未指定
170m
240m
2020

默认与输入相同。

传递, t

设置传递特性。

可能的值为

输入
709
未指定
601
linear
2020_10
2020_12
smpte2084
iec61966-2-1
arib-std-b67

默认与输入相同。

矩阵, m

设置色彩空间矩阵。

可能的值为

输入
709
未指定
470bg
170m
2020_ncl
2020_cl

默认与输入相同。

输入范围, rin

设置输入颜色范围。

可能的值为

输入
有限
完整

默认与输入相同。

输入原色, pin

设置输入颜色原色。

可能的值为

输入
709
未指定
170m
240m
2020

默认与输入相同。

输入传递, tin

设置输入传递特性。

可能的值为

输入
709
未指定
601
linear
2020_10
2020_12

默认与输入相同。

输入矩阵, min

设置输入色彩空间矩阵。

可能的值为

输入
709
未指定
470bg
170m
2020_ncl
2020_cl
色度位置, c

设置输出色度位置。

可能的值为

输入
left
中心
左上角
top
左下角
bottom
输入色度位置, cin

设置输入色度位置。

可能的值为

输入
left
中心
左上角
top
左下角
bottom
npl

设置标称峰值亮度。

param_a

缩放滤镜的参数 A。双三次的参数“b”,以及 lanczos 的滤镜抽头数。

param_b

缩放滤镜的参数 B。双三次的参数“c”。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放后的)宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

hsub
vsub

水平和垂直输入色度子采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

ohsub
ovsub

水平和垂直输出色度子采样值。例如,对于像素格式 “yuv422p”,hsub 为 2,vsub 为 1。

11.298.2 命令

此滤波器支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

12 OpenCL 视频滤镜

以下是对当前可用的 OpenCL 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-opencl 配置 FFmpeg。

运行 OpenCL 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device opencl[=名称][:设备[,键=值...]]

使用给定的设备参数,初始化一个名为 名称opencl 类型的新硬件设备。

-filter_hw_device 名称

将名为 名称 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参见 https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 选择第二个平台上的第一个设备,并在其上使用默认参数运行 avgblur_opencl 滤镜的示例。
    -init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
    

由于 OpenCL 滤镜无法访问普通内存中的帧数据,因此所有帧数据都需要上传(hwupload)到连接到相应设备的硬件表面,然后下载(hwdownload)回普通内存。请注意,hwupload 将上传到与软件帧布局相同的表面,因此可能需要在前面添加 format 滤镜以使输入转换为正确的格式,并且 hwdownload 不支持输出上的所有格式 - 可能需要在图表中紧随其后插入额外的 format 滤镜,以使输出转换为支持的格式。

12.1 avgblur_opencl

应用平均模糊滤镜。

该滤波器接受以下选项

sizeX

设置水平半径大小。范围是 [1, 1024],默认值为 1

平面

设置要过滤的平面。默认值为 0xf,表示处理所有平面。

sizeY

设置垂直半径大小。范围是 [1, 1024],默认值为 0。如果为零,则将使用 sizeX 值。

12.1.1 示例

  • 应用平均模糊滤镜,水平和垂直尺寸均为 3,将输出的每个像素设置为输入图像中以该像素为中心的 7x7 区域的平均值。对于图像边缘的像素,该区域不会超出图像边界,因此计算中不会使用超出范围的坐标。
    -i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
    

12.2 boxblur_opencl

对输入视频应用盒式模糊算法。

它接受以下参数

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

以下是可接受选项的描述。

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

设置用于模糊相应输入平面的盒半径(以像素为单位)的表达式。

半径值必须是非负数,并且对于亮度平面和 alpha 平面,不得大于表达式 min(w,h)/2 的值,对于色度平面,不得大于 min(cw,ch)/2 的值。

luma_radius 的默认值为“2”。如果未指定,chroma_radiusalpha_radius 默认设置为与 luma_radius 设置的相应值。

表达式可以包含以下常量

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像的宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定对相应平面应用盒式模糊滤镜的次数。

luma_power 的默认值为 2。如果未指定,chroma_poweralpha_power 默认设置为与 luma_power 设置的相应值。

值为 0 将禁用效果。

12.2.1 示例

应用盒状模糊滤镜,将输出的每个像素设置为每个平面的盒半径 luma_radiuschroma_radiusalpha_radius 的平均值。该滤镜将在相应的平面上应用 luma_powerchroma_poweralpha_power 次。对于图像边缘的像素,半径不会超出图像边界,因此计算中不会使用超出范围的坐标。

  • 应用盒状模糊滤镜,亮度、色度和 alpha 半径均设置为 2,亮度、色度和 alpha 强度均设置为 3。该滤镜将对图像的每个平面运行 3 次,盒半径设置为 2。
    -i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
    -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
    
  • 应用盒状模糊滤镜,亮度半径设置为 2,亮度强度设置为 1,色度半径设置为 4,色度强度设置为 5,alpha 半径设置为 3,alpha 强度设置为 7。

    对于亮度平面,将运行一次 2x2 的盒半径。

    对于色度平面,将运行 5 次 4x4 的盒半径。

    对于 alpha 平面,将运行 7 次 3x3 的盒半径。

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

12.3 colorkey_opencl

RGB 色彩空间颜色键控。

该滤波器接受以下选项

color

将替换为透明度的颜色。

相似度

与键颜色的相似度百分比。

0.01 仅匹配精确的键颜色,而 1.0 匹配所有颜色。

混合

混合百分比。

0.0 使像素完全透明或完全不透明。

更高的值会产生半透明像素,像素颜色与关键颜色越相似,透明度越高。

12.3.1 示例

  • 使输入中每个半绿色的像素透明,并进行一些轻微的混合。
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

12.4 convolution_opencl

应用 3x3、5x5、7x7 矩阵的卷积。

该滤波器接受以下选项

0m
1m
2m
3m

设置每个平面的矩阵。矩阵是 9、25 或 49 个有符号数字的序列。每个平面的默认值为 0 0 0 0 1 0 0 0 0

0rdiv
1rdiv
2rdiv
3rdiv

设置每个平面计算值的乘数。如果未设置或为 0,则它将是所有矩阵元素的总和。该选项值必须是大于或等于 0.0 的浮点数。默认值为 1.0

0bias
1bias
2bias
3bias

设置每个平面的偏差。此值将添加到乘法的结果中。可用于使整体图像更亮或更暗。该选项值必须是大于或等于 0.0 的浮点数。默认值为 0.0

12.4.1 示例

  • 应用锐化
    -i INPUT -vf "hwupload, convolution_opencl=0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0, hwdownload" OUTPUT
    
  • 应用模糊
    -i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9, hwdownload" OUTPUT
    
  • 应用边缘增强
    -i INPUT -vf "hwupload, convolution_opencl=0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128, hwdownload" OUTPUT
    
  • 应用边缘检测
    -i INPUT -vf "hwupload, convolution_opencl=0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128, hwdownload" OUTPUT
    
  • 应用包含对角线的拉普拉斯边缘检测器
    -i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0, hwdownload" OUTPUT
    
  • 应用浮雕
    -i INPUT -vf "hwupload, convolution_opencl=-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2, hwdownload" OUTPUT
    

12.5 erosion_opencl

对视频应用腐蚀效果。

此过滤器将像素替换为局部(3x3)最小值。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大变化。范围为 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。范围为 [0, 255],默认值为 255,即使用所有八个像素。

x 为中心的局部 3x3 坐标区域的标志

1 2 3

4 x 5

6 7 8

12.5.1 示例

  • 应用腐蚀滤镜,threshold0 设置为 30,threshold1 设置为 40,threshold2 设置为 50,坐标设置为 231,将输出的每个像素设置为输入图像中以该像素为中心的 3x3 区域中的像素:1、2、3、6、7、8 之间的局部最小值。如果输入像素和局部最小值之间的差异大于相应平面的阈值,则输出像素将设置为输入像素 - 相应平面的阈值。
    -i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

12.6 deshake_opencl

基于特征点的视频稳定滤镜。

该滤波器接受以下选项

三脚架

通过阻止原始帧的任何相机移动来模拟三脚架。默认为 0

调试

是否应在处理后的输出和控制台中显示其他调试信息。

请注意,要查看控制台调试输出,您还需要将 -v verbose 传递给 ffmpeg。

输出视频中查看点匹配仅支持 RGB 输入。

默认为 0

自适应裁剪

是否在边界处进行少量裁剪,以减少镜像像素的数量。

默认为 1

优化特征

是否应在亚像素级别优化特征点。

可以关闭此功能以获得轻微的性能提升,但会牺牲精度。

默认为 1

平滑强度

应用于从 0.01.0 的相机路径的平滑强度。

1.0 是最大平滑强度,而小于该值的结果会导致平滑度降低。

0.0 会导致滤镜在每帧的基础上自适应地选择平滑强度。

默认为 0.0

平滑窗口乘数

控制平滑窗口的大小(缓冲帧的数量以确定运动信息)。

平滑窗口的大小通过将视频的帧率乘以这个数字来确定。

可接受的值范围为 0.110.0

较大的值会增加可用于确定如何平滑相机路径的运动数据量,从而可能提高平滑度,但也增加了延迟和内存使用量。

默认为 2.0

12.6.1 示例

  • 使用固定的中等平滑强度稳定视频
    -i INPUT -vf "hwupload, deshake_opencl=smooth_strength=0.5, hwdownload" OUTPUT
    
  • 使用调试(在控制台和渲染视频中)稳定视频
    -i INPUT -filter_complex "[0:v]format=rgba, hwupload, deshake_opencl=debug=1, hwdownload, format=rgba, format=yuv420p" -v verbose OUTPUT
    

12.7 dilation_opencl

将膨胀效果应用于视频。

此滤镜将像素替换为局部 (3x3) 最大值。

它接受以下选项

阈值0
阈值1
阈值2
阈值3

限制每个平面的最大变化。范围为 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。范围为 [0, 255],默认值为 255,即使用所有八个像素。

x 为中心的局部 3x3 坐标区域的标志

1 2 3

4 x 5

6 7 8

12.7.1 示例

  • 应用膨胀滤镜,threshold0 设置为 30,threshold1 设置为 40,threshold2 设置为 50,坐标设置为 231,将输出的每个像素设置为输入图像中以该像素为中心的 3x3 区域中的像素:1、2、3、6、7、8 之间的局部最大值。如果输入像素和局部最大值之间的差异大于相应平面的阈值,则输出像素将设置为输入像素 + 相应平面的阈值。
    -i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

12.8 nlmeans_opencl

通过 OpenCL 的非局部均值降噪滤镜,此滤镜接受与 nlmeans 相同的选项。

12.9 overlay_opencl

将一个视频覆盖在另一个视频之上。

它接受两个输入并有一个输出。第一个输入是“主”视频,第二个输入叠加在上面。此滤镜要求所有输入具有相同的内存布局。因此,可能需要进行格式转换。

该滤波器接受以下选项

x

设置叠加视频在主视频上的 x 坐标。默认值为 0

y

设置叠加视频在主视频上的 y 坐标。默认值为 0

12.9.1 示例

  • 将图像 LOGO 叠加到 INPUT 视频的左上角。两个输入都是 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    
  • 输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,例如 INPUT 是 yuv420p,而 LOGO 是 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    

12.10 pad_opencl

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,以便输入图像在填充区域内居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

aspect

填充到宽高比而不是分辨率。

widthheightxy 选项的值是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

ow
oh

这些与 out_wout_h 相同。

x
y

x 和 y 偏移量,由 xy 表达式指定,如果尚未指定,则为 NAN。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

12.11 prewitt_opencl

将 Prewitt 算子 (https://en.wikipedia.org/wiki/Prewitt_operator) 应用于输入视频流。

此滤波器接受以下选项

平面

设置要过滤的平面。默认值为 0xf,表示处理所有平面。

scale

设置将与过滤结果相乘的值。范围为 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果中的值。范围为 [-65535, 65535],默认值为 0.0

12.11.1 示例

  • 应用 Prewitt 算子,比例设置为 2,delta 设置为 10。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

12.12 program_opencl

使用 OpenCL 程序过滤视频。

OpenCL 程序源文件。

kernel

程序中的内核名称。

输入

滤镜的输入数量。默认为 1。

size, s

输出帧的大小。默认为与第一个输入相同。

program_opencl 滤镜还支持 framesync 选项。

程序源文件必须包含具有给定名称的内核函数,该函数将为每个输出平面运行一次。在平面上的每次运行都作为单独的 2D 全局 NDRange 排队,为每个要生成的像素提供一个工作项。因此,每个工作项的全局 ID 偏移是目标图像中像素的坐标。

内核函数需要接受以下参数

  • 目标图像,__write_only image2d_t

    此图像将成为输出;内核应写入所有图像。

  • 帧索引,unsigned int

    这是一个从零开始的计数器,每帧增加一。

  • 源图像,__read_only image2d_t

    这些是每个输入上的最新图像。内核可以从中读取以生成输出,但不能写入它们。

示例程序

  • 将输入复制到输出(输出的大小必须与输入相同)。
    __kernel void copy(__write_only image2d_t destination,
                       unsigned int index,
                       __read_only  image2d_t source)
    {
        const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE;
    
        int2 location = (int2)(get_global_id(0), get_global_id(1));
    
        float4 value = read_imagef(source, sampler, location);
    
        write_imagef(destination, location, value);
    }
    
  • 应用简单的变换,将输入旋转一个随索引计数器增加的量。像素值通过采样器线性插值,并且输出不必与输入具有相同的尺寸。
    __kernel void rotate_image(__write_only image2d_t dst,
                               unsigned int index,
                               __read_only  image2d_t src)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
    
        float angle = (float)index / 100.0f;
    
        float2 dst_dim = convert_float2(get_image_dim(dst));
        float2 src_dim = convert_float2(get_image_dim(src));
    
        float2 dst_cen = dst_dim / 2.0f;
        float2 src_cen = src_dim / 2.0f;
    
        int2   dst_loc = (int2)(get_global_id(0), get_global_id(1));
    
        float2 dst_pos = convert_float2(dst_loc) - dst_cen;
        float2 src_pos = {
            cos(angle) * dst_pos.x - sin(angle) * dst_pos.y,
            sin(angle) * dst_pos.x + cos(angle) * dst_pos.y
        };
        src_pos = src_pos * src_dim / dst_dim;
    
        float2 src_loc = src_pos + src_cen;
    
        if (src_loc.x < 0.0f      || src_loc.y < 0.0f ||
            src_loc.x > src_dim.x || src_loc.y > src_dim.y)
            write_imagef(dst, dst_loc, 0.5f);
        else
            write_imagef(dst, dst_loc, read_imagef(src, sampler, src_loc));
    }
    
  • 将两个输入混合在一起,每个输入的用量随索引计数器而变化。
    __kernel void blend_images(__write_only image2d_t dst,
                               unsigned int index,
                               __read_only  image2d_t src1,
                               __read_only  image2d_t src2)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
    
        float blend = (cos((float)index / 50.0f) + 1.0f) / 2.0f;
    
        int2  dst_loc = (int2)(get_global_id(0), get_global_id(1));
        int2 src1_loc = dst_loc * get_image_dim(src1) / get_image_dim(dst);
        int2 src2_loc = dst_loc * get_image_dim(src2) / get_image_dim(dst);
    
        float4 val1 = read_imagef(src1, sampler, src1_loc);
        float4 val2 = read_imagef(src2, sampler, src2_loc);
    
        write_imagef(dst, dst_loc, val1 * blend + val2 * (1.0f - blend));
    }
    

12.13 remap_opencl

使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。

位置 (X, Y) 处的目标像素将从源 (x, y) 位置选取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则将为目标像素使用零值。

Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流将具有 Xmap/Ymap 视频流的尺寸。Xmap 和 Ymap 输入视频流为 32 位浮点像素格式,单通道。

插值

指定用于像素重映射的插值方法。允许的值为 nearlinear。默认值为 linear

fill

指定未映射像素的颜色。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“颜色”部分。默认颜色为 black

12.14 roberts_opencl

将 Roberts 交叉算子(https://en.wikipedia.org/wiki/Roberts_cross)应用于输入视频流。

此滤波器接受以下选项

平面

设置要过滤的平面。默认值为 0xf,表示处理所有平面。

scale

设置将与过滤结果相乘的值。范围为 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果中的值。范围为 [-65535, 65535],默认值为 0.0

12.14.1 示例

  • 应用 Roberts 交叉算子,并将缩放设置为 2,增量设置为 10。
    -i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

12.15 sobel_opencl

将 Sobel 算子(https://en.wikipedia.org/wiki/Sobel_operator)应用于输入视频流。

此滤波器接受以下选项

平面

设置要过滤的平面。默认值为 0xf,表示处理所有平面。

scale

设置将与过滤结果相乘的值。范围为 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果中的值。范围为 [-65535, 65535],默认值为 0.0

12.15.1 示例

  • 应用 Sobel 算子,并将缩放设置为 2,增量设置为 10。
    -i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

12.16 tonemap_opencl

使用色调映射执行 HDR(PQ/HLG) 到 SDR 的转换。

它接受以下参数

色调映射

指定要使用的色调映射算子。与 tonemap 中的 tonemap 选项相同。

param

调整色调映射算法。与 tonemap 中的 param 选项相同。

desat

对超过此亮度的亮度应用去饱和度。参数越高,保留的颜色信息越多。此设置通过(平滑地)变为白色,有助于防止超高光出现不自然的色彩过曝。这使得图像感觉更自然,但代价是减少了超出范围的颜色信息。

默认值为 0.5,并且此处的算法与当前 CPU 版本的色调映射略有不同。设置为 0.0 将禁用此选项。

threshold

色调映射算法的参数是针对每个场景进行微调的。并且使用阈值来检测场景是否发生变化。如果当前帧平均亮度与当前运行平均值之间的距离超过阈值,我们将重新计算场景平均亮度和峰值亮度。默认值为 0.2。

format

指定输出像素格式。

当前支持的格式为

p010
nv12
范围, r

设置输出颜色范围。

可能的值为

tv/mpeg
pc/jpeg

默认与输入相同。

原色, p

设置输出颜色原色。

可能的值为

bt709
bt2020

默认与输入相同。

传递, t

设置输出传输特性。

可能的值为

bt709
bt2020

默认值为 bt709。

矩阵, m

设置输出色彩空间矩阵。

可能的值为

bt709
bt2020

默认与输入相同。

12.16.1 示例

  • 使用线性算子将 HDR(PQ/HLG) 视频转换为 bt2020 传输特性 p010 格式。
    -i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
    

12.17 unsharp_opencl

锐化或模糊输入视频。

它接受以下参数

luma_msize_x, lx

设置亮度矩阵的水平大小。范围为 [1, 23],默认值为 5

luma_msize_y, ly

设置亮度矩阵的垂直大小。范围为 [1, 23],默认值为 5

luma_amount, la

设置亮度效果强度。范围为 [-10, 10],默认值为 1.0

负值会模糊输入视频,而正值会锐化它,值为零将禁用该效果。

chroma_msize_x, cx

设置色度矩阵的水平大小。范围为 [1, 23],默认值为 5

chroma_msize_y, cy

设置色度矩阵的垂直大小。范围为 [1, 23],默认值为 5

chroma_amount, ca

设置色度效果强度。范围为 [-10, 10],默认值为 0.0

负值会模糊输入视频,而正值会锐化它,值为零将禁用该效果。

所有参数都是可选的,默认值等效于字符串“5:5:1.0:5:5:0.0”。

12.17.1 示例

  • 应用强亮度锐化效果
    -i INPUT -vf "hwupload, unsharp_opencl=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5, hwdownload" OUTPUT
    
  • 对亮度和色度参数都应用强模糊效果
    -i INPUT -vf "hwupload, unsharp_opencl=7:7:-2:7:7:-2, hwdownload" OUTPUT
    

12.18 xfade_opencl

使用 OpenCL 通过自定义过渡效果交叉淡化两个视频。

它接受以下选项

过渡

设置可能的过渡效果之一。

custom

选择自定义过渡效果,实际过渡描述将从 source 和 kernel 选项中选取。

fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown

默认过渡效果为淡入淡出 (fade)。

用于自定义过渡的 OpenCL 程序源文件。

kernel

设置要用于自定义过渡的内核名称,该名称来自程序源文件。

时长

设置视频过渡的持续时间。

offset

设置相对于第一个视频的过渡开始时间。

程序源文件必须包含具有给定名称的内核函数,该函数将为每个输出平面运行一次。在平面上的每次运行都作为单独的 2D 全局 NDRange 排队,为每个要生成的像素提供一个工作项。因此,每个工作项的全局 ID 偏移是目标图像中像素的坐标。

内核函数需要接受以下参数

  • 目标图像,__write_only image2d_t

    此图像将成为输出;内核应写入所有图像。

  • 第一个源图像,__read_only image2d_t。第二个源图像,__read_only image2d_t

    这些是每个输入上的最新图像。内核可以从中读取以生成输出,但不能写入它们。

  • 过渡进度,float。此值始终在 0 到 1 之间(包括 0 和 1)。

示例程序

  • 应用点幕过渡效果
    __kernel void blend_images(__write_only image2d_t dst,
                               __read_only  image2d_t src1,
                               __read_only  image2d_t src2,
                               float progress)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
        int2  p = (int2)(get_global_id(0), get_global_id(1));
        float2 rp = (float2)(get_global_id(0), get_global_id(1));
        float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y);
        rp = rp / dim;
    
        float2 dots = (float2)(20.0, 20.0);
        float2 center = (float2)(0,0);
        float2 unused;
    
        float4 val1 = read_imagef(src1, sampler, p);
        float4 val2 = read_imagef(src2, sampler, p);
        bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center));
    
        write_imagef(dst, p, next ? val1 : val2);
    }
    

13 VAAPI 视频滤镜

VAAPI 视频滤镜通常与 VAAPI 解码器和 VAAPI 编码器一起使用。以下是 VAAPI 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-vaapi 配置 FFmpeg。

要使用 vaapi 滤镜,您需要正确设置 vaapi 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/VAAPI

13.1 overlay_vaapi

将一个视频叠加到另一个视频的顶部。

它接受两个输入,并有一个输出。第一个输入是“主要”视频,第二个输入覆盖在其上。

该滤波器接受以下选项

x
y

设置覆盖视频在主视频上的 x 和 y 坐标的表达式。

两个表达式的默认值都为 "0"。

w
h

设置主视频上叠加视频的宽度和高度的表达式。

默认值是,’w’ 为 ’overlay_iw’,’h’ 为 ’overlay_ih*w/overlay_iw’。

表达式可以包含以下参数

main_w, W
main_h, H

主输入的宽度和高度。

overlay_iw
overlay_ih

覆盖输入的宽度和高度。

overlay_w, w
overlay_h, h

叠加输出的宽度和高度。

overlay_x, x
overlay_y, y

叠加层在主体内的位置

alpha

设置叠加视频的透明度。允许的范围是 0.0 到 1.0。值越高,透明度越低。默认值为 1.0

eof_action

请参阅framesync

shortest

请参阅framesync

repeatlast

请参阅framesync

此滤镜还支持 framesync 选项。

13.1.1 示例

  • 将图像 LOGO 叠加到输入视频的左上角。此滤镜的两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
    
  • 将图像 LOGO 叠加到距离输入视频左上角偏移 (200, 100) 的位置。输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,例如输入为 yuv420p,而 LOGO 为 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
    

13.2 tonemap_vaapi

执行 HDR 到 SDR 或 HDR 到 HDR 的色调映射。当前仅接受 HDR10 作为输入。

它接受以下参数

format

指定输出像素格式。

HDR 到 SDR 色调映射的默认值为 nv12,HDR 到 HDR 色调映射的默认值为 p010。

原色, p

设置输出颜色原色。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

传递, t

设置输出传输特性。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

矩阵, m

设置输出色彩空间矩阵。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

display

设置输出主显示颜色容量。它由一个以“|”分隔的两个值的列表给出,这两个值用空格分隔。它设置 G、B、R 顺序的显示原色 x 和 y,然后是白点 x 和 y,标称最小和最大显示亮度。

设置此选项时,将执行 HDR 到 HDR 的色调映射。

light

设置输出内容的光照级别信息。它接受 2 个以空格分隔的值,第一个输入是最大光照级别,第二个输入是最大平均光照级别。

对于 HDR 到 SDR 的色调映射,它将被忽略,对于 HDR 到 HDR 的色调映射,它是可选的。

13.2.1 示例

  • 将 HDR(HDR10)视频转换为 bt2020 传输特性 p010 格式
    tonemap_vaapi=format=p010:t=bt2020-10
    
  • 将 HDR 视频转换为 HDR 视频
    tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000
    

13.3 hstack_vaapi

水平堆叠输入视频。

这是 hstack 滤镜的 VA-API 变体,每个输入流可能具有不同的高度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。

它接受以下选项

输入

请参阅 hstack

shortest

请参阅 hstack

height

设置输出高度。如果设置为 0,则此滤镜将输出高度设置为第一个输入流的高度。默认值为 0。

13.4 vstack_vaapi

垂直堆叠输入视频。

这是 vstack 滤镜的 VA-API 变体,每个输入流可能具有不同的宽度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。

它接受以下选项

输入

请参阅 vstack

shortest

请参阅 vstack

width

设置输出宽度。如果设置为 0,则此滤镜将输出宽度设置为第一个输入流的宽度。默认值为 0。

13.5 xstack_vaapi

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 VA-API 变体,每个输入流可能具有不同的大小,此滤镜会将每个输入流缩小/放大到给定的输出大小或第一个输入流的大小。

它接受以下选项

输入

请参阅 xstack

shortest

请参阅 xstack

layout

请参阅 xstack。此外,这允许用户为每个输入流提供输出大小。

xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
网格

请参阅 xstack

grid_tile_size

设置 grid 设置时每个输入流的输出大小。如果未设置此选项,则此滤镜将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分

fill

请参阅 xstack

13.6 pad_vaapi

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,以便输入图像在填充区域内居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

aspect

填充到宽高比而不是分辨率。

widthheightxy 选项的值是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

ow
oh

这些与 out_wout_h 相同。

x
y

x 和 y 偏移量,由 xy 表达式指定,如果尚未指定,则为 NAN。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

13.7 drawbox_vaapi

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框左上角坐标的表达式。默认值为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认值为 0。

颜色,c

指定要写入的框的颜色。有关此选项的常规语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分

粗细,t

设置框边缘粗细的表达式。值为 fill 将创建一个填充的框。默认值为 3

请参阅下文了解接受的常量列表。

替换

值为 1 时,绘制框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将框合成到输入视频上。

xywh 以及 t 的参数是包含以下常量的表达式

in_h, ih
in_w, iw

输入宽度和高度。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制的框的宽度和高度。

t

绘制的框的粗细。

13.7.1 示例

  • 在输入图像边缘周围绘制一个黑色框
    drawbox
    
  • 绘制一个颜色为红色且不透明度为 50% 的框
    drawbox=10:20:200:60:[email protected]
    

    前面的示例可以指定为

    drawbox=x=10:y=20:w=200:h=60:[email protected]
    
  • 用粉红色填充框
    drawbox=x=10:y=10:w=100:h=100:[email protected]:t=fill
    
  • 绘制一个 2 像素的红色 2.40:1 蒙版
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

14 Vulkan 视频滤镜

以下是当前可用的 Vulkan 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-vulkan--enable-libglslang--enable-libshaderc 配置 FFmpeg。

运行 Vulkan 滤镜需要您初始化硬件设备并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device vulkan[=name][:device[,key=value...]]

使用 key=value 中的给定设备参数和选项初始化一个名为 namevulkan 类型的新硬件设备。支持以下选项

调试

如果设置为 1,则打开验证层。

linear_images

分配线性图像。不适用于解码。

disable_multiplane

禁用多平面图像。不适用于解码。

-filter_hw_device 名称

将名为 名称 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参见 https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 示例:选择第一个设备并在其上使用默认参数运行 nlmeans_vulkan 滤镜。
    -init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
    

由于 Vulkan 滤镜无法访问普通内存中的帧数据,因此所有帧数据都需要上传 (hwupload) 到连接到相应设备的硬件表面,然后才能使用,之后再下载 (hwdownload) 回到普通内存。 请注意,hwupload 将上传到与软件帧具有相同布局的帧,因此可能需要在之前立即添加一个 format 滤镜,以使输入变为正确的格式。并且 hwdownload 不支持输出的所有格式 - 通常需要在图中紧随其后插入一个额外的 format 滤镜,以使输出变为支持的格式。

14.1 avgblur_vulkan

应用平均模糊滤镜,该滤镜使用 Vulkan 在 GPU 上实现。

该滤波器接受以下选项

sizeX

设置水平半径大小。范围是 [1, 32],默认值是 3

sizeY

设置垂直半径大小。范围是 [1, 32],默认值是 3

平面

设置要过滤的平面。默认值为 0xf,表示处理所有平面。

14.2 blend_vulkan

将两个 Vulkan 帧相互混合。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出也会终止。

以下是可接受选项的描述。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

为特定像素分量或所有像素分量(如果是 all_mode)设置混合模式。默认值为 normal

组件模式的可用值包括

normal
multiply

14.3 bwdif_vulkan

使用 bwdif 进行去隔行处理,“Bob Weaver 去隔行滤镜”算法,使用 Vulkan 在 GPU 上实现。

它接受以下参数

mode

要采用的隔行模式。它接受以下值之一

0,send_frame

为每个帧输出一个帧。

1,send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入隔行视频假设的图像场奇偶性。它接受以下值之一

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用自动检测场奇偶性。

默认值为 auto。如果隔行未知或解码器不导出此信息,则将假设顶场优先。

deint

指定要对哪些帧进行去隔行处理。接受以下值之一

0,all

对所有帧进行去隔行处理。

1,interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为 all

14.4 chromaber_vulkan

应用一个模拟色差的效果。最适用于 RGB 输入,但也为 YCbCr 输入提供类似的效果。

dist_x

水平位移乘数。每个色度像素的位置将从图像中心开始乘以这个值。默认值为 0

dist_y

类似地,这设置了垂直位移乘数。默认值为 0

14.5 color_vulkan

创建纯色的 Vulkan 帧的视频源。可用于基准测试或叠加。

它接受以下参数

color

要使用的颜色。可以是名称,也可以是十六进制值。默认值是 black

size

输出帧的大小。默认值是 1920x1080

rate

输出的帧率。默认值是每秒 60 帧。

时长

视频时长。默认值是 -0.000001

sar

视频信号宽高比。默认值是 1/1

format

输出 Vulkan 帧的像素格式。默认值是 yuv444p

out_range

设置输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制使用特定的值用于输出和编码器。如果未指定,则范围取决于像素格式。可能的值:

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(在 8 位亮度的情况下为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(在 8 位亮度的情况下为 16-235)。

14.6 vflip_vulkan

垂直翻转图像。

14.7 hflip_vulkan

水平翻转图像。

14.8 flip_vulkan

沿垂直轴和水平轴翻转图像。

14.9 gblur_vulkan

在 Vulkan 帧上应用高斯模糊滤镜。

该滤波器接受以下选项

sigma

设置水平 sigma,即高斯模糊的标准差。默认值为 0.5

sigmaV

设置垂直 sigma,如果为负数,则与 sigma 相同。默认值为 -1

平面

设置要过滤的平面。默认情况下,会过滤所有平面。

size

设置沿水平轴的内核大小。默认值是 19

sizeV

设置沿垂直轴的内核大小。默认值是 0,它会设置为使用与 size 相同的值。

14.10 nlmeans_vulkan

使用非局部均值算法对帧进行降噪,该算法使用 Vulkan 在 GPU 上实现。支持比 nlmeansnlmeans_opencl 更多的像素格式,包括 alpha 通道支持。

此滤镜接受以下选项。

s

设置所有组件的降噪强度。默认值为 1.0。必须在 [1.0, 100.0] 范围内。

p

设置所有平面的补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。

r

设置搜索大小。默认值为 15。必须是 [0, 99] 范围内的奇数。

t

设置并行度。默认值为 36。必须是 [1, 168] 范围内的数字。较大的值可能会加快处理速度,但会占用更多 VRAM。较低的值会减慢处理速度,从而减少 VRAM 的使用。仅在具有原子浮点运算的 GPU(RDNA3+、Ampere+)上支持。

s0
s1
s2
s3

设置特定组件的降噪强度。默认值为 1,等于 s。必须是 [1, 100] 范围内的奇数。

p0
p1
p2
p3

设置特定组件的补丁大小。默认值为 7,等于 p。必须是 [0, 99] 范围内的奇数。

14.11 overlay_vulkan

将一个视频覆盖在另一个视频之上。

它接受两个输入并有一个输出。第一个输入是“主要”视频,第二个输入叠加在其上。此滤镜要求所有输入都使用相同的像素格式。因此,可能需要进行格式转换。

该滤波器接受以下选项

x

设置叠加视频在主视频上的 x 坐标。默认值为 0

y

设置叠加视频在主视频上的 y 坐标。默认值为 0

14.12 transpose_vt

转置输入视频中的行和列,并可选择翻转。有关更深入的示例,请参阅 transpose 视频过滤器,它在很大程度上共享相同的选项。

它接受以下参数

dir

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

hflip

水平翻转输入视频。

vflip

垂直翻转输入视频。

passthrough

如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

14.13 transpose_vulkan

转置输入视频中的行和列,并可选择翻转。有关更深入的示例,请参阅 transpose 视频过滤器,它在很大程度上共享相同的选项。

它接受以下参数

dir

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何形状与指定值指定的形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

15 QSV 视频滤镜

以下是当前可用的 QSV 视频滤镜的说明。

要启用这些滤镜的编译,您需要使用 --enable-libmfx--enable-libvpl 配置 FFmpeg。

要使用 QSV 滤镜,您需要正确设置 QSV 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/QuickSync

15.1 hstack_qsv

水平堆叠输入视频。

这是 hstack 滤镜的 QSV 变体,每个输入流可能具有不同的高度,此滤镜将缩小/放大每个输入流,同时保持原始宽高比。

它接受以下选项

输入

请参阅 hstack

shortest

请参阅 hstack

height

设置输出高度。如果设置为 0,则此滤镜将输出高度设置为第一个输入流的高度。默认值为 0。

15.2 vstack_qsv

垂直堆叠输入视频。

这是 vstack 滤镜的 QSV 变体,每个输入流可能具有不同的宽度,此滤镜将缩小/放大每个输入流,同时保持原始宽高比。

它接受以下选项

输入

请参阅 vstack

shortest

请参阅 vstack

width

设置输出宽度。如果设置为 0,则此滤镜将输出宽度设置为第一个输入流的宽度。默认值为 0。

15.3 xstack_qsv

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 QSV 变体。

它接受以下选项

输入

请参阅 xstack

shortest

请参阅 xstack

layout

请参阅 xstack。此外,这允许用户为每个输入流提供输出大小。

xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
网格

请参阅 xstack

grid_tile_size

设置 grid 设置时每个输入流的输出大小。如果未设置此选项,则此滤镜将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分

fill

请参阅 xstack

16 视频源

以下是当前可用的视频源的说明。

16.1 buffer

缓冲视频帧,并使其可用于滤镜链。

此源主要用于编程用途,特别是通过 libavfilter/buffersrc.h 中定义的接口。

它接受以下参数

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请检查 (ffmpeg-utils)手册中的“视频大小”部分

width

输入视频宽度。

height

输入视频高度。

pix_fmt

表示缓冲视频帧的像素格式的字符串。它可以是与像素格式对应的数字,也可以是像素格式名称。

time_base

指定缓冲帧的时间戳假定的时基。

frame_rate

指定视频流的预期帧率。

colorspace

表示缓冲视频帧的色彩空间的字符串。它可以是与色彩空间对应的数字,也可以是色彩空间名称。

range

表示缓冲视频帧的颜色范围的字符串。它可以是与颜色范围对应的数字,也可以是颜色范围名称。

pixel_aspect, sar

输入视频的采样(像素)宽高比。

hw_frames_ctx

使用硬件像素格式时,这应该是对描述输入帧的 AVHWFramesContext 的引用。

例如

buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1

将指示源接受大小为 320x240 且格式为 "yuv410p" 的视频帧,假设 1/24 作为时间戳时基和方形像素(1:1 采样宽高比)。由于名称为 "yuv410p" 的像素格式对应于数字 6(检查 libavutil/pixfmt.h 中的枚举 AVPixelFormat 定义),此示例对应于

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,这些选项可以指定为扁平字符串,但此语法已弃用

宽度:高度:像素格式:时基.num:时基.den:像素宽高比.num:像素宽高比.den

16.2 cellauto

创建由基本元胞自动机生成的模式。

元胞自动机的初始状态可以通过 filenamepattern 选项定义。如果未指定此类选项,则会随机创建初始状态。

在每个新帧中,视频的新行都会填充元胞自动机下一代的结果。当整个帧都被填充时的行为由 scroll 选项定义。

此源接受以下选项:

文件名, f

从指定的文件读取初始元胞自动机状态,即起始行。在文件中,每个非空白字符都被视为一个存活的细胞,换行符将终止该行,文件中后续的字符将被忽略。

pattern, p

从指定的字符串读取初始元胞自动机状态,即起始行。

字符串中的每个非空白字符都被视为一个存活的细胞,换行符将终止该行,字符串中后续的字符将被忽略。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始元胞自动机行的随机填充率。它是一个介于 0 到 1 之间的浮点数值,默认值为 1/PHI。

当指定文件或模式时,此选项将被忽略。

random_seed, seed

设置随机填充初始行的种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,则过滤器将尽最大努力尝试使用一个好的随机种子。

rule

设置元胞自动机规则,它是一个介于 0 到 255 之间的数字。默认值为 110。

size, s

设置输出视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

如果指定了 filenamepattern,则默认情况下,大小设置为指定初始状态行的宽度,高度设置为 width * PHI。

如果设置了 size,它必须包含指定模式字符串的宽度,并且指定的模式将居中放置在较大的行中。

如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。

scroll

如果设置为 1,则在输出中的所有行都已填充后,向上滚动输出。如果设置为 0,则在底部行被填充后,新生成的行将覆盖顶部行。默认值为 1。

start_full, full

如果设置为 1,则在输出第一帧之前,使用生成的行完全填充输出。这是默认行为,要禁用它,请将值设置为 0。

stitch

如果设置为 1,则将左侧和右侧的行边缘缝合在一起。这是默认行为,要禁用它,请将值设置为 0。

16.2.1 示例

  • pattern 读取初始状态,并指定 200x400 大小的输出。
    cellauto=f=pattern:s=200x400
    
  • 生成一个宽度为 200 个单元格,填充率为 2/3 的随机初始行。
    cellauto=ratio=2/3:s=200x200
    
  • 创建一个由规则 18 生成的模式,从一个位于宽度为 100 的初始行中心的单个存活单元开始。
    cellauto=p=@:s=100x400:full=0:rule=18
    
  • 指定一个更精细的初始模式。
    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
    

16.3 coreimagesrc

在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上生成的视频源。

此视频源是 coreimage 视频过滤器的专门版本。在应用的过滤器链的开头使用核心图像生成器来生成内容。

coreimagesrc 视频源接受以下选项

list_generators

列出所有可用的生成器以及它们各自的选项,以及可能的最小值和最大值以及默认值。

list_generators=true
size, s

指定源视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 320x240

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是 frame_rate_num/frame_rate_den 格式的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

sar

设置源视频的采样宽高比。

duration, d

设置源视频的持续时间。有关接受的语法,请参阅 ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或者表示的持续时间为负数,则视频应永久生成。

此外,还接受 coreimage 视频过滤器的所有选项。完整的过滤器链可用于进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅 coreimage 文档和示例。

16.3.1 示例

  • 使用 CIQRCodeGenerator 为 FFmpeg 主页创建一个 QR 码,给定为 Apple 标准 bash shell 的完整且转义的命令行。
    ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

    此示例等效于 coreimage 的 QRCode 示例,无需 nullsrc 视频源。

16.4 ddagrab

通过桌面复制 API 捕获 Windows 桌面。

该过滤器专门返回 D3D11 硬件帧,用于 GPU 编码或处理。因此,任何类型的软件处理都需要显式的 hwdownload

它接受以下选项

output_idx

要捕获的 DXGI 输出索引。

通常对应于 Windows 给屏幕的索引减一,因此从 0 开始。

默认为输出 0。

draw_mouse

是否绘制鼠标光标。

默认为 true。

仅影响硬件光标。如果游戏或应用程序渲染自己的光标,它将始终被捕获。

framerate

捕获桌面的最大帧速率 - 连续帧之间的间隔将不小于帧速率的倒数。当 dup_frames 为 true(默认值)并且桌面没有足够频繁地更新时,过滤器将复制上一帧。请注意,没有进行后台缓冲,因此当没有足够频繁地轮询过滤器时,实际的帧间间隔可能会明显增大。

默认为 30 FPS。

video_size

指定捕获的视频的大小。

默认为屏幕的完整大小。

如果小于屏幕大小,则从底部/右侧裁剪。

offset_x

捕获的视频的水平偏移。

offset_y

捕获的视频的垂直偏移。

output_fmt

所需的过滤器输出格式。默认为 8 位 BGRA。

它接受以下值

auto

将所有支持的输出格式传递给 DDA,并返回 DDA 决定使用的格式。

8bit
bgra

8 位格式始终有效,并且 DDA 会在必要时将其转换为这些格式。

10bit
x2bgr10

如果请求 10 位格式但不可用,则过滤器初始化将失败。

dup_frames

当此选项设置为 true(默认值)时,当桌面未更新时,过滤器将复制帧,以保持近似恒定的目标帧速率。当此选项设置为 false 时,过滤器将等待桌面更新(在这种情况下,帧间间隔可能会明显变化)。

16.4.1 示例

捕获主屏幕并使用 nvenc 进行编码。

ffmpeg -f lavfi -i ddagrab -c:v h264_nvenc -cq 18 output.mp4

您还可以跳过 lavfi 设备并直接使用过滤器。还演示了下载帧并使用 libx264 进行编码。在这种情况下,需要显式指定输出格式。

ffmpeg -filter_complex ddagrab=output_idx=1:framerate=60,hwdownload,format=bgra -c:v libx264 -crf 18 output.mp4

如果只想捕获桌面的一部分,可以通过指定较小的尺寸及其在屏幕上的偏移量来实现。

ddagrab=video_size=800x600:offset_x=100:offset_y=100

16.5 gradients

生成多个渐变。

size, s

设置帧大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频尺寸”部分。默认值为“640x480”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

c0, c1, c2, c3, c4, c5, c6, c7

设置 8 种颜色。颜色的默认值是随机选择。

x0, y0, y0, y1

设置渐变线的源点和目标点。如果为负数或超出范围,则会随机选择。

nb_colors, n

设置一次使用的颜色数量。允许的范围是 2 到 8。默认值为 2。

seed(种子)

设置用于选择渐变线点的种子。

duration, d

设置源视频的持续时间。有关接受的语法,请参阅 ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或者表示的持续时间为负数,则视频应永久生成。

speed

设置渐变旋转速度。

类型,t

设置渐变类型。可用的值有

linear
radial
circular
spiral
square

默认类型为 linear

16.5.1 命令

此源支持以上一些选项作为命令

16.6 mandelbrot

生成一个曼德勃罗集分形,并逐步向使用 start_xstart_y 指定的点缩放。

此源接受以下选项:

结束点

设置终端 pts 值。默认值为 400。

end_scale

设置终端缩放值。必须是浮点数值。默认值为 0.3。

inner

设置内部着色模式,即用于绘制曼德勃罗集分形内部区域的算法。

它应采用以下值之一

设置黑色模式。

convergence

显示收敛时间。

mincol

设置基于最接近迭代起点的点的颜色。

period

设置周期模式。

默认值为 mincol

bailout

设置退出值。默认值为 10.0。

maxiter

设置渲染算法执行的最大迭代次数。默认值为 7189。

outer

设置外部着色模式。它应采用以下值之一

iteration_count

设置迭代计数模式。

normalized_iteration_count

设置归一化迭代计数模式。

默认值为 normalized_iteration_count

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

设置帧大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频尺寸”部分。默认值为“640x480”。

start_scale

设置初始缩放值。默认值为 3.0。

start_x

设置初始 x 位置。必须是 -100 到 100 之间的浮点数值。默认值为 -0.743643887037158704752191506114774。

start_y

设置初始 y 位置。必须是 -100 到 100 之间的浮点数值。默认值为 -0.131825904205311970493132056385139。

16.7 mptestsrc

生成各种测试模式,由 MPlayer 测试过滤器生成。

生成的视频大小是固定的,为 256x256。此源特别适用于测试编码功能。

此源接受以下选项:

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是 frame_rate_num/frame_rate_den 格式的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。有关接受的语法,请参阅 ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或者表示的持续时间为负数,则视频应永久生成。

test, t

设置要执行的测试的编号或名称。支持的测试有

dc_luma
dc_chroma
freq_luma
freq_chroma
amp_luma
amp_chroma
cbp
mv
ring1
ring2
all(全部)
max_frames, m

设置每个测试生成的最大帧数,默认值为 30。

默认值为“all”,它将循环浏览所有测试的列表。

一些示例

mptestsrc=t=dc_luma

将生成一个“dc_luma”测试模式。

16.8 frei0r_src

提供一个 frei0r 源。

要启用此过滤器的编译,您需要安装 frei0r 标头并使用 --enable-frei0r 配置 FFmpeg。

此源接受以下参数

size

要生成的视频大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频尺寸”部分

framerate

生成视频的帧率。它可以是 num/den 形式的字符串或帧率缩写。

filter_name

要加载的 frei0r 源的名称。有关 frei0r 以及如何设置参数的更多信息,请阅读视频过滤器文档中的 frei0r 部分。

filter_params

传递给 frei0r 源的参数的“|”分隔列表。

例如,要生成一个大小为 200x200,帧率为 10 的 frei0r partik0l 源,该源叠加在叠加过滤器的主要输入上

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

16.9 life

生成生命模式。

此源基于 John Conway 生命游戏的泛化。

源输入表示生命网格,每个像素表示一个单元格,它可以处于两种可能的状态之一:活动或死亡。每个单元格都与其八个邻居交互,这些邻居是水平、垂直或对角相邻的单元格。

每次交互时,网格都会根据采用的规则演变,该规则指定使单元格保持活动状态或诞生的邻居活动单元格的数量。rule 选项允许指定要采用的规则。

此源接受以下选项:

文件名, f

设置从中读取初始网格状态的文件。在该文件中,每个非空白字符都被视为活动单元格,并且换行符用于分隔每一行的结尾。

如果未指定此选项,则会随机生成初始网格。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始随机网格的随机填充率。它是介于 0 到 1 之间的浮点数值,默认为 1/PHI。当指定文件时,它将被忽略。

random_seed, seed

设置用于填充初始随机网格的种子,必须是包含在 0 和 UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,则过滤器将尽最大努力尝试使用良好的随机种子。

rule

设置生命规则。

规则可以使用“SNS/BNB”类型的代码指定,其中 NSNB 是 0-8 范围内的数字序列,NS 指定使活动单元格保持活动状态的邻居活动单元格数量,NB 指定使死亡单元格变为活动(即“诞生”)的邻居活动单元格数量。“s”和“b”可以分别代替“S”和“B”使用。

或者,规则可以使用一个 18 位整数指定。如果对于每个邻居活动单元格的数量,该单元格都处于活动状态,则使用高 9 位来编码下一个单元格状态,低位指定用于“诞生”新单元格的规则。高位编码用于更多数量的相邻单元格。例如,数字 6153 = (12<<9)+9 指定一个 12 的保持活动规则和一个 9 的诞生规则,这对应于“S23/B03”。

默认值为“S23/B3”,它是 Conway 生命游戏的原始规则,如果单元格具有 2 或 3 个邻居活动单元格,则会使其保持活动状态;如果有 3 个活动单元格围绕一个死亡单元格,则会诞生一个新的单元格。

size, s

设置输出视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

如果指定了 filename,则默认情况下,大小设置为与输入文件的大小相同。如果设置了 size,它必须包含输入文件中指定的大小,并且该文件中定义的初始网格将居中于更大的结果区域中。

如果未指定文件名,则大小值默认为“320x240”(用于随机生成的初始网格)。

stitch

如果设置为 1,则将左右网格边缘缝合在一起,并将顶部和底部边缘缝合在一起。默认为 1。

mold

设置细胞生长速度。如果设置,死亡细胞会以mold为步长,从death_color变为mold_colormold的值可以从 0 到 255。

life_color

设置活细胞(或新生细胞)的颜色。

death_color

设置死亡细胞的颜色。如果设置了mold,这是表示死亡细胞的第一个颜色。

mold_color

设置霉变颜色,用于表示完全死亡和霉变的细胞。

关于这3个颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“Color”章节

16.9.1 示例

  • pattern 读取网格,并将其居中放置在 300x300 像素大小的网格上。
    life=f=pattern:s=300x300
    
  • 生成一个 200x200 大小的随机网格,填充率为 2/3。
    life=ratio=2/3:s=200x200
    
  • 指定一个自定义规则,用于演化随机生成的网格。
    life=rule=S14/B34
    
  • 使用 ffplay 的慢速死亡效果(霉变)的完整示例。
    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
    

16.10 perlin

生成 Perlin 噪声。

Perlin 噪声是一种在空间上具有局部连续性的噪声。它可用于生成在空间和时间上都具有连续性的图案,例如模拟烟雾、流体或地形。

如果通过 octaves 选项指定了多个八度音阶,则 Perlin 噪声会作为各个分量的总和生成,每个分量的频率都会翻倍。在这种情况下,persistence 选项指定相对于前一个分量的振幅比率。更多的八度分量可以指定生成的噪声中更多的高频细节(例如,生成的地形中由于巨石而导致的小尺寸变化)。

16.10.1 选项

size, s

指定缓冲视频帧的大小(宽度和高度)。关于此选项的语法,请查看 (ffmpeg-utils) 手册中的“Video size”章节。默认值为 320x240

rate, r

指定视频流的预期帧率,以每秒帧数表示。默认值为 25

octaves

指定构成噪声的总分量数,每个分量的频率都会翻倍。默认值为 1

persistence

设置用于计算下一个八度分量相对于前一个分量振幅的振幅比率。默认值为 1

xscale
yscale

定义用于乘以 x、y 坐标的缩放因子。这对于定义沿 x 或 y 轴拉伸的图案的效果非常有用。默认值为 1

tscale

定义用于乘以时间坐标的缩放因子。这对于更改时间变化速度非常有用。默认值为 1

random_mode

设置用于计算初始图案的随机模式。

支持的值为

随机

计算并使用随机种子。

ken

使用 Ken Perlin 在原始文章中定义的预定义初始图案,可用于将输出与其他来源进行比较。

seed(种子)

使用 random_seed 选项指定的值。

默认值为 random

random_seed, seed

random_mode 设置为 random_seed 时,使用此值计算初始图案。默认值为 0

16.10.2 示例

  • 生成单分量
    perlin
    
  • 使用包含 7 个分量的 Perlin 噪声,每个分量对总振幅的贡献减半。
    perlin=octaves=7:persistence=0.5
    
  • 将 Perlin 噪声与 lutyuv 链接起来,生成黑白效果。
    perlin=octaves=3:tscale=0.3,lutyuv=y='if(lt(val\,128)\,255\,0)'
    
  • 沿 y 轴拉伸噪声,并将灰度级转换为仅红色信号。
    perlin=octaves=7:tscale=0.4:yscale=0.3,lutrgb=r=val:b=0:g=0
    

16.11 qrencodesrc

使用 libqrencode 库生成 QR 码(参见 https://fukuchi.org/works/qrencode/)。

要启用此源的编译,您需要使用 --enable-libqrencode 配置 FFmpeg。

QR 码由提供的文本或文本模式生成。根据指定的输出大小选项,对相应的 QR 码进行缩放并放置在视频输出中。

如果未指定任何文本,则不会生成 QR 码,而是返回一个空的彩色输出。

此源接受以下选项:

qrcode_width, q
padded_qrcode_width, Q

指定渲染的 QR 码宽度的表达式,无论是否带有填充。 qrcode_width 表达式可以引用 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式仅在初始化源时计算一次。有关详细信息,请参阅 qrencode 表达式 部分。

请注意,对于源来说,缺少一些常量(例如 xt 或 ¸n),因为它们仅在为每一帧计算表达式而不是在初始化时才有意义。

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是 frame_rate_num/frame_rate_den 格式的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

case_sensitive, cs

指示 libqrencode 使用区分大小写的编码。默认情况下启用此功能。可以禁用此功能以减小 QR 编码的大小。

level, l

指定二维码编码的纠错级别。纠错级别越高,编码尺寸会越大,但代码对损坏的鲁棒性会更强。最低级别为 L

它接受以下值

L
M
Q
H
expansion

选择如何展开输入文本。可以是 nonenormal (默认)。有关详细信息,请参阅 qrencode 文本展开 部分。

text
textfile

定义要渲染的文本。如果两者都未指定,则不会编码 QR 码(仅为一个空的彩色框架)。

如果启用了展开,则文本将作为文本模板处理,使用 qrencode 展开机制。有关详细信息,请参阅 qrencode 文本展开 部分。

背景颜色,bc
前景颜色,fc

设置 QR 码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

有关颜色选项的语法,请查阅 ffmpeg-utils 手册中的“颜色”部分

16.11.1 示例

  • 生成一个使用默认大小编码指定文本的 QR 码。
    qrencodesrc=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉色
    qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
    
  • 生成宽度为 200 像素并带有填充的 QR 码,使填充后的宽度为 QR 码宽度的 4/3
    qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成填充后宽度为 200 像素并带有填充的 QR 码,使 QR 码的宽度为填充后宽度的 3/4
    qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 生成一个编码帧号的 QR 码
    qrencodesrc=text=%{n}
    
  • 生成一个编码 GMT 时间戳的 QR 码
    qrencodesrc=text=%{gmtime}
    
  • 生成一个编码为浮点数的时间戳的 QR 码
    qrencodesrc=text=%{pts}
    

16.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

allrgb 源返回大小为 4096x4096 的所有 rgb 颜色的帧。

allyuv 源返回大小为 4096x4096 的所有 yuv 颜色的帧。

color 源提供均匀着色的输入。

colorchart 源提供颜色检查图表。

colorspectrum 源提供颜色频谱输入。

haldclutsrc 源提供一个恒等 Hald CLUT。另请参阅 haldclut 滤镜。

nullsrc 源返回未处理的视频帧。它主要用于分析/调试工具中,或作为忽略输入数据的滤镜的源。

pal75bars 源生成基于 EBU PAL 建议的颜色条图案,颜色级别为 75%。

pal100bars 源生成基于 EBU PAL 建议的颜色条图案,颜色级别为 100%。

rgbtestsrc 源生成一个 RGB 测试图案,用于检测 RGB 与 BGR 问题。您应该从上到下看到红色、绿色和蓝色条纹。

smptebars 源生成基于 SMPTE 工程指南 EG 1-1990 的颜色条图案。

smptehdbars 源生成基于 SMPTE RP 219-2002 的颜色条图案。

testsrc 源生成一个测试视频图案,显示颜色图案、滚动渐变和时间戳。这主要用于测试目的。

testsrc2 源类似于 testsrc,但支持更多像素格式,而不仅仅是 rgb24。这允许将其用作其他测试的输入,而无需进行格式转换。

yuvtestsrc 源生成一个 YUV 测试图案。您应该从上到下看到 y、cb 和 cr 条纹。

这些源接受以下参数

level(电平)

指定 Hald CLUT 的级别,仅在 haldclutsrc 源中可用。级别为 N 会生成一个 N*N*N 乘以 N*N*N 像素的图片,用作 3D 查找表的恒等矩阵。每个分量都以 1/(N*N) 的比例进行编码。

颜色,c

指定源的颜色,仅在 color 源中可用。关于此选项的语法,请查看 (ffmpeg-utils) 手册中的“Color”章节

size, s

指定源视频的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 320x240

此选项不适用于 allrgballyuvhaldclutsrc 滤镜。

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是 frame_rate_num/frame_rate_den 格式的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。有关接受的语法,请参阅 ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或者表示的持续时间为负数,则视频应永久生成。

由于帧率被用作时间基准,所有帧(包括最后一帧)都将具有完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上舍入。

sar

设置源视频的采样宽高比。

alpha

指定背景的 alpha(不透明度),仅在 testsrc2 源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。

decimals, n

设置时间戳中显示的小数位数,仅在 testsrc 源中可用。

显示的时间戳值将对应于原始时间戳值乘以指定值的 10 的幂。默认值为 0。

type(类型)

设置色谱的类型,仅在 colorspectrum 源中可用。可以是以下之一

black
white
all
patch_size

设置单色块的色块大小,仅在 colorchart 源中可用。默认值为 64x64

preset

设置 colorchecker 颜色预设,仅在 colorchart 源中可用。

可用值为

reference
skintones

默认值为 reference

16.12.1 示例

  • 生成一个持续时间为 5.3 秒、大小为 176x144、帧率为每秒 10 帧的视频
    testsrc=duration=5.3:size=qcif:rate=10
    
  • 以下图表描述将生成一个不透明度为 0.2、大小为“qcif”、帧率为每秒 10 帧的红色源
    [email protected]:s=qcif:r=10
    
  • 如果输入内容将被忽略,则可以使用 nullsrc。以下命令通过使用 geq 滤镜在亮度平面中生成噪声
    nullsrc=s=256x256, geq=random(1)*255:128:128
    

16.12.2 命令

color 源支持以下命令

c, color

设置创建的图像的颜色。接受与相应的 color 选项相同的语法。

16.13 openclsrc

使用 OpenCL 程序生成视频。

OpenCL 程序源文件。

kernel

程序中的内核名称。

size, s

要生成的帧的大小。必须设置此项。

format

用于生成的帧的像素格式。必须设置此项。

rate, r

每秒生成的帧数。默认值为“25”。

有关程序加载如何工作的详细信息,请参阅 program_opencl 滤镜。

示例程序

  • 通过设置输出图像中像素位置的像素值来生成颜色渐变。(请注意,这将适用于所有像素格式,但生成的输出将不相同。)
    __kernel void ramp(__write_only image2d_t dst,
                       unsigned int index)
    {
        int2 loc = (int2)(get_global_id(0), get_global_id(1));
    
        float4 val;
        val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));
    
        write_imagef(dst, loc, val);
    }
    
  • 生成 Sierpinski 地毯图案,每帧平移一个像素。
    __kernel void sierpinski_carpet(__write_only image2d_t dst,
                                    unsigned int index)
    {
        int2 loc = (int2)(get_global_id(0), get_global_id(1));
    
        float4 value = 0.0f;
        int x = loc.x + index;
        int y = loc.y + index;
        while (x > 0 || y > 0) {
            if (x % 3 == 1 && y % 3 == 1) {
                value = 1.0f;
                break;
            }
            x /= 3;
            y /= 3;
        }
    
        write_imagef(dst, loc, value);
    }
    

16.14 sierpinski

生成 Sierpinski 地毯/三角形分形,并随机平移。

此源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频尺寸”部分。默认值为“640x480”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

seed(种子)

设置用于随机平移的种子。

jump

设置单个平移目的地的最大跳跃。允许的范围为 1 到 10000。

type(类型)

设置分形类型,可以是默认的 carpettriangle

16.15 zoneplate

生成区域板测试视频图案。

此源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“320x240”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

duration, d

设置源视频的持续时间。有关接受的语法,请参阅 ffmpeg-utils(1) 手册中的时间持续时间部分

如果未指定,或者表示的持续时间为负数,则视频应永久生成。

sar

设置源视频的采样宽高比。

precision

设置正弦计算的查找表精度(以位为单位)。默认值为 10。允许的范围为 4 到 16。

xo

设置输出信号的水平轴偏移量。默认值为 0。

yo

设置输出信号的垂直轴偏移量。默认值为 0。

to

设置输出信号的时间轴偏移量。默认值为 0。

k0

设置 0 阶,添加到信号相位的常数。默认值为 0。

kx

设置 1 阶,水平轴的相位因子乘数。默认值为 0。

ky

设置 1 阶,垂直轴的相位因子乘数。默认值为 0。

kt

设置 1 阶,时间轴的相位因子乘数。默认值为 0。

kxt, kyt, kxy

设置空间轴和时间轴组合的相位因子乘数。默认值为 0。

kx2

设置 2 阶,水平轴的相位因子乘数。默认值为 0。

ky2

设置 2 阶,垂直轴的相位因子乘数。默认值为 0。

kt2

设置 2 阶,时间轴的相位因子乘数。默认值为 0。

ku

设置添加到最终相位以生成信号的色度蓝色分量的常数。默认值为 0。

kv

设置添加到最终相位以生成信号的色度红色分量的常数。默认值为 0。

16.15.1 命令

此源支持以上一些选项作为命令

16.15.2 示例

  • 生成水平颜色正弦扫描
    zoneplate=ku=512:kv=0:kt2=0:kx2=256:s=wvga:xo=-426:kt=11
    
  • 生成垂直颜色正弦扫描
    zoneplate=ku=512:kv=0:kt2=0:ky2=156:s=wvga:yo=-240:kt=11
    
  • 生成圆形区域板
    zoneplate=ku=512:kv=100:kt2=0:ky2=256:kx2=556:s=wvga:yo=0:kt=11
    

17 视频接收器

以下是对当前可用的视频接收器的描述。

17.1 buffersink

缓冲视频帧,并使其可用于滤镜图的末尾。

此接收器主要用于编程用途,特别是通过 libavfilter/buffersink.h 中定义的接口或选项系统。

它接受指向 AVBufferSinkContext 结构的指针,该结构定义了传入的缓冲区格式,作为不透明参数传递给 avfilter_init_filter 进行初始化。

17.2 nullsink

空视频接收器:完全不对输入视频执行任何操作。它主要用作模板,并用于分析/调试工具。

18 多媒体滤镜

以下是对当前可用的多媒体滤镜的描述。

18.1 a3dscope

将输入音频转换为 3d 示波器视频输出。

该滤波器接受以下选项

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为 hd720

fov

设置相机视野。默认值为 90 度。允许的范围为 40 到 150。

roll

设置相机侧倾。

pitch

设置相机俯仰。

yaw

设置相机偏航。

xzoom

设置相机在 X 轴上的缩放。

yzoom

设置相机在 Y 轴上的缩放。

zzoom

设置相机在 Z 轴上的缩放。

xpos

设置相机在 X 轴上的位置。

ypos

设置相机在 Y 轴上的位置。

zpos

设置相机在 Z 轴上的位置。

length

设置显示的音频波的长度(以帧数为单位)。

18.1.1 命令

滤镜支持 命令 中的一些上述选项。

18.2 abitscope

将输入音频转换为视频输出,显示音频位示波器。

该滤波器接受以下选项

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为 1024x256

colors

指定将用于绘制通道的颜色列表,用空格或“|”分隔。无法识别或缺失的颜色将替换为白色。

模式, m

设置输出模式。可以是 barstrace。默认值为 bars

18.3 adrawgraph

使用输入音频元数据绘制图表。

请参阅 drawgraph

18.4 agraphmonitor

请参阅 graphmonitor

18.5 ahistogram

将输入音频转换为视频输出,显示音量直方图。

该滤波器接受以下选项

dmode

指定如何计算直方图。

它接受以下值

single

对所有通道使用单个直方图。

separate

对每个通道使用单独的直方图。

默认值为 single

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为 hd720

scale

设置显示比例。

它接受以下值

log

对数

sqrt

平方根

cbrt

立方根

lin

linear

rlog

反向对数

默认值为 log

ascale

设置幅度比例。

它接受以下值

log

对数

lin

linear

默认值为 log

acount

设置直方图中要累积多少帧。默认值为 1。将其设置为 -1 会累积所有帧。

rheight

设置窗口高度的直方图比率。

slide

设置声谱图滑动。

它接受以下值

replace

用新行替换旧行。

scroll

从上到下滚动。

默认为 replace

hmode

设置直方图模式。

它接受以下值

abs

使用样本的绝对值。

sign

使用样本的未更改值。

默认值为 abs

18.6 aphasemeter

测量输入音频的相位,该相位以元数据 lavfi.aphasemeter.phase 导出,表示当前音频帧的平均相位。默认情况下,还可以生成视频输出。音频作为第一个输出传递。

如果音频具有不同的声道布局,则会被重新混合为立体声。相位值在 [-1, 1] 范围内,其中 -1 表示左右声道完全异相,而 1 表示声道同相。

该滤波器接受以下选项,所有选项都与其视频输出相关

rate, r

设置输出帧率。默认值为 25

size, s

设置输出的视频尺寸。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频尺寸”部分。默认值为 800x400

rc
gc
bc

指定红色、绿色、蓝色对比度。默认值分别为 271。允许的范围是 [0, 255]

mpc

设置用于绘制中值相位的颜色。如果颜色为默认值 none,则不会绘制中值相位值。

video

启用视频输出。默认启用。

18.6.1 相位检测

该滤波器还会检测立体声流中的异相和单声道序列。当序列持续时间长于或等于设置的最小值时,它会记录序列的开始、结束和持续时间。

该滤波器接受以下用于此检测的选项

phasing

启用单声道和异相检测。默认禁用。

tolerance, t

设置单声道检测的相位容差,以振幅比表示。默认值为 0。允许的范围是 [0, 1]

角度, a

设置异相检测的角度阈值,以度为单位。默认值为 170。允许的范围是 [90, 180]

duration, d

设置单声道或异相持续时间,直到通知,以秒为单位表示。默认值为 2

18.6.2 示例

  • 使用 ffmpeg 检测 1 秒单声道,相位容差为 0.001 的完整示例
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

18.7 avectorscope

将输入音频转换为视频输出,表示音频矢量示波器。

该滤波器用于测量立体声音频流的声道之间的差异。由相同的左右信号组成的单声道信号会产生一条垂直的直线。任何立体声分离都可见为偏离这条线,从而产生李萨如图形。如果出现直线(或偏离直线)但水平线,则表示左右声道异相。

该滤波器接受以下选项

模式, m

设置矢量示波器模式。

可用值为

lissajous

李萨如图形旋转 45 度。

lissajous_xy

与上述相同,但不旋转。

polar

形状类似于半个圆。

默认值为 ‘lissajous’。

size, s

设置输出的视频尺寸。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频尺寸”部分。默认值为 400x400

rate, r

设置输出帧率。默认值为 25

rc
gc
bc
ac

指定红色、绿色、蓝色和 alpha 对比度。默认值分别为 4016080255。允许的范围是 [0, 255]

rf
gf
bf
af

指定红色、绿色、蓝色和 alpha 衰减。默认值分别为 151055。允许的范围是 [0, 255]

缩放

设置缩放因子。默认值为 1。允许的范围是 [0, 10]。小于 1 的值会将缩放因子自动调整为最大可能值。

draw

设置矢量示波器的绘图模式。

可用值为

dot

为每个样本绘制点。

line

在上一个和当前样本之间绘制线条。

aaline

在上一个和当前样本之间绘制抗锯齿线条。

默认值为 ‘dot’。

scale

指定音频样本的振幅比例。

可用值为

lin

线性。

sqrt

平方根。

cbrt

立方根。

log

对数。

swap

将左声道轴与右声道轴交换。

mirror

镜像轴。

none

不镜像。

x

仅镜像 x 轴。

y

仅镜像 y 轴。

xy

镜像两个轴。

18.7.1 示例

  • 使用 ffplay 的完整示例
    ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
                 [a] avectorscope=zoom=1.3:rc=2:gc=200:bc=10:rf=1:gf=8:bf=7 [out0]'
    

18.7.2 命令

此滤波器支持所有上述选项作为命令,但选项 sizerate 除外。

18.8 bench, abench

滤波器图的基准测试部分。

该滤波器接受以下选项

action

启动或停止计时器。

可用值为

start

获取当前时间,将其设置为帧元数据(使用键 lavfi.bench.start_time),并将帧转发到下一个滤波器。

stop

获取当前时间,并从输入帧元数据中获取 lavfi.bench.start_time 元数据,以获取时间差。然后打印时间差、平均时间、最大时间和最小时间(分别为 tavgmaxmin)。时间戳以秒表示。

18.8.1 示例

  • 基准测试 selectivecolor 滤波器
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

18.9 concat

连接音频和视频流,将它们一个接一个地连接在一起。

该滤波器作用于同步视频和音频流的片段。所有片段必须具有相同类型的流数量,并且这也是输出处的流数量。

该滤波器接受以下选项

n

设置片段的数量。默认为 2。

v

设置输出视频流的数量,这也是每个片段中视频流的数量。默认为 1。

a

设置输出音频流的数量,这也是每个片段中音频流的数量。默认为 0。

unsafe

激活不安全模式:如果片段具有不同的格式,则不会失败。

该滤波器具有 v+a 个输出:首先是 v 个视频输出,然后是 a 个音频输出。

nx(v+a) 个输入:首先是第一个片段的输入,其顺序与输出相同,然后是第二个片段的输入,依此类推。

由于各种原因,包括编解码器帧大小或不严谨的创作,相关流并不总是具有完全相同的持续时间。因此,相关同步流(例如,视频及其音轨)应一次连接。concat 滤波器将使用每个片段(最后一个片段除外)中最长流的持续时间,并在必要时用静音填充较短的音频流。

为了使此滤波器正常工作,所有片段都必须从时间戳 0 开始。

所有对应的流必须在所有片段中具有相同的参数;滤波系统将自动选择视频流的通用像素格式,以及音频流的通用采样格式、采样率和声道布局,但其他设置(如分辨率)必须由用户显式转换。

不同的帧速率是可以接受的,但会在输出时产生可变的帧速率;请确保配置输出文件以处理它。

18.9.1 示例

  • 连接开场、一集和结尾,所有内容均为双语版本(视频在流 0 中,音频在流 1 和 2 中)
    ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
      '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
       concat=n=3:v=1:a=2 [v] [a1] [a2]' \
      -map '[v]' -map '[a1]' -map '[a2]' output.mkv
    
  • 使用 (a)movie 源并调整分辨率,分别处理音频和视频,连接两个部分
    movie=part1.mp4, scale=512:288 [v1] ; amovie=part1.mp4 [a1] ;
    movie=part2.mp4, scale=512:288 [v2] ; amovie=part2.mp4 [a2] ;
    [v1] [v2] concat [outv] ; [a1] [a2] concat=v=0:a=1 [outa]
    

    请注意,如果音频和视频流在第一个文件中没有完全相同的持续时间,则会在拼接处发生不同步。

18.9.2 命令

此滤波器支持以下命令

next

关闭当前片段并步进到下一个片段

18.10 ebur128

EBU R128 扫描仪滤波器。此滤波器接收音频流并分析其响度级别。默认情况下,它以 10Hz 的频率记录消息,其中包含瞬时响度(由 M 标识)、短期响度(S)、综合响度(I)和响度范围(LRA)。

该滤波器只能分析采样格式为双精度浮点数的音频流。如有需要,输入流将被转换为此规格。用户可能需要在该滤波器之后插入 aformat 和/或 aresample 滤波器以获得原始参数。

该滤波器还具有视频输出(请参阅 video 选项),带有实时图形以观察响度变化。该图形包含上述记录的消息,因此在设置此选项时不再打印,除非设置了详细日志记录。主图形区域包含短期响度(3 秒分析),右侧的仪表用于瞬时响度(400 毫秒),但也可以选择配置为显示短期响度(请参阅 gauge)。

绿色区域标记了目标响度(默认为 -23LUFS,除非通过 target 修改)周围 +/- 1LU 的目标范围。

有关响度建议 EBU R128 的更多信息,请访问 http://tech.ebu.ch/loudness

该滤波器接受以下选项

video

激活视频输出。无论是否设置此选项,音频流都将保持不变。如果激活,视频流将是第一个输出流。默认值为 0

size

设置视频尺寸。此选项仅适用于视频。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频尺寸”部分。默认和最小分辨率为 640x480

meter

设置 EBU 刻度表。默认值为 9。常用值为 918,分别用于 EBU 刻度表 +9 和 EBU 刻度表 +18。允许使用此范围内的任何其他整数值。

metadata

设置元数据注入。如果设置为 1,则音频输入将被分割为 100 毫秒的输出帧,每个帧都包含元数据中的各种响度信息。所有元数据键都以 lavfi.r128. 为前缀。

默认为 0

framelog

强制设置帧日志级别。

可用值为

quiet

禁用日志记录

info

信息日志级别

verbose

详细日志级别

默认情况下,日志级别设置为 info。如果设置了 videometadata 选项,则会切换到 verbose

peak

设置峰值模式。

可用模式可以累积(该选项是 flag 类型)。可能的值为

none

禁用任何峰值模式(默认)。

sample

启用采样峰值模式。

简单的峰值模式,查找较高的采样值。它会记录一条消息,指示采样峰值 (由 SPK 标识)。

true

启用真峰值模式。

如果启用,则在输入流的过采样版本上完成峰值查找,以获得更好的峰值精度。它会记录一条消息,指示真峰值(由 TPK 标识)和每帧真峰值(由 FTPK 标识)。此模式需要使用 libswresample 进行构建。

dualmono

将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,则其 EBU R128 测量在感知上是不正确的。如果设置为 true,此选项将补偿此影响。多声道输入文件不受此选项的影响。

panlaw

设置用于测量双单声道文件的特定声像定律。此参数是可选的,默认值为 -3.01dB。

target

设置一个特定的目标电平(以 LUFS 为单位),用作可视化中的相对零点。此参数是可选的,默认值为 -23LUFS,如 EBU R128 所指定。但是,在线发布的内容可能更喜欢 -16LUFS 的电平(例如,用于播客或视频平台)。

gauge

设置仪表显示的值。有效值为 momentaryshortterm。默认情况下将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如,现场混音)。

scale

设置响度的显示比例。有效参数为 absolute(以 LUFS 为单位)或 relative(LU),相对于目标。这仅影响视频输出,不影响摘要或连续日志输出。

integrated

测得的综合响度的只读导出值,以 LUFS 为单位。

range

测得的响度范围的只读导出值,以 LU 为单位。

lra_low

测得的 LRA 低的只读导出值,以 LUFS 为单位。

lra_high

测得的 LRA 高的只读导出值,以 LUFS 为单位。

sample_peak

测得的采样峰值的只读导出值,以 dBFS 为单位。

true_peak

测得的真峰值的只读导出值,以 dBFS 为单位。

18.10.1 示例

  • 使用 ffplay 的实时图形,带有 EBU 刻度表 +18
    ffplay -f lavfi -i "amovie=input.mp3,ebur128=video=1:meter=18 [out0][out1]"
    
  • 使用 ffmpeg 运行分析
    ffmpeg -nostats -i input.mp3 -filter_complex ebur128 -f null -
    

18.11 interleave, ainterleave

临时交错来自多个输入的帧。

interleave 用于视频输入,ainterleave 用于音频。

这些滤波器从多个输入读取帧,并将最旧的排队帧发送到输出。

输入流必须具有定义明确的、单调递增的帧时间戳值。

为了将一帧提交到输出,这些滤波器需要为每个输入至少排队一帧,因此如果一个输入尚未终止并且不会接收传入帧,则它们无法工作。

例如,考虑一个输入是一个始终丢弃输入帧的 select 滤波器的情况。interleave 滤波器将继续从该输入读取,但在输入发送流结束信号之前,它将永远无法将新帧发送到输出。

此外,根据输入同步情况,如果一个输入接收到的帧多于其他输入,并且队列已满,则滤波器将丢弃帧。

这些滤波器接受以下选项

nb_inputs, n

设置不同输入的数量,默认为 2。

时长

如何确定流的结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

18.11.1 示例

  • 使用 ffmpeg 交错属于不同流的帧
    ffmpeg -i bambi.avi -i pr0n.mkv -filter_complex "[0:v][1:v] interleave" out.avi
    
  • 添加闪烁模糊效果
    select='if(gt(random(0), 0.2), 1, 2)':n=2 [tmp], boxblur=2:2, [tmp] interleave
    

18.12 latency, alatency

测量滤波延迟。

报告先前滤波器滤波延迟,音频滤波器的音频样本延迟数或视频滤波器的视频帧延迟数。

在输入流结束时,滤波器将报告滤波器图中先前运行滤波器的最小和最大测量延迟。

18.13 metadata, ametadata

操作帧元数据。

此过滤器接受以下选项

mode

设置滤波器操作模式。

可以是以下之一

select

如果同时设置了 valuekey,则选择具有此类元数据的帧。如果仅设置了 key,则选择每个元数据中具有此类键的帧。

add

添加新的元数据 keyvalue。如果键已存在,则不执行任何操作。

modify

修改已存在的键的值。

delete

如果设置了 value,则仅删除具有该值的键。否则,删除键。如果未设置 key,则删除帧中的所有元数据值。

print

如果找到元数据,则打印键及其值。如果未设置 key,则打印帧中可用的所有元数据值。

key

设置所有模式下使用的键。除了 printdelete 模式外,所有模式都必须设置此项。

value

设置将要使用的元数据值。此选项对于 modifyadd 模式是强制性的。

function

比较元数据值和 value 时使用的函数。

可以是以下值之一

same_str

值被解释为字符串,如果元数据值与 value 相同,则返回 true。

starts_with

值被解释为字符串,如果元数据值以 value 选项字符串开头,则返回 true。

less

值被解释为浮点数,如果元数据值小于 value,则返回 true。

equal

值被解释为浮点数,如果 value 与元数据值相等,则返回 true。

greater

值被解释为浮点数,如果元数据值大于 value,则返回 true。

expr

值被解释为浮点数,如果选项 expr 中的表达式求值为 true,则返回 true。

ends_with

值被解释为字符串,如果元数据值以 value 选项字符串结尾,则返回 true。

expr

设置当 function 设置为 expr 时使用的表达式。该表达式通过 eval API 求值,并且可以包含以下常量

VALUE1, FRAMEVAL

元数据键中 value 的浮点数表示。

VALUE2, USERVAL

用户在 value 选项中提供的 value 的浮点数表示。

文件

如果在 print 模式中指定,输出将写入到指定的文件。除了普通文件名,还可以指定任何可写入的 URL。文件名“-”是标准输出的简写。如果未设置 file 选项,输出将使用 AV_LOG_INFO 日志级别写入日志。

直接

当输出写入使用 file 设置的 URL 时,减少打印模式下的缓冲。

18.13.1 示例

  • 打印键为 lavfi.signalstats.YDIF 且值在 0 到 1 之间的帧的所有元数据值。
    signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
    
  • 将 silencedetect 输出打印到文件 metadata.txt
    silencedetect,ametadata=mode=print:file=metadata.txt
    
  • 将所有元数据定向到文件描述符为 4 的管道。
    metadata=mode=print:file='pipe\:4'
    

18.14 perms, aperms

设置输出帧的读/写权限。

这些过滤器主要面向开发人员,用于测试过滤器图中以下过滤器的直接路径。

这些过滤器接受以下选项

mode

选择权限模式。

它接受以下值

none

不执行任何操作。这是默认值。

ro

将所有输出帧设置为只读。

rw

将所有输出帧设置为可直接写入。

toggle

如果帧可写,则将其设置为只读;如果帧只读,则将其设置为可写。

random

随机设置每个输出帧为只读或可写。

seed(种子)

设置 random 模式的种子,必须是介于 0UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,则过滤器将尽最大努力尝试使用一个良好的随机种子。

注意:如果在权限过滤器和以下过滤器之间自动插入过滤器,则以下过滤器中可能无法按预期接收到权限。在 perms/aperms 过滤器之前插入 formataformat 过滤器可以避免此问题。

18.15 realtime, arealtime

减慢过滤速度以大致匹配实时速度。

这些过滤器将暂停过滤一段可变的时间,以使输出速率与输入时间戳匹配。它们类似于 ffmpegre 选项。

它们接受以下选项

限制

暂停的时间限制。任何长于该值的暂停都将被视为时间戳不连续并重置计时器。默认值为 2 秒。

speed

处理速度因子。该值必须是大于零的浮点数。大于 1.0 的值将导致比实时处理更快的处理速度,较小的值将减慢处理速度。 limit 会自动相应地调整。默认值为 1.0。

无法实现比没有这些过滤器的情况下更快的处理速度。

18.15.1 命令

两个过滤器都支持上述所有选项作为 commands

18.16 segment, asegment

将单个输入流拆分为多个流。

此过滤器执行与 concat 过滤器相反的操作。

segment 处理视频帧,asegment 处理音频样本。

此过滤器接受以下选项

timestamps

输出段的时间戳,用“|”分隔。第一段将从输入流的开头开始运行。最后一段将运行到输入流的结尾

frames, samples

分割段的精确帧/样本计数。

在所有情况下,在每个段前加上“+”将使其相对于前一个段。

18.16.1 示例

  • 将输入音频流拆分为三个输出音频流,从输入音频流的开头开始,并将其存储在第一个输出音频流中,然后在第 60 秒后存储在第二个输出音频流中,最后在输入音频流的第 150 秒后存储在第三个输出音频流中
    asegment=timestamps="60|150"
    

18.17 select, aselect

选择要传递到输出中的帧。

此过滤器接受以下选项

expr, e

设置表达式,该表达式将为每个输入帧求值。

如果表达式求值为零,则丢弃该帧。

如果求值结果为负数或 NaN,则将该帧发送到第一个输出;否则,将其发送到索引为 ceil(val)-1 的输出,假设输入索引从 0 开始。

例如,值 1.2 对应于索引为 ceil(1.2)-1 = 2-1 = 1 的输出,即第二个输出。

outputs, n

设置输出的数量。要将选定的帧发送到的输出基于求值的结果。默认值为 1。

表达式可以包含以下常量

n

已过滤帧的(顺序)编号,从 0 开始。

selected_n

所选帧的(顺序)编号,从 0 开始。

prev_selected_n

上次选择的帧的顺序编号。如果未定义,则为 NAN。

TB

输入时间戳的时基。

pts

已过滤帧的 PTS(呈现时间戳),以 TB 单位表示。如果未定义,则为 NAN。

t

已过滤帧的 PTS,以秒表示。如果未定义,则为 NAN。

prev_pts

先前过滤的帧的 PTS。如果未定义,则为 NAN。

prev_selected_pts

上次先前过滤的帧的 PTS。如果未定义,则为 NAN。

prev_selected_t

上次先前选择的帧的 PTS,以秒表示。如果未定义,则为 NAN。

开始点

流中第一个不是 NAN 的 PTS。如果未找到,则仍然是 NAN。

start_t

流中第一个不是 NAN 的 PTS,以秒为单位。如果未找到,则仍然是 NAN。

pict_type (仅限视频)

已过滤帧的类型。它可以采用以下值之一

I
P
B
S
SI
SP
BI
interlace_type (仅限视频)

帧的隔行扫描类型。它可以取以下值之一

逐行扫描

该帧为逐行扫描(非隔行扫描)。

顶场优先

该帧为顶场优先。

底场优先

该帧为底场优先。

consumed_sample_n (仅限音频)

当前帧之前已选择的样本数量

samples_n (仅限音频)

当前帧中的样本数量

sample_rate (仅限音频)

输入采样率

key

如果过滤后的帧是关键帧,则为 1,否则为 0。

pos

过滤后的帧在文件中的位置,如果信息不可用(例如,对于合成视频),则为 -1;已弃用,请勿使用

scene (仅限视频)

介于 0 和 1 之间的值,用于指示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更可能是一个新场景(请参见下面的示例)

concatdec_select

连接解复用器可以通过设置入点和出点来仅选择连接输入文件的一部分,但输出数据包可能并非完全包含在所选间隔中。 通过使用此变量,可以跳过由连接解复用器生成的、未完全包含在所选间隔中的帧。

此方法通过将帧 PTS 与 lavf.concat.start_timelavf.concat.duration 数据包元数据值(也存在于解码帧中)进行比较来工作。

如果帧 PTS 至少为 start_time,并且 duration 元数据缺失或帧 PTS 小于 start_time + duration,则 concatdec_select 变量为 -1,否则为 0,如果 start_time 元数据缺失,则为 NaN。

这基本上意味着,如果输入帧的 PTS 在连接解复用器设置的间隔内,则会被选中。

iw (仅限视频)

表示输入视频帧的宽度。

ih (仅限视频)

表示输入视频帧的高度。

view (仅限视频)

多视图视频的视图 ID。

选择表达式的默认值为“1”。

18.17.1 示例

  • 选择输入中的所有帧
    select
    

    上面的示例与

    select=1
    
  • 跳过所有帧
    select=0
    
  • 仅选择 I 帧
    select='eq(pict_type\,I)'
    
  • 每 100 帧选择一帧
    select='not(mod(n\,100))'
    
  • 仅选择 10-20 时间间隔内包含的帧
    select=between(t\,10\,20)
    
  • 仅选择 10-20 时间间隔内包含的 I 帧
    select=between(t\,10\,20)*eq(pict_type\,I)
    
  • 选择最小距离为 10 秒的帧
    select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
    
  • 使用 aselect 仅选择样本数 > 100 的音频帧
    aselect='gt(samples_n\,100)'
    
  • 创建第一个场景的马赛克
    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
    

    scene 与 0.3 到 0.5 之间的值进行比较通常是明智的选择。

  • 将偶数帧和奇数帧发送到单独的输出,然后组合它们
    select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
    
  • 从使用入点和出点的 ffconcat 文件中选择有用的帧,但源文件不是仅帧内帧。
    ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select=concatdec_select -af aselect=concatdec_select output.avi
    

18.18 sendcmd, asendcmd

向滤镜图中的滤镜发送命令。

这些滤镜读取要发送到滤镜图中的其他滤镜的命令。

sendcmd 必须插入两个视频滤镜之间,asendcmd 必须插入两个音频滤镜之间,除此之外,它们的行为方式相同。

可以使用 commands 选项在滤镜参数中提供命令的规范,也可以在 filename 选项指定的文件中提供命令的规范。

这些滤波器接受以下选项

commands, c

设置要读取并发送到其他滤镜的命令。

文件名, f

设置要读取并发送到其他滤镜的命令的文件名。

18.18.1 命令语法

命令描述由一系列间隔规范组成,其中包含当与该间隔相关的特定事件发生时要执行的命令列表。发生的事件通常是当前帧时间进入或离开给定时间间隔。

间隔由以下语法指定

START[-END] COMMANDS;

时间间隔由 STARTEND 时间指定。END 是可选的,默认为最大时间。

如果当前帧时间包含在间隔 [START, END) 中,则认为其在该指定间隔内,也就是说,当时间大于或等于 START 并且小于 END 时。

COMMANDS 由一个或多个命令规范序列组成,它们以“,”分隔,与该间隔相关。命令规范的语法由下式给出

[FLAGS] TARGET COMMAND ARG

FLAGS 是可选的,用于指定与时间间隔相关的事件类型,这些事件类型会启用发送指定的命令,并且必须是使用“+”或“|”分隔并括在“[”和“]”之间的非空标识符标志序列。

识别以下标志

进入

当当前帧时间戳进入指定间隔时,会发送该命令。换句话说,当上一帧时间戳不在给定间隔内,而当前帧时间戳在给定间隔内时,会发送该命令。

离开

当当前帧时间戳离开指定间隔时,会发送该命令。换句话说,当上一帧时间戳在给定间隔内,而当前帧时间戳不在给定间隔内时,会发送该命令。

expr

命令 ARG 被解释为表达式,表达式的结果作为 ARG 传递。

表达式通过 eval API 进行评估,并且可以包含以下常量

POS

帧在文件中的原始位置,如果当前帧未定义,则未定义。已弃用,请勿使用。

PTS

输入中的演示时间戳。

N

视频或音频的输入帧计数,从 0 开始。

T

当前帧的以秒为单位的时间。

TS

当前命令间隔的以秒为单位的开始时间。

TE

当前命令间隔的以秒为单位的结束时间。

TI

当前命令间隔的插值时间,TI = (T - TS) / (TE - TS)。

W

视频帧宽度。

H

视频帧高度。

如果未指定 FLAGS,则假定默认值为 [enter]

TARGET 指定命令的目标,通常是滤镜类的名称或特定滤镜实例名称。

COMMAND 指定目标滤镜的命令名称。

ARG 是可选的,用于指定给定 COMMAND 的可选参数列表。

在一个间隔规范和另一个间隔规范之间,空格或以 # 开头直到行尾的字符序列将被忽略,并且可以用于注释。

以下是命令规范语法的简化 BNF 描述

COMMAND_FLAG  ::= "enter" | "leave"
COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG]
COMMAND       ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG]
COMMANDS      ::= COMMAND [,COMMANDS]
INTERVAL      ::= START[-END] COMMANDS
INTERVALS     ::= INTERVAL[;INTERVALS]

18.18.2 示例

  • 在第 4 秒指定音频节奏更改
    asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位特定滤镜实例
    asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定 drawtext 和 hue 命令列表。
    # show text in the interval 5-10
    5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
             [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
    
    # desaturate the image in the interval 15-20
    15.0-20.0 [enter] hue s 0,
              [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
              [leave] hue s 1,
              [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
    
    # apply an exponential saturation fade-out effect, starting from time 25
    25 [enter] hue s exp(25-t)
    

    可以使用以下命令指定允许读取和处理存储在 test.cmd 文件中的上述命令列表的滤镜图

    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
    

18.19 setpts, asetpts

更改输入帧的 PTS(演示时间戳)。

setpts 作用于视频帧,asetpts 作用于音频帧。

此过滤器接受以下选项

expr

为每帧评估以构造其时间戳的表达式。

表达式通过 eval API 进行评估,并且可以包含以下常量

FRAME_RATE, FR

帧速率,仅针对恒定帧速率视频定义

PTS

输入中的演示时间戳

N

视频的输入帧计数或音频的已消耗样本数,不包括当前音频帧,从 0 开始。

NB_CONSUMED_SAMPLES

已消耗的样本数,不包括当前帧(仅限音频)

NB_SAMPLES, S

当前帧中的样本数(仅限音频)

SAMPLE_RATE, SR

音频采样率。

STARTPTS

第一帧的 PTS。

STARTT

第一帧的以秒为单位的时间

INTERLACED

指示当前帧是否为隔行扫描。

T

当前帧的时间(以秒为单位)

POS

帧在文件中的原始位置,如果当前帧未定义,则为未定义;已弃用,请勿使用

PREV_INPTS

上一个输入 PTS。

PREV_INT

上一个输入时间(以秒为单位)

PREV_OUTPTS

上一个输出 PTS。

PREV_OUTT

上一个输出时间(以秒为单位)

RTCTIME

以微秒为单位的挂钟(RTC)时间。此选项已弃用,请改用 time(0)。

RTCSTART

电影开始时的挂钟(RTC)时间,以微秒为单位。

TB

输入时间戳的时基。

T_CHANGE

应用命令后的第一帧的时间,或者如果没有命令,则为第一帧的时间。

18.19.1 示例

  • 从零开始计算 PTS
    setpts=PTS-STARTPTS
    
  • 应用快动作效果
    setpts=0.5*PTS
    
  • 应用慢动作效果
    setpts=2.0*PTS
    
  • 设置固定帧率为每秒 25 帧
    setpts=N/(25*TB)
    
  • 应用 +/-100 TB 单位的随机抖动效果
    setpts=PTS+randomi(0, -100\,100)
    
  • 设置固定帧率为 25 fps,并带有少量抖动
    setpts='1/(25*TB) * (N + 0.05 * sin(N*2*PI/25))'
    
  • 将输入 PTS 偏移 10 秒
    setpts=PTS+10/TB
    
  • 从“实时源”生成时间戳,并重新定位到当前时基
    setpts='(RTCTIME - RTCSTART) / (TB * 1000000)'
    
  • 通过计数样本生成时间戳
    asetpts=N/SR/TB
    

18.19.2 命令

两个过滤器都支持以上所有选项作为 命令

18.20 setrange

强制输出视频帧的颜色范围。

setrange 过滤器标记输出帧的颜色范围属性。它不会更改输入帧,而仅设置相应的属性,这会影响后续过滤器如何处理帧。

该滤波器接受以下选项

range

可用值为

auto

保持相同的颜色范围属性。

unspecified, unknown

将颜色范围设置为未指定。

limited, tv, mpeg

将颜色范围设置为有限。

full, pc, jpeg

将颜色范围设置为完整。

18.21 settb, asettb

设置用于输出帧时间戳的时基。它主要用于测试时基配置。

它接受以下参数

expr, tb

被计算为输出时基的表达式。

tb 的值是一个表示有理数的算术表达式。该表达式可以包含常量 "AVTB"(默认时基)、"intb"(输入时基)和 "sr"(采样率,仅限音频)。默认值为 "intb"。

18.21.1 示例

  • 将时基设置为 1/25
    settb=expr=1/25
    
  • 将时基设置为 1/10
    settb=expr=0.1
    
  • 将时基设置为 1001/1000
    settb=1+0.001
    
  • 将时基设置为 2*intb
    settb=2*intb
    
  • 设置默认时基值
    settb=AVTB
    

18.22 showcqt

使用 Brown-Puckette 常数 Q 变换算法,将输入音频转换为以对数方式表示频谱的视频输出,该算法使用直接频域系数计算(但变换本身并不是真正的常数 Q,而是 Q 因子实际上是可变的/钳制的),具有从 E0 到 D#10 的音乐音调音阶。

该滤波器接受以下选项

size, s

指定输出的视频大小。它必须是偶数。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 1920x1080

fps, rate, r

设置输出帧率。默认值为 25

bar_h

设置条形图高度。它必须是偶数。默认值为 -1,表示自动计算条形图高度。

axis_h

设置轴高度。它必须是偶数。默认值为 -1,表示自动计算轴高度。

sono_h

设置声谱图高度。它必须是偶数。默认值为 -1,表示自动计算声谱图高度。

fullhd

设置全高清分辨率。此选项已弃用,请改用 sizes。默认值为 1

sono_v, volume

指定声谱图音量表达式。它可以包含变量

bar_v

评估的 bar_v 表达式

frequency, freq, f

评估时的频率

timeclamp, tc

timeclamp 选项的值

和函数

a_weighting(f)

等响度 A 计权

b_weighting(f)

等响度 B 计权

c_weighting(f)

等响度 C 计权。

默认值为 16

bar_v, volume2

指定条形图音量表达式。它可以包含变量

sono_v

评估的 sono_v 表达式

frequency, freq, f

评估时的频率

timeclamp, tc

timeclamp 选项的值

和函数

a_weighting(f)

等响度 A 计权

b_weighting(f)

等响度 B 计权

c_weighting(f)

等响度 C 计权。

默认值为 sono_v

sono_g, gamma

指定声谱图伽玛值。较低的伽玛值使频谱对比度更高,较高的伽玛值使频谱具有更大的范围。默认值为 3。可接受的范围是 [1, 7]

bar_g, gamma2

指定条形图伽玛值。默认值为 1。可接受的范围是 [1, 7]

bar_t

指定条形图透明度级别。较低的值使条形图更清晰。默认值为 1。可接受的范围是 [0, 1]

timeclamp, tc

指定变换时间钳位。在低频时,时域和频域的准确性之间存在权衡。如果 timeclamp 较低,则时域中的事件(例如快速低音鼓)将更准确地表示,否则频域中的事件(例如低音吉他)将更准确地表示。可接受的范围是 [0.002, 1]。默认值为 0.17

attack

设置以秒为单位的启动时间。默认值为 0(禁用)。否则,它通过在时域中应用不对称窗口来限制未来的样本,当需要低延迟时非常有用。可接受的范围是 [0, 1]

basefreq

指定变换基准频率。默认值为 20.01523126408007475,该频率低于 E0 50 音分。可接受的范围是 [10, 100000]

endfreq

指定变换结束频率。默认值为 20495.59681441799654,该频率高于 D#10 50 音分。可接受的范围是 [10, 100000]

coeffclamp

此选项已弃用,将被忽略。

tlength

指定时域中的变换长度。使用此选项可以控制每个频率样本在时域和频域之间的准确性权衡。它可以包含变量

frequency, freq, f

评估时的频率

timeclamp, tc

timeclamp 选项的值。

默认值为 384*tc/(384+tc*f)

count

指定每个视频帧的变换计数。默认值为 6。可接受的范围是 [1, 30]

fcount

指定每个像素的变换计数。默认值为 0,这使其自动计算。可接受的范围是 [0, 10]

fontfile

指定用于 freetype 绘制轴的字体文件。如果未指定,则使用嵌入式字体。请注意,使用字体文件或嵌入式字体进行绘制时,未实现自定义 basefreqendfreq,请改用 axisfile 选项。

font

指定字体配置模式。此优先级低于 fontfile。模式中的 : 可以替换为 | 以避免不必要的转义。

fontcolor

指定字体颜色表达式。这是一个算术表达式,应返回整数值 0xRRGGBB。它可以包含变量

frequency, freq, f

评估时的频率

timeclamp, tc

timeclamp 选项的值

和函数

midi(f)

频率 f 的 midi 数字,一些 midi 数字:E0(16),C1(24),C2(36),A4(69)

r(x), g(x), b(x)

强度 x 的红色、绿色和蓝色值。

默认值为 st(0, (midi(f)-59.5)/12); st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0)); r(1-ld(1)) + b(ld(1))

axisfile

指定用于绘制轴的图像文件。此选项将覆盖 fontfilefontcolor 选项。

axis, text

启用/禁用向轴绘制文本。如果设置为 0,则禁用向轴绘制,忽略 fontfileaxisfile 选项。默认值为 1

csp

设置色彩空间。接受的值为

unspecified

未指定(默认)

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

bt2020ncl

BT.2020,具有非恒定亮度

cscheme

设置频谱图配色方案。这是浮点值列表,格式为 left_r|left_g|left_b|right_r|right_g|right_b。默认值为 1|0.5|0|0|0.5|1

18.22.1 示例

  • 在显示频谱时播放音频
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt [out0]'
    
  • 与上述相同,但帧率为 30 fps
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=fps=30:count=5 [out0]'
    
  • 以 1280x720 播放
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=s=1280x720:count=4 [out0]'
    
  • 禁用声谱图显示
    sono_h=0
    
  • A1 及其谐波:A1、A2、(近似)E3、A3
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt [out0]'
    
  • 与上述相同,但在频域中具有更高的准确性
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]'
    
  • 自定义音量
    bar_v=10:sono_v=bar_v*a_weighting(f)
    
  • 自定义伽马值,现在频谱与幅度呈线性关系。
    bar_g=2:sono_g=2
    
  • 自定义 tlength 方程
    tc=0.33:tlength='st(0,0.17); 384*tc / (384 / ld(0) + tc*f /(1-ld(0))) + 384*tc / (tc*f / ld(0) + 384 /(1-ld(0)))'
    
  • 自定义字体颜色和字体文件,C 音符显示为绿色,其他音符显示为蓝色
    fontcolor='if(mod(floor(midi(f)+0.5),12), 0x0000FF, g(1))':fontfile=myfont.ttf
    
  • 使用 fontconfig 自定义字体
    font='Courier New,Monospace,mono|bold'
    
  • 使用图像文件自定义频率范围和自定义轴
    axisfile=myaxis.png:basefreq=40:endfreq=10000
    

18.23 showcwt

使用连续小波变换和 Morlet 小波将输入音频转换为代表频谱的视频输出。

该滤波器接受以下选项

size, s

指定输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 640x512

rate, r

设置输出帧率。默认值为 25

scale

设置使用的频率刻度。允许的值为

linear
对数
bark
mel
erbs
sqrt
cbrt
qdrt
fm

默认值为 linear

iscale

设置使用的强度刻度。允许的值为

linear
对数
sqrt
cbrt
qdrt

默认值为 log

最小值

设置输出中将使用的最小频率。默认为 20 Hz。

最大值

设置输出中将使用的最大频率。默认为 20000 Hz。实际频率上限取决于输入音频的采样率,当此值设置为大于奈奎斯特频率的值时,将强制执行此上限。

imin

设置输出中将使用的最小强度。

imax

设置输出中将使用的最大强度。

logb

将计算出的幅度值映射到像素值时,设置亮度的对数基数。允许的范围是 01。默认值为 0.0001

deviation

设置频率偏差。小于 1 的值更注重频率,而大于 1 的值更注重时间。允许的范围是 010。默认值为 1

pps

设置每秒在一行中输出的像素数。允许的范围是 11024。默认值为 64

mode

设置输出的视觉模式。允许的值为

magnitude

显示幅度。

相位

phase

magphase

显示幅度和相位的组合。幅度映射到亮度,相位映射到颜色。

channel

color

stereo

显示每个立体声差异的独特颜色。

默认值为 magnitude

slide

设置输出的滑动方法。允许的值为

替换
scroll
direction

设置输出滑动方法的方向方法。允许的值为

lr

从左到右的方向。

rl

rl

ud

从上到下的方向。

du

从下到上的方向。

bar

设置条形图显示与显示大小的比率。默认值为 0。

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

18.24 showfreqs

将输入音频转换为表示音频功率谱的视频输出。音频幅度在 Y 轴上,而频率在 X 轴上。

该滤波器接受以下选项

size, s

指定视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 1024x512

rate, r

设置视频速率。默认值为 25

mode

设置显示模式。这设置如何表示每个频率箱。

它接受以下值

line
bar
dot

默认值为 bar

ascale

设置幅度比例。

它接受以下值

lin

线性刻度。

sqrt

平方根刻度。

cbrt

立方根刻度。

log

对数刻度。

默认值为 log

fscale

设置频率刻度。

它接受以下值

lin

线性刻度。

log

对数刻度。

rlog

反向对数刻度。

默认值为 lin

win_size

设置窗口大小。允许的范围是 16 到 65536。

默认值为 2048

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hanning

overlap

设置窗口重叠。范围为 [0, 1]。默认值为 1,这意味着将选择所选窗口函数的最佳重叠。

averaging

设置时间平均。将其设置为 0 将显示当前最大峰值。默认值为 1,这意味着禁用时间平均。

colors

指定由空格或“|”分隔的颜色列表,这些颜色将用于绘制通道频率。无法识别或缺失的颜色将替换为白色。

cmode

设置通道显示模式。

它接受以下值

combined
separate

默认值为 combined

minamp

设置 log 幅度缩放器中使用的最小幅度。

data

设置数据显示模式。

它接受以下值

magnitude
phase
delay

默认值为 magnitude

channels(通道)

设置在处理音频时要使用的通道。默认情况下,所有通道都将被处理。

18.25 showspatial

将立体声音频输入转换为视频输出,表示两个通道之间的空间关系。

该滤波器接受以下选项

size, s

指定输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 512x512

win_size

设置窗口大小。允许的范围是从 102465536。默认大小为 4096

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

rate, r

设置输出帧率。

18.26 showspectrum

将输入音频转换为表示音频频谱的视频输出。

该滤波器接受以下选项

size, s

指定输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 640x512

slide

指定频谱应如何在窗口中滑动。

它接受以下值

replace

当样本到达右侧时,它们再次从左侧开始

scroll

样本从右向左滚动

fullframe

仅当样本到达右侧时才生成帧

rscroll

样本从左向右滚动

lreplace

当样本到达左侧时,它们再次从右侧开始

默认值为 replace

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为 ‘combined’。

color

指定显示颜色模式。

它接受以下值

channel

每个通道都以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道都使用彩虹配色方案显示

moreland

每个通道都使用 moreland 配色方案显示

nebulae

每个通道都使用星云配色方案显示

fire

每个通道都使用火焰配色方案显示

火热色调

每个通道都使用火热的配色方案显示

fruit

每个通道都使用水果配色方案显示

冷色调

每个通道都使用冷色调配色方案显示

magma

每个通道都使用岩浆配色方案显示

绿色调

每个通道都使用绿色配色方案显示

viridis

每个通道都使用 viridis 配色方案显示

plasma

每个通道都使用等离子配色方案显示

cividis

每个通道都使用 cividis 配色方案显示

terrain

每个通道都使用地形配色方案显示

默认值为 ‘channel’。

scale

指定用于计算强度颜色值的刻度。

它接受以下值

lin

linear

sqrt

平方根,默认值

cbrt

立方根

log

对数

4thrt

4 次方根

5thrt

5 次方根

默认值为 ‘sqrt’。

fscale

指定频率刻度。

它接受以下值

lin

linear

log

对数

默认值为 ‘lin’。

saturation

设置显示颜色的饱和度修饰符。负值提供替代配色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

orientation

设置时间与频率轴的方向。可以是 verticalhorizontal。默认值为 vertical

overlap

设置重叠窗口的比率。默认值为 0。当值为 1 时,重叠将设置为当前使用的特定窗口函数的建议大小。

gain

设置用于计算强度颜色值的比例增益。默认值为 1

data

设置要显示的数据。可以是 magnitude(默认值)或 phase,或解包裹相位:uphase

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

开始

设置显示频谱图的起始频率。默认值为 0

stop

设置显示频谱图的截止频率。默认值为 0

fps

设置上限帧率。默认值为 auto,不限制。

legend

绘制时间和频率轴以及图例。默认情况下禁用。

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许范围为 10 到 200。

限制

设置输入音频样本音量的上限,单位为 dBFS。默认值为 0 dBFS。允许范围为 -100 到 100。

opacity

设置使用带 alpha 分量的像素格式输出时的不透明度强度。

用法与 showwaves 滤镜非常相似;请参阅该部分中的示例。

18.26.1 示例

  • 具有对数颜色缩放的大窗口
    showspectrum=s=1280x480:scale=log
    
  • 使用 ffplay 实现每个通道的彩色滑动频谱的完整示例
    ffplay -f lavfi 'amovie=input.mp3, asplit [a][out1];
                 [a] showspectrum=mode=separate:color=intensity:slide=1:scale=cbrt [out0]'
    

18.27 showspectrumpic

将输入音频转换为单个视频帧,表示音频频谱。

该滤波器接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 4096x2048

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为 ‘combined’。

color

指定显示颜色模式。

它接受以下值

channel

每个通道都以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道都使用彩虹配色方案显示

moreland

每个通道都使用 moreland 配色方案显示

nebulae

每个通道都使用星云配色方案显示

fire

每个通道都使用火焰配色方案显示

火热色调

每个通道都使用火热的配色方案显示

fruit

每个通道都使用水果配色方案显示

冷色调

每个通道都使用冷色调配色方案显示

magma

每个通道都使用岩浆配色方案显示

绿色调

每个通道都使用绿色配色方案显示

viridis

每个通道都使用 viridis 配色方案显示

plasma

每个通道都使用等离子配色方案显示

cividis

每个通道都使用 cividis 配色方案显示

terrain

每个通道都使用地形配色方案显示

默认值为 ‘intensity’。

scale

指定用于计算强度颜色值的刻度。

它接受以下值

lin

linear

sqrt

平方根,默认值

cbrt

立方根

log

对数

4thrt

4 次方根

5thrt

5 次方根

默认值为 ‘log’。

fscale

指定频率刻度。

它接受以下值

lin

linear

log

对数

默认值为 ‘lin’。

saturation

设置显示颜色的饱和度修饰符。负值提供替代配色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

orientation

设置时间与频率轴的方向。可以是 verticalhorizontal。默认值为 vertical

gain

设置用于计算强度颜色值的比例增益。默认值为 1

legend

绘制时间和频率轴以及图例。默认启用。

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

开始

设置显示频谱图的起始频率。默认值为 0

stop

设置显示频谱图的截止频率。默认值为 0

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许范围为 10 到 200。

限制

设置输入音频样本音量的上限,单位为 dBFS。默认值为 0 dBFS。允许范围为 -100 到 100。

opacity

设置使用带 alpha 分量的像素格式输出时的不透明度强度。

18.27.1 示例

  • 使用 ffmpeg 在 1024x1024 图像中提取整个音轨的音频频谱图
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

18.28 showvolume

将输入音频音量转换为视频输出。

该滤波器接受以下选项

rate, r

设置视频速率。

b

设置边框宽度,允许范围为 [0, 5]。默认值为 1。

w

设置通道宽度,允许范围为 [80, 8192]。默认值为 400。

h

设置通道高度,允许范围为 [1, 900]。默认值为 20。

f

设置淡化,允许范围为 [0, 1]。默认值为 0.95。

c

设置音量颜色表达式。

该表达式可以使用以下变量

VOLUME

当前通道的最大音量,单位为 dB。

PEAK

当前峰值。

CHANNEL

当前通道号,从 0 开始。

t

如果设置,则显示通道名称。默认启用。

v

如果设置,则显示音量值。默认启用。

o

设置方向,可以是水平:h 或垂直:v,默认值为 h

s

设置步长,允许范围为 [0, 5]。默认值为 0,表示禁用步长。

p

设置背景不透明度,允许范围为 [0, 1]。默认值为 0。

m

设置计量模式,可以是峰值:p 或均方根:r,默认值为 p

ds

设置显示比例,可以是线性:lin 或对数:log,默认值为 lin

dm

单位为秒。如果设置为 > 0,则显示前几秒最大电平的线。默认禁用:0.

dmc

最大线的颜色。当 dm 选项设置为 > 0 时使用。默认值为:orange

18.29 showwaves

将输入音频转换为视频输出,表示样本波形。

该滤波器接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 600x240

mode

设置显示模式。

可用值为

point

为每个样本绘制一个点。

line

为每个样本绘制一条垂直线。

p2p

为每个样本绘制一个点,并在它们之间绘制一条线。

cline

为每个样本绘制一条居中的垂直线。

默认值为 point

n

设置在同一列上打印的样本数。较大的值将降低帧率。必须是正整数。仅当未明确指定 rate 的值时,才能设置此选项。

rate, r

设置(近似)输出帧率。这是通过设置选项 n 来完成的。默认值为 "25"。

split_channels

设置通道是否应单独绘制或重叠。默认值为 0。

colors

设置以'|'分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置幅度比例。

可用值为

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认值为线性。

draw

设置绘制模式。这对于设置高 n 非常有用。

可用值为

scale

缩放每个绘制样本的像素值。

full

直接绘制每个样本。

默认值为 scale

18.29.1 示例

  • 同时输出输入文件音频和相应的视频表示
    amovie=a.mp3,asplit[out0],showwaves[out1]
    
  • 创建合成信号并使用 showwaves 显示它,强制每秒 30 帧的帧率
    aevalsrc=sin(1*2*PI*t)*sin(880*2*PI*t):cos(2*PI*200*t),asplit[out0],showwaves=r=30[out1]
    

18.30 showwavespic

将输入音频转换为单个视频帧,表示样本波形。

该滤波器接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 600x240

split_channels

设置通道是否应单独绘制或重叠。默认值为 0。

colors

设置以'|'分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置幅度比例。

可用值为

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认值为线性。

draw

设置绘制模式。

可用值为

scale

缩放每个绘制样本的像素值。

full

直接绘制每个样本。

默认值为 scale

过滤器

设置过滤模式。

可用值为

average

对每个绘制的样本使用平均样本值。

peak

对每个绘制的样本使用峰值样本值。

默认值为 average

18.30.1 示例

  • 使用 ffmpeg 在 1024x800 图像中提取整个音轨的波形的通道分割表示
    ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
    

18.31 sidedata, asidedata

删除帧边数据,或基于它选择帧。

此过滤器接受以下选项

mode

设置滤波器操作模式。

可以是以下之一

select

选择具有 type 边数据的每个帧。

delete

删除 type 的边数据。如果未设置 type,则删除帧中的所有边数据。

type(类型)

设置所有模式使用的边数据类型。必须为 select 模式设置。有关帧边数据类型的列表,请参阅 libavutil/frame.h 中的 AVFrameSideDataType 枚举。例如,要选择 AV_FRAME_DATA_PANSCAN 边数据,您必须指定 PANSCAN

18.32 spectrumsynth

从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个输入流表示随时间变化的相位。该滤镜将从视频中显示的频域转换回音频输出中呈现的时域。

此滤镜主要用于反转处理过的 showspectrum 滤镜输出,但也可以从其他频谱图合成声音。但在这种情况下,如果相位数据不可用,则结果将很差,因为在这种情况下,需要重新创建相位数据,通常只是从随机噪声重新创建。为了获得最佳结果,请使用仅灰度输出(showspectrum 滤镜中的 channel 颜色模式)和幅度视频的 log 比例以及相位视频的 lin 比例。要生成相位,对于第二个视频,请使用 data 选项。输入视频通常应使用 fullframe 滑动模式,因为这样可以节省解码视频所需的资源。

该滤波器接受以下选项

sample_rate

指定输出音频的采样率,生成频谱的音频采样率可能不同。

channels(通道)

设置输入视频频谱中表示的通道数。

scale

设置生成幅度输入频谱时使用的比例。可以是 linlog。默认值为 log

slide

设置生成输入频谱时使用的滑动。可以是 replacescrollfullframerscroll。默认值为 fullframe

win_func

设置用于重新合成的窗口函数。

overlap

设置窗口重叠。范围为 [0, 1]。默认值为 1,这意味着将选择所选窗口函数的最佳重叠。

orientation

设置输入视频的方向。可以是 verticalhorizontal。默认值为 vertical

18.32.1 示例

  • 首先从音频创建幅度和相位视频,假设音频是具有 44100 采样率的立体声,然后使用 spectrumsynth 将视频重新合成为音频
    ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=log:overlap=0.875:color=channel:slide=fullframe:data=magnitude -an -c:v rawvideo magnitude.nut
    ffmpeg -i input.flac -lavfi showspectrum=mode=separate:scale=lin:overlap=0.875:color=channel:slide=fullframe:data=phase -an -c:v rawvideo phase.nut
    ffmpeg -i magnitude.nut -i phase.nut -lavfi spectrumsynth=channels=2:sample_rate=44100:win_func=hann:overlap=0.875:slide=fullframe output.flac
    

18.33 split, asplit

将输入拆分为几个相同的输出。

asplit 与音频输入一起使用,split 与视频一起使用。

该滤镜接受一个指定输出数量的参数。如果未指定,则默认为 2。

18.33.1 示例

  • 从同一个输入创建两个单独的输出
    [in] split [out0][out1]
    
  • 要创建 3 个或更多输出,您需要指定输出的数量,例如
    [in] asplit=3 [out0][out1][out2]
    
  • 从同一个输入创建两个单独的输出,一个裁剪,一个填充
    [in] split [splitout1][splitout2];
    [splitout1] crop=100:100:0:0    [cropout];
    [splitout2] pad=200:200:100:100 [padout];
    
  • 使用 ffmpeg 创建输入音频的 5 个副本
    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
    

18.34 zmq, azmq

接收通过 libzmq 客户端发送的命令,并将它们转发到滤镜图中的滤镜。

zmqazmq 用作直通滤镜。zmq 必须插入两个视频滤镜之间,azmq 必须插入两个音频滤镜之间。两者都能够向任何滤镜类型发送消息。

要启用这些过滤器,您需要安装 libzmq 库和头文件,并使用 --enable-libzmq 配置 FFmpeg。

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

zmqazmq 过滤器作为 libzmq 服务器工作,接收通过 bind_address (或缩写 "b")选项定义的网络接口发送的消息。此选项的默认值为 tcp://127.0.0.1:5555。您可能需要根据自己的需求更改此值,但不要忘记转义任何“:”符号(请参阅滤镜图转义)。

接收到的消息必须采用以下形式

TARGET COMMAND [ARG]

TARGET 指定命令的目标,通常是过滤器类的名称或特定的过滤器实例名称。默认的过滤器实例名称使用模式 ‘Parsed_<filter_name>_<index>’,但您可以使用 ‘filter_name@id’ 语法覆盖此模式(请参阅滤镜图语法)。

COMMAND 指定目标滤镜的命令名称。

ARG 是可选的,指定给定 COMMAND 的可选参数列表。

接收到消息后,将对其进行处理,并将相应的命令注入到滤镜图中。根据结果,过滤器将采用以下格式向客户端发送回复

ERROR_CODE ERROR_REASON
MESSAGE

MESSAGE 是可选的。

18.34.1 示例

请查看 tools/zmqsend,它是一个 zmq 客户端的示例,可用于发送由这些过滤器处理的命令。

考虑以下由 ffplay 生成的滤镜图。在此示例中,最后一个 overlay 过滤器具有实例名称。所有其他过滤器将具有默认实例名称。

ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@my=x=100 "

要更改视频左侧的颜色,可以使用以下命令

echo Parsed_color_0 c yellow | tools/zmqsend

要更改右侧的颜色

echo Parsed_color_1 c pink | tools/zmqsend

要更改右侧的位置

echo overlay@my x 150 | tools/zmqsend

19 多媒体源

以下是对当前可用的多媒体源的描述。

19.1 amovie

这与 movie 源相同,只是它默认选择音频流。

19.2 avsynctest

生成音频/视频同步测试。

生成的流会定期显示闪烁的视频帧并在音频中发出哔声。这有助于检查 A/V 同步问题。

它接受以下选项

size, s

设置输出视频大小。默认值为 hd720

framerate, fr

设置输出视频帧率。默认值为 30

samplerate, sr

设置输出音频采样率。默认值为 44100

amplitude, a

设置输出音频哔声幅度。默认值为 0.7

period, p

设置输出音频哔声周期(以秒为单位)。默认值为 3

delay, dl

设置输出视频闪烁延迟(以帧数为单位)。默认值为 0

cycle, c

启用视频延迟循环,默认情况下禁用。

duration, d

设置流输出持续时间。默认情况下,持续时间是无限的。

fg, bg, ag

设置前景/背景/附加颜色。

19.2.1 命令

此源支持以上一些选项作为命令

19.3 movie

从电影容器读取音频和/或视频流。

它接受以下参数

filename

要读取的资源的名称(不一定是文件;它也可以是通过某些协议访问的设备或流)。

format_name, f

指定要读取的电影的格式,可以是容器的名称或输入设备的名称。如果未指定,则会根据 movie_name 或通过探测来猜测格式。

seek_point, sp

指定以秒为单位的查找点。帧将从此查找点开始输出。该参数使用 av_strtod 进行评估,因此数值可以带有 IS 后缀。默认值为“0”。

streams, s

指定要读取的流。可以指定多个流,用“+”分隔。然后,源将具有相同顺序的多个输出。该语法在 (ffmpeg) 手册中的“流说明符”部分中进行了解释。两个特殊名称“dv”和“da”分别指定默认(最适合)的视频和音频流。默认值为“dv”,如果过滤器称为“amovie”,则为“da”。

stream_index, si

指定要读取的视频流的索引。如果该值为 -1,则会自动选择最合适的视频流。默认值为“-1”。已弃用。如果过滤器名为“amovie”,它将选择音频而不是视频。

循环

指定按顺序读取流的次数。如果该值为 0,则流将无限循环。默认值为“1”。

请注意,当电影循环时,源时间戳不会更改,因此它将生成非单调递增的时间戳。

discontinuity

指定帧之间的时间差,当超过此时间差时,该点将被视为时间戳不连续性,并通过调整后面的时间戳来消除。

dec_threads

指定用于解码的线程数

format_opts

为打开的文件指定格式选项。格式选项可以指定为以“:”分隔的 key=value 对列表。以下示例显示如何添加 protocol_whitelist 和 protocol_blacklist 选项

ffplay -f lavfi
"movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"

它允许将第二个视频覆盖在滤镜图主输入的顶部,如此图所示

input -----------> deltapts0 --> overlay --> output
                                    ^
                                    |
movie --> scale--> deltapts1 -------+

19.3.1 示例

  • 从 in.avi 文件开头跳过 3.2 秒,并将其覆盖在标记为“in”的输入之上
    movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从 video4linux2 设备读取,并将其覆盖在标记为“in”的输入之上
    movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从 dvd.vob 读取第一个视频流和 ID 为 0x81 的音频流;该视频连接到名为“video”的 pad,该音频连接到名为“audio”的 pad
    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
    

19.3.2 命令

movie 和 amovie 都支持以下命令

seek

使用“av_seek_frame”执行查找。语法为:seek stream_index|timestamp|flags

  • stream_index: 如果 stream_index 为 -1,则会选择默认流,并且 timestamp 会自动从 AV_TIME_BASE 单位转换为流特定的 time_base。
  • timestamp: AVStream.time_base 单位的时间戳,或者,如果未指定流,则为 AV_TIME_BASE 单位的时间戳。
  • flags: 选择方向和查找模式的标志。
get_duration

获取以 AV_TIME_BASE 单位的电影持续时间。

20 参见

ffmpegffplayffprobelibavfilter

21 作者

FFmpeg 开发人员。

有关作者的详细信息,请参阅项目的 Git 历史记录(https://git.ffmpeg.org/ffmpeg),例如,通过在 FFmpeg 源代码目录中键入命令 git log,或浏览在线存储库:https://git.ffmpeg.org/ffmpeg

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

本文档于 2025 年 1 月 21 日使用 makeinfo 生成。

托管由 telepoint.bg 提供