ffplay 文档

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

目录

1 Synopsis

ffplay [options] [input_url]

2 Description

FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs.

3 Options

所有数值选项,如果未另行指定,接受一个代表数字的字符串作为输入,该字符串可以后跟一个SI单位前缀,例如:'K'、'M' 或 'G'。

如果SI单位前缀后附加‘i’,完整前缀将被解释为二进制倍数的单位前缀,这些倍数基于1024的幂而非1000的幂。附加‘B’到SI单位前缀将值乘以8。这允许使用例如:‘KB’、‘MiB’、‘G’ 和 ‘B’作为数字后缀。

不接受参数的选项为布尔选项,并将相应的值设置为true。可通过在选项名称前添加 "no" 来将其设置为false。例如使用 "-nofoo" 会将名称为 "foo" 的布尔选项设置为false。

接受参数的选项支持一种特殊语法,其中命令行上给定的参数被解释为文件路径,并从该文件加载实际的参数值。要使用此功能,请在选项名称前加一个正斜杠 '/'(位于领先的短划线之后)。例如:

ffmpeg -i INPUT -/filter:v filter.script OUTPUT

将从名为的文件加载过滤器图描述filter.script.

3.1 流指定符

某些选项按流应用,例如比特率或编解码器。可以使用流指定符精确指定某个选项所属的流。

流指定符是一个通常添加到选项名称后并以冒号分隔的字符串。例如:-codec:a:1 ac3包含a:1流指定符,该指定符匹配第二个音频流。因此,它将为第二个音频流选择ac3编解码器。

流指定符可以匹配多个流,以便将选项应用于所有这些流。例如:-b:a 128k匹配所有音频流。

空流指定符匹配所有流。例如:-codec copy-codec: copy将复制所有流而不重新编码。

流指定符的可能形式包括:

流索引

匹配具有此索引的流。例如:-threads:1 4将设置第二个流的线程数为4。如果流索引被用作额外的流指定符(见下文),则它会选择匹配流中的第流索引号流。流编号基于libavformat检测到的流顺序,除非同时指定了流组指定符或节目ID。在这种情况下,它基于组或节目的流顺序。

流类型[:附加流指定符]

流类型可以是以下之一:‘v’ 或 ‘V’ 代表视频,‘a’ 代表音频,‘s’ 代表字幕,‘d’ 代表数据,‘t’ 代表附件。‘v’ 匹配所有视频流,‘V’ 仅匹配不作为附加图片、视频缩略图或封面艺术的视频流。如果附加流指定符被使用,那么它匹配同时具有此类型并匹配附加流指定符的流。否则,它匹配指定类型的所有流。

g:组指定符[:附加流指定符]

匹配属于指定组的流组指定符。如果附加流指定符被使用,那么它匹配同时属于该组且匹配附加流指定符. 组指定符可以是以下之一:

组索引

匹配具有组索引的流。

#组ID or i:组ID

匹配具有指定组ID的流。

p:节目ID[:附加流指定符]

匹配属于指定节目ID的流节目ID。如果附加流指定符被使用,那么它匹配同时属于节目且匹配附加流指定符.

#流ID or i:流ID

根据流ID(例如MPEG-TS容器中的PID)匹配流。

m:[:]

匹配元数据标签具有指定值的流。如果未给定,则匹配包含该标签的任何值的流。

disp:处置[:附加流指定符]

匹配具有指定处置的流。处置是一个由一个或多个处置组成的列表(由-dispositions选项打印)用‘+’连接。

u

匹配具有可用配置的流,编解码器必须被定义且必须存在必需信息,例如视频尺寸或音频采样率。

请注意在ffmpeg中,通过元数据匹配仅对输入文件正确工作。

3.2 通用选项

这些选项在ff*工具中共享。

-L

显示许可证。

-h, -?, -help, --help [参数]

显示帮助。可选的参数可以指定以打印有关特定项目的帮助。如果未指定参数,仅显示基本(非高级)工具选项。

参数的可能值参数包括:

long

打印高级工具选项及基本工具选项。

full

打印完整的选项列表,包括编码器、解码器、解复用器、复用器、过滤器等的共享和私有选项。

decoder=解码器名称

打印有关指定解码器的详细信息解码器名称。使用-decoders选项获取所有解码器的列表。

encoder=编码器名称

打印有关指定编码器的详细信息编码器名称。使用-encoders选项获取所有编码器的列表。

demuxer=解复用器名称

打印有关指定解复用器的详细信息解复用器名称。使用-formats选项获取所有解复用器和复用器的列表。

muxer=复用器名称

打印有关指定复用器的详细信息复用器名称。使用-formats选项获取所有复用器和解复用器的列表。

filter=过滤器名称

打印有关指定过滤器的详细信息过滤器名称。使用-filters选项获取所有过滤器的列表。

bsf=比特流过滤器名称

打印有关指定比特流过滤器的详细信息比特流过滤器名称。使用-bsfs选项获取所有比特流过滤器的列表。

protocol=协议名称

打印有关指定协议的详细信息协议名称。使用-protocols选项获取所有协议的列表。

-version

显示版本。

-buildconf

显示构建配置,每行一个选项。

-formats

显示可用的格式(包括设备)。

-demuxers

显示可用的解复用器。

-muxers

显示可用的复用器。

-devices

显示可用的设备。

-codecs

显示libavcodec支持的所有编解码器。

请注意,术语'编解码器'在本文档中是作为媒体比特流格式的简写。

-decoders

显示可用的解码器。

-encoders

显示所有可用的编码器。

-bsfs

显示可用的比特流过滤器。

-protocols

显示可用的协议。

-filters

显示libavfilter支持的过滤器。

-pix_fmts

显示可用的像素格式。

-sample_fmts

显示可用的样本格式。

-layouts

显示频道名称和标准频道布局。

-dispositions

显示流处置方式。

-colors

显示识别的颜色名称。

-sources 设备[,选项1=值1[,选项2=值2]...]

显示输入设备的自动检测源。 某些设备可能会提供无法通过系统检测到的源名称。 返回的列表不能保证总是完整的。

ffmpeg -sources pulse,server=192.168.0.4
-sinks 设备[,选项1=值1[,选项2=值2]...]

显示输出设备的自动检测接收器。 某些设备可能会提供无法通过系统检测到的接收器名称。 返回的列表不能保证总是完整的。

ffmpeg -sinks pulse,server=192.168.0.4
-loglevel [标志+]日志级别 | -v [标志+]日志级别

设置库使用的日志级别和标志。

可选的标志前缀可以由以下值组成:

repeat

表示重复的日志输出不应被压缩为第一行,并且"最后消息重复n次"行将被省略。

level

表示日志输出应该为每个消息行添加一个[level]前缀。这可以作为日志着色的替代方案,例如将日志转储到文件时。

标志也可以单独使用,通过添加‘+’/‘-’前缀设置/重置单个标志而不影响其他标志或更改日志级别。在设置标志日志级别时,预计在最后一个, a ’+’ separator is expected between the last 标志值和日志级别.

日志级别是一个字符串或包含以下值之一的数字:

quiet, -8

完全不显示;保持静默。

panic, 0

仅显示可能导致进程崩溃的致命错误,例如断言失败。目前未用于任何内容。

fatal, 8

仅显示致命错误。这些是在进程绝对无法继续后发生的错误。

error, 16

显示所有错误,包括那些可以恢复的错误。

warning, 24

显示所有警告和错误。任何与可能不正确或意外事件相关的消息都会显示。

info, 32

在处理期间显示信息性消息。这是对警告和错误的补充。这是默认值。

verbose, 40

info相同,但更详细。

debug, 48

显示所有内容,包括调试信息。

trace, 56

例如启用重复日志输出,添加level前缀,并设置日志级别verbose:

ffmpeg -loglevel repeat+level+verbose -i input output

另一个示例启用了重复日志输出而不影响当前level前缀标志或日志级别状态:

ffmpeg [...] -loglevel +repeat

默认情况下程序记录到stderr。如果终端支持着色,会使用颜色标记错误和警告。日志着色可以通过设置环境变量AV_LOG_FORCE_NOCOLOR禁用,也可以通过设置环境变量AV_LOG_FORCE_COLOR.

-report

将完整的命令行和日志输出转储到一个名为程序-YYYYMMDD-HHMMSS.log的文件中位于当前目录下。 该文件对于报告错误很有用。 它也意味着-loglevel debug.

设置环境变量FFREPORT为任何值将具有相同效果。如果值是“:”分隔的键值对序列,这些选项将影响报告;如果选项值包含特殊字符或分隔符‘:’,则必须转义(请参阅ffmpeg-utils手册中的“引用和转义”部分)。

以下选项被识别:

file

设置要用于报告的文件名;%p扩展为程序名称,%t扩展为时间戳,%%扩展为原始%

level

使用数字值(见)设置日志详细级别-loglevel).

例如,将报告输出到名为ffreport.log的文件,使用日志级别32(日志级别的别名info):

FFREPORT=file=ffreport.log:level=32 ffmpeg -i input output

解析环境变量时的错误不会是致命错误,也不会出现在报告中。

-hide_banner

抑制打印横幅。

所有FFmpeg工具通常会显示版权声明、构建选项和库版本。此选项可用于抑制打印此信息。

-cpuflags flags (全局)

允许设置和清除CPU标志。此选项旨在进行测试。除非您知道自己正在做什么,否则不要使用它。

ffmpeg -cpuflags -sse+mmx ...
ffmpeg -cpuflags mmx ...
ffmpeg -cpuflags 0 ...

此选项的可能标志包括:

x86
mmx
mmxext
sse
sse2
sse2slow
sse3
sse3slow
ssse3
atom
sse4.1
sse4.2
avx
avx2
xop
fma3
fma4
3dnow
3dnowext
bmi1
bmi2
cmov
ARM
armv5te
armv6
armv6t2
vfp
vfpv3
neon
setend
AArch64
armv8
vfp
neon
PowerPC
altivec
Specific Processors
pentium2
pentium3
pentium4
k6
k62
athlon
athlonxp
k8
-cpucount 计数 (全局)

覆盖CPU数量检测。此选项旨在进行测试。除非您知道自己正在做什么,否则不要使用它。

ffmpeg -cpucount 2
-max_alloc 字节

通过ffmpeg的malloc函数系列设置堆上分配块的最大尺寸限制。在使用此选项时请格外小心。如果您没有充分理解这样做的后果,请不要使用。默认值是INT_MAX。

3.3 AVOptions

这些选项由libavformat、libavdevice和libavcodec库直接提供。要查看可用AVOptions的列表,请使用-help选项。它们分为两类:

generic

这些选项可以为任何容器、编解码器或设备设置。通用选项列在容器/设备的AVFormatContext选项下,以及编解码器的AVCodecContext选项下。

private

这些选项是特定于给定容器、设备或编解码器的。私有选项列在其对应的容器/设备/编解码器下。

例如,要向MP3文件写入ID3v2.3头而不是默认的ID3v2.4头,请使用id3v2_versionMP3复用器的私有选项:

ffmpeg -i input.flac -id3v2_version 3 out.mp3

所有编解码器的AV选项都是按流划分的,因此应该附加流说明符:

ffmpeg -i multichannel.mxf -map 0:v:0 -map 0:a:0 -map 0:a:0 -c:a:0 ac3 -b:a:0 640k -ac:a:1 2 -c:a:1 aac -b:2 128k out.mp4

在上述示例中,一个多声道音频流被映射两次输出。第一实例使用编解码器ac3编码,码率为640k。第二实例被下混至立体声2声道,并使用编解码器aac编码。通过使用输出流的绝对索引,指定码率为128k。

注意:-nooption语法不能用于布尔型AV选项,使用-option 0/-option 1.

注意:以前未公开的通过在选项名称前附加v/a/s来指定每个流的AV选项的方法现已废弃,并将在不久后移除。

3.4 主要选项

-x 宽度

强制显示宽度。

-y 高度

强制显示高度。

-fs

以全屏模式启动。

-an

禁用音频。

-vn

禁用视频。

-sn

禁用字幕。

-ss 位置

跳转到位置。请注意,在大多数格式中无法精确跳到指定点,因此ffplay将跳到最接近的跳转点到位置.

位置必须是一个时间持续量规范,详见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续量部分.

-t 持续时间

播放持续时间秒的音频/视频。

持续时间必须是一个时间持续量规范,详见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续量部分.

-bytes

按字节跳转。

-seek_interval

设置使用左/右键跳转的自定义间隔,单位为秒。默认值为10秒。

-nodisp

禁用图形显示。

-noborder

无边窗口。

-alwaysontop

窗口始终置顶。适用于:SDL >= 2.0.5 的 X11,SDL >= 2.0.6 的 Windows。

-volume

设置启动音量。0表示静音,100表示无音量减少或放大。负值被视为0,超过100的值被视为100。

-f 格式

强制格式。

-window_title 标题

设置窗口标题(默认值为输入文件名)。

-left 标题

设置窗口左侧的x位置(默认为居中窗口)。

-top 标题

设置窗口顶部的y位置(默认为居中窗口)。

-loop 数值

重复播放电影 <number> 次。0表示永久重复。

-showmode 模式

设置要使用的显示模式。模式的可用值有:

0, video

显示视频

1, waves

显示音频波形

2, rdft

使用RDFT((反)实数离散傅里叶变换)显示音频频率带

默认值为“视频”,如果视频不存在或不能播放,则会自动选择“rdft”。

您可以通过按键w.

-vf filtergraph

创建由filtergraph指定的过滤图并对视频流进行过滤。

filtergraph是对要应用于流的过滤图的描述,必须具有一个视频输入和一个视频输出。在过滤图中,输入与标签in关联,输出与标签out关联。有关过滤图语法的更多信息,请参见ffmpeg-filters手册。

您可以多次指定此参数,并通过按键w.

-af filtergraph

filtergraph是对要应用于输入音频的过滤图的描述。 使用选项“-filters”显示所有可用的过滤器(包括源和接收器)。

-i 输入地址

读取输入地址.

3.5 高级选项

-stats

打印几个播放统计数据,特别是显示流持续时间、编解码器参数、当前流位置以及音频/视频同步漂移。默认情况下会显示,除非日志级别低于info。手动指定这个选项可以强制显示该信息。若要禁用它,需指定-nostats.

-fast

非符合规范的优化。

-genpts

生成pts(时间戳)。

-sync 类型

将主时钟设置为音频(type=audio)、视频(type=video)或外部(type=ext)。默认值为音频。主时钟用于控制音频视频同步。大多数媒体播放器使用音频作为主时钟,但在某些情况下(流媒体或高质量广播)有必要更改它。此选项主要用于调试目的。

-ast 音频流说明符

使用指定的流说明符选择所需的音频流。流说明符在流说明符章节中有描述。如果未指定此选项,则会在已选择的视频流的程序中选择“最佳”音频流。

-vst 视频流说明符

使用指定的流说明符选择所需的视频流。流说明符在流说明符章节中有描述。如果未指定此选项,则会选择“最佳”视频流。

-sst 字幕流说明符

使用指定的流说明符选择所需的字幕流。流说明符在流说明符章节中有描述。如果未指定此选项,则会在已选择的视频或音频流的程序中选择“最佳”字幕流。

-autoexit

视频播放完成后退出。

-exitonkeydown

按下任何键后退出。

-exitonmousedown

按下任意鼠标按钮后退出。

-codec:媒体说明符 编解码器名称

为由媒体说明符标识的流强制指定特定的解码器实现,该说明符可以采用a(音频)、v(视频)和s字幕。

-acodec 编解码器名称

强制使用特定的音频解码器。

-vcodec 编解码器名称

强制使用特定的视频解码器。

-scodec 编解码器名称

强制使用特定的字幕解码器。

-autorotate

根据文件元数据自动旋转视频。默认启用,使用-noautorotate来禁用它。

-framedrop

如果视频不同步,则丢弃视频帧。如果主时钟未设置为视频,则默认启用。使用此选项可以为所有主时钟源启用帧丢弃,使用-noframedrop来禁用它。

-infbuf

不要限制输入缓冲区大小,从输入尽可能快地读取尽可能多的数据。默认情况下为实时流启用此选项,否则如果未及时读取数据可能会丢失。使用此选项可以为所有输入启用无限缓冲区,使用-noinfbuf来禁用它。

-filter_threads 线程数量

定义用于处理过滤器管道的线程数量。每个管道都会产生一个线程池,其中有这些线程用于并行处理。默认值为0,这意味着线程数量将根据可用的CPU数量决定。

-enable_vulkan

使用vulkan渲染器,而不是SDL内置的渲染器。依赖于libplacebo。

-vulkan_params

使用一个包含=对的vulkan配置,其中各对之间用":"分隔。

-hwaccel

使用硬件加速解码。启用此选项将自动启用vulkan渲染器。

3.6 播放过程中

q,ESC

退出。

f

切换全屏。

p,空格键

暂停播放。

m

切换静音。

9, 0
/, *

分别减少和增加音量。

a

在当前节目中循环切换音频频道。

v

循环切换视频频道。

t

在当前节目中循环切换字幕频道。

c

循环切换节目。

w

循环切换视频过滤器或显示模式。

s

步进到下一帧。

如果流尚未暂停,则暂停,步进到下一个视频帧,然后暂停。

左/右

向后/向前跳转10秒。

下/上

向后/向前跳转1分钟。

向下翻页/向上翻页

跳转到上一个/下一个章节。 如果没有章节 向后/向前跳转10分钟。

右键单击

跳转到与文件宽度分数对应的百分比位置。

左键双击

切换全屏。

4 语法

本节记录了FFmpeg库和工具采用的语法和格式。

4.1 引用和转义

除非另有规定,FFmpeg采用以下引用和转义机制。应用以下规则:

  • '‘和‘\’是特殊字符(分别用于引用和转义)。除了它们之外,根据特定语法使用的转义和引用可能还有其他特殊字符。
  • 通过在特殊字符前添加‘对其进行转义。\’.
  • 所有包裹在‘和‘之间的字符都在解析的字符串中原样包括。引用字符‘本身无法引用,因此您可能需要关闭引用并转义它。''’ are included literally in the parsed string. The quote character ‘'’ itself cannot be quoted, so you may need to close the quote and escape it.
  • 除非被转义或引用,解析的字符串中,前导和尾随的空白被移除。

请注意,根据采用的Shell语言语法,使用命令行或脚本可能需要添加第二级转义。

定义的av_get_token函数可以用来解析一个令牌,按照上面的规则定义引用或转义。libavutil/avstring.h can be used to parse a token quoted or escaped according to the rules defined above.

工具tools/ffescape在FFmpeg源码树中可以用来自动在脚本中对字符串进行引用或转义。

4.1.1 示例

  • 转义包含特殊字符的字符串Crime d'Amour'字符串:
    Crime d\'Amour
    
  • 上述字符串包含一个引号,因此'在引用时需要转义它:
    'Crime d'\''Amour'
    
  • 使用引用包括前导或尾随空白:
    '  this string starts and ends with whitespaces  '
    
  • 转义和引用可以结合使用:
    ' The string '\'string\'' is a string '
    
  • 要包括一个字面‘您可以使用转义或引用:\单引号:
    'c:\foo' can be written as c:\\foo
    

4.2 日期

接受的语法为:

[(YYYY-MM-DD|YYYYMMDD)[T|t| ]]((HH:MM:SS[.m...]]])|(HHMMSS[.m...]]]))[Z]
now

如果值为“现在”,则表示当前时间。

时间是本地时间,除非附加了“Z”,此时它会被解释为UTC。 如果未指定年月日部分,则取当前年月日。

4.3 时间持续量

表达时间持续量有两种接受的语法。

[-][小时:]分钟:[.小数...]

小时表示小时数,分钟表示最多2位数的分钟数,表示最多2位数的秒数。在秒数末尾的小数表示值。小数表示秒的小数部分。毫秒.

[-]+[.毫秒...][s|ms|us]

表示秒数,带有可选的小数部分。可用字面后缀毫秒表示秒、毫秒或微秒值。s’, ‘ms’ or ‘us’ indicate to interpret the value as seconds, milliseconds or microseconds, respectively.

在两种表达式中,可选的‘负号’表示负持续时间。-’ indicates negative duration.

4.3.1 示例

以下示例都是合法时间持续量:

55

55秒

0.2

0.2秒

200ms

200毫秒,即0.2秒

200000us

200000微秒,即0.2秒

12:03:45

12小时、03分钟和45秒

23.189

23.189秒

4.4 视频大小

指定源视频的大小,它可能是表单宽度x高度的字符串,或者一个大小缩写的名称。

以下缩写被识别:

ntsc

720x480

pal

720x576

qntsc

352x240

qpal

352x288

sntsc

640x480

spal

768x576

film

352x240

ntsc-film

352x240

sqcif

128x96

qcif

176x144

cif

352x288

4cif

704x576

16cif

1408x1152

qqvga

160x120

qvga

320x240

vga

640x480

svga

800x600

xga

1024x768

uxga

1600x1200

qxga

2048x1536

sxga

1280x1024

qsxga

2560x2048

hsxga

5120x4096

wvga

852x480

wxga

1366x768

wsxga

1600x1024

wuxga

1920x1200

woxga

2560x1600

wqsxga

3200x2048

wquxga

3840x2400

whsxga

6400x4096

whuxga

7680x4800

cga

320x200

ega

640x350

hd480

852x480

hd720

1280x720

hd1080

1920x1080

2k

2048x1080

2kflat

1998x1080

2kscope

2048x858

4k

4096x2160

4kflat

3996x2160

4kscope

4096x1716

nhd

640x360

hqvga

240x160

wqvga

400x240

fwqvga

432x240

hvga

480x320

qhd

960x540

2kdci

2048x1080

4kdci

4096x2160

uhd2160

3840x2160

uhd4320

7680x4320

4.5 视频速率

指定视频的帧率,即每秒生成的帧数。帧率必须是格式帧率分子/帧率分母的字符串,可以是整数、浮点数或有效的视频帧率缩写。

以下是可识别的缩写:

ntsc

30000/1001

pal

25/1

qntsc

30000/1001

qpal

25/1

sntsc

30000/1001

spal

25/1

film

24/1

ntsc-film

24000/1001

4.6 比率

比率可以表示为一个表达式,或者形式化为分子:分母.

注意,具有无限(1/0)或负值的比率被视为有效,因此如果想排除这些值,应当检查返回值。

未定义的值可以用“0:0”字符串表示。

4.7 颜色

可以是下方定义的颜色名称(大小写不敏感)或[0x|#]RRGGBB[AA]序列,后跟@和表示透明度的字符串。

透明度组件可以是由“0x”后跟十六进制数字或0.0到1.0之间的十进制数字组成的字符串,表示不透明度值(“0x00”或“0.0”代表完全透明,“0xff”或“1.0”代表完全不透明)。如果未指定透明度组件,则假定为“0xff”。

字符串“random”将产生随机颜色。

以下是可识别的颜色名称:

AliceBlue

0xF0F8FF

AntiqueWhite

0xFAEBD7

Aqua

0x00FFFF

Aquamarine

0x7FFFD4

Azure

0xF0FFFF

Beige

0xF5F5DC

Bisque

0xFFE4C4

Black

0x000000

BlanchedAlmond

0xFFEBCD

Blue

0x0000FF

BlueViolet

0x8A2BE2

Brown

0xA52A2A

BurlyWood

0xDEB887

CadetBlue

0x5F9EA0

Chartreuse

0x7FFF00

Chocolate

0xD2691E

Coral

0xFF7F50

CornflowerBlue

0x6495ED

Cornsilk

0xFFF8DC

Crimson

0xDC143C

Cyan

0x00FFFF

DarkBlue

0x00008B

DarkCyan

0x008B8B

DarkGoldenRod

0xB8860B

DarkGray

0xA9A9A9

DarkGreen

0x006400

DarkKhaki

0xBDB76B

DarkMagenta

0x8B008B

DarkOliveGreen

0x556B2F

Darkorange

0xFF8C00

DarkOrchid

0x9932CC

DarkRed

0x8B0000

DarkSalmon

0xE9967A

DarkSeaGreen

0x8FBC8F

DarkSlateBlue

0x483D8B

DarkSlateGray

0x2F4F4F

DarkTurquoise

0x00CED1

DarkViolet

0x9400D3

DeepPink

0xFF1493

DeepSkyBlue

0x00BFFF

DimGray

0x696969

DodgerBlue

0x1E90FF

FireBrick

0xB22222

FloralWhite

0xFFFAF0

ForestGreen

0x228B22

Fuchsia

0xFF00FF

Gainsboro

0xDCDCDC

GhostWhite

0xF8F8FF

Gold

0xFFD700

GoldenRod

0xDAA520

Gray

0x808080

Green

0x008000

GreenYellow

0xADFF2F

HoneyDew

0xF0FFF0

HotPink

0xFF69B4

IndianRed

0xCD5C5C

Indigo

0x4B0082

Ivory

0xFFFFF0

Khaki

0xF0E68C

Lavender

0xE6E6FA

LavenderBlush

0xFFF0F5

LawnGreen

0x7CFC00

LemonChiffon

0xFFFACD

LightBlue

0xADD8E6

LightCoral

0xF08080

LightCyan

0xE0FFFF

LightGoldenRodYellow

0xFAFAD2

LightGreen

0x90EE90

LightGrey

0xD3D3D3

LightPink

0xFFB6C1

LightSalmon

0xFFA07A

LightSeaGreen

0x20B2AA

LightSkyBlue

0x87CEFA

LightSlateGray

0x778899

LightSteelBlue

0xB0C4DE

LightYellow

0xFFFFE0

Lime

0x00FF00

LimeGreen

0x32CD32

Linen

0xFAF0E6

Magenta

0xFF00FF

Maroon

0x800000

MediumAquaMarine

0x66CDAA

MediumBlue

0x0000CD

MediumOrchid

0xBA55D3

MediumPurple

0x9370D8

MediumSeaGreen

0x3CB371

MediumSlateBlue

0x7B68EE

MediumSpringGreen

0x00FA9A

MediumTurquoise

0x48D1CC

MediumVioletRed

0xC71585

MidnightBlue

0x191970

MintCream

0xF5FFFA

MistyRose

0xFFE4E1

Moccasin

0xFFE4B5

NavajoWhite

0xFFDEAD

Navy

0x000080

OldLace

0xFDF5E6

Olive

0x808000

OliveDrab

0x6B8E23

Orange

0xFFA500

OrangeRed

0xFF4500

Orchid

0xDA70D6

PaleGoldenRod

0xEEE8AA

PaleGreen

0x98FB98

PaleTurquoise

0xAFEEEE

PaleVioletRed

0xD87093

PapayaWhip

0xFFEFD5

PeachPuff

0xFFDAB9

Peru

0xCD853F

Pink

0xFFC0CB

Plum

0xDDA0DD

PowderBlue

0xB0E0E6

Purple

0x800080

Red

0xFF0000

RosyBrown

0xBC8F8F

RoyalBlue

0x4169E1

SaddleBrown

0x8B4513

Salmon

0xFA8072

SandyBrown

0xF4A460

SeaGreen

0x2E8B57

SeaShell

0xFFF5EE

Sienna

0xA0522D

Silver

0xC0C0C0

SkyBlue

0x87CEEB

SlateBlue

0x6A5ACD

SlateGray

0x708090

Snow

0xFFFAFA

SpringGreen

0x00FF7F

SteelBlue

0x4682B4

Tan

0xD2B48C

Teal

0x008080

Thistle

0xD8BFD8

Tomato

0xFF6347

Turquoise

0x40E0D0

Violet

0xEE82EE

Wheat

0xF5DEB3

White

0xFFFFFF

WhiteSmoke

0xF5F5F5

Yellow

0xFFFF00

YellowGreen

0x9ACD32

4.8 通道布局

通道布局指定多通道音频流中通道的空间排列。为了指定一个通道布局,FFmpeg 使用了一种特殊的语法。

单个通道通过一个 ID 来识别,如下表所示:

FL

前左

FR

前右

FC

前中

LFE

低频

BL

后左

BR

后右

FLC

前左中心

FRC

前右中心

BC

后中

SL

侧左

SR

侧右

TC

顶部中

TFL

顶部前左

TFC

顶部前中

TFR

顶部前右

TBL

顶部后左

TBC

顶部后中

TBR

顶部后右

DL

下混左

DR

下混右

WL

宽左

WR

宽右

SDL

环绕直左

SDR

环绕直右

LFE2

低频2

标准通道布局组合可以使用以下标识符来指定:

mono

FC

stereo

FL+FR

2.1

FL+FR+LFE

3.0

FL+FR+FC

3.0(back)

FL+FR+BC

4.0

FL+FR+FC+BC

quad

FL+FR+BL+BR

quad(side)

FL+FR+SL+SR

3.1

FL+FR+FC+LFE

5.0

FL+FR+FC+BL+BR

5.0(side)

FL+FR+FC+SL+SR

4.1

FL+FR+FC+LFE+BC

5.1

FL+FR+FC+LFE+BL+BR

5.1(side)

FL+FR+FC+LFE+SL+SR

6.0

FL+FR+FC+BC+SL+SR

6.0(front)

FL+FR+FLC+FRC+SL+SR

3.1.2

FL+FR+FC+LFE+TFL+TFR

hexagonal

FL+FR+FC+BL+BR+BC

6.1

FL+FR+FC+LFE+BC+SL+SR

6.1

FL+FR+FC+LFE+BL+BR+BC

6.1(front)

FL+FR+LFE+FLC+FRC+SL+SR

7.0

FL+FR+FC+BL+BR+SL+SR

7.0(front)

FL+FR+FC+FLC+FRC+SL+SR

7.1

FL+FR+FC+LFE+BL+BR+SL+SR

7.1(wide)

FL+FR+FC+LFE+BL+BR+FLC+FRC

7.1(wide-side)

FL+FR+FC+LFE+FLC+FRC+SL+SR

5.1.2

FL+FR+FC+LFE+BL+BR+TFL+TFR

octagonal

FL+FR+FC+BL+BR+BC+SL+SR

cube

FL+FR+BL+BR+TFL+TFR+TBL+TBR

5.1.4

FL+FR+FC+LFE+BL+BR+TFL+TFR+TBL+TBR

7.1.2

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR

7.1.4

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBL+TBR

7.2.3

FL+FR+FC+LFE+BL+BR+SL+SR+TFL+TFR+TBC+LFE2

9.1.4

FL+FR+FC+LFE+BL+BR+FLC+FRC+SL+SR+TFL+TFR+TBL+TBR

hexadecagonal

FL+FR+FC+BL+BR+BC+SL+SR+WL+WR+TBL+TBR+TBC+TFC+TFL+TFR

downmix

DL+DR

22.2

FL+FR+FC+LFE+BL+BR+FLC+FRC+BC+SL+SR+TC+TFL+TFC+TFR+TBL+TBC+TBR+LFE2+TSL+TSR+BFC+BFL+BFR

自定义通道布局可以指定为使用‘+’分隔的术语序列。每个术语可以是:

  • 单个通道的名称(例如‘FL’, ‘FR’, ‘FC’, ‘LFE’,等),每个术语可选地包含一个自定义名称,在‘@’之后,(例如‘FL@Left’, ‘FR@Right’, ‘FC@Center’, ‘LFE@Low_Frequency’,等)

标准通道布局可以通过以下方式指定:

  • 单个通道的名称(例如‘FL’, ‘FR’, ‘FC’, ‘LFE’,等。)
  • 标准通道布局的名称(例如‘mono’, ‘stereo’, ‘4.0’, ‘quad’, ‘5.0’,等。)
  • 以十进制表示的通道数量,后跟“c”,产生该数量通道的默认通道布局(见函数av_channel_layout_default)。注意不是所有的通道数目都有默认布局。
  • 以十进制表示的通道数量,后跟“C”,产生指定数量通道的未知通道布局。注意并非所有通道布局规格字符串支持未知通道布局。
  • 以十六进制表示的通道布局掩码,以“0x”开头(见AV_CH_*函数的宏定义libavutil/channel_layout.h.

在 libavutil 版本 53 之前,指定通道数量的尾字符“c”是可选的,但现在它是必需的,通道布局掩码也可以指定为十进制数字(如果且仅如果没有尾随的“c”或“C”)。

另请参阅函数av_channel_layout_from_stringlibavutil/channel_layout.h.

5 表达式评估

在评估算术表达式时,FFmpeg 使用内部公式评估器,通过libavutil/eval.h接口实现。

表达式可以包含一元、二元运算符、常数和函数。

两个表达式expr1expr2可以组合成另一个表达式“expr1;expr2". expr1expr2依次被评估,新表达式的结果等于expr2.

以下是可用的二元运算符:+, -, *, /, ^.

以下是可用的一元运算符:+, -.

一些内部变量可以用来存储和加载中间结果。它们可以通过ldst函数访问,索引参数从 0 到 9 变化,用于指定要访问的内部变量。

以下是可用的函数:

abs(x)

计算x.

acos(x)

计算x.

asin(x)

计算x.

atan(x)

计算x.

atan2(y, x)

计算y/x.

between(x, min, max)

如果x大于或等于min且小于或等于max则返回 1,否则返回 0。

bitand(x, y)
bitor(x, y)

计算按位操作xy.

评估xy的结果在执行按位操作前被转换为整数。

注意,转换为整数及转换回浮点数可能会丢失精度。对于大数(通常为2^53及以上),需要注意结果可能会出乎预料。

ceil(expr)

向上取整表达式expr的值到最接近的整数。例如,“ceil(1.5)”为“2.0”。

clip(x, min, max)

返回x的值,限定在minmax.

cos(x)

计算x.

cosh(x)

计算x.

eq(x, y)

如果xy相等则返回 1,否则返回 0。

exp(x)

计算x(以e为底的指数)。

floor(expr)

向下取整表达式expr的值到最接近的整数。例如,“floor(-1.5)”为“-2.0”。

gauss(x)

计算x的高斯函数,对应于exp(-x*x/2) / sqrt(2*PI).

gcd(x, y)

返回xy的最大公约数。如果xy均为 0 或者其中之一小于零则行为未定义。

gt(x, y)

如果x大于y则返回 1,否则返回 0。

gte(x, y)

如果x大于或等于y则返回 1,否则返回 0。

hypot(x, y)

此函数类似于 C 函数,同名;它返回“sqrt(x*x + y*y)”,表示长度为xy的直角三角形的斜边或点(x, y)到原点的距离。

if(x, y)

评估x,如果结果非零则返回y的评估结果,否则返回 0。

if(x, y, z)

评估x,如果结果非零则返回y的评估结果,否则返回z.

ifnot(x, y)

评估x,如果为零则返回y的评估结果,否则返回 0。

ifnot(x, y, z)

评估x,如果为零则返回y的评估结果,否则返回z.

isinf(x)

如果x是+/-INFINITY则返回 1.0,否则返回 0.0。

isnan(x)

如果x是 NAN 则返回 1.0,否则返回 0.0。

ld(idx)

加载索引为idx的内部变量的值,该值之前通过 st(idx, expr)存储。 函数返回加载的值。

lerp(x, y, z)

返回xy之间被z.

log(x)

计算x.

lt(x, y)

如果x小于y则返回 1,否则返回 0。

lte(x, y)

如果x小于或等于y则返回 1,否则返回 0。

max(x, y)

返回xy.

min(x, y)

返回xy.

mod(x, y)

计算x除以y.

not(expr)

如果expr为零则返回 1.0,否则返回 0.0。

pow(x, y)

计算x的幂y,等价于“(x)^(y)".

print(t)
print(t, l)

打印表达式t的值,并记录级别l。如果未指定l则使用默认日志级别。 返回打印的表达式的值。

random(idx)

返回一个介于 0.0 和 1.0 之间的伪随机值。idx是用于保存种子/状态的内部变量索引,可以通过之前存储st(idx).

为了初始化种子,需要将种子值作为 64 位无符号整数存储在索引idx.

的变量中。 例如,将种子值存储为42到索引为0的内部变量中并打印一些随机值:

st(0,42); print(random(0)); print(random(0)); print(random(0))
randomi(idx, min, max)

返回介于minmax. idx是用于保存种子/状态的内部变量索引,可以通过之前存储st(idx).

为了初始化种子,需要将种子值作为 64 位无符号整数存储在索引idx.

root(expr, max)

找到一个输入值,使得表达式expr对参数ld(0)在区间 0..max.

为 0。expr中的表达式必须表示一个连续函数否则结果是未定义。

ld(0)用来表示函数输入值,这意味着给定表达式将通过ld(0)多次评估不同的输入值。当表达式评估结果为 0 时,对应的输入值将被返回。

round(expr)

将表达式expr的值四舍五入到最近的整数。例如,“round(1.5)”为“2.0”。

sgn(x)

计算x.

sin(x)

计算x.

sinh(x)

计算x.

sqrt(expr)

计算表达式expr的平方根。等价于“(expr)^.5".

squish(x)

计算表达式1/(1 + exp(4*x)).

st(idx, expr)

将表达式expr的值存储在一个内部变量中。idx指定存储值的变量索引,范围为 0 到 9。 函数返回存储在内部变量中的值。

存储的值可以通过ld(var).

检索。 注意:当前表达式之间的变量不可共享。

tan(x)

计算x.

tanh(x)

计算x.

taylor(expr, x)
taylor(expr, x, idx)

在点x处评估表达式,给定一个表达式表示函数在 0 处的ld(idx)次导数。

当系列不收敛时结果未定义。

ld(idx)用于表示表达式中expr的导数阶数,这意味着给定表达式将通过ld(idx)多次评估不同的导数阶数。索引如果未指定,则假定为0。

注意,当您有y处的导数而不是0时,taylor(expr, x-y)可以使用。

time(0)

以秒为单位返回当前(时钟)时间。

trunc(expr)

将表达式的值四舍五入表达式向零的最近整数。例如,“trunc(-1.5)”为“-1.0”。

while(cond, expr)

计算表达式表达式而表达式条件为非零时,返回最后一个表达式的计算值,或如果条件始终为假,则返回NAN。

可用的常数如下:

PI

单位圆的面积,大约为3.14

E

自然对数的底数(欧拉数),大约为2.718

PHI

黄金比例(1+sqrt(5))/2,大约为1.618

假设表达式被视为“真”如果其非零值,注意以下几点:

*类似于AND

+类似于OR

例如以下结构:

if (A AND B) then C

等同于:

if(A*B, C)

在您的C代码中,您可以扩展一元和二元函数的列表,并定义识别的常量,以便为您的表达式提供服务。

评估器还识别国际单位制前缀。如果在前缀后添加‘i’,则使用二进制前缀,这基于1024的幂,而不是1000的幂。‘B’后缀将值乘以8,可以附加在单位前缀之后或单独使用。这使您能够使用例如'KB','MiB','G'和'B'作为数字后缀。

以下是可用的国际系统前缀列表,指示了对应的10和2的幂。

y

10^-24 / 2^-80

z

10^-21 / 2^-70

a

10^-18 / 2^-60

f

10^-15 / 2^-50

p

10^-12 / 2^-40

n

10^-9 / 2^-30

u

10^-6 / 2^-20

m

10^-3 / 2^-10

c

10^-2

d

10^-1

h

10^2

k

10^3 / 2^10

K

10^3 / 2^10

M

10^6 / 2^20

G

10^9 / 2^30

T

10^12 / 2^40

P

10^15 / 2^50

E

10^18 / 2^60

Z

10^21 / 2^70

Y

10^24 / 2^80

6 编解码器选项

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

有时,全局选项可能仅影响某种特定的编码器,并可能对另一个无意义或被忽略,因此您需要了解指定选项的意义。此外,一些选项仅用于解码或编码。

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

支持选项列表如下:

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

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

ab 整数 (编码,音频)

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

bt 整数 (编码,视频)

设置视频比特率容差(以比特/秒为单位)。在单次传输模式中,比特率容差指定了速率控制相较于目标平均比特率值的最大偏离程度。这与最小/最大比特率无关。过度降低容差会对质量产生不利影响。

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

设置通用标志。

可能的值:

mv4

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

qpel

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

loop

使用环路滤波器。

qscale

使用固定的质量刻度。

pass1

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

pass2

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

gray

仅解码/编码灰度。

psnr

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

truncated

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

drop_changed

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

ildct

使用隔行扫描DCT。

low_delay

强制低延迟。

global_header

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

bitexact

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

aic

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

ilme

应用交错运动估计。

cgop

使用闭合组(GOP)。

output_corrupt

输出甚至可能损坏的帧。

time_base 有理数

设置编解码器时间基准。

这是以秒为单位的时间的基本单元,帧时间戳是以此为基础表示的。对于固定FPS的内容,时间基准应该是1 / frame_rate时间戳增量应该完全为1。

g 整数 (编码,视频)

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

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

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

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

设置音频通道数量。

cutoff 整数 (编码,音频)

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

frame_size 整数 (编码,音频)

设置音频帧大小。

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

frame_number 整数

设置帧号。

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

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

qblur 浮点数 (编码,视频)

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

qmin 整数 (编码,视频)

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

qmax 整数 (编码,视频)

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

qdiff 整数 (编码,视频)

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

bf 整数 (编码,视频)

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

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

默认值为0。

b_qfactor 浮点数 (编码,视频)

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

codec_tag 整数
bug 标志 (解码,视频)

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

可能的值:

autodetect
xvid_ilace

Xvid隔行扫描错误(如果fourcc==XVIX,则自动检测)

ump4

(如果fourcc==UMP4,则自动检测)

no_padding

填充错误(自动检测)

amv
qpel_chroma
std_qpel

旧标准四分之一像素(根据fourcc/version自动检测)

qpel_chroma2
direct_blocksize

直接四分之一像素块大小错误(根据fourcc/version自动检测)

edge

边缘填充错误(根据fourcc/version自动检测)

hpel_chroma
dc_clip
ms

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

trunc

截断帧

strict 整数 (解码/编码,音频,视频)

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

可能的值:

very

严格符合较早的更严格的规范版本或参考软件

strict

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

normal
unofficial

允许非官方扩展

experimental

允许非标准的实验性内容,实验性(未完成/进行中/未经过充分测试)解码器和编码器。 注意:实验性解码器可能会构成安全风险,不要将其用于解码不受信任的输入。

b_qoffset 浮点数 (编码,视频)

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

err_detect 标志 (解码,音频,视频)

设置错误检测标志。

可能的值:

crccheck

验证嵌入的CRC

bitstream

检测比特流规范偏差

buffer

检测比特流长度不当

explode

在小错误检测时终止解码

ignore_err

忽略解码错误,继续解码。 如果您想分析视频的内容并因此希望无论如何解码所有内容,这会非常有用。在出现错误的情况下,此选项不会产生一个令人愉悦的视频观看体验。

careful

将违反规范的内容且未在实际中出现的情况视为错误

compliant

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

aggressive

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

has_b_frames 整数
block_align 整数
rc_override_count 整数
maxrate 整数 (编码,音频,视频)

设置最大比特率容忍度(以比特/秒为单位)。需要设置缓冲区大小。

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

设置最小比特率容忍度(以比特/秒为单位)。主要用于设置CBR编码,其他用途较少。

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

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

i_qfactor 浮点数 (编码,视频)

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

i_qoffset 浮点数 (编码,视频)

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

dct 整数 (编码,视频)

设置DCT算法。

可能的值:

auto

自动选择一个好的(默认)

fastint

快速整数

int

准确的整数

mmx
altivec
faan

浮点AAN DCT

lumi_mask 浮点数 (编码,视频)

更强烈地压缩亮区而不是中间区。

tcplx_mask 浮点数 (编码,视频)

设置时间复杂性掩膜。

scplx_mask 浮点数 (编码,视频)

设置空间复杂性掩膜。

p_mask 浮点数 (编码,视频)

设置交互掩膜。

dark_mask 浮点数 (编码,视频)

更强烈地压缩暗区而不是中间区。

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

选择IDCT实现。

可能的值:

auto
int
simple
simplemmx
simpleauto

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

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点AAN IDCT

slice_count 整数
ec 标志 (解码,视频)

设置错误隐藏策略。

可能的值:

guess_mvs

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

deblock

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

favor_inter

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

bits_per_coded_sample 整数
aspect 有理数 (编码,视频)

设置样本纵横比。

sar 有理数 (编码,视频)

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

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

打印特定调试信息。

可能的值:

pict

图片信息

rc

速率控制

bitstream
mb_type

宏块(MB)类型

qp

每块量化参数(QP)

dct_coeff
green_metadata

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

skip
startcode
er

错误识别

mmco

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

bugs
buffers

图片缓冲区分配

thread_ops

线程操作

nomc

跳过运动补偿

cmp 整数 (编码,视频)

设置全像素运动估计算法。

可能的值:

sad

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

sse

平方误差之和

satd

绝对Hadamard变换差异之和

dct

绝对DCT变换差异之和

psnr

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

bit

块所需的位数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差异之和

vsse

平方垂直差异之和

nsse

噪声保持的平方差异之和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

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

设置子像素运动估计算法。

可能的值:

sad

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

sse

平方误差之和

satd

绝对Hadamard变换差异之和

dct

绝对DCT变换差异之和

psnr

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

bit

块所需的位数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差异之和

vsse

平方垂直差异之和

nsse

噪声保持的平方差异之和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

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

设置宏块比较函数。

可能的值:

sad

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

sse

平方误差之和

satd

绝对Hadamard变换差异之和

dct

绝对DCT变换差异之和

psnr

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

bit

块所需的位数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差异之和

vsse

平方垂直差异之和

nsse

噪声保持的平方差异之和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

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

设置隔行扫描DCT比较函数。

可能的值:

sad

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

sse

平方误差之和

satd

绝对Hadamard变换差值之和

dct

绝对DCT变换差值之和

psnr

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

bit

块所需的比特数

rd

率失真优化,慢

zero

0

vsad

绝对垂直差值之和

vsse

平方垂直差值之和

nsse

噪声保留平方差值之和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

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

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

(1024, INT_MAX)

全运动估计(最慢)

(768, 1024]

UMH运动估计

(512, 768]

六边形运动估计

(256, 512]

L2S菱形运动估计

[2,256]

变量菱形运动估计

(-1, 2)

小菱形运动估计

-1

有趣的菱形运动估计

(INT_MIN, -1)

SAB菱形运动估计

last_pred 整数 (编码,视频)

设置上一帧中的运动预测器数量。

precmp 整数 (编码,视频)

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

可能的值:

sad

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

sse

平方误差之和

satd

绝对Hadamard变换差值之和

dct

绝对DCT变换差值之和

psnr

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

bit

块所需的比特数

rd

率失真优化,慢

zero

0

vsad

绝对垂直差值之和

vsse

平方垂直差值之和

nsse

噪声保留平方差值之和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

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

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

subq 整数 (编码,视频)

设置子像素运动估计质量。

me_range 整数 (编码,视频)

设置运动向量范围限制(DivX播放器为1023)。

global_quality 整数 (编码,音频,视频)
slice_flags 整数
mbd 整数 (编码,视频)

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

可能的值:

simple

使用mbcmp(默认)

bits

使用最少的比特

rd

使用最佳率失真

rc_init_occupancy 整数 (编码,视频)

设置解码之前应该加载到速率控制缓冲区中的比特数。

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

可能的值:

fast

允许非标准兼容的加速技巧。

noout

跳过比特流编码。

ignorecrop

忽略来自SPS的裁剪信息。

local_header

将全局头放在每个关键帧而不是附加数据中。

chunks

帧数据可能分为多个块。

showall

显示所有帧,直到第一个关键帧之前。

export_mvs

将运动向量导出到帧侧数据(参见AV_FRAME_DATA_MOTION_VECTORS)适用于支持它的编解码器。另请参见doc/examples/export_mvs.c.

skip_manual

不要跳过样本,同时将跳过信息作为帧侧数据导出。

ass_ro_flush_noop

清空时不重置ASS ReadOrder字段。

icc_profiles

从颜色计量标签生成/解析嵌入的ICC配置文件。

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

可能的值:

mvs

将运动向量导出到帧侧数据(参见AV_FRAME_DATA_MOTION_VECTORS)适用于支持它的编解码器。另请参见doc/examples/export_mvs.c.

prft

将编码器生产者参考时间导出到包侧数据(参见AV_PKT_DATA_PRFT)适用于支持它的编解码器。

venc_params

通过帧侧数据导出视频编码参数(参见AV_FRAME_DATA_VIDEO_ENC_PARAMS)适用于支持它的编解码器。目前这些为H.264和VP9。

film_grain

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

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

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

可能的值:

auto, 0

自动选择设置线程数

默认值为‘auto’.

dc 整数 (编码,视频)

设置intra_dc_precision。

nssew 整数 (编码,视频)

设置nsse权重。

skip_top 整数 (解码,视频)

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

skip_bottom 整数 (解码,视频)

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

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

设置编码器编解码器配置文件。默认值为‘unknown’。有关特定编码器配置文件的文档,请参阅相关编码器文档。

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

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

可能的值:

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

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

mblmin 整数 (编码,视频)

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

mblmax 整数 (编码,视频)

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

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

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

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

可能的值:

none

不丢弃任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向预测帧。

nokey

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

nointra

丢弃除I帧外的所有帧。

all

丢弃所有帧。

默认值为‘default’.

bidir_refine 整数 (编码,视频)

优化用于双向宏块的两组运动向量。

keyint_min 整数 (编码,视频)

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

refs 整数 (编码,视频)

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

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

设置率失真优化量化。

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

参见(ffmpeg-utils)ffmpeg-utils(1)手册中的频道布局部分以获取所需的语法。

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

可能的值:

bt709

BT.709

bt470m

BT.470 M

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

film

电影

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

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

可能的值:

bt709

BT.709

gamma22

BT.470 M

gamma28

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

linear

线性

log
log100

对数

log_sqrt
log316

对数平方根

iec61966_2_4
iec61966-2-4

IEC 61966-2-4

bt1361
bt1361e

BT.1361

iec61966_2_1
iec61966-2-1

IEC 61966-2-1

bt2020_10
bt2020_10bit

BT.2020 - 10位

bt2020_12
bt2020_12bit

BT.2020 - 12位

smpte2084

SMPTE ST 2084

smpte428
smpte428_1

SMPTE ST 428-1

arib-std-b67

ARIB STD-B67

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

可能的值:

rgb

RGB

bt709

BT.709

fcc

FCC

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

ycocg

YCOCG

bt2020nc
bt2020_ncl

BT.2020 非线性

bt2020c
bt2020_cl

BT.2020 线性

smpte2085

SMPTE 2085

chroma-derived-nc

由色度导出的非线性

chroma-derived-c

由色度导出的线性

ictcp

ICtCp

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

如果用作输入参数,则作为解码器的提示,输入具有哪个颜色范围。 可能的值:

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

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

可能的值:

left
center
topleft
top
bottomleft
bottom
log_level_offset 整数

设置日志级别偏移。

slices 整数 (编码,视频)

切片数量,用于并行编码。

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

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

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

可能的值:

slice

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

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

frame

一次解码多个帧。

默认值为‘slice+frame’.

audio_service_type 整数 (编码,音频)

设置音频服务类型。

可能的值:

ma

主要音频服务

ef

效果

vi

视觉障碍

hi

听力障碍

di

对话

co

评论

em

紧急

vo

语音覆盖

ka

卡拉OK

request_sample_fmt sample_fmt (解码,音频)

设置音频解码器应优先考虑的采样格式。默认值为none.

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

设置输入字幕字符编码。

field_order field_order (视频)

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

progressive

渐进视频

tt

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

bb

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

tb

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

bt

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

skip_alpha 布尔值 (解码,视频)

设置为1以禁用透明度(alpha)处理。这类似于gray选项,它跳过色度信息而不是透明度。默认值为0。flags option which skips chroma information instead of alpha. Default is 0.

codec_whitelist 列表 (输入)

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

dump_separator 字符串 (输入)

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

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

每个图像的最大像素值。该值可用于避免因大型图像导致的内存不足问题。

apply_cropping 布尔值 (解码,视频)

如果裁剪参数满足左边和顶部参数所需的对齐要求,则启用裁剪。如果未满足对齐要求,则裁剪将部分应用以保持对齐。 默认值为1(启用)。 注意:所需的对齐取决于AV_CODEC_FLAG_UNALIGNED设置以及CPU。AV_CODEC_FLAG_UNALIGNED不能从命令行更改。此外,硬件解码器将不应用左/顶部裁剪。

7 解码器

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

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

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

工具的选项将显示启用的解码器列表。-decoders of the ff* tools will display the list of enabled decoders.

8视频解码器

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

8.1 AV1

AOMedia视频1(AV1)解码器。

8.1.1 选项

operating_point

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

8.2 HEVC

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

解码器支持最多两个视图的MV-HEVC多视流。通过向解码器提供视图ID列表选择输出的视图(view_ids选项)。可以在解码器初始化前静态设置此选项,也可以通过get_format()回调进行动态设置,这对视图数量或ID在解码期间发生动态变化的情况非常有用。

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

注意,如果您使用ffmpegCLI工具,您应该使用其手册中记录的视图说明,而不是这里记录的选项。

8.2.1 选项

view_ids (MV-HEVC)

指定应输出的视图ID列表。此选项也可以设置为'−1',这将导致解码和输出VPS中定义的所有视图。

view_ids_available (MV-HEVC)

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

当从get_format()回调读取时,此选项的值保证准确。它也可以在其他时候设置(例如打开解码器后),但该值仅供信息使用,并可能不准确(例如,当流包含多个不同的VPS NAL单元时)。

view_pos_available (MV-HEVC)

调用者可以通过读取此选项检索在活动VPS中可用的视图位置(左、右或未指定),它们为AVStereo3DView值。当数组可用时,它的元素适用于view_ids_available的对应元素,例如view_pos_available[i]包含ID为view_ids_available[i].

视图的位置。view_ids_available的限制相同。

8.3 原始视频

原始视频解码器。

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

8.3.1 选项

top top_field_first

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

-1

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

0

假定为底场优先

1

假定为顶场优先

8.4 libdav1d

dav1d AV1 解码器。

libdav1d允许libavcodec解码AOMedia Video 1 (AV1)编解码器。 需要在配置期间提供libdav1d头文件和库。 您需要明确配置构建方式为--enable-libdav1d.

8.4.1 选项

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

framethreads

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

tilethreads

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

max_frame_delay

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

filmgrain

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

oppoint

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

alllayers

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

8.5 libdavs2

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

此解码器允许libavcodec通过davs2库解码AVS2流。

8.6 libuavs3d

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

libuavs3d允许libavcodec解码AVS3流。 需要在配置期间提供libuavs3d头文件和库。 您需要明确配置构建方式为--enable-libuavs3d.

8.6.1 选项

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

frame_threads

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

8.7 libxevd

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

此解码器需要在配置期间提供libxevd头文件和库。 您需要明确配置构建方式为--enable-libxevd.

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

8.7.1 选项

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

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

threads (threads)

强制使用特定数量的线程

8.8 QSV解码器

英特尔快速同步视频解码器家族(VC1, MPEG-2, H.264, HEVC, JPEG/MJPEG, VP8, VP9, AV1, VVC)。

8.8.1 通用选项

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

async_depth

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

gpu_copy

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

default
on
off

8.8.2 HEVC选项

hevc_qsv的额外选项。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

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

8.9 v210

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

8.9.1 选项

custom_stride

设置v210数据的行大小(以字节为单位)。默认值为0(自动检测)。您可以使用特殊值-1来处理在BOXX文件中看到的无步幅的v210数据。

9 音频解码器

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

9.1 ac3

AC-3音频解码器。

此解码器实现了ATSC A/52:2010和ETSI TS 102 366的一部分,以及未公开记录的RealAudio 3 (也称为dnet)。

9.1.1 AC-3解码器选项

-drc_scale

动态范围缩放系数。从AC-3流中应用动态范围值的缩放因子。此因子是以指数方式应用的。默认值为1。 以下是3个重要的缩放系数范围:

drc_scale == 0

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

0 < drc_scale <= 1

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

drc_scale > 1

启用DRC。异步应用drc_scale。 响亮声音完全压缩。柔和声音增强。

9.2 flac

FLAC音频解码器。

此解码器旨在实现Xiph的完整FLAC规范。

9.2.1 FLAC解码器选项

-use_buggy_lpc

lavc FLAC编码器曾使用高lpc值(如默认值)生成有问题的流。 该选项使得可以通过使用lavc的旧有问题lpc逻辑来解码此类流。

9.3 ffwavesynth

内部波形合成器。

此解码器根据预定义序列生成波形模式。其使用纯粹为内部用途,接受的数据格式未公开记录。

9.4 libcelt

libcelt解码器包装器。

libcelt允许libavcodec解码Xiph CELT超低延迟音频编解码器。 需要在配置期间提供libcelt头文件和库。 您需要明确配置构建方式为--enable-libcelt.

9.5 libgsm

libgsm解码器包装器。

libgsm允许libavcodec解码GSM全速率音频编解码器。 需要在配置期间提供libgsm头文件和库。 您需要明确配置构建方式为--enable-libgsm.

该解码器支持普通GSM和Microsoft变体。

9.6 libilbc

libilbc解码器包装器。

libilbc允许libavcodec解码因特网低比特率编解码器(iLBC)音频编解码器。 需要在配置期间提供libilbc头文件和库。 您需要明确配置构建方式为--enable-libilbc.

9.6.1 选项

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

enhance

启用解码音频增强功能时设置为1。默认值为0(禁用)。

9.7 libopencore-amrnb

libopencore-amrnb解码器包装器。

libopencore-amrnb允许libavcodec解码自适应多速率窄带音频编解码器。 使用它需要在配置期间提供libopencore-amrnb头文件和库。 您需要明确配置构建方式为--enable-libopencore-amrnb.

FFmpeg本机AMR-NB解码器已存在,所以用户可以无需该库解码AMR-NB。

9.8 libopencore-amrwb

libopencore-amrwb解码器包装器。

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

FFmpeg本机AMR-WB解码器已存在,所以用户可以无需该库解码AMR-WB。

9.9 libopus

libopus解码器包装器。

libopus允许libavcodec解码Opus交互式音频编解码器。 需要在配置期间提供libopus头文件和库。 您需要明确配置构建方式为--enable-libopus.

FFmpeg本机Opus解码器已存在,所以用户可以无需该库解码Opus。

10 字幕解码器

10.1 libaribb24

ARIB STD-B24字幕解码器。

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

10.1.1 libaribb24解码器选项

-aribb24-base-path 路径

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

默认情况下未设置。

-aribb24-skip-ruby-text 布尔值

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

默认情况下启用。

10.2 libaribcaption

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

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

需要在配置期间提供libaribcaption头文件和库 (https://github.com/xqq/libaribcaption)。 您需要明确配置构建方式为--enable-libaribcaption。 如果同时启用了libaribb24libaribcaption,则优先使用libaribcaption解码器。

10.2.1 libaribcaption解码器选项

-sub_type 字幕类型

指定解码字幕的格式。

bitmap

图像格式字幕。

ass

ASS格式的文本。

text

无格式的简单文本输出。

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

-caption_encoding 编码方案

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

auto

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

jis

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

utf8

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

latin

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

-font font_name[,font_name2,...]

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

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

-ass_single_rect 布尔值

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

默认值为false.

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

-force_outline_text 布尔值

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

默认值为false.

-outline_width 数字 (0.0 - 3.0)

指定轮廓文本的宽度(点数,相对值)。

默认值为1.5.

-ignore_background 布尔值

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

默认值为false.

-ignore_ruby 布尔值

指定是否忽略对类似注音文字(furigana)字符的渲染。

默认值为false.

-replace_drcs 布尔值

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

默认值为true.

-replace_msz_ascii 布尔值

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

默认值为true.

-replace_msz_japanese 布尔值

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

默认值为true.

-replace_msz_glyph 布尔值

指定是否将支持的字体的MSZ(中宽;半宽)字符替换为半宽字形。 此选项在支持Adobe-Japan1字体的FreeType或DirectWrite渲染器上有效。 例如IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、 游明朝(Yu Mincho)和微软雅黑(Meiryo)。

默认值为true.

-canvas_size 图像大小

指定用于渲染字幕的画布分辨率;通常应与输入视频的帧大小一致。 这仅适用于-subtitle_type被设置为位图.

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

  1. PROFILE_A : 1440 x 1080,纵横比(SAR/PAR)为 4:3
  2. PROFILE_C : 320 x 180,纵横比(SAR/PAR)为 1:1

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

请注意-canvas_size选项对于尺寸不同但纵横比相同的视频来说并不是必需的。 在这种情况下,如果未指定-canvas_size选项,字幕将会被拉伸或缩放以适应实际视频大小。 如果-canvas_size选项被指定了不同的大小, 字幕将按指定的大小被拉伸或缩放,并计算出新的纵横比(SAR)。

10.2.2 libaribcaption 解码器使用示例

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

ffplay -sub_type bitmap MPEG.TS

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

ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS

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

ffmpeg -sub_type bitmap -i src.m2t -filter_complex "[0:v][0:s]overlay" -vcodec h264 dest.mp4

10.3 DVB 字幕

10.3.1 选项

compute_clut
-2

如果流中没有匹配的 CLUT,则计算一次 CLUT。

-1

如果流中没有匹配的 CLUT,则计算 CLUT。

0

从不计算 CLUT

1

始终计算 CLUT,并覆盖流中提供的 CLUT。

dvb_substream

选择 dvb 子流,如果为 -1,则默认选择所有子流。

10.4 DVD 字幕

该解码器解码用于 DVD 的位图字幕;相同的字幕也可以在 VobSub 文件对和一些 Matroska 文件中找到。

10.4.1 选项

palette

指定位图使用的全局调色板。当存储在 VobSub 中时,调色板通常在索引文件中指定;在 Matroska 中,调色板以与 VobSub 相同的格式存储在编解码器额外数据中。在 DVD 中,调色板存储在 IFO 文件中,因此在从转储的 VOB 文件中读取时无法获得。

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

ifo_palette

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

forced_subs_only

仅解码标记为强制的字幕条目。一些标题的同一轨道中具有强制和非强制字幕。设置此标志为1则仅保留强制字幕。默认值为0.

10.5 libzvbi-teletext

Libzvbi 允许 libavcodec 解码 DVB 文本页面和 DVB 文本字幕。在配置期间需要 libzvbi 头文件和库的存在。您需要通过--enable-libzvbi.

明确配置构建。

txt_page

解码特定文本页码的列表。不匹配的页面将被丢弃。您可以使用特殊字符串*匹配所有页面, 或者subtitle匹配所有字幕页面。 默认值为 *。

txt_default_region

设置解码时的默认字符集,值在 0 到 87 之间(参见 ETS 300 706,第 15 节,表 32)。默认值为 -1,不会覆盖 libzvbi 的默认值。 此选项仅在某些旧的 1.0 级别传输中需要,因为它们无法指示正确的字符集。

txt_chop_top

弃用顶部文本行。默认值为 1。

txt_format

指定解码字幕的格式。

bitmap

默认格式,您应该使用此格式用于文本页面, 因为某些图形和颜色无法用简单的文本或甚至 ASS 表示。

text

基于纯文本的输出,无格式化。

ass

格式化的 ASS 输出,字幕页面和文本页面以不同风格返回,字幕页面被简化为文本,但会努力保持文本对齐和格式。

txt_left

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

txt_top

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

txt_chop_spaces

修剪生成文本的前后空格并移除空行。此选项对基于文本的字幕非常有用,这些字幕通常在行首或行尾有空格,或者因双倍大小的文本字符而存在空行。默认值为 1。

txt_duration

设置解码对应页面或字幕的显示时间(毫秒)。默认值为 -1,表示无限或直到下一个字幕事件到来。

txt_transparent

强制生成的文本位图具有透明背景。默认值为 0,表示不透明背景。

txt_opacity

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

11 比特流过滤器

当您配置 FFmpeg 的构建时,所有支持的比特流过滤器默认都是启用的。您可以使用配置选项列出所有可用的过滤器。--list-bsfs.

您可以通过使用配置选项禁用所有比特流过滤器,--disable-bsfs并使用选项 有选择地启用任何比特流过滤器,--enable-bsf=BSF或者可以使用选项 禁用特定的比特流过滤器。--disable-bsf=BSF.

选项-bsfsof ff* 工具将显示 构建中包括的所有支持的比特流过滤器的列表。

ff* 工具有一个 -bsf 选项,按流应用,接受以逗号分隔的过滤器列表,其参数跟过滤器名称用 "=" 分隔。

ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT

以下是当前可用比特流过滤器的说明, 以及它们的参数(如果有)。

11.1 aac_adtstoasc

将 MPEG-2/4 AAC ADTS 转换为 MPEG-4 音频特定配置比特流。

此过滤器从 MPEG-2/4 ADTS 头中创建 MPEG-4 AudioSpecificConfig,并移除 ADTS 头。

例如,将 AAC 流从原始 ADTS AAC 或 MPEG-TS 容器复制到 MP4A-LATM、FLV 文件或 MOV/MP4 文件(及相关格式如 3GP 或 M4A)时需要使用此过滤器。请注意,对于 MP4A-LATM 和 MOV/MP4 及相关格式,它会自动插入。

11.2 av1_metadata

修改嵌入在 AV1 流中的元数据。

td

在流的所有时间单元中插入或移除时间分隔符 OBU。

insert

在每个没有时间分隔符的时间单元前插入 TD。

remove

从每个有时间分隔符的时间单元中移除 TD。

color_primaries
transfer_characteristics
matrix_coefficients

设置流中的颜色描述字段(见 AV1 第 6.4.2 节)。

color_range

设置流中的颜色范围(见 AV1 第 6.4.2 节;注意,对于使用 BT.709 原色、sRGB 传递特性和 Identity(RGB)矩阵系数的流无法设置此值)。

tv

有限范围。

pc

完整范围。

chroma_sample_position

设置流中的色度样本位置(见 AV1 第 6.4.2 节)。 仅适用于 4:2:0 流。

vertical

左位置(与 MPEG-2 和 H.264 的默认位置一致)。

colocated

左上位置。

tick_rate

设置标记速率(time_scale / num_units_in_display_tick), 位于序列头部的计时信息中。

num_ticks_per_picture

设置每帧的标记数,以表明流具有固定帧率。 如果未设置tick_rate则忽略。

delete_padding

删除填充 OBU。

11.3 chomp

移除数据包末尾的零填充。

11.4 dca_core

从 DCA/DTS 流中提取核心,移除扩展如 DTS-HD。

11.5 dovi_rpu

处理 HEVC/AV1 比特流中的 Dolby Vision 元数据,支持元数据压缩。

strip

如果启用,从流中移除所有 Dolby Vision 元数据(配置记录 + RPU 数据块)。

compression

设置启用的压缩级别。

none

无元数据压缩。

limited

有限的元数据压缩方案,应与大多数设备兼容。 这是默认设置。

extended

扩展的元数据压缩。设备无需支持此功能。 注意,目前此级别在 libavcodec 中表现与“limited”相同。

11.6 dump_extra

将额外数据添加到过滤数据包的开头, 除非这些数据包的开头已经完全匹配需要添加的额外数据。

freq

附加参数指定应该过滤哪些数据包。 接受的值包括:

k
keyframe

将额外数据添加到所有关键包。

e
all

将额外数据添加到所有数据包。

如果未指定,则默认值为“k’.

例如,以下ffmpeg命令强制 H.264 数据包中的全局头(因此禁用单独的数据包头), 但通过为关键包添加存储在额外数据中的头进行修正:libx264 encoder, but corrects them by adding the header stored in extradata to the key packets:

ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts

11.7 dv_error_marker

DV 中标记为损坏的块将被替换为指定颜色的块。

color

用于替换损坏块的颜色。

sta

一个 16 位掩码,指定 16 个可能的错误状态值中哪些值会被颜色块替换。默认值为 0xFFFE, 表示替换所有非 0 错误状态值。

ok

无错误,无隐藏

err

错误,无隐藏

res

保留项

notok

错误或隐藏

notres

非保留项

Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru

具体的错误状态代码

详见第 44-46 页或第 5.5 节http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf

11.8 eac3_core

从 E-AC-3 流中提取核心,移除额外通道。

11.9 extract_extradata

提取内嵌额外数据。

某些编解码器允许长期头部(例如 MPEG-2 序列头, 或者 H.264/HEVC(VPS/SPS/PPS))以“内嵌”(即作为包含编码帧的数据流的一部分)或“外部”(例如在容器级别)形式传输。在 FFmpeg 术语中,这后一种形式称为“额外数据”。

此比特流过滤器检测内嵌头部,并使其可作为额外数据使用。

remove

启用此选项后,长期头部在提取后将从比特流中移除。

11.10 filter_units

从流中移除具有特定类型的单元。

pass_types

透过的单元类型或单元类型范围列表, 移除所有其他单元。此选项值为由“|”分隔的单元类型值或使用“-”的单元范围。

remove_types

pass_types类似, 但指定的类型组中的单元将被移除,其他单元将被保留。

pass_types 和 remove_types 所使用的类型对应于 H.264、HEVC 和 H.266 中的 NAL 单元类型(参见 H.264 和 HEVC 规范中的表 7-1 或 H.266 规范中的表 5)、JPEG 的标记值(不带 0xFF 前缀)以及没有前缀的 MPEG-2 起始码(即 0x000001 后的字节)。 对于 VP8 和 VP9,每个单元的类型均为零。

这种转换不会影响额外数据,但请注意,如果流包含内联参数集, 删除后可能会使输出无法使用。

例如,对 H.264 流移除所有非 VCL 单元:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT

对 H.265 流移除所有 AUD、SEI 和填充数据:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT

对 MPEG-2 流移除所有用户数据,包括隐藏字幕:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT

对 H264 流移除所有和隐藏字幕相关的 SEI:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT

对 HEVC 流移除所有前缀和后缀 SEI 包括隐藏字幕和动态 HDR 字幕标签:

ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT

11.11 hapqa_extract

提取 HAPQA 文件的 Rgb 或 Alpha 部分,无需重新压缩,以创建 HAPQ 或 HAPAlphaOnly 文件。

texture

指定要保留的纹理。

color
alpha

将 HAPQA 转换为 HAPQ

ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov

将 HAPQA 转换为 HAPAlphaOnly

ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov

11.12 h264_metadata

修改嵌入在 H.264 流中的元数据。

aud

在流的所有存取单元中插入或移除 AUD NAL 单元。

pass
insert
remove

默认是通过。

sample_aspect_ratio

在 VUI 参数中设置流的采样纵横比。 参见 H.264 表 E-1。

overscan_appropriate_flag

设置流是否适用于使用过扫描的显示(参见 H.264 第 E.2.1 节)。

video_format
video_full_range_flag

设置流中的视频格式(参见 H.264 第 E.2.1 节和表 E-2)。

colour_primaries
transfer_characteristics
matrix_coefficients

设置流中的颜色描述(参见 H.264 第 E.2.1 节和表 E-3、E-4 和 E-5)。

chroma_sample_loc_type

设置流中的色度采样位置(参见 H.264 第 E.2.1 节和图 E-1)。

tick_rate

在 VUI 参数中设置 tick 率(time_scale / num_units_in_tick)。这是流中可表示的最小时间单位,在许多情况下表示流的场率(帧率的两倍)。

fixed_frame_rate_flag

设置流是否具有固定帧率——通常这意味着帧率恰好是 tick 率的一半,但具体含义依赖于交错和图像结构(参见 H.264 第 E.2.1 节和表 E-6)。

zero_new_constraint_set_flags

在 SPS 中将 constraint_set4_flag 和 constraint_set5_flag 置零。这些位在 H.264 规格的先前版本中被保留,因此某些硬件解码器需要它们为零。将这些位置零的结果仍然是合法的位流。

crop_left
crop_right
crop_top
crop_bottom

在 SPS 中设置帧裁剪偏移。这些值将替换当前值(如果流已经被裁剪)。

这些字段以像素为单位设置。请注意,如果色度被次采样或流是隔行扫描的,某些尺寸可能无法表示(参见 H.264 第 7.4.2.1.1 节)。

sei_user_data

以字符串形式插入 SEI 非注册用户数据。参数必须采用以下格式UUID+字符串,其中 UUID 为可能由连字符分隔的十六进制数字,字符串可以是任意内容。

例如,‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’ 将插入与给定 UUID 关联的字符串“hello”。

delete_filler

删除填充 NAL 单元和填充 SEI 消息。

display_orientation

插入、提取或移除显示方向 SEI 消息。 参见 H.264 第 D.1.27 和 D.2.27 节了解语法和语义。

pass
insert
remove
extract

默认是通过。

插入模式与rotateflip选项结合使用。 任何现有的显示方向消息将在插入或移除模式中被移除。 提取模式会将显示矩阵附加为数据包的侧数据。

rotate

在显示方向 SEI 中设置旋转(逆时针角度,以度为单位)。范围为 -360 到 +360,默认值为 NaN。

flip

在显示方向 SEI 中设置翻转。

horizontal
vertical

默认值未设置。

level

在 SPS 中设置级别。有关详情,请参见 H.264 第 A.3 节和表 A-1 到 A-5。

参数必须是一个级别名称(例如,‘4.2’)、一个 level_idc 值(例如,‘42’),或特殊名称‘auto’,表示过滤器应尝试根据输入流属性推测级别。

11.13 h264_mp4toannexb

将 H.264 位流从长度前缀模式转换为起始码前缀模式(如 ITU-T H.264 规范的附录 B 中定义)。

某些流媒体格式需要此操作,通常是 MPEG-2 传输流格式(复用器mpegts).

例如,要使用ffmpeg将包含 H.264 流的 MP4 文件重新复用为 mpegts 格式,可以使用以下命令:

ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts

请注意,此过滤器会自动插入用于 MPEG-TS(复用器mpegts)与原始 H.264(复用器h264)输出格式。

11.14 h264_redundant_pps

对某些 Blu-ray 流应用特定的修正,这些流包含修订不相关参数的冗余 PPS,会干扰需要正确额外数据的其他转换操作。

11.15 hevc_metadata

修改嵌入在 HEVC 流中的元数据。

aud

在流的所有可访问单元中插入或删除 AUD NAL 单元。

insert
remove
sample_aspect_ratio

在 VUI 参数中设置流的采样纵横比。

video_format
video_full_range_flag

设置流中的视频格式(参见 H.265 第 E.3.1 节和表 E-2)。

colour_primaries
transfer_characteristics
matrix_coefficients

设置流中的颜色描述(参见 H.265 第 E.3.1 节和表 E-3、E-4 和 E-5)。

chroma_sample_loc_type

设置流中的色度采样位置(参见 H.265 第 E.3.1 节和图 E.1)。

tick_rate

在 VPS 和 VUI 参数中设置 tick 率(time_scale / num_units_in_tick)。与num_ticks_poc_diff_one结合,可以在流中设置恒定帧率。请注意,当流在容器中时,这可能会被容器参数覆盖。

num_ticks_poc_diff_one

在 VPS 和 VUI 中设置 poc_proportional_to_timing_flag,并使用此值设置 num_ticks_poc_diff_one_minus1(参见 H.265 第 7.4.3.1 和 E.3.1 节)。如果tick_rate未设置,则会忽略。

crop_left
crop_right
crop_top
crop_bottom

在 SPS 中设置一致性窗口裁剪偏移。这些值将替换当前值(如果流已经裁剪)。

这些字段以像素为单位设置。请注意,如果色度被次采样(H.265 第 7.4.3.2.1 节),某些尺寸可能无法表示。

width
height

裁剪后设置宽度和高度。

level

在 VPS 和 SPS 中设置级别。参见 H.265 第 A.4 节和表 A.6 和 A.7。

参数必须是一个级别名称(例如,‘5.1’)、一个general_level_idc值(例如,‘153’表示级别 5.1),或特殊名称‘auto’,表示过滤器应尝试根据输入流属性推测级别。

11.16 hevc_mp4toannexb

将 HEVC/H.265 位流从长度前缀模式转换为起始码前缀模式(如 ITU-T H.265 规范的附录 B 中定义)。

某些流媒体格式需要此操作,通常是 MPEG-2 传输流格式(复用器mpegts).

例如,要将包含 HEVC 流的 MP4 文件重新复用为 mpegts 格式,可以使用ffmpeg命令:

ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts

请注意,此过滤器会自动插入用于 MPEG-TS(复用器mpegts)和原始 HEVC/H.265(复用器h265hevc)输出格式。

11.17 imxdump

修改比特流以适应 MOV 并使其可由 Final Cut Pro 解码器使用。此过滤器仅适用于mpeg2video 编解码器,并且对于 Final Cut Pro 7 及更高版本可能不需要-tag:v.

例如,将每秒 30 MB 的 NTSC IMX 重新复用为 MOV:

ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov

11.18 mjpeg2jpeg

将 MJPEG/AVI1 数据包转换为完整的 JPEG/JFIF 数据包。

MJPEG 是一种视频编解码器,其中每帧视频基本上是一个 JPEG 图像。可以无损地提取单个帧,例如通过

ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg

不幸的是,这些块是不完整的 JPEG 图像,因为它们缺少解码所需的 DHT 段。引用自http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:

Avery Lee 在 2001 年的 rec.video.desktop 新闻组中写道:“MJPEG,或者至少是 AVI 中带有 MJPG fourcc 的 MJPEG,是一种有限的——并且*省略了*——霍夫曼表的 JPEG。JPEG 必须是 YCbCr 颜色空间,必须是 4:2:2,并且必须使用基本霍夫曼编码,而不是算术或渐进式编码……确实可以提取 MJPEG 帧并使用常规 JPEG 解码器解码它们,但必须在它们前面添加 DHT 段,否则解码器将无法知道如何解压缩数据。所需的具体表格在 OpenDML 规范中有说明。”

此比特流过滤器修补从 MJPEG 流中提取的帧的头,使其成为完整合格的 JPEG 图像(携带 AVI1 头 ID 并缺少 DHT 段)。

ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi

11.19 mjpegadump

向比特流添加一个 MJPEG A 头,以便 QuickTime 解码。

11.20 mov2textsub

从 MOV 字幕中提取一个可表示的文本文件,去除每个字幕包中的元数据头。

另见text2movsub过滤器。

11.21 mpeg2_metadata

修改嵌入在 MPEG-2 流中的元数据。

display_aspect_ratio

设置流中的显示纵横比。

支持以下固定值:

4/3
16/9
221/100

任何其他值将表示为正方形像素(参见 H.262 第 6.3.3 节和表 6-3)。

frame_rate

设置流中的帧率。这是由已知值的表结合一个小的乘法器和除数构成的——如果提供的值不能完全表示,则使用最接近的可表示值(参见 H.262 第 6.3.3 节和表 6-4)。

video_format

设置流中的视频格式(参见 H.262 第 6.3.6 节和表 6-6)。

colour_primaries
transfer_characteristics
matrix_coefficients

设置流中的颜色描述(参见 H.262 第 6.3.6 节和表 6-7、6-8 和 6-9)。

11.22 mpeg4_unpack_bframes

解压 DivX 风格的封装 B 帧。

DivX 风格的封装 B 帧不是有效的 MPEG-4,仅是对 Video for Windows 子系统问题的权宜之计。 它们使用更多空间,可能导致轻微的音视频同步问题,需要更多的 CPU 解码能力(除非播放器有一些解码后的图片队列以弥补 2,0,2,0 每包帧的风格),并且如果复制到一个像 mp4 或 mpeg-ps/ts 这样的标准容器中,会导致问题,因为 MPEG-4 解码器可能无法解码它们,因为它们不是合法的 MPEG-4。

例如,为了使用ffmpeg修复包含 DivX 风格封装 B 帧的 MPEG-4 流的 AVI 文件,可以使用以下命令:

ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi

11.23 noise

破坏数据包的内容或仅删除它们而不破坏容器。可用于模糊测试或测试错误恢复/隐藏。

参数:

amount

接受一个表达式,每个数据包的评估结果决定该数据包中字节修改的频率。值低于 0 将导致频率可变。默认值为 0,这不会导致修改。然而,如果既未指定 amount 也未指定 drop,则会将 amount 设置为-1。请参阅下面的可接受变量。

drop

接受一个每包评估的表达式,其值决定该包是否被丢弃。评估为正值会导致数据包被丢弃。评估为负值会导致其被丢弃的几率可变,大致与值的大小成反比。默认值为 0,这不会导致数据包丢弃。请参阅下面的可接受变量。

dropamount

接受一个非负整数,分配一个变量丢弃几率,大致与该值成反比。默认是 0,这不会导致丢弃。此选项可向后兼容,相当于将 drop 设置为具有相同大小的负值,例如dropamount=4等同于drop=-4。如果还指定 drop,则会忽略此选项。

bothamountdrop接受包含以下变量的表达式:

n

数据包的索引,从零开始。

tb

数据包时间戳的时间基准。

pts

数据包显示时间戳。

dts

数据包解码时间戳。

nopts

代表 AV_NOPTS_VALUE 的常量。

startpts

流中看到的第一个非 AV_NOPTS_VALUE 的 PTS。

startdts

在流中首次看到非 AV_NOPTS_VALUE 的 DTS。

duration
d

数据包持续时间,以时间基单位表示。

pos

数据包在输入中的位置;当未知或未设置时可能为 -1。

size

数据包大小,以字节为单位。

key

数据包是否标记为关键帧。

state

一个伪随机整数,主要源于数据包负载的内容。

11.23.1 示例

对每个字节应用修改但不丢弃任何数据包。

ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv

在时间戳 30 秒后丢弃所有未标记为关键帧的视频数据包,但不修改剩余数据包。

ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(t\,30)*not(key)' output.mkv

每 10 秒丢弃一秒的音频,并在其余部分添加一些随机噪声。

ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(t\,10)\,9\,10)' output.mkv

11.24 null

此位流过滤器未改变数据包,直接通过。

11.25 pcm_rechunk

将 PCM 音频重新分包为固定数量的采样每个数据包或固定数据包速率每秒。这类似于(ffmpeg-filters)asetnsamples 音频滤镜但适用于音频数据包而不是音频帧。

nb_out_samples, n

设置每个输出音频数据包的采样数量。此数字表示每个通道的采样数量。默认值为 1024。. Default value is 1024.

pad, p

如果设置为 1,则过滤器将使用静默填充最后一个音频数据包,使其包含与前一个数据包相同数量的采样(或大致相同数量的采样,请参见frame_rate)。默认值为 1。

frame_rate, r

此选项使过滤器输出每秒固定数量的数据包,而不是每个数据包固定数量的采样。如果音频采样率无法被帧速率整除,那么采样数量将不是恒定的,但会稍微变化以确保每个数据包尽可能接近帧边界的开始位置。使用此选项优先于nb_out_samples.

您可以使用该选项生成 NTSC 帧速率的著名 48kHz 音频 1602-1601-1602-1601-1602 模式。frame_rate选项。

ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -

11.26 pgs_frame_merge

将一个以“显示集结束”段结束的 PGS 字幕段序列合并为一个数据包。

这是某些支持 PGS 字幕的容器(混流器matroska).

需要的。

修改嵌入在 ProRes 流中的颜色属性元数据。

color_primaries

设置颜色原色。 可用值为:

auto

保持相同的颜色原色属性(默认)。

unknown
bt709
bt470bg

BT601 625

smpte170m

BT601 525

bt2020
smpte431

DCI P3

smpte432

P3 D65

transfer_characteristics

设置颜色传输。 可用值为:

auto

保持相同的传输特性属性(默认)。

unknown
bt709

BT 601, BT 709, BT 2020

smpte2084

SMPTE ST 2084

arib-std-b67

ARIB STD-B67

matrix_coefficients

设置矩阵系数。 可用值为:

auto

保持相同的色域属性(默认)。

unknown
bt709
smpte170m

BT 601

bt2020nc

为文件中的每帧设置 Rec709 色域。

ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov

为文件中的每帧设置混合对数伽玛参数。

ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov

11.28 remove_extra

从数据包中移除附加数据。

它接受以下参数:

freq

设置从哪个帧类型中移除附加数据。

k

仅从非关键帧中移除附加数据。

keyframe

仅从关键帧中移除附加数据。

e, all

从所有帧中移除附加数据。

11.29 setts

设置数据包中的 PTS 和 DTS。

它接受以下参数:

ts
pts
dts

设置 PTS、DTS 或两者的表达式。

duration

设置持续时间的表达式。

time_base

设置输出时间基。

表达式通过 eval API 进行评估,并可以包含以下常量:

N

输入数据包的计数。从 0 开始。

TS

输入中的解复用时间戳,如果使用ts或者dts选项或展示时间戳,如果使用pts选项。

POS

数据包在文件中的原始位置,如果当前数据包未定义则为未定义

DTS

输入中的解复用时间戳。

PTS

输入中的展示时间戳。

DURATION

输入中的持续时间。

STARTDTS

第一个数据包的 DTS。

STARTPTS

第一个数据包的 PTS。

PREV_INDTS

先前输入的 DTS。

PREV_INPTS

先前输入的 PTS。

PREV_INDURATION

先前输入的持续时间。

PREV_OUTDTS

先前输出的 DTS。

PREV_OUTPTS

先前输出的 PTS。

PREV_OUTDURATION

先前输出的持续时间。

NEXT_DTS

下一个输入的 DTS。

NEXT_PTS

下一个输入的 PTS。

NEXT_DURATION

下一个输入的持续时间。

TB

数据包所属流的时间基。

TB_OUT

输出时间基。

SR

数据包所属流的采样率。

NOPTS

AV_NOPTS_VALUE 常量。

例如,要设置 PTS 等于 DTS(不建议在涉及 B 帧时使用):

ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv

11.30 showinfo

记录基本数据包信息。主要用于测试、调试和开发。

11.31 text2movsub

将文本字幕转换为带元数据头的 MOV 字幕(如mov_text编解码器使用的)。

另请参见mov2textsub滤镜。

11.32 trace_headers

记录包含编码流头中所有语法元素的跟踪输出(所有高于单独编码块级别的内容)。 这对于调试低级流问题非常有用。

支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但根据构建可能仅支持其中的子集。

11.33 truehd_core

从 TrueHD 流中提取核心,丢弃 ATMOS 数据。

11.34 vp9_metadata

修改嵌入 VP9 流中的元数据。

color_space

在帧头中设置色彩空间值。 请注意,任何设置为 RGB 的帧都将隐式设置为 PC 范围,并且 RGB 与配置文件 0 和 2 不兼容。

unknown
bt601
bt709
smpte170
smpte240
bt2020
rgb
color_range

在帧头中设置色彩范围值。 请注意,色彩空间施加的任何值都将优先于此值。

tv
pc

11.35 vp9_superframe

将 VP9 不可见的(alt-ref)帧重新合并为 VP9 超帧。这修复了拆分/分段的 VP9 流中可见对应帧的 alt-ref 帧拆分问题。

11.36 vp9_superframe_split

将 VP9 超帧拆分为单帧。

11.37 vp9_raw_reorder

对于具有正确时间戳但可能顺序错误的 VP9 流,插入额外的 show-existing-frame 包以纠正顺序。

12 格式选项

libavformat 库提供了一些通用的全局选项,可以在所有混流器和解复器上设置。此外,每个混流器或解复器可能支持所谓的私有选项,这些选项是针对该组件特定的。

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

下列支持的选项如下:

avioflags 标志 (输入/输出)

可能的值:

direct

减少缓冲。

probesize 整数 (输入)

设置以字节为单位的分析大小,即分析数据以获取流信息的大小。较高的值将使检测分散在流中的更多信息成为可能,但会增加延迟。必须是整数,且不得小于 32。默认值是 5000000。

max_probe_packets 整数 (输入)

设置在探测编解码器时缓冲的数据包最大数目。 默认值为 2500 个数据包。

packetsize 整数 (输出)

设置数据包大小。

fflags 标志

设置格式标志。有些在有限的格式中实现。

输入文件的可能值:

discardcorrupt

丢弃损坏的数据包。

fastseek

启用快速但不精确的某些格式的搜索。

genpts

如果 DTS 存在则生成缺失的 PTS。

igndts

如果 PTS 也设置了则忽略 DTS。在 PTS 设置的情况下,DTS 值设定为 NOPTS。当nofillin标志设置时则忽略。

ignidx

忽略索引。

nobuffer

减少在初始输入流分析期间引入的延迟。

nofillin

不填充数据包字段中可以精确计算的缺失值。

noparse

禁用 AVParsers,此操作需要+nofillin太。

sortdts

尝试按 DTS 交织输出数据包。目前仅适用于具有索引的 AVI 文件。

输出文件的可能值:

autobsf

根据输出格式的需要自动应用位流过滤器。默认启用。

bitexact

只写入平台、构建和时间无关的数据。 这确保文件和数据校验和可以跨平台再现并匹配。 它主要用于回归测试。

flush_packets

立即写出数据包。

shortest

在最短流的结束处停止混流。 可能需要增加 max_interleave_delta 以避免在 EOF 之前刷新较长的流。

seek2any 整数 (输入)

如果设置为 1,允许在解复器级别搜索非关键帧,当支持时。 默认值为 0。

analyzeduration 整数 (输入)

指定分析输入所需要的微秒数量。较高的值将使检测更准确的信息成为可能,但会增加延迟。默认值为 5,000,000 微秒 = 5 秒。

cryptokey 十六进制字符串 (输入)

设置解密密钥。

indexmem 整数 (输入)

设置时间戳索引(每流)使用的最大内存。

rtbufsize 整数 (输入)

设置缓冲实时帧使用的最大内存。

fdebug 标志 (输入/输出)

打印指定的调试信息。

可能的值:

ts
max_delay 整数 (输入/输出)

设置最大混流或解流延迟,以微秒为单位。

fpsprobesize 整数 (输入)

设置用于分析帧速率的帧数。

audio_preload 整数 (输出)

设置音频数据包应该提前多少微秒进行交织。

chunk_duration 整数 (输出)

设置每块的微秒数。

chunk_size 整数 (输出)

设置每块的字节大小。

err_detect, f_err_detect 标志 (输入)

设置错误检测标志。f_err_detect已被弃用并 应仅通过ffmpeg工具使用。

可能的值:

crccheck

验证嵌入的 CRC。

bitstream

检测位流规范偏差。

buffer

检测不当的位流长度。

explode

在检测轻微错误时中止解码。

careful

将违反规范并且未在实际情况中出现的内容视为错误。

compliant

将所有不符合规范的内容视为错误。

aggressive

将理智编码器不应执行的内容视为错误。

max_interleave_delta 整数 (输出)

设置用于交织的最大缓冲持续时间。持续时间以微秒为单位,默认是 10000000(10 秒)。

为了确保所有流正确交织,libavformat 将在实际将任何数据包写入输出文件之前等待每个流至少有一个数据包。当一些流"稀疏"(即后续数据包之间的间隔较大)时,这可能会导致过度缓冲。

此字段指定在混流队列中第一个和最后一个数据包的时间戳之间的最大差值,超过此值 libavformat 将输出一个数据包,而不考虑是否已为所有流排队了一个数据包。

如果设置为 0,libavformat 将继续缓冲数据包,直到拥有每个流的数据包,无论缓冲数据包之间的最大时间戳差距如何。

use_wallclock_as_timestamps 整数 (输入)

如果设置为 1,使用挂钟作为时间戳。默认值为 0。

avoid_negative_ts 整数 (输出)

可能的值:

make_non_negative

将时间戳移位,使其非负。 另外请注意这仅影响前导负时间戳,不影响非单调负时间戳。

make_zero

将时间戳移位,使第一个时间戳为 0。

auto (default)

在目标格式要求时启用移位。

disabled

禁用时间戳移位。

启用移位时,所有输出时间戳都按相同数量移位。音频、视频和字幕的不同步以及相对时间戳差异与没有移位时如何情况保持一致。

skip_initial_bytes 整数 (输入)

设置在读取头和帧之前跳过字节数,如果设置为 1。 默认值为 0。

correct_ts_overflow 整数 (输入)

如果设置为 1,修正单个时间戳溢出。默认值为 1。

flush_packets 整数 (输出)

在每个数据包后刷新底层I/O流。默认值为-1(自动),即底层协议将决定操作;1表示启用,效果是减少延迟;0表示禁用,并可能在某些情况下提高I/O吞吐量。

output_ts_offset 偏移量 (输出)

设置输出时间偏移。

偏移量必须是时间长度规范,详见ffmpeg-utils手册中的时间长度部分.

该偏移量由复用器添加到输出时间戳中。

指定正偏移意味着相应的流延迟时间等于偏移量中指定的长度。默认值为0(即不应用任何偏移)。

format_whitelist 列表 (输入)

允许的解复用器的逗号分隔列表。默认情况下,允许所有。

dump_separator 字符串 (输入)

用于分隔命令行中打印的有关流参数信息的字段的分隔符。 例如,要使用换行符和缩进分隔字段:

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg
max_streams 整数 (输入)

指定最大流数量。这可以用于拒绝由于流数量过多而可能需要过多资源的文件。

skip_estimate_duration_from_pts 布尔值 (输入)

如果需要额外探测文件末尾的PTS以估算输入时长,则跳过估算。目前适用于MPEG-PS和MPEG-TS。

duration_probesize 整数 (输入)

在实际需要通过额外探测文件末尾的PTS进行输入时长估算时(如目前用于MPEG-PS和MPEG-TS),设定探测大小(字节)。 该选项旨在为对更好时长探测感兴趣的用户,或者间接用于串接解复用器的用户提供服务。 典型使用场景为高码率的MPEG-TS CBR,具有高视频缓冲和结尾清理,视频和音频PTS相似:在这种情况下,最后一个视频数据包与最后一个音频数据包之间的物理间隙较大,需要读取大量字节以获取视频流时长。 另一种使用场景是默认探测行为仅达到单一视频帧而非最后一个流中的帧,导致时长不准确。 设置此选项即使对于小文件也会产生性能影响,因为探测大小是固定的。 默认行为是通用的权衡,大部分是自适应的,但探测大小不会无代价地扩展以获取流时长。 必须是不小于1的整数,或为0以采用默认行为。

strict, f_strict 整数 (输入/输出)

指定遵循标准的严格程度。f_strict已被弃用, 仅应通过ffmpeg工具使用。

可能的值:

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

允许非标准化的实验性项目,实验性 (未完成/正在进行中/未经过充分测试)解码器和编码器。 注意:实验性解码器可能会带来安全风险,请不要使用此选项解码不可信输入。

12.1 格式流规格

格式流规格允许选择一个或多个匹配特定属性的流。

流规格的确切语义由avformat_match_stream_specifier()函数定义,其声明在libavformat/avformat.h头文件中并在ffmpeg手册中的流规格部分中进行了说明.

13 解复用器

解复用器是FFmpeg中配置的元素,可以从特定类型的文件读取多媒体流。

当配置FFmpeg构建时,默认启用所有支持的解复用器。可以使用配置选项列出所有可用项--list-demuxers.

可以使用配置选项禁用所有解复用器--disable-demuxers,并使用选项单独启用解复用器--enable-demuxer=解复用器,或使用选项禁用它--disable-demuxer=解复用器.

ff*工具的选项将显示已启用解复用器列表。使用-demuxers查看已启用解复用器和复用器的组合列表。-formats某些当前可用解复用器的描述如下所示。

13.1 aa

13.1 aa

Audible格式2、3和4解复用器。

此解复用器用于解复用Audible格式2、3和4 (.aa) 文件。

13.2 aac

原始音频数据传输流AAC解复用器。

此解复用器用于解复用包含单一AAC流以及任何ID3v1/2或APE标签的ADTS输入。

13.3 apng

动态PNG图像解复用器。

此解复用器用于解复用APNG文件。 所有头部(但不包括PNG签名)至第一个fcTL块之前的内容作为额外数据传输。 然后帧被拆分为两个fcTL块之间的所有块,或最后一个fcTL与IEND块之间的内容。

-ignore_loop 布尔值

如果设置,则忽略文件中的循环变量。默认启用。

-max_fps 整数

每秒最大帧率。默认值为0表示不限制。

-default_fps 整数

文件中未指定时使用的默认帧率(0表示尽可能快)。默认值为15。

13.4 asf

高级系统格式解复用器。

该解复用器用于解复用ASF文件和MMS网络流。

-no_resync_search 布尔值

不尝试通过查找特定可选起始码进行重新同步。

13.5 concat

虚拟连接脚本解复用器。

该解复用器从文本文件读取文件列表和其他指令,并一个接一个地将它们解复用,如同它们的所有数据包已被复用到一起。

文件中的时间戳被调整,使第一文件从0开始,每个后续文件从前一个文件结束的地方开始。需要注意,此操作是全局性的,可能会导致间隙,如果所有流的长度不完全相同。

所有文件必须具有相同的流(相同的编解码器、相同的时间基等)。

每个文件的持续时间用于调整下一个文件的时间戳:如果持续时间不正确(例如因为通过比特率计算得出,或者文件被截断),可能会导致伪影。可以使用duration指令覆盖存储在每个文件中的持续时间。

13.5.1 语法

脚本是一个扩展ASCII文本文件,每行一个指令。 空行、前导空格以及以“#”开头的行将被忽略。 以下指令被识别:

file 路径

文件的路径;特殊字符和空格必须用反斜杠或单引号转义。

所有后续与文件相关的指令均适用于该文件。

ffconcat version 1.0

识别脚本类型和版本。

为了让FFmpeg自动识别格式,该指令必须出现在脚本的第一行,且完全一致(没有额外空格或字节顺序标记)。

duration 持续时间

文件的持续时间。此信息可以从文件中指定;在此处指定可能更有效或在文件中信息不可用或不准确时有所帮助。

如果为所有文件设置了持续时间,则可以在整个连接视频中进行寻址。

inpoint 时间戳

文件的入点。当解复用器打开文件时,它会立即跳转到指定时间戳进行寻址。寻址的方式确保所有流能够在入点成功展现。

对于帧内编码器来说,此指令效果最佳,因为对于非帧内编码器,通常会在实际入点之前获取额外数据包,并且解码内容可能包含入点之前的帧。

对于每个文件,在文件入点之前的数据包时间戳将小于计算出的文件起始时间戳(在第一个文件的情况下为负值),并且文件的持续时间(如果未由duration指令指定)将根据其指定的入点减少。

由于在指定入点之前可能出现数据包,数据包时间戳可能在两个连接的文件之间重叠。

outpoint 时间戳

文件的出点。当解复用器达到任何流中指定的解码时间戳时,它会将其视为文件结束状态,跳过当前流和所有剩余流的所有数据包。

出点是排他的,这意味着解复用器不会输出解码时间戳大于或等于出点的数据包。

此指令对于帧内编码器和所有流紧密交错的格式效果最佳。对于非帧内编码器,通常会有额外数据包的展示时间戳在出点之后,因此解码内容可能包含出点之后的帧。如果流没有紧密交错,您可能无法在出点之前从所有流中获取数据包,并且可能只能解码最早的流直到出点。

文件的持续时间(如果未由duration指令指定)将根据其指定的出点减少。

file_packet_metadata 键=值

文件数据包的元数据。指定的元数据将设置为每个文件数据包。可以多次指定该指令以添加多个元数据条目。 此指令已被弃用,请使用file_packet_meta替代。

file_packet_meta

文件数据包的元数据。指定的元数据将设置为每个文件数据包。可以多次指定该指令以添加多个元数据条目。

option

访问、打开和探测文件的选项。 可以存在多次。

stream

在虚拟文件中引入一个流。 所有后续与流相关的指令均适用于最近引入的流。 某些流属性必须设置,以便能够识别子文件中的匹配流。 如果脚本中没有定义流,则从第一个文件复制流。

exact_stream_id 标识

设置流的标识值。 如果提供了此指令,那么将在子文件中使用对应的标识字符串。 这对于MPEG-PS(VOB)文件尤其有用,其中流的顺序不可靠。

stream_meta

流的元数据。 可以存在多次。

stream_codec

流的编解码器。

stream_extradata 十六进制字符串

流的额外数据,以十六进制编码表示。

chapter 标识 起始 结束

添加一个章节。标识是一个唯一的标识符,可能较小且连续。

13.5.2 选项

该解复用器接受以下选项:

safe

如果设置为1,则拒绝不安全的文件路径和指令。 文件路径被视为安全,条件是它不能包含协议说明,且是相对路径,所有组件只包含便携字符集(字母、数字、点、下划线和连字符)中的字符,且没有以点开始的组件。

如果设置为0,则接受任意文件名。

默认值为1。

auto_convert

如果设置为1,则尝试对数据包数据执行自动转换,以使流可连接。 默认值为1。

目前,唯一的转换是将h264_mp4toannexb比特流过滤器添加到MP4格式的H.264流中。特别是在存在分辨率变化时,这是必要的。

segment_time_metadata

如果设置为1,每个数据包将包含lavf.concat.start_timelavf.concat.duration数据包元数据值,这些值表示连接输出中相应文件段的起始时间和持续时间,以微秒为单位。仅当基于连接文件已知时才设置持续时间元数据。默认值为0。

13.5.3 示例

  • 使用绝对文件名并包含一些注释:
    # my first filename
    file /mnt/share/file-1.wav
    # my second filename including whitespace
    file '/mnt/share/file 2.wav'
    # my third filename including whitespace plus single quote
    file '/mnt/share/file 3'\''.wav'
    
  • 允许输入格式自动探测,使用安全文件名并设置第一个文件的持续时间:
    ffconcat version 1.0
    
    file file-1.wav
    duration 20.0
    
    file subdir/file-2.wav
    

13.6 dash

基于HTTP动态自适应流式处理分离器。

此分离器显示清单中找到的所有AV流。通过设置AV流上的丢弃标志,调用方可以决定实际接收哪些流。每个流都镜像idbandwidth<Representation>的属性,分别作为名为“id”和“variant_bitrate”的元数据键。

13.6.1 选项

此分离器接受以下选项:

cenc_decryption_key

16字节密钥(十六进制),用于解密使用ISO通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。

13.7 dvdvideo

DVD视频分离器,由libdvdnav和libdvdread支持。

可以直接将DVD标题,特别是顺序PGC,摄取到转换管道中。菜单资源(如背景视频或音频)也可以在提供菜单坐标(尽力而为)的情况下进行分离。目前尚不支持跳转。

支持块设备(DVD驱动器)、ISO文件和目录结构。通过-f dvdvideo激活一个这些输入之前。

此分离器不含任何类型的解密代码。若操作加密DVD,需自行解决,不应期望获得支持。

底层播放由libdvdnav处理,结构解析由libdvdread完成。FFmpeg构建时必须具有可用的GPL库支持以及配置开关--enable-libdvdnav--enable-libdvdread.

您需要提供所需的“标题编号”或精确的PGC/PG坐标。许多开源DVD播放器和工具可以帮助提供此信息。如果未指定,分离器将默认为标题1,这对许多光盘适用。然而,由于格式的灵活性,建议手动检查,有许多光盘的制作方式奇怪或标头无效。

如果输入为真实的DVD驱动器,请注意,一些驱动器可能在读取光盘的坏扇区时无声失败,返回随机位数据,这实际上是损坏数据。这种情况在老化或变质的光盘上尤为突出。需要进行二次读取和完整性检查以检测损坏。这不是FFmpeg的问题。

13.7.1 背景

DVD视频不是传统意义上直接可访问的线性容器格式。相反,它允许复杂的编程播放,精心复合的MPEG-PS流存储在无头VOB文件中。对于终用户而言,这些流简单地称为“标题”,但实际的逻辑播放顺序由标题中的一个或多个“PGC”(节目组链)定义。PGC反过来由多个“PG”(程序)组构成,这些是真正的视频片段(对于典型的视频特性,按顺序排列)。PGC结构,以及流布局和元数据,存储在需要解析的IFO文件中。PGC可以更容易地理解为播放列表。

实际的DVD播放器依赖于通过菜单的用户GUI交互和内部VM来驱动分离方向。通常,用户要么通过菜单导航,要么自动重定向到他们选择的PGC。在此过程中以及后续播放期间,DVD播放器的内部VM还维护一个状态,并执行指令,这可能会导致播放期间跳至不同的扇区。这就是为什么需要libdvdnav,因为对于光盘上的MPEG-PS块(VOB)进行线性读取在许多情况下不足以生成正确的播放序列。

存在许多其他DVD结构(还有很长的主题)这里不做讨论。其中,NAV包特别是由此分离器处理以构建准确的时间轴,但不作为流输出。如需高层次的理解,请参考:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures

13.7.2 选项

此分离器接受以下选项:

title int

要播放的标题编号。如果pgcpg未设置,则必须设置。不适用于菜单。默认值为0(自动),当前仅选择第一个可用的标题(标题1),并通知用户相关影响。

chapter_start int

要开始的章节(PTT,标题的一部分)编号。不适用于菜单。默认值为1。

chapter_end int

要结束的章节(PTT,标题的一部分)编号。不适用于菜单。默认值为0,这是一个特殊值,表示在最后一个可能的章节结束。

angle int

视频角度编号,指实际上由交错在VOB中的备用帧组成的附加视频流。不适用于菜单。默认值为1。

region int

用于播放的区域码。一些光盘可能会使用此值在不同区域默认播放特定角度。此选项不会影响真实DVD驱动器的区域码(如果用作输入)。不适用于菜单。默认值为0,“世界”。

menu bool

分离菜单资源,而不是导航标题。需要提供菜单的确切坐标(menu_lu, menu_vts, pgc, pg)。默认值为false。

menu_lu int

要分离的菜单语言。在DVD中,菜单按语言分组。默认值为0,第一个语言单元。

menu_vts int

菜单所在的VTS,或者0如果是VMG菜单(根级)。默认值为0,VMG菜单。

pgc int

入口PGC以开始播放,与pg一起使用。设置的替代方法为title。目前不支持章节标记。对于菜单,必须显式设置。默认值为0,根据title.

pg 的值自动解析。

intpgc入口PG以开始播放,与title一起使用。设置的替代方法为title,或者从菜单的开头(PG 1)开始。

preindex bool

启用此选项以获得准确的章节(PTT)标记和持续时间测量,这需要一个缓慢的二次读取过程以从NAV包中索引章节标记时间戳。这是对真实光学驱动器的非理想额外工作。建议并更快将此选项与存储在硬盘上的DVD结构备份一起使用。不兼容pgcpg。不适用于菜单。默认值为0,false。

trim bool

跳过填充单元(即长度小于1秒的单元)。许多光盘的PGC开头存在填充段,通常包含垃圾数据,用于控制真实DVD播放器的缓冲速度,无其他有数据价值。不适用于菜单。默认值为1,true。

13.7.3 示例

  • 从给定的DVD结构中打开标题3:
    ffmpeg -f dvdvideo -title 3 -i <path to DVD> ...
    
  • 从给定的DVD结构中打开标题1的章节3-6:
    ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ...
    
  • 从给定的DVD结构中仅打开标题1的章节5:
    ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ...
    
  • 从VTS 1的菜单中分离语言1的菜单,从PGC 1开始,从PG 1开始:
    ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
    

13.8 ea

电子艺术多媒体格式分离器。

此格式适用于各种电子艺术游戏。

13.8.1 选项

merge_alpha bool

通常,VP6的alpha通道(如果存在)作为第二个视频流返回,通过设置此选项,分离器可以返回一个包含alpha通道的单个视频流,除此之外还有普通视频。

13.9 imf

跨操作母版格式分离器。

该分离器显示IMF组成中找到的音频和视频流,如SMPTE ST 2067-2.

ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...

未指定时,分离器将在与CPL相同目录中查找名为-assetmaps is not specified, the demuxer looks for a file called ASSETMAP.xml的文件。

13.10 flv, live_flv, kux

Adobe Flash视频格式分离器。

此分离器用于拆分FLV文件和RTMP网络流。在直播网络流的情况下,如果强制格式,可以使用live_flv选项代替flv,以应对时间戳不连续情况。KUX是Youku平台使用的FLV变体。

ffmpeg -f flv -i myfile.flv ...
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
-flv_metadata bool

根据onMetaData数组内容分配流。

-flv_ignore_prevtag bool

忽略上一个标签值的大小。

-flv_full_metadata bool

输出onMetadata的所有上下文。

13.11 gif

动画GIF分离器。

接收以下选项:

min_delay

设置帧之间的最小有效延迟,以百分之一秒为单位。范围是0到6000。默认值为2。

max_gif_delay

设置帧之间的最大有效延迟,以百分之一秒为单位。范围是0到65535。默认值为65535(接近十一分钟),这是规范允许的最大值。

default_delay

设置帧之间的默认延迟,以百分之一秒为单位。范围是0到6000。默认值为10。

ignore_loop

GIF文件可以包含循环指定次数(或无限)的信息。如果ignore_loop设置为1,则忽略输入中的循环设置,不会发生循环。如果设置为0,则根据GIF的循环设置进行循环。默认值为1。

例如,使用叠加滤镜,将一个无限循环的GIF叠加到另一个视频上:

ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv

注意在上述示例中叠加滤镜的shortest选项用于使输出视频在最短输入文件的长度处结束,在此案例中是input.mp4因为此示例中的GIF无限循环。

13.12 hls

HLS分离器

Apple HTTP直播流分离器。

此分离器显示来自所有变体流的所有AV流。id字段设置为比特率变体索引编号。通过设置AV流上的丢弃标志(在ffplay中按‘a’或‘v’),调用方可以决定实际接收哪些变体流。该流所属变体的总比特率可在名为“variant_bitrate”的元数据键中找到。

接收以下选项:

live_start_index

设置起始直播流段的索引(负值代表从结尾开始)。

prefer_x_start

如果播放列表中存在#EXT-X-START,则优先使用它而不是live_start_index。

allowed_extensions

以’,‘分隔的文件扩展名列表,HLS允许访问它们。

max_reload

尝试重新加载不足的列表的最大次数。默认值为1000。

m3u8_hold_counters

刷新但没有新段时加载m3u8的最大次数。默认值为1000。

http_persistent

使用持久的HTTP连接。仅适用于HTTP流。默认启用。

http_multiple

为下载HTTP片段使用多个HTTP连接。默认启用,适用于HTTP/1.1服务器。

http_seekable

为下载HTTP片段使用HTTP部分请求。0 = 禁用,1 = 启用,-1 = 自动,默认值是自动。

seg_format_options

使用以键值对表示的选项列表为媒体段的分离器设置选项,键值对之间用:.

seg_max_retry

在发生错误时重新加载一个片段的最大次数,当不希望在网络错误时跳过片段时很有用。 默认值为0。

13.13 image2

图像文件解封装器。

此解封装器从由一个模式指定的图像文件列表中读取。 模式的语法和意义由以下选项指定pattern_type.

模式可能包含一个后缀,用于自动确定文件中图像的格式。

所有文件中的图像的大小、像素格式和格式必须一致。

此解封装器接受以下选项:

framerate

为视频流设置帧率。默认值为25。

loop

如果设置为1,则循环输入。默认值为0。

pattern_type

选择用于解释提供的文件名的模式类型。

pattern_type接受以下值之一。

none

禁用模式匹配,因此视频将仅包含指定的图像。如果您不希望从多个图像创建序列并且您的文件名可能包含特殊的模式字符,则应使用此选项。

sequence

选择一个序列模式类型,用于通过连续编号指定一系列文件。

序列模式可能包含字符串“%d”或“%0Nd”,用于指定匹配模式的每个文件名中表示一个顺序编号的位置。如果使用形式“%d0Nd”,则每个文件名中的数字字符串是用0填充的N表示数字的填充位数。可以通过字符串“%%”在模式中指定字面字符‘%’。

如果序列模式包含“%d”或“%0Nd”,则模式指定的文件列表的第一个文件名必须包含在start_numberstart_number+start_number_range-1之间的一个数字,并且所有接下来的数字必须是连续的。

例如,模式"img-%03d.bmp"将匹配形式的文件名序列img-001.bmp, img-002.bmp, ..., img-010.bmp等等;模式"i%%m%%g-%d.jpg"将匹配形式的文件名序列i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg等等。

注意模式不一定必须包含“%d”或“%0Nd”,例如要转换单个图像文件img.jpeg您可以使用以下命令:

ffmpeg -i img.jpeg img.png
glob

选择一个通配符模式类型。

该模式的解释方式类似于glob()模式。这仅在libavformat编译时支持通配符匹配的情况下可用。

glob_sequence (已弃用,将被移除)

选择一个混合的通配符/序列模式。

如果您的libavformat版本已编译支持通配符匹配,并且提供的模式包含至少一个未转义的前缀"%"的元字符, 则该模式将被解释为%*?[]{}模式,否则将被理解为一个序列模式。glob() pattern, otherwise it is interpreted like a sequence pattern.

所有通配符特殊字符%*?[]{}必须以"%"为前缀。要转义一个字面“%”,您应使用"%%"。

例如模式foo-%*.jpeg将匹配所有以"foo-"为前缀,以“.jpeg”结束的文件名,并且foo-%?%?%?.jpeg将匹配所有以"foo-"为前缀、后跟三个字符顺序并以“.jpeg”结束的文件名。

此模式类型已经过弃用,建议使用globsequence.

默认值为glob_sequence.

pixel_format

设置读取图像的像素格式。如果未指定,像素格式将从序列中的第一个图像文件中推测。

start_number

设置从图像文件模式匹配的文件中读取的起始索引。默认值为0。

start_number_range

设置查找序列中第一个图像文件时检查的索引间隔范围,从start_number开始。默认值为5。

ts_from_file

如果设置为1,将设置帧时间戳为图像文件的修改时间。注意不提供时间戳单调性:图像以与未启用此选项时相同的顺序排列。默认值为0。 如果设置为2,将设置帧时间戳为图像文件的修改时间,精度为纳秒。

video_size

设置读取图像的视频大小。如果未指定,视频大小将从序列中的第一个图像文件中推测。

export_path_metadata

如果设置为1,将向输入中的元数据添加两个额外字段,使它们也可用于其他滤镜(参见drawtext滤镜的示例)。默认值为0。下面描述了额外字段:

lavf.image2dec.source_path

对应于正在读取的输入文件的完整路径。

lavf.image2dec.source_basename

对应于正在读取的文件名。

13.13.1 示例

  • 使用ffmpeg从文件序列中创建视频img-001.jpeg, img-002.jpeg,......,假设输入帧率为每秒10帧:
    ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
    
  • 与上述类似,但从序列中索引为100的文件开始读取:
    ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
    
  • 读取与“*.png”全局模式匹配的图像,即所有以“.png”后缀结束的文件:
    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
    

13.14 libgme

Game Music Emu库是一个电子游戏音乐文件模拟器集合。

查看https://bitbucket.org/mpyne/game-music-emu/overview以了解更多信息。

它接受以下选项:

track_index

设置要解封装的曲目索引。解封装器只能导出一个曲目。 曲目索引从0开始。默认值是选择第一个曲目。曲目的数量以tracks元数据条目导出。

sample_rate

设置导出曲目的采样率。范围是1000到999999。默认值是44100。

max_size (字节)

解封装器将整个文件缓冲到内存中。通过调整此值可以设置最大缓冲区大小,从而充当可读取文件大小的上限。 默认值为50 MiB。

13.15 libmodplug

基于ModPlug的模块解封装器。

查看https://github.com/Konstanty/libmodplug

它将导出一个2声道16位44.1 kHz音频流。 可选择导出一个pal816色视频流,可以带或不带打印的元数据。

它接受以下选项:

noise_reduction

应用一个简单的低通滤波器。可以为1(开启)或0(关闭)。默认值为0。

reverb_depth

设置混响量。范围0-100。默认值为0。

reverb_delay

设置延迟时间,单位为毫秒,范围限制为40-250毫秒。默认值为0。

bass_amount

应用低音扩展,即XBass或增强型低音。范围为0(安静)到100(响亮)。默认值为0。

bass_range

设置低音频率的上限。范围为10-100 Hz。默认值为0。

surround_depth

应用杜比Pro-Logic环绕效果。范围为0(安静)到100(强烈)。默认值为0。

surround_delay

设置环绕延迟时间,单位为毫秒,范围限制为5-40毫秒。默认值为0。

max_size

解封装器将整个文件缓冲到内存中。通过调整此值可以设置最大缓冲区大小,从而充当可读取文件大小的上限。 范围为0到100 MiB。0则移除缓冲区大小限制(不推荐)。默认值为5 MiB。

video_stream_expr

字符串使用eval API计算,用于为生成的视频流分配颜色。 可以使用的变量是x, y, w, h, t, speed, tempo, order, patternrow.

video_stream

生成视频流。可以为1(开)或0(关)。默认值为0。

video_stream_w

设置视频帧宽度,以字符为单位,其中一个字符表示8像素。范围为20-512。默认值为30。

video_stream_h

设置视频帧高度,以字符为单位,其中一个字符表示8像素。范围为20-512。默认值为30。

video_stream_ptxt

在视频流上打印元数据。其中包括speed, tempo, order, pattern, rowts(时间,单位毫秒)。可以为1(开)或0(关)。默认值为1。

13.16 libopenmpt

基于libopenmpt的模块解封装器。

查看https://lib.openmpt.org/libopenmpt/以了解更多信息。

某些文件有多个子曲(轨道),这可以通过subsong选项设置。

它接受以下选项:

subsong

设置子曲的索引。这可以是'all','auto'或子曲的索引。子曲索引从0开始。默认值是'auto'。

默认值是让libopenmpt自己选择。

layout

设置通道布局。合法值为1、2和4声道布局。 默认值是STEREO。

sample_rate

设置libopenmpt输出的采样率。 范围从1000到INT_MAX。默认值为48000。

13.17 mov/mp4/3gp

用于Quicktime文件格式和ISO/IEC基础媒体文件格式的解封装器(ISO/IEC 14496-12或MPEG-4 Part 12,ISO/IEC 15444-12或JPEG 2000 Part 12)。

注册的扩展名:mov,mp4,m4a,3gp,3g2,mj2,psp,m4b,ism,ismv,isma,f4v

13.17.1 选项

此解封装器接受以下选项:

enable_drefs

启用加载外部轨道,默认情况下禁用。 启用此选项在某些用例中可能会理论上泄露信息。

use_absolute_path

允许通过绝对路径加载外部轨道,默认情况下禁用。 启用此项会构成安全风险。仅在确保来源非恶意时才应启用。

seek_streams_individually

在寻找时,分别识别每个流中最接近的点并从该点解封装该流中的数据包。这可能导致与从开头逐一解封装相比,产生不同的数据包序列。默认值为true。

ignore_editlist

忽略任何编辑列表(edit list)原子。默认情况下,解封装器会修改流索引以反映编辑列表所描述的时间线。默认值为false。

advanced_editlist

修改流索引以反映编辑列表描述的时间线。ignore_editlist必须设置为false才能使此选项生效。 如果ignore_editlist和此选项均设置为false,则仅修改流索引的起始位置以反映初始停顿时间或编辑列表描述的起始时间戳。默认值为true。

ignore_chapters

不解析章节。包括GoPro的“HiLight”标签/时刻。请注意,仅在输入可寻址时才会解析章节。默认值为false。

use_mfra_for

对于可寻址的片段化输入,从媒体片段随机访问框(mfra)中设置片段的起始时间戳(如果存在)。

可用的选项如下:

auto

自动检测是否将mfra时间戳设置为PTS或DTS(默认)

dts

将mfra时间戳设为DTS

pts

将mfra时间戳设为PTS

0

不使用mfra框设置时间戳

use_tfdt

对于片段化输入,将片段的起始时间戳设置为baseMediaDecodeTime来自tfdt框。 默认启用,这将优先使用tfdt框以设置DTS。禁用使用earliest_presentation_time来自sidx框。 在任何情况下,如果mfra框中的时间戳可用,并且use_mfra_for设置为pts或dts,将优先使用。

export_all

udta框中未识别的框作为元数据条目导出。框类型的前四个字符将设为键。默认值为false。

export_xmp

XMP_框和uuid框的全部内容作为带键xmp的字符串导出。请注意, 如果export_all设为true而此选项为空,则XMP_框的内容仍作为键导出。默认值为false。 box are still exported but with key XMP_. Default is false.

activation_bytes

用于解密Audible AAX和AAX+文件的4字节密钥。请参阅以下Audible AAX子部分。

audible_fixed_key

用于处理Audible AAX/AAX+文件的固定密钥。已经预设,因此通常不需要指定。

decryption_key

16字节密钥(十六进制)用于解密使用ISO常用加密加密的文件(CENC/AES-128 CTR;ISO/IEC 23001-7)。

max_stts_delta

写入track stts框中的非常高的采样间隔可能偶尔是有意的,但通常这些是错误写入或用于存储负值以用于dts校正的。当以32位有符号整数处理并为负数时,用户可以通过此选项设定上限,超出此值的间隔将改为设置为1。 单位为轨道时间比例。默认值为

Unit is the track time scale. Range is 0 to UINT_MAX. Default is UINT_MAX - 48000*10允许对48 kHz音频流进行最长10秒的DTS校正,同时适用于99.9%的情况。uint32范围。

interleaved_read

在解复用器级别交错来自多个轨道的包。对于交错不良的文件,此操作可防止由于不同轨道之间的包间隔较大而引起的播放问题,因为MOV/MP4对包的放置没有要求。然而,由于轨道之间的搜索,此操作可能会导致对交错非常差的文件进行过多的搜索,因此禁用它可能会导致I/O问题,但会以播放为代价。

13.17.2 Audible AAX

Audible AAX文件是加密的M4B文件,可以通过指定4字节激活密钥进行解密。

ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4

13.18 mpegts

MPEG-2传输流解复用器。

此解复用器接受以下选项:

resync_size

设置寻找新同步的大小限制。默认值为65536。

skip_unknown_pmt

跳过PAT中未定义节目的PMT。默认值为0。

fix_teletext_pts

覆盖电报文本包的PTS和DTS值,使用第一程序的PCR计算时间戳,该程序电报文本流属于且未被丢弃。如果您希望电报文本包的PTS和DTS值不变,请将此选项设置为0,默认值为1。

ts_packetsize

输出选项包含以字节为单位的原始包大小。显示检测到的原始包大小,用户无法设置。

scan_all_pmts

扫描并合并所有PMT。该值为-1到1之间的整数(-1表示自动设置,1表示启用,0表示禁用)。默认值为-1。

merge_pmt_versions

当PMT的版本更新且基本流移动到不同的PID时,重新使用现有流。默认值为0。

max_packet_size

设置解复用器发出的包的最大大小(字节)。超过此大小的有效载荷将分割到多个包中。范围为1到INT_MAX/2。默认值为204800字节。

13.19 mpjpeg

多部分MIME解复用器中的MJPEG。

此解复用器允许读取MJPEG,其中每帧表示为multipart/x-mixed-replace流的一部分。

strict_mime_boundary

默认实现为多部分MIME边界检测应用宽松标准,以防止针对未正确生成MIME MJPEG流的多个现有端点引起的回归。通过将此选项设置为1,该选项将会对边界值进行更严格的检查。

13.20 rawvideo

原始视频解复用器。

此解复用器允许读取原始视频数据。由于没有指定假定视频参数的头,因此用户必须指定这些参数才能正确解码数据。

此解复用器接受以下选项:

framerate

设置输入视频帧速率。默认值为25。

pixel_format

设置输入视频的像素格式。默认值为yuv420p.

video_size

设置输入视频的大小。此值必须明确指定。

例如,读取一个rawvideo文件input.raw使用ffplay,假定像素格式为rgb24,视频大小为320x240并且帧速率为每秒10帧,使用命令:

ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw

13.21 rcwt

RCWT(带时间的原始字幕)是一种由ccextractor使用的本地格式,ccextractor是处理608/708闭目字幕(CC)源的常用开源工具。有关格式的更多信息,请参见(ffmpeg-formats)rcwtenc.

此解复用器实现了截至2024年3月的规范,该规范自2014年4月以来保持稳定且未改变。

13.21.1 示例

  • 使用内置解码器将CC渲染为ASS:
    ffmpeg -i CC.rcwt.bin CC.ass
    

    请注意,如果您的输出似乎为空,您可能必须手动设置解码器的data_field选项以选择所需的CC子流。

  • 将RCWT备份转换为Scenarist(SCC)格式:
    ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
    

    请注意,SCC格式不支持RCWT可以存储的所有可能的CC扩展(例如EIA-708)。

13.22 sbg

SBaGen脚本解复用器。

此解复用器读取用于生成脑波节奏会话的SBaGen脚本语言http://uazu.net/sbagen/。一个SBG脚本如下所示:

-SE
a: 300-2.5/3 440+4.5/0
b: 300-2.5/0 440+4.5/3
off: -
NOW      == a
+0:07:00 == b
+0:14:00 == a
+0:21:00 == b
+0:30:00    off

SBG脚本可以混合绝对和相对时间戳。如果脚本仅使用绝对时间戳(包括脚本开始时的时间戳)或仅使用相对时间戳,则其布局是固定的且转换很简单。另一方面,如果脚本同时混合使用两种时间戳,则NOW相对于相对时间戳的参考点将取自读取脚本时的当前时间,并且脚本布局将根据该参考点被冻结。这意味着如果直接播放脚本,实际时间将与绝对时间戳匹配,但如果用户暂停播放或搜索,所有时间将相应地移动。

13.23 tedcaptions

TED演讲使用的JSON字幕。TED演讲.

TED不提供字幕的链接,但可以从网页猜测。FFmpeg源代码中的文件tools/bookmarklets.html包含一个书签小工具以显示它们。

此解复用器接受以下选项:

start_time

设置TED演讲的开始时间(毫秒)。默认值为15000(15秒)。此选项用于将字幕与可下载视频同步,因为它们包括15秒的介绍。

示例:将字幕转换为大多数播放器可以理解的格式:

ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt

13.24 vapoursynth

Vapoursynth包装器。

由于安全问题,Vapoursynth脚本不会自动检测,因此必须强制输入格式。对于ff*命令行工具,在输入前添加-f vapoursynth-i yourscript.vpy.

此解复用器接受以下选项:

max_script_size

解复用器将整个脚本缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来作为可以读取脚本的大小限制。默认值为1 MiB。

13.25 w64

Sony Wave64音频解复用器。

此解复用器接受以下选项:

max_size

参见wav解复用器的相同选项。

13.26 wav

RIFF Wave音频解复用器。

此解复用器接受以下选项:

max_size

指定解复用的包的最大包大小(字节)。默认情况下,此值设置为0,这意味着根据输入格式选择一个合理的值。

14 元数据

FFmpeg可以将媒体文件中的元数据转储到简单的UTF-8编码INI样式文本文件中,然后使用元数据复用器/解复用器将其加载回来。

文件格式如下所示:

  1. 文件由一个标头和一系列元数据标签构成,每行一个,分为几个部分。
  2. 标头是一个“;FFMETADATA”字符串,后接版本号(当前为1)。
  3. 元数据标签的格式为“key=value
  4. 紧接标头之后是全局元数据。
  5. 在全局元数据之后可能有每流/每章节元数据部分。
  6. 章节以括号括起来的章节名称开头(例如,STREAM或CHAPTER),并以下一个章节或文件结束。[’, ‘]在章节部分开头可能有一个可选的时间基,用于开始/结束值。格式必须是“
  7. At the beginning of a chapter section there may be an optional timebase to be used for start/end values. It must be in form ‘TIMEBASE=num/den”,其中numden是整数。如果时间基丢失,则默认假定开始/结束时间以纳秒为单位。

    接下来的章节部分必须包含格式为“START=num’, ‘END=num”的章节开始和结束时间,其中num是正整数。

  8. 空行和以“;”或“#”开头的行会被忽略。
  9. 包含特殊字符(“=’, ‘;’, ‘#’, ‘\”和换行符)的元数据键或值必须用反斜杠“\’.
  10. 转义。例如,“foo = bar”中的空格将被视为标签的一部分(上述示例中键为“foo ”,值为“ bar’).

)。

;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team

[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line

使用ffmetadata复用器和解复用器,可以从输入文件中提取元数据到一个ffmetadata文件中,然后使用编辑过的ffmetadata文件对文件进行转码。

提取一个ffmetadata文件的操作如下:ffmpeg如下所示:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE

将编辑后的元数据信息从FFMETADATAFILE文件中重新插入可以按如下方式完成:

ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT

15 协议选项

libavformat库提供了一些通用的全局选项,可以设置在所有协议上。此外,每个协议还可能支持所谓的私有选项,这是特定于该组件的。

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

支持的选项如下:

protocol_whitelist 列表 (输入)

设置一个以","分隔的允许协议列表。“ALL”匹配所有协议。前面带有“-”的协议将被禁用。默认情况下,允许所有协议,但由另一个协议使用的协议(嵌套协议)将被限制在每个协议的子集上。

16 协议

协议是FFmpeg中配置的元素,能够访问需要特定协议的资源。

当您配置FFmpeg构建时,默认情况下启用所有支持的协议。您可以使用配置选项“–list-protocols”列出所有可用协议。

您可以使用配置选项“–disable-protocols”禁用所有协议,并使用选项“–enable-protocol=PROTOCOL”选择性地启用某个协议,或者可以使用选项“–disable-protocol=PROTOCOL".

”禁用某个特定协议。

ff*工具的"-protocols"选项将显示支持的协议列表。

rw_timeout

等待(网络)读/写操作完成的最长时间,以微秒为单位。

当前可用协议的描述如下。

16.1 amqp

高级消息队列协议(AMQP)0-9-1是基于代理的发布/订阅通信协议。

必须使用–enable-librabbitmq编译FFmpeg以支持AMQP。同时也必须运行一个单独的AMQP代理。RabbitMQ是一个示例的开源AMQP代理。

代理启动后,FFmpeg客户端可以使用以下命令将数据流传输到代理:

ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]

其中hostname和port(默认是5672)是代理的地址。客户端还可以设置用户/密码进行认证。默认值为“guest”。代理上的虚拟主机名称可以通过vhost设置。默认值为“/”。

多个订阅者可以使用以下命令从代理流化:

ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]

在RabbitMQ中,发布到代理的所有数据流经特定交换机,并且每个订阅客户端都有一个分配的队列/缓冲区。当一个包到达交换机时,根据交换机和routing_key字段,它可能被复制到客户的队列中。

以下选项受支持:

exchange

设置代理使用的交换机。RabbitMQ有几个预定义的交换机:“amq.direct”是默认交换机,发布者和订阅者必须有匹配的routing_key;“amq.fanout”等同于广播操作(即,数据无论routing_key如何都会被转发到fanout交换机上的所有队列);“amq.topic”类似于“amq.direct”,但允许更复杂的模式匹配(请参考RabbitMQ文档)。

routing_key

设置路由密钥。默认值为“amqp”。路由密钥用于“amq.direct”和“amq.topic”交换机上,以决定是否将包写入订阅者的队列中。

pkt_size

发送/接收至代理的每个数据包的最大大小。默认值为131072。 最小值为4096,最大值为任何一个大值(可被整数表示)。在接收数据包时,这会在FFmpeg中设置一个内部缓冲区大小。它应该等于或大于发送到代理的发布数据包大小。否则,接收到的消息可能会被截短,导致解码错误。

connection_timeout

在与代理建立初始连接期间的超时时间,以秒为单位。默认值为rw_timeout,如果rw_timeout未设置,则为5秒。

delivery_mode 模式

设置发送到代理的每条消息的传递模式。 接受以下值:

persistent

传递模式设置为“持久化”(2)。这是默认值。 消息可能会根据代理的设置写入代理的磁盘。

non-persistent

传递模式设置为“非持久化”(1)。 消息将保留在代理的内存中,除非代理的内存压力较大。

16.2 异步

为输入流提供异步数据填充封装。

在后台线程中填充数据,以使I/O操作与解复用线程分离。

async:URL
async:http://host/resource
async:cache:http://host/resource

16.3 蓝光

读取蓝光播放列表。

接受的选项如下:

angle

蓝光角度

chapter

开始章节(1...N)

playlist

要读取的播放列表(BDMV/PLAYLIST/?????.mpls)

示例:

从挂载至/mnt/bluray的蓝光读取最长的播放列表:

bluray:/mnt/bluray

从挂载至/mnt/bluray的蓝光读取播放列表4的角度2,从第2章开始:

-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray

16.4 缓存

为输入流提供缓存封装。

将输入流缓存到临时文件。为直播流提供了寻位功能。

接受的选项如下:

read_ahead_limit

在不支持寻位时,可以提前读取的字节数。范围为-1到INT_MAX。 -1表示无限制。默认值为65536。

URL语法为

cache:URL

16.5 合并

物理合并协议。

在多个资源中读取和寻位,顺序操作,将其视为唯一的资源。

此协议接受的URL语法为:

concat:URL1|URL2|...|URLN

其中URL1, URL2, ..., URLN是要合并的资源的URL,每个URL可能指定一个不同的协议。

例如,要读取一组文件split1.mpeg, split2.mpeg, split3.mpeg使用ffplay命令:

ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg

注意,由于许多shell的特殊字符"|",您可能需要转义。

16.6 concatf

使用以换行符分隔资源列表的物理合并协议。

在多个资源中读取和寻位,顺序操作,将其视为唯一资源。

此协议接受的URL语法为:

concatf:URL

其中URL是一个包含以换行符分隔资源列表的URL,每个资源可能指定一个不同的协议。特殊字符必须用反斜杠或单引号进行转义。参见(ffmpeg-utils)的"引用和转义" ffmpeg-utils(1)手册中的部分.

例如,要读取一组文件split1.mpeg, split2.mpeg, split3.mpeg列在单独的行内的一个文件中split.txt使用ffplay命令:

ffplay concatf:split.txt

其中split.txt包含的行:

split1.mpeg
split2.mpeg
split3.mpeg

16.7 crypto

AES加密流读取协议。

接受的选项如下:

key

从给定16进制表示设置AES解密密钥二进制块。

iv

从给定16进制表示设置AES解密初始向量二进制块。

接受的URL格式:

crypto:URL
crypto+URL

16.8 data

URI中的内联数据。参见http://en.wikipedia.org/wiki/Data_URI_scheme.

例如,要将GIF文件转化为内嵌式ffmpeg:

ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png

16.9 fd

文件描述符访问协议。

接受的语法为:

fd: -fd 文件描述符

如果没有指定fd默认情况下将使用stdout文件描述符进行写入,使用stdin进行读取。不像pipe协议,fd协议支持常规文件的寻位操作。fd协议不支持通过URL传递文件描述符以确保安全性。

此协议接受以下选项:

blocksize

设置I/O操作最大块尺寸,以字节为单位。默认值为INT_MAX,这不会限制请求的块大小。 适当地设置此值较低可以提高用户中止请求的反应时间,这对于数据传输速度较慢的情况很有价值。

fd

设置文件描述符。

16.10 文件

文件访问协议。

从文件读取或向文件写入。

文件URL的格式为:

file:文件名

其中文件名是要读取的文件的路径。

没有协议前缀的URL将被假定为文件URL。根据构建,类似Windows路径的URL(以驱动器字母开头)也会被假定为文件URL(通常在类Unix系统的构建中不会这样)。

例如,要读取文件input.mpeg使用ffmpeg命令:

ffmpeg -i file:input.mpeg output.mpeg

此协议接受以下选项:

truncate

设置为1时写入时会截断现有文件。值为0时阻止文件截断。默认值为1。

blocksize

设置I/O操作最大块尺寸,以字节为单位。默认值为INT_MAX,这不会限制请求的块大小。 适当地设置此值可以提高用户中止请求的反应时间,这对于在慢速介质上的文件较为重要。

follow

如果设置为1,则协议将在文件末尾重试读取,允许读取仍在写入中的文件。为了使其终止,您需使用rw_timeout选项或使用中断回调(对于API用户)。

seekable

控制是否在文件上声明可寻位性。0表示不可寻位,-1表示自动(对于普通文件可寻位,对于命名管道不可寻位)。

许多解复用器对于可寻位和不可寻位资源的处理方式不同,覆盖此项可能会加快打开某些文件的速度,但会失去一些功能(例如精确寻位)。

16.11 ftp

FTP(文件传输协议)。

使用FTP协议读取或写入远程资源。

需要遵循以下语法。

ftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

此协议接受以下选项。

timeout

设置套接字I/O操作使用的超时时间,以微秒为单位,用于底层低级操作。默认值设置为-1,表示未指定超时时间。

ftp-user

设置用于FTP服务器验证的用户。此选项会被FTP URL中的用户覆盖。

ftp-password

设置用于FTP服务器验证的密码。此选项会被FTP URL中的密码覆盖,如果没有设置用户,则会被ftp-anonymous-password覆盖。

ftp-anonymous-password

当以匿名用户身份登录时使用的密码。通常应使用电子邮件地址。

ftp-write-seekable

控制在编码期间连接的可寻位性。设置为1时资源应为可寻位的,设置为0时则假定不可寻位。默认值为0。

注意:协议可以用作输出,但建议不要这样做,除非进行了特殊检测(测试、服务器配置定制等)。不同FTP服务器在寻位操作期间表现方式不同。ff*工具可能因服务器限制产生不完整内容。

16.12 gopher

Gopher协议。

16.13 gophers

Gophers协议。

采用TLS封装的Gopher协议。

16.14 hls

读取Apple HTTP Live Streaming兼容的分段流并将其视为统一流。描述分段的M3U8播放列表可以是远程HTTP资源或本地文件,通过标准文件协议访问。 嵌套协议通过在hls URI方案名称后指定"+协议"来声明,其中协议可以是"file"或"http"。

hls+http://host/path/to/remote/resource.m3u8
hls+file://path/to/local/resource.m3u8

使用此协议不推荐 - hls解复用器应该可以正常工作(否则请报告问题),并且功能更加完整。 要使用hls解复用器,而不是此协议,只需使用指向m3u8文件的直接URL。

16.15 http

HTTP(超文本传输协议)。

此协议接受以下选项:

seekable

控制连接的可寻位性。设置为1时资源应为可寻位的,设置为0时则假定不可寻位,设置为-1时会尝试自动检测是否可寻位。默认值为-1。

chunked_post

如果设置为1,则为post操作使用分块传输编码,默认值为1。

http_proxy

设置HTTP代理用于隧道,例如:http://example.com:1234

headers

设置自定义HTTP头,可以覆盖内置默认头。值必须是一个编码头的字符串。

content_type

为POST消息或监听模式设置特定内容类型。

user_agent

覆盖User-Agent头。如果未指定,协议将使用描述libavformat构建的字符串("Lavf/<version>")。

referer

设置Referer头。在HTTP请求中包含'Referer: URL'头。

multiple_requests

如果设置为1,则使用持久连接,默认值为0。

post_data

设置自定义HTTP post数据。

mime_type

导出MIME类型。

http_version

导出HTTP响应版本号。通常为"1.0"或"1.1"。

cookies

设置要在后续请求中发送的cookies。每个cookie的格式与Set-Cookie HTTP响应字段的值相同。多个cookie可以用换行符分隔。

icy

如果设置为1,则请求服务器提供ICY(SHOUTcast)元数据。如果服务器支持此功能,应用程序需要通过读取icy_metadata_headersicy_metadata_packet选项来检索元数据。 默认值为1。

icy_metadata_headers

如果服务器支持ICY元数据,这包含ICY特定的HTTP回复头,用换行符分隔。

icy_metadata_packet

如果服务器支持ICY元数据,并且icy设置为1,这包含服务器发送的最后一个非空元数据包。它应被对中流元数据更新感兴趣的应用程序定期轮询。

metadata

设置一个包含Icecast流中元数据的导出字典(如果存在)。仅对C API有用。

auth_type

设置HTTP认证类型。没有Digest选项,因为此方法需要先从服务器获取nonce参数,不能像Basic一样直接使用。

none

自动选择HTTP认证类型。这是默认值。

basic

选择HTTP基本认证。

基本认证发送一个Base64编码的字符串,其中包含客户端的用户名和密码。 Base64不是一种加密形式,应被认为与以明文形式发送用户名和密码相同(Base64是可逆的编码)。如果需要保护资源,请强烈考虑使用除基本认证之外的其他认证方案。应该使用HTTPS/TLS来增强基本认证的安全性。 如果没有这些额外的安全增强措施,不应使用基本认证来保护敏感或有价值的信息。

send_expect_100

为POST发送Expect: 100-continue头。如果设置为1则发送,设置为0则不发送,设置为-1则尝试在适用时发送。默认值为-1。

location

导出包含内容位置的字典。仅对C API有用。

offset

设置初始字节偏移量。

end_offset

尝试将请求限制为此偏移量之前的字节。

method

作为客户端选项使用时,设置请求的HTTP方法。

作为服务器选项使用时,设置所期望的客户端HTTP方法。 如果接收到的HTTP方法与预期不匹配,客户端将被给予一个错误请求响应。 当未设置时,当前不会检查HTTP方法。这以后将由自动检测替代。

reconnect

在EOF达到之前自动重新连接以防断开。

reconnect_at_eof

如果设置,则将 EOF 视为错误并导致重新连接,这对于实时/无尽流很有帮助。

reconnect_on_network_error

在连接过程中出现 TCP/TLS 错误时自动重新连接。

reconnect_on_http_error

逗号分隔的 HTTP 状态码列表,用于在这些状态码时重新连接。列表可以包括具体状态码(例如 '503')或字符串 '4xx' / '5xx'。

reconnect_streamed

如果设置,则即使是流式传输/不可搜索的流也会在错误时重新连接。

reconnect_delay_max

设置放弃重新连接前的最大延迟时间(以秒为单位)。

reconnect_max_retries

设置连接重试的最大次数。默认未设置。

reconnect_delay_total_max

设置放弃重新连接前的最大总延迟(以秒为单位)。

respect_retry_after

如果启用,并遇到 Retry-After 头,将遵守其请求的重新连接延迟,而不是使用指数回退。这对于 429 和 503 错误很有用。默认启用。

listen

如果设置为 1,则启用实验性的 HTTP 服务器。当作为输出选项使用时,可用于发送数据;当作为输入选项使用时,可用于从客户端读取 HTTP POST 数据。 如果设置为 2,则启用实验性的多客户端 HTTP 服务器。这尚未在 ffmpeg.c 中实现,因此不得作为命令行选项使用。

# Server side (sending):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://服务器:端口

# Client side (receiving):
ffmpeg -i http://服务器:端口 -c copy somefile.ogg

# Client can also be done with wget:
wget http://服务器:端口 -O somefile.ogg

# Server side (receiving):
ffmpeg -listen 1 -i http://服务器:端口 -c copy somefile.ogg

# Client side (sending):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://服务器:端口

# Client can also be done with wget:
wget --post-file=somefile.ogg http://服务器:端口
resource

客户端请求的资源,当使用实验性 HTTP 服务器时。

reply_code

返回给客户端的 HTTP 状态码,当使用实验性 HTTP 服务器时。

short_seek_size

设置阈值(以字节为单位),在超过该阈值时应优先使用预读取而不是搜索和新的 HTTP 请求。这在读取包含小音频数据包的同时包含大视频数据包时很有用。

16.15.1 HTTP Cookies

某些 HTTP 请求会被拒绝,除非请求中传递了 cookie 值。cookies选项允许指定这些 cookies。至少,每个 cookie 必须指定一个值以及路径和域名。 与域名和路径匹配的 HTTP 请求将自动在 HTTP Cookie 头字段中包含 cookie 值。多个 cookies 可以用换行符分隔。

播放指定 cookies 的流所需的语法是:

ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8

16.16 Icecast

Icecast 协议 (流式传输至 Icecast 服务器)

此协议接受以下选项:

ice_genre

设置流的分类。

ice_name

设置流的名称。

ice_description

设置流的描述。

ice_url

设置流的网站 URL。

ice_public

设置流是否公开。 默认是 0(不公开)。

user_agent

覆盖 User-Agent 头。如果未指定,将使用格式如 "Lavf/<version>" 的字符串。

password

设置 Icecast 挂载点密码。

content_type

设置流的内容类型。如果内容类型不是 audio/mpeg,则必须设置该项。

legacy_icecast

启用对 Icecast 2.4.0 前版本的支持,这些版本使用的是 SOURCE 方法而不是 HTTP PUT 方法。

tls

建立与 Icecast 的 TLS(HTTPS)连接。

icecast://[用户名[:密码]@]服务器:端口/挂载点

16.17 ipfs

支持星际文件系统 (IPFS) 协议。可通过所谓的网关访问存储在 IPFS 网络中的文件,这些网关是 http(s) 端点。 此协议将 IPFS 原生协议 (ipfs:// 和 ipns://) 封装发送到这些网关。用户可以(并且应该)托管自己的节点,这意味着此协议将使用用户的本地网关访问 IPFS 网络中的文件。

此协议接受以下选项:

gateway

定义要使用的网关。如果未设置,协议将首先尝试通过查看$IPFS_GATEWAY, $IPFS_PATH$HOME/.ipfs/来定位本地网关,依次进行。

可以通过两种方式使用此协议。使用 IPFS:

ffplay ipfs://<hash>

或使用 IPNS 协议(IPNS 是可变的 IPFS):

ffplay ipns://<hash>

16.18 mmst

MMS(Microsoft Media Server)协议通过 TCP。

16.19 mmsh

MMS(Microsoft Media Server)协议通过 HTTP。

所需语法是:

mmsh://服务器[:端口][/应用][/播放路径]

16.20 md5

MD5 输出协议。

计算要写入数据的 MD5 哈希,并在关闭时将其写入指定的输出或 stdout(如果未指定)。它可用于测试复用器而无需实际写文件。

以下是一些示例。

# Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
ffmpeg -i input.flv -f avi -y md5:output.avi.md5

# Write the MD5 hash of the encoded AVI file to stdout.
ffmpeg -i input.flv -f avi -y md5:

请注意,某些格式(通常是 MOV)要求输出协议必须支持可搜索,因此它们将无法与 MD5 输出协议一起使用。

16.21 pipe

UNIX 管道访问协议。

从 UNIX 管道读取和写入数据。

接受的语法是:

pipe:[编号]

如果fd未指定,编号是管道的文件描述符对应的编号(例如 0 表示 stdin,1 表示 stdout,2 表示 stderr)。如果编号未指定,默认将使用 stdout 文件描述符写入,使用 stdin 读取。

例如,使用ffmpeg:

cat test.wav | ffmpeg -i pipe:0
# ...this is the same as...
cat test.wav | ffmpeg -i pipe:

从 stdin 读取ffmpeg:

ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
# ...this is the same as...
ffmpeg -i test.wav -f avi pipe: | cat > test.avi

此协议接受以下选项:

blocksize

设置 I/O 操作的最大块大小(以字节为单位)。默认值是INT_MAX,表示不限制请求的块大小。 将此值设置得合理较低可以提高用户终止请求的反应时间,这在数据传输速度较慢时很重要。

fd

设置文件描述符。

请注意,某些格式(通常是 MOV)要求输出协议必须支持可搜索,因此它们将无法与管道输出协议一起使用。

16.22 prompeg

Pro-MPEG 规范#3 第2版 FEC 协议。

Pro-MPEG CoP#3 FEC 是一种针对通过 RTP 发送的 MPEG-2 传输流的二维奇偶校验前向纠错机制。

此协议必须与rtp_mpegts复用器以及rtp协议一起使用。

所需语法是:

-f rtp_mpegts -fec prompeg=选项=... rtp://主机名:端口

目标 UDP 端口为port + 2用于列 FEC 流,另一个端口为port + 4用于行 FEC 流。

此协议接受以下选项:

l=n

列的数量(4-20,LxD <= 100)

d=n

行的数量(4-20,LxD <= 100)

示例用法:

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://主机名:端口

16.23 rist

可靠互联网传输流协议

接受的选项包括:

rist_profile

支持的值:

simple
main

这是默认值。

advanced
buffer_size

设置内部 RIST 缓冲区大小(以毫秒为单位)用于数据重传。 默认值为 0,即 librist 默认值(1 秒)。最大值为 30 秒。

fifo_size

设置 librist 接收器输出 fifo 的大小(以包数量计)。此值必须是 2 的幂。 默认值为 8192(与 librist 的默认值 1024 相比)。

overrun_nonfatal=1|0

在遇到 librist fifo 缓冲区溢出时保持运行。默认值为 0。

pkt_size

设置发送数据的最大数据包大小。默认值为 1316。

log_level

设置 RIST 日志消息的日志级别。仅在明确希望启用调试级消息或数据包丢失模拟时需要设置此项,否则会遵循常规的日志级别。

secret

设置重写加密密钥,默认未设置。

encryption

设置加密类型,默认未设置。 可接受的值是 128 和 256。

16.24 rtmp

实时消息传输协议。

实时消息传输协议 (RTMP) 用于通过 TCP/IP 网络流式传输多媒体内容。

所需语法是:

rtmp://[用户名:密码@]服务器[:端口][/应用][/实例][/播放路径]

接受的参数包括:

username

一个可选用户名(主要用于发布)。

password

一个可选密码(主要用于发布)。

server

RTMP 服务器的地址。

port

使用的 TCP 端口号(默认是 1935)。

app

访问的应用名称。通常对应于 RTMP 服务器上的应用安装路径 (例如/ondemand/, /flash/live/等)。您也可以通过rtmp_app选项覆盖从 URI 解析的值。

playpath

资源的路径或名称,相对于应用指定的路径,可以以 "mp4:" 开头。 您也可以通过, may be prefixed by "mp4:". You can override the value parsed from the URI through the rtmp_playpath选项覆盖从 URI 解析的值。

listen

充当服务器,监听传入连接。

timeout

等待传入连接的最长时间。隐含监听。

此外,可以通过命令行选项设置以下参数 (或者通过代码中的AVOption):

rtmp_app

连接到 RTMP 服务器上的应用的名称。此选项覆盖 URI 中指定的参数。

rtmp_buffer

设置客户端缓冲时间(以毫秒为单位)。默认值是 3000。

rtmp_conn

通过字符串解析的额外任意 AMF 连接参数,例如B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0。 每个值前缀为一个字符,表示类型,B 表示布尔值,N 表示数字,S 表示字符串,O 表示对象,Z 表示 null,后跟冒号。 对于布尔值,数据必须是 0 或 1,分别表示 FALSE 或 TRUE。 对于对象来说,数据必须是 0 或 1,分别表示结束或开始一个对象。 子对象中的数据项可以命名,通过在类型前加上 'N' 并在值之前指定名称来实现(即NB:myFlag:1)。此选项可以多次使用以构造任意 AMF 序列。

rtmp_enhanced_codecs

指定客户端广告支持的编码器的列表,用于增强的 RTMP 流。此选项应设置为多个四字符码值的逗号分隔列表,例如hvc1,av01,vp09用于多个编码器或hvc1用于只有一个编码器。指定的列表将在连接命令消息的 "fourCcLive" 属性中显示。

rtmp_flashver

运行 SWF 播放器的 Flash 插件版本。默认是 LNX 9,0,124,2。(发布时,默认是 FMLE/3.0 (compatible; <libavformat version>)。)

rtmp_flush_interval

在同一请求中刷新的数据包数量(仅限 RTMPT)。默认值是 10。

rtmp_live

指定媒体是实时流。实时流无法恢复或搜索。默认值是any,这意味着订阅者首先尝试播放播放路径中指定的实时流。如果没有找到该名称的实时流,则播放录制的流。其他可能的值是liverecorded.

rtmp_pageurl

嵌入媒体的网页 URL。默认不会发送任何值。

rtmp_playpath

要播放或发布的流标识符。此选项覆盖 URI 中指定的参数。

rtmp_subscribe

要订阅的实时流的名称。默认不会发送任何值。 只有在指定此选项或设置 rtmp_live 为 live 时才会发送。

rtmp_swfhash

解压缩 SWF 文件的 SHA256 哈希(32 字节)。

rtmp_swfsize

解压缩 SWF 文件的大小,SWF 验证所必需的。

rtmp_swfurl

媒体的 SWF 播放器的 URL。默认不会发送任何值。

rtmp_swfverify

指向播放器 SWF 文件的 URL,自动计算哈希值和大小。

rtmp_tcurl

目标流的 URL。默认为 proto://host[:port]/app。

tcp_nodelay=1|0

设置 TCP_NODELAY 以禁用 Nagle 算法。默认值是 0。

备注:当前写入套接字未优化以最小化系统调用,并降低了 TCP_NODELAY 的效率/效果。

例如,使用ffplay从 RTMP 服务器的应用程序 "vod" 读取名为 "sample" 的多媒体资源:

ffplay rtmp://myserver/vod/sample

要发布到密码保护的服务器,单独传递播放路径和应用名称:

ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/

16.25 rtmpe

加密实时消息传输协议。

加密实时消息传输协议 (RTMPE) 用于在标准加密原语内流式传输多媒体内容,包括 Diffie-Hellman 密钥交换和 HMACSHA256,生成一对 RC4 密钥。

16.26 rtmps

基于安全SSL连接的实时消息协议。

实时消息协议 (RTMPS) 用于通过加密连接传输多媒体内容。

16.27 rtmpt

通过HTTP传输的实时消息协议。

通过HTTP传输的实时消息协议 (RTMPT) 用于在HTTP请求中传输多媒体内容以穿越防火墙。

16.28 rtmpte

通过HTTP传输的加密实时消息协议。

通过HTTP传输的加密实时消息协议 (RTMPTE) 用于在HTTP请求中传输多媒体内容以穿越防火墙。

16.29 rtmpts

通过HTTPS传输的实时消息协议。

通过HTTPS传输的实时消息协议 (RTMPTS) 用于在HTTPS请求中传输多媒体内容以穿越防火墙。

16.30 libsmbclient

libsmbclient 允许操作 CIFS/SMB 网络资源。

需要以下语法。

smb://[[domain:]user[:password@]]server[/share[/path[/file]]]

该协议接受以下选项。

timeout

设置底层低级操作所使用的套接字I/O操作的超时时间(以毫秒为单位)。默认值为-1,表示未指定超时时间。

truncate

如果设置为1,写入时会截断现有文件。值为0时则防止截断。默认值为1。

workgroup

设置用于建立连接的工作组。默认情况下未指定工作组。

更多信息请参见:http://www.samba.org/.

16.31 libssh

通过libssh的安全文件传输协议

使用SFTP协议读取或写入远程资源。

需要以下语法。

sftp://[user[:password]@]server[:port]/path/to/remote/resource.mpeg

该协议接受以下选项。

timeout

设置底层低级操作所使用的套接字I/O操作的超时时间。默认值为-1,表示未指定超时时间。

truncate

如果设置为1,写入时会截断现有文件。值为0时则防止截断。默认值为1。

private_key

指定在授权过程中使用的包含私钥的文件路径。默认情况下,libssh将在~/.ssh/目录中搜索密钥。

示例:播放存储在远程服务器上的文件。

ffplay sftp://user:password@server_address:22/home/user/resource.mpeg

16.32 librtmp rtmp, rtmpe, rtmps, rtmpt, rtmpte

通过librtmp支持实时消息协议及其变体。

配置期间需要存在librtmp头文件和库。必须明确使用 "–enable-librtmp" 配置构建。如果启用,将替换本地RTMP协议。

该协议提供大多数客户端功能和一些服务器功能,支持RTMP、通过HTTP传输的RTMP (RTMPT)、加密RTMP (RTMPE)、SSL/TLS 加密RTMP (RTMPS) 及其加密类型的隧道变体 (RTMPTE, RTMPTS)。

所需语法为:

rtmp_proto://server[:port][/app][/playpath] options

其中,rtmp_proto是字符串 "rtmp", "rtmpt", "rtmpe", "rtmps", "rtmpte", "rtmpts" 中的一个,分别对应每种RTMP变体,且server, port, appplaypath具有与RTMP本地协议中指定相同的含义。options包含以空格分隔的选项列表,其格式为key=val.

更多信息请参见librtmp手册页 (man 3 librtmp)。

例如,实时向RTMP服务器流式传输文件:ffmpeg:

ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream

使用来播放同一流:ffplay:

ffplay "rtmp://myserver/live/mystream live=1"

16.33 rtp

实时传输协议。

RTP URL 所需语法为: rtp://hostname[:port][?option=val...]

port指定 RTP 端口。

支持以下 URL 选项:

ttl=n

设置TTL(生存时间)值(仅适用于多播)。

rtcpport=n

设置远程 RTCP 端口为n.

localrtpport=n

设置本地 RTP 端口为n.

localrtcpport=n'

设置本地 RTCP 端口为n.

pkt_size=n

将最大数据包大小(以字节为单位)设置为n.

buffer_size=size

设置最大 UDP 套接字缓冲区大小(以字节为单位)。

connect=0|1

在 UDP 套接字上执行connect()(如果设置为1)或不执行(如果设置为0)。

sources=ip[,ip]

列出允许的源IP地址。

block=ip[,ip]

列出禁止的源IP地址(阻止)。

write_to_source=0|1

如果设置为1,将数据包发送到最新接收到的数据包的源地址;如果设置为0,则发送到默认的远程地址。

localport=n

设置本地 RTP 端口为n.

localaddr=addr

用于发送数据包或加入多播组的网络接口的本地IP地址。

timeout=n

将套接字 I/O 操作的超时时间(以微秒为单位)设置为n.

这是一个已弃用的选项,应使用localrtpport

重要说明:

  1. 如果未设置rtcpport,则 RTCP 端口将设置为 RTP 端口值加1。
  2. 如果未设置localrtpport(本地 RTP 端口),则将为本地 RTP 和 RTCP 端口使用任何可用端口。
  3. 如果未设置localrtcpport(本地 RTCP 端口),则将其设置为本地 RTP 端口值加1。

16.34 rtsp

实时流协议。

RTSP 在 libavformat 中并非严格意义上的协议处理器,它是一个解复用器和复用器。解复用器支持普通RTSP(通过 RTP 传输数据;例如 Apple 和 Microsoft 使用)和 Real-RTSP (通过 RDT 传输数据)。

复用器可用于使用 RTSP ANNOUNCE 向支持它的服务器发送流(当前支持 Darwin Streaming Server 和 Mischa Spiegelmock 的 RTSP 服务器)。RTSP 服务器).

RTSP URL 的所需语法是:

rtsp://hostname[:port]/path

选项可以在ffmpeg/ffplay命令行中设置,也可以通过AVOptions 或avformat_open_input.

16.34.1 复用器

支持以下选项。

rtsp_transport

设置 RTSP 传输协议。

可接受以下值:

udp

使用 UDP 作为底层传输协议。

tcp

使用 TCP(在 RTSP 控制通道内插入)作为底层传输协议。

默认值为:0’.

rtsp_flags

设置 RTSP 标志。

接受以下值:

latm

对于AAC,使用 MP4A-LATM 数据化而不是 MPEG4-GENERIC。

rfc2190

对于 H.263,使用 RFC 2190 数据化而不是 RFC 4629。

skip_rtcp

不发送 RTCP 发送方报告。

h264_mode0

对于 RTP 输入的 H.264,使用模式0。

send_bye

完成时发送 RTCP BYE 数据包。

默认值为:0’.

min_port

设置最小本地 UDP 端口。默认值为5000。

max_port

设置最大本地 UDP 端口。默认值为65000。

buffer_size

设置最大套接字缓冲区大小(以字节为单位)。

pkt_size

设置最大发送数据包大小(以字节为单位)。默认值为1472。

16.34.2 解复用器

支持以下选项。

initial_pause

如果设置为1,则不立即开始播放流。默认值为0。

rtsp_transport

设置 RTSP 传输协议。

可接受以下值:

udp

使用 UDP 作为底层传输协议。

tcp

使用 TCP(在 RTSP 控制通道内插入)作为底层传输协议。

udp_multicast

使用 UDP 多播作为底层传输协议。

http

使用 HTTP 隧道作为底层传输协议,这有助于穿越代理。

https

使用 HTTPs 隧道作为底层传输协议,这有助于穿越代理并常用于安全考虑。

可以指定多个底层传输协议,在这种情况下,会依次尝试(如果一个失败,则尝试下一个)。对于复用器,仅支持‘tcp’和‘udp’选项。

rtsp_flags

设置 RTSP 标志。

接受以下值:

filter_src

仅接受来自协商的对等地址和端口的数据包。

listen

作为服务器,监听传入连接。

prefer_tcp

如果 TCP 可用,优先为 RTP 传输选择 TCP。

satip_raw

导出原始 MPEG-TS 流而非解复用。此标志将直接写出原始流,并保留原始 PAT/PMT/PID。

默认值为:none’.

allowed_media_types

设置要从服务器接受的媒体类型。

以下标志被接受:

video
audio
data
subtitle

默认情况下接受所有媒体类型。

min_port

设置最小本地 UDP 端口。默认值为5000。

max_port

设置最大本地 UDP 端口。默认值为65000。

listen_timeout

设置建立初始连接的最大超时时间(以秒为单位)。设置listen_timeout> 0 则将rtsp_flags设置为:listen。默认值为-1 ,即在设置为‘listen’模式时无限超时。

reorder_queue_size

设置缓冲数据包的数量,以处理乱序数据包。

timeout

设置套接字 TCP I/O 超时时间(以微秒为单位)。

user_agent

覆盖 User-Agent 头。如果未指定,使用 libavformat 标识符字符串。

buffer_size

设置套接字缓冲区的最大大小(以字节为单位)。

通过 UDP 接收数据时,解复用器尝试重新排序接收的数据包(因为它们可能乱序到达,或者某些数据包可能完全丢失)。此功能可以通过将最大解复用延迟设置为零禁止(通过 AVFormatContext 的max_delay字段)。

观看多比特率 Real-RTSP 流时,可使用ffplay选择要显示的流,分别通过-vst n-ast n选择视频和音频,并可以通过按下va.

16.34.3 示例

以下示例均使用ffplayffmpeg工具。

  • 通过UDP观看流,最大乱序延迟为0.5秒:
    ffplay -max_delay 500000 -rtsp_transport udp rtsp://server/video.mp4
    
  • 通过HTTP隧道观看流:
    ffplay -rtsp_transport http rtsp://server/video.mp4
    
  • 实时发送流到RTSP服务器,以供其他人观看:
    ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • 实时接收流:
    ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp output
    

16.35 sap

会话公告协议(RFC 2974)。这在libavformat中技术上不是协议处理器,而是一个复用器和解复用器。它用于RTP流的信令,定期在单独的端口上宣布流的SDP。

16.35.1 复用器

提供给复用器的SAP网址语法为:

sap://destination[:port][?options]

RTP数据包将发送到destination端口端口, 如果未指定端口,默认使用端口5004。, or to port 5004 if no port is specified. options&-分隔的列表。支持以下选项:

announce_addr=address

指定发送公告的目标IP地址。 如果省略,公告发送到常用的SAP 公告多播地址224.2.127.254 (sap.mcast.net) 或者 如果destination是IPv6地址,则发送到 ff0e::2:7ffe。

announce_port=port

指定发送公告的端口,如果未指定默认使用9875。

ttl=ttl

为公告和RTP数据包指定存活时间值,默认值为255。

same_port=0|1

如果设置为1,则对所有 RTP 流使用同一对端口。如果为零(默认值),则所有流将发送到唯一的端口,每个流使用比前一个流高2的端口。 VLC/Live555 需要将其设置为1才能接收流。 libavformat 的 RTP 堆栈需要所有流发送到唯一端口。

以下为示例命令行。

在本地子网中广播流,以便在VLC中观看:

ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1

同样地,用于在ffplay:

ffmpeg -re -i input -f sap sap://224.0.0.255

观看,并用于在ffplay中通过IPv6观看:

ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]

16.35.2 解复用器

提供给解复用器的SAP网址语法为:

sap://[address][:port]

address是监听公告的多播地址,如果省略,默认使用224.2.127.254 (sap.mcast.net)。port是监听的端口,如果省略则为9875。

解复用器监听给定的地址和端口上的公告。一旦收到公告,它会尝试接收该特定流。

以下为示例命令行。

回放在通常的SAP多播地址上宣布的第一个流:

ffplay sap://

回放在默认的IPv6 SAP多播地址上宣布的第一个流:

ffplay sap://[ff0e::2:7ffe]

16.36 sctp

流控制传输协议。

接受的 URL 语法为:

sctp://主机:端口[?选项]

协议接受以下选项:

listen

如果设置任何值,则监听传入连接。默认情况下为传出连接。

max_streams

设置最大流数。默认未设置限制。

16.37 srt

通过 libsrt 的 Haivision 安全可靠传输协议。

支持的 SRT URL 语法为:

srt://主机名:端口[?选项]

选项包含形式为 & 分隔的选项列表=.

选项 srt://主机名:端口

选项包含列表 ‘- ’ 选项。

协议接受以下选项。

connect_timeout=毫秒

连接超时;SRT 无法在往返时间 (RTT) 大于 1500 毫秒时连接 (需要 2 次握手交换),默认连接超时为 3 秒。此选项适用于呼叫者和汇聚连接模式。在汇聚模式下,连接超时为该选项设定值的 10 倍(可用于解决早期版本中的连接问题)。

ffs=字节

飞跃标志大小(窗口大小),以字节为单位。FFS 实际上是一个 内部参数,您应该将其设置为不少于recv_buffer_sizemss。默认值 相对较大,因此除非设置一个非常大的接收缓冲区,否则您无需更改此选项。默认值为 25600。

inputbw=字节/秒

发送方标称输入速率,以字节每秒表示。与oheadbw一起使用,当maxbw设置为相对值 (0) 时,用于 计算发送恢复数据包时的最大发送速率:inputbw * (100 + oheadbw) / 100 如果inputbw未设置而maxbw设置为相对值 (0),实际输入速率将在 库内进行评估。默认值为 0。

iptos=tos

IP 服务类型。仅适用于发送方。默认值为 0xB8。

ipttl=ttl

IP 生存时间。仅适用于发送方。默认值为 64。

latency=微秒

基于时间戳的数据包传递延迟。 用于吸收丢失数据包重传的突发。 此标志会同时设置rcvlatencypeerlatency为相同值。注意,在 1.3.0 版本之前 这是唯一可以设置延迟的标志,但 其效果等同于设置peerlatency, 当一方为发送方且rcvlatency当一方为接收方,而双向流的 发送不受支持。

listen_timeout=微秒

设置套接字监听超时。

maxbw=字节/秒

最大发送带宽,以字节每秒为单位。 -1 无限 (CSRTCC 限制为 30mbps) 0 相对于输入速率(见inputbw) >0 绝对限制值 默认值为 0(相对值)

mode=caller|listener|rendezvous

连接模式。caller打开客户端连接。listener启动服务端以监听传入连接。rendezvous使用汇聚连接模式。 默认值为 caller。

mss=字节

最大分段大小,以字节为单位。用于缓冲区分配和 基于假设完全填充的数据包的分组计数进行的速率计算。最小的 MSS 在 各方之间使用。这在整个互联网中默认为 1500。 这是最大 UDP 数据包的大小,通常只能减少,除非您有一些 不寻常的专用网络设置。默认值为 1500。

nakreport=1|0

如果设置为 1,接收方将定期发送 ‘UMSG_LOSSREPORT’ 消息 直到丢失数据包重新传输或 被有意丢弃。默认值为 1。

oheadbw=百分比

超过输入速率的恢复带宽开销,以百分比表示。 参见inputbw。默认值为 25%。

passphrase=字符串

HaiCrypt 加密/解密密码字符串,长度 为 10 到 79 个字符。该密码是发送方和接收方之间共享的 密钥。它用于通过 PBKDF2(基于密码的密钥导出函数)生成加密密钥。 仅当pbkeylen为非零时使用。 在接收方上仅当接收到加密数据时才使用。 配置的密码不可恢复(只能写入)。

enforced_encryption=1|0

如果为 true,则连接双方必须设置相同的密码 (包括空密码,即没有加密)。如果密码不匹配或者只有一方未加密, 则连接将被拒绝。默认值为 true。

kmrefreshrate=数据包

传输了特定数量的数据包后加密密钥将切换到新密钥。默认值为 -1。 -1 表示自动(在 srt 库中为 0x1000000)。此选项的范围为 0 到INT_MAX.

kmpreannounce=数据包

传输新加密密钥和实现密钥切换之间的间隔。这一间隔 也适用于切换后旧加密密钥被注销之前的后续间隔。默认值为 -1。 -1 表示自动(在 srt 库中为 0x1000)。此选项的范围为 整数值从 0 -INT_MAX.

snddropdelay=微秒

发送方丢弃数据包前的额外延迟。这一延迟 被添加到默认丢弃延迟时间间隔值。

特殊值 -1:发送方完全不丢弃数据包。

payload_size=字节

设置在实时模式下单次发送函数调用中转移的最大声明数据包大小。 如果此值不起作用,则使用 0(实时模式的默认值)。 默认为 -1(自动),这通常意味着 MPEG-TS; 如果您打算使用 SRT 发送其他类型的有效负载,例如,将实时流包装在非常小的帧中, 那么可以使用更大的最大帧大小,但不得超过 1456 字节。

pkt_size=字节

别名为‘payload_size’.

peerlatency=微秒

发送方设置的延迟值(如rcvlatency中描述)

pbkeylen=的最小值。

发送方加密密钥长度,以字节为单位。 只能设置为 0、16、24 和 32。 如果不为 0,则启用发送方加密。 接收方不需要设置(设置为 0), 密钥大小通过 HaiCrypt 握手从发送方获取。 默认值为 0。

rcvlatency=微秒

自数据包发送之时到其通过接收函数 传递到接收方应用程序之时应该经过的时间。 该时间应该是足够大的缓冲时间,以涵盖 发送所需的时间、意外延长的 RTT 时间以及丢失 UDP 数据包重新传输所需的时间。有效的延迟值为当前选项值与接收方的peerlatency设置的值的较大值。在 1.3.0 版本之前,此选项 只能通过latency.

recv_buffer_size=字节

设置 UDP 接收缓冲区大小(以字节为单位)。

send_buffer_size=字节

设置 UDP 发送缓冲区大小(以字节为单位)。

timeout=微秒

为读取、写入和连接操作设置超时上限。 注意,SRT 库有内部超时,且可单独控制, 这里设置的值仅作为这些超时的上限。

tlpktdrop=1|0

丢弃过期数据包。当在接收方启用时, 它会跳过未及时交付的丢失数据包并 将随后的数据包传递到应用程序。 它还向发送方发送伪 ACK。 当在发送方启用且接收方对等方支持时, 发送方将丢弃无机会及时交付的旧数据包。 如果接收方支持,则会在发送方上自动启用。

sndbuf=字节

设置发送缓冲区大小,以字节为单位。

rcvbuf=字节

设置接收缓冲区大小,以字节为单位。

接收缓冲区不得大于ffs.

lossmaxttl=数据包

重新排序容忍度可能增长的最大值。当 重新排序容忍度 > 0 时,丢失报告会被延迟 直到接收到指定数量的数据包。 每当由于非重传原因(即,UDP 数据包 无序)接收到延迟数据包时, 重新排序容忍度将增加,但不会超过该选项的值。 默认值为 0,这表示此机制关闭, 当序列中出现“间隙”时,丢失报告会立即发送。

minversion

对等方所需的最低 SRT 版本。如果对等方 不满足最低版本要求,则连接将被拒绝。

版本格式以十六进制形式为 0xXXYYZZ,对应人类可读形式中的 x.y.z。

streamid=字符串

一个长度最多为 512 个字符的字符串,可在连接前在套接字上设置。 这个流 ID 可由监听方通过从 srt_accept 返回的套接字检索, 此套接字是由设置了该流 ID 的套接字连接的。 SRT 不强制规定此字符串内容的特殊含义。 此选项在汇聚模式中没有意义; 其结果可能是简单的一方会覆盖另一方的值, 具体取决于运气决定哪一方会赢。

srt_streamid=字符串

别名为‘streamid’以避免与 ffmpeg 命令行选项冲突。

smoother=实时|文件

用于该套接字传输的 Smoother 类型,负责传输与拥塞 控制。双方必须完全使用相同的 Smoother 类型, 否则连接会被拒绝。

messageapi=1|0

设置后,此套接字使用消息 API,否则使用缓冲区 API。请注意,在实时模式下(见transtype),只有 消息 API 可用。在文件模式下,您可以选择使用以下一种模式:

流 API(默认,这一选项为 False 时)。在此模式下, 您可以通过一条发送指令发送任意数量的数据,甚至可以使用 读取文件的专用函数。内部设施将负责任何速度与 拥塞控制。在接收时,您也可以接收任意数量的数据,未提取 的数据将在下次调用时等待。流模式中没有数据部分的边界。

消息 API。在此模式下,单条发送指令 会传递边界清晰的一块数据(消息)。不同于实时模式, 此消息可能跨越多个 UDP 数据包,唯一的大小限制是它应在 发送缓冲区内。接收方需要使用足够大的缓冲区来接收消息, 否则消息不会被放弃。如果消息不完整(没接收到全部数据包 或存在丢包),则不会被放弃。

transtype=实时|文件

设置套接字的传输类型,特别是,设置此选项 会同时设置多个其他参数的默认值, 以满足某种特定传输类型的要求。

实时:将选项设置为实时传输所需的参数。在此模式下,您应 通过单条发送指令仅发送可装入一个 UDP 数据包的数据量, 且受限于初始定义在payload_size中的值(此模式下的默认值为 1316)。此模式下无速度控制,仅 带宽控制(如果已配置)以避免超出带宽, 包括重传与控制数据包的开销。

文件:将选项设置为非实时传输所需的参数。参见messageapi用于进一步说明

linger=

套接字在关闭时等待未发送数据的秒数。 默认值为-1。-1表示自动(实时模式下关闭为0秒,文件模式下开启为180秒)。 此选项的范围是0至整数。INT_MAX.

tsbpd=1|0

如果为true,则使用基于时间戳的包递送模式。默认行为取决于传输类型:实时模式下启用,文件模式下禁用。

更多信息请参阅:https://github.com/Haivision/srt.

16.38 srtp

安全实时传输协议。

可接受的选项有:

srtp_in_suite
srtp_out_suite

选择输入和输出编码套件。

支持的值:

AES_CM_128_HMAC_SHA1_80
SRTP_AES128_CM_HMAC_SHA1_80
AES_CM_128_HMAC_SHA1_32
SRTP_AES128_CM_HMAC_SHA1_32
srtp_in_params
srtp_out_params

设置输入和输出编码参数,这些参数是通过二进制块的base64编码表示表达的。此二进制块的前16字节用作主密钥,接下来的14字节用作主盐值。

16.39 subfile

虚拟提取文件或其他流的片段。 底层流必须是可搜索的。

接受的选项:

start

提取片段的起始偏移量(字节)。

end

提取片段的结束偏移量(字节)。 如果设置为0,则提取至文件结束。

示例:

从DVD VOB文件中提取章节(外部获得起始和结束扇区并乘以2048):

subfile,,start,153391104,end,268142592,,:/media/dvd/VIDEO_TS/VTS_08_1.VOB

直接从TAR档案中播放AVI文件:

subfile,,start,183241728,end,366490624,,:archive.tar

从起始偏移到结束播放一个MPEG-TS文件:

subfile,,start,32815239,end,0,,:video.ts

16.40 tee

将输出写入多个协议。各单独输出以“|”分隔。

tee:file://path/to/local/this.avi|file://path/to/local/that.avi

16.41 tcp

传输控制协议。

TCP URL的必需语法是:

tcp://主机名:端口[?选项]

选项包含由“&”分隔的选项列表,格式如下=.

以下是支持的选项列表。

listen=2|1|0

监听传入连接。0 禁用监听,1 启用单客户端模式监听,2 启用多客户端模式监听。默认值为0。

local_addr=地址

用于TCP套接字连接的本地网络接口IP地址。

local_port=端口

用于TCP套接字连接的本地端口。

timeout=微秒

设置错误超时时间(微秒)。

此选项仅在读取模式下相关:如果在此时间间隔内没有数据到达,则引发错误。

listen_timeout=毫秒

设置监听超时时间(毫秒)。

recv_buffer_size=字节

设置接收缓冲区大小(字节)。

send_buffer_size=字节

设置发送缓冲区大小(字节)。

tcp_nodelay=1|0

设置TCP_NODELAY以禁用Nagle算法。默认值为0。

备注:写入套接字当前未优化以减少系统调用,这减少了TCP_NODELAY的效率或效果。

tcp_mss=字节

设置用于发送TCP数据包的最大段大小(字节)。

下面的示例显示如何使用设置监听TCP连接ffmpeg,然后通过ffplay:

ffmpeg -i 输入 -f 格式 tcp://主机名:端口?listen
ffplay tcp://主机名:端口

16.42 tls

传输层安全(TLS)/ 安全套接字层(SSL)

TLS/SSL URL的必需语法是:

tls://主机名:端口[?选项]

以下参数可通过命令行选项设置 (或通过代码中的AVOptions):

ca_file, cafile=文件名

包含证书颁发机构(CA)根证书的文件,视为可信。 如果链接的TLS库包含默认值,则可能不需要指定此文件以便验证正常工作,但并非所有库和设置都内置默认值。 文件必须为OpenSSL PEM格式。

tls_verify=1|0

如果启用,它将试图验证与之通信的对方。 注意,如果使用OpenSSL,目前仅确保对方证书由CA数据库中的一个根证书签署,但未验证证书是否真正 与我们尝试连接的主机名匹配。(使用其他后端时,主机名也会被验证。)

由于许多情况下需要提供CA数据库,因此默认情况下禁用此功能。

cert_file, cert=文件名

包含与对方握手时使用的证书文件。 (作为服务器运行时,在监听模式下,通常此证书是对方要求的,而客户端证书仅在某些 设置中需要。)

key_file, key=文件名

包含证书对应的私钥文件。

listen=1|0

如果启用,则监听提供的端口,进行连接,并在握手中假定服务器角色而不是客户端角色。

http_proxy

通过HTTP代理进行隧道传输,例如http://example.com:1234。 代理必须支持CONNECT方法。

示例命令行:

创建一个提供输入流的TLS/SSL服务器。

ffmpeg -i 输入 -f 格式 tls://主机名:端口?listen&cert=server.crt&key=server.key

使用ffplay:

ffplay tls://主机名:端口

16.43 udp

用户数据报协议。

UDP URL的必需语法是:

udp://主机名:端口[?选项]

选项包含一个由“&”分隔的选项列表,格式如下=.

如果系统启用了线程,则会使用循环缓冲区来存储传入数据,这可减少 由于UDP套接字缓冲区溢出而导致的数据丢失。选项fifo_sizeoverrun_nonfatal与此缓冲区相关。

以下是支持的选项列表。

buffer_size=大小

设置UDP套接字的最大缓冲区大小(字节)。用于设置接收或发送缓冲区大小,具体取决于套接字的用途。 默认值为输出32 KB,输入384 KB。另请参阅fifo_size.

bitrate=码率

如果设置为非零值,且输入存在足够包,则输出将具有指定的恒定码率。

burst_bits=比特

码率时,这指定了数据包突发中的最大比特数。

localport=端口

覆盖绑定的本地UDP端口。

localaddr=地址

发送数据包或加入多播组时使用的本地网络接口IP地址。

pkt_size=大小

设置UDP数据包的大小(字节)。

reuse=1|0

明确允许或禁止重用UDP套接字。

ttl=TTL

设置存活时间值(仅针对多播)。

connect=1|0

connect()初始化UDP套接字。在这种情况下,目的地址不能在后期通过ff_udp_set_remote_url进行更改。 如果启动时未知目的地址,此选项也可以在ff_udp_set_remote_url中指定。 这允许通过getsockname发现数据包的来源地址,并使"目的地不可达" 引发AVERROR(ECONNREFUSED)。 对接收而言,这带来的好处是仅接收来自指定对等地址/端口的数据包。

sources=地址[,地址]

仅接收从指定地址发送的数据包。对于多播,也仅从这些地址订阅多播流量。

block=地址[,地址]

忽略从指定地址发送的数据包。对于多播,也排除这些源地址的多播订阅。

fifo_size=单位

设置UDP接收循环缓冲区大小,单位为具有188字节大小的数据包数量。如果未指定,默认为7*4096。

overrun_nonfatal=1|0

在UDP接收循环缓冲区溢出情况下存活。默认值为0。

timeout=微秒

设置错误超时时间(微秒)。

此选项仅在读取模式下相关:如果在此时间间隔内没有数据到达,则引发错误。

broadcast=1|0

明确允许或禁止UDP广播。

注意,在具有广播风暴保护的网络上广播可能无法正确工作。

16.43.1 示例

  • 使用ffmpeg通过UDP流式传输至远程终端:
    ffmpeg -i 输入 -f 格式 udp://主机名:端口
    
  • 使用ffmpeg以188字节大小的UDP数据包和大输入缓冲区以mpegts格式通过UDP流式传输:
    ffmpeg -i 输入 -f mpegts udp://主机名:端口?pkt_size=188&buffer_size=65535
    
  • 使用ffmpeg从远程终端通过UDP接收:
    ffmpeg -i udp://[多播地址]:端口 ...
    

16.44 unix

Unix本地套接字

Unix套接字URL的必需语法是:

unix://文件路径

以下参数可以通过命令行选项设置 (或通过代码中的AVOptions):

timeout

超时时间(毫秒)。

listen

以监听模式创建Unix套接字。

16.45 zmq

使用libzmq库的ZeroMQ异步消息。

此库支持复播流式传输多个客户端,不依赖外部服务器。

用于流式传输或连接到流所需的语法是:

zmq:tcp://ip-address:port

示例: 在5555端口创建本地流:

ffmpeg -re -i input -f mpegts zmq:tcp://127.0.0.1:5555

多个客户端可以通过以下方式连接到流:

ffplay zmq:tcp://127.0.0.1:5555

流式传输多个客户端通过ZeroMQ的发布-订阅模式实现。 服务器端绑定到一个端口并发布数据。客户端连接服务器(通过IP地址/端口)并订阅流。 通常,服务器和客户端的启动顺序并不重要。

FFmpeg必须启用"–enable-libzmq"选项以支持此协议。

选项可以设置在ffmpeg/ffplay命令行。支持以下选项:

pkt_size

强制设置用于发送/接收数据的最大数据包大小。默认值为131,072字节。在服务器端,这设置了通过ZeroMQ发送数据包的最大大小。在客户端,这设置了接收数据包的内部缓冲区大小。注意,客户端的pkt_size应与服务器的pkt_size相等或更大。否则接收到的消息可能会被截断,导致解码错误。

17 设备选项

libavdevice库提供与libavformat相同的接口。即,输入设备被视为解复用器, 输出设备被视为复用器,其接口和泛设备选项与libavformat提供的选项相同。 具体参阅ffmpeg-formats手册。

此外,每个输入或输出设备可以支持所谓的私有选项, 这些选项是针对该组件的特殊选项。

可以通过在FFmpeg工具中指定 -选项 来设置选项,或者直接在设备中显式设置值AVFormatContext选项或使用libavutil/opt.hAPI进行编程使用。

18 输入设备

输入设备是在FFmpeg中配置的元素,允许访问来自连接到系统的多媒体设备的数据。

配置FFmpeg构建时,所有支持的输入设备均默认启用。 可以使用配置选项 "–list-indevs" 列出所有可用设备。

可以使用配置选项 "–disable-indevs" 禁用所有输入设备,并通过 选项 "–enable-indev=INDEV"有选择地启用某些输入设备或使用选项 "–disable-indev=INDEV".

ff* 工具的选项 "-devices" 将显示支持的输入设备的列表。

以下是当前可用输入设备的描述。

18.1 alsa

ALSA(高级Linux音频架构)输入设备。

在配置时需要在您的系统上安装libasound才能启用此输入设备。

此设备允许从ALSA设备捕获数据。捕获设备的名称必须是一个ALSA卡标识符。

ALSA标识符的语法为:

hw:[,设备[,子设备]]

其中设备子设备组件是可选的。

三个参数(按顺序:,开发,子设备) 指定卡号或标识符、设备号和子设备号 (-1 表示任意)。

要查看系统当前识别的卡片列表,请检查以下文件/proc/asound/cards/proc/asound/devices.

例如,要使用ffmpeg从卡 ID 为 0 的 ALSA 设备捕获,您可以运行以下命令:

ffmpeg -f alsa -i hw:0 alsaout.wav

更多信息请参阅:http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html

18.1.1 选项

sample_rate

设置以赫兹为单位的采样率。默认值为 48000。

channels

设置频道数量。默认值为 2。

18.2 android_camera

Android 相机输入设备。

此输入设备使用 Android Camera2 NDK API,该 API 可用于 API 级别 24 及以上的设备。android_camera 的可用性在配置期间自动检测。

该设备允许从 Android 设备上的所有集成到 Camera2 NDK API 中的相机捕获。

可用的摄像头在内部枚举,并可以使用camera_index参数进行选择。输入文件字符串被丢弃。

通常,后置摄像头的索引为 0,而前置摄像头的索引为 1。

18.2.1 选项

video_size

设置视频尺寸,以字符串形式,如 640x480 或 hd720。如果请求的视频尺寸不可用或默认,将回退到 Android 报告的第一个可用配置。

framerate

设置视频帧率。如果请求的帧率不可用或默认(-1),将回退到 Android 报告的第一个可用配置。

camera_index

设置要使用的摄像头索引。默认值为 0。

input_queue_size

设置最大帧缓冲数量。默认值为 5。

18.3 avfoundation

AVFoundation 输入设备。

AVFoundation 是 Apple 推荐的在 OSX >= 10.7 以及 iOS 上进行流捕获的框架。

输入文件必须使用以下语法给出:

-i "[[VIDEO]:[AUDIO]]"

第一个条目选择视频输入,而后一个条目选择音频输入。 流必须通过设备名称或设备索引指定,如设备列表所示。 此外,可以使用 -video_device_index <INDEX> 和/或 -audio_device_index <INDEX> ,覆盖输入文件名中给出的任何设备名称或索引。

所有可用设备可以使用以下命令枚举:-list_devices true,列出所有设备名称和对应的索引。

有两个设备名称别名:

default

选择相应类型的 AVFoundation 默认设备。

none

不录制相应的媒体类型。 这相当于指定一个空的设备名称或索引。

18.3.1 选项

AVFoundation 支持以下选项:

-list_devices <TRUE|FALSE>

如果设置为 true,则会列出所有可用输入设备,显示所有设备名称和索引。

-video_device_index <INDEX>

通过其索引指定视频设备。覆盖输入文件名中给出的任何设置。

-audio_device_index <INDEX>

通过其索引指定音频设备。覆盖输入文件名中给出的任何设置。

-pixel_format <FORMAT>

请求视频设备使用特定的像素格式。 如果指定的格式不受支持,将列出可用格式,并使用列表中的第一个格式。 可用的像素格式包括:monob, rgb555be, rgb555le, rgb565be, rgb565le, rgb24, bgr24, 0rgb, bgr0, 0bgr, rgb0, bgr48be, uyvy422, yuva444p, yuva444p16le, yuv444p, yuv422p16, yuv422p10, yuv444p10, yuv420p, nv12, yuyv422, gray

-framerate

设置捕获帧率。默认值为ntsc,对应的帧率为30000/1001.

-video_size

设置视频帧尺寸。

-capture_cursor

捕获鼠标指针。默认值为 0。

-capture_mouse_clicks

捕获屏幕鼠标点击事件。默认值为 0。

-capture_raw_data

捕获设备原始数据。默认值为 0。 使用此选项可能会收到传递到 AVFoundation 框架的底层数据。例如,对于发送原始 DV 数据到框架的多路复用设备(如磁带式摄像机),将此选项设置为 false 会导致仅捕获指定像素格式的视频帧,而设置为 true 则会接收未经处理的原始 DV 数据流。

18.3.2 示例

  • 打印 AVFoundation 支持的设备列表并退出:
    $ ffmpeg -f avfoundation -list_devices true -i ""
    
  • 从视频设备 0 和音频设备 0 录制视频到 out.avi:
    $ ffmpeg -f avfoundation -i "0:0" out.avi
    
  • 从视频设备 2 和音频设备 1 录制视频到 out.avi:
    $ ffmpeg -f avfoundation -video_device_index 2 -i ":1" out.avi
    
  • 使用系统默认视频设备录制视频(像素格式为 bgr0),并不录制任何音频到 out.avi:
    $ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
    
  • 从合适的输入设备录制原始 DV 数据,并将输出写入 out.dv:
    $ ffmpeg -f avfoundation -capture_raw_data true -i "zr100:none" out.dv
    

18.4 bktr

BSD 视频输入设备。已弃用并将被移除——如果您有兴趣维护它,请联系开发者。

18.4.1 选项

framerate

设置帧率。

video_size

设置视频帧尺寸。默认值为vga.

standard

可用值为:

pal
ntsc
secam
paln
palm
ntscj

18.5 decklink

decklink 输入设备为 Blackmagic DeckLink 设备提供捕获功能。

要启用此输入设备,需要下载 Blackmagic DeckLink SDK,并且需要使用适当的--extra-cflags--extra-ldflags进行配置。 在 Windows 上,需使用以下工具处理 IDL 文件:widl.

DeckLink 对其支持的格式非常挑剔。可以使用raw_format设置输入的像素格式。 帧率和视频尺寸必须通过-list_formats 1确定您的设备支持的设置。 音频采样率始终为 48 kHz,频道数量可为 2、8 或 16。请注意,所有音频频道都被捆绑在一个单一音轨中。

18.5.1 选项

list_devices

如果设置为true,显示设备列表并退出。 默认为false。此选项已弃用,请使用 ffmpeg 的-sources选项列出可用输入设备。

list_formats

如果设置为true,显示支持的格式列表并退出。 默认为false.

format_code <FourCC>

此项将输入视频格式设置为 FourCC 提供的格式。要查看设备支持的值,请使用list_formats。 请注意有一个 FourCC'pal '也可以通过pal(3 个字母)来使用。 默认行为是自动检测输入视频格式(如果硬件支持)。

raw_format

设置捕获视频的像素格式。 可用值为:

auto

这是默认值,表示使用格式自动检测时的 8 位 YUV 422 或 8 位 ARGB,否则为 8 位 YUV 422。

uyvy422

8 位 YUV 422。

yuv422p10

10 位 YUV 422。

argb

8 位 RGB。

bgra

8 位 RGB。

rgb10

10 位 RGB。

teletext_lines

如果设置为非零,将从垂直辅助数据中捕获额外的 Teletext 流。支持 SD PAL(576i)和 HD(1080i 或 1080p)源。在 HD 源情况下会解码 OP47 数据包。

此选项是捕获的 SD PAL VBI 行的位掩码,具体为第 6 行至 22 行以及第 318 行至 335 行。位掩码中的 LSB 为第 6 行。没有包括 Teletext 信息的选择的行将被忽略。您可以使用all常量选择所有可能的行,或者standard跳过第 6 行、第 318 行和第 319 行,这些行不适用于所有接收器。

对于 SD 源,ffmpeg 需要采用--enable-libzvbi编译。 对于 HD 源,在较旧(4K 之前) DeckLink 卡型号上您必须在 10 位模式下捕获。

channels

定义要捕获的音频频道数量。必须为‘2’, ‘8’或‘16’。 默认为‘2’.

duplex_mode

设置 decklink 设备双向 / 配置模式。必须为‘unset’, ‘half’, ‘full’, ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’。 默认为‘unset’.

注意:DeckLink SDK 11.0 将 duplex 属性替换为 profile 属性。 对于 DeckLink Duo 2 和 DeckLink Quad 2,profile 在使用相同连接器的任意 2 个子设备之间共享。 对于 DeckLink 8K Pro,profile 在所有 4 个子设备之间共享。因此 DeckLink 8K Pro 支持四个 profiles。

DeckLink SDK >= 11.0 的 DeckLink 8K Pro 提供以下有效模式:‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half

DeckLink Quad 2 和 DeckLink Duo 2 的有效模式:‘half’, ‘full

timecode_format

指定包含在帧和视频流元数据中的时间码类型。必须为‘none’, ‘rp188vitc’, ‘rp188vitc2’, ‘rp188ltc’, ‘rp188hfr’, ‘rp188any’, ‘vitc’, ‘vitc2’,或‘serial’。 默认为‘none’(未包含)。

为了正确支持 50/60 fps 的时间码,‘rp188any’ 的查询时间码类型的顺序是 HFR,VITC1,VITC2 和 LTC 用于 >30 fps 的内容。 请注意,这与 DeckLink API 使用的顺序稍有不同,DeckLink API 的顺序为 HFR,VITC1,LTC,VITC2。

video_input

设置视频输入源。必须为‘unset’, ‘sdi’, ‘hdmi’, ‘optical_sdi’, ‘component’, ‘composite’或‘s_video’。 默认为‘unset’.

audio_input

设置音频输入源。必须为‘unset’, ‘embedded’, ‘aes_ebu’, ‘analog’, ‘analog_xlr’, ‘analog_rca’或‘microphone’。 默认为‘unset’.

video_pts

设置视频数据包时间戳来源。必须为‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。 默认为‘video’.

audio_pts

设置音频数据包时间戳来源。必须为‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。 默认为‘audio’.

draw_bars

如果设置为‘true’,在信号丢失情况下绘制彩条。 默认为‘true’。 此选项已弃用,请使用signal_loss_action选项。

signal_loss_action

设置信号丢失情况下的操作。接受以下值之一:

1, none

信号丢失时不采取任何行动。这通常会导致出现黑帧。

2, bars

信号丢失时绘制彩条。仅支持 8 位输入信号。

3, repeat

信号丢失时重复最后的视频帧。

默认为‘bars’.

queue_size

设置最大输入缓冲区大小,以字节为单位。如果缓冲达到此值,传入帧将被丢弃。 默认为‘1073741824’.

audio_depth

设置音频采样位深度。必须为‘16’或‘32’。 默认为‘16’.

decklink_copyts

如果设置为true,时间戳将按原样传递而不移除初始偏移。 默认为false.

timestamp_align

捕获开始时间对齐(以秒为单位)。如果非零,输入帧将被丢弃直到系统时间戳对齐到配置值。 容忍的最大对齐偏差为一帧的持续时间。 这对于在 N 个硬件设备之间部署进行“N-way”(多路)冗余的输入同步很有用。在使用此选项之前,应通过诸如 NTP 或 PTP 的协议来同步不同硬件设备的系统时间。 请注意,这种方法并不完全可靠。在一些边缘情况下,由于操作系统中的线程调度延迟,输入同步可能无法实现。有时同步会错开 1 帧,在较少的情况下可能出现timestamp_align秒的错误。 默认为‘0’.

wait_for_tc (布尔值)

丢弃帧直到接收到带时间码的帧。有时串行时间码不会与第一帧一同接收到。如果发生这种情况,存储的流时间码将不准确。如果设置此选项为true,输入帧将被丢弃直到接收到带有时间码的帧。 Optionstimecode_format必须指定。 默认为false.

enable_klv(布尔值)

如果设置为true,从 VANC 提取 KLV 数据并输出 KLV 包。 KLV VANC 包根据 MID 和 PSC 字段连接起来,并汇总到一个 KLV 包中。 默认为false.

18.5.2 示例

  • 列出输入设备:
    ffmpeg -sources decklink
    
  • 列出支持的格式:
    ffmpeg -f decklink -list_formats 1 -i 'Intensity Pro'
    
  • 以 1080i50 规格捕获视频:
    ffmpeg -format_code Hi50 -f decklink -i 'Intensity Pro' -c:a copy -c:v copy output.avi
    
  • 以 1080i50 10 位规格捕获视频:
    ffmpeg -raw_format yuv422p10 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
    
  • 以 1080i50 规格捕获视频并伴随 16 个音频频道:
    ffmpeg -channels 16 -format_code Hi50 -f decklink -i 'UltraStudio Mini Recorder' -c:a copy -c:v copy output.avi
    

18.6 dshow

Windows DirectShow 输入设备。

当 FFmpeg 使用 mingw-w64 项目构建时启用 DirectShow 支持。 目前仅支持音频和视频设备。

多个设备可以作为单独的输入打开,但也可以在同一个输入中打开,这应该会改善它们之间的同步。

输入名称应使用以下格式:

类型=名称[:类型=名称]

其中类型可以是音频视频,名称是设备的名称或备用名称。

18.6.1 选项

如果未指定任何选项,将使用设备的默认值。 如果设备不支持请求的选项,它将无法开启。

video_size

设置捕获视频的尺寸。

framerate

设置捕获视频的帧率。

sample_rate

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

sample_size

设置捕获音频的样本大小(单位:位)。

channels

设置捕获音频的声道数。

list_devices

如果设置为true,打印设备列表并退出。

list_options

如果设置为true,打印选择的设备选项列表 并退出。

video_device_number

为具有相同名称的设备设置视频设备编号(从 0 开始,默认为 0)。

audio_device_number

为具有相同名称的设备设置音频设备编号(从 0 开始,默认为 0)。

pixel_format

选择 DirectShow 使用的像素格式。只有当视频编解码器未设置或设置为 rawvideo 时才能设置此值。

audio_buffer_size

以毫秒为单位设置音频设备缓冲区大小(可能直接影响延迟,具体取决于设备)。 默认为使用音频设备的默认缓冲区大小(通常是 500 毫秒的倍数)。 将此值设置得过低会降低性能。 另请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx

video_pin_name

选择要使用的视频捕获引脚,通过名称或备用名称。

audio_pin_name

选择要使用的音频捕获引脚,通过名称或备用名称。

crossbar_video_input_pin_number

选择交叉设备的视频输入引脚编号。该引脚将被路由到交叉设备的视频解码器输出引脚。 请注意更改此值可能会对未来的调用产生影响(设置新的默认值),直到系统重启发生。

crossbar_audio_input_pin_number

选择交叉设备的音频输入引脚编号。该引脚将被路由到交叉设备音频解码器输出引脚。 请注意更改此值可能会对未来的调用产生影响(设置新的默认值),直到系统重启发生。

show_video_device_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供用户手动更改视频滤镜属性和配置。 请注意,对于交叉设备,有时需要在此对话框中调整值以在 PAL(25 fps)和 NTSC(29.97) 输入帧率、大小、隔行处理等之间进行切换。更改这些值可能启用不同的扫描速率/帧率,避免底部出现绿色条纹、闪烁的扫描线等现象。 此外,请注意对某些设备,调整这些属性可能还会影响未来的调用(设置新的默认值),直到系统重启发生。

show_audio_device_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供用户手动更改音频滤镜属性和配置。

show_video_crossbar_connection_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供用户手动修改交叉引脚路由设置,当它打开视频设备时。

show_audio_crossbar_connection_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供用户手动修改交叉引脚路由设置,当它打开音频设备时。

show_analog_tv_tuner_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框,允许用户手动修改电视的频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框,允许用户手动修改电视音频(例如单声道与立体声、语言 A、B 或 C)。

audio_device_load

从文件加载音频捕获滤镜设备,而不是通过名称搜索。它还可能加载额外参数,如果滤镜支持其属性序列化。 要使用此功能,必须指定音频捕获源,但可以是任何内容甚至是伪造的。

audio_device_save

将当前使用的音频捕获滤镜设备及其参数(如果滤镜支持此功能)保存到文件。 如果存在同名文件,将被覆盖。

video_device_load

从文件加载视频捕获滤镜设备,而不是通过名称搜索。它还可能加载额外参数,如果滤镜支持其属性序列化。 要使用此功能,必须指定视频捕获源,但可以是任何内容甚至是伪造的。

video_device_save

将当前使用的视频捕获滤镜设备及其参数(如果滤镜支持此功能)保存到文件。 如果存在同名文件,将被覆盖。

use_video_device_timestamps

如果设置为false,视频帧的时间戳将来自墙钟时间,而不是由捕获设备提供的时间戳。这可以解决设备提供不可靠时间戳的问题。

18.6.2 示例

  • 打印 DirectShow 支持的设备列表并退出:
    $ ffmpeg -list_devices true -f dshow -i dummy
    
  • 打开视频设备摄像头:
    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开第二个视频设备,名称为摄像头:
    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备摄像头和音频设备麦克风:
    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
    
  • 打印所选设备的支持选项列表并退出:
    $ ffmpeg -list_options true -f dshow -i video="Camera"
    
  • 通过名称或备用名称指定捕获引脚名称,指定备用设备名称:
    $ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone"
    
  • 配置交叉设备,指定交叉引脚,允许用户在启动时调整视频捕获属性:
    $ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0
         -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
    

18.7 fbdev

Linux 帧缓冲输入设备。

Linux 帧缓冲是一种与图形硬件无关的抽象层,通常在控制台上显示图形。可通过文件设备节点访问,通常是/dev/fb0.

有关更详细的信息,请阅读 Linux 源代码树中包含的文件 Documentation/fb/framebuffer.txt。

另请参阅http://linux-fbdev.sourceforge.net/,以及 fbset(1)。

从帧缓冲设备记录/dev/fb0使用ffmpeg:

ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi

您可以使用以下命令捕获单个屏幕图像:

ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg

18.7.1 选项

framerate

设置帧率,默认值为 25。

18.8 gdigrab

基于 Win32 GDI 的屏幕捕获设备。

该设备允许您在 Windows 上捕获显示区域中的某个部分。

输入文件名的选项包括以下元素:

desktop

title=窗口标题

hwnd=窗口句柄

第一个选项将捕获整个桌面或桌面的固定区域。第二个和第三个选项将捕获单个窗口的内容,无论其在屏幕上的哪个位置。

例如,使用ffmpeg:

ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg

捕获桌面上的一个 640x480 区域,位置为10,20:

ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg

捕获名为 "计算器" 的窗口的内容

ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg

18.8.1 选项

draw_mouse

指定是否绘制鼠标指针。使用值0来 不绘制指针。默认值为1.

framerate

设置捕获帧率。默认值为ntsc, 对应的帧率为30000/1001.

show_region

在屏幕上显示捕获区域。

如果显示区域已指定为1,则将在屏幕上显示捕获区域。使用此选项,即使只抓屏幕的一部分,也可以方便地知道捕获了什么。

请注意显示区域与捕获单个窗口的内容兼容性不佳。

例如:

ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg
video_size

设置视频帧的大小。默认值是捕获整个屏幕(如果desktop被选中)或捕获整个窗口大小(如果title=窗口标题被选中)。

offset_x

在使用视频大小捕获区域时,设置距离屏幕或桌面左边缘的距离。

请注意,偏移计算是从 Windows 主显示器的左上角开始。如果您的显示器位于主显示器的左侧,则需要使用负偏移_x值将区域移动到该显示器。

offset_y

在使用视频大小捕获区域时,设置距离屏幕或桌面顶部边缘的距离。

请注意,偏移计算是从 Windows 主显示器的左上角开始。如果您的显示器位于主显示器的上方,则需要使用负偏移_y值将区域移动到该显示器。

18.9 iec61883

使用 libiec61883 的 FireWire DV/HDV 输入设备。

要启用此输入设备,您需要在系统上安装 libiec61883、libraw1394 和 libavc1394。使用如下配置选项--enable-libiec61883来编译启用该设备。

iec61883 捕获设备支持捕捉通过 IEEE1394(FireWire)连接的视频设备 ,使用 libiec61883 和新的 Linux FireWire 堆栈 (juju)。这是 Linux Kernel 2.6.37 及更高版本的默认 DV/HDV 输入方法,因为旧的 FireWire 堆栈已被移除。

指定 FireWire 端口作为输入文件,或使用 "auto" 来选择第一个连接的端口。

18.9.1 选项

dvtype

覆盖 DV/HDV 的自动检测。仅当自动检测不起作用时或禁止使用不同设备类型 时才应使用此选项。将 DV 设备视为 HDV(或反之亦然)将无法正常工作,并导致未定义的行为。 支持的值为auto, dvhdv

dvbuffer

设置用于接收数据的最大缓冲区大小(单位:帧)。对于 DV,这是一个确切的值。对于 HDV,由于 HDV 没有固定帧大小,因此不完全是帧精确的。

dvguid

通过指定其 GUID 来选择捕捉设备。只会从指定设备执行捕捉,如果未找到具有给定 GUID 的设备,则捕捉会失败。这在同时连接多个设备时很有用。 访问 /sys/bus/firewire/devices 可查看 GUID。

18.9.2 示例

  • 抓取并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 抓取并记录 FireWire DV/HDV 设备的输入, 如果源是 HDV,使用大小为 100000 包的缓冲区。
    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

18.10 jack

JACK 输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libjack。

一个 JACK 输入设备会创建一个或多个 JACK 可写客户端,每个音频通道一个 ,名称为客户端名称:输入_N,其中客户端名称是应用程序提供的名称,而N是标识通道的编号。 每个可写客户端都会将获取到的数据发送到 FFmpeg 输入设备。

一旦创建了一个或多个 JACK 可读客户端,就需要将它们连接到一个或多个 JACK 可写客户端。

要连接或断开 JACK 客户端,您可以使用jack_connectjack_disconnect程序,或通过图形界面操作, 例如使用qjackctl.

要列出 JACK 客户端及其属性,您可以调用以下命令jack_lsp.

以下是一个示例,显示如何使用ffmpeg.

# Create a JACK writable client with name "ffmpeg".
$ ffmpeg -f jack -i ffmpeg -y out.wav

# Start the sample jack_metro readable client.
$ jack_metro -b 120 -d 0.2 -f 4000

# List the current JACK clients.
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm

# Connect metro to the ffmpeg writable client.
$ jack_connect metro:120_bpm ffmpeg:input_1

捕获一个 JACK 可读客户端。http://jackaudio.org/

18.10.1 选项

channels

设置通道数,默认值为 2。

18.11 kmsgrab

KMS 视频输入设备。

捕获与指定 CRTC 或平面关联的 KMS 扫描帧缓冲区作为 DRM 对象,可用于其他硬件功能。

需具有 DRM 主权限或 CAP_SYS_ADMIN 才能运行。

如果您不了解以上内容的含义,您可能不需要此功能。请查看x11grab

18.11.1 选项

device

捕获的 DRM 设备。默认为/dev/dri/card0.

format

帧缓冲区的像素格式。如果运行 Linux 5.7 或更高版本,可以自动检测;对于更早的版本则需要提供该格式。默认为bgr0, 这是 Linux 控制台和 Xorg X 服务器使用的最常见格式。

format_modifier

输出帧信号的格式修饰符。这对于正确导入到某些 API 是必要的。如果运行 Linux 5.7 或更高版本可以自动检测,但在更早的版本中如果需要则必须显式提供。 请查看 libdrm 文档以了解可能的值。

crtc_id

KMS CRTC ID 用于定义捕获源。将使用给定 CRTC 上的第一个活动平面。

plane_id

KMS 平面 ID,用于定义捕获源。如果未指定,则默认为找到的第一个活动平面。crtc_id也未指定。plane_id亦未指定。

framerate

捕获的帧率。这与页面翻转或帧缓冲区变化不同步 - 它仅定义帧缓冲区被采样的时间间隔。采样速度超过帧缓冲区更新速率时,将生成具有相同内容的独立帧。默认为30.

18.11.2 示例

  • 从第一个活动平面捕获,下载结果至普通帧并编码。如果帧缓冲区既是线性的又是可映射的,则此过程有效 - 如果不是,结果可能会混乱或下载失败。
    ffmpeg -f kmsgrab -i - -vf 'hwdownload,format=bgr0' output.mp4
    
  • 以60fps从 CRTC ID 42捕获,将结果映射到 VAAPI,转换为 NV12 并编为 H.264。
    ffmpeg -crtc_id 42 -framerate 60 -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,scale_vaapi=w=1920:h=1080:format=nv12' -c:v h264_vaapi output.mp4
    
  • 要仅捕获平面的一部分,可以对输出进行裁剪 - 这可以用于捕获单一窗口,只要它有已知的绝对位置和大小。例如,捕获并编码一个1920x1080平面的中间四分之一部分:
    ffmpeg -f kmsgrab -i - -vf 'hwmap=derive_device=vaapi,crop=960:540:480:270,scale_vaapi=960:540:nv12' -c:v h264_vaapi output.mp4
    

18.12 lavfi

Libavfilter 输入虚拟设备。

该输入设备从 libavfilter 过滤图的开放输出接收数据。

对于每个过滤图开放输出,输入设备将创建一个相应的流,并映射到生成的输出。graph.

18.12.1 选项

graph

指定要用作输入的过滤图。每个视频的开放输出必须由形如 "outN的唯一字符串标记,其中N是编号,从 0 开始,对应由设备生成的映射输入流。

可以将后缀 "+subcc" 附加到输出标签,以创建一个附加有闭合字幕数据包的额外流(实验性的,目前仅用于 EIA-608 / CEA-708)。子字幕流按照对应流的顺序,在所有普通流之后被创建。例如,如果有 "out19+subcc"、"out7+subcc" 以及 "out42",流 #43 是流 #7 的子字幕,流 #44 是流 #19 的子字幕。

如果未指定,则默认为输入设备的文件名。

graph_file

设置要读取并传递给其他过滤器的过滤图文件名。过滤图的语法与选项.

dumpgraph

将图转储到 stderr。

18.12.2 示例

  • 创建一个颜色视频流并用ffplay:
    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 与前面的示例一样,但使用文件名指定过滤图描述,并省略 "out0" 标签:
    ffplay -f lavfi color=c=pink
    
  • 创建三个不同的视频测试过滤源并播放它们:
    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
    
  • 使用 amovie 源从文件中读取音频流,并用ffplay:
    ffplay -f lavfi "amovie=test.wav"
    
  • 读取一个音频流和一个视频流并用ffplay:
    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
    
  • 将解码的帧转储为图像,闭合字幕转储为 RCWT 备份:
    ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
    

18.13 libcdio

基于 libcdio 的 Audio-CD 输入设备。

要在配置中启用此输入设备,需要在系统上安装 libcdio,并使用配置选项--enable-libcdio.

该设备允许播放和抓取 Audio-CD。

例如,用ffmpeg完整复制 Audio-CD 到/dev/sr0, 运行命令:

ffmpeg -f libcdio -i /dev/sr0 cd.wav

18.13.1 选项

speed

设置驱动器的读取速度。默认值为 0。

速度以 CD-ROM 速度单位指定。通过 libcdio 函数cdio_cddap_speed_set设置速度。在许多 CD-ROM 驱动器上,指定过大的值会导致使用最快速度。

paranoia_mode

设置偏执恢复模式标志。接受以下值之一:

disable
verify
overlap
neverskip
full

默认值为 ‘disable’.

有关可用恢复模式的更多信息,请查阅偏执项目文档。

18.14 libdc1394

基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。

需要配置选项--enable-libdc1394.

18.14.1 选项

framerate

设置帧率。默认值为ntsc, 对应30000/1001.

pixel_format

选择像素格式。默认值为uyvy422.

video_size

设置视频大小,以字符串形式给出,例如640x480hd720。默认值为qvga.

18.15 openal

OpenAL 输入设备为所有具有工作 OpenAL 1.1 实现的系统提供音频捕获。

要在配置中启用此输入设备,需要在系统上安装 OpenAL 头文件和库,并用--enable-openal.

OpenAL 头文件和库应作为您的 OpenAL 实现的一部分提供,或者作为附加下载(SDK)。根据您的安装,您可能需要通过--extra-cflags--extra-ldflags指定额外的标志,以便构建系统定位到 OpenAL 头文件和库。

以下是部分 OpenAL 实现的列表:

Creative

Windows 官方实施版,提供支持设备的硬件加速和软件回退。 详见http://openal.org/.

OpenAL Soft

便携的开放源代码(LGPL)软件实现。包括 Windows、Linux、Solaris和BSD操作系统上最常用的音频API的后端。 详见http://kcat.strangesoft.net/openal.html.

Apple

OpenAL 是 Core Audio 的一部分,属于 Mac OS X 音频接口。 详见http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许捕获通过 OpenAL 处理的音频输入设备。

需要指定要捕获的设备名称作为提供的文件名。如果提供了空字符串,该设备将自动选择默认设备。可以使用选项list_devices.

18.15.1 选项

channels

设置捕获音频的通道数。目前仅支持1(单声道)和2(立体声)。默认为2.

sample_size

设置捕获音频的样本大小(以位为单位)。目前仅支持816。默认为16.

sample_rate

设置捕获音频的样本速率(以 Hz 为单位)。默认值为44.1k.

list_devices

如果设置为true,则打印设备列表并退出。默认值为false.

18.15.2 示例

打印 OpenAL 支持设备的列表并退出:

$ ffmpeg -list_devices true -f openal -i dummy out.ogg

从 OpenAL 设备捕获:DR-BT101 via PulseAudio:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg

从默认设备捕获(注意文件名为空字符串”):

$ ffmpeg -f openal -i '' out.ogg

同时从两个设备捕获,并通过同一个ffmpeg命令写入到两个不同文件:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg

注意:并非所有 OpenAL 实现都支持多重同时捕获 - 如果以上方法无效,请尝试最新的 OpenAL Soft。

18.16 oss

开放声音系统输入设备。

输入设备的文件名是代表 OSS 输入设备的设备节点,通常设置为/dev/dsp.

例如从/dev/dsp抓取,使用ffmpeg命令:

ffmpeg -f oss -i /dev/dsp /tmp/oss.wav

有关 OSS 的更多信息,请参见:http://manuals.opensound.com/usersguide/dsp.html

18.16.1 选项

sample_rate

设置采样率(单位:Hz)。默认值为 48000。

channels

设置通道数。默认值为 2。

18.17 pulse

PulseAudio 输入设备。

要启用此输出设备,需配置 FFmpeg 并使用--enable-libpulse.

提供给输入设备的文件名是一个源设备或字符串"default"。

要列出 PulseAudio 源设备及其属性,可以调用命令pactl list sources.

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

18.17.1 选项

server

连接到指定的 PulseAudio 服务器(通过 IP 地址指定)。未提供时使用默认服务器。

name

指定应用名称,PulseAudio 将用于显示活动客户端,默认值为LIBAVFORMAT_IDENT字符串。

stream_name

指定流名称,PulseAudio 将用于显示活动流,默认值为"record"。

sample_rate

指定采样率(单位:Hz),默认值为 48kHz。

channels

指定正在使用的通道,默认设置为 2(立体声)。

frame_size

此选项无效,已废弃。

fragment_size

以字节为单位指定 PulseAudio 的最小缓冲片段大小,它将影响音频延迟。默认设置为 50 毫秒的数据量。

wallclock

使用当前时间设置初始 PTS。默认值为 1。

18.17.2 示例

从默认设备记录流:

ffmpeg -f pulse -i default /tmp/pulse.wav

18.18 sndio

sndio 输入设备。

要在配置中启用此输入设备,需要在系统上安装 libsndio。

输入设备的文件名是代表 sndio 输入设备的设备节点,通常设置为/dev/audio0.

例如从/dev/audio0抓取,使用ffmpeg命令:

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

18.18.1 选项

sample_rate

设置采样率(单位:Hz)。默认值为 48000。

channels

设置通道数。默认值为 2。

18.19 video4linux2, v4l2

视频4Linux2输入视频设备。

"v4l2" 可用作 "video4linux2" 的别名。

如果 FFmpeg 是使用配置选项--enable-libv4l2构建并支持 v4l-utils,则可以使用输入设备选项-use_libv4l2

要捕获的设备名称是设备节点文件,通常 Linux 系统在设备(例如 USB 网络摄像机)插入系统时会自动创建这些节点,并命名为类似/dev/videoN的形式,其中N是与设备相关的编号。

Video4Linux2设备通常支持有限的宽度x高度尺寸和帧速率。您可以使用-list_formats all检查Video4Linux2设备的支持情况。 一些设备(如电视卡)支持一个或多个标准。可以使用-list_standards all.

列出所有支持的标准。 时间戳的基准是1微秒。根据内核版本和配置,时间戳可能源于实时时钟(原点为 Unix纪元)或单调时钟(原点通常在引导时,不受 NTP 或手动更改影响)。可以用-timestamps abs-ts abs选项强制转换为实时时钟。

使用 video4linux2设备一些示例,配合ffmpegffplay:

  • 列出视频4Linux2设备支持的格式:
    ffplay -f video4linux2 -list_formats all /dev/video0
    
  • 捕获并显示视频4Linux2设备的输入:
    ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
    
  • 抓取并记录视频4Linux2设备的输入,保持先前设置的帧速率和尺寸:
    ffmpeg -f video4linux2 -input_format mjpeg -i /dev/video0 out.mpeg
    

有关 Video4Linux 的更多信息,请参阅http://linuxtv.org/.

18.19.1 选项

standard

设置标准。必须是一个受支持标准的名称。想获取支持标准的列表,请使用list_standards选项。

channel

设置输入通道号。默认为 -1,表示使用以前选择的通道。

video_size

设置视频帧大小。参数必须是形式宽度x高度或有效尺寸缩写的字符串。

pixel_format

选择像素格式(仅对原始视频输入有效)。

input_format

设置首选像素格式(针对原始视频)或编解码器名称。 此选项允许选择输入格式,当有多个格式可选时。

framerate

设置首选视频帧速率。

list_formats

列出可用格式(支持像素格式、编解码器和帧大小)并退出。

可用值为:

all

显示所有可用的(压缩和非压缩)格式。

raw

仅显示原始视频(非压缩)格式。

compressed

仅显示压缩格式。

list_standards

列出支持的标准并退出。

可用的值是:

all

显示所有支持的标准。

timestamps, ts

设置抓取帧的时间戳类型。

可用的值是:

default

使用内核中的时间戳。

abs

使用绝对时间戳(时钟时间)。

mono2abs

强制从单调转换为绝对时间戳。

默认值是default.

use_libv4l2

使用libv4l2(v4l-utils)转换函数。默认值是0。

18.20 vfwcap

VfW(Windows视频)捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围为0到9。您可以使用"list"作为文件名列出驱动程序列表。任何其他文件名将被解释为设备编号0。

18.20.1 选项

video_size

设置视频帧大小。

framerate

设置抓取帧速率。默认值是ntsc,对应的帧速率为30000/1001.

18.21 x11grab

X11视频输入设备。

若要在配置期间启用此输入设备,您需要系统中安装libxcb。在配置过程中会自动检测到它。

此设备允许捕获X11显示区域。

作为输入传递的文件名具有以下语法:

[主机名]:显示编号.屏幕编号[+x偏移量,y偏移量]

主机名:显示编号.屏幕编号指定了屏幕的X11显示名称,从那里进行抓取。主机名可以被省略,默认为"localhost"。环境变量DISPLAY包含默认显示名称。

x偏移量y偏移量指定抓取区域相对于X11屏幕左上边界的偏移量。默认为0。

查看X11文档(例如man X)以获得更详细的信息。

使用xdpyinfo程序获取有关X11显示属性的信息(例如,grep过滤"name"或"dimensions")。

例如抓取:0.0使用ffmpeg:

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg

在位置处抓取10,20:

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

18.21.1 选项

select_region

指定是否使用指针图形选择抓取区域。值为1提示用户通过单击拖动以图形方式选择抓取区域。单击而不拖动将选择整个屏幕。宽度或高度为零的区域也将选择整个屏幕。此选项会覆盖视频大小, 抓取x抓取y选项。默认值是0.

draw_mouse

指定是否绘制鼠标指针。值为0指定不绘制指针。默认值是1.

follow_mouse

让抓取区域跟随鼠标。参数可以是centered或像素数像素.

若指定为"居中",抓取区域跟随鼠标指针,并始终保持指针位于区域中心;否则,当鼠标指针到达区域边缘内像素(大于零)时,区域才会跟随。

例如:

ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg

当鼠标指针到达区域边缘内100像素才跟随:

ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
framerate

设置抓取帧速率。默认值是ntsc,对应的帧速率为30000/1001.

show_region

在屏幕上显示抓取的区域。

如果show_region被指定为1,那么抓取区域会在屏幕上标出。有了这个选项,如果只抓取屏幕的一部分,容易看出抓取的是哪里。

region_border

设置区域边框厚度,如果使用了-show_region 1。范围为1到128,默认值是3(基于XCB的x11grab)。

例如:

ffmpeg -f x11grab -show_region 1 -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

使用跟随鼠标:

ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
window_id

抓取这个窗口,而不是整个屏幕。默认值是0,对应整个屏幕(根窗口)。

一个窗口的id可以使用xwininfo程序找到,可能需要使用-tree和-root选项。

如果窗口稍后被放大,新区域不会被记录。当窗口关闭、取消映射(例如,图标化)或缩小到视频大小以下时,视频结束(默认是初始窗口大小)。

该选项禁用选项follow_mouseselect_region.

video_size

设置视频帧大小。默认是全桌面或窗口。

grab_x
grab_y

设置抓取区域坐标。以X11窗口左上角为起点进行偏移,分别对应于设备名称中的x偏移量y偏移量参数。这两个选项默认值为0。

19 重采样器选项

音频重采样器支持以下命名选项。

可以通过指定 -选项 在FFmpeg工具中设置选项,选项=用于aresample过滤器,通过显式在SwrContext选项中设置值,也可以使用libavutil/opt.hAPI进行程序化使用。

uchl, used_chlayout

设置使用的输入通道布局。默认未设置。此选项仅用于特殊映射。

isr, in_sample_rate

设置输入采样率。默认值是0。

osr, out_sample_rate

设置输出采样率。默认值是0。

isf, in_sample_fmt

指定输入采样格式。默认设置为none.

osf, out_sample_fmt

指定输出采样格式。默认设置为none.

tsf, internal_sample_fmt

设置内部采样格式。默认值是none。如果未显式设置,这将自动选择。

ichl, in_chlayout
ochl, out_chlayout

设置输入/输出通道布局。

参见(ffmpeg-utils) ffmpeg-utils(1)手册中的通道布局部分获取所需的语法。

clev, center_mix_level

设置中心混音级别。以分贝表达,必须在[-32,32]区间内。

slev, surround_mix_level

设置环绕混音级别。以分贝表达,必须在[-32,32]区间内。

lfe_mix_level

设置LFE混音到非LFE级别。用于有LFE输入但没有LFE输出的情况。以分贝表达,必须在[-32,32]区间内。

rmvol, rematrix_volume

设置重混音音量。默认值是1.0。

rematrix_maxval

设置用于重混音的最大输出值。 这可以用于防止剪辑对比防止音量降低。 值为1.0防止剪辑。

flags, swr_flags

设置转换器使用的标志。默认值是0。

它支持以下单个标志:

res

强制重采样,此标志强制使用重采样,即使输入和输出采样率相匹配。

dither_scale

设置抖动幅度。默认值是1。

dither_method

设置抖动方法。默认值是0。

支持的值:

rectangular

选择矩形抖动

triangular

选择三角形抖动

triangular_hp

选择带高通的三角形抖动

lipshitz

选择Lipshitz噪音整形抖动。

shibata

选择Shibata噪音整形抖动。

low_shibata

选择低Shibata噪音整形抖动。

high_shibata

选择高Shibata噪音整形抖动。

f_weighted

选择f加权噪音整形抖动

modified_e_weighted

选择修改后的e加权噪音整形抖动

improved_e_weighted

选择改良的e加权噪音整形抖动

resampler

选择重采样引擎。默认值是swr。

支持的值:

swr

选择原生的SW重采样器;滤镜选项precision和cheby在这种情况下不适用。

soxr

选择SoX重采样器(如果可用);补偿和滤镜选项filter_size、phase_shift、exact_rational、filter_type & kaiser_beta不适用。

filter_size

仅针对swr,设置重采样滤波器大小,默认值是32。

phase_shift

仅针对swr,设置重采样相移,默认值是10,必须在[0,30]区间内。

linear_interp

启用时使用线性插值(默认值)。如果想在exact_rational失败时保持速度而非质量,请禁用它。

exact_rational

仅针对swr,启用时尝试根据输入和输出采样率使用精确的相位计数。然而,如果它大于1 << phase_shift, 则相位计数将回退到1 << phase_shift。默认启用。

cutoff

设置截止频率(swr:6dB点;soxr:0dB点)比例;必须是一个介于0到1之间的浮点值。swr默认值是0.97,soxr默认值是0.91(当采样率为44100时,保留整个音频频带到20kHz)。

precision

仅针对soxr,设置重采样信号计算的精度位数。默认值为20(使用合适的抖动,与16位目标位深度相符),代表SoX的“高质量”;值为28代表SoX的“非常高质量”。

cheby

仅针对soxr,选择没有通带衰减(Chebyshev)和适用于“非理想”比率的更高精度近似。默认值是0。

async

仅针对swr,使用简单的一参数音频同步到时间戳,通过拉伸、挤压、填充和修剪进行操作。设置为1将启用填充和修剪,更大的值表示可拉伸或挤压的最大样本量(每秒)。默认值是0,即没有应用补偿以使样本与音频时间戳匹配。

first_pts

仅针对swr,假设第一个pts应为此值。时间单位为1 / 采样率。允许流开始时填充/修整。默认情况下,没有关于第一帧的预期pts的假设,因此不会进行填充或修剪。例如,可以将其设置为0,以在音频流在视频流之后开始时填充初始静音,或修剪任何由于编码器延迟而有负pts的样本。

min_comp

仅针对swr,设置时间戳和音频数据之间的最小差异(以秒为单位)触发拉伸/挤压/填充或修剪数据以使其匹配时间戳。默认不启用拉伸/挤压/填充和修剪操作min_comp = FLT_MAX).

min_hard_comp

仅针对swr,设置时间戳和音频数据之间的最小差异(以秒为单位),触发添加/删除样本以使其匹配时间戳。此选项实际上是一个阈值,用于在硬(修剪/填充)和软(挤压/拉伸)补偿之间选择。请注意,默认情况下所有补偿都被禁用,通过min_comp。默认值是0.1。

comp_duration

仅针对swr,设置数据拉伸/挤压以与时间戳匹配的持续时间(以秒为单位)。必须是非负双精度浮点值,默认值是1.0。

max_soft_comp

仅针对swr,设置数据拉伸/挤压以匹配时间戳的最大因子。必须是非负双精度浮点值,默认值是0。

matrix_encoding

选择矩阵立体声编码。

接受以下值:

none

选择无

dolby

选择Dolby

dplii

选择Dolby Pro Logic II

默认值是none.

filter_type

仅针对swr,选择重采样滤波器类型。这只影响重采样操作。

接受以下值:

cubic

选择立方

blackman_nuttall

选择Blackman Nuttall窗口化的正弦

kaiser

选择Kaiser窗口化的正弦

kaiser_beta

仅针对swr,设置Kaiser窗口贝塔值。必须是介于[2,16]区间的双精度浮点值,默认值是9。

output_sample_bits

仅针对swr,设置用于抖动的输出样本位数。必须是介于[0,64]区间的整数,默认值是0,表示未使用。

20 缩放选项

视频缩放器支持以下命名选项。

可以通过指定 -选项 在FFmpeg工具中设置选项,有一些仅限API使用的例外情况,下面会注明。 对于程序化使用,它们可以显式设置在SwsContext选项中或通过libavutil/opt.hAPI设置。

sws_flags

设置缩放器标志。这也用于设置缩放算法。仅选择一个算法。默认值是'bicubic’.

接受以下值:

fast_bilinear

选择快速双线性缩放算法。

bilinear

选择双线性缩放算法。

bicubic

选择双三次缩放算法。

experimental

选择实验性缩放算法。

neighbor

选择最近邻缩放算法。

area

选择平均区域缩放算法。

bicublin

选择亮度通道使用双三次缩放算法,彩色通道使用双线性缩放算法。

gauss

选择高斯缩放算法。

sinc

选择sinc缩放算法。

lanczos

选择Lanczos缩放算法。默认宽度(alpha)是3,可通过设置更改。param0.

spline

选择自然双三次样条缩放算法。

print_info

启用打印/调试日志。

accurate_rnd

启用精确舍入。

full_chroma_int

启用完整的彩色插值。

full_chroma_inp

选择完整的色度输入。

bitexact

启用精确比特输出。

srcw (仅API)

设置源宽度。

srch (仅API)

设置源高度。

dstw (仅API)

设置目标宽度。

dsth (仅API)

设置目标高度。

src_format (仅API)

设置源像素格式(必须以整数表示)。

dst_format (仅API)

设置目标像素格式(必须以整数表示)。

src_range (布尔值)

如果值设置为1, 表示源是全范围。默认值是0, 表示源是有限范围。

dst_range (布尔值)

如果值设置为1, 为目标启用全范围。默认值是0, 启用有限范围。

param0, param1

设置缩放算法参数。指定的值是某些缩放算法特定的,对于其他算法将被忽略。指定的值应为浮点数。

sws_dither

设置抖动算法。接受以下值之一。默认值是‘auto’.

auto

自动选择

none

无抖动

bayer

拜耳抖动

ed

误差扩散抖动

a_dither

基于加法的算术抖动

x_dither

基于xor的算术抖动(更随机/更少显著的图案化)。

alphablend

设置当输入有alpha通道但输出没有时使用的alpha混合方式。默认值是‘none’.

uniform_color

混合到统一背景颜色

checkerboard

混合到棋盘模式

none

不混合

21 过滤简介

在FFmpeg中,通过libavfilter库启用过滤功能。

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

                [main]
input --> split ---------------------> overlay --> output
            |                             ^
            |[tmp]                  [flip]|
            +-----> 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过滤链生成的输出的下半部分。

一些过滤器需要输入一个参数列表:这些参数在过滤器名字后加等号,且参数间用冒号分隔。

存在所谓的源过滤器,没有音频或视频输入,和接收过滤器,不会有音频或视频输出。

22 graph2dot

FFmpeg中包含的graph2dot程序可用于解析过滤器图描述并生成相应的以dot语言表示的文本。tools directory can be used to parse a filtergraph description and issue a corresponding textual representation in the dot language.

运行以下命令查看如何使用

graph2dot -h

你可以通过将dot描述传递给graph2dot.

You can then pass the dot description to the 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过滤器,以模拟特定的输入文件。

23 过滤器图描述

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

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

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

23.1 过滤器图语法

过滤器图有一个文本表示方式,它可以通过-filter/-vf/-af-filter_complex选项ffmpeg-vf/-afffplay以及通过定义在avfilter_graph_parse_ptr()中的函数解析。libavfilter/avfilter.h.

过滤器链由一系列连接的过滤器组成,每个过滤器与序列中前一个过滤器连接。过滤器链通过一个用逗号分隔的过滤器描述列表表示。

过滤器图由序列的过滤器链构成。过滤器链序列通过一个用分号分隔的过滤器列表表示。

过滤器通过以下字符串形式表示: [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过滤器声明三个选项按以下顺序 –type, start_framenb_frames。然后,参数列表in:0:30表示值in分别分配给选项type, 0start_frame30到。nb_frames.
  • 一个包括直接value值以及长key=value键值对的混合参数列表。直接value值必须在key=value键值对之前并遵循前文所述的约束顺序。接下来的key=value键值对可以按任何顺序设置。

如果选项值本身是一个项目列表(例如format过滤器接受像素格式列表),列表中的项通常使用‘|’.

列表的参数可以用字符‘'’引号括起,开始和结束,以标记初始与结束,字符‘\’用于对引号内的字符进行转义;如果未进行引号处理,则字符串会在遇到下一个特殊字符(属于集‘[]=;,’)时被认为结束。

FFmpegffmpeg命令行工具中实现的特殊语法允许从文件中加载选项值。这通过在选项名称前添加斜杠‘/’实现,然后提供的值被解释为从中加载实际值的路径。例如,

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描述:

名称             ::= sequence of alphanumeric characters and '_'
过滤器名称      ::= 名称["@"名称]
链接标签        ::= "[" 名称 "]"
链接标签       ::= 链接标签 [链接标签]
过滤器参数 ::= sequence of chars (possibly quoted)
过滤器           ::= [过滤器名称] 过滤器名称 ["=" 过滤器参数] [链接标签]
过滤链      ::= 过滤器 [,过滤链]
过滤图      ::= [sws_flags=旗帜;] 过滤链 [;过滤图]

23.2 过滤器图转义注意事项

过滤器图说明的组合包括多个级别的转义。参见(ffmpeg-utils)在ffmpeg-utils(1)手册中“引用和转义”章节以获取更多关于所采用转义程序的信息。

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

第二级转义影响整个过滤器描述,该描述可能包含转义字符\'或过滤器图描述使用的特殊字符[],;最后,当你在Shell命令行中指定过滤器图时,你需要对其中的Shell特殊字符执行第三级转义。

例如,考虑下面的字符串嵌入到

For example, consider the following string to be embedded in the drawtext过滤器中的textvalue:

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来指定要渲染的文本。

24 时间线编辑

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

表达式接受下列值:

t

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

n

输入帧的连续编号,从 0 开始

pos

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

w
h

输入帧的宽度和高度(如果是视频)

另外,这些过滤器支持一个enable命令,可以用来重新定义表达式。

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

例如,启用一个模糊过滤器 (smartblur) 从 10 秒至 3 分钟,以及一个curves过滤器从 3 秒开始:

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

参见ffmpeg -filters查看哪些过滤器支持时间线。

25 通过命令在运行时更改选项

某些选项可以在过滤器运行期间通过命令进行更改。这些选项在ffmpeg -h filter=<name of filter>的输出中标记为 'T'。命令的名称为选项的名称,参数为新值。

26 对有多个输入的过滤器的选项 (framesync)

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

eof_action

遇到次级输入上的 EOF 时采取的操作;它接受以下值之一:

repeat

重复最后一帧(默认)。

endall

终止两个流。

pass

通过主输入。

shortest

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

repeatlast

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

ts_sync_mode

根据次级输入时间戳严格同步流;它接受以下值之一:

default

次级输入中最接近较低或等于时间戳的帧与主输入帧同步。

nearest

次级输入中时间戳与主输入帧绝对最近的帧。

27 音频过滤器

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

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

27.1 aap

应用仿射投影算法,使用第二音频流预测第一音频流。

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

下面是所接受选项的描述。

order

设置滤波器阶数。

projection

设置投影阶数。

mu

设置滤波器mu。

delta

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

out_mode

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

i

通过第一个输入。

d

通过第二个输入。

o

通过目标(第二输入)与误差信号估计之间的差异。

n

通过输入(第一个输入)与误差信号估计之间的差异。

e

通过误差信号估计的样本。

默认值为o.

precision

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

auto

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

float

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

double

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

27.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之间。

27.2.1 命令

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

27.3 acontrast

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

滤镜接受以下选项:

contrast

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

27.4 acopy

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

27.5 acrossfade

从一个输入音频流到另一个输入音频流应用交叉淡化。在第一个流结束时指定持续时间,应用交叉淡化。

滤镜接受以下选项:

nb_samples, ns

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

duration, d

指定交叉淡化效果的持续时间。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以获取接受的语法。默认情况下,持续时间由nb_samples确定。如果设置,该选项将替代nb_samples.

overlap, o

设置第一个流的结束是否与第二个流的开始重叠。默认启用。

curve1

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

curve2

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

关于可用曲线类型的描述,请参见afade滤镜描述。

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

27.6 acrossover

将音频流分割成多个频段。

此过滤器将音频流分割成两个或多个频率范围。将所有流合并回将产生平坦输出。

滤镜接受以下选项:

split

设置分割频率。它们必须是正数并递增。

order

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

2nd

每倍频程12分贝。

4th

每倍频程24分贝。

6th

每倍频程36分贝。

8th

每倍频程48分贝。

10th

每倍频程60分贝。

12th

每倍频程72分贝。

14th

每倍频程84分贝。

16th

每倍频程96分贝。

18th

每倍频程108分贝。

20th

每倍频程120分贝。

默认值为第4阶。.

level

设置输入增益级别。允许范围是0到1。默认值为1。

gains

为每个频段设置输出增益。默认值为所有频段均为1。

precision

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

auto

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

float

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

double

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

默认值为auto.

27.6.1 示例

  • 将输入音频流分成两个频带(低频和高频),分割频率为1500Hz,每个频带将在单独流中:
    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
    

27.7 acrusher

减少音频比特分辨率。

此过滤器是一种带增强功能的比特压缩器。比特压缩器用于听觉上减少采样音频信号的比特数。这不会改变比特深度,只是产生效果。减少比特深度的材料听起来更刺耳和“数字化”。此过滤器甚至可以四舍五入到连续值而不是离散比特深度。此外,它有一个直流偏移,导致信号的上半部分和下半部分不同的压缩。反锯齿设置能够产生“更柔和”的压缩声音。

此过滤器的另一个特点是对数模式。此设置将从比特之间的线性距离切换为对数距离。结果是听起来更加“自然”的压缩器,例如不会对低信号进行门控。人耳有对数感知,因此这种压缩方式更加舒适。对数压缩还能提供反锯齿功能。

该滤镜接受以下选项:

level_in

设置输入电平。

level_out

设置输出电平。

bits

设置比特压缩。

mix

设置混合量。

mode

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

dc

设置直流分量。

aa

设置抗锯齿。

samples

设置采样压缩。

lfo

启用低频振荡器(LFO),默认禁用。

lforange

设置LFO范围。

lforate

设置LFO速率。

27.7.1 指令

此滤镜支持所有上述选项作为指令.

27.8 acue

延迟音频滤镜处理直到给定的系统时间戳。请参见cue滤镜。

27.9 adeclick

从输入音频中移除冲击噪声。

检测到的冲击噪声样本会被使用自回归建模插值出的样本替换。

window, w

设置窗口大小,单位为毫秒。允许范围为10100。默认值为55毫秒。 此选项设置同时处理的窗口大小。

overlap, o

设置窗口重叠,以窗口大小的百分比表示。允许范围为5095。默认值为75百分比。 将此值设置得非常高会增强冲击噪声移除效果,但会使整个处理过程变得更慢。

arorder, a

设置自回归订单,以窗口大小的百分比表示。允许范围为025。默认值为2百分比。该选项也会影响使用附近良好样本插值出的样本质量。

threshold, t

设置阈值。允许范围为1100。 默认值为2。 此参数控制将要移除的冲击噪声强度。值越低,检测为冲击噪声的样本越多。

burst, b

设置突发融合,以窗口大小的百分比表示。允许范围为010。默认值为2。 如果任意两个检测为噪声的样本之间间隔小于该值,则它们之间的样本也会被检测为噪声。

method, m

设置重叠方法。

其接受以下值:

add, a

选择重叠-相加方法。即使未插值的样本也会轻微更改。

save, s

选择重叠-保存方法。未插值的样本保持不变。

默认值为a.

27.10 adeclip

从输入音频中移除失真样本。

检测为失真的样本会被使用自回归建模插值出的样本替换。

window, w

设置窗口大小,单位为毫秒。允许范围为10100。 默认值为55毫秒。 此选项设置同时处理的窗口大小。

overlap, o

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

arorder, a

设置自回归订单,以窗口大小的百分比表示。允许范围为025。默认值为8百分比。该选项也会影响使用附近良好样本插值出的样本质量。

threshold, t

设置阈值。允许范围为1100。 默认值为10。更高的值会使失真检测不那么激进。

hsize, n

设置用于检测失真的直方图大小。允许范围为1009999。 默认值为1000。更高的值会使失真检测不那么激进。

method, m

设置重叠方法。

其接受以下值:

add, a

选择重叠-相加方法。即使未插值的样本也会轻微更改。

save, s

选择重叠-保存方法。未插值的样本保持不变。

默认值为a.

27.11 adecorrelate

对输入音频流施加去相关处理。

该滤镜接受以下选项:

stages

设置去相关滤镜的处理阶段。允许范围为1到16。默认值为6。

seed

设置用于在通道间设置样本延迟的随机种子。

27.12 adelay

对一个或多个音频通道延迟处理。

延迟通道中的样本会用静音填充。

该滤镜接受以下选项:

delays

设置每个通道的延迟时间列表,单位为毫秒,用‘|’分隔。 未使用的延迟将被自动忽略。如果提供的延迟数量少于通道数,则所有剩余通道将不被延迟。 如果希望精确延迟一定数量的样本,请在数字后附加‘S’。 如果希望改为以秒为单位延迟,请在数字后附加‘s’。

all

为所有剩余通道使用最后设定的延迟。默认禁用。 如果启用,该选项会改变delays的解释方式。

27.12.1 示例

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

27.13 adenorm

通过添加极低水平的噪声来修正音频中的非正常问题。

该滤镜应放置在任何可能产生非正常现象的滤镜之前。

以下是接受的参数描述。

level

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

type

设置添加噪声的类型。

dc

添加直流信号。

ac

添加交流信号。

square

添加方波信号。

pulse

添加脉冲信号。

默认值为dc.

27.13.1 指令

此滤镜支持所有上述选项作为指令.

27.14 aderivative, aintegral

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

依次应用两个滤镜会生成原始音频。

27.15 adrc

对输入音频流应用频谱动态范围控制滤镜。

以下是接受的选项描述。

transfer

设置转换表达式。

该表达式可以包含以下常量:

ch

当前通道编号

sn

当前样本编号

nb_channels

通道数

t

用秒表示的时间戳

sr

样本率

p

当前频率功率值,以分贝表示

f

当前频率,以赫兹为单位

默认值为p.

attack

设置上升时间,以毫秒为单位。默认值为50毫秒。 允许范围为1到1000毫秒。

release

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

channels

设置需要过滤的通道。默认情况下all音频流中的通道被过滤。

27.15.1 指令

此滤镜支持所有上述选项作为指令.

27.15.2 示例

  • 对所有频率应用频谱压缩,阈值为-50 dB,比例为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
    

27.16 adynamicequalizer

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

以下是接受的选项描述。

threshold

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

dfrequency

设置用于触发均衡的检测滤波器的检测频率,以赫兹为单位。 默认值为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

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

27.16.1 指令

此滤镜支持所有上述选项作为指令.

27.17 adynamicsmooth

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

以下是接受的选项描述。

sensitivity

设置频率波动的敏感量。默认值为2。 允许范围为0到1e+06。

basefreq

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

27.17.1 指令

此滤镜支持所有上述选项作为指令.

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

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

27.19 aemphasis

音频重点滤镜去创建或恢复从LP或强调过的CD中直接提取的材料,使用不同的滤镜曲线。例如,要在乙烯唱片上存储音乐,信号必须先被滤镜修改以弥补这种记录媒体的缺点。 播放后必须应用逆滤镜以恢复频率响应的失真。

该滤镜接受以下选项:

level_in

设置输入增益。

level_out

设置输出增益。

mode

设置滤波模式。用于恢复材料时使用reproduction模式,否则 使用production模式。默认是reproduction模式。

type

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

col

选择哥伦比亚。

emi

选择EMI。

bsi

选择BSI (78RPM)。

riaa

选择RIAA。

cd

选择紧凑光盘(CD)。

50fm

选择50µs (FM)。

75fm

选择75µs (FM)。

50kf

选择50µs (FM-KF)。

75kf

选择75µs (FM-KF)。

27.19.1 命令

该滤波器支持以上所有选项作为命令.

27.20 aeval

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

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

它接受以下参数:

exprs

为每个单独的通道设置‘|’-分隔表达式列表。如果 输入通道数大于表达式数,则使用最后指定的表达式 用于剩余的输出通道。

channel_layout, c

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

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

ch

当前表达式的通道号。

n

从0开始评估的样本编号。

s

采样率。

t

以秒为单位表示的评估样本时间。

nb_in_channels
nb_out_channels

输入和输出通道数量。

val(CH)

编号为CH

注意:该滤波器较慢。为了更快的处理,应使用专用滤波器。

27.20.1 示例

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

27.21 aexciter

激励器用于产生原始信号中不存在的高音。通过限定范围 并将生成的谐波失真添加到原始信号中实现。这种滤波器 会提升音频信号的高端部分,而不仅仅像均衡器一样简单 提升高频,以创建更加“清脆”或“明亮”的声音效果。

滤波器接受以下选项:

level_in

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

level_out

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

amount

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

drive

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

blend

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

freq

设置产生谐波的最低频率限制(单位:Hz)。 允许范围是2000到12000 Hz。 默认值是7500 Hz。

ceil

设置产生谐波的最高频率限制。 允许范围是9999到20000 Hz。 如果值低于10000 Hz,不会施加限制。

listen

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

27.21.1 命令

该滤波器支持以上所有选项作为命令.

27.22 afade

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

以下是可接受参数的描述。

type, t

指定效果类型,可以是in用于淡入,或者out用于淡出效果。默认是in.

start_sample, ss

指定开始应用淡入效果的起始样本数。默认是0。

nb_samples, ns

指定淡出效果的持续样本数。在淡入效果结束时 输出音频的音量将与输入音频相同,在淡出过渡结束 时输出音频将是静音。默认是44100。

start_time, st

指定淡入效果的开始时间。默认是0。 此值必须作为时间持续时间指定;参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以了解可接受的语法。 如果设置了此选项,则优先于start_sample.

duration, d

指定淡入效果的持续时间。请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以了解可接受的语法。 在淡入效果结束时输出音频的音量将与输入音频相同, 在淡出过渡结束时输出音频将是静音。 默认情况下,持续时间由nb_samples确定。 如果设置了此选项,则优先于nb_samples.

curve

为淡入/淡出过渡设置曲线。

它接受以下值:

tri

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

qsin

选择四分之一正弦波

hsin

选择半个正弦波

esin

选择指数正弦波

log

选择对数曲线

ipar

选择倒置抛物线

qua

选择二次函数曲线

cub

选择立方函数曲线

squ

选择平方根曲线

cbr

选择立方根曲线

par

选择抛物线

exp

选择指数曲线

iqsin

选择倒置四分之一正弦波

ihsin

选择倒置半个正弦波

dese

选择双指数座椅曲线

desi

选择双指数S形曲线

losi

选择逻辑S形曲线(sigmoid)

sinc

选择正弦卡尔达尔函数

isinc

选择倒置正弦卡尔达尔函数

quat

选择四次函数曲线

quatr

选择四次函数根曲线

qsin2

选择平方的四分之一正弦波曲线

hsin2

选择平方的半个正弦波曲线

nofade

不应用淡入/淡出效果

silence

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

unity

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

27.22.1 命令

该滤波器支持以上所有选项作为命令.

27.22.2 示例

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

27.23 afftdn

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

以下是可接受参数的描述。

noise_reduction, nr

设置降噪值(dB),允许范围是0.01到97。 默认值是12 dB。

noise_floor, nf

设置噪声底值(dB),允许范围是-80到-20。 默认值是-50 dB。

noise_type, nt

设置噪声类型。

它接受以下值:

white, w

选择白噪声。

vinyl, v

选择黑胶噪声。

shellac, s

选择贝壳噪声。

custom, c

选择自定义噪声,由bn选项定义。

默认值是白噪声。

band_noise, bn

为所有15个频段设置自定义频带噪声配置文件。 频段之间用‘ ’或‘|’分隔。

residual_floor, rf

设置剩余噪声底值(dB),允许范围是-80到-20。 默认值是-38 dB。

track_noise, tn

启用噪声底值跟踪。默认情况下是禁用的。 启用后,噪声底值会自动调整。

track_residual, tr

启用残留跟踪。默认情况下是禁用的。

output_mode, om

设置输出模式。

它接受以下值:

input, i

保持输入不变传递。

output, o

传递过滤掉的噪声。

noise, n

仅传递噪声部分。

默认值是output.

adaptivity, ad

设置适应因子,用于决定每个频率bin的增益调整反应速度。 值0表示瞬间适应,而较高的值会反应得更慢。 允许范围是01。默认值是0.5.

floor_offset, fo

设置噪声底值偏移因子。本选项用于调整对测量噪声底值施加 的偏移量。仅在启用了噪声底值跟踪时有效。 允许范围是-2.02.0。默认值是1.0.

noise_link, nl

在多通道音频中设置噪声联动。

它接受以下值:

none

使用未更改通道的噪声底值。

min

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

max

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

average

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

默认值是min.

band_multiplier, bm

设置频带乘数因子,用于确定在频率bin间传播频带的力度。 允许范围是0.25。默认值是1.25.

sample_noise, sn

切换是否从输入音频捕获和测量噪声配置文件。

它接受以下值:

start, begin

开始样本噪声捕获。

stop, end

停止样本噪声捕获并测量新噪声频段配置文件。

默认值是none.

gain_smooth, gs

设置增益平滑空间半径,用于平滑对每个频率bin应用的增益。 有助于减少随机音乐噪声伪影。 更高的值增加增益平滑程度。 允许范围是050。 默认值是0.

27.23.1 命令

该滤波器支持以上部分提到的选项作为命令.

27.23.2 示例

  • 通过10dB降噪,使用之前测量的噪声底值为-40dB:
    afftdn=nr=10:nf=-40
    
  • 通过设置初始噪声底值为-80dB并启用噪声底值的自动跟踪,以10dB降噪, 从而使噪声底值在处理过程中逐渐变化:
    afftdn=nr=10:nf=-80:tn=1
    
  • 通过命令在输入音频的前0.4秒时间测量噪声配置文件,使用噪声底值为-40dB,按照20dB降噪:
    asendcmd=0.0 afftdn sn start,asendcmd=0.4 afftdn sn stop,afftdn=nr=20:nf=-40
    

27.24 afftfilt

在频率域中对样本应用任意表达式。

real

为每个独立通道设置频率域实数表达式,使用‘|’分隔。默认值是"re"。 如果输入通道数大于表达式数,则使用最后指定的表达式 用于剩余的输出通道。

imag

为每个独立通道设置频率域虚数表达式,使用‘|’分隔。 默认值是"im"。

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

sr

采样率。

b

当前频率bin编号。

nb

可用bin数量。

ch

当前表达式的通道号。

chs

通道数量。

pts

当前帧pts值。

re

当前通道当前频率bin的实部值。

im

当前通道当前频率bin的虚部值。

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.

27.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)"
    

27.25 afir

应用任意有限冲激响应(FIR)滤波器。

该滤波器设计用于应用最长可达60秒的FIR滤波器。

可用于数字分频滤波器、房间均衡化、交叉声道消除、波场合成、听觉化、 双耳音效、全向声和空间化处理。

此滤波器使用第一个流之外的更高流作为FIR系数。 如果非第一个流只有一个通道,则会用于第一个流中的所有输入通道,否则 非第一个流中的通道数量必须与第一个流中的通道数量一致。

它接受以下参数:

dry

设置干增益。此设置为输入增益。

wet

设置湿增益。此设置为最终输出增益。

length

设置冲激响应滤波器长度。默认值是1,表示处理整个冲激响应。

gtype

该选项已废弃,不再起作用。

irnorm

设置对滤波前冲激响应系数应用的归一化因子。 允许范围是-12。 冲激响应系数将按本选项设置的计算矢量归一化。 对于负值,不计算归一化,冲激响应系数保持完全不变。 默认值是1.

irlink

对于多通道冲激响应,如果此选项设置为true,所有冲激响应通道的系数将按irnorm选项计算的最大测量增益归一化。 禁用时,每个冲激响应通道中的系数将单独归一化。 默认值是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

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

默认值是自动。

irload

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

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

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

27.27 afreqshift

对输入音频样本应用频率偏移。

过滤器接受以下选项:

shift

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

level

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

order

设置用于过滤的滤镜顺序。允许范围是1到16。 默认值是8。

27.27.1 命令

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

27.28 afwtdn

使用小波减少输入样本中的宽频噪声。

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

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。

27.28.1 命令

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

27.29 agate

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

门限通过检测低于选择的水平阈值并将其除以使用的因子进行比率来完成。噪声底部是通过范围来设置的。由于对信号的精确处理可能会导致波形的失真,信号的减少可以在 时间内进行平缓调整。这可以通过设置攻击释放.

攻击决定了信号需要低于阈值的时间 才能发生减少,而释放设置了信号需要高于阈值的时间以减少减少。 短于选择的攻击时间的信号将保持不变。

level_in

设置过滤之前的输入电平。 默认值是1。允许范围从0.015625到64。

mode

设置操作模式。可以是upwarddownward。 默认值是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。可以是peakrms.

link

选择是否平均所有通道之间的电平或更响亮的通道影响减少。 默认值是average。可以是averagemaximum.

27.29.1 命令

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

27.30 aiir

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

它接受以下参数:

zeros, z

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

poles, p

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

gains, k

设置通道增益。

dry_gain

设置输入增益。

wet_gain

设置输出增益。

format, f

设置系数格式。

ll

格子-梯级函数

sf

模拟传递函数

tf

数字传递函数

zp

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

pr

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

pd

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

sp

S平面零点/极点

process, r

设置处理类型。

d

直接处理

s

串联处理

p

并联处理

precision, e

设置过滤精度。

dbl

双精度浮点(默认)

flt

单精度浮点

i32

32位整型

i16

16位整型

normalize, n

规范化滤波系数,默认启用。 启用后将规范化直流电的幅度响应为0dB。

mix

过滤信号在输出中的使用量,默认值是1。 范围是0到1。

response

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

channel

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

size

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

系数以tfsf格式表示为由空格分隔且按升序排列。

zp格式表示的系数由空格分隔且系数的顺序无关紧要。以zp格式表示的系数是复数,带有i虚数单位。

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

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

27.31 alimiter

限制器阻止输入信号超过期望的阈值。 此限制器使用前瞻技术来防止信号失真。 这意味着在处理信号后会有一个小的延迟。 请记住,它产生的延迟是设置的攻击时间。

过滤器接受以下选项:

level_in

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

level_out

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

limit

不要让超过此水平的信号通过限制器。默认值是1。

attack

限制器将在此时间段内(以毫秒为单位)达到其衰减水平。默认值是5毫秒。

release

在此时间段内(以毫秒为单位)从限制恢复到1.0衰减。默认值是50毫秒。

asc

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

asc_level

选择释放时间受ASC影响的程度,0表示几乎没有变化 在释放时间,而1表示较长的释放时间。

level

自动调节输出信号。默认启用。 如果启用,将音频恢复到0dB。

latency

补偿使用前瞻缓冲设置的攻击参数引入的延迟。 流到达EOF时也会冲洗前瞻缓冲中的有效音频数据。

根据选择的设置,建议对输入进行2x或4x上采样 使用aresample在应用此过滤之前。

27.32 allpass

应用带有中心频率(以Hz为单位)频率和滤波宽度宽度的二极全通滤波器。 全通滤波器改变了音频的频率到相位关系 而不会改变其频率到幅度关系。

过滤器接受以下选项:

frequency, f

设置频率,以Hz为单位。

width_type, t

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

h

赫兹

q

品质因数

o

倍频程

s

斜率

k

千赫

width, w

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

mix, m

指定输出中使用滤波信号的比例。默认值为1。 范围在0到1之间。

channels, c

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

normalize, n

规范化双二阶系数,默认禁用。 启用时将在直流频率下将幅频响应规范化为0dB。

order, o

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

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用32位浮点。

f64

始终使用64位浮点。

27.32.1 命令

该滤波器支持以下命令:

frequency, f

更改全通频率。 命令的语法是 : "频率"

width_type, t

更改全通width_type。 命令的语法是 : "width_type"

width, w

更改全通宽度。 命令的语法是 : "宽度"

mix, m

更改全通混合。 命令的语法是 : "混合"

27.33 aloop

循环音频样本。

该滤波器接受以下选项:

loop

设置循环次数。如果将值设置为-1,将导致无限循环。 默认值是0。

size

设置样本的最大数量。默认值是0。

start

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

time

以秒为单位设置循环开始时间。 仅当选项命名为开始时使用-1.

27.34 amerge

将两个或多个音频流合并成一个多通道流。

该滤波器接受以下选项:

inputs

设置输入的数量。默认是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,这可能或可能不是预期值。

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

如果输入的持续时间不同,输出将以最短的持续时间结束。

27.34.1 示例

  • 将两个单声道文件合并为一个立体声流:
    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
    
  • 多个合并,假设有1个视频流和6个音频流input.mkv:
    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
    

27.35 amix

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

请注意,此滤波器仅支持浮点样本(amergepan音频滤波器支持多种格式)。如果amix输入为整数样本,则aresample将被自动插入以进行转换为浮点样本。

它接受以下参数:

inputs

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

duration

如何确定流结束。

longest

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

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

dropout_transition

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

weights

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

normalize

始终缩放输入,而不是仅对样本进行求和过滤。 请注意,如果在过滤前或过滤后未对输入进行标准化,并且该选项被禁用,可能会发生严重的剪裁。默认启用。

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

27.35.2 命令

该滤波器支持以下命令:

weights
normalize

语法与具有相同名称的选项相同。

27.36 amultiply

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

通过这种逐元素乘法,可以实现振幅渐弱和振幅调制。

27.37 anequalizer

对每个通道使用高阶参数化多频段均衡器。

它接受以下参数:

params

此选项字符串格式为: "c通道f=中心频率w=宽度g=增益t=滤波器类型| ..." 每个均衡器频段使用’|'分隔。

chn

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

f

设置频段的中心频率。 如果输入中没有该频率,条目将被忽略。

w

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

g

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

t

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

0

Butterworth,这是默认值。

1

切比雪夫1型。

2

切比雪夫2型。

curves

如果启用该选项,anequalizer的频率响应将在视频流中显示。

size

设置视频流大小。仅在启用曲线选项时有用。

mgain

设置将显示的最大增益。仅在启用曲线选项时有用。 将其设置为合理的值,可以显示源自相邻频段的增益,这些频段太接近并因此产生更高的增益,当它们同时启用时。

fscale

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

colors

设置视频流中每个通道曲线的颜色。 此颜色列表是以空格或’|'分隔的颜色名称。 无法识别或缺少的颜色将替换为白色。

27.37.1 示例

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

27.37.2 命令

该滤波器支持以下命令:

change

修改现有滤波器参数。 命令的语法是: "过滤器编号|f=频率|w=宽度|g=增益"

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

通过asendcmd调用完整滤波器可能看起来像这样: asendcmd=c=’4.0 anequalizer change 0|f=200|w=50|g=1’,anequalizer=...

27.38 anlmdn

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

通过查找具有相似上下文的样本来调整每个样本。通过比较其周围补丁的大小p来定义上下文相似性。补丁在r范围内搜索。

该滤波器接受以下选项:

strength, s

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

patch, p

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

research, r

设置搜索半径持续时间。允许范围为2到300毫秒。 默认值为6毫秒。

output, o

设置输出模式。

接受以下值:

i

通过原始输入。

o

通过滤出噪声。

n

仅通过噪声。

默认值是o.

smooth, m

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

27.38.1 命令

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

27.39 anlmf, anlms

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

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

以下是接受选项的描述。

order

设置滤波器阶数。

mu

设置滤波器mu。

eps

设置滤波器eps。

leakage

设置滤波器泄漏。

out_mode

接受以下值:

i

通过第一个输入。

d

通过第二个输入。

o

传递期望值,第二个输入与误差信号估计的差值。

n

传递输入值,第一个输入与误差信号估计的差值。

e

传递误差信号估计样本。

默认值是o.

precision

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

auto

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

float

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

double

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

27.39.1 示例

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

27.39.2 命令

此滤波器支持与选项相同的命令,但不包括选项order.

27.40 anull

未改变地将音频信号源传递到输出。

27.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_len都未设置,pad_durwhole_dur选项均未设置时,滤波器将无限期地在输入流末尾添加静音。

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

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

27.42 相位调制器

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

相位器滤镜在频谱中创建一系列的峰值和谷值。这些峰值和谷值的位置会被调制,从而随着时间变化,产生一种扫频效果。

以下是接受的参数描述。

in_gain

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

out_gain

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

delay

设置延迟(以毫秒为单位)。默认值为3.0。

decay

设置衰减。默认值为0.4。

speed

设置调制速度(以赫兹为单位)。默认值为0.5。

type

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

它接受以下值:

triangular, t
sinusoidal, s

27.43 相位偏移器

对输入音频样本应用相位偏移。

该滤镜接受以下选项:

shift

指定相位偏移。允许范围从-1.0到1.0。默认值为0.0。

level

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

order

设置用于过滤的滤镜阶数。允许范围从1到16。默认值为8。

27.43.1 命令

该滤镜支持上述所有选项作为命令.

27.44 APSNR

测量音频峰值信噪比。

这个滤镜需要两路音频流作为输入,输出第一路音频流。 结果以每通道分贝为单位,显示在任一路输入的末尾。

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

27.45.1 命令

该滤镜支持上述所有选项作为命令.

27.46 音频脉冲器

音频脉冲器是一种介于自动声像器和颤音之间的效果。 它还能产生有趣的立体声效果。脉冲器根据低频振荡器(LFO)具有不同波形和相位偏移的变化来改变左右声道的音量。 该滤镜还具有定义左右声道之间偏移的能力。0的偏移值表示两个LFO形状彼此匹配,左右声道以相等方式被改变——一种传统的颤音效果。 偏移值为50%表示右声道的形状正好移相(或向后移动约频率的一半)——脉冲器充当自动声像器。当偏移值为1时,两条曲线再次匹配。偏移值的任何设置都会在左右声道之间无缝移动相位差距,并通过正弦波和三角波形产生一些“通过声音”的效果。从0.5开始,设置偏移值越接近1,信号从左到右扬声器的传输速度越快。

该滤镜接受以下选项:

level_in

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

level_out

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

mode

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

amount

设置调制。定义原始信号受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

设置频率(以赫兹为单位)。默认值是2。允许范围是[0.01 - 100]。仅在时间模式设为hz时使用。

27.47 aresample

使用libswresample库将输入音频重新采样到指定参数。如果未指定,则滤镜会自动将输入和输出进行转换。

该滤镜还能够拉伸/压缩音频数据以使其匹配时间戳,或注入静音/截去音频以使其匹配时间戳,或两者结合使用,或者不做任何处理。

滤镜接受语法 [采样率:]重采样器选项,其中采样率表示一个采样率,而重采样器选项是一个=对,使用":"分隔。请参阅(ffmpeg-resampler) "重采样器选项"部分的 ffmpeg-resampler(1)手册以获取支持选项的完整列表。

27.47.1 示例

  • 将输入音频重采样到44100Hz:
    aresample=44100
    
  • 根据给定时间戳拉伸/压缩样本,每秒最大补偿1000个样本:
    aresample=async=1000
    

27.48 areverse

反转音频片段。

警告:此滤镜需要内存来缓冲整个片段,因此建议进行裁剪。

27.48.1 示例

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

27.49 arls

对第一路音频流应用递归最小二乘算法,使用第二路音频流。

这种自适应滤镜用于通过递归找到将生成差异信号(期望的第二输入音频流与实际信号,即第一输入音频流的差异信号的加权线性最小二乘代价函数)最小化的滤镜系数,从而模仿目标滤波器。

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

order

设置滤镜阶数。

lambda

设置遗忘因子。

delta

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

out_mode

设置滤镜输出样本。它接受以下值:

i

传递第一个输入。

d

传递第二个输入。

o

传递期望的第二输入与误差信号估计之间的差异。

n

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

e

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

默认值为输出.

precision

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

auto

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

float

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

double

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

27.50 arnndn

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

该滤镜接受以下选项:

model, m

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

mix

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

27.50.1 命令

该滤镜支持上述所有选项作为命令.

27.51 ASDR

测量音频信号与失真率。

该滤镜需要两路音频流作为输入,输出第一路音频流。 结果以每通道分贝为单位,显示在任一路输入的末尾。

27.52 asetnsamples

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

最后的输出包可能包含不同数量的样本,因为当输入音频发出结束信号时,滤镜将刷新所有剩余样本。

该滤镜接受以下选项:

nb_out_samples, n

设置每个输出音频帧的帧数。该数字指的是每个通道的样本数。 默认值为1024。per each channel. Default value is 1024.

pad, p

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

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

asetnsamples=n=1234:p=0

27.53 asetrate

在不改变PCM数据情况下设置采样率。 这将导致速度和音调的变化。

该滤镜接受以下选项:

sample_rate, r

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

27.54 ashowinfo

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

显示的行包含一系列键/值对,形式如:.

以下值显示在输出中:

n

输入帧的(连续)编号,从0开始。

pts

输入帧的表示时间戳,以时间基单位表示;时间基取决于滤镜输入端,通常为1/采样率.

pts_time

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

fmt

采样格式。

chlayout

声道布局。

rate

音频帧的采样率。

nb_samples

帧中每个通道的样本数量。

checksum

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

plane_checksums

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

27.55 asisdr

测量音频比例不变信号失真率。

该滤镜需要两路音频流作为输入,输出第一路音频流。 结果以每通道分贝为单位,显示在任一路输入的末尾。

27.56 asoftclip

应用音频软剪裁。

软剪裁是一种失真效果,其中信号的振幅沿平滑曲线被饱和,而不是硬剪裁的突然形态。

该滤镜接受以下选项:

type

设置软剪裁的类型。

它接受以下值:

hard
tanh
atan
cubic
exp
alg
quintic
sin
erf
threshold

设置开始剪裁的阈值。默认值为0分贝或1。

output

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

param

设置额外参数,用于控制S型函数。

oversample

设置过采样因子。

27.56.1 命令

该滤镜支持上述所有选项作为命令.

27.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
slope
decrease
rolloff

27.58 asr

自动语音识别

该滤镜使用PocketSphinx进行语音识别。要启用此滤镜的编译,需要通过以下选项配置FFmpeg:--enable-pocketsphinx.

它接受以下选项:

rate

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

hmm

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

dict

设置发音词典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置使用的语言模型。

logfn

设置日志消息的输出。

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

27.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_offset或者lavfi.astats.Overall.Peak_count.

下面是关于这些键的描述。

reset

设置累计统计计算后重置的帧数量。默认是禁用。

measure_perchannel

选择每个通道进行测量的参数。元数据键可以 用作标志,默认值是all测量所有参数。none禁用所有每通道测量。

measure_overall

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

以下是测量键的描述:

none

无测量

all

所有测量

Bit_depth

音频的整体位深,即每个样本用的位数

Crest_factor

峰值到RMS水平的标准比率(注意:不是分贝)

DC_offset

从零的平均振幅位移

Dynamic_range

音频的测量动态范围,以分贝表示

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

零交叉的速率与音频样本数

27.60 asubboost

增强低音频率。

过滤器接受以下选项:

dry

设置干增益,即保留原始信号的比例。允许范围是0到1。 默认值是1.0。

wet

设置湿增益,即保留过滤信号的比例。允许范围是0到1。 默认值是1.0。

boost

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

decay

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

feedback

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

cutoff

设置截止频率(赫兹)。允许范围是50到900。 默认值是100。

slope

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

delay

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

channels

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

27.60.1 命令

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

27.61 asubcut

切除低音频率。

此过滤器允许设置自定义、更陡的 滚降比高通过滤器,因此能够更有效地衰减 停止带内的频率内容。

过滤器接受以下选项:

cutoff

设置截止频率(赫兹)。允许范围是2到200。 默认值是20。

order

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

level

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

27.61.1 命令

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

27.62 asupercut

切除高音频率。

过滤器接受以下选项:

cutoff

设置截止频率(赫兹)。允许范围是20000到192000。 默认值是20000。

order

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

level

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

27.62.1 命令

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

27.63 asuperpass

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

过滤器接受以下选项:

centerf

设置中心频率(赫兹)。允许范围是2到999999。 默认值是1000。

order

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

qfactor

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

level

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

27.63.1 命令

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

27.64 asuperstop

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

过滤器接受以下选项:

centerf

设置中心频率(赫兹)。允许范围是2到999999。 默认值是1000。

order

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

qfactor

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

level

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

27.64.1 命令

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

27.65 atempo

调整音频节奏。

过滤器仅接受一个参数,即音频节奏。如果未指定,则过滤器将假定为标称的1.0节奏。节奏必须在[0.5, 100.0]范围内。

注意,节奏大于2时将跳过一些样本,而不是将它们混合。如果这在任何情况下成为一个问题,可以串联几个atempo实例以实现所需的最终节奏。

27.65.1 示例

  • 将音频慢至80%节奏:
    atempo=0.8
    
  • 将音频加速至300%节奏:
    atempo=3
    
  • 通过串联两个atempo实例将音频加速至300%节奏:
    atempo=sqrt(3),atempo=sqrt(3)
    

27.65.2 命令

此过滤器支持以下命令:

tempo

更改过滤器节奏比例因子。 命令语法为:"tempo"

27.66 atilt

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

该滤波器在指定的频段上应用任何频谱滚降斜率。

过滤器接受以下选项:

freq

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

slope

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

width

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

order

设置倾斜过滤器的阶数。

level

设置输入音量水平。允许范围是0到4。 默认值是1。

27.66.1 命令

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

27.67 atrim

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

它接受以下参数:

start

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

end

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

start_pts

start相同,只不过此选项以样本数而不是秒设置开始时间戳。

end_pts

end相同,只不过此选项以样本数 而不是秒设置结束时间戳。

duration

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

start_sample

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

end_sample

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

start, end以及duration以时间长度表示;参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间长度章节.

注意,开始/结束选项的前两组以及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
    

27.68 axcorrelate

计算两路输入音频流之间的规范化窗口交叉相关性。

结果样本始终介于-1和1之间。 如果结果是1,则表示两个输入样本在选定段中高度相关。 结果为0表示它们完全没有相关性。 如果结果是-1,则表示两个输入样本偏离,即它们会互相抵消。

过滤器接受以下选项:

size

设置计算交叉相关性所用段的大小。 默认值是256。允许范围是2到131072。

algo

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

27.68.1 示例

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

27.69 带通滤波

应用两个极点的巴特沃斯带通滤波器,中央频率为频率,以及(3dB点)带宽宽度。 该csg选项选择恒定裙增益(峰值增益=Q),而不是默认值:恒定0dB峰值增益。 滤波器以每倍频程6dB(每十倍频率20dB)衰减。

滤波器接受以下选项:

frequency, f

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

csg

恒定裙增益设置为1时生效。默认值为0。

width_type, t

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

h

赫兹

q

品质因数

o

倍频程

s

斜率

k

千赫兹

width, w

用指定的宽度类型单位定义滤波器的带宽。

mix, m

使用滤波信号与输出的混合程度。默认值为1。 范围在0到1之间。

channels, c

指定要过滤的声道,默认所有可用声道都被过滤。

normalize, n

归一化双二阶滤波器系数,默认禁用。 启用时,它将在直流处将幅度响应归一化为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲击响应长度在接近零值时截断),则过滤 就会成为线性相位,否则如果不够大,则只会产生令人讨厌的伪影。

注意,当设置为非零值时,滤波延迟将恰好为如此多的样本。

27.69.1 命令

此滤波器支持以下命令:

frequency, f

更改带通频率。 命令语法为: "频率"

width_type, t

更改带通宽度类型。 命令语法为: "宽度类型"

width, w

更改带通宽度。 命令语法为: "宽度"

mix, m

更改带通混合。 命令语法为: "混合"

27.70 带阻滤波

应用两个极点的巴特沃斯带阻滤波器,中央频率为频率,以及(3dB点)带宽宽度。 滤波器以每倍频程6dB(每十倍频率20dB)衰减。

滤波器接受以下选项:

frequency, f

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

width_type, t

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

h

赫兹

q

品质因数

o

倍频程

s

斜率

k

千赫兹

width, w

用指定的宽度类型单位定义滤波器的带宽。

mix, m

使用滤波信号与输出的混合程度。默认值为1。 范围在0到1之间。

channels, c

指定要过滤的声道,默认所有可用声道都被过滤。

normalize, n

归一化双二阶滤波器系数,默认禁用。 启用时,它将在直流处将幅度响应归一化为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲击响应长度在接近零值时截断),则过滤 就会成为线性相位,否则如果不够大,则只会产生令人讨厌的伪影。

注意,当设置为非零值时,滤波延迟将恰好为如此多的样本。

27.70.1 命令

此滤波器支持以下命令:

frequency, f

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

width_type, t

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

width, w

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

mix, m

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

27.71 低音,低搁架滤波

使用两个极点的搁架滤波器提升或削减音频的低频(低音)部分,类似于标准 高保真音响的音调控制。这也被称为搁架均衡(EQ)。

滤波器接受以下选项:

gain, g

给定0 Hz处的增益。其有效范围大约是-20 (用于大幅削减)到+20(用于大幅提升)。 使用正增益时注意可能导致的剪切。

frequency, f

设置滤波器的中心频率,因此可用来扩大或减少要提升或削减的频率范围。 默认值为100赫兹。

width_type, t

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

h

赫兹

q

品质因数

o

倍频程

s

斜率

k

千赫兹

width, w

决定滤波器搁架过渡的陡度。

poles, p

设置极点数。默认值为2。

mix, m

使用滤波信号与输出的混合程度。默认值为1。 范围在0到1之间。

channels, c

指定要过滤的声道,默认所有可用声道都被过滤。

normalize, n

归一化双二阶滤波器系数,默认禁用。 启用时,它将在直流处的幅度响应归一化为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲击响应长度在接近零值处截断),则过滤 将成为线性相位,否则如果不够大,它将仅产生令人讨厌的伪影。

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

27.71.1 命令

此滤波器支持以下命令:

frequency, f

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

width_type, t

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

width, w

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

gain, g

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

mix, m

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

27.72 双二阶滤波

使用给定的系数应用双二阶IIR滤波器。 其中b0, b1, b2a0, a1, a2是分子和分母系数。 以及声道, c指定要过滤的声道,默认所有 可用声道都被过滤。

27.72.1 命令

此滤波器支持以下命令:

a0
a1
a2
b0
b1
b2

更改双二阶滤波参数。 命令语法为: ""

mix, m

使用滤波信号与输出的混合程度。默认值为1。 范围在0到1之间。

channels, c

指定要过滤的声道,默认所有可用声道都被过滤。

normalize, n

归一化双二阶滤波器系数,默认禁用。 启用时,它将在直流处的幅度响应归一化为0dB。

transform, a

设置IIR滤波器变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置用于反向IIR处理的块大小。如果该值设置得足够高 (高于冲击响应长度在接近零值处截断),则过滤 将成为线性相位,否则如果不够大,它将仅产生令人讨厌的伪影。

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

27.73 bs2b

Bauer立体声到双耳声音转换,提高耳机试听体验 立体声音频。

要启用此滤波器的编译,需要用以下命令配置FFmpeg--enable-libbs2b.

它接受以下参数:

profile

预定义的交叉反馈水平。

default

默认水平(fcut=700, feed=50)。

cmoy

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

jmeier

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

fcut

截止频率(以赫兹为单位)。

feed

馈入水平(以赫兹为单位)。

27.74 声道映射

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

它接受以下参数:

map

映射输入声道到输出声道。参数是一个由‘|’分隔的映射列表,每项格式为输入声道-输出声道或者输入声道形式。输入声道可以是输入声道的名称(例如FL表示前左声道)或者其在输入声道布局中的索引。输出声道是输出声道的名称或者其在输出声道布局中的索引。如果输出声道未给出,则其被隐含为索引,从零开始并每个映射递增一。混合使用不同类型的映射是不允许的,会导致解析错误。

channel_layout

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

如果没有设置映射,过滤器将隐式地将输入声道映射到输出声道,保持索引不变。

27.74.1 示例

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

    将从输入中的下混声道创建一个输出被标记为立体声的WAV文件。

  • 修复一个5.1 WAV文件,这个文件被错误编码为AAC的原生声道顺序
    ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
    

27.75 声道分离

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

它接受以下参数:

channel_layout

输入流的声道布局。默认值为"立体声"。

channels

一个描述要提取为单独输出流的声道的声道布局,或者"全部"提取每个输入声道作为单独的流。默认值为"全部"。

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

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

27.76 合唱

向音频添加合唱效果。

可以让一个单一的人声听起来像合唱,但也可以应用于乐器。

合唱类似于带有短延迟的回声效果,但与回声的延迟为常数不同,合唱通过正弦或三角形调制进行变化。 调制深度定义了在延迟之前或之后播放的范围。因此,延迟后的声音会变得更慢或更快,调整后的声音围绕原始音调进行调节,这类似于合唱中一些声音略微跑调。

它接受以下参数:

in_gain

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

out_gain

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

delays

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

decays

设置衰减。

speeds

设置速度。

depths

设置深度。

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

27.77 动态范围压缩/扩展

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

它接受以下参数:

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。

27.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
    
  • 在-35dB处的硬噪声门:
    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
    

27.78 延迟补偿

补偿延迟线是一种基于距离的延迟,用于补偿麦克风或扬声器的位置差异。

例如,您用两个麦克风处于不同位置录制吉他。由于声波的传播速度在正常情况下是固定的, 麦克风的相位可能会有所不同,具体取决于它们的位置和相互关系。 当每个麦克风的相位同步时,可以获得最佳的声音混合。注意,麦克风之间的距离约为30厘米时, 一个麦克风接收到的信号会与另一个麦克风的信号相反相位。这会使最终混音听起来郁闷。 该滤波器通过为每个麦克风轨道添加不同的延迟,以实现同步,从而解决相位问题。

通过选择一个轨道作为基准,并一个接一个与之同步其他轨道,可以达到最佳效果。 记住,同步/延迟的误差容忍还取决于采样率。 更高的采样率将带来更好的容忍度。

此过滤器接受以下参数:

mm

设置距离,单位为毫米。这是用于精调的补偿距离。 默认值为0。

cm

设置距离,单位为厘米。这是用于微调的补偿距离。 默认值为0。

m

设置距离,单位为米。这是用于很大距离调整的补偿。 默认值为0。

dry

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

wet

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

temp

设置温度,单位为摄氏度。这是环境的温度。 默认值为20。

27.78.1 命令

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

27.79 交叉融合

应用耳机交叉融合滤波器。

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

其目的是为听众产生更接近扬声器音效的听觉体验。

此过滤器接受以下选项:

strength

设置交叉融合强度。默认值为0.2。 允许范围为0到1。这设置了低架滤波器在立体声图像侧部分的增益。 默认值为-6dB。当强度设置为1时,最大允许值为-30dB。

range

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

slope

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

level_in

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

level_out

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

block_size

设置用于反向IIR处理的块大小。如果设置的值足够高(超过脉冲响应长度在接近零值时被截断的长度), 过滤将变为线性相位,否则如果值不足够大,则会产生明显的伪影。

请注意,当设置为非零值时,滤波器延迟将正好为此值的样本数。

27.79.1 命令

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

27.80 音频晶化器

一种简单的音频噪声锐化算法。

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

此过滤器接受以下选项:

i

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

c

启用削波。默认处于启用状态。

27.80.1 命令

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

27.81 DC偏移

对音频应用一个DC偏移。

这可以用于移除音频中的DC偏移(可能是由于录音链中的硬件问题引起的)。 DC偏移的影响包括减小的动态范围和因此降低的音量。astats过滤器可用于判断信号是否有DC偏移。

shift

设置DC偏移值,允许范围为[-1, 1]。表示音频的移动量。

limitergain

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

27.82 去齿音

对音频样本应用去齿音。

i

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

m

设置对白声音频高音部分的衰减量。允许范围为0到1。 默认值为0.5。

f

设置在去齿音时保留的原始频率内容量。允许范围为0到1。 默认值为0.5。

s

设置输出模式。

可接受以下值:

i

原样输出。

o

只输出去除的齿音。

e

仅输出齿音部分。

默认值为o.

27.83 对话增强

增强立体声音频对话。

此过滤器接受立体声输入并生成环绕声(3.0声道)输出。 新生成的前置中心声道增强了原本在立体声声道中可用的语音对话。 该过滤器将输入的前置左右声道保持不变。

此过滤器接受以下选项:

original

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

enhance

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

voice

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

27.83.1 命令

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

27.84 动态范围仪表

测量音频的动态范围。

动态范围值14及以上通常出现在非常动态的素材中。动态范围值8到13出现在过渡性的素材中。 而任何低于8的动态范围则表明其动态非常差且压缩较重。

此过滤器接受以下选项:

length

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

27.85 动态音频标准化

动态音频标准化器。

此过滤器对输入音频施加一定量的增益,以使其峰值幅度达到目标水平(例如0 dBFS)。 不过,与更"简单"的标准化算法不同,动态音频标准化器会动态地调整输入音频的增益因子。 这允许对音频的"安静"部分应用额外增益,同时避免对"响亮"部分产生失真的情况。 换句话说:动态音频标准化器会"调和"安静和响亮片段的音量,使每个片段的音量达到相同的目标水平。 请注意,动态音频标准化器实现此目标时*不会*应用"动态范围压缩"。 它将100%保留音频文件中每个片段的动态范围。

framelen, f

设置帧长度,单位为毫秒。范围为10到8000毫秒。 默认值为500毫秒。 动态音频标准化器以小块处理输入音频,这些小块称为帧。 这是必要的,因为单个样本值的峰值幅度没有意义。 相反,我们需要针对连续的样本值序列确定峰值幅度。 标准化滤波器简单地使用整个文件的峰值幅度,而动态音频标准化器单独为每个帧确定峰值幅度。 帧的长度以毫秒为单位指定。默认情况下动态音频标准化器使用500毫秒的帧长度, 这一值对大多数文件效果良好。 注意,根据单个输入音频文件的采样率,帧的确切长度(以采样点数衡量)将自动确定。

gausssize, g

设置高斯滤波窗口大小。范围为3到301,必须为奇数。 默认值为31。 动态音频标准化器的最重要参数之一是window size高斯平滑滤波器的窗口大小。 滤波器的窗口大小以帧数指定,并以当前帧为中心。 为了简便,此值必须为奇数。因此,默认值为31时, 将考虑当前帧、前15帧和后15帧。使用较大的窗口结果产生较强的平滑效果, 从而减少增益变化(即增加增益适应的速度)。 反之,较小的窗口效果为较弱的平滑效果,从而增加增益变化。 换言之,值越大,动态音频标准化器越像"传统"标准化滤波器运行。 相反,值越小,动态音频标准化器越像动态范围压缩器运行。

peak, p

设置目标峰值,这指定了标准化音频输入的最大允许幅度水平。 此过滤器将尽可能接近目标峰值幅度,同时确保标准化信号的峰值幅度不会超过目标值。 帧的最大本地增益因由目标峰值幅度直接施加。 默认值为0.95,从而保留5%的余量。 不建议将此值高于默认值。

maxgain, m

设置最大增益因子。范围为1.0到100.0。默认值为10.0。 动态音频标准化器确定每个输入帧的最大可能(局部)增益因子, 即不会导致削波或失真的最大增益因子。 最大增益因子由帧的最大幅度样本决定。然而,动态音频标准化器还以预先确定(全局)的最大增益因子为界限, 以避免在"静音"或几乎静音的帧中出现过高的增益因子。 默认的最大增益因子为10.0,对于大多数输入其是足够的,通常不建议增加此值。 然而,对于总体音量非常低的输入,可以必要地允许甚至更高的增益因子。 请注意,动态音频标准化器并不是简单地应用"硬"阈值(即切掉超过阈值的值)。 相反,会应用"S型"阈值函数。因此,增益因子将平滑地接近阈值,但永远不会超过这个值。

targetrms, r

设置目标RMS范围。从0.0到1.0。默认值是0.0(未启用)。 默认情况下,动态音频正常化器执行“峰值”规范化。 这意味着每帧的最大局部增益因子由该帧的最大振幅样本定义。 通过这种方式,可以尽可能放大样本而不会超过最大信号水平,即不会剪辑。然而,动态音频正常化器还可以选择考虑帧的均方根(Root Mean Square,缩写为RMS)。在电气工程中,RMS通常用于确定信号的功率,因此被认为相比仅观察信号峰值幅度,RMS更能近似“感知响度”。因此,通过调整所有帧到统一的RMS值,可以建立统一的“感知响度”。如果指定了目标RMS值,则帧的局部增益因子定义为能准确得出该RMS值的因子。然而,为防止剪辑,最大局部增益因子仍受帧最大振幅样本限制。

coupling, n

启用声道耦合。默认已启用。 默认情况下,动态音频正常化器会以相同的增益因子放大所有声道。这意味着所有声道都应用相同的增益因子,即最大可能的增益因子由“最响声道”确定。 然而,在某些录音中,不同声道的音量可能不均匀,例如一个声道可能比其他声道更“安静”。在这种情况下,可以使用此选项禁用声道耦合。这样,每个声道的增益因子将根据其自身的最大振幅样本独立确定。这允许平衡不同声道的音量。

correctdc, c

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

altboundary, b

启用备用边界模式。默认未启用。 动态音频正常化器考虑到每帧周围的某一邻域。这包括前置帧以及后续帧。然而,对于音频文件开头和结尾的“边界”帧,并非所有邻近帧都可用。尤其是对于音频文件的前几个帧,前置帧是未知的。而同样,对于音频文件的最后几个帧,后续帧是未知的。因此,问题在于对于“边界”区域丢失的帧,应当假设哪些增益因子。动态音频正常化器实现了两种模式来处理这类情况。默认边界模式为丢失帧假设确切增益因子1.0,从而在输入开头和结尾分别产生平滑的“淡入”和“淡出”。

compress, s

设置压缩因子。范围从0.0到30.0。默认值是0.0。 默认情况下,动态音频正常化器不应用“传统”压缩。这意味着信号峰值不会被修剪,因此在每个局部邻域内保持完整动态范围。然而,在某些情况下,可能希望将动态音频正常化器的规范化算法与更“传统”的压缩相结合。为此,动态音频正常化器提供了可选的压缩(阈值)功能。如果(且仅当)压缩功能被启用,则所有输入帧将在实际规范化过程之前先经过柔性阈值功能处理。简单来说,阈值功能将修剪所有振幅超过特定阈值的样本。然而,动态音频正常化器并不是简单地应用固定阈值,阈值将针对每个单独帧进行调整。 通常情况下,较小参数导致更强的压缩,相反亦然。推荐值应高于3.0,否则可能出现可听失真。

threshold, t

设置目标阈值值。这指定了音频输入可以进行规范化的最低允许振幅水平。如果输入帧音量超过此值,将对该帧进行规范化。否则,该帧可能完全不被规范化。默认值为0,这意味着所有输入帧都将被规范化。此选项主要在不希望放大数字噪声时使用。

channels, h

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

overlap, o

指定帧的重叠。如果设置为0(默认),则不会进行帧重叠调整。设置为>0且<1的值将导致更不保守的增益调整,就像设置帧长度选项为较小值时一样,如果帧长度选项值被非零重叠量补偿,则与零重叠情况相比,增益调整将更平滑地跨时间进行。

curve, v

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

表达式可以包含以下常量:

ch

当前声道编号。

sn

当前样本编号。

nb_channels

声道数。

t

以秒表示的时间戳。

sr

样本率。

p

当前帧峰值。

27.85.1 命令

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

27.86 earwax

使音频更容易通过耳机聆听。

此过滤器对44.1kHz立体声(即音频CD格式)音频添加“提示”,使音频通过耳机聆听时,立体音的效果从听者头内部(耳机的标准)移到听者前方和外部(扬声器的标准)。

从SoX移植。

27.87 equalizer

应用一个双极峰值均衡(EQ)过滤器。使用此过滤器,可以提高或降低选定频率及其周围的信号水平,同时(与带通和带阻过滤器不同)其他频率保持不变。

为了产生复杂的均衡曲线,可以多次运行此过滤器,每次设置不同的中心频率。

该过滤器支持以下选项:

frequency, f

设置过滤器的中心频率,单位为Hz。

width_type, t

设置过滤器带宽指定方法。

h

赫兹

q

品质因数

o

倍频程

s

坡度

k

千赫兹

width, w

用width_type单位指定过滤器的带宽。

gain, g

设置所需增益或衰减,单位为dB。 在使用正增益时请注意剪辑。

mix, m

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

channels, c

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

normalize, n

标准化双二阶滤波器系数,默认未启用。 启用后,将标准化DC的幅度响应为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

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

s16

始终使用签名的16位。

s32

始终使用签名的32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置用于反向IIR处理的块大小。 如果将此值设置为足够高的值(高于接近于零值时被截断的冲动响应长度),则过滤器将变为线性相位,或者如果设置得不够大,它只会产生难看的伪影。

请注意,当设置为非零值时,过滤器延迟将正好是该样本数。

27.87.1 示例

  • 在1000赫兹衰减10分贝,带宽为200赫兹:
    equalizer=f=1000:t=h:width=200:g=-10
    
  • 在1000赫兹应用2分贝增益,品质因数为1,同时在100赫兹衰减5分贝,品质因数为2:
    equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
    

27.87.2 命令

此过滤器支持以下命令命令:

frequency, f

更改均衡器频率。 命令的语法是:"频率"

width_type, t

更改均衡器带宽类型。 命令的语法是:"带宽类型"

width, w

更改均衡器带宽。 命令的语法是:"带宽"

gain, g

更改均衡器增益。 命令的语法是:"增益"

mix, m

更改均衡器混合量。 命令的语法是:"混合量"

27.88 extrastereo

线性增加左右声道之间的差异,为播放增加某种“现场”效果。

该过滤器支持以下选项:

m

设置差异系数(默认值:2.5)。0.0 表示单声道声音(两个声道的平均值),1.0 表示声音将保持不变,-1.0 表示左右声道将互换。

c

启用剪辑。默认已启用。

27.88.1 命令

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

27.89 firequalizer

使用任意频率响应应用FIR均衡。

该过滤器支持以下选项:

gain

设置增益曲线方程(单位为dB)。表达式可以包含变量:

f

评估的频率

sr

样本率

ch

声道编号,禁用多声道评估时设置为0

chid

声道ID,参见libavutil/channel_layout.h,禁用多声道评估时设置为首个声道ID

chs

声道数

chlayout

通道布局,参见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.

accuracy

以Hz为单位设置过滤器精度。更低的值意味着更高精度。默认值为5.

wfunc

设置窗口函数。可接受的值为:

rectangular

矩形窗口,当增益曲线已经平滑时很有用

hann

汉宁窗(默认)

hamming

海明窗

blackman

布莱克曼窗

nuttall3

连续一阶导数的三项努特尔窗

mnuttall3

最小三项不连续努特尔窗

nuttall

连续一阶导数的四项努特尔窗

bnuttall

最小四项不连续努特尔(布莱克曼-努特尔)窗

bharris

布莱克曼-哈里斯窗

tukey

土其窗

fixed

如果启用,使用固定数量的音频样本。这在使用较大延迟进行过滤时可提高速度。默认是禁用。

multi

启用多通道评估增益。默认是禁用。

zero_phase

通过减去时间戳来抵消延迟,启用零相位模式。默认是禁用。

scale

设置增益使用的尺度。可接受的值为:

linlin

线性频率,线性增益

linlog

线性频率,对数增益(以分贝计)(默认)

loglin

对数频率(以八度音阶为单位,其中20 Hz为0),线性增益

loglog

对数频率,对数增益

dumpfile

设置用于转储的文件,适合用于gnuplot。

dumpscale

设置转储文件的尺度。可接受的值与尺度选项一致。默认是linlog。

fft2

启用使用复数FFT的双通道卷积。这显著提高速度。默认是禁用。

min_phase

启用最小相位脉冲响应。默认是禁用。

27.89.1 示例

  • 1000 Hz的低通滤波:
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 带增益条目的1000 Hz低通滤波:
    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
    

27.90 镶边器

将镶边效果应用于音频。

过滤器接受以下选项:

delay

设置基础延迟(单位为毫秒)。范围从0到30。默认值为0。

depth

设置额外扫描延迟(单位为毫秒)。范围从0到10。默认值为2。

regen

设置再生的百分比(延迟信号反馈)。范围从-95到95。默认值为0。

width

设置延迟信号与原始信号混合的百分比。范围从0到100。默认值为71。

speed

设置每秒扫描次数(Hz)。范围从0.1到10。默认值为0.5。

shape

设置扫描波形,可以是三角波正弦波。默认值为正弦波.

phase

设置扫描波对多通道的百分比移位。范围从0到100。默认值为25。

interp

设置延迟线插值方式,可以是线性二次插值。默认是线性.

27.91 哈斯效应

将哈斯效应应用于音频。

注意,这在单声道信号上应用最有意义。使用此滤波器应用于单声道信号时,它提供了一些方向感并扩展了其立体声图像。

过滤器接受以下选项:

level_in

设置输入电平。默认值为1,或0分贝

level_out

设置输出电平。默认值为1,或0分贝。

side_gain

设置应用于信号侧部分的增益。默认值为1.

middle_source

设置中间源的类型。可以是以下之一:

left

选择左声道。

right

选择右声道。

mid

选择立体声图像的中间部分信号。

side

选择立体声图像的侧部信号。

middle_phase

更改中间相位。默认是禁用。

left_delay

设置左声道延迟。默认值为2.05毫秒。

left_balance

设置左声道平衡。默认值为-1.

left_gain

设置左声道增益。默认值为1.

left_phase

更改左相位。默认是禁用。

right_delay

设置右声道延迟。默认值为2.12毫秒。

right_balance

设置右声道平衡。默认值为1.

right_gain

设置右声道增益。默认值为1.

right_phase

更改右相位。默认值为启用。

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

过滤器接受以下选项:

disable_autoconvert

禁用过滤器图中的任何自动格式转换或重采样。

process_stereo

一起处理立体声通道。如果各通道之间的目标增益不匹配,则认为无效并使用最后一个有效的目标增益。

cdt_ms

设置代码检测计时器周期(单位为毫秒)。

force_pe

始终扩展超过-3dBFS的峰值,即使未信号PE。

analyze_mode

用单一音调替换音频,并调整振幅以信号一些特定的解码过程方面。输出文件可以在音频编辑器中与原始音频一起加载以辅助分析。

analyze_mode=pe:force_pe=true可以用来查看所有超过PE级别的样本。

模式包括:

0, off

禁用

1, lle

每个样本的增益调整水平

2, pe

发生峰值扩展的样本

3, cdt

代码检测计时器处于活动状态的样本

4, tgm

目标增益在通道之间不匹配的样本

27.93 耳机

应用头相关传递函数(HRTFs),通过耳机创建虚拟扬声器围绕用户进行双耳聆听。HRIR通过额外的流提供,每个通道需要一个立体声输入流。

过滤器接受以下选项:

map

设置卷积输入流的映射。参数是以'|'分隔的频道名称列表,按过滤器提供的额外流的顺序指定。这也指定输入流的数量。输入流的数量必须不小于第一个流的通道数量加一。

gain

设置应用于音频的增益。值单位为分贝。默认值为0。

type

设置处理类型。可以是时间域频率域. 时间域是在时间域处理音频,这很慢。频率域是在频率域处理音频,这很快。默认是频率域.

lfe

为低频效果通道设置自定义增益。值单位为分贝。默认值为0。

size

设置将同时处理的样本数量的帧大小。默认值为1024。允许范围是1024到96000。

hrir

设置HRIR流的格式。默认值为立体声。备选值是多通道。如果设置为立体声,额外流的数量应该大于或等于第一输入流中的通道数量。此外,每个额外流应该具有立体声通道的数量。如果设置为多通道,额外流的数量应该正好为一个。此外,额外流的输入通道数量应该等于或大于第一输入流通道数量的两倍。

27.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下混合,但现在为多通道 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
    

27.94 高通滤波器

应用3dB点频率的高通滤波器。滤波器可以是单极,或是双极(默认)。每个极每八度音阶的滤波器衰减为6dB(每十倍频范围20dB每极)。

过滤器接受以下选项:

frequency, f

设置频率(单位为Hz)。默认值为3000。

poles, p

设置极数量。默认值为2。

width_type, t

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

h

赫兹

q

Q因子

o

倍频程

s

斜率

k

千赫

width, w

用宽度类型单位指定滤波器的带宽。只适用于双极滤波器。默认值为0.707q,生成巴特沃斯响应。

mix, m

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

channels, c

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

normalize, n

规范化双二阶系数,默认情况下禁用。启用后将在DC点处规范化幅度响应为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

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

s16

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

s32

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

f32

始终使用32位浮点。

f64

始终使用64位浮点。

block_size, b

设置用于逆IIR处理的块大小。如果这个值设置得足够高(高于脉冲响应长度在接近零值时被截断),过滤将变成线性相位,否则如果不够高,则只会产生不良的伪影。

注意,当设置为非零值时,过滤延迟将正好是这个样本数。

27.94.1 命令

此过滤器支持以下命令:

frequency, f

更改高通频率。命令的语法是:"频率"

width_type, t

更改高通宽度类型。命令的语法是:"宽度类型"

width, w

更改高通宽度。命令的语法是:"宽度"

mix, m

更改高通混合。命令的语法是:"混合"

27.95 合并

将多个输入流合并为一个多通道流。

它接受以下参数:

inputs

输入流数量。默认值为2。

channel_layout

所需输出频道布局。默认值为立体声。

map

从输入映射到输出的频道。参数是以'|'分隔的映射列表,每个映射形式为输入索引.输入频道-输出频道输入索引是输入流的0基索引。输入频道可以是输入频道的名称(例如前左为FL)或其在指定输入流中的索引。输出频道是输出频道的名称。

过滤器将在未明确指定映射时尝试猜测映射。它首先尝试找到一个未使用的匹配输入频道,如果失败,则选择第一个未使用的输入频道。

合并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

27.96 LADSPA

加载一个LADSPA(Linux音频开发者简单插件API)插件。

要启用此过滤器的编译,您需要使用以下配置FFmpeg:--enable-ladspa.

file, f

指定要加载的LADSPA插件库名称。如果环境变量LADSPA_PATH已定义,LADSPA插件将在环境变量中定义的用冒号分隔的目录列表中搜索,否则将在标准的LADSPA路径中搜索,路径顺序为:LADSPA_PATH, otherwise in the standard LADSPA paths, which are in this order: HOME/.ladspa/lib/, /usr/local/lib/ladspa/, /usr/lib/ladspa/.

plugin, p

指定库中的插件。一些库仅包含一个插件,但其他库包含多个插件。如果未设置过滤器,将列出指定库中的所有可用插件。

controls, c

设置一个'|'分隔的控件列表,其中包含一个或多个决定加载的插件行为的浮点值(例如延迟、阈值或增益)。控件需要使用以下语法定义:c0=值0|c1=值1|c2=值2|...,其中值i是设置在第i个控件上的值。或者也可以使用以下语法定义:值0|值1|值2|...,其中值i是设置在第i个控件上的值。如果controls设置为help,将输出所有可用控件及其有效范围。

sample_rate, s

指定采样率,默认值为44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧中每条音频通道的样本数量,默认值为1024。仅在插件没有输入时使用。

duration, d

设置所生成音频的最小持续时间。关于更多信息,请参见(ffmpeg-utils)ffmpeg-utils(1)手册中时间持续时间部分。有关可接受的语法。 请注意,生成的持续时间可能大于指定的持续时间, 因为生成的音频始终在完整帧的结尾处被剪切。 如果未指定或表示的持续时间为负值,则音频被 假定为永远生成。 仅在插件没有输入时使用。

latency, l

启用延迟补偿,默认情况下禁用。 仅在插件具有输入时使用。

27.96.1 示例

  • 列出 amp(LADSPA 示例插件)库中的所有可用插件:
    ladspa=file=amp
    
  • 列出所有可用的控制项及其有效范围用于vcf_notch插件来自VCF库:
    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 插件):
    ladspa=file=tap_reverb:tap_reverb
    
  • 生成振幅为 0.2 的白噪声:
    ladspa=file=cmt:noise_source_white:c=c0=.2
    
  • 使用插件生成 20 bpm 的点击声C* Click - Metronome来自C* Audio Plugin Suite(CAPS) 库:
    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 的快速前瞻限幅器将音量增加 20dBSWH Plugins集合:
    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
    
  • 使用Narrower减少立体声效果来自C* Audio Plugin Suite(CAPS) 库:
    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
    

27.96.2 命令

此过滤器支持以下命令:

cN

修改第 N-th 控制值。

如果指定的值无效,则将其忽略并保持之前的值。

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

输入文件的测量综合音量。 范围是 -99.0 - +0.0。

measured_LRA, measured_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_I, measured_LRA, measured_TP, andmeasured_thresh必须全部指定。目标 LRA 不应 低于源 LRA,并且综合音量的变化不应 导致真峰值超过目标 TP。如果任何这些 条件不满足,则归一化模式将回退到动态。 选项是truefalse。默认是true.

dual_mono

将单声道输入文件视为“伪双声道”。如果单声道文件打算在 立体声音响系统上播放,其 EBU R128 测量将感知不准确。 如果设置为true,此选项将补偿此效果。 多声道输入文件不受此选项影响。 选项为 true 或 false。默认值为 false。

print_format

设置统计信息的打印格式。选项为 summary, json 或 none。 默认值为 none。

27.98 lowpass

应用一个 3dB 点频率的低通滤波器。 滤波器可以是单极点或双极点(默认)。 滤波器每个极点每个八度衰减 6dB(每个极点每个十倍频程 20dB)。

滤波器接受以下选项:

frequency, f

以 Hz 设置频率。默认是 500。

poles, p

设置极点数。默认是 2。

width_type, t

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

h

Hz

q

品质因数 (Q因数)

o

八度

s

斜率

k

kHz

width, w

以 width_type 单位指定滤波器的带宽。 仅适用于双极点滤波器。 默认值是 0.707q,提供 Butterworth 响应。

mix, m

在输出中使用滤波信号的比例。默认是 1。 范围是 0 到 1。

channels, c

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

normalize, n

归一化双二次系数,默认是禁用的。 启用时会对 DC 的幅度响应进行归一化到 0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

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

s16

始终使用 16 位有符号数。

s32

始终使用 32 位有符号数。

f32

始终使用 32 位浮点数。

f64

始终使用 64 位浮点数。

block_size, b

设置用于反向 IIR 处理的块大小。如果此值设置得足够高(高于当接近零时被截断的脉冲响应长度),则过滤将成为线性相位,否则如果不够大,则只会产生难听的伪影。

请注意,当设置为非零值时,过滤器延迟将正好是该值数量的样本。

27.98.1 示例

  • 仅低通滤波 LFE 通道,如果不存在 LFE 则不执行操作:
    lowpass=c=LFE
    

27.98.2 命令

此过滤器支持以下命令:

frequency, f

改变低通频率。 命令语法是:"频率"

width_type, t

更改低通宽度类型。 命令语法是:"宽度类型"

width, w

更改低通宽度。 命令语法是:"宽度"

mix, m

更改低通混合比例。 命令语法是:"混合"

27.99 lv2

加载一个 LV2(LADSPA 第二版)插件。

要启用该过滤器的编译,你需要使用--enable-lv2.

plugin, p

指定插件 URI。你可能需要对 ‘:’ 进行转义。

controls, c

设置 "|" 分隔的控件列表,它们是零个或几个浮点值,用于确定加载插件的行为(例如延迟, 阈值或增益)。 如果controls设置为help,则打印所有可用的控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧每通道的样本数,默认是 1024。仅在插件没有输入时使用。

duration, d

设置生成音频的最小持续时间。参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分有关可接受语法的详细说明。 请注意,生成的持续时间可能大于指定的持续时间, 因为生成的音频始终在完整帧的结尾处被剪辑。 如果未指定或表达的持续时间为负值,则音频被认为是永久生成的。 仅在无输入的插件中使用。

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

27.99.2 命令

此过滤器支持由插件导出的所有选项作为命令。

27.100 mcompand

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

输入音频通过 4 阶 Linkwitz-Riley IIR 被分成多个频段。 这类似于扬声器的分频器,并在没有压缩器动作时产生平坦的频率响应。

接受以下参数:

args

此选项语法是: attack,decay,[attack,decay..] 软膝点 分频频率 [延迟 [初始音量 [增益]]] | attack,decay ... 有关每个项目的解释,请参考压缩过滤器文档。

27.101 pan

以特定增益级别混合通道。过滤器接受输出 频道布局后跟一组通道定义。

此过滤器还设计用于高效地重新映射音频 流的通道。

过滤器接受以下形式的参数: "l|输出定义|输出定义|..."

l

输出通道布局或通道数量

outdef

输出通道规范,形式为: "输出名称=[增益*]输入名称[(+-)[增益*]输入名称...]"

out_name

要定义的输出通道,可以是通道名称(FL,FR 等)或通道编号(c0,c1 等)

gain

通道的乘法系数,1 表示音量不变

in_name

要使用的输入通道,请参见输出名称以获取详细信息; 无法混合命名和编号输入通道

如果用 ‘<’ 替代了通道规范中的 ‘=’, 则该规范的增益将被重新归一化,以使总和为 1,从而避免剪辑噪声。

27.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" 选项),除非有非常具体的需求。

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

27.102 replaygain

ReplayGain 扫描过滤器。该过滤器将音频流作为输入并输出不变。 在过滤结束时显示track_gain以及track_peak.

该过滤器接受以下导出的只读选项:

track_gain

流结束时导出的音轨增益(以 dB 为单位)。

track_peak

流结束时导出的音轨峰值。

27.103 resample

转换音频样本格式、采样率和通道布局。它 不是直接使用的。

27.104 rubberband

使用 librubberband 进行时间拉伸和音高移位。

要启用此过滤器的编译,你需要使用--enable-librubberband.

过滤器接受以下选项:

tempo

设置节奏缩放因子。

pitch

设置音高缩放因子。

transients

设置瞬态检测器。 可能的值是:

清晰
混合
平滑
detector

设置检测器。 可能的值是:

复合
打击乐
柔和
phase

设置相位。 可能的值是:

层流
独立
window

设置处理窗口大小。 可能的值是:

标准
smoothing

设置平滑。 可能的值是:

关闭
开启
formant

在移动音高时启用共振峰保护。 可能的值是:

移动
保留
pitchq

设置音高质量。 可能的值是:

质量
速度
一致性
channels

设置通道。 可能的值是:

分开
一起

27.104.1 命令

此过滤器支持以下命令:

tempo

改变滤镜节奏缩放因子。 命令语法是:"节奏"

pitch

改变滤镜音高缩放因子。 命令语法是:"音高"

27.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所有侧链流通道的平均 或侧链流中较响的通道(maximum)影响减小。 默认值为average.

detection

是否在peak情况下采用精确信号或在rms情况下采用 RMS 信号。 默认值为rms,后者主要较为平滑。

level_sc

设置侧链增益。默认值为 1,范围在 0.015625 到 64 之间。

mix

设置输出中压缩信号的使用程度。默认值为 1。 范围在 0 到 1 之间。

27.105.1 命令

此滤镜支持上述所有选项作为命令.

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

27.106 sidechaingate

侧链门像正常的(宽带)门一样运行,但能在发送到增益减少阶段之前过滤检测到的信号。 通常门使用全频率信号检测超过阈值的级别。 例如:如果你从侧链信号中切掉低频,门将仅在出现不够高的高频时减少音轨的音量。 通过这种技术,你可以减少自然鼓的共振或去除强烈失真的吉他中被静音击弦产生的“隆隆声”。 它需要两个输入流并返回一个输出流。 第一个输入流根据第二个流的信号进行处理。

滤镜接受以下选项:

level_in

设置过滤前的输入电平。 默认值为 1,允许范围从 0.015625 到 64。

mode

设置运行模式。可以是upwarddownward。 默认值为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。

27.106.1 命令

此滤镜支持上述所有选项作为命令.

27.107 silencedetect

检测音频流中的静音。

当检测到输入音频音量小于或等于噪声容忍值的持续时间大于或等于最小检测噪声持续时间时,该滤镜会记录一条消息。

打印的时间和持续时间以秒为单位。第一个帧的lavfi.silence_startlavfi.silence_start.X元数据键在时间戳等于或超过检测持续时间时设置,包含静音的第一个帧的时间戳。

lavfi.silence_durationlavfi.silence_duration.Xlavfi.silence_endlavfi.silence_end.X元数据键在静音后的第一个帧设置。如果mono是启用的并且每个通道单独评估,则使用后缀化的键,.X对应于通道编号。X corresponds to the channel number.

滤镜接受以下选项:

noise, n

设置噪声容忍度。可以以 dB 指定(如果在指定值后附加了“dB”)或以幅度比指定。 默认值为 -60dB 或 0.001。

duration, d

设置静音持续时间直到通知(默认值为 2 秒)。请参阅(ffmpeg-utils)ffmpeg-utils(1) 手动中的时间持续部分了解接受的语法。

mono, m

单独处理每个通道,而不是合并。默认情况下禁用。

27.107.1 示例

  • 检测噪声容忍度为 -50dB 的 5 秒静音:
    silencedetect=n=-50dB:d=5
    
  • 完整示例,使用ffmpeg检测静音,噪声容忍度为 0.0001,时间设置为silence.mp3:
    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
    

27.108 silenceremove

移除音频开头、中间或末尾的静音。

滤镜接受以下选项:

start_periods

此值用于指示是否应该修剪音频开头的静音。值为零表示不应修剪开头的静音。 在指定非零值时,它会修剪音频直到找到非静音。 通常,在修剪音频开头的静音时,start_periods将为1但可以增加到更高的值以修剪所有音频,直至特定数量的非静音频段。 默认值为0.

start_duration

指定检测到非静音所需时间的数量,然后停止修剪音频。 通过增加持续时间,可以将噪音突发视为静音并修剪掉。 默认值为0.

start_threshold

这表示应将哪些样本值视为静音。对于数字音频,值0可能没问题,但对于从模拟录制的音频,可能需要增加该值以考虑背景噪声。 可以指定为 dB(如果在指定值后附加了“dB”)或以幅度比指定。 默认值为0.

start_silence

指定修剪后音频开头保留的静音最大持续时间。 默认值为 0,相当于修剪所有检测到为静音的样本。

start_mode

指定检测多通道音频开头静音结束的方式。 可以是任意所有。 默认值为任意。 使用任意,在任何通道中检测到非静音样本时,会触发音频流开头静音修剪结束。 使用所有,只有所有通道中每一个样本都检测到非静音时,才会触发音频流开头静音修剪结束,此限制适用。

stop_periods

设置修剪音频末尾静音的计数。在指定正值时,在找到指定静音周期后修剪音频。 要从文件中间移除静音,请指定一个stop_periods为负值。该值将被视为正值,并用于指示效果应根据stop_periods重新开始处理,使其适合移除音频中间的静音周期。 默认值为0.

stop_duration

指定存在静音的持续时间后不再复制音频。 通过指定更长的持续时间,可以在音频中保留所需的静音。 默认值为0.

stop_threshold

start_threshold相同,但用于修剪音频末尾的静音。 可以指定为 dB(如果在指定值后附加了“dB”)或以幅度比指定。 默认值为0.

stop_silence

指定修剪后音频末尾保留的静音最大持续时间。 默认值为 0,相当于修剪所有检测到为静音的样本。

stop_mode

指定检测多通道音频开始后的静音开始方式。 可以是任意所有。 默认值为所有。 使用任意,在任何通道中检测到静音样本时,会触发音频流开始后静音修剪开始,此限制适用。 使用所有,只有所有通道中每一个样本都检测到静音时,才会触发音频流开始后静音修剪开始。

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.

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

27.108.2 命令

此过滤器支持一些上述选项,如命令.

27.109 SOFAlizer

SOFAlizer 使用头相关传递函数 (HRTFs) 为用户创建虚拟扬声器,以通过耳机进行双耳聆听(支持多达 9 声道的音频格式)。 HRTFs 存储在 SOFA 文件中(请参阅http://www.sofacoustics.org/获取数据库)。 SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。

要启用此过滤器的编译,您需要通过以下配置进行设置:--enable-libmysofa.

过滤器接受以下选项:

sofa

设置用于渲染的 SOFA 文件。

gain

设置应用于音频的增益值。值以 dB 为单位。默认值为 0。

rotation

设置虚拟扬声器的旋转角度(度)。默认值为 0。

elevation

设置虚拟扬声器的仰角(度)。默认值为 0。

radius

设置扬声器与使用近场 HRTFs 的听者之间的距离(米)。默认值为 1。

type

设置处理类型。可选项为时间频率. 时间是在时域中处理音频,这很慢。频率是在频域中处理音频,这很快。 默认值为频率.

speakers

设置虚拟扬声器的自定义位置。此选项的语法为: <CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。 每个虚拟扬声器由短信道名称、方位角和仰角(度)描述。 每个虚拟扬声器描述由 ‘|’ 分隔。 例如,要覆盖前左和前右信道位置,使用: ‘speakers=FL 45 15|FR 345 15’。 无法识别信道名称的描述将被忽略。

lfegain

设置低频效果(LFE)信道的自定义增益。值以 dB 为单位。默认值为 0。

framesize

设置自定义帧大小(样本数)。默认值为 1024。 允许的范围是 1024 到 96000。仅在选项 ‘type’ 设置为频率.

normalize

导入 SOFA 文件时是否应对所有 IRs 进行归一化。 默认情况下已启用。

interpolate

如果确切位置与输入的 IRs 不匹配,是否将最近的 IRs 与邻近的 IRs 进行插值。默认情况下已禁用。

minphase

加载 SOFA 文件时是否对所有 IRs 进行最小相位处理。 默认情况下已禁用。

anglestep

设置邻居搜索角度步长。仅在选项插值已启用时使用。

radstep

设置邻居搜索半径步长。仅在选项插值已启用时使用。

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

27.110 speechnorm

Speech Normalize。

此过滤器扩展或压缩音频样本的每个半周期 (所有样本值全部大于零或全部小于零并且介于两个零交叉间的本地样本集), 具体取决于阈值值,以使音频在受以下选项控制的条件下达到目标峰值值。

过滤器接受以下选项:

peak, p

设置扩展的目标峰值。指定归一化音频输入的最高允许绝对幅度级别。 默认值为 0.95。允许的范围为 0.0 到 1.0。

expansion, e

设置最大扩展因子。允许的范围为 1.0 到 50.0。默认值为 2.0。 此选项控制样本的最大本地半周期扩展。 最大扩展将使本地峰值达到目标峰值,但不会超过它, 并且新峰值与之前峰值的比率不得超过此选项值。

compression, c

设置最大压缩因子。允许范围是 1.0 到 50.0。默认值为 2.0。 只有当threshold选项设置为大于 0.0 的值时,此选项才会生效, 此时当本地峰值低于或等于由threshold设置的值时, 属于该峰值半周期的所有样本将按当前的压缩因子进行压缩。

threshold, t

设置阈值。默认值为 0.0。允许的范围为 0.0 到 1.0。 此选项指定哪些样本的半周期会被压缩,哪些会被扩展。 任何本地峰值低于或等于此选项值的半周期样本将根据当前压缩因子进行压缩, 否则如果高于阈值,则会根据扩展因子进行扩展, 以便达到目标峰值值但不超过它。

raise, r

设置每个样本半周期的扩展提升量。默认值为 0.001。 允许范围是 0.0 到 1.0。 这控制了每个新半周期的扩展因子的提升速度,直到达到expansion值。 将此选项设置过高可能会导致失真。

fall, f

设置每个样本半周期的压缩提升量。默认值为 0.001。 允许范围是 0.0 到 1.0。此选项控制每个新半周期的压缩因子 提升速度,直到达到compression值。

channels, h

指定要过滤的声道,默认情况下所有可用声道都被过滤。

invert, i

启用反转过滤,默认情况下禁用。此选项将反转threshold的解释。 启用时,任何具有本地峰值低于或等于threshold选项的样本半周期将被扩展,否则将被压缩。

link, l

链接声道以计算应用于每个被过滤频道样本的增益,默认情况下禁用。 禁用时,每个被过滤声道的增益计算是独立的, 否则如果启用此选项,将使用每个被过滤声道的所有可能增益中的最小值。

rms, m

设置扩展目标 RMS 值。这指定了归一化音频输入的最高允许 RMS 级别。 默认值是 0.0,因此禁用。允许范围是 0.0 到 1.0。

27.110.1 命令

此过滤器支持作为以下选项的命令.

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

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

softclip

启用软削波。导致模拟失真而不是苛刻的数字 0dB 削波。 默认情况下禁用。

mutel

静音左声道。默认情况下禁用。

muter

静音右声道。默认情况下禁用。

phasel

改变左声道相位。默认情况下禁用。

phaser

改变右声道相位。默认情况下禁用。

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。

phase

设置立体声相位(度)。默认值为 0。 允许范围是 0 到 360。

bmode_in, bmode_out

为 balance_in/balance_out 选项设置平衡模式。

可选以下之一:

balance

经典平衡模式。一次衰减一个声道。 增益最高提升到 1。

amplitude

类似于上述经典模式,但增益最高提升到 2。

power

平坦功率分布,范围为 -6dB 到 +6dB。

27.111.1 命令

此过滤器支持作为以下选项的命令.

27.111.2 示例

  • 应用卡拉 OK 类效果:
    stereotools=mlev=0.015625
    
  • 将 M/S 信号转换为 L/R:
    "stereotools=mode=ms>lr"
    

27.112 stereowiden

此过滤器通过抑制两个声道的共同信号,并延迟左信号到右声道和反之亦然, 从而增强立体声效果。

过滤器接受以下选项:

delay

左信号到右声道和反之亦然的延迟时间(毫秒)。 默认值为 20 毫秒。

feedback

延迟信号到右声道和反之亦然的增益量。 这为输出提供了左信号到右声道的延迟效果及其相反效果,产生扩展效果。 默认值为 0.3。

crossfeed

左声道到右声道的交叉传播(反向相位)。 这有助于抑制单声道。如果值为 1,它将取消所有两个声道共有的信号。 默认值为 0.3。

drymix

设置原始声道的输入信号电平。默认值为 0.8。

27.112.1 命令

此过滤器支持所有上述选项,除了delay作为命令.

27.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 波段的增益。

27.114 surround

应用环绕声音频上混过滤器。

此过滤器允许从音频流生成多声道输出。

过滤器接受以下选项:

chl_out

设置输出声道布局。默认情况下为5.1.

参见(ffmpeg-utils)ffmpeg-utils(1) 手册中频道布局部分的相关语法。 for the required syntax.

chl_in

设置输入声道布局。默认情况下为立体声.

参见(ffmpeg-utils)ffmpeg-utils(1) 手册中频道布局部分的相关语法。 for the required syntax.

level_in

设置输入音量级别。默认值为1.

level_out

设置输出音量级别。默认值为1.

lfe

如果输出声道布局具有 LFE 声道,则启用该声道输出。 默认情况下启用。

lfe_low

设置 LFE 低频截止频率。默认值为128Hz。

lfe_high

设置 LFE 高频截止频率。默认值为256Hz。

lfe_mode

设置 LFE 模式,可以为添加。 默认值为添加。 在添加模式中,LFE 声道由输入音频生成并添加到输出。 在模式,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.

27.115 倾斜搁架滤波器

使用二极搁架滤波器提升或削减音频的低频并削减或提升高频, 这种响应类似于标准Hi-Fi音调控制。 这也被称为搁架均衡(EQ)。

滤波器接受以下选项:

gain, g

设置在0 Hz时的增益。有效范围大约为-20 (大幅削减)到+20(大幅提升)。 使用正增益时需注意剪切。

frequency, f

设置滤波器的中心频率,因此可以扩展或减少 被提升或削减的频率范围。 默认值是3000Hz。

width_type, t

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

h

Hz

q

品质因数

o

倍频程

s

倾斜

k

kHz

width, w

确定滤波器搁架过渡的陡峭程度。

poles, p

设置极数。默认值是2。

mix, m

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

channels, c

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

normalize, n

归一化双二阶滤波器系数,默认情况下禁用。 启用后将DC的幅值响应归一化为0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波的精度。

auto

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

s16

始终使用16位签名整型。

s32

始终使用32位签名整型。

f32

始终使用32位浮点型。

f64

始终使用64位浮点型。

block_size, b

设置反向IIR处理使用的块大小。如果该值设置得足够高(高于当接近零值时截断的脉冲响应长度),滤波 将变为线相位,否则如果不够大则只会产生差劣的伪像。

注意,当设置为非零值时,滤波延迟将正好是该数字的样本数。

27.115.1 命令

此滤波器支持一些选项作为命令.

27.116 高音,高搁架

通过使用二极搁架滤波器提升或削减音频的高音(高频),与标准 Hi-Fi音调控制的响应相似。这也被称为搁架均衡(EQ)。

滤波器接受以下选项:

gain, g

设置提升音频时的增益。有效范围为-20(大幅削减)到+20(大幅提高)。 使用正增益时小心防止剪切。

frequency, f

设置滤波器的中心频率,可以用于扩展或减小增益或削减的频率范围。 默认值为3000Hz。

width_type, t

设置滤波器的带宽方法。

h

Hz

q

品质因数

o

倍频程

s

倾斜

k

kHz

width, w

决定滤波器斜移过渡的陡峭程度。

poles, p

设置极数。默认值为2。

mix, m

输出中使用滤波信号的量。默认值为1。 范围介于0和1之间。

channels, c

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

normalize, n

归一化双二阶滤波器系数,默认情况下禁用。 启用后将DC的幅值响应归一化到0dB。

transform, a

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

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置滤波精度。

auto

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

s16

始终使用16位签名整型。

s32

始终使用32位签名整型。

f32

始终使用32位浮点型。

f64

始终使用64位浮点型。

block_size, b

设置反向IIR处理使用的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度),滤波 将变为线相位,否则如果不够大将仅产生伪像。

注意,当设置为非零值时,滤波延迟将为该数字的样本数。

27.116.1 命令

此滤波器支持以下命令:

frequency, f

更改高音频率。 命令语法是:"频率"

width_type, t

更改高音宽度类型。 命令语法是:"宽度类型"

width, w

更改高音宽度。 命令语法是:"宽度"

gain, g

更改高音增益。 命令语法是:"增益"

mix, m

更改高音混合。 命令语法是:"混合"

27.117 颤音

正弦幅度调制。

滤波器接受以下选项:

f

以赫兹为单位的调制频率。亚谐波范围内(20 Hz或更少)的调制频率 会导致颤音效果。通过指定高于20 Hz的调制频率,滤波器也可用作 a环形调制器。 范围是0.1 - 20000.0。默认值是5.0 Hz。

d

百分比表示的调制深度。范围是0.0到1.0。 默认值是0.5。

27.118 颤音

正弦相位调制。

滤波器接受以下选项:

f

以赫兹为单位的调制频率。 范围是0.1 - 20000.0。默认值是5.0 Hz。

d

百分比表示的调制深度。范围是0.0到1.0。 默认值是0.5。

27.119 虚拟低音

应用音频虚拟低音滤波器。

此滤波器接受立体声输入并生成具有LFE(2.1)通道的立体声输出。 新生成的LFE通道增强了最初从两声道音频中获得的虚拟低音。 此滤波器输出的前左和前右通道与立体声输入无变化。

滤波器接受以下选项:

cutoff

设置虚拟低音截止频率。默认值是250 Hz。 允许范围是100到500 Hz。

strength

设置虚拟低音强度。允许范围是0.5到3。 默认值是3。

27.120 音量

调整输入音频的音量。

它接受以下参数:

volume

设置音频音量表达式。

输出值被限制在最大值。

输出音频音量由以下公式给定:

输出音量 = 音量 * 输入音量

的默认值为音量"1.0"。

precision

此参数表示数学精度。

它决定允许的输入样本格式,这会影响 音量缩放的精度。

fixed

8-bit定点;这限制输入样本格式为U8、S16和S32。

float

32-bit浮点型;这限制输入样本格式为FLT。(默认)

double

64-bit浮点型;这限制输入样本格式为DBL。

replaygain

选择在输入帧中遇到ReplayGain附加数据时的行为。

drop

移除ReplayGain附加数据,忽略其内容(默认)。

ignore

忽略ReplayGain附加数据,但将其保留在帧中。

track

优先使用track gain(如果存在)。

album

优先使用album gain(如果存在)。

replaygain_preamp

对选定的ReplayGain增益应用的预放大增益(以dB为单位)。

的默认值为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’时,仅有采样率tb变量可用,所有其他变量将评估为NAN。

27.120.1 命令

此滤波器支持以下命令:

volume

修改音量表达式。 命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

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

27.121 音量检测

检测输入视频的音量。

滤波器没有参数。它仅支持16位签名整型样本, 因此在需要时会转换输入。当输入流结束时,关于音量的统计信息将 记录在日志中。

尤其是,它将显示平均音量(均方根)、最大音量 (基于每个样本),以及所注册音量值的直方图 (从最大值到积累的1/1000样本的部分)。

所有音量均以相对于最大PCM值的分贝为单位。

27.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 dB,或10^-2.7。
  • 最大的样本为-4 dB,更确切地说,在-4 dB和-5 dB之间。
  • 有6个样本为-4 dB,62个为-5 dB,286个为-6 dB,等等。

换句话说,将音量提高+4 dB不会导致任何削波,将其提高+5 dB会导致6个样本的削波,等等。

28 个音频源

以下是当前可用音频源的描述。

28.1 abuffer

缓冲音频帧,并使其可供滤波链使用。

此源主要用于编程使用,特别是通过接口在libavfilter/buffersrc.h.

它接受以下参数:

time_base

将用于提交帧的时间基。它必须是一个浮点数或以分子/分母形式的数。

sample_rate

输入音频缓冲的采样率。

sample_fmt

输入音频缓冲的采样格式。可以是采样格式名称或在libavutil/samplefmt.h

channel_layout

输入音频缓冲的通道布局。可以是libavutil/channel_layout.c其对应的整数表示,也可以是libavutil/channel_layout.h

channels

输入音频缓冲的频道数量。如果频道数量通道布局都被指定,则它们必须一致。

28.1.1 示例

abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo

将指示源接受 44100Hz 的平面16位有符号立体声音频。由于名为“s16p”的采样格式对应于数字6,而“立体声”通道布局对应于值0x3,这等效于:

abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3

28.2 aevalsrc

生成由表达式指定的音频信号。

此源接受一个或多个表达式(每个通道一个),这些表达式被评估并用于生成相应的音频信号。

此源接受以下选项:

exprs

为每个单独频道设置用‘|’分隔的表达式列表。如果channel_layout选项未指定,则所选的通道布局取决于提供的表达式数量。否则,最后一个指定的表达式将应用于剩余的输出通道。

channel_layout, c

设置通道布局。指定的布局中的频道数必须与指定的表达式数量相等。

duration, d

设置音频源的最短持续时间。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以了解接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被截断。

如果未指定或表达的持续时间为负数,则假定音频将无限生成。

nb_samples, n

设置每个输出帧的每通道样本数,默认为1024。

sample_rate, s

指定采样率,默认为44100。

每个表达式可以包含以下常数:

n

被评估样本的编号,从0开始

t

被评估样本的时间,以秒为单位,从0开始

s

采样率

28.2.1 示例

  • 生成静音:
    aevalsrc=0
    
  • 生成440Hz频率的正弦信号,设置采样率为8000Hz:
    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)"
    
  • 在360Hz载波上生成2.5Hz双耳节拍:
    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
    

28.3 afdelaysrc

生成分数延迟FIR系数。

生成的流可以与afir滤波器一起用于过滤音频信号。

滤波器接受以下选项:

delay, d

设置分数延迟。默认值为0。

sample_rate, r

设置采样率,默认为44100。

nb_samples, n

设置每帧样本数。默认为1024。

taps, t

设置输出音频流中的滤波系数数量。默认值为0。

channel_layout, c

指定通道布局,可以是表示通道布局的字符串。默认通道布局值是“立体声”。

28.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均衡器系数的插值方法。可以是linear或是cubic.

phase, h

设置FIR滤波器的相位类型。可以是linear或是min:最小相位。默认为最小相位滤波器。

28.5 afirsrc

使用频率采样方法生成FIR系数。

生成的流可以与afir滤波器一起用于过滤音频信号。

滤波器接受以下选项:

taps, t

设置输出音频流中的滤波系数数量。默认值为1025。

frequency, f

为设置幅度和值的频率点排列。此值必须不递减,并且第一个元素必须为0,最后一个元素必须为1。元素间用空格分隔。

magnitude, m

frequency设置的每个频率点设置幅度值。值的数量必须与频率点的数量相同。值之间用空格分隔。

phase, p

frequency设置的每个频率点设置相位值。值的数量必须与频率点的数量相同。值之间用空格分隔。

sample_rate, r

设置采样率,默认值为44100。

nb_samples, n

设置每帧样本数。默认值为1024。

win_func, w

设置窗口函数。默认窗口函数为blackman。

28.6 anullsrc

空音频源,返回未处理的音频帧。它主要用作模板并在分析/调试工具中使用,或者用作忽略输入数据的滤波器的源(例如sox合成人滤波器)。

此源接受以下选项:

channel_layout, cl

指定通道布局,可以是整数或表示通道布局的字符串。默认值为通道布局是“立体声”。

请检查libavutil/channel_layout.c定义中的通道布局映射以找到字符串和通道布局值之间的映射。

sample_rate, r

指定采样率,默认为44100。

nb_samples, n

设置每个请求帧的样本数。

duration, d

设置音频源的持续时间。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以了解接受的语法。

如果未指定或表达的持续时间为负数,则假定音频将无限生成。

28.6.1 示例

  • 将采样率设置为48000 Hz并将通道布局设置为AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更简单的语法执行相同操作:
    anullsrc=r=48000:cl=mono
    

所有参数都需要显式定义。

28.7 flite

使用libflite库合成语音话语。

为了启用此过滤器的编译,您需要通过以下方式配置FFmpeg:--enable-libflite.

请注意,flite库2.0之前的版本不支持多线程。

滤波器接受以下选项:

list_voices

如果设置为1,则列出可用语音的名称并立即退出。默认值为0。

nb_samples, n

设置每帧的最大样本数。默认值为512。

textfile

设置包含要朗读文本的文件名。

text

设置要朗读的文本。

voice, v

设置用于语音合成的语音。默认值为kal。另请参阅列表语音选项。

28.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
    
  • ffplay朗读指定文本,使用flitelavfi设备:
    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
    

有关libflite的更多信息,请查看:http://www.festvox.org/flite/

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

28.8.1 示例

  • 生成60秒的粉红噪声,采样率为44.1 kHz,幅度为0.5:
    anoisesrc=d=60:c=pink:r=44100:a=0.5
    

28.9 hilbert

生成奇数抽头希尔伯特变换FIR系数。

生成的流可以与afir滤波器结合用于将信号相位偏移90度。

这在许多矩阵编码方案中使用,并用于解析信号生成。该过程通常被表示为乘以i(或j),即虚单位。

滤波器接受以下选项:

sample_rate, s

设置采样率,默认值为44100。

taps, t

设置FIR滤波器的长度,默认为22051。

nb_samples, n

设置每帧的样本数量。

win_func, w

生成FIR系数时设置窗口函数。

28.10 sinc

生成Sinc Kaiser窗口低通、高通、带通或带阻FIR系数。

生成的流可以与afir滤波器结合用于过滤音频信号。

滤波器接受以下选项:

sample_rate, r

设置采样率,默认值为44100。

nb_samples, n

设置每帧样本数。默认值为1024。

hp

设置高通频率。默认值为0。

lp

设置低通频率。默认值为0。如果高通频率低于低通频率并且低通频率大于0,则滤波器将创建带通滤波器系数,否则为带阻滤波器系数。

phase

设置滤波器的相位响应。默认值为50。允许范围从0到100。

beta

设置Kaiser窗口的β值。

att

设置停止带衰减。默认值为120dB,允许范围是40到180dB。

round

启用舍入,默认情况下禁用。

hptaps

设置高通滤波器的抽头数量。

lptaps

设置低通滤波器的抽头数量。

28.11 sine

生成由幅度为1/8的正弦波组成的音频信号。

音频信号是位精度相同的。

滤波器接受以下选项:

frequency, f

设置载波频率。默认值为440 Hz。

beep_factor, b

启用每秒一个频率为beep_factor倍于载波频率的周期性蜂鸣音。默认值为0,表示禁用蜂鸣音。

sample_rate, r

指定采样率,默认值为44100。

duration, d

指定生成音频流的持续时间。

samples_per_frame

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

该表达式可以包含以下常数:

n

输出音频帧的(连续)编号,从0开始。

pts

输出音频帧的展示时间戳(PTS),以TB单位。

t

输出音频帧的PTS,以秒为单位。

TB

输出音频帧的时间基准。

默认是1024.

28.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
    
  • 以1 kHz正弦波生成1602,1601,1602,1601,1602NTSC 模式:
    sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
    

29 音频接收器

以下是当前可用音频接收器的说明。

29.1 abuffersink

缓冲音频帧,并使它们可用于过滤器链的末端。

此接收器主要用于编程用途,特别是通过在以下定义的接口libavfilter/buffersink.h或选项系统。

它接受指向AVABufferSinkContext结构的指针,该结构定义了传入缓冲区的格式,并作为不透明参数传递给avfilter_init_filter进行初始化。

29.2 anullsink

空音频接收器;对输入音频绝不进行处理。它主要用作模板以及分析/调试工具使用。

30 视频滤镜

配置FFmpeg构建时,可以使用以下命令禁用任何现有滤镜。--disable-filters。 配置输出将显示构建中包含的视频滤镜。

以下是当前可用视频滤镜的说明。

30.1 addroi

在视频帧中标记感兴趣的区域。

帧数据保持不变,但会在帧上附加元数据,指示感兴趣区域,这可以影响后续编码的行为。通过多次应用滤镜可以标记多个区域。

x

区域距离帧左边缘的像素距离。

y

区域距离帧顶部边缘的像素距离。

w

区域宽度(像素)。

h

区域高度(像素)。

参数x, y, wh是表达式,可以包含以下变量:

iw

输入帧的宽度。

ih

输入帧的高度。

qoffset

在区域内应用的量化偏移。

这必须是范围在-1到+1之间的实数值。值为零表示质量没有变化。负值要求更高的质量(较少的量化),而正值则要求较低质量(更多的量化)。

范围经过校准,极端值表示可能的最大偏移——如果帧的其余部分被编码为最差质量,则偏移为-1表示即使如此,该区域也应该被编码为最好质量。中间值则以某种编解码器相关的方式进行插值。

例如,在10位H.264中,量化参数范围在-12到51之间。一个典型的qoffset值为-1/10,表示此区域的编码QP应该比帧其余部分小约整个范围的十分之一。所以,如果帧的大部分以QP约30编码,则此区域的QP大约为24(偏移值约为-6.3)。极端值-1表示无论帧其他部分如何处理,此区域应以最优质量的QP=-12编码。

clear

如果设置为true,添加新区域之前移除现有帧上的任意标记区域。

30.1.1 示例

  • 将框架的中心四分之一标记为感兴趣区域。
    addroi=iw/4:ih/4:iw/2:ih/2:-1/10
    
  • 将框架左边缘100像素宽的区域标记为非常不重要(编码为比框架其余部分更低的质量)。
    addroi=0:0:100:ih:+1/5
    

30.2 alphaextract

以灰度视频形式提取输入的alpha通道。这在使用alphamerge滤镜时特别有用。

30.3 alphamerge

用第二个输入的灰度值添加或替换主输入的alpha通道。这主要用于结合alphaextract以便在不支持alpha通道的格式中传输或存储具有alpha通道的帧序列。

例如,要从一个普通的YUV编码视频和一个使用alphaextract创建的单独视频重建完整帧,您可以使用:

movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]

30.4 amplify

放大当前像素与相同像素位置邻近帧之间的差异。

此滤镜接受以下选项:

radius

设置帧半径。默认值为2。允许范围从1到63。例如,半径为3会指示滤镜计算7帧的平均值。

factor

设置放大差异的因子。默认值为2。允许范围从0到65535。

threshold

为差异放大设置阈值。任何大于或等于此值的差异将不会改变源像素。默认值为10。 允许范围是0到65535。

tolerance

为差异放大设置容差。任何低于此值的差异将不会改变源像素。默认值为0。 允许范围是0到65535。

low

为更改源像素设置下限。默认值为65535。允许范围是0到65535。 此选项控制减少源像素值的最大可能值。

high

为更改源像素设置上线。默认值为65535。允许范围是0到65535。 此选项控制增加源像素值的最大可能值。

planes

设置要过滤的平面。默认是全部。允许范围是0到15。

30.4.1 命令

此滤镜支持以下命令,对应于同名选项:

factor
threshold
tolerance
low
high
planes

30.5 ass

subtitles滤镜相同,不同的是它不需要libavcodec和libavformat工作。而另一方面,它仅限于ASS(高级字幕)文件。

此滤镜除了subtitles滤镜的常见选项外,还接受以下选项:

shaping

设置整形引擎

可用值有:

auto

默认的libass整形引擎,是目前的最佳选择。

simple

快速的、与字体无关的整形引擎,仅能进行替换。

complex

使用OpenType进行替换和定位的较慢整形引擎。

默认值为auto.

30.6 atadenoise

对视频输入应用自适应时间平均去噪器。

此滤镜接受以下选项:

0a

设置第1平面的阈值A。默认值为0.02。 有效范围是0到0.3。

0b

设置第1平面的阈值B。默认值为0.04。 有效范围是0到5。

1a

设置第2平面的阈值A。默认值为0.02。 有效范围是0到0.3。

1b

设置第2平面的阈值B。默认值为0.04。 有效范围是0到5。

2a

设置第3平面的阈值A。默认值为0.02。 有效范围是0到0.3。

2b

设置第3平面的阈值B。默认值为0.04。 有效范围是0到5。

阈值A旨在响应输入信号的突变,而阈值B旨在响应输入信号的连续变化。

s

设置滤镜用于平均的帧数。默认值为9,必须是范围为[5, 129]的奇数。

p

设置用于平均的帧平面。默认值为全部。

a

设置滤镜用于平均的算法变体。默认值为pparallel。 也可以设置为sserial。

并行可能比串行更快,而反过来则从不会是真的。并行会在第一次超出阈值时提前中止,串行如果等于或低于阈值将继续处理摄于帧的另一部分。

0s
1s
2s

设置第1平面、第2平面或第3平面的西格玛。默认值为32767。 有效范围是0到32767。此选项控制以大小定义的半径内每个像素的权重。 默认值意味着每个像素具有相同的权重。将此选项设置为0实际上禁用过滤。

30.6.1 命令

此滤镜支持与选项相同的命令,除了选项s。 该命令接受与相应选项相同的语法。

30.7 avgblur

应用平均模糊滤镜。

此滤镜接受以下选项:

sizeX

设置横向半径大小。

planes

设置要过滤的平面。默认情况下过滤所有平面。

sizeY

设置纵向半径大小,如果为0,则与sizeX相同。 默认值为0.

30.7.1 命令

此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。

如果指定的表达式无效,则其保持当前值。

30.8 backgroundkey

将静态背景转换为透明。

此滤镜接受以下选项:

threshold

场景更改检测的阈值。

similarity

与背景的相似百分比。

blend

设置不相似像素的混合量。

30.8.1 命令

此滤镜支持以上所有选项作为命令.

30.9 bbox

计算输入帧亮度平面中非黑色像素的边界框。

此滤镜计算包含所有亮度值大于最低允许值的像素的边界框。 描述边界框的参数将输出到滤镜日志。

此滤镜接受以下选项:

min_val

设置最低亮度值。默认值为16.

30.9.1 命令

此滤镜支持以上所有选项作为命令.

30.10 bilateral

应用双边滤镜,进行空间平滑,同时保留边缘。

此滤镜接受以下选项:

sigmaS

设置高斯函数的西格玛,用于计算空间权重。 允许范围是0到512。默认值为0.1。

sigmaR

设置高斯函数的西格玛,用于计算范围权重。 允许范围是0到1。默认值为0.1。

planes

设置要过滤的平面。默认只过滤第一个。

30.10.1 命令

此滤镜支持以上所有选项作为命令.

30.11 bilateral_cuda

CUDA加速的双边滤镜,一种保留边缘的滤镜。 由于使用GPU加速,此滤镜在数学上是精确的。 为获得最佳输出质量,请使用一对一的色度抽样,例如yuv444p格式。

此滤镜接受以下选项:

sigmaS

设置高斯函数的西格玛,用于计算空间权重,也称为西格玛空间。 允许范围是0.1到512。默认值为0.1。

sigmaR

设置高斯函数的西格玛,用于计算颜色范围权重,也称为西格玛颜色。 允许范围是0.1到512。默认值为0.1。

window_size

设置双边功能的窗口大小,以确定要循环的邻居数量。 如果输入的数字是偶数,系统将自动加1。 允许范围是1到255。默认值为1。

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

30.12 bitplanenoise

显示并测量比特面噪声。

此滤镜接受以下选项:

bitplane

设置要分析的平面。默认值为1.

filter

过滤掉噪音像素从bitplane设置以上。 默认情况下禁用。

30.13 blackdetect

检测(几乎)完全黑的视频区间。可用于检测章节过渡、广告或无效录制。

此滤镜将其检测分析输送到日志和帧元数据中。如果发现至少指定最短持续时间的黑色片段,则会在日志中打印一行,显示开始和结束时间戳及持续时间,级别为info。此外,日志中还会打印一行级别为debug每帧打印一条信息,显示该帧检测到的黑色量。

该滤镜还会将元数据附加到黑色片段的第一个帧上,键为lavfi.black_start并将元数据附加到黑色片段结束后的第一个帧上,键为lavfi.black_end值为帧的时间戳。这些元数据会被添加,无论指定的最短持续时间如何。

该滤镜接受以下选项:

black_min_duration, d

设置检测到的黑色最小持续时间,以秒为单位。必须是非负浮点数。

默认值为2.0。

picture_black_ratio_th, pic_th

设置判定图像为"黑色"的阈值。 表达为以下比例的最小值:

黑色像素的数量 / 像素总数量

用于判定图像为黑色。 默认值为0.98。

pixel_black_th, pix_th

设置判定像素为"黑色"的阈值。

阈值表达为像素亮度的最大值,超过此值像素不被视作"黑色"。提供的值根据以下公式缩放:

绝对阈值 = 亮度最小值 + 黑色像素阈值 * 亮度范围大小

亮度范围大小亮度最小值依赖于输入视频格式,范围为[0-255](YUV全范围格式)和[16-235](YUV非全范围格式)。

默认值为0.10。

以下示例设置像素阈值为最小值,仅检测持续2秒或以上的黑色区间:

blackdetect=d=2:pix_th=0.00

30.14 blackframe

检测几乎完全黑的帧。可用于检测章节转换或广告。输出行包括检测到的帧编号、黑度百分比、文件中的位置(如果已知则提供)或-1以及时间戳(以秒为单位)。

为了显示输出行,需将日志级别至少设置为AV_LOG_INFO值。

此滤镜导出帧元数据lavfi.blackframe.pblack值表示图片中低于阈值的像素百分比。

它接受以下参数:

amount

低于阈值的像素百分比;默认为98.

threshold, thresh

像素值低于触发阈值的百分比;默认为32.

30.15 blend

将两个视频帧混合到一起。

滤镜需要两个输入流,并输出一个流,第一个输入为"顶部"图层,第二个输入为"底部"图层。默认情况下,当最长的输入终止时输出也终止。blend filter takes two input streams and outputs one stream, the first input is the "top" layer and second input is "bottom" layer. By default, the output terminates when the longest input terminates.

时间混合滤镜从单个流中提取两个连续帧,并输出将新帧与旧帧混合的结果。tblend (time blend) filter takes two consecutive frames from one single stream, and outputs the result obtained by blending the new frame on top of the old frame.

以下是接受的选项说明。

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

第二视频帧(底部图层)当前位置像素组件的值。

滤镜还支持blendframe sync(帧同步)选项。 options.

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

30.15.2 命令

此滤镜支持与选项相同的命令

30.16 blockdetect

检测帧的块状伪影,而不改变输入帧。

基于Remco Muijs和Ihor Kirenko的论文:"一种用于自适应视频处理的无参考块伪影测度"(2005年欧洲信号处理会议)。

滤镜接受以下选项:

period_min
period_max

为确定像素网格(周期)设置最小值和最大值。 默认值为[3,24]。

planes

设置要过滤的平面。默认仅为第一个平面。

30.16.1 示例

  • 确定第一个平面的块状伪影并搜索周期范围为[8,32]:
    blockdetect=period_min=8:period_max=32:planes=1
    

30.17 blurdetect

检测帧的模糊程度,而不改变输入帧。

基于Marziliano, Pina等的论文:"一种无参考感知模糊测量方法"。 允许基于块的缩略。

滤镜接受以下选项:

low
high

设置Canny阈值算法使用的低和高阈值。

高阈值选择"强"边缘像素,通过8连通性连接到低阈值选择的"弱"边缘像素。

低阈值高阈值值必须在[0,1]范围内,并且低阈值应小于或等于高阈值.

默认低阈值为0.04,默认高阈值为20/2550.1250/255.

radius

定义在边缘像素附近找局部最大值的搜索半径。

block_pct

仅为最显著的块确定模糊程度,以百分比表示。

block_width

为宽度为《block_width的块确定模糊程度。如果设置的值小于1,则不使用块,无论block_height.

block_height

为高度为《blockheight《block_height/的块球确定模糊程度。如果设置的值小于1无论。block_width.

planes

Set planes to filter. Default is first only.

30.17.1 Examples

  • Determine blur for 80% of most significant 32x32 blocks:
    blurdetect=block_width=32:block_height=32:block_pct=80
    

30.18 bm3d

Denoise frames using Block-Matching 3D algorithm.

The filter accepts the following options.

sigma

Set denoising strength. Default value is 1. Allowed range is from 0 to 999.9. The denoising algorithm is very sensitive to sigma, so adjust it according to the source.

block

Set local patch size. This sets dimensions in 2D.

bstep

Set sliding step for processing blocks. Default value is 4. Allowed range is from 1 to 64. Smaller values allows processing more reference blocks and is slower.

group

Set maximal number of similar blocks for 3rd dimension. Default value is 1. When set to 1, no block matching is done. Larger values allows more blocks in single group. Allowed range is from 1 to 256.

range

Set radius for search block matching. Default is 9. Allowed range is from 1 to INT32_MAX.

mstep

Set step between two search locations for block matching. Default is 1. Allowed range is from 1 to 64. Smaller is slower.

thmse

Set threshold of mean square error for block matching. Valid range is 0 to INT32_MAX.

hdthr

Set thresholding parameter for hard thresholding in 3D transformed domain. Larger values results in stronger hard-thresholding filtering in frequency domain.

estim

Set filtering estimation mode. Can be basic or final. Default is basic.

ref

If enabled, filter will use 2nd stream for block matching. Default is disabled for basic value of estim option, and always enabled if value of estim is final.

planes

Set planes to filter. Default is all available except alpha.

30.18.1 Examples

  • Basic filtering with bm3d:
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic
    
  • Same as above, but filtering only luma:
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic:planes=1
    
  • Same as above, but with both estimation modes:
    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
    
  • Same as above, but prefilter with nlmeans filter instead:
    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
    

30.19 boxblur

Apply a boxblur algorithm to the input video.

It accepts the following parameters:

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

A description of the accepted options follows.

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

Set an expression for the box radius in pixels used for blurring the corresponding input plane.

The radius value must be a non-negative number, and must not be greater than the value of the expression min(w,h)/2 for the luma and alpha planes, and of min(cw,ch)/2 for the chroma planes.

Default value for luma_radius is "2". If not specified, chroma_radius and alpha_radius default to the corresponding value set for luma_radius.

The expressions can contain the following constants:

w
h

The input width and height in pixels.

cw
ch

The input chroma image width and height in pixels.

hsub
vsub

The horizontal and vertical chroma subsample values. For example, for the pixel format "yuv422p", hsub is 2 and vsub is 1.

luma_power, lp
chroma_power, cp
alpha_power, ap

Specify how many times the boxblur filter is applied to the corresponding plane.

Default value for luma_power is 2. If not specified, chroma_power and alpha_power default to the corresponding value set for luma_power.

A value of 0 will disable the effect.

30.19.1 Examples

  • Apply a boxblur filter with the luma, chroma, and alpha radii set to 2:
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • Set the luma radius to 2, and alpha and chroma radius to 0:
    boxblur=2:1:cr=0:ar=0
    
  • Set the luma and chroma radii to a fraction of the video dimension:
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

30.20 bwdif

Deinterlace the input video ("bwdif" stands for "Bob Weaver Deinterlacing Filter").

Motion adaptive deinterlacing based on yadif with the use of w3fdif and cubic interpolation algorithms. It accepts the following parameters:

mode

The interlacing mode to adopt. It accepts one of the following values:

0, send_frame

Output one frame for each frame.

1, send_field

Output one frame for each field.

The default value is send_field.

parity

The picture field parity assumed for the input interlaced video. It accepts one of the following values:

0, tff

Assume the top field is first.

1, bff

Assume the bottom field is first.

-1, auto

Enable automatic detection of field parity.

The default value is auto. If the interlacing is unknown or the decoder does not export this information, top field first will be assumed.

deint

Specify which frames to deinterlace. Accepts one of the following values:

0, all

Deinterlace all frames.

1, interlaced

Only deinterlace frames marked as interlaced.

The default value is all.

30.21 bwdif_cuda

Deinterlace the input video using the bwdif algorithm, but implemented in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec and/or nvenc.

It accepts the following parameters:

mode

The interlacing mode to adopt. It accepts one of the following values:

0, send_frame

Output one frame for each frame.

1, send_field

Output one frame for each field.

The default value is send_field.

parity

The picture field parity assumed for the input interlaced video. It accepts one of the following values:

0, tff

Assume the top field is first.

1, bff

Assume the bottom field is first.

-1, auto

Enable automatic detection of field parity.

The default value is auto. If the interlacing is unknown or the decoder does not export this information, top field first will be assumed.

deint

Specify which frames to deinterlace. Accepts one of the following values:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的帧进行去隔行处理。

默认值为all.

30.22 ccrepack

重新封装CEA-708闭字幕辅助数据。

该滤镜修复了商业编码器中一些常见问题,这些问题与上游CEA-708负载格式错误相关,具体包括不正确的元组数量(针对目标FPS的错误cc_count)以及元组排序错误(例如,CEA-608元组未出现在负载的前几个条目中)。

30.23 cas

对视频流应用对比度自适应锐化滤镜。

该滤镜接受以下选项:

strength

设置锐化强度。默认值为0。

planes

设置要过滤的平面。默认值为过滤所有平面,除了alpha平面。

30.23.1 命令

此滤镜支持与选项相同的命令作为选项。

30.24 chromahold

除某些颜色外,移除所有颜色信息。

该滤镜接受以下选项:

color

不会被替换为中性色彩度的颜色。

similarity

与上述颜色的相似百分比。0.01仅匹配确切的关键颜色,而1.0匹配所有颜色。

blend

混合百分比。0.0使像素要么完全是灰色,要么完全不是灰色。较高的值会保留更多颜色。

yuv

表示传入的颜色已经是YUV格式而不是RGB。

像“绿色”或“红色”这样的文字颜色在此选项启用后不再有意义。可以使用此选项以十六进制数指定确切的YUV值。

30.24.1 命令

此滤镜支持与选项相同的命令作为选项。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值不变。

30.25 chromakey

YUV颜色空间的颜色/色度键控。

该滤镜接受以下选项:

color

将被替换为透明的颜色。

similarity

与关键颜色的相似百分比。

0.01仅匹配确切的关键颜色,而1.0匹配所有颜色。

blend

混合百分比。

0.0使像素要么完全透明,要么完全不透明。

较高的值会导致半透明像素,像素颜色越接近关键颜色则透明度越高。

yuv

表示传入的颜色已经是YUV格式而不是RGB。

像“绿色”或“红色”这样的文字颜色在此选项启用后不再有意义。可以使用此选项以十六进制数指定确切的YUV值。

30.25.1 命令

此滤镜支持与选项相同的命令作为选项。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值不变。

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

30.26 chromakey_cuda

基于CUDA加速的YUV颜色空间的颜色/色度键控。

此滤镜的工作方式与普通chromakey滤镜相同,但在CUDA帧上操作。有关详细信息和参数,请参阅chromakey.

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

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

平方差值。

默认距离类型为曼哈顿。

30.27.1 命令

此滤镜支持与选项相同的命令作为选项。命令接受与对应选项相同的语法。

30.28 chromashift

水平和/或垂直移动色度像素。

该滤镜接受以下选项:

cbh

设置水平移动色度蓝的量。

cbv

设置垂直移动色度蓝的量。

crh

设置水平移动色度红的量。

crv

设置垂直移动色度红的量。

edge

设置边缘模式,可以是模糊、默认值,或者扭曲.

30.28.1 命令

此滤镜支持上述所有选项作为命令.

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

设置ciescope大小,默认设置为512。

intensity, i

设置用于将输入像素值映射到CIE图表上的强度。

contrast

设置用于绘制超出活动颜色系统色域的舌状颜色的对比度。

corrgamma

校正显示在示波器上的伽玛值,默认启用。

showwhite

在CIE图表上显示白点,默认禁用。

gamma

设置输入伽玛。仅用于XYZ输入颜色空间。

fill

填充CIE颜色。默认启用。

30.30 codecview

可视化由一些编解码器导出的信息。

某些编解码器可以通过帧使用辅助数据或其他方式导出信息。例如,一些基于MPEG的编解码器通过export_mvs在编解码器中的flags2选项。

该滤镜接受以下选项:

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帧)

30.30.1 示例

  • 使用可视化所有帧的前向预测运动矢量ffplay:
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 使用可视化P帧和B帧的多方向运动矢量ffplay:
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

30.31 colorbalance

修改输入帧的主颜色(红色、绿色和蓝色)的强度。

滤镜允许在阴影、中间色调或高光区域中调整红青、绿洋红或蓝黄平衡。

正值调整将平衡偏向主颜色,负值则向补色偏移。

该滤镜接受以下选项:

rs
gs
bs

调整红、绿和蓝阴影(最暗像素)。

rm
gm
bm

调整红、绿和蓝中间色调(中间像素)。

rh
gh
bh

调整红、绿和蓝高光(最亮像素)。

选项的允许范围为[-1.0, 1.0]。默认值为0.

pl

更改颜色平衡时保持亮度。默认禁用。

30.31.1 示例

  • 添加红色色调到阴影:
    colorbalance=rs=.3
    

30.31.2 命令

此滤镜支持上述所有选项作为命令.

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

设置每个选项值的权重。默认值为0.0。允许范围是0.0到1.0。如果所有权重为0.0,则禁用过滤。rc, gm, by option value. Default value is 0.0. Allowed range is from 0.0 to 1.0. If all weights are 0.0 filtering is disabled.

pl

设置保持亮度的量。默认值为0.0。允许范围是0.0到1.0。

30.32.1 命令

此滤镜支持上述所有选项作为命令.

30.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可能的值为:

Possible values are:

manual
average
minmax
median

默认值为manual.

30.33.1 命令

此滤镜支持上述所有选项作为命令.

30.34 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此滤镜通过将同一像素中与其他颜色通道相关的值相加来修改一个颜色通道。例如,如果要修改的值为红色,则输出值将为:

=红色*rr + 蓝色*rb + 绿色*rg + alpha*ra

该滤镜接受以下选项:

rr
rg
rb
ra

调整输出红色通道对输入红、绿、蓝和alpha通道的贡献。默认值为1rr,以及0rg, rbra.

gr
gg
gb
ga

调整输出绿色通道对输入红、绿、蓝和alpha通道的贡献。默认值为1gg,以及0gr, gbga.

br
bg
bb
ba

调整输出蓝色通道对输入红、绿、蓝和alpha通道的贡献。默认值为1bb,以及0br, bgba.

ar
ag
ab
aa

调整输出alpha通道对输入红、绿、蓝和alpha通道的贡献。默认值为1aa,以及0ar, agab.

选项的允许范围为[-2.0, 2.0].

pc

设置保留颜色模式。接受的值为:

none

禁用颜色保留,这是默认设置。

lum

保留亮度。

max

保留RGB三元组的最大值。

avg

保留RGB三元组的平均值。

sum

保留RGB三元组的总和值。

nrm

保留RGB三元组的归一化值。

pwr

保留RGB三元组的幂值。

pa

设置更改颜色时的保留颜色量。允许范围从[0.0, 1.0]。默认值为0.0因此被禁用。

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

30.34.2 命令

该滤镜支持上述所有选项作为命令.

30.35 色彩化

在视频流上叠加纯色。

滤镜接受以下选项:

hue

设置颜色色调。允许范围是0至360。默认值是0。

saturation

设置颜色饱和度。允许范围是0至1。默认值是0.5。

lightness

设置颜色亮度。允许范围是0至1。默认值是0.5。

mix

设置源亮度的混合比例。默认设置为1.0。允许范围是0.0至1.0。

30.35.1 命令

该滤镜支持上述所有选项作为命令.

30.36 色键

RGB颜色空间的色键操作。该滤镜在8位RGB格式的帧上操作,设置与键颜色相似度半径内的像素的alpha分量为0。超出相似度半径的像素的alpha值视混合选项的值而定。

滤镜接受以下选项:

color

设置alpha将设置为0(完全透明)的颜色。参见ffmpeg-utils手册中的“颜色”部分。black.

similarity

设置键颜色周围的相似度半径,在此范围内的其他颜色也完全透明。计算距离与RGB值的单位分数距离相关。范围是0.01至1.0。0.01仅与键颜色的非常小半径匹配,而1.0匹配所有颜色。默认值是0.01.

blend

设置如何计算超出相似度半径的像素的alpha值。0.0使像素完全透明或完全不透明。较高的值使像素半透明,像素颜色越接近键颜色,透明度越高。范围是0.0至1.0。默认值是0.0.

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

30.36.2 命令

该滤镜支持与选项相同的命令。命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

30.37 色彩保持

从所有RGB颜色中移除所有颜色信息,除了某一种颜色。

滤镜接受以下选项:

color

不会被替换为中性灰的颜色。

similarity

与上述颜色的相似度百分比。0.01只匹配确切的键颜色,而1.0匹配所有颜色。

blend

混合百分比。0.0使像素完全变灰。较高的值保留更多颜色。

30.37.1 命令

该滤镜支持与选项相同的命令。命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

30.38 调色级

使用级别调整视频输入帧。

滤镜接受以下选项:

rimin
gimin
bimin
aimin

调整红色、绿色、蓝色和alpha的输入黑点。选项允许范围是[-1.0, 1.0]。默认值是0.

rimax
gimax
bimax
aimax

调整红色、绿色、蓝色和alpha的输入白点。选项允许范围是[-1.0, 1.0]。默认值是1.

输入级别用于增强高光(亮色调),加深阴影(暗色调),改变亮色调与暗色调的平衡。

romin
gomin
bomin
aomin

调整红色、绿色、蓝色和alpha的输出黑点。选项允许范围是[0, 1.0]。默认值是0.

romax
gomax
bomax
aomax

调整红色、绿色、蓝色和alpha的输出白点。选项允许范围是[0, 1.0]。默认值是1.

输出级别允许手动选择受约束的输出级别范围。

preserve

设置颜色保持模式。接受的值是:

none

禁用颜色保持,默认值。

lum

保持亮度。

max

保持RGB三元组的最大值。

avg

保持RGB三元组的平均值。

sum

保持RGB三元组的总和值。

nrm

保持RGB三元组的归一化值。

pwr

保持RGB三元组的功率值。

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

30.38.2 命令

该滤镜支持上述所有选项作为命令.

30.39 色彩映射

对视频流应用自定义色彩映射。

该滤镜需要三个输入视频流。第一流是将要被过滤的流。第二和第三个视频流指定源颜色到目标颜色映射的色块。

滤镜接受以下选项:

patch_size

设置源和目标视频流色块的大小,以像素为单位。

nb_patches

设置源和目标视频流中使用的色块的最大数量。默认值是附加视频流中可用色块的数量。最大允许色块数量是64.

type

设置目标颜色的调整方式。可以是relativeabsolute。默认值是absolute.

kernel

设置用于测量映射颜色之间差异的内核。

接受的值是:

euclidean
weuclidean

默认是euclidean.

30.40 色彩矩阵

转换颜色矩阵。

滤镜接受以下选项:

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

30.41 颜色空间

转换颜色空间、传递特性或颜色主色调。输入视频需要具有偶数大小。

滤镜接受以下选项:

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

常量伽玛值2.2

gamma28

常量伽玛值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

电影

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22磷光体

range

指定输出颜色范围。

接受的值是:

tv

电视(受限范围)

mpeg

MPEG(受限范围)

pc

PC(全部范围)

jpeg

JPEG(全部范围)

format

指定输出颜色格式。

接受的值是:

yuv420p

YUV 4:2:0 平面 8-bit

yuv420p10

YUV 4:2:0 平面 10-bit

yuv420p12

YUV 4:2:0 平面 12-bit

yuv422p

YUV 4:2:2 平面 8-bit

yuv422p10

YUV 4:2:2 平面 10-bit

yuv422p12

YUV 4:2:2 平面 12-bit

yuv444p

YUV 4:4:4 平面 8-bit

yuv444p10

YUV 4:4:4 平面 10-bit

yuv444p12

YUV 4:4:4 平面 12-bit

fast

执行快速转换,跳过伽玛/主色调校正。这样将显著减少CPU使用,但在数学上是不正确的。为了获得与色彩矩阵滤镜输出兼容的结果,请使用 fast=1。

dither

指定抖动模式。

接受的值是:

none

无抖动

fsb

Floyd-Steinberg抖动

wpadapt

白点适配模式。

接受的值是:

bradford

Bradford白点适配

vonkries

von Kries白点适配

identity

identity白点适配(即无白点适配)

iall

一次覆盖所有输入属性。接受的值与全部.

ispace

覆盖输入颜色空间。接受的值与空间.

iprimaries

覆盖输入颜色主色调。接受的值与主色调.

itrc

覆盖输入传递特性。接受的值与TRC.

irange

覆盖输入颜色范围。接受的值与范围.

滤镜将传递特性、颜色空间和颜色主色调转换为指定的用户值。如果输出值未被指定,则基于"全部"属性设置默认值。如果该属性也未指定,滤镜将记录错误。输出颜色范围和格式默认与输入颜色范围和格式相同。输入数据应该设置传递特性、颜色空间、颜色主色调和颜色范围。如果缺少其中任何一个,滤镜将记录错误并且不会进行转换。

例如将输入转换为SMPTE-240M,使用以下命令:

colorspace=smpte240m

30.42 colorspace_cuda

使用CUDA加速实现的colorspace滤镜。

与软件colorspace滤镜相比,它绝不是功能完善,目前仅支持在jpeg/full范围和mpeg/limited范围之间进行颜色范围转换。

滤镜接受以下选项:

range

指定输出颜色范围。

接受的值是:

tv

电视(受限范围)

mpeg

MPEG(受限范围)

pc

PC(全部范围)

jpeg

JPEG(全部范围)

30.43 色温调整

调整视频中的色温以模拟周围环境色温的变化。

滤镜接受以下选项:

temperature

以开尔文单位设置色温。允许范围是1000至40000。默认值是6500K。

mix

设置与过滤后输出的混合值。允许范围是0至1。默认值是1。

pl

设置光保持的数量。允许范围是0至1。默认值是0。

30.43.1 命令

该滤镜支持与选项相同的命令。命令。

30.44 卷积

应用3x3、5x5、7x7或水平/垂直的卷积矩阵,最多可达49个元素。

滤镜接受以下选项:

0m
1m
2m
3m

为每个平面设置矩阵。矩阵是9、25或49个带符号整数的序列(在正方形模式下),以及从1到49个奇数个数的带符号整数(在模式下)。

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面设置计算值的乘数。如果未设置或为0,则为所有矩阵元素之和的1/sum值。

0bias
1bias
2bias
3bias

为每个平面设置偏移值。此值将添加到乘积结果中。对于使整体图像更亮或更暗有用。默认值是0.0。

0mode
1mode
2mode
3mode

为每个平面设置矩阵模式。可以是正方形, 。默认值是正方形.

30.44.1 命令

该滤镜支持上述所有选项作为命令.

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

30.45 卷积(频域)

使用第二流作为冲激在频域对视频流应用二维卷积。

滤镜接受以下选项:

planes

设置要处理的平面。

impulse

设置哪些冲激视频帧将被处理,可以是第一个所有。默认值是全部.

convolve滤镜还支持framesync选项。

30.46 复制

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

30.47 核心图像

使用OSX上的Apple CoreImage API进行GPU视频过滤。

硬件加速基于OpenGL上下文。通常,这意味着它由视频硬件处理。然而,也存在基于软件的OpenGL实现,这意味着没有硬件处理的保证。这取决于各自的OSX。

Apple提供了很多滤镜和图像生成器,带有多种多样的选项。滤镜必须通过其名称和选项引用。

核心图像滤镜接受以下选项:

list_filters

列出所有可用的滤镜和生成器,以及它们的所有选项、可能的最小值和最大值,以及默认值。

list_filters=true
filter

通过滤镜的名称和选项指定所有滤镜。 使用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 和主机之间的数据传输,从而允许快速处理复杂的滤镜链。 目前,仅支持具有零(生成器)或正好一个(滤镜)输入图像和一个输出图像的滤镜。此外,过渡滤镜尚未能按预期使用。

某些滤镜会生成具有额外填充的输出图像,具体取决于滤镜内核的情况。填充会自动移除,以确保滤镜输出与输入图像的尺寸相同。

对于图像生成器,输出图像的尺寸由滤镜链的上一个输出图像或整个滤镜链的输入图像决定。生成器不会使用该图像的像素信息来生成其输出。然而,生成的输出会与该图像进行混合,从而导致部分或完全覆盖输出图像。

视频源coreimagesrc可用于生成直接馈送到滤镜链中的输入图像。使用它时,不需要通过其他视频源或输入视频提供输入图像。

30.47.1 示例

  • 列出全部可用滤镜:
    coreimage=list_filters=true
    
  • 使用 CIBoxBlur 滤镜和默认选项模糊图像:
    coreimage=filter=CIBoxBlur@default
    
  • 使用滤镜链,其中 CISepiaTone 使用默认值,CIVignetteEffect 的中心点为 100x100,半径为 50 像素:
    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
    

30.48 corr

获取两个输入视频之间的相关性。

此滤镜需要两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式才能使滤镜正确工作。此外,还假定两个输入具有相同数量的帧,逐一进行比较。

通过日志系统打印获得的每个组件平均值、最小值和最大值相关性。

滤镜将每帧计算的相关性存储在帧元数据中。

此滤镜还支持framesync选项。

在下面的示例中,正在处理的输入文件main.mpg与参考文件进行比较ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -

30.49 cover_rect

覆盖矩形对象

它接受以下选项:

cover

可选覆盖图像的文件路径,需要为 yuv420 格式。

mode

设置覆盖模式。

它接受以下值:

cover

使用提供的图像覆盖

blur

通过插值周围像素进行覆盖

默认值为模糊.

30.49.1 示例

  • 使用给定视频中的提供图像覆盖矩形对象ffmpeg:
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    

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

The out_w, out_h, x, y参数是包含以下常量的表达式:

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,因为xy是在out_wout_h.

之后评估的x的位置由表达式决定。离开视图。

The expression for x may depend on y, and the expression for y may depend on x.

30.50.1 Examples

  • Crop area with size 100x100 at position (12,34).
    crop=100:100:12:34
    

    Using named options, the example above becomes:

    crop=w=100:h=100:x=12:y=34
    
  • 裁剪中心
    crop=100:100
    
  • Crop the central input area with size 2/3 of the input video:
    crop=2/3*in_w:2/3*in_h
    
  • 视频区域大小
    crop=out_w=in_h
    crop=in_h
    
  • Delimit the rectangle with the top-left corner placed at position 100:100 and the right-bottom corner corresponding to the right-bottom corner of the input image.
    crop=in_w-100:in_h-100:100:100
    
  • Crop 10 pixels from the left and right borders, and 20 pixels from the top and bottom borders
    crop=in_w-2*10:in_h-2*20
    
  • Keep only the bottom right quarter of the input image:
    crop=in_w/2:in_h/2:in_w/2:in_h/2
    
  • Crop height for getting Greek harmony:
    crop=in_w:1/PHI*in_w
    
  • Apply trembling effect:
    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)
    
  • Apply erratic camera effect depending on timestamp:
    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)
    
  • Set x depending on the value of y:
    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
    

30.50.2 Commands

裁剪显示

w, out_w
h, out_h
x
y

Set width/height of the output video and the horizontal/vertical position in the input video. The command accepts the same syntax of the corresponding option.

If the specified expression is not valid, it is kept at its current value.

30.51 cropdetect

Auto-detect the crop size.

It calculates the necessary cropping parameters and prints the recommended parameters via the logging system. The detected dimensions correspond to the non-black or video area of the input video according to mode.

It accepts the following parameters:

mode

Depending on mode crop detection is based on either the mere black value of surrounding pixels or a combination of motion vectors and edge pixels.

black

Detect black pixels surrounding the playing video. For fine control use option limit.

mvedges

Detect the playing video by the motion vectors inside the video and scanning for edge pixels typically forming the border of a playing video.

limit

Set higher black value threshold, which can be optionally specified from nothing (0) to everything (255 for 8-bit based formats). An intensity value greater to the set value is considered non-black. It defaults to 24. You can also specify a value between 0.0 and 1.0 which will be scaled depending on the bitdepth of the pixel format.

round

The value which the width/height should be divisible by. It defaults to 16. The offset is automatically adjusted to center the video. Use 2 to get only even dimensions (needed for 4:2:2 video). 16 is best when encoding to most video codecs.

skip

Set the number of initial frames for which evaluation is skipped. Default is 2. Range is 0 to INT_MAX.

reset_count, reset

Set the counter that determines after how many frames cropdetect will reset the previously detected largest video area and start over to detect the current optimal crop area. Default value is 0.

This can be useful when channel logos distort the video area. 0 indicates ’never reset’, and returns the largest area encountered during playback.

mv_threshold

Set motion in pixel units as threshold for motion detection. It defaults to 8.

low
high

Set low and high threshold values used by the Canny thresholding algorithm.

The high threshold selects the "strong" edge pixels, which are then connected through 8-connectivity with the "weak" edge pixels selected by the low threshold.

low and high threshold values must be chosen in the range [0,1], and low should be lesser or equal to high.

Default value for low is 5/255, and default value for high is 15/255.

30.51.1 Examples

  • Find video area surrounded by black borders:
    ffmpeg -i file.mp4 -vf cropdetect,metadata=mode=print -f null -
    
  • Find an embedded video area, generate motion vectors beforehand:
    ffmpeg -i file.mp4 -vf mestimate,cropdetect=mode=mvedges,metadata=mode=print -f null -
    
  • Find an embedded video area, use motion vectors from decoder:
    ffmpeg -flags2 +export_mvs -i file.mp4 -vf cropdetect=mode=mvedges,metadata=mode=print -f null -
    

30.51.2 Commands

命令长度。

limit

The command accepts the same syntax of the corresponding option. If the specified expression is not valid, it is kept at its current value.

30.52 cue

Delay video filtering until a given wallclock timestamp. The filter first passes on preroll amount of frames, then it buffers at most buffer amount of frames and waits for the cue. After reaching the cue it forwards the buffered frames and also any subsequent frames coming in its input.

The filter can be used synchronize the output of multiple ffmpeg processes for realtime output devices like decklink. By putting the delay in the filtering chain and pre-buffering frames the process can pass on data to output almost immediately after the target wallclock timestamp is reached.

Perfect frame accuracy cannot be guaranteed, but the result is good enough for some use cases.

cue

The cue timestamp expressed in a UNIX timestamp in microseconds. Default is 0.

preroll

The duration of content to pass on as preroll expressed in seconds. Default is 0.

buffer

在等待提示之前缓冲内容的最大持续时间(以秒为单位)。默认为0。

30.53 曲线

使用曲线进行颜色调整。

此滤镜与Adobe Photoshop和GIMP的曲线工具类似。每个分量(红色、绿色和蓝色)的值由N关键点通过平滑曲线相互连接而定义。x轴表示输入帧的像素值,y轴表示将设定为输出帧的新像素值。

默认情况下,分量曲线由两点定义(0;0)(1;1)。这会创建一条直线,每个原始像素值被“调整”为其自身的值,这意味着图像不会发生变化。

此滤镜允许您重新定义这两点并添加更多点。一个新曲线将被定义为平滑通过所有这些新坐标。新定义的点需要在x轴上严格递增,并且其xy值必须在[0;1]区间内。曲线是通过自然或单调的三次样条插值形成的,取决于interp选项(默认值:natural)。natural样条通常产生更平滑的曲线,而单调(pchip)样条确保指定点之间的过渡是单调的。如果计算出的曲线超出向量空间的范围,值将按照需要被裁剪。

该滤镜接受以下选项:

preset

选择一个可用的颜色预设。此选项可以与r, g, b参数结合使用。在这种情况下,后面的选项优先于预设值。 可用的预设有:

none
color_negative
cross_process
darker
increase_contrast
lighter
linear_contrast
medium_contrast
negative
strong_contrast
vintage

默认值是none.

master, m

设置主关键点。这些关键点将定义一个二次映射。有时也称为“亮度”或“值”映射。它可以与r, g, ball结合使用,因为它类似于后处理色查表(LUT)。

red, r

设置红色分量的关键点。

green, g

设置绿色分量的关键点。

blue, b

设置蓝色分量的关键点。

all

设置所有分量(不包括主分量)的关键点。 可以与其他分量关键点选项结合使用。 这种情况下,未设置的分量将回退到此all设置。

psfile

指定一个Photoshop曲线文件(.acv)以导入设置。

plot

以指定文件保存曲线的Gnuplot脚本。

interp

指定插值的种类。可用的算法有:

natural

自然三次样条,使用连续二次可微的分段三次多项式。

pchip

单调三次样条,使用分段三次Hermite插值多项式(PCHIP)。

为了避免某些滤镜图语法冲突,每个关键点列表需要按照以下语法定义:x0/y0 x1/y1 x2/y2 ....

30.53.1 命令

此滤镜支持与选项相同的命令。

30.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'
    
  • 查看cross_process配置文件的曲线,使用ffmpeggnuplot:
    ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
    gnuplot -p /tmp/curves.plt
    

30.54 数据范围

视频数据分析滤镜。

此滤镜显示部分视频的十六进制像素值。

过滤器接受以下选项:

size, s

设置输出视频的尺寸。

x

设置像素选取的x偏移量。

y

设置像素选取的y偏移量。

mode

设置范围模式,可以是以下之一:

mono

在黑色背景上用白色绘制十六进制像素值。

color

在黑色背景上用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中选取的彩色背景上绘制十六进制像素值, 文本颜色以始终可见的方式选取。

axis

在视频的左侧和顶部绘制行号和列号。

opacity

设置背景的不透明度。

format

设置显示的数字格式。可以是hex,或dec。默认是hex.

components

设置要显示的像素分量。默认情况下显示所有像素分量。

30.54.1 命令

此滤镜支持与选项相同的命令,不包括size选项。

30.55 定向模糊

应用方向性模糊滤镜。

滤镜接受以下选项:

angle

设置方向性模糊的角度。默认值是45.

radius

设置方向性模糊的半径。默认值是5.

planes

设置要过滤的平面。默认情况下过滤所有平面。

30.55.1 命令

此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。 as options. The command accepts the same syntax of the corresponding option.

如果指定的表达式无效,则保持当前值不变。

30.56 DCT去噪

使用2D DCT(频域过滤)对帧进行去噪。

此滤镜未设计用于实时。

过滤器接受以下选项:

sigma, s

设置噪声σ常数。

σ定义了一个硬阈值:3 * sigma;每个小于此阈值的DCT系数(绝对值)将被去除。

如果需要更高级的过滤,请参见expr.

默认值是0.

overlap

设置每个块的像素重叠数量。由于过滤器可能较慢,您可能希望减少此值,但以过滤效果降低和各种伪影为代价。

如果重叠值不允许处理整个输入宽度或高度,将显示警告,且相应边界将不会被去噪。

默认值是blocksize-1,这是可能的最佳设置。

expr, e

设置系数因子表达式。

对于DCT块的每个系数,此表达式将作为系数的乘数值进行计算。

如果设置了此选项,sigma选项将被忽略。

DCT系数的绝对值可通过c变量访问。

n

通过位数设置blocksize1<<n定义了blocksize,即处理块的宽度和高度。

默认值是3(8x8),可以增加到4以得到blocksize为16x16。请注意,更改此设置会对处理速度产生巨大的影响。此外,更大的块大小不一定意味着更好的去噪。

30.56.1 示例

应用一个sigma4.5:

dctdnoiz=4.5

的去噪。

dctdnoiz=e='gte(c, 4.5*3)'

使用表达式系统可以实现相同的操作:16x16:

dctdnoiz=15:n=4

30.57 去条带

从输入视频中移除条带伪影。 通过将条带像素替换为参考像素的平均值来工作。

过滤器接受以下选项:

1thr
2thr
3thr
4thr

为每个平面设置条带检测阈值。默认值为0.02。 有效范围为0.00003到0.5。 如果当前像素与参考像素之间的差值小于阈值,则该像素将被视为条带。

range, r

以像素为单位设置条带检测范围。默认值为16。如果为正值,则将在0到设置值的范围内随机使用随机数。如果为负值,则使用精确的绝对值。 范围定义了围绕当前像素的四个像素的正方形。

direction, d

以弧度为单位设置方向,从而比较四个像素。如果为正值,则将在0到设置方向的范围内随机选择一个方向。如果为负值,将选取绝对值的精确值。例如,方向为0、-PI或-2*PI弧度,将仅选取同一行的像素,而-PI/2将仅选取同一列的像素。

blur, b

如果启用,将用所有周围四个像素的平均值与当前像素进行比较。默认启用。如果禁用,则当前像素与所有四个相邻像素进行比较。当且仅当与周围像素的所有四个差值都小于阈值时,此像素被视为条带。

coupling, c

如果启用,当前像素只有在所有像素分量为条带时才会发生变化,例如,对于所有颜色分量触发了条带检测阈值。默认是禁用的。

30.57.1 命令

此滤镜支持以上所有选项作为命令.

30.58 去块化

从输入视频中移除块状伪影。

过滤器接受以下选项:

filter

设置过滤类型,可以是。默认是。 这决定了将应用哪种去块化。

block

设置块的大小,允许的范围是4到512。默认是8.

alpha
beta
gamma
delta

设置块状检测阈值。允许的范围是0到1。 默认值是:0.098对于alpha0.05对剩下的值。 使用更高的阈值可以增加去块化的强度。 设置alpha控制块边缘精确检测的阈值。 剩下的选项控制靠近边缘的阈值检测,每一个用于上下或者左右。如果将这些值设置为0禁用去块化。

planes

设置要过滤的平面。默认情况下,过滤所有可用平面。

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

30.58.2 命令

此滤镜支持以上所有选项作为命令.

30.59 消减重复

以规则的间隔删除重复帧。

过滤器接受以下选项:

cycle

设置每隔多少帧将删除一帧。设置值为N意味着在每一组N帧中,将删除一帧。 默认值为5.

dupthresh

设置重复检测的阈值。如果帧的差异度指标小于或等于此值,则判断为重复。默认值为1.1

scthresh

设置场景变化阈值。默认值是15.

blockx
blocky

设置用于指标计算的x轴和y轴块的大小。 较大的块可以提供更好的噪声抑制,但对小运动的检测也较差。必须是二的幂。默认值是32.

ppsrc

将主输入标记为预处理输入并激活干净源输入流。 这允许输入通过各种过滤器进行预处理以帮助指标计算,同时保持帧选择的无损。如果设置为1,第一个流作为预处理输入,第二个流作为从中选择保留帧的干净源。默认值是0.

chroma

设置计算指标时是否考虑色度。默认值是1.

mixed

设置输入是否仅部分包含要被减少的内容。 默认值是false。 如果启用,视频输出流将变为可变帧率(VFR)。

30.60 去卷积

利用第二个流作为脉冲,应用视频流的频域二维去卷积。

过滤器接受以下选项:

planes

设置要处理的平面。

impulse

设置将处理哪些脉冲视频帧,可以是第一个所有。默认值是所有.

noise

在进行除法时设置噪声值。默认值是0.0000001。 在宽度和高度不相同且不为二的幂,或卷积之前的流包含噪声的情况下非常有用。

deconvolve滤镜也支持framesync选项。

30.61 点爬

减少视频中的交叉亮度(点爬)和交叉颜色(彩虹效应)。

它接受以下选项:

m

设置操作模式。可以是以下的组合点爬痕(dotcrawl)用于减少交叉亮度和/或彩虹纹(rainbows)用于减少交叉颜色。

lt

设置空间亮度阈值。较低的值会增加交叉亮度的减少。

tl

设置时间亮度的容忍度。较高的值会增加交叉亮度的减少。

tc

设置色度时间变化的容忍度。较高的值会增加交叉颜色的减少。

ct

设置时间色度阈值。较低的值会增加交叉颜色的减少。

30.62 压缩效应(deflate)

将压缩效应应用于视频。

该滤镜通过仅考虑小于像素值的值替换像素并取局部(3x3)平均值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化量,默认为65535。如果为0,则平面保持不变。

30.62.1 指令

该滤镜支持上述所有选项作为指令.

30.63 防闪烁(deflicker)

移除时间帧亮度的变化。

它接受以下选项:

size, s

设置帧的移动平均滤波器大小。默认值为5,允许范围是2 - 129。

mode, m

设置平均模式以平滑时间亮度变化。

可用的值为:

am

算术平均

gm

几何平均

hm

调和平均

qm

二次平均

cm

三次平均

pm

幂平均

median

中位数

bypass

不实际修改帧。用于仅想获取元数据时。

30.64 去抖动(dejudder)

去除部分交错式电影内容生成的抖动。

抖动可能会通过,例如由上拉(pullup)滤镜引入。如果原始来源是部分电影内容,则pullup,dejudder的输出将具有可变帧率。可能会改变容器记录的帧率。除了该变化之外,此滤镜不会影响固定帧率视频。

此滤镜可用的选项为:

cycle

指定抖动重复窗口的长度。

接受任何大于1的整数值。以下是一些实用值:

4

如果原始内容从24fps到30fps进行电影到NTSC的电影化处理。

5

如果原始内容从25fps到30fps进行PAL到NTSC的电影化处理。

20

如果两者混合。

默认值是‘4’.

30.65 去LOGO(delogo)

通过简单插值周围像素来去除电视台的LOGO。只需设置覆盖LOGO的矩形并看它消失(有时可能出现更不美观的效果——效果因情况而异)。

它接受以下参数:

x
y

指定LOGO的左上角坐标。必须指定。

w
h

指定LOGO要清除的宽度和高度。必须指定。

show

设置为1时,在屏幕上绘制一个绿色矩形以简化找到正确的x, y, w, 和h参数。默认值为0。

矩形绘制在最外层像素上,这些像素将被(部分)替换为插值值。矩形外立即外的下一像素值将在各个方向上用于计算矩形内部的插值像素值。

30.65.1 示例

  • 设置一个矩形覆盖左上角坐标为0,0,大小为100x77的区域:
    delogo=x=0:y=0:w=100:h=77
    

30.66 去雨(derain)

通过应用基于卷积神经网络的去雨方法来去除输入图像/视频中的雨。支持的模型:

训练以及模型生成脚本在以下库中提供https://github.com/XueweiMeng/derain_filter.git.

该滤镜接受以下选项:

filter_type

指定要使用哪个滤镜。该选项接受以下值:

derain

去雨滤镜。要进行去雨滤镜,你需要使用去雨模型。

dehaze

去雾滤镜。要进行去雾滤镜,你需要使用去雾模型。

默认值是‘derain’.

dnn_backend

指定要用于模型加载和执行的DNN后端。此选项接受以下值:

tensorflow

TensorFlow后端。为启用该后端,你需要安装TensorFlow C库(参见https://www.tensorflow.org/install/lang_c)并配置FFmpeg--enable-libtensorflow

model

设置模型文件路径,用于指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow只能加载其格式的文件。

要获取完整功能(如异步执行),请使用dnn_processing滤镜。

30.67 去晃动(deshake)

尝试修复水平和/或垂直移动中的小变化。此滤镜帮助消除手持相机、三脚架碰撞、车辆移动等情况下的相机晃动。

该滤镜接受以下选项:

x
y
w
h

指定一个矩形区域来限制运动矢量的搜索范围。如果需要,运动矢量的搜索可以限制在一个矩形区域内,该区域由左上角、宽度和高度定义。这些参数的含义与可用于可视化边框位置的drawbox滤镜相同。

当帧内对象的同时移动可能被运动矢量搜索误解为相机运动时,这就很有用。

如果x, y, wh中的任意或所有项设置为-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

如果设置,则将运动搜索的详细日志写入指定文件。

30.68 去溢色(despill)

移除由于反射的绿色屏或蓝色屏颜色引起的前景颜色不需要的污染。

该滤镜接受以下选项:

type

设置使用何种类型的去溢色方式。

mix

设置溢色图生成的方式。

expand

设置清除仍然残留溢色的程度。

red

控制溢色区域的红色量。

green

控制溢色区域的绿色量。对于绿色屏,应为-1。

blue

控制溢色区域的蓝色量。对于蓝色屏,应为-1。

brightness

控制溢色区域的亮度,保留颜色。

alpha

修改由生成的溢色图产生的alpha通道。

30.68.1 指令

该滤镜支持上述所有选项作为指令.

30.69 去电影化(detelecine)

应用电影化操作的精确反转。它需要一个使用电影化滤镜时指定的预定义的模式。

该滤镜接受以下选项:

first_field
top, t

上场优先

bottom, b

下场优先 默认值为top.

pattern

表示要应用的电影化模式的字符串。默认值为23.

start_frame

表示第一帧相对于电影化模式的位置的数字。如果流被剪切,则使用此选项。默认值为0.

30.70 膨胀效应(dilation)

将膨胀效应应用于视频。

该滤镜通过局部(3x3)最大值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化量,默认值为65535。如果为0,则平面保持不变。

coordinates

指定要参考的像素标志。默认值为255,即使用所有八个像素。

标志到局部3x3坐标映射如下:

1 2 3 4 5 6 7 8

30.70.1 指令

该滤镜支持上述所有选项作为指令.

30.71 位移(displace)

根据第二和第三输入流指示位移像素。

它接受三个输入流并输出一个流,第一个输入是源,第二和第三个输入是位移图。

第二个输入指定沿x轴位移像素的量,第三个输入指定沿y轴位移像素的量。如果其中一个位移图流终止,则将使用该位移图的最后一帧。

请注意,位移图生成后可以重复使用。

以下是接受的选项说明。

edge

设置超范围像素的位移行为。

可用值为:

blank

缺失像素用黑色像素替换。

smear

相邻像素将散布以替换缺失像素。

wrap

超范围像素将被包裹以指向另一侧的像素。

mirror

超范围像素将用镜像像素替换。

默认值是‘smear’.

30.71.1 示例

  • 为HD720的视频输入添加波纹效应:
    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的视频输入添加波浪效应:
    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
    

30.72 深度神经网络分类(dnn_classify)

基于边界框进行深度神经网络分类。

该滤镜接受以下选项:

dnn_backend

指定用于模型加载和执行的DNN后端。此选项目前只支持openvino,稍后将添加TensorFlow后端。

model

设置模型文件路径,用于指定网络架构及其参数。请注意,不同后端使用不同的文件格式。

input

设置DNN网络的输入名称。

output

设置DNN网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件路径,指定标签ID和名称之间的映射关系。每行写入一个标签名称,尾随空格和空行将被跳过。第一行是标签ID 0的名称,第二行是标签ID 1的名称,等等。如果未提供标签文件,则标签ID将作为名称。

backend_configs

设置传递到后端的配置

对于TensorFlow后端,可以使用sess_config选项设置其配置,请使用tools/python/tf_sess_config.py获取适合你的系统的配置。

30.73 深度神经网络检测(dnn_detect)

通过深度神经网络进行物体检测。

该滤镜接受以下选项:

dnn_backend

指定用于模型加载和执行的DNN后端。此选项目前只支持openvino,稍后将添加TensorFlow后端。

model

设置模型文件路径,用于指定网络架构及其参数。请注意,不同后端使用不同的文件格式。

input

设置DNN网络的输入名称。

output

设置DNN网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件路径,指定标签ID和名称之间的映射关系。每行写入一个标签名称,尾随空格和空行将被跳过。第一行是标签ID 0的名称(通常为“背景”),第二行是标签ID 1的名称,等等。如果未提供标签文件,则标签ID将作为名称。

backend_configs

设置将传递到后端的配置。如果要使用异步执行,请设置异步(默认:已设置)。如果后端不支持异步,将回滚到同步执行。

30.74 深度神经网络处理

使用深度神经网络处理图像。它与另一个滤镜协同工作,可将帧的像素格式转换为神经网络所需的格式。

该滤镜接受以下选项:

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值:

tensorflow

TensorFlow 后端。要启用此后端,请安装 TensorFlow for C 库(见https://www.tensorflow.org/install/lang_c)并使用以下方式配置 FFmpeg--enable-libtensorflow

openvino

OpenVINO 后端。要启用此后端,请构建并安装 OpenVINO for C 库(见https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用以下方式配置 FFmpeg--enable-libopenvino(如果头文件和库未安装到系统路径,可能需要使用 --extra-cflags=-I... --extra-ldflags=-L...)

torch

Libtorch 后端。要启用此后端,请构建并安装 Libtorch for C++ 库。请下载 cxx11 ABI 版本(见https://pytorch.org/get-started/locally)并使用以下方式配置 FFmpeg--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/

model

设置模型文件路径以指定网络架构及其参数。 请注意,不同后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其专属格式的文件。

input

设置后端 DNN 网络的输入名称。

output

设置后端 DNN 网络的输出名称。

backend_configs

设置传递给后端的配置项。要使用异步执行,设置 async(默认:已启用)。 若后端不支持异步,则会回滚到同步执行。

对于 TensorFlow 后端,可以使用以下方式设置其配置项sess_config选项,请使用 tools/python/tf_sess_config.py 获取适用于您系统的 TensorFlow 后端配置。

30.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 格式帧的 Y 通道(见sr滤镜)。支持平面 YUV 格式:
    ./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 格式帧的 Y 通道(见sr滤镜),更改帧大小。支持平面 YUV 格式,请使用 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
    

30.75 绘制框

在输入图像上绘制一个彩色框。

它接受以下参数:

x
y

指定框左上角坐标的表达式,默认为 0。

width, w
height, h

指定框的宽度和高度表达式;若为 0,则解释为输入图像的宽度和高度。默认为 0。

color, c

指定框使用的颜色。有关此选项的通用语法,请查看(ffmpeg-utils)“颜色”部分,见 ffmpeg-utils 手册。若使用特殊值invert,则框边颜色与视频的颜色相同,但亮度反转。

thickness, t

设置框边厚度的表达式。 值为fill时会创建一个填充的框。默认值为3.

以下为接受的常量列表。

replace

如果输入图像具有 alpha 通道,设置值1时,画框的像素会覆盖视频的颜色和 alpha 像素。 默认为0,它会将框叠加到输入图像上,同时保持视频的 alpha 通道完整。

参数列表包括x, y, wht的表达式并包含以下常量:

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

如果您希望使用边数据中的检测框作为框源,可以将 Box 源设置为 side_data_detection_bboxes。

如果box_source已设置,x, y, 宽度高度将被忽略,仍然使用边数据中的检测框数据。因此,如果您未确认为框源,请不要使用该参数。

t

绘制框的厚度。

这些常量允许x, y, w, ht表达式相互引用,因此例如可以指定y=x/darh=w/dar.

30.75.1 示例

  • 在输入图像边缘绘制一个黑框:
    drawbox
    
  • 绘制一个红色框,设置透明度为 50%:
    drawbox=10:20:200:60:red@0.5
    

    可以用以下方式指定前一个示例:

    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
    
  • 用粉色填充框:
    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5: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
    

30.75.2 命令

此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

30.76 绘制图表

使用输入视频元数据绘制图表。

它接受以下参数:

m1

设置第一个帧元数据键,用于使用这些元数据值绘制图表。

fg1

设置第一前景颜色表达式。

m2

设置第二个帧元数据键,用于使用这些元数据值绘制图表。

fg2

设置第二前景颜色表达式。

m3

设置第三个帧元数据键,用于使用这些元数据值绘制图表。

fg3

设置第三前景颜色表达式。

m4

设置第四个帧元数据键,用于使用这些元数据值绘制图表。

fg4

设置第四前景颜色表达式。

min

设置元数据值的最小值。

max

设置元数据值的最大值。

bg

设置图表背景颜色。默认为白色。

mode

设置图表模式。

可用模式值为:

bar
dot
line

默认值为line.

slide

设置滑动模式。

可用滑动模式值为:

frame

当右边界到达时绘制新帧。

replace

用新列替换旧列。

scroll

从右到左滚动。

rscroll

从左到右滚动。

picture

绘制单一图片。

默认值为frame.

size

设置图表视频的大小。有关此选项的语法,请查看(ffmpeg-utils)“视频大小”部分在 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

30.77 绘制网格

在输入图像上绘制网格。

它接受以下参数:

x
y

指定网格交点某点的坐标表达式(用于配置偏移)。均默认为 0。

width, w
height, h

指定网格单元的宽度和高度表达式,若为 0,则解释为输入图像宽度和高度分别减去thickness,即图像形成框架。默认为 0。

color, c

指定网格颜色。有关此选项的通用语法,请查看(ffmpeg-utils)“颜色”部分在 ffmpeg-utils 手册中。若使用特殊值invert,网格颜色与视频的颜色相同,但亮度反转。

thickness, t

设置网格线厚度的表达式。默认值为1.

以下为接受的常量列表。

replace

如果输入图像具有 alpha 通道,设置1时,画网格的像素会覆盖视频的颜色和 alpha 像素。 默认为0,它会将网格叠加到输入图像上,同时保持视频的 alpha 通道完整。

参数列表包括x, y, wht的表达式并包含以下常量:

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

网格单元的厚度。

这些常量允许x, y, w, ht表达式相互引用,因此例如可以指定y=x/darh=w/dar.

30.77.1 示例

  • 绘制一个每单元 100x100 像素,厚度 2 像素,颜色为红色并透明度为 50% 的网格:
    drawgrid=width=100:height=100:thickness=2:color=red@0.5
    
  • 绘制一个白色 3x3 网格,透明度为 50%:
    drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
    

30.77.2 命令

此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

30.78 绘制文本

在视频上绘制文本字符串或从指定文件中读取文本,使用 libfreetype 库。

要启用此滤镜的编译,需使用以下配置设置 FFmpeg--enable-libfreetype--enable-libharfbuzz。 要启用默认字体回退及font选项,需要使用以下配置设置 FFmpeg--enable-libfontconfig。 要启用text_shaping选项,需要使用以下配置设置 FFmpeg--enable-libfribidi.

30.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”。 is "0".

boxcolor

设置文本框使用的颜色。有关此选项的语法,请查看(ffmpeg-utils)“颜色”部分在 ffmpeg-utils 手册中.

The default value of 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的默认值为“文本”,用于向后兼容。 is "text" for backward compatibility.

borderw

设置使用bordercolor绘制文本边框的宽度。默认值如下:borderw的默认值为 0。

bordercolor

设置用于绘制文本边框的颜色。有关此选项的语法,请查看(ffmpeg-utils)“颜色”部分在 ffmpeg-utils 手册中.

The default value of bordercolor的默认值为“黑色”。

expansion

选择扩展text方式。可以是以下值:none, strftime(已过时) 或normal(默认)。详情见文本扩展部分。

basetime

设置计数的起始时间。单位为微秒。仅应用于已过时的strftime扩展模式。要在普通扩展模式中模拟,请使用pts函数,提供起始时间(以秒为单位)作为第二个参数。

fix_bounds

如果为真,检查并修复文字坐标以避免剪切。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请检查(ffmpeg-utils)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 支持的相应标志,是以下值的组合:

默认
不缩放
无提示
渲染
无位图
垂直布局
强制自动提示
裁剪位图
严格
忽略全局推进宽度
不递归
忽略变换
单色
线性设计
无自动提示

默认值为“默认”。

有关更多信息,请查阅 FT_LOAD_* libfreetype标志的文档。

shadowcolor

用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请检查(ffmpeg-utils)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

从基线到用于放置字形轮廓点的最高/上网格坐标的最大距离,适用于所有渲染的字形。

max_glyph_d, descent

从基线到用于放置字形轮廓点的最低网格坐标的最大距离,适用于所有渲染字形。这是一个负值,由于网格的方向,Y轴向上。

max_glyph_h

最大字形高度,即渲染文本中所有字形的最大高度,相当于上升 - 下降.

max_glyph_w

最大字形宽度,即所有字形的最大宽度

font_a

字体度量中定义的上升量

font_d

字体度量中定义的下降量

top_a

第一行文字字形的最大升降线

bottom_d

最后一行文字字形的最大下降线

n

输入帧数,从 0开始

rand(min, max)

返回一个介于最小值最大值

sar

输入样本纵横比。

t

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

text_h, th

渲染文本的高度

text_w, tw

渲染文本的宽度

x
y

将绘制文本的 x 和 y 偏移坐标。

这些参数允许xy表达式相互引用,所以例如可以指定y=x/dar.

pict_type

当前帧的图片类型的一个字符描述。

pkt_pos

当前包在输入文件或流中的位置(从起始位置算起的字节数)。值为 -1 表示无法获得该信息。

duration

当前包的持续时间(以秒为单位)。

pkt_size

当前包的大小(以字节为单位)。

30.78.2 文本展开

如果expansion设置为strftime, 过滤器会识别strftimeC函数接受的序列并相应地展开。请检查strftime的文档。此功能已被normal的扩展承载的功能gmtimelocaltime扩展函数取代。

如果expansion设置为none, 文本将被按原样打印。

如果expansion设置为normal(默认值),以下扩展机制会被使用。

反斜杠字符’\’,后跟任意字符,总是扩展为第二个字符。

的形式的序列%{...}被展开。括号内部的文本是一个函数名,也可能后跟参数,以’:’分隔。如果参数包含特殊字符或分隔符(’:’ 或 ’}’),则应进行转义。

注意,它们还可能需要在过滤器参数字符串和过滤器图描述中进行转义最多四级,使用具有text功能的文本文件可以避免这些问题。textfile option avoids these problems.

可用的函数如下:

expr, e

表达式评估结果。

必须具有指定表达式的一个参数,这个表达式接受与xy值相同的常数和函数。请注意,并非所有常量均可使用,例如文本大小在评估表达式时未知,因此text_wtext_h将具有未定义的值。

expr_int_format, eif

评估表达式的值并输出为格式化的整数。

第一个参数是要评估的表达式,与expr函数相同。x’, ‘X’, ‘d第二个参数指定输出格式。允许的值为 ‘u’ 和 ‘printf函数中的处理方式完全相同。

gmtime

过滤器运行时的时间,以 UTC表示。它可以接受一个参数:一个strftimeC函数格式字符串。格式字符串扩展支持变量%[1-6]N,对于秒的分数打印可选择数字,即所指定的数字位数。

localtime

过滤器运行时的时间,以本地时区表示。它可以接受一个参数:一个strftimeC函数格式字符串。格式字符串扩展支持变量%[1-6]N,对于秒的分数打印可选择数字位数。

metadata

框架元数据。接受一个或两个参数。

第一个参数是必填项,用于指定元数据的键。

第二个参数是可选的,用于指定默认值,当元数据键未找到或为空时使用。

可用元数据可以通过检查 TAG开头项进行识别,这些项包含在每个框架部分中,运行ffprobe -show_frames.

也可以获得从过滤器生成的元字符串数据。

n, frame_num

帧号,从0开始。

pict_type

当前图片类型的一个字符描述。

pts

当前帧的时间戳。可以接受最多三个参数。

第一个参数是时间戳的格式;默认值为flt表示为以微秒精度小时的小数。hms代表格式为[-]HH:MM:SS.mmm时间戳,其精度为毫秒。gmtime代表格式为 UTC 时间的时间戳。localtime代表格式为当地点时区时间的时间戳。

第二个参数是添加到时间戳的偏移量。

如果格式设置为hms时, 第三个参数24HH可以部分应用于格式化时间戳的小时部分以24小时(00 - 23)。

如果格式设置为localtimegmtime, 第三个参数可能应用: 一个strftimeC函数格式字符串。YYYY-MM-DD HH:MM:SS格式将被使用。

30.78.3 命令

过滤器技术支持通过命令更改参数:

reinit

更改现有过滤器参数。

参数的语法符合调用过滤示例,如:

fontsize=56:fontcolor=green:text='Hello World'

填表通过发送cmd sendcmd实现完整过滤的整体调用如下:

sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'

If the entire argument can’t be parsed or applied as valid values then the filter will continue with its existing parameters.

选项列表支持的命令:

  • x
  • y
  • alpha
  • fontsize
  • fontcolor
  • boxcolor
  • bordercolor
  • shadowcolor
  • box
  • boxw
  • boxh
  • boxborderw
  • line_spacing
  • text_align
  • shadowx
  • shadowy
  • borderw

30.78.4 示例

  • 使用字体 FreeSerif 绘制“Test Text”,使用可选参数的默认值。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 使用 FreeSerif 字号大小为24的字体在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: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
    

    注意: 如参数列表没有包含空格 双引号非必需。

  • 将文本显示在视频帧的中心:
    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'
    
  • 根据视频高度绘制具有依赖大小的“测试文本”。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(见文档的strftimeC 函数部分):
    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解复用器必须启用选项-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.

30.79 边缘检测

检测并绘制边缘。该过滤器使用Canny边缘检测算法。

该过滤器接受以下选项:

low
high

设置Canny阈值算法使用的低阈值和高阈值值。

高阈值选择“强”边缘像素,这些像素通过8连通性与低阈值选择的“弱”边缘像素连接。

阈值必须选择在[0,1]范围内,并且应该小于或等于.

低的默认值为20/255,而高的默认值是50/255.

mode

定义绘制模式。

wires

在黑色背景上绘制白色/灰色线框。

colormix

混合颜色以创建油漆/卡通效果。

canny

对所有选中的平面应用Canny边缘检测。

默认值为线框.

planes

选择要过滤的平面。默认情况下,所有可用的平面都会被过滤。

30.79.1 示例

  • 使用自定义阈值值进行标准边缘检测:
    edgedetect=low=0.1:high=0.4
    
  • 无阈值的绘画效果:
    edgedetect=mode=colormix:high=0
    

30.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)。

30.81 熵

测量视频帧的颜色通道直方图中的灰度熵。

接受以下参数:

mode

可以是正常差异。默认是正常.

差异模式测量直方图差值的熵,即相邻直方图值之间的绝对差异。

30.82 epx

应用EPX放大滤镜,该滤镜旨在用于像素艺术。

接受以下选项:

n

设置缩放维度:2对于2xEPX, 3对于3xEPX。 默认是3.

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

30.83.1 命令

该过滤器支持以下命令:

contrast

设置对比度表达式。

brightness

设置亮度表达式。

saturation

设置饱和度表达式。

gamma

设置伽马表达式。

gamma_r

设置gamma_r表达式。

gamma_g

设置gamma_g表达式。

gamma_b

设置gamma_b表达式。

gamma_weight

设置gamma_weight表达式。

命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值不变。

30.84 侵蚀

对视频应用侵蚀效果。

此过滤器将每个像素替换为其局部(3x3)的最小值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认值为65535。如果为0,平面将保持不变。

coordinates

指定像素参考的标志。默认值是255,即使用所有八个像素。

3x3局部坐标映射的标志如下:

1 2 3 4 5 6 7 8

30.84.1 命令

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

30.85 estdif

去交错输入视频(“estdif”是“边缘斜率追踪去交错过滤器”的缩写)。

仅限空间的过滤器,使用边缘斜率追踪算法进行缺失行的插值。 它接受以下参数:

mode

采用的交错模式。接受以下值之一:

frame

为每个帧输出一个帧。

field

为每个字段输出一个帧。

默认值是field.

parity

输入交错视频假定的图片字段顺序。接受以下值之一:

tff

假定顶部字段为第一。

bff

假定底部字段为第一。

auto

启用字段顺序的自动检测。

默认值是auto。 如果交错未知或解码器没有导出此信息,则将假定顶部字段优先。

deint

指定要去交错的帧。接受以下值之一:

all

去交错所有帧。

interlaced

仅去交错标记为交错的帧。

默认值是all.

rslope

指定边缘斜率追踪的搜索半径。默认值为1。允许范围是1到15。

redge

为最佳边缘匹配指定搜索半径。默认值为2。允许范围是0到15。

ecost

为边缘匹配指定边缘成本。默认值为2。允许范围是0到50。

mcost

为边缘匹配指定中心成本。默认值为1。允许范围是0到50。

dcost

为边缘匹配指定距离成本。默认值为1。允许范围是0到50。

interp

指定使用的插值。默认是4点插值。接受以下值之一:

2p

两点插值。

4p

四点插值。

6p

六点插值。

30.85.1 命令

此过滤器支持与选项相同的命令

30.86 曝光

调整视频流的曝光。

该过滤器接受以下选项:

exposure

设置曝光校正值(以EV为单位)。允许范围是-3.0到3.0 EV,默认值为0 EV。

black

设置黑电平校正值。允许范围是-1.0到1.0。默认值为0。

30.86.1 命令

此过滤器支持与选项相同的命令

30.87 提取平面

从输入视频流中提取颜色通道组件并分离为灰度视频流。

该过滤器接受以下选项:

planes

设置要提取的平面。

平面的可用值是:

y
u
v
a
r
g
b

选择输入中不可用的平面会导致错误。这意味着您不能选择r, g, b平面和y, u, v平面同时使用。

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

30.88 渐变

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

它接受以下参数:

type, t

效果类型可以是“in”表示淡入,或“out”表示淡出。 默认是in.

start_frame, s

指定开始应用渐变效果的帧号。默认值为0。

nb_frames, n

渐变效果持续的帧数。在淡入效果结束时,输出视频的强度将与输入视频相同。在淡出过渡结束时,输出视频将充满选定的color。 默认值是25。

alpha

如果设置为1,仅对alpha通道(如果输入存在alpha通道)应用渐变。默认值是0。

start_time, st

指定开始应用渐变效果的帧的时间戳(以秒为单位)。如果同时指定了start_frame和start_time,则渐变将从两者中的较晚者开始。默认值是0。

duration, d

指定渐变效果应持续的秒数。在淡入效果结束时,输出视频的强度将与输入视频相同;在淡出过渡结束时,输出视频将充满选定的color。 如果同时指定了duration和nb_frames,则使用duration。默认值是0(默认使用nb_frames)。

color, c

指定渐变的颜色。默认值是“黑色”。

30.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帧的透明度逐渐淡入:
    fade=in:0:25:alpha=1
    
  • 前5.5秒为黑色,然后淡入0.5秒:
    fade=t=in:st=5.5:d=0.5
    

30.89 反馈

应用反馈视频滤镜。

此滤镜将裁剪的输入帧传递到第二个输出。 从那里可以与其他视频滤镜一起过滤。 当滤镜从第二个输入接收到帧时,该帧 将与第一个输入的原始帧组合并传递到 第一个输出。

典型用法是仅过滤帧的一部分。

该滤镜接受以下选项:

x
y

设置裁剪的左上角位置。

w
h

设置裁剪尺寸。

30.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]
    
  • 使用 pixelize 滤镜对视频帧大小为100x100的矩形部分进行像素化处理。
    [in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
    

30.90 fftdnoiz

使用三维FFT(频率域过滤)去噪帧。

该滤镜接受以下选项:

sigma

设置噪声标准差常量。这设置了去噪强度。 默认值为1。允许范围为0到30。 使用非常高的标准差与低重叠可能会出现块状伪影。

amount

设置去噪的量。默认情况下,所有检测到的噪声都会被减少。 默认值为1。允许范围为0到1。

block

设置块的像素大小。默认值为32,范围为8到256。

overlap

设置块重叠。默认值为0.5。允许范围为0.2到0.8。

method

设置去噪方法。默认值是wiener,也可以是hard.

prev

设置用于去噪的前序帧的数量。默认设置为0。

next

设置用于去噪的后续帧的数量。默认设置为0。

planes

设置需要过滤的平面,默认情况下过滤所有可用的 除了 alpha 。

30.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数组的大小。

30.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)))'
    

30.92 field

使用步幅算法从交错的图像中提取单个场,以避免浪费CPU时间。输出帧被标记为非交错。

该滤镜接受以下选项:

type

指定是否提取顶部场(如果值为0或为top)或底部场(如果值为1或为bottom).

30.93 fieldhint

通过从周围帧中复制顶部和底部场来创建新的帧,这些帧由提示文件中的数字提供。

hint

设置带有提示的文件:绝对/相对帧数字。

剪辑中每帧必须有一行。每行必须包含两个以逗号分隔的数字,可以选择跟随-+。 文件中每行提供的数字不能超出[N-1,N+1]范围,其中N 是当前帧编号对于absolute模式,或超出[-1,1]范围对relative模式。第一个数字表示从哪个帧获取顶部 场,第二个数字表示从哪个帧获取底部场。

如果后面跟随+输出帧将被标记为交错, 否则如果跟随-输出帧将被标记为逐行,否则 它将被标记为与输入帧相同。 如果后面跟随t输出帧将仅使用顶部场,或者在b模式下将仅使用底部场。 如果行以#;开头,则该行将被跳过。

mode

可以是项目absoluterelativepattern。默认是absolutepattern模式与relative模式相同,除了文件最后一个条目如果有 超过的帧需要处理,hint文件将被回溯到起始。

关于hint模式的文件前几行的示例:relative模式:

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 -

30.94 fieldmatch

用于反向电视电影技术的场匹配滤镜。它旨在从电影化流中重建 逐行帧。该滤镜不会删除重复帧,因此要实现完整的反向电视电影fieldmatch需要在滤镜链中后接一个剪裁滤镜,例如减影

场匹配和剪裁的分离主要是为了在两者之间插入一个去交错滤镜备选。如果源包含混合电视电影和真实交错内容,fieldmatch将无法匹配交错部分的场。 但这些剩余的栓式帧将被标记为交错,因此可以通过后续滤镜如yadif进行去交错处理,然后剪裁。

除了各种配置选项,fieldmatch可以接收一个 可选的第二流,激活通过ppsrc选项。如果启用,帧重建将基于第二流的场和帧。这允许第一输入被预处理以帮助滤镜的各种算法,同时保持输出无损 (假设场正确匹配)。通常,场感知降噪器或亮度/对比度调整可以有所帮助。

请注意,该滤镜与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)使用相同的算法。后者是 TFM 的轻量克隆,fieldmatch基于后者。尽管语义和用法非常接近,但某些行为和选项名可能有所不同。

目前,减影滤镜仅适用于恒定帧率输入。 如果您的输入包含混合的电视电影(30fps)和较低帧率的逐行内容如 24fps,请使用以下滤镜链生成所需的恒定帧率流:dejudder,fps=30000/1001,fieldmatch,decimate.

该滤镜接受以下选项:

order

指定输入流的假定场顺序。可用值有:

auto

自动检测奇偶性(使用 FFmpeg的内部奇偶值)。

bff

假定为底场优先。

tff

假定为顶场优先。

请注意,有时建议不要完全信任流宣布的奇偶性。

默认值是自动.

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

三向匹配,如果所有三种原始匹配都检测为栓式则尝试第四/第五种匹配(p/c/n + u/b)

括号末尾指示该模式将使用的匹配,假设order=顶场优先(并field自动顶部).

关于速度,pc模式起快,pcn_ub模式则最慢。

默认值是pc_n.

ppsrc

将主输入流标记为预处理输入,并启用次要输入流,以便从中选择场。更多详细信息,请参阅滤镜介绍。它类似于来自 VFM/TFM 的clip2功能。

默认值是0(禁用)。

field

设置用于匹配的场。建议将其设置为与order相同的值,除非您遇到匹配失效。在某些情况下,改变用于匹配的场可能对匹配性能有很大影响。可用值有:

auto

自动(与order).

bottom

从底场匹配。

top

从顶场匹配。

默认值是自动.

mchroma

设置在匹配比较时是否包含色度。在大多数情况下建议保持此选项启用。只有在您的剪辑有严重的色度问题,如严重的彩虹效应或其他伪像时,才应设置为0。设置为0也能在加速的情况下牺牲一些准确性。

默认值是1.

y0
y1

这些定义一个排除带,它排除了从y0y1之间的行而不包含在场匹配决策中。排除带可用于忽略字幕、徽标或其他可能 干扰匹配的内容。y0设置起始扫描行,y1设置结束行;所有介于y0y1之间(包括y0y1)的行都会被忽略。设置y0y1为相同值将禁用此功能。y0y1默认值是0.

scthresh

设置镜头变化检测阈值,以最大亮度变化的百分比计算。推荐值为[8.0, 14.0]范围。镜头变化检测仅在combmatch=场景切换时相关。 对于scthresh范围为[0.0, 100.0].

默认值是12.0.

combmatch

combatch不是, fieldmatch时, 会考虑匹配的栓式评分,用于决定使用哪个匹配作为最终匹配。可用值有:

none

没有最终匹配基于栓式评分。

sc

栓式评分仅在检测到镜头变化时使用。

full

始终使用栓式评分。

默认值是镜头变化.

combdbg

强制fieldmatch计算某些匹配的栓式指标并打印。此设置在 TFM/VFM 术语中称为micout。 可用值为:

none

无强制计算。

pcn

强制 p/c/n 计算。

pcnub

强制 p/c/n/u/b 计算。

默认值是.

cthresh

这是用于栓式帧检测的区域交织阈值。这本质上控制交织必须如何“强”或“可见”才能检测到。更大值意味着交织必须更可见,更小值意味着交织可以更不显眼或不强仍能检测到。有效设置范围为-1(每个像素将被检测为栓式)到255(没有像素将被检测为栓式)。这基本上是像素差值。理想范围为[8, 12].

默认值是9.

chroma

设置是否在梳帧决定中考虑色度。仅在你的源视频存在色度问题(如彩虹光晕等)并且启用色度时导致梳帧检测出现问题时禁用此项。实际上,使用chroma=0通常更可靠,除了源视频中仅有色度梳理的情况。

默认值是0.

blockx
blocky

分别设置在梳帧检测过程中使用的窗口的 x 轴和 y 轴大小。这与combpel像素需要被检测为梳理像素的区域大小有关,以声明某帧为梳理帧。请参阅combpel参数描述了解更多信息。 可能的值是从 4 到 512 的 2 的幂的任意一个数字。

默认值是16.

combpel

在任何blockyblockx大小块区域内的梳状像素数量,若达到阈值,该帧将被检测为梳帧。而cthresh控制梳理的“可见性”程度,该设置控制帧中任何局部区域内(由blockxblocky设置定义的窗口)需要存在的“梳状像素的数量”。最小值是0,最大值是blocky x blockx(此时将永远检测不到梳帧)。此设置在 TFM/VFM 术语中称为MI

默认值是80.

30.94.1 p/c/n/u/b 含义

30.94.1.1 p/c/n

我们假设以下经过电信号处理的流:

Top fields:     1 2 2 3 4
Bottom fields:  1 2 3 4 4

数字对应的是关联于字段的渐进帧。在此,第一个和第二个帧是渐进的,第三个和第四个是梳状的,以此类推。

fieldmatch被配置为从底部进行匹配(field=底部)时,输入流将被这样转换:

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

通过字段匹配之后,可以看到一些帧被重复了。 要执行完整的反电信号处理,你需要在此操作之后依赖一个下采样滤镜。例如,参见下采样滤镜。

同样的操作现在是从顶部字段匹配(field=顶部) 看起来如下:

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

在这些示例中,我们可以看出p, cn的含义; 它们基本上指的是与当前字段相反奇偶性的帧或字段:

  • p匹配上一帧中相反奇偶性的字段
  • c匹配当前帧中相反奇偶性的字段
  • n匹配下一帧中相反奇偶性的字段

30.94.1.2 u/b

ub匹配有些特殊,它们从相反奇偶性标志进行匹配。在以下示例中,我们假设现在正在匹配第二帧(顶部:2,底部:2)。根据匹配规则,在每个匹配的字段上方和下方放置一个“x”。 matching are a bit special in the sense that they match from the opposite parity flag. In the following examples, we assume that we are currently matching the 2nd frame (Top:2, bottom:2). According to the match, a ’x’ is placed above and below each matched fields.

对于底部匹配(field=底部):

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=顶部):

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

30.94.2 示例

简单的针对顶部优先字段的反电信号处理过程:

fieldmatch=order=tff:combmatch=none, decimate

高级反电信号处理,对于仍梳状的帧,使用yadif作为备选:

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

30.95 字段顺序

转换输入视频的字段顺序。

它接受以下参数:

order

输出字段顺序。有效值为tff表示顶部优先,或bff表示底部优先。

默认值为“tff’.

转换通过向上或向下移动图像内容一行,并用适当的图像内容填充剩余的行来完成。 此方法与大多数广播字段顺序转换器一致。

如果输入视频未标记为隔行扫描,或者其字段顺序已经为所需的输出字段顺序,则此滤镜不会修改传入的视频。

在转换为或从 PAL DV 材料(底部优先)时非常有用。

例如:

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

30.96 填补边界

填充输入视频的边界,而不改变视频流的尺寸。 有时视频四边会有垃圾内容,而你可能不希望裁剪输入视频以保持尺寸为某些数值的倍数。

此滤镜接受以下选项:

left

填充左边界的像素数量。

right

填充右边界的像素数量。

top

填充上边界的像素数量。

bottom

填充下边界的像素数量。

mode

设置填充模式。

接受以下值:

smear

使用最外层像素填充

mirror

使用镜像(半采样对称)填充

fixed

用常量值填充像素

reflect

使用反射(完全采样对称)填充像素

wrap

使用包裹填充像素

fade

淡化像素到常量值

margins

用边界附近像素的加权平均值填充顶部和底部的像素

默认值是延展.

color

为固定或渐变模式下的像素设置颜色。默认值是黑色.

30.96.1 指令

此滤镜支持与选项相同的指令。 该指令接受与对应选项相同的语法。

如果指定的表达式无效,则保持为其当前值。

30.97 找矩形

在输入视频中查找矩形对象。

要查找的对象必须指定为灰8图像,并使用object选项指定。

对于每个可能的匹配,将计算一个分数。如果分数达到指定的阈值,则认为找到了对象。

如果输入视频包含该对象的多个实例,滤镜只会找到其中一个。

当找到一个对象时,会在匹配的帧中设置以下元数据条目:

lavfi.rect.w

对象的宽度

lavfi.rect.h

对象的高度

lavfi.rect.x

对象的 x 位置

lavfi.rect.y

对象的 y 位置

lavfi.rect.score

找到对象的匹配分数

接受以下选项:

object

对象图像的文件路径,需要为灰8格式。

threshold

检测阈值,以 0-1 范围的十进制数表示。

阈值 0.01 意味着仅精确匹配,阈值 0.99 意味着几乎所有内容都匹配。

默认值是 0.5。

mipmaps

设置生成的较小图像的数量,默认值为 3。

xmin, ymin, xmax, ymax

指定搜索区域中的矩形。

discard

丢弃未检测到对象的帧。默认是禁用。

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

30.98 泛洪填充

用指定值替换与同一像素分量值相同的区域。

接受以下选项:

x

设置像素的 x 坐标。

y

设置像素的 y 坐标。

s0

设置源 #0 分量值。

s1

设置源 #1 分量值。

s2

设置源 #2 分量值。

s3

设置源 #3 分量值。

d0

设置目标 #0 分量值。

d1

设置目标 #1 分量值。

d2

设置目标 #2 分量值。

d3

设置目标 #3 分量值。

30.99 格式

将输入视频转换为指定的像素格式之一。 Libavfilter 将尝试选择一种适合作为输入的格式给下一个滤镜。

它接受以下参数:

pix_fmts

一个用‘|’分隔的像素格式名称列表,例如 "pix_fmts=yuv420p|monow|rgb24"。

color_spaces

一个用‘|’分隔的色彩空间名称列表,例如 "color_spaces=bt709|bt470bg|bt2020nc"。

color_ranges

一个用‘|’分隔的颜色范围名称列表,例如 "color_spaces=tv|pc"。

30.99.1 示例

  • 将输入视频转换为yuv420p格式
    format=pix_fmts=yuv420p
    

    将输入视频转换为列表中的任何一种格式

    format=pix_fmts=yuv420p|yuv444p|yuv410p
    

30.100 帧率

通过增加或删除帧将视频转换为指定的固定帧率。

接受以下参数:

fps

所需的输出帧率。它接受包含以下常量的表达式:

source_fps

输入的帧率

ntsc

NTSC 帧率30000/1001

pal

PAL 帧率25.0

film

电影帧率24.0

ntsc_film

NTSC-电影帧率24000/1001

默认值是25.

start_time

假定第一个时间戳 (PTS) 的值,以秒为单位。这允许流的开头进行填充/修剪。默认情况下,不对第一个帧的预期时间戳进行任何假设,因此不会进行填充或修剪。 例如,如果视频流开始时音频流尚未启动,可以将其设置为 0,重复填充第一个帧,或者去除带负时间戳的任何帧。

round

时间戳 (PTS) 舍入方法。

可能的值是:

zero

向 0 舍入

inf

向远离 0 舍入

down

向 -无穷大 舍入

up

向 +无穷大 舍入

near

四舍五入

默认值为near.

eof_action

读取最后一帧时要执行的操作。

可能的值是:

round

使用与其他帧相同的时间戳舍入方法。

pass

如果输入持续时间尚未达到,则通过最后一帧直接传递。

默认值为round.

或者,可以通过一个扁平字符串来指定选项:帧率[:开始时间[:舍入]].

另请参见setpts滤镜。

30.100.1 示例

  • 将帧率设置为 25 的典型用法:
    fps=fps=25
    
  • 将帧率设置为 24 ,使用缩写和舍入方法将其舍入到最近值:
    fps=fps=film:round=near
    

30.101 帧打包

将两个不同的视频流打包成一个立体视频,并在支持的编解码器上设置适当的元数据。这两个视图应具有相同的大小和帧率,处理将在较短视频结束时停止。请注意,可以使用缩放帧率滤镜方便地调整视图属性。

它接受以下参数:

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

30.102 帧速率

通过从源帧中插入新的视频输出帧来更改帧速率。

此滤镜未设计为与隔行媒体正常工作。如果希望更改隔行媒体的帧率,则需要在此滤镜之前进行去隔行处理,并在此滤镜之后重新隔行。

以下是此滤镜接受的选项的描述。

fps

指定输出的帧率(FPS)。此选项也可以仅作为一个值指定。默认值是50.

interp_start

指定范围的起点,输出帧将在此范围内通过两帧的线性插值生成。范围是 [0-255],默认值是15.

interp_end

指定范围的终点,输出帧将在此范围内通过两帧的线性插值生成。范围是 [0-255],默认值是240.

scene

设定一个在当前帧中检测场景变化的阈值,范围在 0 到 100 之间。值越低表示当前帧不太可能是一个新场景的开始,值越高则表明其更有可能是。默认值是8.2.

flags

指定影响滤镜处理的标志。

当前flags标志的可用值包括:

scene_change_detect, scd

使用场景的值启用场景变化检测。 此标志默认启用。

30.103 帧步长

选择每第 N 帧中的一帧。

此滤镜接受以下选项:

step

在每step帧后选择的一帧。 允许的值为大于 0 的正整数。默认值是1.

30.104 冻结检测

检测冻结视频。

当检测到输入视频在指定时间内内容无明显变化时,此滤镜将记录消息并设置帧元数据。 视频冻结检测通过计算所有视频帧分量的平均绝对差值并将其与噪声下限进行比较来实现。

打印的时间和持续时间以秒为单位。lavfi.freezedetect.freeze_start元数据键设置在第一个时间戳等于或超过检测持续时间的帧上,它包含冻结的第一帧的时间戳。lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end元数据键设置在冻结之后的第一帧上。

过滤器接受以下选项:

noise, n

设置噪声容差。可以指定为分贝(如果指定值后附加了"dB")或者作为0到1之间的差异比例。默认值为-60分贝,或0.001。

duration, d

设置冻结持续时间直到通知(默认2秒)。

30.105冻结帧

冻结视频帧。

此过滤器使用第二个输入的帧冻结视频帧。

过滤器接受以下选项:

first

设置开始冻结的第一帧的编号。

last

设置结束冻结的最后一帧的编号。

replace

设置将使用而不是替换帧的第二个输入的帧编号。

30.106 frei0r

对输入视频应用frei0r效果。

要启用此过滤器的编译,你需要安装frei0r头文件并使用以下配置FFmpeg:--enable-frei0r.

它接受以下参数:

filter_name

要加载的frei0r效果名称。如果环境变量FREI0R_PATH已定义,则在该环境变量中指定的以冒号分隔的目录列表中搜索frei0r效果。FREI0R_PATH否则,将按以下顺序搜索标准frei0r路径:HOME/.frei0r-1/lib/, /usr/local/lib/frei0r-1/, /usr/lib/frei0r-1/.

filter_params

传递给frei0r效果的参数列表以"|"分隔。

frei0r效果参数可以是布尔值(其值为"y"或"n")、双精度数、颜色(指定为红色/绿色/蓝色,其中红色, 绿色蓝色是0.0到1.0之间的浮点数,包括这些值)或ffmpeg-utils手册中“颜色”部分中指定的颜色描述或者是位置(指定为, a position (specified as X/Y,其中XY是浮点数)和/或字符串。

参数的数量和类型取决于加载的效果。如果未指定某个效果参数,则使用默认值。

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

30.106.2 命令

此过滤器支持filter_params选项作为命令.

30.107 fspp

应用快速简单的后处理。这是spp过滤器的更快版本。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启用。

30.108 fsync

使用来自文件的外部映射同步视频帧。

对于映射文件中给定的每个输入PTS,它会删除或创建必要数量的帧,以重建映射文件中给出的输出帧序列。

此过滤器适用于重建通过fps过滤器的帧率转换的输出帧,并记录到映射文件中,使用ffmpeg选项fps,并对相应帧进行进一步处理,例如质量比较。-stats_mux_pre每行的映射文件必须包含每输入帧的三个项目:输入PTS(十进制)、输出PTS(十进制)和输出时间基(十进制/十进制),以空格分隔。此文件格式对应于

的输出。-stats_mux_pre_fmt="{ptsi} {pts} {tb}".

过滤器假定映射文件按递增的输入PTS排序。

过滤器接受以下选项:

file, 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 -

30.109 gblur

应用高斯模糊过滤器。

过滤器接受以下选项:

sigma

设置水平标准差,高斯模糊的标准偏差。默认值是0.5.

steps

设置高斯近似的步数。默认值是1.

planes

设置要过滤的平面。默认情况下所有平面都被过滤。

sigmaV

设置垂直标准差,如果为负,它将与sigma相同。 默认值是-1.

30.109.1 命令

此过滤器支持与选项相同的命令。 命令接受与其对应选项相同的语法。

如果指定的表达式无效,则将保持其当前值。

30.110 geq

对每个像素应用通用方程。

过滤器接受以下选项:

lum_expr, lum

设置亮度表达式。

cb_expr, cb

设置色度蓝表达式。

cr_expr, cr

设置色度红表达式。

alpha_expr, a

设置透明度表达式。

red_expr, r

设置红色表达式。

green_expr, g

设置绿色表达式。

blue_expr, b

设置蓝色表达式。

根据指定的选项选择颜色空间。如果指定了lum_expr, cb_expr,或cr_expr选项,过滤器将自动选择YCbCr颜色空间。如果指定了red_expr, green_expr,或blue_expr选项,它将选择RGB颜色空间。

如果未定义一个色度表达式,它将退到另一个表达式。如果未指定透明度表达式,它将评估为不透明值。如果没有指定色度表达式,它们将评估到亮度表达式。

表达式可以使用以下变量和函数:

N

过滤帧的序列号,从0.

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

SW
SH

根据当前过滤平面宽度和高度比例。它是对应的亮度平面像素数与当前平面像素数的比率。例如,对于YUV4:2:0,值是针对亮度平面的1,1,针对色度平面的0.5,0.5

T

当前帧的时间,以秒表示。

p(x, y)

返回当前平面中(x,y)位置处像素的值。x,y)。

lum(x, y)

返回亮度平面中(x,y)位置处像素的值。x,y)。

cb(x, y)

返回蓝色-差色度平面中(x,y)位置处像素的值。如果没有这样的平面,则返回0。x,y)。

cr(x, y)

返回红色-差色度平面中(x,y)位置处像素的值。如果没有这样的平面,则返回0。x,y)。

r(x, y)
g(x, y)
b(x, y)

返回红/绿/蓝分量中(x,y)位置处像素的值。如果没有这样的分量,则返回0。x,y)。

alpha(x, y)

返回alpha平面中(x,y)位置处像素的值。如果没有这样的平面,则返回0。x,y)。

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)矩形内的总和,这允许在矩形内获得样本总和。请参阅没有后缀的函数。

interpolation

设置一种插值方法:

nearest, n
bilinear, b

默认是双线性插值。

对于函数,如果x和y超出区域,值会自动裁剪到最近的边缘。xy

请注意,如果此过滤器使用多个线程,则每个切片都会有其自己的表达式状态。如果你的表达式依赖于之前的状态,则应该将滤镜线程数限制为1。

30.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过滤器):vignette过滤器):
    geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
    

30.111 gradfun

修复由于截断为8位颜色深度而引入到几乎平坦区域的条带伪影。插值应该在条带位置的渐变,并进行抖动。

它仅设计用于播放。不建议在有损压缩之前使用,因为压缩往往会丢失抖动并恢复条带。

它接受以下参数:

strength

过滤器将改变任何一个像素的最大量。这也是检测几乎平坦区域的阈值。可接受的值范围从.51到64;默认值为1.2。超出范围的值将被裁剪到有效范围。

radius

拟合渐变的邻域。较大的半径使渐变更平滑,但也会防止过滤器修改详细区域附近的像素。可接受的值范围是8-32;默认值为16。超出范围的值将被裁剪到有效范围。

另外,选项可以作为一个简单字符串指定:强度[:半径]

30.111.1 示例

  • 应用过滤器,强度为3.5,半径为8:
    gradfun=3.5:8
    
  • 指定半径,省略强度(将返回默认值):
    gradfun=radius=8
    

30.112 graphmonitor

显示各种过滤器图统计数据。

使用此过滤器可以调试完整的过滤器图。特别是与链接填充排队帧相关的问题。

过滤器接受以下选项:

size, s

设置视频输出大小。默认值是hd720.

opacity, o

设置视频不透明度。默认值是0.9。允许范围是从01.

mode, m

设置输出模式标志。

标志的可用值是:

full

没有任何过滤。默认。

compact

仅显示有排队帧的过滤器。

nozero

仅显示具有非零统计数据的过滤器。

noeof

仅显示具有非EOF统计数据的过滤器。

nodisabled

仅显示在时间轴中启用的过滤器。

flags, 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。 这保证输出视频帧率不会高于此值。

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

30.114 灰边

一种颜色恒定变化滤镜,通过灰边算法估算场景光照并相应地校正场景颜色。

参见:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

滤镜接受以下选项:

difford

应用于场景的微分阶数。必须选择范围为[0,2],默认值为1。

minknorm

用于计算明可夫斯基距离的明可夫斯基参数。必须选择范围为[0,20],默认值为1。设置为0则获取最大值而不是计算明可夫斯基距离。

sigma

要应用于场景的高斯模糊的标准差。必须选择范围为[0,1024.0],默认值为1。sigma* break_off_sigma(3) )如果difford大于0,则不能等于0。

30.114.1 示例

  • 灰边:
    greyedge=difford=1:minknorm=5:sigma=2
    
  • 最大边缘:
    greyedge=difford=1:minknorm=0:sigma=2
    

30.115 guided

应用引导滤镜进行边缘保留平滑、去雾等操作。

滤镜接受以下选项:

radius

设置框半径(以像素为单位)。允许范围为1到20。默认值为3。

eps

设置正则化参数(平方值)。允许范围为0到1。默认值为0.01。

mode

设置过滤模式。可以是basicfast。 默认值为basic.

sub

设置fast模式的抽样比率。 范围为2到64。默认值为4。 在basic模式中不进行抽样。

guidance

设置引导模式。可以是offon。默认值为off。 如果off,只需要单一输入。 如果on,需要两个具有相同分辨率和像素格式的输入。 第二个输入用作引导。

planes

设置要过滤的平面。默认值是仅过滤第一个平面。

30.115.1 命令

此滤镜支持以上所有选项作为命令.

30.115.2 示例

  • 使用引导滤镜进行边缘保留平滑:
    ffmpeg -i in.png -vf guided out.png
    
  • 使用引导滤镜进行去雾、结构转移过滤、细节增强。 有关生成引导图像,请参考论文《Guided Image Filtering》。 参见:http://kaiminghe.com/publications/pami12guidedfilter.pdf.
    ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
    

30.116 haldclut

将一个 Hald CLUT 应用于视频流。

第一个输入是要处理的视频流,第二个输入是 Hald CLUT。 Hald CLUT 输入可以是简单的图片或完整的视频流。

滤镜接受以下选项:

clut

设置第二输入流中的 CLUT 视频帧将如何处理, 可以是首帧全部。默认值为全部.

shortest

强制在最短输入终止时终止操作。默认值为0.

repeatlast

继续在流结束后应用最后的 CLUT。一值为0禁用滤镜,当流最后一个 CLUT 帧结束后。 默认值为1.

haldclut还具有与lut3d相同的插值选项(两个滤镜均共享同一内部机制)。

此滤镜还支持帧同步选项。

有关 Hald CLUT 的更多信息可在 Eskil Steenberg 的网站(Hald CLUT 作者)上找到,网址为http://www.quelsolaar.com/technology/clut.html.

30.116.1 命令

此滤镜支持interp选项作为命令.

30.116.2 工作流程示例

30.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流中的剩余帧。

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

30.117 hflip

将输入视频水平翻转。

例如,使用以下代码水平翻转输入视频:ffmpeg:

ffmpeg -i in.avi -vf "hflip" out.avi

30.118 histeq

此滤镜基于每帧应用全局颜色直方图均衡。

可用于修正像素强度范围压缩的视频。 滤镜将重新分配像素强度,使其在强度范围内的分布均匀。 它可以被看作是一个“自动调节对比度滤镜”。此滤镜仅对修复降质或捕获质量欠佳的源视频有用。

滤镜接受以下选项:

strength

确定要应用的均衡程度。随着强度的降低,像素强度的分布越来越接近输入帧。值需为范围[0,1]的浮点数,默认值为0.200。

intensity

设置可以生成的最大强度并适当地缩放输出值。强度应按预期设置,然后根据需要进行限制以避免过曝。值需为范围[0,1]的浮点数,默认值为0.210。

antibanding

设置抗条纹级别。如果启用,滤镜将随机改变输出像素的亮度以避免直方条状图的产生。 可能的值为none, weakstrong。默认值为none.

30.119 histogram

计算并绘制输入视频的颜色分布直方图。

计算出的直方图是图像中颜色分量分布的表示。

标准直方图显示图像中的颜色分布。为每种颜色分量显示颜色图表。展示当前帧中 Y、U、V、A 或 R、G、B 分量的分布(取决于输入格式)。每个图表下方都有一个颜色分量刻度表。

滤镜接受以下选项:

level_height

设置级别的高度。默认值为200。 允许范围是[50, 2048]。

scale_height

设置色彩刻度的高度。默认值为12。 允许范围是[0, 40]。

display_mode

设置显示模式。 接受以下值:

stack

每种颜色分量分别将其图表垂直排列。

parade

每种颜色分量分别将其图表水平排列。

overlay

展示的信息与parade模式相同,不同之处在于颜色分量的图表彼此直接叠加。

默认值为stack.

levels_mode

设置模式。可以是linear、或logarithmic。 默认值为linear.

components

设置要显示的颜色分量。 默认值为7.

fgopacity

设置前景的不透明度。默认值为0.7.

bgopacity

设置背景的不透明度。默认值为0.5.

colors_mode

设置颜色模式。 接受以下值:

whiteonblack
blackonwhite
whiteongray
blackongray
coloronblack
coloronwhite
colorongray
blackoncolor
whiteoncolor
grayoncolor

默认值为whiteonblack.

30.119.1 示例

  • 计算并绘制直方图:
    ffplay -i input -vf histogram
    

30.120 hqdn3d

这是一个高精度/高质量的3D降噪滤镜。目标是减少图像噪点,生成平滑图像并使静态图像真正静态。有助于提高可压缩性。

它接受以下可选参数:

luma_spatial

一个非负浮点数,用于指定空间亮度强度。默认值为4.0。

chroma_spatial

一个非负浮点数,用于指定空间色度强度。 默认值为3.0*亮度空间/4.0.

luma_tmp

一个浮点数,用于指定时间亮度强度。默认值为6.0*亮度空间/4.0.

chroma_tmp

一个浮点数,用于指定时间色度强度。默认值为亮度时间*色度空间/亮度空间.

30.120.1 命令

此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持该选项当前的值。

30.121 hwdownload

将硬件帧下载到系统内存。

输入必须是硬件帧,输出则是非硬件格式。并非所有格式都可以支持输出 - 可能需要在图中随后插入一个额外format滤镜,以将输出转换为支持的格式。

30.122 hwmap

将硬件帧映射到系统内存或另一个设备。

此滤镜有几种不同的操作模式;使用哪种模式取决于输入和输出格式:

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并传递到输出。如果稍后需要原始硬件帧(例如,在其上的部分覆盖其他内容后),可以使用hwmap滤镜再次检索它。

  • 普通帧输入,硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射它 - 即返回原始硬件帧。

    否则,必须提供一个设备。在该设备上为输出创建新的硬件表面,然后将这些帧映射回作为输入的软件格式,并将这些帧提供给前面的滤镜。然后,这将表现像hwupload滤镜,但可能能够避免额外的拷贝。

  • 硬件帧输入和输出

    必须直接提供输出设备,或者使用derive_device选项。如果输入和输出设备是不同类型且兼容的 - 同一底层硬件上下文(例如,指同一个图形卡)系统通常要求保持一致。

    如果输入帧最初是在输出设备上创建,则取消映射以取回原始帧。

    否则,将帧映射到输出设备 - 在输出设备上创建与输入帧对应的新硬件帧。

接受以下附加参数:

mode

设置帧映射模式。一些操作组合包含:

读取

映射的帧应该可读取。

写入

映射的帧应该可写入。

覆盖

映射将始终覆盖整个帧。

在某些情况下,这可能会提高性能,因为无需加载帧的原始内容。

直接

映射不得包含任何拷贝操作。

在某些情况下,当直接映射不可行或具有意外属性时,会创建间接映射到帧的副本。设置此标志将确保映射是直接的,并在不可能情况下失败。

默认值为read+write(如果未指定)。

derive_device 类型

而不是使用初始化时提供的设备,而是从输入帧存在的设备派生出一个类型为类型的新设备。

reverse

在硬件到硬件映射中,通过反向映射操作——创建在接收端的帧并映射回源。可能是在某些情况下的强制要求,涉及一个方向的映射是必须的但设备只支持反方向。

此选项是危险的——如果在任何附加措施下对过滤器输出存在限制,会导致前一个过滤器在隐性模式下出现问题。只有完全理解该选项的使用意义才可使用。

30.123 硬件上传

将系统内存帧上传到硬件表面。

在初始化滤镜时必须提供要上传的设备。如果使用 ffmpeg,通过以下选项选择合适的设备-filter_hw_device选项或通过derive_device选项。输入和输出设备必须是不同类型且兼容的 - 具体含义依赖于系统,但通常意味着它们必须引用同一底层硬件上下文(例如,引用同一张显卡)。

支持以下附加参数:

derive_device 类型

而不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个新的设备,其类型为类型

30.124 CUDA 硬件上传

将系统内存帧上传到 CUDA 设备。

接受以下可选参数:

device

要使用的 CUDA 设备编号

30.125 高质量缩放 (HQX)

应用为像素艺术设计的高质量放大过滤器。此过滤器由 Maxim Stepin 创建。

它接受以下选项:

n

设置缩放维度:2对于hq2x, 3对于hq3x4对于hq4x。 默认值为3.

30.126 水平堆叠 (hstack)

水平堆叠输入视频。

所有流的像素格式和高度必须相同。

请注意,此滤镜比使用叠加填充过滤器创建相同输出更快。

滤镜接受以下选项:

inputs

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

shortest

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

30.127 HSV 保留

将某个 HSV 范围转换为灰值。

此过滤器测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的颜色差异。根据选项,输出颜色可以变为灰色或不变。

滤镜接受以下选项:

hue

设置用于颜色差异计算的色相值。允许范围为 -360 到 360。默认值为 0。

sat

设置用于颜色差异计算的饱和度值。允许范围为 -1 到 1。默认值为 0。

val

设置用于颜色差异计算的明度值。允许范围为 -1 到 1。默认值为 0。

similarity

设置与关键颜色的相似百分比。允许范围为 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。 允许范围为 0 到 1。默认值为 0。

0.0 会使像素完全灰色或完全不灰色。

更高的值会导致更多灰色像素,像素颜色越接近关键颜色,灰色像素越多。

30.128 HSV 关键色

将某个 HSV 范围转换为透明。

此过滤器测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的颜色差异。根据选项,通过添加 alpha 通道,可以将输出颜色更改为透明。

滤镜接受以下选项:

hue

设置用于颜色差异计算的色相值。允许范围为 -360 到 360。默认值为 0。

sat

设置用于颜色差异计算的饱和度值。允许范围为 -1 到 1。默认值为 0。

val

设置用于颜色差异计算的明度值。允许范围为 -1 到 1。默认值为 0。

similarity

设置与关键颜色的相似百分比。允许范围为 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。 允许范围为 0 到 1。默认值为 0。

0.0 会使像素完全透明或完全不透明。

更高的值会导致半透明像素,像素颜色越接近关键颜色,透明度越高。

30.129 色调

修改输入的色调和/或饱和度。

接受以下参数:

h

指定色调角度,以度为单位。可接受一个表达式,默认为 "0"。

s

指定饱和度,范围为 [-10,10]。接受一个表达式,默认为 "1"。

H

指定色调角度,以弧度为单位。可接受一个表达式,默认为 "0"。

b

指定亮度,范围为 [-10,10]。接受一个表达式,默认为 "0"。

hH是互斥的,不能同时指定。

b, h, Hs选项值是包含以下常量的表达式:

n

从 0 开始的输入帧数。

pts

以时间基单位表示的输入帧演示时间戳。

r

输入视频的帧率,如果未知帧率则为 NAN。

t

以秒表示的时间戳,如果未知时间戳则为 NAN。

tb

输入视频的时间基。

30.129.1 示例

  • 将色调设置为 90 度,饱和度为 1.0:
    hue=h=90:s=1
    
  • 相同命令但以弧度表示色调:
    hue=H=PI/2:s=1
    
  • 轮换色调,并使饱和度在 1 秒内在 0 和 2 之间摆动:
    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))"
    

30.129.2 命令

该滤镜支持以下命令:

b
s
h
H

修改输入视频的色调、饱和度和/或亮度。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

30.130 色调-饱和度

对输入视频流应用色调-饱和度-强度调整。

此过滤器在 RGB 色彩空间中运行。

此过滤器接受以下选项:

hue

设置要应用的色调偏移(单位为度)。默认值为 0。 范围为 -180 到 180。

saturation

设置饱和度偏移。默认值为 0。 范围为 -1 到 1。

intensity

设置强度偏移。默认值为 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 三元组中的亮度, 启用此选项可以保持亮度不变。

30.131 滞回

将第一条流扩展到第二条流,通过连接组件。 这使得可以构建更稳健的边缘掩码。

此过滤器接受以下选项:

planes

设置哪些平面将被作为位图进行处理,未处理的平面将从第一条流中复制。 默认值为 0xf,所有平面都将被处理。

threshold

设置过滤中使用的阈值。如果像素分量值高于此值,则激活用于连接组件的过滤算法。 默认值为 0。

hysteresis过滤器还支持framesync选项。

30.132 ICC 检测

从嵌入的 ICC 配置文件(如果存在)中检测色彩空间,并相应地更新帧的标记。

此过滤器接受以下选项:

force

如果为 true,则帧的现有色彩空间标记将始终被 ICC 配置文件中检测的值覆盖。否则,仅当它们包含unknown时才会被分配。默认启用。

30.133 ICC 生成功能

生成 ICC 配置文件并将其附加到帧。

此过滤器接受以下选项:

color_primaries
color_trc

配置将为其生成 ICC 配置文件的色彩空间。 默认值auto从输入帧的元数据推断值, 根据需要默认为 BT.709/sRGB。

请参阅setparams过滤器以获取可能值的列表,但请注意,unknown对于此过滤器无效。

force

如果为 true,即使会覆盖已存在的 ICC 配置文件,也会生成新配置文件。 默认禁用。

30.134 身份分数

获取两个输入视频之间的身份分数。

此滤镜需要两个输入视频。

要正确运行此过滤器,输入视频的分辨率和像素格式必须相同。此外,假定两个输入的视频帧数相同,并逐帧进行比较。

通过日志系统打印出每个分量的平均值、最小值和最大身份分数。

过滤器会将每帧计算的身份分数存储在帧元数据中。

此过滤器还支持framesync选项。

以下示例中,正在处理的输入文件main.mpg与参考文件进行比较ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -

30.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过滤器作为清理交错标志的低计算方法。

30.135.1 示例

详细检查视频中前360帧的字段顺序:

ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -

idet过滤器将为每帧添加分析元数据,然后丢弃。在结束时,过滤器还将打印一份带有统计数据的最终报告。

30.136 il

拆分或合并字段。

此过滤器允许用户在不对交错图像字段进行解交错的情况下处理它们。拆分操作将输入帧分为两个字段(所谓的半图像)。奇数行移至输出图像的上半部分,偶数行移至下半部分。您可以独立处理这些字段(过滤处理)然后进行合并。

此过滤器接受以下选项:

luma_mode, l
chroma_mode, c
alpha_mode, a

可用值亮度模式, 色度模式透明度模式是:

none

无操作。

deinterleave, d

拆分字段,并将一个放置在另一个之上。

interleave, i

合并字段。反向恢复拆分操作的效果。

默认值为none.

luma_swap, ls
chroma_swap, cs
alpha_swap, as

交换亮度/色度/透明度字段。交换偶数和奇数行。默认值为0.

30.136.1 命令

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

30.137 inflate

对视频应用膨胀效果。

此过滤器用局部(3x3)平均值替换像素,仅考虑高于像素的值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个位面的最大变化,默认值为65535。如果为0,则该位面保持不变。

30.137.1 命令

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

30.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, off

禁用垂直低通滤波器

1, linear

启用线性滤波器(默认)

2, complex

启用复杂滤波器。这将稍微减少闪烁和莫尔现象,但更好地保留细节和主观清晰度印象。

30.139 kerndeint

通过应用Donald Graft的自适应内核去交错从输入视频中去交错。处理视频的交错部分以生成逐行帧。

以下是接受参数的说明。

thresh

设置阈值,影响滤镜在确定是否需要处理像素行时的容限。它必须是范围[0,255]内的整数,默认值为10。值为0将导致对每个像素应用过程。

map

若设置为1,则将超过阈值的像素涂白。默认值为0。

order

设置字段顺序。若设置为1则交换字段,若为0则保持字段不变。默认值为0。

sharp

若设置为1则启用额外锐化。默认值为0。

twoway

设置为1将启用双方向锐化。默认是0。

30.139.1 示例

  • 应用默认值:
    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
    
  • 启用额外锐化:
    kerndeint=sharp=1
    
  • 将处理的像素涂白:
    kerndeint=map=1
    

30.140 kirsch

对输入视频流应用Kirsch算子。

过滤器接受以下选项:

planes

设置处理哪些平面,未处理的平面将被复制。默认值为0xf,所有平面都将被处理。

scale

设置与过滤结果相乘的值。

delta

设置与过滤结果相加的值。

30.140.1 命令

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

30.141 lagfun

慢慢更新较暗的像素。

此滤镜使短暂的光出现更长时间。 此过滤器接受以下选项:

decay

设置衰减系数。默认值为0.95。允许范围为0到1。

planes

设置过滤哪些平面。默认过滤所有平面。允许范围为0到15。

30.141.1 命令

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

30.142 lenscorrection

修正径向镜头畸变。

此滤镜可用于校正由于广角镜头使用所导致的径向畸变,从而重新校正图像。要找到合适的参数,可以使用OpenCV等工具或简单的试验调整。要使用OpenCV,可在OpenCV源代码中的校准示例(位于samples/cpp)中提取k1和k2系数。

注意,开源工具如Krita和KDE项目的Digikam也提供了类似的滤镜。

vignette滤镜可用于补偿镜头错误不同,此滤镜校正图像的畸变,而vignette校正亮度分布。因此在某些情况下可能需要将两者结合使用,不过需要注意顺序,例如是先应用镜头校正还是先应用渐晕校正。

30.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)"Color"章节中的内容。默认颜色是black@0.

生成修正的公式为:

r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)

其中r_0是图像对角线的一半,r_srcr_tgt分别是源图像和目标图像中与焦点的距离。

30.142.2 命令

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

30.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–55mm镜头的焦距范围为[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
reverse

应用图像校正的逆过程(而不是校正畸变,而是应用畸变)。

interpolation

校正畸变时使用的插值类型。以下值是有效选项:

nearest
linear (default)
lanczos

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

30.144 libplacebo

基于libplacebo的灵活GPU加速处理滤镜https://code.videolan.org/videolan/libplacebo).

30.144.1 选项

该滤镜的选项分为以下几个部分:

30.144.1.1 输出模式

这些选项控制整体输出模式。默认情况下,libplacebo会尽量保留源颜色空间和尺寸,但它会应用任何嵌入的胶片噪点、多视点动态元数据或在源帧中存在的非统一像素比例。

inputs

设置输入数量。可以与idx变量配合使用,允许在输出帧中放置/混合多个输入。这实质上启用了类似于水平堆叠, 覆盖等功能。

w
h

设置输出视频尺寸表达式。默认值为iwih.

允许使用与缩放滤镜相同的表达式。

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

与相同的缩放滤镜选项功能一致。

normalize_sar

如果启用,输出帧将始终具有像素纵横比为1:1。这将根据需要引入额外的填充/裁剪。如果禁用(默认值),任何纵横比不匹配,包括例如非统一像素比例视频源的情况,都将被转发至输出像素纵横比。

pad_crop_ratio

当输入纵横比与输出纵横比不匹配时,指定填充和裁剪之间的比例(在0.01.0之间),并且normalize_sar生效。默认值0.0始终用黑色边框填充内容,而取值为1.0时始终剪掉内容的一部分。可能的中间值会产生两种方法的混合。

fillcolor

设置填充输出区域的颜色,例如由于normalize_sar。有关此选项的常规语法,请查阅(ffmpeg-utils)"颜色"部分的ffmpeg-utils手册。默认值为black.

corner_rounding

以圆角渲染帧。该值以浮点数为单位,范围从0.01.0,表示圆角程度的相对大小,从完全方形到完全圆形。换句话说,它给出的半径除以较短边长度的一半。默认值为0.0.

extra_opts

传递额外的 libplacebo 内部配置选项。可以作为=对的列表以‘:’分隔进行指定。以下示例显示如何配置自定义滤镜内核("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

应用 Dolby Vision RPU 元数据,若出现在源帧中,并从输出中剥离。默认启用。注意,Dolby Vision 将始终输出 BT.2020+PQ,覆盖通常的输入帧元数据。这些值也将被选为auto用于各自的帧输出选项。

除了之前在缩放过滤器中记录的表达式常量之外,crop_w, crop_h, crop_x, crop_y, pos_w, pos_h, pos_xpos_y选项还可以包含以下常量:

in_idx, idx

当前活动输入流的(从零开始)数字索引。

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 开始。

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

基于 jinc-sinc 内核的Lanczos的椭圆加权平均版本。这也通常被称为"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

启用在放大期间的sigmoidal压缩。稍微减少振铃。默认启用。

30.144.1.3 去色带

Libplacebo配备了一个内置的去色带滤镜,它能很好地抵消许多常见的色带和块效应来源。在需要质量时强烈推荐开启此功能。

deband

启用(快速)去色带算法。默认禁用。

deband_iterations

去色带算法的迭代次数。每次迭代都以逐渐增加的半径(以及降低的阈值)进行。推荐值范围在14之间。默认值为1.

deband_threshold

去色带滤镜强度。较高的值会导致更激进的去色带处理。默认值为4.0.

deband_radius

去色带滤镜半径。较高的半径对于缓慢的渐变更好,而较低的半径对于陡峭的渐变更好。默认值为16.0.

deband_grain

要添加的额外输出颗粒度。帮助隐藏瑕疵。默认值为6.0.

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

用于色盲模拟的圆锥模型。接受任何组合l, ms。以下是一些示例:

m

红绿色盲/红绿色盲(影响3%-4%的人群)

l

原视盲/原视盲(影响1%-2%的人群)

l+m

单色视(非常罕见)

l+m+s

完全失去白天视力的全色盲(极为罕见)

cone-strength

cones指定的圆锥的增益因子,范围在0.010.0之间。值为1.0不会改变色觉。值为0.0(默认值)模拟这些圆锥的完全丧失。高于1.0的值会夸大圆锥之间的差异,可能会帮助弥补减少的色觉。

30.144.1.5 峰值检测

为了处理仅具有静态HDR10元数据(或完全无标记)的来源,libplacebo使用自己的内部帧分析计算着色器来分析源帧并实时调整色调映射功能。如果速度太慢,或者需要完全可重现的帧完美结果,建议关闭此功能。

peak_detect

启用HDR峰值检测。忽略静态MaxCLL/MaxFALL值,而是根据输入动态检测。注意,检测到的值不会写回输出帧,它们仅指导内部色调映射过程。默认启用。

smoothing_period

峰值检测平滑期,范围在0.01000.0之间。较高值会使峰值检测对输入的变化响应较慢。默认值为100.0.

minimum_peak

检测到的峰值的下界(相对于SDR白色),范围在0.0100.0之间。默认值为1.0.

scene_threshold_low
scene_threshold_high

场景变化检测的上下阈值。以对数尺度表示,范围在0.0100.0之间。默认值为5.510.0。设置为负值将禁用此功能。

percentile

用于色调映射的帧亮度直方图的哪个百分位数。默认值为99.995,一个相当保守的值。设置为100.0将禁用帧直方图测量,改为使用实际峰值亮度进行色调映射。

30.144.1.6 色调映射

本部分中的选项控制 libplacebo 在处理广泛色域或HDR内容时如何执行色调映射和色域映射。通常情况下,libplacebo依赖于精确的源标注和主显示色域信息,以获得最佳结果。

gamut_mode

如何处理色域外的颜色,这些颜色可能会由于色彩校正色域映射导致。

clip

什么都不做,只是将超出范围的颜色剪切到RGB体积。质量较低但速度极快。

perceptual

感知上对颜色进行柔和剪切以适应目标体积。这是默认选项。

relative

相对校准的硬剪切。类似于perceptual但没有柔和拐点。

saturation

饱和度映射,直接将原色映射到RGB空间的目标原色。不建议使用,除非用于人工计算机图形,以获得明亮、饱和的显示效果。

absolute

绝对校准的硬剪切。不对白点进行任何调整。

desaturate

将超出范围的颜色硬去饱和到白色,同时保留亮度。但有扭曲明亮对象视觉外观的趋势。

darken

通过线性减少内容亮度来保留饱和的细节,然后将剩余的超出范围颜色剪切。

warn

突出显示超出范围的像素(通过反转/标记它们)。

linear

线性减少整个图像的色度以适应目标色彩体积。当使用没有适当主控元数据的BT.2020源时要小心,这样做会导致过度去饱和。

tonemapping

使用的色彩映射算法。可用值包括:

auto

基于内部启发式自动选择。这是默认选项。

clip

不执行色彩映射操作,只是剪切超出范围的颜色。对于范围内的颜色保留完美的色彩准确度,但完全破坏了范围外的信息。不进行任何黑点适配。不可配置。

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方法A的EETF。专为制作精良的HDR源而设计。可用于正向和反向色彩映射。不可配置。

spline

由两个多项式组成的简单样条,由一个单一的枢轴点连接起来。这参数给出了枢轴点(在PQ空间中),默认值为0.30。可用于正向和反向色彩映射。

reinhard

简单非线性、全局色彩映射算法。此参数指定显示峰值处的局部对比度系数。本质上,参数值为0.5表示参考白点的亮度将比剪切时大约减少一半。默认值为0.5,这是此函数最简单的表达形式。

mobius

Reinhard色彩映射算法的扩展,支持接近黑色的一段线性斜率。色彩映射参数表明线性段和非线性段之间的权衡。对于给定参数x,每个颜色值低于x的都会被线性映射,而较高的值将被非线性色彩映射。在参数靠近1.0时,该曲线表现类似于clip,而靠近0.0时,该曲线表现类似于reinhard。默认值为0.3,在色度计精度与保留超出范围细节之间提供了良好的平衡。

hable

由John Hable为了《Uncharted 2》开发的一种分段电影色彩映射算法,受Kodak使用的一种类似色彩映射算法的启发。因其在HDR游戏中应用而广受欢迎。这种算法能很好地保留暗部和亮部细节,但会显著改变平均亮度。这类似于reinhard具有参数0.24.

gamma

拟合一个伽玛(幂)函数以在源和目标颜色空间之间进行转换,有效地形成一个感知硬拐点连接两个大致线性区段。此方法能准确保留各个尺度的细节,但可能导致图像出现沉闷或暗淡的外观。这个参数用作切割点,默认值为0.5.

linear

在线性PQ空间中拉伸输入范围以匹配输出范围。这样做可以准确地保留所有细节,但会显著改变平均亮度。既可用于逆向色彩映射,也可用于正向色彩映射。参数可作为一个额外的线性增益系数(默认为1.0).

tonemapping_param

对于可调节的色彩映射曲线,此参数用来微调曲线行为。参考tonemapping的文档。默认值0.0由曲线的优选默认设置替代。

inverse_tonemapping

如果启用,此滤镜还尝试将SDR信号拉伸以填充HDR输出色彩体积。默认情况下禁用。

tonemapping_lut_size

色彩映射查找表的大小,在21024之间。默认值为256。当与peak_detect.

contrast_recovery

恢复对比度强度。如果设定值高于0.0,源图像将被划分为高频及低频成分,并将一部分高频图像添加回色彩映射后的输出中。可能会导致某些HDR源出现过度环纹伪影,但可以改善经色彩映射后图像的主观锐度和细节。默认值为0.30.

contrast_smoothness

恢复对比度低通滤波器的核尺寸。默认值为3.5。增加或减少此值会对视觉效果有很大影响。当contrast_recovery处于禁用状态时无效。

30.144.1.7 抖动处理

默认情况下,libplacebo会在必要时进行抖动处理,包括渲染到任何低于16位精度的整数格式。建议始终保持此设置开启,否则可能导致输出出现可见色带,即使启用了debanding滤镜。如果需要最大性能,请使用ordered_fixed而不是禁用抖动处理。

dithering

抖动处理使用的方式。接受以下值:

none

完全禁用抖动处理。可能导致可见色带。

blue

使用伪蓝噪声进行抖动。这是默认选项。

ordered

可调节的有序抖动模式。

ordered_fixed

更快的固定尺寸有序抖动,尺寸为6。无纹理。

white

使用白噪声进行抖动。无纹理。

dither_lut_size

设置抖动查找表的大小,以2的对数,范围在18之间。默认值为6,对应的查找表大小为64x64.

dither_temporal

启用时序抖动处理。默认情况下禁用。

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

指定完整的自定义着色器作为原字符串。

30.144.1.9 调试 / 性能

所有本节选项默认关闭。当试图最大化性能以牺牲质量时,它们可能有所帮助。

skip_aa

禁用下采样时的抗锯齿处理。

polar_cutoff

将极地(EWA)缩放器核剪切到低于绝对幅度值之间的范围0.01.0.

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置GPU采样(强制查找表)。

disable_fbos

强制禁用FBOs,导致几乎所有功能丧失,但提供最大的速度。

30.144.2 命令

此滤镜支持几乎所有上述选项作为命令.

30.144.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
    
  • 将低帧率/VFR输入插值为平滑的恒定60帧输出:
    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硬解码器进行互操作以避免通过RAM来回传输:
    ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
    

30.145 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时使用的池化方法。min, harmonic_mean选项为mean(默认)。

n_threads

设置初始化libvmaf时使用的线程数。默认值:0,表示无线程。

n_subsample

设置帧子采样间隔。

此滤镜还支持framesync选项。

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

带有选项和不同容器的示例:

这是libvmaf滤镜的CUDA变体。它仅接受CUDA帧。

需要Netflix的vmaf库(libvmaf)作为前提条件。安装库后它可以启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf.

30.146.1 示例

  • 显示CUVID硬件解码和CUDA缩放的基础用法示例,使用scale_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 -
    

30.147 limitdiff

使用第二个和可选的第三个视频流应用有限差异滤镜。

该滤镜接受以下选项:

threshold

设置允许视频流之间某些差异时使用的阈值。任何低于或等于此阈值的绝对差值会从第一个视频流选择像素组件。

elasticity

设置处理视频流时软阈值的弹性。此值乘以第一个阈值设置第二个阈值。任何绝对差值大于或等于第二个阈值的都会从第二个视频流选择像素组件。对于介于这两个阈值之间的值,将在线性插值第一个和第二个视频流之间。

reference

启用参考(第三个)视频流处理。默认情况下禁用。如果启用,该视频流将用于计算与第一个视频流的绝对差值。

planes

指定将处理哪些平面。默认为所有可用平面。

30.147.1 命令

此过滤器支持以上所有选项作为命令但不包括选项 ‘reference’.

30.148 限制器

将像素组件值限制在指定范围 [min, max] 内。

此过滤器接受以下选项:

min

下界。默认为输入的最低允许值。

max

上界。默认为输入的最高允许值。

planes

指定将处理哪些平面。默认为所有可用平面。

30.148.1 命令

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

30.149 循环

循环视频帧。

此过滤器接受以下选项:

loop

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

size

设置帧数的最大大小。默认值为 0。

start

设置循环的第一帧。默认值为 0。

time

设置循环开始时间(以秒为单位)。 仅当选项start被设置时使用-1.

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

30.150 lut1d

对输入视频应用一维查找表 (1D LUT)。

此过滤器接受以下选项:

file

设置 1D LUT 文件名。

当前支持的格式:

cube

Iridas

csp

cineSpace

interp

选择插值模式。

可用值为:

nearest

使用最邻近定义点的值。

linear

使用线性插值计算值。

cosine

使用余弦插值计算值。

cubic

使用三次插值计算值。

spline

使用样条插值计算值。

30.150.1 命令

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

30.151 lut3d

对输入视频应用三维查找表 (3D LUT)。

此过滤器接受以下选项:

file

设置 3D LUT 文件名。

当前支持的格式:

3dl

AfterEffects

cube

Iridas

dat

DaVinci

m3d

Pandora

csp

cineSpace

interp

选择插值模式。

可用值为:

nearest

使用最邻近定义点的值。

trilinear

使用定义立方体的 8 点进行插值。

tetrahedral

使用四面体进行插值。

pyramid

使用金字塔进行插值。

prism

使用棱柱进行插值。

30.151.1 命令

此过滤器支持选项interp作为命令.

30.152 lumakey

将某些亮度值转换为透明度。

此过滤器接受以下选项:

threshold

设置将用作透明度基准的亮度值。 默认值为0.

tolerance

设置要键控出去的亮度值范围。 默认值为0.01.

softness

设置柔化范围。默认值为0。 使用此选项可控制从零到完全透明的渐变过渡。

30.152.1 命令

此过滤器支持相同命令作为选项。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

30.153 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

输入的宽度和高度。

val

像素分量的输入值。

clipval

输入值,剪辑到minval-maxval范围内。

maxval

像素分量的最大值。

minval

像素分量的最小值。

negval

像素分量值的否定值,被剪辑到minval-maxval范围;它对应于表达式 "maxval-clipval+minval"。

clip(val)

计算值val,剪辑到minval-maxval范围内。

gammaval(gamma)

像素分量值的计算 gamma 校正值, 剪辑到minval-maxval范围内。它对应于 表达式 "pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval"

所有表达式的默认值都为 "clipval"。

30.153.1 命令

此过滤器支持相同命令作为选项。

30.153.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 校正亮度 gamma:
    lutyuv=y=gammaval(0.5)
    
  • 丢弃亮度的最低有效位:
    lutyuv=y='bitand(val, 128+64+32)'
    
  • 类 Technicolor 效果:
    lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
    

30.154 lut2, tlut2

过滤器lut2接收两个输入流并输出一个 流。

过滤器tlut2(时间 lut2) 从一个输入流中接收两个连续帧。

此过滤器接受以下参数:

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 alpha 分量

d

设置输出位深,仅对过滤器lut2可用。默认值为 0, 表示位深自动从第一个输入格式中提取。

过滤器lut2还支持framesync选项。

每个选项指定了计算对应像素分量值的查找表的表达式。

与每个c*选项相关的具体分量取决于输入中的格式。

表达式可以包含以下常量:

w
h

输入的宽度和高度。

x

第一个输入视频的像素分量值。

y

第二个输入视频的像素分量值。

bdx

第一个输入视频位深。

bdy

第二个输入视频位深。

所有表达式的默认值都为 "x"。

30.154.1 命令

此过滤器支持以上所有选项作为命令但不包括选项d.

30.154.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)))'
    

30.155 maskedclamp

使用第二和第三输入流对第一个输入流进行限制。

将第一个流的值限制在第二个输入流 -undershoot和第三个输入流 +overshoot.

此过滤器接受以下选项:

undershoot

默认值为0.

overshoot

默认值为0.

planes

设置要作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

30.155.1 命令

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

30.156 maskedmax

将第二个和第三个输入流的绝对差值合并到输出流中, 通过比较第二个输入流与第一个输入流之间的绝对差值 和第三个输入流与第一个输入流之间的绝对差值来选择值。 如果第二个绝对差值大于第一个绝对差值,选取第二个输入流的值, 否则选取第三个输入流的值。

此过滤器接受以下选项:

planes

设置要作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

30.156.1 命令

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

30.157 maskedmerge

使用第三输入流中的每像素权重将第一个输入流与第二输入流合并。

第三流像素组件中的值为 0 意味着从第一个流返回未更改的像素组件, 而最大值(例如,对于 8 位视频为 255)意味着从第二流返回未更改的像素组件。 中间值定义了两个输入流像素组件之间的合并程度。

此过滤器接受以下选项:

planes

设置要作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

30.157.1 命令

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

30.158 maskedmin

将第二个和第三个输入流的绝对差值合并到输出流中, 通过比较第二个输入流与第一个输入流之间的绝对差值 和第三个输入流与第一个输入流之间的绝对差值来选择值。 如果第二个绝对差值小于第一个绝对差值,选取第二个输入流的值, 否则选取第三个输入流的值。

此过滤器接受以下选项:

planes

设置要作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

30.158.1 命令

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

30.159 maskedthreshold

通过比较两个视频流的绝对差值与固定阈值来选择像素。

如果两个视频流的像素组件之间的绝对差值等于或小于用户提供的阈值, 则选择第一个视频流的像素组件,否则选择第二个视频流的像素组件。

此过滤器接受以下选项:

threshold

设置从两个输入视频流的绝对差值中选择像素时使用的阈值。

planes

设置要作为位图处理的平面,未处理的平面将从第二个流中复制。 默认值为 0xf,所有平面都将被处理。

mode

设置过滤器操作模式。可以是absdiff。 默认值为abs.

30.159.1 命令

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

30.160 maskfun

从输入视频创建掩码。

例如,它在tblend过滤器之后创建运动掩码非常有用。

此过滤器接受以下选项:

low

设置低阈值。任何像素组件低于或等于此值都会被设为 0。

high

设置高阈值。任何像素组件高于此值会被设为当前像素格式允许的最大值。

planes

设置要过滤的平面,默认情况下会过滤所有可用平面。

fill

用此值填充所有帧像素。

sum

设置帧的最大平均像素值。如果所有像素组件的总和高于这个平均值, 输出帧会完全用fill选项设置的值填充。 通常在与tblend过滤器组合使用时,对于场景切换非常有用。

30.160.1 命令

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

30.161 mcdeint

应用运动补偿去隔行处理。

它需要每帧一个字段作为输入,因此必须与 yadif=1/3 或等效过滤器一起使用。

此过滤器接受以下选项:

mode

设置去隔行扫描模式。

接受以下值之一:

fast
medium
slow

使用迭代运动估计

extra_slow

像“slow”,但使用多个参考帧。

默认值是“fast’.

parity

设置输入视频的假设图像场序。必须是以下值之一:

0, tff

假设上场优先

1, bff

假设下场优先

默认值是“bff’.

qp

设置内部编码器使用的每块量化参数(QP)。

较高的值应该会产生更平滑的运动矢量场,但个别矢量可能不太理想。默认值为1。

30.162 中值

从定义的半径矩形中选择中值像素。

此滤镜接受以下选项:

radius

设置水平半径大小。默认值是1。 允许的范围是从1到127的整数。

planes

设置处理的平面。默认值是15,即所有可用的平面。

radiusV

设置垂直半径大小。默认值是0。 允许的范围是从0到127的整数。 如果为0,将从水平radius选项中拾取值。

percentile

设置中值百分位数。默认值是0.5。 默认值为0.5将始终选择中值,而0将选择最小值,以及1最大值。

30.162.1 命令

此滤镜支持与选项相同的命令。 命令接受与相应选项相同的语法。

如果指定的表达式无效,则保留当前值。

30.163 mergeplanes

从多个视频流合并颜色通道组件。

该滤镜最多接受4个输入流,并将选定的输入平面合并到输出视频中。

此滤镜接受以下选项:

mapping

设置输入到输出平面的映射。默认值是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.

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

30.164 mestimate

使用块匹配算法估算并输出运动矢量。 运动矢量存储于帧侧数据中以供其他滤镜使用。

此滤镜接受以下选项:

method

指定运动估计方法。接受以下值之一:

esa

穷尽搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强的预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认值是“esa’.

mb_size

宏块大小。默认值为16.

search_param

搜索参数。默认值为7.

30.165 midequalizer

使用两个视频流应用中间图像均衡效果。

中间图像均衡调整一对图像以具有相同直方图,同时尽可能保持它们的动态范围。这在例如匹配一对立体摄像头的曝光方面非常有用。

此滤镜有两个输入和一个输出,必须具有相同的像素格式,但可以具有不同的大小。滤镜的输出是通过两输入的中间直方图调整的第一个输入。

此滤镜接受以下选项:

planes

设置处理的平面。默认值是15,即所有可用的平面。

30.166 minterpolate

使用运动插值将视频转换为指定帧率。

此滤镜接受以下选项:

fps

指定输出帧率。可以是有理数,例如60000/1001。如果帧速率低于源帧率,则丢弃帧。默认值为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..

30.167 mix

将多个视频输入流混合到一个视频流中。

接受选项的描述如下。

inputs

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

weights

指定每个输入视频流的权重作为序列。 每个权重以空格分隔。如果权重数量少于最后指定的权重将用于所有剩余未设置的权重。

scale

指定缩放比例,如果设置,它将乘以每个权重的总和与像素值的乘积以得出最终目标像素值。默认情况下缩放比例自动缩放到权重的总和。

planes

设置过滤的平面。默认值是全部。允许的范围是从0到15。

duration

指定如何确定流结束。

longest

最长输入的时长。(默认)

shortest

最短输入的时长。

first

第一个输入的时长。

30.167.1 命令

此滤镜支持以下命令:

weights
scale
planes

语法与同名选项相同。

30.168 monochrome

使用定制颜色滤镜将视频转换为灰度。

接受选项的描述如下。

cb

设置色度蓝点。允许范围是从-1到1。 默认值为0。

cr

设置色度红点。允许范围是从-1到1。 默认值为0。

size

设置颜色滤镜大小。允许范围是从0.1到10。 默认值为1。

high

设置高光强度。允许范围是从0到1。 默认值为0。

30.168.1 命令

此滤镜支持上述所有选项作为命令.

30.169 morpho

此滤镜允许应用主要形态学灰度变换,通过第二个输入流设定任意结构进行腐蚀和膨胀。

腐蚀膨胀滤镜中较为简单的实现和更慢的性能相比,当速度是关键时morpho滤镜 应被使用。

接受选项的描述如下,

mode

设置要应用的形态变换,可以是:

erode
dilate
open
close
gradient
tophat
blackhat

默认值是erode.

planes

设置过滤的平面,默认情况下过滤所有平面(除了alpha平面)。

structure

设置第二输入流中将处理的结构视频帧,可以选择首帧所有帧。默认值是所有帧.

morpho滤镜还支持帧同步选项。

30.169.1 命令

此滤镜支持与选项相同的命令

30.170 mpdecimate

丢弃与前一帧没有很大差异的帧,以降低帧率。

此滤镜的主要用途是用于极低比特率编码 (例如,通过拨号调制解调器进行流媒体),但理论上也可以用于修复逆向-隔行电影时出现的问题。

接受选项的描述如下。

max

设置可以丢弃的连续帧的最大数量(如果为正值),或丢弃帧之间的最小间隔(如果为负值)。如果值为0,则无论之前连续丢弃的帧数如何,都会丢弃当前帧。

默认值为0。

keep

设置在开始丢弃帧之前可以忽略的连续相似帧的最大数量。 如果值为0,则无论之前连续相似帧的数量如何,都会丢弃当前帧。

默认值为0。

hi
lo
frac

设置丢弃的阈值。

值为hilo对应于8x8像素块,表示实际像素值差异。因此,64的阈值对应于每个像素1单位的差异,或者不同地分布在块上。

如果没有任何8x8块的差异超过hi指定的阈值,并且不足frac块的差异(1表示整个图像)超过lo.

指定的阈值,则当前帧为候选丢弃帧。hi默认值为64*12,lo的默认值为64*5,以及frac的默认值为0.33。

30.171 msad

获取两个视频输入之间的MSAD(绝对差值平均和)。

此滤镜需要两个视频输入。

使用此滤镜,两个输入视频必须具有相同的分辨率和像素格式。另外,它假定两个输入具有相同数量的帧,将逐帧比较它们。

通过日志系统打印每个分量、平均值、最小值和最大值的MSAD。

此滤镜将每帧计算的MSAD存储在帧元数据中。

此滤镜还支持帧同步选项。

在以下示例中,输入文件main.mpg正在处理,并与参考文件ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

进行比较。

将第一视频流的像素值与第二视频流的像素值相乘。

此滤镜接受以下选项:

scale

设置应用于第二视频流的比例。默认是1。 允许范围是从09.

offset

设置应用于第二视频流的偏移量。默认是0.5。 允许范围是从-11.

planes

指定将被处理的输入视频流的平面。 默认情况下处理所有平面。

30.172.1 命令

此滤镜支持与选项相同的命令。

30.173 反色

对输入视频进行反色(颜色反转)。

它接受以下选项:

components

设置要反色的分量。

分量的可用值是:

y
u
v
a
r
g
b
negate_alpha

值为1时反转alpha分量(如果存在)。默认值为0。

30.173.1 命令

此滤镜支持与选项相同的命令。

30.174 非局部均值

使用非局部均值算法对帧进行去噪。

每个像素通过查找具有类似上下文的其他像素进行调整。 这种上下文相似性是通过比较它们周围的补丁来定义,补丁大小为pxp。在rxr的区域内搜索补丁。

请注意,搜索区域定义了补丁的中心,这意味着一些补丁将由该搜索区域之外的像素组成。

该滤镜接受以下选项。

s

设置去噪强度。默认值为1.0。必须在范围[1.0, 30.0]内。

p

设置补丁大小。默认值为7。必须为范围[0, 99]内的奇数。

pc

p相同,但用于色度平面。

默认值为0,表示自动。

r

设置搜索大小。默认值为15。必须为范围[0, 99]内的奇数。

rc

r相同,但用于色度平面。

默认值为0,表示自动。

30.175 神经网络边缘插值

使用神经网络边缘导向插值对视频进行去隔行。

该滤镜接受以下选项:

weights

必选项,没有二进制文件过滤器无法工作。 当前文件可在此处找到: https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

deint

设置要去隔行的帧,默认值为all。 可为allinterlaced.

field

设置操作模式。

可为以下之一:

af

使用帧标志,双场。

a

使用帧标志,单场。

t

仅使用顶场。

b

仅使用底场。

tf

使用双场,顶场优先。

bf

使用双场,底场优先。

planes

设置要处理的平面,默认情况下处理所有框架。

nsize

设置预测神经网络的每个像素周围的本地邻域大小。

可为以下之一:

s8x6
s16x6
s32x6
s48x6
s8x4
s16x4
s32x4
nns

设置预测神经网络中的神经元数量。 可为以下之一:

n16
n32
n64
n128
n256
qual

控制用于计算最终输出值的不同神经网络预测的混合数量。可为fast,默认值或slow.

etype

设置预测中的权重集。 可为以下之一:

a, abs

权重旨在最小化绝对误差

s, mse

权重旨在最小化平方误差

pscrn

控制是否使用预筛选神经网络来决定哪些像素应由预测神经网络处理,哪些可以通过简单的三次插值处理。 预筛选器经过训练以知道三次插值对像素是否足够,或者是否应由预测神经网络来预测。 预筛选神经网络的计算复杂性远低于预测神经网络的复杂性。由于大多数像素可以通过三次插值处理,使用预筛选器通常会显著提高处理速度。 预筛选器非常准确,因此使用和不使用之间的差异几乎总是不可察觉的。

可为以下之一:

none
original
new
new2
new3

默认值为new.

30.175.1 命令

此滤镜支持与选项相同的命令,但不包括权重选项。

30.176 非格式化

强制libavfilter不使用下一滤镜输入的任何指定像素格式。

它接受以下参数:

pix_fmts

一个以'|'分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

30.176.1 示例

  • 强制libavfilter使用不同于yuv420p的格式,作为vflip滤镜输入:
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为不包含在列表中的格式:
    noformat=yuv420p|yuv444p|yuv410p
    

30.177 噪声

在视频输入帧上添加噪声。

滤镜接受以下选项:

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

均匀噪声(否则为高斯)

30.177.1 示例

为输入视频添加时间和均匀噪声:

noise=alls=20:allf=t+u

30.178 规范化

规范化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(全强度)。

30.178.1 命令

此滤器支持与选项相同的命令,但不包括smoothing选项。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值不变。

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

30.179 空滤镜

将视频源保持不变传递到输出。

30.180 光学字符识别

光学字符识别

此滤镜使用Tesseract进行光学字符识别。要启用此滤镜的编译,需要用--enable-libtesseract.

配置FFmpeg。

datapath

设置Tesseract数据的数据路径。默认值为安装时设置的值。

language

设置语言,默认是"eng"。

whitelist

设置字符白名单。

blacklist

设置字符黑名单。

该滤镜将识别的文本导出为帧元数据lavfi.ocr.text。 该滤镜将识别单词的置信度导出为帧元数据lavfi.ocr.confidence.

30.181 开普勒

使用libopencv应用视频变换。

要启用此滤镜,安装libopencv库和头文件并用--enable-libopencv.

配置FFmpeg。

filter_name

要应用的libopencv滤镜的名称。

filter_params

传递给libopencv滤镜的参数。如果未指定,则假定为默认值。

有关更精确的信息,请参阅官方libopencv文档:http://docs.opencv.org/master/modules/imgproc/doc/filtering.html

支持多个libopencv滤镜;请参阅以下子章节。

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

30.181.2 侵蚀

使用特定结构元素侵蚀图像。 对应于libopencv函数cvErode.

它接受以下参数:struct_el:nb_iterations, 具有与膨胀滤镜相同的语法和语义。

30.181.3 平滑

平滑输入视频。

此滤镜采用以下参数:type|param1|param2|param3|param4.

type是要应用的平滑滤镜类型,必须是以下值之一:"blur"、"blur_no_scale"、"median"、"gaussian"或"bilateral"。默认值为"gaussian"。

的含义param1, param2, param3,以及param4取决于平滑类型。param1param2接受正整数值或0。param3param4接受浮点值。

的默认值param1是3。其他参数的默认值为0。

这些参数对应于libopencv函数中分配的参数cvSmooth.

30.182 示波器

二维视频示波器。

用于测量空间冲激、阶跃响应、色差延迟等。

它接受以下参数:

x

设置范围中心的 x 位置。

y

设置范围中心的 y 位置。

s

设置范围大小,相对于框架对角线。

t

设置范围的倾斜/旋转。

o

设置跟踪线的不透明度。

tx

设置跟踪线中心的 x 位置。

ty

设置跟踪线中心的 y 位置。

tw

设置跟踪线的宽度,相对于框架宽度。

th

设置跟踪线的高度,相对于框架高度。

c

设置需要跟踪的组件。默认情况下跟踪前三个组件。

g

绘制跟踪网格。默认启用。

st

绘制一些统计信息。默认启用。

sc

绘制范围。默认启用。

30.182.1 命令

此过滤器支持与选项相同的命令命令接受与对应选项相同的语法。

如果指定的表达式无效,它将保持当前值。

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

30.183 overlay

将一个视频叠加在另一个视频上。

它接受两个输入并有一个输出。第一个输入是 "主" 视频,第二个输入被叠加在其上。

它接受以下参数:

以下是接受选项的说明。

x
y

设置叠加视频在主视频上 x 和 y 坐标的表达式。默认值为 "0"。如果表达式无效,则设置为一个巨大值(表示叠加不会显示在可见区域内)。

eof_action

参见framesync.

eval

设置何时对x, 和y进行评估。

它接受以下值:

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 格式,可以是直的预乘的。默认为直的.

The x, 和y表达式可以包含以下参数。

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选项。

注意n, t变量仅在每帧评估时可用,当eval值为'init’.

时将评估为 NAN。setpts=PTS-STARTPTS filter to have them begin in the same zero timestamp, as the example for the movie filter does.

可以链接多个叠加,但应测试此方法的效率。

30.183.1 命令

此过滤器支持以下命令:

x
y

修改叠加输入的 x 和 y 值。 该命令接受与对应选项相同的语法。

如果指定的表达式无效,它将保持当前值。

30.183.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
    
  • 在输入视频的左下角插入带透明背景的 PNG 徽标,使用ffmpeg工具并带有-filter_complex选项:
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 插入两个不同的带透明背景的 PNG 徽标(第二个徽标置于右下角),使用ffmpeg工具:
    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必须指定叠加过滤器的主输入大小:
    color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
    
  • 播放原始视频和过滤版视频(此处为抖动过滤器),旁边并排使用ffplay工具:
    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]
    "
    
  • 通过对某一区域应用去标志过滤器屏蔽视频的 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]
    

30.184 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

对每个输入帧评估表达式

默认值是frame.

eof_action

参见framesync.

shortest

参见framesync.

repeatlast

参见framesync.

此过滤器也支持framesync选项。

30.185 owdenoise

应用过完全集波小波降噪器。

过滤器接受以下选项:

depth

设置深度。

较大的深度值将对低频成分降噪更多,但会使过滤变慢。

必须为范围在 8-16 之间的整数,默认值为8.

luma_strength, ls

设置亮度强度。

必须为范围在 0-1000 之间的双精度值,默认值为1.0.

chroma_strength, cs

设置色度强度。

必须为范围在 0-1000 之间的双精度值,默认值为1.0.

30.186 pad

为输入图像添加边距,并将原始输入放置在提供的x, y坐标。

它接受以下参数:

width, w
height, h

通过表达式指定包含边距的输出图像的大小。如果宽度高度的值为 0,则使用对应的输入大小作为输出。

The 宽度表达式可以引用高度表达式设置的值,反之亦然。

默认值为宽度高度是 0。

x
y

指定偏移量,用于在相对于输出图像上边框/左边框的位置内放置输入图像。

The x表达式可以引用y表达式设置的值,反之亦然。

The default value of xy的默认值是 0。

如果xy求值为负数,它们将被改为将输入图像居中。

color

指定填充区域的颜色。有关此选项的语法,请参阅ffmpeg-utils 手册中的 "Color" 部分。.

The default value of 颜色的默认值是 "black"。

eval

指定何时评估宽度, 高度, xy表达式。

它接受以下值:

init

仅在过滤器初始化或处理命令时评估表达式一次。

frame

对每个输入帧评估表达式。

默认值为'init’.

aspect

填充到比例而不是分辨率。

The value for the 宽度, 高度, x, 和y选项是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与in_win_h.

out_w
out_h

输出的宽度和高度(填充区域的大小),如宽度高度表达式所指定。

ow
oh

这些与out_wout_h.

x
y

按照xy表达式指定的偏移量,或如果尚未指定为 NAN。

a

iw / ih

sar

输入样本长宽比

dar

输入显示长宽比,其等同于(iw / ih) * sar

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p"hsub是 2,vsub是 1。

30.186.1 示例

  • 为输入视频添加颜色为 "violet" 的填充。输出视频大小为 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"
    

30.187 palettegen

为整个视频流生成一个调色板。

它接受以下选项:

max_colors

设置调色板中要量化的最大颜色数。 注意:调色板将仍然包含 256 种颜色;未使用的调色板条目将是黑色。

reserve_transparent

创建最多 255 种颜色的调色板,并为透明保留最后一种颜色。保留透明颜色对于 GIF 优化很有用。 如果未设置,调色板中的最大颜色数将为 256。对于独立的图像,您可能希望禁用此选项。 默认开启。

transparency_color

设置用作透明背景的颜色。

stats_mode

设置统计模式。

它接受以下值:

full

计算完整帧的直方图。

diff

仅为与前帧不同的部分计算直方图。 这可能对于给予输入动态部分更大的重要性时是相关的,如果背景是静态的。

single

为每一帧计算新直方图。

默认值是完整.

过滤器还导出帧元数据lavfi.color_quant_ratio (nb_color_in / nb_color_out),您可以使用它评估调色板的颜色量化程度。该信息还可在info日志级别中看到。

30.187.1 示例

  • 使用生成一个给定视频的代表性调色板。ffmpeg:
    ffmpeg -i input.mkv -vf palettegen palette.png
    

30.188 paletteuse

使用调色板对输入视频流进行降采样。

该过滤器接受两个输入:一个视频流和一个调色板。调色板必须是一个 256 像素的图像。

它接受以下选项:

dither

选择抖动模式。可用的算法有:

bayer

有序的 8x8 bayer 抖动(确定性)

heckbert

由 Paul Heckbert 在 1982 年定义的抖动(简单的误差扩散)。 注意:此抖动有时被认为是 "错误的",作为参考包含在内。

floyd_steinberg

Floyd和Steingberg抖动(误差扩散)

sierra2

Frankie Sierra抖动v2(误差扩散)

sierra2_4a

Frankie Sierra抖动v2“Lite”(误差扩散)

sierra3

Frankie Sierra抖动v3(误差扩散)

burkes

Burkes抖动(误差扩散)

atkinson

由Apple Computer的Bill Atkinson开发的Atkinson抖动(误差扩散)

none

禁用抖动。

默认值是sierra2_4a.

bayer_scale

bayer抖动被选中时,此选项定义了图案的比例(交叉影线图案的可见程度)。低值表示图案更明显但条带效应较少,高值表示图案较不明显但条带效应增加。

该选项的值必须是范围[0,5]内的整数。默认值是2.

diff_mode

如果设置,定义需要处理的区域

rectangle

只有变化的矩形将被重新处理。这类似于GIF裁剪/偏移压缩机制。如果只有图像的一部分发生变化,此选项可以加快速度,并适用于限制误差扩散范围的用例dither到限制移动场景的矩形框(如果场景变化不大,会导致更确定的输出,减少移动噪声并提高GIF压缩效率)。

默认值是none.

new

为每个输出帧采用新的调色板。

alpha_threshold

设置透明度的Alpha阈值。Alpha值高于该阈值将被视为完全不透明,低于该阈值的值将被视为完全透明。

该选项的值必须是范围[0,255]内的整数。默认值是128.

30.188.1 示例

  • 使用调色板(例如通过palettegen生成的)对GIF进行编码ffmpeg:
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

30.189 透视

校正非垂直于屏幕拍摄的视频的透视。

以下是接受参数的说明。

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

30.190 相位

将隔行视频延迟一个场时间,从而更改场顺序。

主要用途是修复由于电影到视频转换的相反场顺序捕获的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' 中选择。

30.190.1 命令

此滤镜支持上述所有选项作为命令.

30.191 光敏性

减少视频中各种闪光,从而帮助癫痫患者。

它接受以下选项:

frames, f

设置用于过滤的帧数。默认值为30。

threshold, t

设置检测阈值因子。默认值为1。 值越低越严格。

skip

设置采样帧时跳过的像素数量。默认值为1。 允许范围是1到1024。

bypass

保持帧不变。默认禁用。

30.192 pixdesctest

像素格式描述符测试滤镜,主要用于内部测试。 输出视频应与输入视频相同。

例如:

format=monow, pixdesctest

可用于测试monowhite像素格式描述符定义。

30.193 像素化

对视频流应用像素化。

该滤镜接受以下选项:

width, w
height, h

设置将用于像素化的块尺寸。 默认值为16.

mode, m

设置使用的像素化模式。

可能的值是:

avg
min
max

默认值是avg.

planes, p

设置需要过滤的平面。默认设置为过滤所有平面。

30.193.1 命令

该滤镜支持所有选项作为命令.

30.194 像素范围

显示颜色通道中的样本值。主要用于检查颜色和级别。 支持的最低分辨率为640x480。

滤镜接受以下选项:

x

设置范围的X位置,相对于X轴的偏移量。

y

设置范围的Y位置,相对于Y轴的偏移量。

w

设置范围的宽度。

h

设置范围的高度。

o

设置窗口不透明度。此窗口还包含像素区域的统计信息。

wx

设置窗口的X位置,相对于X轴的偏移量。

wy

设置窗口的Y位置,相对于Y轴的偏移量。

30.194.1 命令

此滤镜支持与选项相同的命令。 as options.

30.195 后处理

使用libpostproc启用指定的后处理子滤镜链。 该库应通过GPL构建自动选择(--enable-gpl)。 子滤镜必须由'/'分隔,并可以通过在前面加'-'来禁用。 每个子滤镜和一些选项有简短和详细的名称,可以互换使用,例如dr/dering是相同的。

滤镜接受以下选项:

subfilters

设置后处理子滤镜字符串。

所有子滤镜共享一些用于确定其范围的通用选项:

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]]], temporal noise reducer
threshold1

值越大 -> 滤波越强

threshold2

值越大 -> 滤波越强

threshold3

值越大 -> 滤波越强

al/autolevels[:f/fullyrange], automatic brightness / contrast correction
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

默认后处理滤镜组合(hb|a,vb|a,dr|a)

fa/fast

快速后处理滤镜组合(h1|a,v1|a,dr|a)

ac

高质量后处理滤镜组合(ha|a|128|7,va|a,dr|a)

30.195.1 示例

  • 应用水平和垂直去块、去振铃和自动亮度/对比度:
    pp=hb/vb/dr/al
    
  • 应用默认滤镜,不进行亮度/对比度校正:
    pp=de/-al
    
  • 应用默认滤镜和时间去噪器:
    pp=default/tmpnoise|1|2|3
    
  • 仅对亮度进行去块,将垂直去块的开启或关闭自动调整, 具体取决于可用的CPU时间:
    pp=hb|y/vb|a
    

30.196 pp7

应用后处理滤镜7。它是一个spp滤镜的变体, 类似于spp=6,使用7点DCT,其中仅使用IDCT后的中心样本。

该滤镜接受以下选项:

qp

强制使用一个常量量化参数。 接受的范围为0到63的整数。 如果未设置,滤镜将使用视频流中的QP(如果有)。

mode

设置阈值模式。可用的模式包括:

hard

设置硬阈值。

soft

设置软阈值(更好的去振铃效果,但可能更模糊)。

medium

设置中等阈值(效果良好,默认值)。

30.197 预乘

对输入视频流应用Alpha预乘效果, 使用第二个流的第一平面作为Alpha。

两个流必须具有相同的尺寸和像素格式。

滤镜接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认值为0xf,表示处理所有平面。

inplace

不需要第二个输入进行处理,改为使用输入流中的Alpha平面。

30.198 prewitt

对输入视频流应用Prewitt算子。

滤镜接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认值为0xf,表示处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置要添加到过滤结果中的值。

30.198.1 命令

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

30.199 假彩色

使用假彩色更改视频中的帧颜色。

此过滤器接受以下选项:

c0

设置像素第一分量表达式

c1

设置像素第二分量表达式

c2

设置像素第三分量表达式

c3

设置像素第四分量表达式,对应Alpha分量

index, i

设置用于修改颜色的基本分量

preset, p

选择内置的LUT之一。默认设置为无。

可用的LUT:

magma
inferno
plasma
viridis
turbo
cividis
range1
range2
shadows
highlights
solar
nominal
preferred
total
spectral
cool
heat
fiery
blues
green
helix
opacity

设置输出颜色的不透明度。允许范围是0到1。 默认值设置为1。

每个表达式选项指定用于计算相应像素分量值查找表的表达式。

表达式可以包含以下常量和函数:

w
h

输入宽度和高度。

val

像素分量的输入值。

ymin, umin, vmin, amin

允许的最小分量值。

ymax, umax, vmax, amax

允许的最大分量值。

所有表达式默认设置为"val"。

30.199.1 命令

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

30.199.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'"
    

30.200 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,过滤器将返回错误。

此过滤器也支持frame同步选项。

如果选中了stats_file,则文件包含一个序列的键值对形式:,用于每个比较的帧对。

当指定了stats_version大于1,一个头部行将出现在每帧对统计列表的前面,而帧格式中带以下参数的键值对:

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

每个通道的最大允许值,并平均所有通道。

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

30.201 pullup

下拉反转(反向电影化)过滤器,能够处理混合硬电影化、24000/1001 fps逐行扫描和30000/1001 fps逐行扫描内容。

pullup过滤器设计利用未来的上下文进行决策。此过滤器是无状态的,因为它不会锁定要遵循的模式,而是查找以下字段以识别匹配并重建逐行扫描帧。

为了生成具有均匀帧率的内容,请在pullup之后插入fps过滤器,使用fps=24000/1001如果输入帧率是29.97fps,fps=24对于30fps和(罕见的)电影化后的25fps输入。

过滤器接受以下选项:

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

30.202 qp

更改视频量化参数(QP)。

过滤器接受以下选项:

qp

设置量化参数的表达式。

通过eval API评估表达式,并可以包含以下常量等内容:

已知

如果索引不为129,则为1,否则为0。

qp

从-129到128的连续指数。

30.202.1 示例

  • 一些公式例如:
    qp=2+2*sin(PI*qp)
    

30.203 qrencode

使用libqrencode库生成二维码(参见https://fukuchi.org/works/qrencode/),并将其叠加到当前帧的顶部。

要启用此过滤器的编译,您需要使用以下配置FFmpeg:--enable-libqrencode.

二维码是从提供的文本或文本模板生成的。 根据指定选项,该对应的二维码经过缩放并叠加到视频输出中。

如果未指定文本,则不会叠加二维码。

此过滤器接受以下选项:

qrcode_width, q
padded_qrcode_width, Q

指定渲染二维码宽度的表达式,有或无填充。qrcode_width表达式可以引用由padded_qrcode_width表达式设置的值,反之亦然。 默认情况下,padded_qrcode_width设置为qrcode_width,这意味着没有填充。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参见qrencode表达式部分。

x
y

指定填充二维码左上角位置的表达式。x表达式可以引用由y表达式设置的值,反之亦然。

默认情况下,xy都设置为0,这意味着二维码放置在输入的左上角。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参见qrencode表达式部分。

case_sensitive, cs

指示libqrencode使用区分大小写的编码。 默认启用此功能。可以禁用以减少二维码编码大小。

level, l

指定二维码编码错误纠正水平。 使用更高的纠正水平,编码大小会增加,但代码对破损的抵抗力会更强。 最低水平为L.

接受以下值:

L
M
Q
H
expansion

选择输入文本的扩展方式。 可以是nonenormal(默认)。有关详细信息,请参见qrencode文本扩展部分。

text
textfile

定义要呈现的文本。 如果既未定义文本也未定义扩展,则不编码二维码(仅显示一个空白彩色框)。

如果启用了扩展,则文本被视为文本模板,使用qrencode扩展机制。 有关详细信息,请参见qrencode文本扩展部分。

background_color, bc
foreground_color, fc

设置二维码和背景色。foreground_color的默认值是"黑色",background_color的默认值是"白色"。

有关颜色选项的语法,请检查"颜色"部分在ffmpeg-utils手册中。.

30.203.1 qrencode表达式

选项设置的表达式包含以下常量和函数。

dar

输入显示纵横比,与以下值相同(w / h) * sar

duration

当前帧的持续时间(秒)

hsub
vsub

水平和垂直染色子采样值。 例如对于像素格式"yuv422p"hsub为2,vsub为1。

main_h, H

输入高度

main_w, W

输入宽度

n

输入帧的数量,从0开始

pict_type

一个代表图像类型的数字

qr_w, w

编码二维码的宽度

rendered_qr_w, q
rendered_padded_qr_w, Q

渲染二维码的宽度,有或没有填充。

这些参数允许qQ表达式相互引用,例如您可以指定q=3/4*Q.

rand(min, max)

返回介于minmax之间的随机数字

sar

输入样本纵横比

t

以秒为单位的时间戳,若输入时间戳未知则为NAN

x
y

绘制文本的x和y偏移坐标。

这些参数允许xy表达式相互引用,例如您可以指定y=x/dar.

30.203.2 qrencode文本扩展

如果expansion被设置为none,则文本按原样打印。

如果expansion被设置为normal(默认值),以下扩展机制被使用。

反斜杠字符‘\’,后跟任何字符,总是扩展为第二个字符。

以下形式的序列%{...}被扩展。括号中的文字是函数名,可能后接用“:”分隔的参数。 如果参数中包含特殊字符或分隔符(“:”或“}”),则需要进行转义。

注意它们可能还需要作为过滤器参数字符串中的值以及过滤图描述中的过滤器参数进行转义,可能还需要为shell转义,这最多可能需要四级转义;使用带有text选项的文本文件可以避免这些问题。textfile以下是可用的函数:

返回帧号

n, frame_num

返回当前帧的展示时间戳。

pts

可接受最多两个参数。

It can take up to two arguments.

第一个参数是时间戳的格式;默认值为flt表示秒数作为具有微秒精度的十进制数字;hms表示格式化的[-]HH:MM:SS.mmm具有毫秒精度格式的时间戳。gmtime表示将帧时间戳格式化为UTC时间;localtime表示将帧时间戳格式化为本地时区时间。如果格式设置为hms24hh,时间以24小时制格式(00-23)格式化。

第二个参数是添加到时间戳的偏移量。

如果格式设置为localtimegmtime,可以提供第三个参数:一个strftimeC函数格式字符串。默认值为YYYY-MM-DD HH:MM:SS格式。

expr, e

计算表达式的值并以双精度输出。

它必须接受一个参数指定要计算的表达式,支持常量和定义的函数集qrencode_expressions.

expr_formatted, ef

计算表达式的值并以格式化字符串输出。

第一个参数是要计算的表达式,与expr函数相同。 第二个参数指定输出格式。允许的值是‘x’, ‘X’, ‘d’和‘u’。它们的处理方式与printf函数完全相同。 第三个参数是可选的,设置输出的字符数位置。 可以用于左侧填充零。

gmtime

运行过滤器时的时间,用UTC表示。 它可以接受一个参数:一个strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,用于打印具有可选指定位数的秒分数。

localtime

运行过滤器时的时间,用本地时区表示。 它可以接受一个参数:一个strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,用于打印具有可选指定位数的秒分数。

metadata

帧元数据。接受一个或两个参数。

第一个参数为必选参数,用于指定元数据键。

第二个参数是可选参数,用于指定默认值,当元数据键未找到或为空时使用。

可用的元数据可以通过检查以TAG开头的条目来识别,这些条目包含在每个帧部分中,通过运行ffprobe -show_frames.

过滤器生成的字符串元数据也可用于qrencode过滤器。

rand(min, max)

返回一个介于minmax

之间的随机数。

  • 生成一个编码指定文本的QR码,使用默认大小,叠加在输入视频的左上角,使用默认大小:
    qrencode=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉红色:
    qrencode=text=www.ffmpeg.org:bc=pink@0.5: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}
    

30.204 quirc

使用libquirc库识别和解码QR码(参见https://github.com/dlbeer/quirc/),并将识别的QR码位置和载荷作为元数据打印。

要启用此过滤器的编译,需要将FFmpeg配置为--enable-libquirc.

对于输入视频中找到的每个QR码,将使用前缀添加一些元数据条目lavfi.quirc.N,其中N是从0开始与QR码关联的索引。

以下是每个元数据值的描述:

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码的载荷

30.205 random

将视频帧从内部帧缓存中清除,按随机顺序播放。 没有帧会被丢弃。 灵感来源于frei0r神经过滤器。

frames

设置内部缓存的帧数量大小,范围从2512。默认值是30.

seed

为随机数生成器设置种子,必须为介于0UINT32_MAX之间的整数。如果未指定,或者明确设置为 小于0,过滤器将尽力尝试使用一个好的随机种子。

30.206 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

在进一步处理之前对行进行低通滤波。默认情况下启用。

30.206.1 命令

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

30.206.2 示例

  • 输出一个csv,包括展示时间和识别出的EIA-608字幕数据的前两行。
    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
    

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

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

30.208 remap

使用第二个: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)“颜色”部分的ffmpeg-utils手册。默认颜色为black.

30.209 removegrain

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。

30.210 removelogo

压制电视台标志,使用图像文件决定哪些像素组成标志。通过用邻近像素填充标志像素来工作。

过滤器接受以下选项:

filename, f

设置过滤器位图文件,可以是libavformat支持的任意图像格式。图像文件的宽度和高度必须与正在处理的视频流匹配。

提供的位图图像中的像素值为零不被视为标志的一部分,非零像素视为标志的一部分。如果采用白色(255)表示标志和黑色(0)表示其他部分,则可以安全使用。制作过滤器位图建议对可见标志的黑帧进行屏幕截图,然后使用阈值过滤器,随后使用腐蚀过滤器一次或两次。

如果需要,可以手动修复小斑点。请记住,如果标志像素没有覆盖,过滤质量将会大大下降。标记过多像素为标志的一部分并不是什么大问题,但这会增加覆盖图像所需的模糊量,而且会破坏不必要的信息,额外的像素会减慢处理速度,尤其对于大标志。

30.211 repeatfields

该过滤器使用Video ES标头中的repeat_field标志,并根据其值硬性重复字段。

30.212 reverse

反转视频剪辑。

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

30.212.1 示例

  • 截取剪辑的前5秒并反转。
    trim=end=5,reverse
    

30.213 rgbashift

在水平和/或垂直方向上移动R/G/B/A像素。

过滤器接受以下选项:

rh

设置红色水平偏移的量。

rv

设置红色垂直偏移的量。

gh

设置绿色水平偏移的量。

gv

设置绿色垂直偏移的量。

bh

设置蓝色水平偏移的量。

bv

设置蓝色垂直偏移的量。

ah

设置Alpha(透明度)水平偏移的量。

av

设置Alpha(透明度)垂直偏移的量。

edge

设置边界模式,可以是涂抹,默认,或扭曲.

30.213.1 命令

此滤镜支持以上所有选项作为命令.

30.214 罗伯茨

对输入视频流应用罗伯茨交叉算子。

滤镜接受以下选项:

planes

设置将处理的平面,未处理的平面将被复制。默认值为0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.214.1 命令

此滤镜支持以上所有选项作为命令.

30.215 旋转

按以弧度表示的任意角度旋转视频。

滤镜接受以下选项:

以下是可选参数的说明。

angle, a

设置用于顺时针旋转输入视频弧度数的角度表达式。负值会导致逆时针旋转。默认值为“0”。

此表达式将对每帧进行评估。

out_w, ow

设置输出宽度表达式,默认值为“iw”。此表达式在配置期间只评估一次。

out_h, oh

设置输出高度表达式,默认值为“ih”。此表达式在配置期间只评估一次。

bilinear

如果设置为1,则启用双线性插值,设置为0则禁用。默认值为1。

fillcolor, c

设置用于填充旋转图像未覆盖的输出区域的颜色。有关此选项的一般语法,请查看(ffmpeg-utils)“颜色”部分,位于ffmpeg-utils手册中。如果选择特殊值“none”,则不打印背景(例如背景从未显示出来时非常有用)。

默认值为“黑色”。

角度和输出大小的表达式可以包含以下常量和函数:

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

输出宽度和高度,也就是该区域的大小,通过以下表达式指定宽度高度表达式

rotw(a)
roth(a)

完全包含因a弧度旋转而改变的输入视频所需的最小宽度/高度。

这些只有在计算out_wout_h表达式时可用。

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

30.215.2 命令

滤镜支持以下命令:

a, angle

设置角度表达式。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

30.216 sab

应用形状适应模糊。

滤镜接受以下选项:

luma_radius, lr

设置亮度模糊滤镜的强度,必须是范围为0.1-4.0的值,默认值为1.0。 值越大,图像越模糊,处理速度越慢。

luma_pre_filter_radius, lpfr

设置亮度预滤波器半径,必须是0.1-2.0范围内的值,默认值为1.0。

luma_strength, ls

设置在像素间仍被视为亮度的最大差异,必须是0.1-100.0范围内的值,默认值为1.0。

chroma_radius, cr

设置色度模糊滤镜的强度,必须是范围-0.9-4.0范围内的值。值越大,图像越模糊,处理速度越慢。

chroma_pre_filter_radius, cpfr

设置色度预滤波器半径,必须是-0.9-2.0范围内的值。

chroma_strength, cs

设置在像素间仍被视为色度的最大差异值,必须是-0.9-100.0范围内的值。

如果未明确指定每个色度选项值,则将其设置为对应的亮度选项值。

30.217 缩放

使用libswscale库缩放(调整大小)输入视频。

缩放滤镜迫使输出显示的纵横比与输入相同,方法是更改输出样本的纵横比。

如果输入图像格式与下一个滤镜请求的格式不同,则缩放滤镜将转换输入为请求的格式。

30.217.1 选项

滤镜接受以下选项以及libswscale缩放器支持的任何选项,以及任何帧同步选项。

请参阅(ffmpeg-scaler)ffmpeg-scaler手册以获取缩放器选项的完整列表。

width, w
height, h

设置输出视频的尺寸表达式。默认值为输入尺寸。

如果宽度w值为0,则输入宽度用于输出。如果高度h值为0,则输入高度用于输出。

如果只有一个值是-n,且n>=1,则缩放滤镜使用一个值以保持输入图像的纵横比,此值从其他指定尺寸计算得出。之后确保该计算的尺寸可被n整除,必要时调整该值。

如果两个值均为-n,且n>=1,则行为与上面详细说明两值均设置为0的相同。

以下是用于尺寸表达式中接受的常量列表。

eval

指定评估的时机宽度高度表达式。它接受以下值:

init

仅在过滤器初始化或处理命令时评估一次表达式。

frame

对每个接收的帧评估表达式。

默认值为‘init’.

interl

设置隔行扫描模式。它接受以下值:

1

强制隔行扫描感知缩放。

0

不应用隔行扫描缩放。

-1

根据源帧是否标记为隔行扫描来选择隔行扫描感知缩放。

默认值为‘0’.

flags

设置libswscale缩放标志。请参阅(ffmpeg-scaler)ffmpeg-scaler手册以获取全部值的完整列表。如果未明确指定,滤镜会应用默认标志。

param0, param1

为需要输入参数的缩放算法设置libswscale参数。请参阅(ffmpeg-scaler)ffmpeg-scaler手册以获取完整文档。如果未明确指定,滤镜会应用空参数。

size, s

设置视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)“视频尺寸”部分,位于ffmpeg-utils手册中。.

in_color_matrix
out_color_matrix

设置输入/输出YCbCr色彩空间类型。

这允许覆盖自动检测的值,并允许强制使用一个特定的值用于输出和编码器。

如果未指定,色彩空间类型取决于像素格式。

可能的值:

auto

自动选择。

bt709

符合国际电信联盟(ITU)建议BT.709的格式。

fcc

设置符合美国联邦通讯委员会(FCC)法规标题47(2003)第73.682条第(a)款的色彩空间。

bt601
bt470
smpte170m

设置符合以下内容的色彩空间:

  • 国际电信联盟无线电通信部门(ITU-R)建议BT.601
  • ITU-R 推荐的BT.470-6(1998)系统B、B1和G
  • 电影与电视工程协会(SMPTE)标准170:2004
smpte240m

设置符合SMPTE标准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
left
center
topleft
top
bottomleft
bottom
force_original_aspect_ratio

根据实际需要启用或禁用输出视频宽度或高度,以保持原始纵横比。可能的值:

disable

按指定比例缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动缩小。

increase

如果需要,输出视频尺寸将自动增大。

这一选项的一种有用实例是,当您知道某特定设备的最大允许分辨率时,您可以利用此选项限制输出视频的分辨率,同时保持纵横比。例如,设备A允许1280x720播放,而您的视频是1920x800。使用此选项(将它设置为缩小)并向命令行指定1280x720会使输出为1280x533。

请注意,这与为wh指定-1不同,您仍需指定输出分辨率以使此选项生效。

force_divisible_by

确保在与force_original_aspect_ratio一起使用时,输出的宽度和高度都可被给定的整数整除。其工作方式类似于在-n中使用wh选项。

此选项遵守设置的force_original_aspect_ratio值,相应地增大或减小分辨率。视频的纵横比可能会稍微改变。

如果您需要视频拟合或超过使用force_original_aspect_ratio的定义分辨率,同时又有编码器关于宽度或高度可整除性的限制,这个选项会很有用。

以下是wh选项的值表达式包含的常量:

in_w
in_h

输入宽度和高度

iw
ih

它们与in_win_h.

相同。
out_h

输出(缩放后的)宽度和高度

ow
oh

它们与out_wout_h

相同。

a / iw

ih

输入样本纵横比

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。 已弃用,请勿使用。

参考宽度,rw
参考高度,rh
参考区域
参考显示宽高比,rdar
参考数量
参考时间
参考位置

与上方相同,但用于第二个参考输入。如果存在这些变量之一,则此滤镜接受两个输入。

30.217.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='trunc(ih*dar):ih',setsar=1/1
    
  • 通过组合缩放和设置像素宽高比,同时确保最终分辨率为偶数(某些编解码器要求),使像素呈正方形:
    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]
    

30.217.3 命令

此滤镜支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

30.218 scale_cuda

使用加速的CUDA内核对输入视频进行缩放(调整大小)和转换(像素格式)。设置输出宽度和高度的作用方式与scale滤镜相同。

滤镜接受以下选项:

w
h

设置输出视频尺寸表达式。默认值是输入尺寸。

允许使用与scale滤镜相同的表达式。

interp_algo

设置用于缩放的算法:

最近邻

最近邻法

如果输入参数与所需输出匹配,则默认使用。

双线性法

双线性

双三次插值法

双三次插值

这是默认值。

Lanczos法

兰索斯

format

控制输出像素格式。如果未指定或默认值,则使用输入像素格式。

滤镜不支持YUV与RGB像素格式之间的转换。

passthrough

如果设置为0,每帧都会被处理,即使不需要转换。这种模式可以用作缓冲区,以供下游过滤器消费者使用,它会耗尽有限的解码器帧池。

如果设置为1,如果帧符合所需输出参数,则会按原样传递。这是默认行为。

param

算法特定参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

与相同的scale滤镜选项作用一致。

30.218.1 示例

  • 将输入缩放到720p,保持宽高比并确保输出为yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻法将视频升级到4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理一个滤镜和编码链可能用尽解码器帧池的情况可能有用。
    scale_cuda=passthrough=0
    

30.219 scale_npp

使用NVIDIA性能原语(libnpp)对CUDA视频帧进行缩放和/或像素格式转换。设置输出宽度和高度的作用方式与scale滤镜相同。

接受以下附加选项:

format

输出CUDA帧的像素格式。如果设置为字符串"same"(默认值),则保持输入格式。注意,硬件帧的自动格式协商和转换尚未支持。

interp_algo

用于调整大小的插值算法。可选值如下:

nn

最近邻法。

linear
cubic
cubic2p_bspline

两参数双三次插值(B=1, C=0)

cubic2p_catmullrom

两参数双三次插值(B=0, C=1/2)

cubic2p_b05c03

两参数双三次插值(B=1/2, C=3/10)

super

超采样

lanczos
force_original_aspect_ratio

如果需要则启用减少或增加输出视频宽度或高度以保持原始宽高比。可能值:

disable

按指定方法缩放视频并禁用此功能。

decrease

如果需要,输出视频宽度或高度会自动减少。

increase

如果需要,输出视频宽度或高度会自动增加。

这个选项的一个有益实例是,当您知道某个设备允许的最大分辨率时,可以使用此功能限制输出视频,同时保留宽高比。例如,设备A允许1280x720播放,而您的视频是1920x800。使用此选项(设置为减少)并在命令行中指定1280x720,会使输出变为1280x533。

请注意,这与指定-1并不同,仍需为此选项指定输出分辨率才能起作用。w or h, you still need to specify the output resolution for this option to work.

force_divisible_by

确保输出宽度和高度均可被指定整数整除,在与force_original_aspect_ratio一起使用时。-n类似于使用wh选项。

此选项遵循设置的force_original_aspect_ratio值,可能增加或减少分辨率。视频的宽高比可能会稍有修改。

此选项在您需要视频符合或超出定义的分辨率时很有用,用force_original_aspect_ratio但同时需满足编码器对宽度或高度可整除的限制。

eval

指定何时评估宽度高度表达式。接受以下值:

init

仅在滤镜初始化或处理命令时评估表达式。

frame

每输入一帧都评估表达式。

用于wh选项的值是包含以下常量的表达式:

输入宽度
输入高度

输入宽度和高度

输入宽度
输入高度

输入宽度输入高度.

输出宽度
输出高度

输出(缩放后)的宽度和高度

输出宽度
输出高度

输出宽度输出高度

宽高比

输入宽度 / 输入高度

样本宽高比

输入样本宽高比

显示宽高比

输入显示宽高比。通过(iw / ih) * sar.

序列号

输入帧的(连续)编号,从0开始。仅与eval=frame.

时间戳

输入帧的显示时间戳,以秒为单位。仅与eval=frame.

位置

帧在输入流中的_BYTE偏移位置,如果此信息不可用和/或无意义(例如在合成视频的情况下),则为NaN。仅与eval=frame过时,不建议使用。

30.220 scale2ref_npp

使用NVIDIA性能原语(libnpp)基于参考视频对输入视频进行缩放(调整大小)。

参见scale_npp滤镜以获取可用选项,scale2ref_npp支持相同选项,但基于参考视频而非主输入视频。scale2ref_npp还支持wh选项的以下附加常量:

主宽度
主高度

主输入视频的宽度和高度

主宽高比

主宽度 / 主高度

样本宽高比

主输入视频的样本宽高比

显示宽高比

主输入视频的显示宽高比。通过(main_w / main_h) * main_sar.

主序列号

主输入帧的(连续)编号,从0开始。仅与eval=frame.

主时间戳

主输入帧的显示时间戳,以秒为单位。仅与eval=frame.

主位置

_BYTE偏移位置,主输入流的帧位置。如果此信息不可用和/或无意义(例如在合成视频情况下),则为NaN。仅与eval=frame.

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

30.221 scale_vt

使用VTPixelTransferSession进行缩放并转换颜色参数。

过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值是输入尺寸。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出颜色基色。

color_transfer

设置输出传输特性。

30.222 scharr

对输入视频流应用scharr运算符。

过滤器接受以下选项:

planes

设置哪些平面将被处理,未处理的平面将被复制。默认值为0xf,所有平面都将被处理。

scale

设置乘以已过滤结果的值。

delta

设置添加到已过滤结果的值。

30.222.1 命令

此滤镜支持以上所有选项作为命令.

30.223 scroll

通过恒定速度水平或垂直滚动输入视频。

过滤器接受以下选项:

horizontal, h

设置水平滚动速度。默认为0。允许范围从-1到1。负值改变滚动方向。

vertical, v

设置垂直滚动速度。默认为0。允许范围从-1到1。负值改变滚动方向。

hpos

设置初始水平滚动位置。默认为0。允许范围从0到1。

vpos

设置初始垂直滚动位置。默认为0。允许范围从0到1。

30.223.1 命令

此滤镜支持以下命令:

horizontal, h

设置水平滚动速度。

vertical, v

设置垂直滚动速度。

30.224 scdet

检测视频场景变化。

此滤镜设置帧元数据,记录帧间的最大绝对帧差(mafd)、场景分数,并将帧传递到下一个滤镜,以利用这些元数据检测场景变化或其他情况。

此外,此滤镜在通过threshold.

lavfi.scd.mafd检测到场景变化时会记录日志消息并设置帧元数据。

lavfi.scd.score对于每一帧,元数据键值被设置为场景变化分数。

lavfi.scd.time对于当前过滤帧时间,元数据键值将threshold.

通过

threshold, t

以百分比设置场景改变检测阈值。不错的值在[8.0, 14.0]范围内。范围为threshold默认值是[0., 100.].

Default value is 10..

sc_pass, s

设置标志以将场景改变帧传递到下一个滤镜。默认值为0如果仅想获取场景改变帧的快照,您可以启用此功能。

30.225 selectivecolor

调整青色、品红色、黄色和黑色(CMYK)到特定颜色范围(如“红色”、“黄色”、“绿色”、“青绿色”等)。调整范围由颜色的“纯度”(即颜色的饱和度)定义。

此滤镜类似于Adobe Photoshop的选择性颜色工具。

过滤器接受以下选项:

correction_method

选择颜色校正方法。

可用值为:

absolute

指定调整按原样应用(添加/减去到原始像素分量值)。

relative

指定调整相对于原始分量值。

默认值为absolute.

reds

调整红色像素(像素红色分量为最大值时)

yellows

调整黄色像素(像素蓝色分量为最小值时)

greens

调整绿色像素(像素绿色分量为最大值时)

cyans

调整青色像素(像素红色分量为最小值时)

blues

调整蓝色像素(像素蓝色分量为最大值时)

magentas

调整品红像素(绿色分量最小的像素)

whites

调整白色像素(所有分量均大于128的像素)

neutrals

调整除纯黑色和纯白色以外的所有像素

blacks

调整黑色像素(所有分量均小于128的像素)

psfile

指定一个Photoshop选择性颜色文件(.asv)以导入设置。

所有调整设置(reds, yellows, ...)接受最多4个用空格分隔的浮点调整值,范围在[-1,1]之间,分别用于调整其范围像素的青、品红、黄和黑的数量。

30.225.1 示例

  • 在绿色区域中增加青色50%并减少黄色33%,同时在蓝色区域中增加品红27%:
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用Photoshop选择性颜色预设:
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

30.226 separatefields

separatefields滤镜将基于帧的视频输入拆分为其组成字段,生成一个新高度减半但帧率和帧数翻倍的剪辑。

此滤镜使用帧中的字段优势信息来决定输出中每对字段中的哪个字段先放。如果结果有误,请使用setfield滤镜在separatefields滤镜之前。

30.227 setdar, setsar

setdar滤镜为滤镜输出视频设置显示长宽比。

这可以通过更改指定的样本(也称像素)长宽比来完成,依据以下公式:

DAR = 水平分辨率 / 垂直分辨率 * SAR

请注意,该setdar滤镜不会更改视频帧的像素尺寸。此外,此滤镜设置的显示长宽比可能会被滤镜链中的后续滤镜更改,例如缩放时或应用另一个"setdar"或"setsar"滤镜时。

setsar滤镜为滤镜输出视频设置样本(也称像素)长宽比。

请注意,应用此滤镜的结果将改变输出的显示长宽比,依据以上公式。

请记住,由该setsar滤镜设置的样本长宽比可能会被滤镜链中的后续滤镜更改,例如应用另一个"setsar"或"setdar"滤镜时。

它接受以下参数:

r, ratio, dar (setdar only), sar (setsar only)

设置滤镜使用的长宽比。

参数可以是浮点数字符串,也可以是表达式。如果未指定参数,则假定值为"0",表示使用相同的输入值。

max

设置用于以合理分数表示长宽比时表达分子和分母的最大整数值。默认值是100.

参数sar是一个包含以下常量的表达式:

w, h

输入的宽度和高度。

a

w / h.

sar

相同。

dar

输入的样本长宽比。w / h) * sar.

hsub, vsub

水平和垂直色度子采样值。例如,对于像素格式"yuv422p"hsub等于2,vsub等于1。

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

30.228 setfield

强制输出视频帧的字段。

setfield滤镜为输出帧标记隔行类型字段。它不会更改输入帧,只设置相应的属性,这会影响后续滤镜对帧的处理方式(例如fieldorderyadif).

)。

mode

可用值为:

auto

保持相同的字段属性。

bff

将帧标记为下字段优先。

tff

将帧标记为上字段优先。

prog

将帧标记为渐进扫描。

30.229 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

保持相同的颜色传递属性(默认)。

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
left
center
topleft
top
bottomleft
bottom

30.230 sharpen_npp

使用NVIDIA性能原语(libnpp)进行图像锐化并控制边框。

接受以下附加选项:

border_type

帧边界使用的采样类型。以下之一:

replicate

复制像素值。

30.231 shear

对输入视频应用剪切变换。

此滤镜支持以下选项:

shx

X方向的剪切因子。默认值是0。 允许范围从-2到2。

shy

Y方向的剪切因子。默认值是0。 允许范围从-2到2。

fillcolor, c

设置用于填充未被变换视频覆盖的输出区域的颜色。有关此选项的通用语法,请检查(ffmpeg-utils)"Color"章节在ffmpeg-utils手册中。 如果选择了特殊值"none",则不会打印背景(例如,如果背景从未显示过,这很有用)。

默认值是"black"。

interp

设置插值类型。可以是bilinearnearest。默认是bilinear.

30.231.1 命令

此滤镜支持以上所有选项作为命令.

30.232 showinfo

为每个输入视频帧显示一行包含各种信息的内容。 输入视频未被修改。

此滤镜支持以下选项:

checksum

计算每个平面的校验和。默认启用。

udu_sei_as_ascii

可能时尝试以ASCII字符打印用户数据未注册的SEI,否则以十六进制格式打印。

显示的内容包含一系列键/值对,格式为key:value.

输出中显示以下值:

n

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

pts

输入帧的显示时间戳,以时间基单位表示。时间基单位取决于滤镜输入端。

pts_time

输入帧的显示时间戳,以秒数表示。

fmt

像素格式的名称。

sar

输入帧的采样长宽比,表示形式为num/den.

s

输入帧的大小。有关此选项的语法,请检查(ffmpeg-utils)"视频大小"章节在ffmpeg-utils手册中.

i

隔行模式的类型("P"表示"渐进扫描","T"表示上字段优先,"B"表示下字段优先)。

iskey

如果帧是关键帧则为1,否则为0。

type

输入帧的图片类型("I"表示I帧,"P"表示P帧,"B"表示B帧,或"?"表示未知类型)。 也请参阅AVPictureType中定义的枚举和av_get_picture_type_char函数的文档。libavutil/avutil.h.

checksum

输入帧所有平面的Adler-32校验和(以十六进制打印)。

plane_checksum

输入帧每个平面的Adler-32校验和,以"[c0 c1 c2 c3]".

mean

输入帧每个平面的像素平均值,以"[mean0 mean1 mean2 mean3]".

stdev

输入帧每个平面的像素值标准差,以"[stdev0 stdev1 stdev2 stdev3]".

30.233 showpalette

显示每帧的256色调色板。此滤镜仅与pal8像素格式帧相关。

它接受以下选项:

s

设置用于表示一个调色板颜色条目的框的大小。默认是30(对于一个30x30像素的框)。

30.234 shuffleframes

重新排序和/或复制和/或丢弃视频帧。

它接受以下参数:

mapping

设置输入帧的目标索引。 这是一个用空格或'|'分隔的索引列表,用于将输入帧映射到输出帧。索引数量也设置了每个索引可能的最大值。 '-1'索引具有特殊含义,即丢弃帧。

第一帧的索引为0。默认情况下保持输入不变。

30.234.1 示例

  • 交换输入的每三个帧中的第二帧和第三帧:
    ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
    
  • 交换输入的每十帧中的第10帧和第1帧:
    ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
    

30.235 shufflepixels

重新排序视频帧中的像素。

此滤镜接受以下选项:

direction, d

设置混洗方向。可以是正向或反向。 默认方向为正向。

mode, m

设置混洗模式。可以是水平、垂直或块模式。

width, w
height, h

设置混洗块大小。在水平混洗模式下,仅使用宽度部分大小;在垂直混洗模式下,仅使用高度部分大小。

seed, s

设置用于混洗像素的随机种子。主要用于能够反转过滤过程以获得原始输入。 例如,要反转正向混洗需要使用相同的参数和完全相同的种子,并将方向设置为反向。

30.236 shuffleplanes

重新排序和/或复制视频平面。

它接受以下参数:

map0

用作第一输出平面的输入平面的索引。

map1

用作第二输出平面的输入平面的索引。

map2

用作第三输出平面的输入平面的索引。

map3

用作第四输出平面的输入平面的索引。

第一平面的索引为0。默认情况下保持输入不变。

30.236.1 示例

  • 交换输入的第二和平面的第三平面:
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

30.237 signalstats

评估各种视觉指标,帮助确定与模拟视频媒体数字化相关的问题。

默认情况下,滤镜将记录以下元数据值:

YMIN

显示输入帧中包含的最小Y值。范围为[0-255]。

YLOW

显示输入帧中Y值在10%百分位处的值。范围为[0-255]。

YAVG

显示输入帧中的平均Y值。范围为[0-255]。

YHIGH

显示输入帧中Y值在90%百分位处的值。范围为[0-255]。

YMAX

显示输入帧中包含的最大Y值。范围为[0-255]。

UMIN

显示输入帧中包含的最小U值。范围为[0-255]。

ULOW

显示输入帧中U值在10%百分位处的值。范围为[0-255]。

UAVG

显示输入帧中的平均U值。范围为[0-255]。

UHIGH

显示输入帧中U值在90%百分位处的值。范围为[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

识别超出合法广播范围的像素。

color, c

设置out选项的高亮颜色。默认颜色为黄色。

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

30.238 视频签名

计算 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。

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

30.239 空间时域信息

按照 ITU-T Rec. P.910 (11/21) 的定义计算视频的空间信息 (SI) 和时间信息 (TI) 分数:用于多媒体应用的主观视频质量评估方法。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。

30.239.1 示例

  • 计算 SI/TI 指标并打印总结:
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

30.240 智能模糊

模糊输入视频的同时不影响轮廓线。

它接受以下选项:

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

设置透明度半径。选项值必须是范围 [0.1,5.0] 的浮点数,指定用于模糊图像的高斯滤波器的方差(越大速度越慢)。默认值为luma_radius.

alpha_strength, as

设置透明度强度。选项值必须是范围 [-1.0,1.0] 的浮点数,用于配置模糊。值范围 [0.0,1.0] 将模糊图像,而值范围 [-1.0,0.0] 将锐化图像。默认值为luma_strength.

alpha_threshold, at

设置用于系数判断像素是否应该被模糊的透明度阈值。选项值必须是范围 [-30,30] 的整数。值为 0 将过滤整个图像,范围 [0,30] 的值将过滤平坦区域,范围 [-30,0] 的值将过滤边缘。默认值为luma_threshold.

如果未显式设置色度或透明度选项,则相应的亮度值将被设置。

30.241 索贝尔

对输入视频流应用索贝尔算子。

过滤器接受以下选项:

planes

设置将处理的平面,未处理的平面将被复制。默认值为 0xf,所有平面将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.241.1 命令

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

30.242 spp

应用一个简单的后处理过滤器,该过滤器在几个(或 - 在quality级别6- 所有)位移处压缩和解压图像并平均结果。

过滤器接受以下选项:

quality

设置质量。此选项定义平均的级别数量。它接受范围 0-6 的整数。如果设置为0,过滤器将无效果。值6表示更高的质量。每增加这一值,速度下降约为两倍。默认值为3.

qp

强制恒定量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用的模式是:

hard

设置硬阈值(默认)。

soft

设置软阈值(更好的去环效果,但可能会更模糊)。

use_bframe_qp

如果设置为1使 B 帧的 QP 可用。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认值为0(未启用)。

30.242.1 命令

此过滤器支持以下命令:

quality, level

设置质量级别。值max可用于设置最大级别,目前6.

30.243 超分辨率

通过应用基于卷积神经网络的超分辨率方法缩放输入。支持的模型:

训练脚本以及用于保存模型文件 (.pb) 的脚本可以在以下位置找到https://github.com/XueweiMeng/sr/tree/sr_dnn_native原始存储库位于https://github.com/HighVoltageRocknRoll/sr.git.

过滤器接受以下选项:

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值:

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(参见https://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg--enable-libtensorflow

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 和 OpenVINO 后端仅能加载其专用格式的文件。

scale_factor

设置 SRCNN 模型的缩放因子。允许值为2, 34默认值为2缩放因子对于 SRCNN 模型是必要的,因为它接受使用适当缩放因子的双三次插值放大的输入。

为了获得完整功能(如异步执行),请使用dnn_processing过滤器。

30.244 SSIM

获取两个输入视频之间的 SSIM(结构相似性指标)。

此过滤器接受两个输入视频,第一个输入被视为“主要”源并不做任何改变地传递到输出。第二个输入用于计算 SSIM 的“参考”视频。

两个视频输入必须具有相同的分辨率和像素格式,此过滤器才能够正常工作。此外假设两个输入具有相同的帧数,并逐帧进行比较。

过滤器存储每帧计算出的 SSIM。

以下是可接受参数的描述。

stats_file, f

如果指定,过滤器将使用指定的文件名保存每个单个帧的 SSIM。当文件名为” - “时,数据将输出到标准输出。

如果打印文件stats_file被选中,其中包含一系列键/值对形式的参数:用于每个对比的帧对。

以下是每个显示参数的描述:

n

输入帧的连续编号,从 1 开始

Y, U, V, R, G, B

指定后缀组件的比较帧的 SSIM。

All

整个帧的比较帧的 SSIM。

dB

与上面相同,但以 dB 表示。

此过滤器还支持framesync选项。

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

30.245 stereo3d

在不同的立体图像格式之间转换。

过滤器接受以下选项:

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

30.245.1 示例

  • 将输入视频从左右并排平行转换为黄色/蓝色 Dubois 立体图:
    stereo3d=sbsl:aybd
    
  • 将输入视频从上下(左眼在上,右眼在下)格式转换为左右并排交叉眼格式。
    stereo3d=abl:sbsr
    

30.246 streamselect,astreamselect

选择视频或音频流。

过滤器接受以下选项:

inputs

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

map

设置输入索引以映射到输出。

30.246.1 命令

The streamselectastreamselect过滤器支持以下命令:

map

设置输入索引以映射到输出。

30.246.2 示例

  • 选择前5秒的第一条流,其余时间选择第二条流:
    sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
    
  • 与上面相同,但用于音频:
    asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
    

30.247 字幕

使用 libass 库在输入视频顶部绘制字幕。

要启用此过滤器的编译,您需要使用以下命令配置 FFmpeg--enable-libass。此外,该过滤器还需要一个包含 libavcodec 和 libavformat 的构建,以将传递的字幕文件转换为 ASS(高级字幕 Alpha)字幕格式。

过滤器接受以下选项:

filename, f

设置要读取的字幕文件的文件名。必须指定。

original_size

指定原始视频的尺寸,即为 ASS 文件编写的视频。有关此选项的语法,请查看(ffmpeg-utils)"视频大小"部分在 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。

如果第一个键未指定,假定第一个值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'

30.248 super2xsai

通过“Super2xSaI(缩放和插值)”像素艺术缩放算法将输入缩放为 2 倍,并进行平滑。

对于放大像素艺术图像且不降低清晰度的操作非常有用。

30.249 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;已废弃,请勿使用。

30.249.1 命令

此过滤器支持上述选项作为命令.

30.250 swapuv

交换 U 和 V 平面。

30.251 tblend

混合连续的视频帧。

参见混合

30.252 telecine

对视频应用电视电影技术处理。

此过滤器接受以下选项:

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

30.253 thistogram

计算并绘制输入视频随时间变化的颜色分布直方图。

直方图视频过滤器不同,它仅显示特定时间点的单一输入帧的直方图,此过滤器还显示由width选项定义的帧数量的过去直方图。

计算的直方图是图像中颜色成分分布的表示。

过滤器接受以下选项:

width, w

设置单一颜色成分输出的宽度。默认值为0的值为0这也设置了已通过直方图的数量。允许范围是 [0,8192]。

display_mode, d

设置显示模式。它接受以下值:

stack

每种颜色成分图形被置于彼此之下。

parade

每个颜色组件图表并排放置。

overlay

提供与以下内容相同的信息:parade,但颜色组件的图表直接叠加在一起。

默认值为stack.

levels_mode, m

设置模式。可以是linear,或logarithmic。 默认值为linear.

components, c

设置要显示的颜色组件。 默认值为7.

bgopacity, b

设置背景的不透明度。默认值为0.9.

envelope, e

显示包络线。默认情况下禁用。

ecolor, ec

设置包络线颜色。默认值为gold.

slide

设置滑动模式。

滑动模式的可用值为:

frame

到达右边界时绘制新框架。

replace

用新的列替换旧的列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单一图片。

默认值为replace.

30.254 阈值

将阈值效果应用于视频流。

此滤镜需要四个视频流以执行阈值处理。 第一个流是我们正在过滤的流。 第二个流包含阈值,第三个流包含最小值, 最后一个,第四个流包含最大值。

滤镜接受以下选项:

planes

设置将处理哪些平面,未处理的平面将被复制。 默认值0xf,所有平面都将被处理。

例如,如果第一个流像素组件的值小于第二个阈值流像素组件的阈值, 将选择第三个流的值,否则将选择第四个流像素组件的值。

使用颜色源滤镜可以执行各种类型的阈值处理:

30.254.1 命令

此滤镜支持以下选项以及命令.

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

30.255 缩略图

选择给定连续帧序列中最具代表性的帧。

滤镜接受以下选项:

n

设置需要分析的帧批量大小;在一个批量中n帧,滤镜会从其中挑选一帧,接着处理下一批n帧直到结束。默认值为100.

log

设置日志级别以显示选定帧的统计信息。 默认值为info.

由于滤镜会跟踪整个帧序列,较大n值将导致更高的内存使用,因此不推荐设置高值。

30.255.1 示例

  • 每50帧提取一张图片:
    thumbnail=50
    
  • 一个包含完整示例的缩略图创建案例ffmpeg:
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

30.256 拼接

将多个连续帧拼接在一起。

滤镜取消拼接可以进行反向操作。

滤镜接受以下选项:

layout

设置网格大小,格式为COLUMNSxROWS。范围是最多 UINT_MAX 单元。 默认值为6x5.

nb_frames

设置在给定区域内要渲染的帧的最大数量。必须小于或等于wxh。默认值为0,表示将使用整个区域。

margin

设置外部边框的像素宽度。范围为0到1024。默认值为0.

padding

设置内边框厚度(即帧之间的像素数量)。 有关更高级的填充选项(例如为边设置不同的值),请参考pad视频滤镜。 范围为0到1024。默认值为0.

color

指定未使用区域的颜色。有关此选项的语法,请检查(ffmpeg-utils)“颜色”部分中的ffmpeg-utils手册。 默认值为颜色是“黑色”。

overlap

设置拼接多个连续帧时重叠的帧数量。 该值必须介于0nb_frames - 1之间。默认值为0.

init_padding

设置最初空白的帧数量,之后显示第一个输出帧。 这控制了多久能获取第一个输出帧。 该值必须介于0nb_frames - 1之间。默认值为0.

30.256.1 示例

  • 生成电影中所有关键帧的8x8 PNG拼接图:-skip_frame nokey
    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

    滤镜-vsync 0是必要的以防止ffmpeg重复每个输出帧

  • 显示5图片在一个区域中3x2帧, 间距为7像素,且初始边距为2像素,使用混合简单和命名选项:
    tile=3x2:nb_frames=5:padding=7:margin=2
    

30.257 倾斜和移位

应用倾斜和移位效果。

当你反转时间和空间会发生什么?

通常视频由一些帧组成,每个帧代表时间的一个瞬间,并显示捕获场景的空间的一个演变。这个滤镜是这个概念的对立面,取材于倾斜与移位摄影。

过滤后的帧包含组成序列的整个时间线事件,这是通过将每帧的一部分像素放入一个帧中完成的。然而,由于没有无限宽度的帧,这只能做到输入帧的宽度范围,并通过移位来重新组成一个视频。为了映射空间到时间,滤镜也倾斜每个输入帧,使得运动得以保留。这是通过逐步选择每帧的不同列来完成的。

最终结果是一种反向视差,因此远处的物体移动远比前景物体快。适合这种视频效果的理想条件是要么移动非常少并且背景是静止的,要么运动相当多并且景深非常宽(例如从火车上观看宽广的全景)。

滤镜接受以下参数:

tilt

在移位同时倾斜视频(默认)。如果未设置,视频将滑动一个静图片,构成第一个帧的列。

start

过滤开始时的行为(请参见下文)。

end

过滤结束时的行为(请参见下文)。

hold

过滤开始前通过的列数。

pad

过滤结束前插入的列数。

通常滤镜从第一帧开始移位和倾斜,当最后帧接收到时停止。然而,在过滤开始前普通视频可以被保留,以便效果逐渐位于它的位置。同样,最后视频帧可以在末尾重建。或者可以选择一开始和结束都用黑色填充。

none

过滤立即开始并在接收最后帧时结束。

frame

过滤过程中保留头几帧或最后帧。

black

在过滤开始或结束时用黑色填充。

30.258 转隔行

执行各种类型的临时场隔行处理。

帧从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

双倍帧率,高度不变。插入的帧包含前一个输入帧的第二个临时场与下一个输入帧的第一个临时场。此模式依赖于上场先标志。对于无场同步的隔行视频显示非常有用。

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

指定影响滤镜处理的标志。

标志的可用值为: is:

low_pass_filter, vlpf

启用线性垂直低通滤波器。 当需要将包含高频垂直详细信息的渐进源创建为隔行目标时,需要垂直低通滤波器。 滤波器将会减少隔行‘闪烁’和莫尔图案化。

complex_filter, cvlpf

启用复杂垂直低通滤波器。 这将稍微减少隔行‘闪烁’和莫尔图案化,但能更好地保留细节和主观清晰度印象。

bypass_il

跳过已经是隔行的帧,只调整帧率。

垂直低通滤波器和跳过已经隔行的帧仅能用于mode interleave_topinterleave_bottom.

30.259 时间中值

从多帧连续输入视频中选择中值像素。

滤镜接受以下选项:

radius

设置中值滤波器的半径。 默认值为 1。允许范围为 1 到 127。

planes

设置要过滤的平面。默认值为15,由此处理所有平面。

percentile

设置中值百分比。默认值为0.5。 默认值0.5将始终选择中值值,而0将选择最小值,1最大值。

30.259.1 命令

此滤镜支持以上所有选项作为命令,排除选项radius.

30.260 时间均衡器

应用时间中间视频均衡化效果。

中间视频均衡化调整视频帧序列以具有相同的直方图,同时尽可能保持其动态。 它对于例如匹配视频帧序列中的曝光非常有用。

此滤镜接受以下选项:

radius

设置滤波半径。默认值为5。允许范围为 1 到 127。

sigma

设置滤波Sigma值。默认值为0.5。这控制了滤波强度。 设置此选项为0实际上不起作用。

planes

设置要处理的平面。默认值为15,即所有可用平面。

30.261 混合

混合连续视频帧。

以下是接受的选项描述。

frames

要混合的连续帧数量。如果未指定,默认值为 3。

weights

指定每个输入视频帧的权重值。 每个权重由空格分隔。如果权重数量小于最后指定的权重将用于所有未设置的权重。

scale

指定缩放值,设置后它将与所有权重的总和相乘 并与像素值相乘以创建最终目标像素值。默认值scale会自动按权重总和缩放。

planes

设置哪几个平面进行过滤。默认值为所有。允许范围为 0 到 15。

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

30.261.2 命令

此过滤器支持以下命令:

weights
scale
planes

语法与同名选项相同。

30.262 色调映射

将不同动态范围的颜色映射到显示色彩。

此过滤器需要单精度浮点数格式的数据,因为它需要操作(并可能输出)超出范围的值。您需要通过其他过滤器,比如zscale,将结果帧转换为可用格式。

实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

30.262.1 选项

过滤器接受以下选项。

tonemap

设置要使用的色调映射算法。

可能的值是:

none

不应用任何色调映射,仅对过亮像素去饱和处理。

clip

对超范围的值进行硬裁剪。用于保证范围内值的颜色准确性,尽管会失真超范围值。

linear

将整个参考色域拉伸为显示器的线性倍数。

gamma

在色调曲线间适配对数传递。

reinhard

通过简单曲线保留整体图像亮度,使用非线性对比度,结果是细节会被抹平,颜色准确性会退化。

hable

相比reinhard更好地保留黑暗和高亮细节,但稍微让整体画面变暗。适用于细节保留比颜色和亮度准确性更重要的场合。

mobius

平稳地映射超范围值,同时尽可能保留范围内材料的对比度和颜色。适合在颜色准确性比细节保留更加重要时使用。

默认值为 none。

param

调整色调映射算法。

此选项影响以下算法:

none

忽略。

linear

指定拉伸时使用的缩放因子。默认值为 1.0。

gamma

指定函数的指数。默认值为 1.8。

clip

指定在裁剪之前应用于信号的额外线性系数。默认值为 1.0。

reinhard

指定在显示亮度峰值下的局部对比度系数。默认值为 0.5,这意味着范围内值的亮度约为裁剪时的一半。

hable

忽略。

mobius

指定从线性到莫比乌斯变换的过渡点。低于此点的每个值都保证被 1:1 映射。值越高,结果越精确,但亮部细节损失越大。默认值为 0.3,由于初始斜率陡峭,它仍然能相当准确地保留范围内的颜色。

desat

将超过此亮度水平的高光应用去饱和处理。参数值越高,保留的颜色信息越多。此设置可以防止高光中不自然的失真,通过(平滑地)转化为白色,使图像看起来更加自然,但代价是减少了超出范围颜色的信息。

默认值为 2.0,这比较保守,通常仅适用于天空或直接日照的表面。设置为 0.0 将禁用此选项。

此选项仅在输入帧具有支持的颜色标记时工作。

peak

覆盖信号/标称/参考峰值为此值。当显示元数据中嵌入的峰值信息不可靠或从较低范围映射到较高范围时,此选项很有用。

30.263 tpad

为视频帧临时添加边距。

过滤器接受以下选项:

start

指定输入视频流之前的延迟帧数。默认值为 0。

stop

指定在输入视频流之后填充的帧数。设置为 -1 表示无限填充。默认值为 0。

start_mode

设置添加到流开头的帧类型。可选值为addclone。使用add,会添加纯色帧;使用clone,会使用第一个帧的克隆帧。默认值为add.

stop_mode

设置添加到流末尾的帧类型。可选值为addclone。使用add,会添加纯色帧;使用clone,会使用最后一个帧的克隆帧。默认值为add.

start_duration, stop_duration

指定开始/停止延迟的持续时间。请参阅ffmpeg-utils 中的时间持续时间部分了解接受的语法格式。这些选项会覆盖startstop。默认值为 0。

color

指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的“Color”部分.

color的默认值为“black”。 is "black".

30.264 transpose

交换输入视频的行与列,并可选择翻转。

它接受以下参数:

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 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

默认值为none.

例如,顺时针旋转 90 度并保留纵向布局:

transpose=dir=1:passthrough=portrait

上述命令也可如以下形式指定:

transpose=1:portrait

30.265 transpose_npp

交换输入视频的行与列,并可选择翻转。有关更详细的示例,请参阅共享大部分相同选项的transpose视频过滤器。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何与指定值匹配,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何(当高度 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

30.266 trim

剪切输入视频,仅包含输入的连续子部分。

它接受以下参数:

start

指定保留部分的起始时间戳,即时间为start的帧将成为输出的第一帧。

end

指定将丢弃的第一帧的时间戳,即紧接着时间戳为end的帧之前的帧将是输出的最后一帧。

start_pts

这与start相同,只是此选项以时间基单位而非秒设置起始时间戳。

end_pts

这与end相同,只是此选项以时间基单位而非秒设置结束时间戳。

duration

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

start_frame

应传递到输出的第一帧编号。

end_frame

应丢弃的第一帧编号。

start, endduration是以时间持续时间指定;请参阅ffmpeg-utils 手册中的时间持续时间部分了解接受的语法。

请注意,前三组起始/结束选项以及duration选项会查看帧时间戳,而 _frame 变体选项仅计数通过过滤器的帧。此外,请注意此过滤器不会修改时间戳。如果您希望输出时间戳从零开始,请在 trim 过滤器之后插入 setpts 过滤器。

如果设置了多个起始或结束选项,此过滤器会尽可能保留匹配至少一个指定约束的所有帧。要仅保留同时匹配所有约束的部分,请链接多个 trim 过滤器。

默认情况下保留所有输入。所以仅设置例如结束值即可保留指定时间之前的所有内容。

示例:

  • 仅保留第二分钟的输入内容,其余丢弃:
    ffmpeg -i INPUT -vf trim=60:120
    
  • 仅保留第一秒:
    ffmpeg -i INPUT -vf trim=duration=1
    

30.267 unpremultiply

对输入视频流应用 alpha 解预乘效果,使用第二流的第一个平面作为 alpha。

两个流必须具有相同的尺寸和像素格式。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值为 0xf,表示将处理所有平面。

如果格式有 1 或 2 个分量,那么亮度在第 0 位。若格式有 3 或 4 个分量:对于 RGB 格式,第 0 位是绿色,第 1 位是蓝色,第 2 位是红色;对于 YUV 格式,第 0 位是亮度,第 1 位是色度-U,第 2 位是色度-V。如果有 alpha 通道,它始终是最后一位。

inplace

无需第 2 输入进行处理,而是使用输入流的 alpha 平面。

30.268 unsharp

对输入视频进行锐化或模糊处理。

它接受以下参数:

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'。

30.268.1 示例

  • 应用强的亮度锐化效果:
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度和色度参数同时应用强模糊:
    unsharp=7:7:-2:7:7:-2
    

30.269 untile

将由平铺图像组成的视频分解为各个独立的图像。

输出视频的帧率为输入视频的帧率乘以瓦片数。

此滤镜的功能与之相反平铺.

该滤镜接受以下选项:

layout

设置网格大小(即行数和列数)。有关此选项的语法,请检查在ffmpeg-utils手册的“视频尺寸”部分.

30.269.1 示例

  • 从包含25帧垂直堆叠的静止图像文件生成1秒的视频,类似于模拟胶卷:
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

30.270 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。

30.271 v360

在各种格式之间转换360°视频。

该滤镜接受以下选项:

input
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

l

u

d

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

Hammer-Aitoff地图投影格式。

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

等面积圆柱投影。

interp

设置插值方法。
注意:更复杂的插值方法需要更多内存运行。

可用的方法:

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

偏航

p, P

俯仰

r, R

滚转

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

重置输出视频的旋转。布尔值,默认禁用。

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

30.271.2 命令

此滤镜支持上述选项子集作为命令.

30.272 vaguedenoiser

应用小波降噪器。

它将每帧视频输入转化为小波域,使用Cohen-Daubechies-Feauveau 9/7。然后,对获得的系数应用过滤。之后执行小波逆变换。由于小波特性,它应提供不错的平滑效果和降噪,同时不模糊图像特征。

该滤镜接受以下选项:

threshold

过滤强度。值越高,视频过滤效果越好。硬阈值比软阈值允许更高的阈值不使视频过度过滤。默认值为2。

method

过滤器将使用的过滤方法。

它接受以下值:

hard

阈值以下的所有值将被置零。

soft

阈值以下的所有值将被置零。高于阈值的所有值将被减少阈值。

garrote

缩放或清零系数的折中——介于软/硬阈值之间。

默认值为garrote。

nsteps

小波分解图片的次数。图片分解不能超过某特定点(通常为640x480分辨率的8,因2^9 = 512 > 480)。有效值为1到32的整数。默认值为6。

percent

部分或完整降噪(系数缩减限制),范围为0到100。默认值为85。

planes

要处理的 planes 列表。默认情况下处理所有planes。

type

过滤器将使用的阈值类型。

它接受以下值:

universal

所用阈值对所有分解相同。

bayes

所用阈值也取决于每次分解的系数。

默认值为universal。

30.273 varblur

通过使用第二个视频流设置模糊半径,应用可变模糊滤镜。 第二个流的尺寸必须相同。

该滤镜接受以下选项:

min_r

设置允许的最小半径。允许范围为0到254。默认值为0。

max_r

设置允许的最大半径。允许范围为1到255。默认值为8。

planes

设置要处理的planes。默认情况下,处理所有planes。

varblur滤镜还支持framesync选项。

30.273.1 命令

此滤镜支持上述所有选项作为命令.

30.274 vectorscope

在二维图表(称为矢量示波器)中显示2个颜色分量的值。

该滤镜接受以下选项:

mode, m

设置矢量示波器模式。

它接受以下值:

gray
tint

灰度值显示在图表上,更高亮度表示具有相同颜色分量值的像素在图表位置上更多。这是默认模式。

color

灰度值显示在图表上。不在视频帧中显示的周围像素值以由“2个颜色分量”定义的渐变绘制。 第3个颜色分量是静态的。x and y. The 3rd color component is static.

color2

视频帧中实际颜色分量值显示在图表上。

color3

类似color2,但相同值在图表上的更高频率会增加另一个颜色分量的值,默认由“亮度”决定。x and y on graph increases value of another color component, which is luminance by default values of x and y.

color4

视频帧中实际颜色显示在图表上。如果2个不同颜色映射到图表上的相同位置,则选择颜色分量值较高的第3个颜色。

color5

灰度值显示在图表上。类似color3,但第3个颜色分量取自径向渐变。color but with 3rd color component picked from radial gradient.

x

设置哪个颜色分量将在X轴上表示。默认值为1.

y

设置哪个颜色分量将在Y轴上显示。默认值是2.

intensity, i

设置强度,适用于模式:gray、color、color3和color5,用于增加代表频率的颜色分量的亮度(X, Y)图中位置的亮度。

envelope, e
none

无包络线,这是默认值。

instant

即时包络线,即使是最暗的单像素点也会被清晰地强调出来。

peak

在图中保持最大和最小值随时间的变化。这样您可以在不持续关注矢量示波器的情况下,识别超出范围的值。

peak+instant

峰值和即时包络线结合在一起。

graticule, g

设置要绘制的网格类型。

none
green
color
invert
opacity, o

设置网格的不透明度。

flags, 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。

colorspace, c

设置绘制网格时使用的色彩空间类型。

auto
601
709

默认是自动。

tint0, t0
tint1, t1

为灰色/色调矢量示波器模式设置色彩色调。默认情况下两个选项均为零。这意味着没有色调,输出将保持灰色。

30.275 vidstabdetect

分析视频稳定/防抖动。执行第1步,共2步,详见vidstabtransform执行第2步。

此滤镜生成一个包含相邻帧相对位移和旋转变换信息的文件, 然后由vidstabtransform过滤器使用。

要启用此滤镜的编译,您需使用以下配置设置FFmpeg--enable-libvidstab.

此滤镜接受以下选项:

result

设置用于写入变换信息的文件路径。 默认值是transforms.trf.

shakiness

设置视频抖动的强弱以及相机的快速性。接受范围是1-10,值为1表示轻微抖动,值为10表示强烈抖动。默认值是5。

accuracy

设置检测过程的精确度。范围值是1-15。值为1表示低精度,值为15表示高精度。默认值是15。

stepsize

设置搜索过程的步长。最小值以1像素分辨率扫描。默认值是6。

mincontrast

设置最小对比度。低于此值的局部测量字段将被丢弃。必须是0-1范围内的浮点值。默认值是0.3。

tripod

为三脚架模式设置参考帧编号。

如果启用,帧的运动将与过滤流中的一个参考帧进行比较,由指定编号识别。目的是补偿在大致静态场景中的所有运动,使得相机视角绝对静止。

如果设置为0,则表示禁用。帧编号从1开始计数。

show

在结果帧中显示字段和变换信息。接受范围0-2的整数值。默认值是0,表示禁用任何可视化。

fileformat

要写入的变换数据文件的格式。 可接受的值是

ascii

人类可读的纯文本

binary

二进制格式,比ascii. (默认情况下小40%左右)

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

30.276 vidstabtransform

视频稳定/防抖动:第2步,共2步, 详见vidstabdetect执行第1步。

读取文件中每帧的变换信息并进行应用/补偿。 结合vidstabdetect过滤器,可以用于校正抖动视频。详见http://public.hronopik.de/vid.stab。同样重要的是还需 使用unsharp滤镜,详见下文。

要启用此滤镜的编译,您需使用以下配置设置FFmpeg--enable-libvidstab.

30.276.1 选项

input

设置用于读取变换的文件路径。默认值是transforms.trf.

smoothing

设置低通滤波摄像机运动的帧数(值*2 + 1)。默认值是10。

例如,帧数为10意味着使用21帧(前10帧和后10帧),以平滑视频中的运动。较大的值会导致视频更平滑,但限制了摄像机的加速度(平移/倾斜运动)。0是一个特殊情况,模拟静态摄像机。

optalgo

设置相机路径优化算法。

可接受的值是:

gauss

对摄像机运动应用高斯核低通滤波(默认)

avg

对变换进行平均处理

maxshift

设置平移帧的最大像素数。默认值是-1,表示无限制。

maxangle

设置旋转帧的最大角度(以弧度表示,即度数*PI/180)。默认值是-1,表示无限制。

crop

指定如何处理由于运动补偿而可能可见的边框。

可用值包括:

keep

从前一帧保留图像信息(默认)

black

用黑色填充边框

invert

如果设置为1,则反转变换。默认值是0。

relative

如果设置为1,则将变换视为相对于前一帧;如果设置为0,则视为绝对值。默认值是0。

zoom

设置缩放的百分比。正值会产生放大效果,负值会产生缩小效果。默认值是0(无缩放)。

optzoom

设置最佳缩放以避免边框。

可接受的值是:

0

禁用

1

确定最佳静态缩放值(只有非常剧烈的运动才会导致可见边框)(默认)

2

确定最佳自适应缩放值(不会有边框可见),详见zoomspeed

注意,所指定的缩放值将加到这里计算得出的值上。

zoomspeed

设置每帧最大缩放百分比(当optzoom设置为2时启用)。范围是0到5,默认值是0.25。

interpol

指定插值类型。

可用值包括:

no

无插值

linear

仅水平线性

bilinear

双方向线性(默认)

bicubic

双方向三次方慢速插值

tripod

如果设置为1,则启用虚拟三脚架模式,相当于relative=0:smoothing=0。默认值是0。

同时使用tripod option of vidstabdetect.

debug

如果设置为1,则增加日志详细程度。同时检测到的全局运动将写入临时文件global_motions.trf。默认值是0。

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

30.277 vflip

垂直翻转输入视频。

例如,使用以下方式垂直翻转一个视频ffmpeg:

ffmpeg -i in.avi -vf "vflip" out.avi

30.278 vfrdet

检测可变帧率视频。

此过滤器尝试检测输入是否为可变或恒定帧率。

最后输出检测到的可变delta pts帧和恒定delta pts帧的数量。 如果存在可变delta帧,还会显示遇到的最小、最大和平均delta。

30.279 vibrance

增强或改变饱和度。

该滤镜接受以下选项:

intensity

设置增强的强度(正值)或改变的强度(负值)。 默认值是0。允许范围是-2到2。

rbal

设置红色平衡。默认值是1。允许范围是-10到10。

gbal

设置绿色平衡。默认值是1。允许范围是-10到10。

bbal

设置蓝色平衡。默认值是1。允许范围是-10到10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

alternate

如果intensity为负值并且设置为1,则颜色会改变, 否则颜色会变得不那么饱和,更接近灰色。

30.279.1 命令

该滤镜支持上述所有选项作为命令.

30.280 vif

获取两个输入视频之间的平均VIF(视觉信息保真度)。

此滤镜接受两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式才能使此筛选器正常运行。还假设两个输入具有相同数量的帧,并逐帧比较。

获取的平均VIF分数通过日志记录系统打印出来。

该滤镜存储每帧的计算VIF分数。

此过滤器还支持framesync选项。

在以下示例中,输入文件main.mpg正在处理并与参考文件ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

30.281 vignette

生成或反转自然晕影效果。

该滤镜接受以下选项:

angle, a

设置镜头角度表达式,单位为弧度。

值被限制在[0,PI/2]范围内。

默认值:"PI/5"

x0
y0

设置中心坐标表达式,分别为"w/2""h/2"默认为

mode

设置前进/后退模式。

可用模式为:

forward

离中心点越远,图像越暗。

backward

离中心点越远,图像越亮。 这可以用于反转晕影效果,但尚无自动检测提取镜头angle和其他设置。 也可以用于创建燃烧效果。

默认值为‘forward’.

eval

为表达评估模式设置值(angle, x0, y0).

接受以下值:

init

在滤镜初始化时仅评估表达式一次。

frame

为每个传入帧评估表达式。这比‘init’模式慢得多,因为它需要重新计算所有缩放器,但允许高级动态表达式。

默认值为‘init’.

dither

设置抖动以减小环形条带效应。默认值是1(已启用)。

aspect

设置晕影的比例。此设置可用来调整晕影的形状。 将此值设置为输入的视频 SAR 将根据其维度生成矩形晕影。

默认值是1/1.

30.281.1 表达式

表达式alpha, x0y0可以包含以下参数。

w
h

输入宽度和高度

n

输入帧的编号,从0开始

pts

过滤后的视频帧的PTS(显示时间戳)时间,以时间基单位显示,未定义时为NAN

r

输入视频的帧率,若未知则为NAN

t

过滤后的视频帧的PTS(显示时间戳), 以秒为单位显示,未定义时为NAN

tb

输入视频的时间基础

30.281.2 示例

  • 应用简单的强烈晕影效果:
    vignette=PI/4
    
  • 制作闪烁的晕影:
    vignette='PI/4+random(1)*PI/50':eval=frame
    

30.282 vmafmotion

获取一个视频的平均VMAF运动分数。 这是VMAF的组成度量之一。

获取的平均运动分数通过日志记录系统输出。

该滤镜接受以下选项:

stats_file

如果指定,过滤器将使用指定的文件保存每帧与上一帧的运动分数。 当文件名等于"-"时,数据发送到标准输出。

示例:

ffmpeg -i ref.mpg -vf vmafmotion -f null -

30.283 垂直堆叠

将输入视频垂直堆叠。

所有流必须具有相同的像素格式和相同的宽度。

注意,此滤镜比使用叠加填充滤镜 来创建相同输出更快。

此滤镜接受以下选项:

inputs

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

shortest

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

30.284 w3fdif

对输入视频进行去隔行("w3fdif"代表"Weston三场去隔行滤镜")。

基于BBC R&D中描述的Martin Weston方法,并 根据Jim Easterbrook为BBC R&D编写的去隔行算法实施, Weston三场去隔行滤镜使用由BBC R&D计算的滤镜系数。

此滤镜使用框架中的场优势信息来决定 每对场中的哪一个放在输出中的第一位置。 如果出错,请使用设定场字段滤镜,在w3fdif滤镜之前。

有两组滤镜系数,称为"简单" 和"复杂"。使用哪个滤镜系数集可通过提供可选参数来设置:

filter

设置去隔行滤镜系数。接受以下值之一:

simple

简单滤镜系数集。

complex

复杂滤镜系数集。

默认值为‘complex’.

mode

设置采用的去隔行模式。接受以下值之一:

frame

每帧输出一帧。

field

每场输出一帧。

默认值为field.

parity

输入隔行视频的画面场优先权假设。接受以下值之一:

tff

假设顶部场优先。

bff

假设底部场优先。

auto

启用场优先的自动检测。

默认值为auto。 如果隔行未知或解码器未导出此信息, 将假设顶部场优先。

deint

指定去隔行的帧。接受以下值之一:

all

去隔行所有帧,

interlaced

仅对标记为隔行的帧去隔行。

默认值为‘all’.

30.284.1 命令

此滤镜支持与选项相同的命令。命令。

30.285 波形监视器

视频波形监视器。

波形监视器显示颜色分量强度。默认情况下仅显示亮度。 波形的每列对应于源视频中的一个像素列。

它接受以下选项:

mode, m

可以是row,或column。默认值为column。 在行模式中,左侧的图形表示颜色分量值为0, 右侧表示值=255。在列模式中,顶部表示 颜色分量值=0,底部表示值=255。

intensity, i

设置强度。较小的值有助于找出具有相同亮度的值的分布 在输入行/列中的分布。 默认值为0.04。允许的范围是[0, 1]。

mirror, r

设置镜像模式。0表示未镜像,1表示镜像模式。 在镜像模式中,较高的值将在row模式的左侧表示,在column模式的顶部表示。默认值为1(镜像)。

display, d

设置显示模式。 它接受以下值:

overlay

呈现的信息与parade相同, 但代表颜色分量的图形直接 彼此叠加。

此显示模式可以更容易发现颜色分量重叠区域的相对差异或相似之处, 例如中性白、灰色或黑色。

stack

为颜色分量单独显示侧面图形,在row模式中,并排显示,在column模式中上下显示。

parade

为颜色分量单独显示侧面图形,在column模式中,并排显示,在row模式中上下显示。

使用这种显示模式可以通过比较每个波形顶部和底部图形的轮廓,轻松找到图像高光和阴影中的色彩偏移。 由于白色、灰色和黑色的特点是红、绿和蓝的数量完全相等,图像的中性区域应该显示三个波形的宽度/高度大致相等。 如果不是,通过调整三个波形的级别来纠正会更加容易。

默认值为stack.

components, c

设置要显示哪些颜色分量。默认值为1,表示只有亮度或红色分量 (如果输入为RGB颜色空间)。例如,如果设置为7, 它将显示所有3个(若有)颜色分量。

envelope, e
none

没有包络,默认。

instant

即时包络,图表中显示的最小和最大值即使在小step值下也能容易地被看到。

peak

保持跨时间段的图表中显示的最小和最大值。通过这种方式, 即使不用一直观察波形,也可以发现超出范围的值。

peak+instant

峰值和即时包络结合在一起。

filter, f
lowpass

无滤波,默认。

flat

亮度和色度结合在一起。

aflat

与上类似,但显示蓝色和红色色度之间的差异。

xflat

与上类似,但使用不同的颜色。

yflat

与上类似,但再次使用不同的颜色。

chroma

仅显示色度。

color

在波形上显示实际颜色值。

acolor

与上相似,但亮度显示色度值的频率。

graticule, g

设置要显示哪个目视参考线。

none

不显示目视参考线。

green

显示绿色网格,标示合法的广播范围。

orange

显示橙色网格,标示合法的广播范围。

invert

显示反转网格,标示合法的广播范围。

opacity, o

设置网格不透明度。

flags, fl

设置网格标志。

numbers

在线条上方绘制数字。默认启用。

dots

使用点代替线条。

scale, s

设置用于显示网格的刻度。

digital
millivolts
ire

默认值为数字模式。

bgopacity, b

设置背景不透明度。

tint0, t0
tint1, t1

设置输出的色调。 仅在低通滤镜下使用,并且显示不是叠加,以及输入像素格式不是RGB时使用。

fitmode, fm

设置视频输出帧的样本纵横比。 可以用来配置波形,以防过度拉伸到某一方向。

none

将样本纵横比设置为1/1。

size

设置样本纵横比以匹配视频输入大小。

默认值为‘none’.

input

设置滤镜可选择的输入格式。 可以是‘all’,选择所有可用格式, 或者‘first’,选择第一个可用格式。 默认值为‘first’.

30.286 编织,双编织

weave场输入的视频中的每两个连续字段合并 为一个帧,生成一个双高度剪辑,具有一半的帧率和帧数。

doubleweave类似,但帧率和帧数不减半。weave but without halving frame rate and frame count.

它接受以下选项:

first_field

设置第一个字段。可用值为:

top, t

设置框架为顶部场优先。

bottom, b

设置框架为底部场优优先。

30.286.1 例子

30.287 xbr

应用设计用于像素艺术的xBR高质量放大滤镜。它遵循一组边缘检测规则,详见https://forums.libretro.com/t/xbr-algorithm-tutorial/123.

它接受以下选项:

n

设置缩放维度:22xBR, 33xBR44xBR。 默认值为3.

30.288 xcorrelate

在第一和第二输入视频流之间应用归一化交叉相关。

第二输入视频流的尺寸必须小于第一输入视频流。

该滤镜接受以下选项:

planes

设置要处理的平面。

secondary

设置将处理第二输入视频流的哪个次要视频帧, 可以是第一个全部。默认值为全部。.

The xcorrelate滤镜还支持帧同步选项。

30.289 xfade

在一个输入视频流和另一个输入视频流之间应用交叉淡入效果。 交叉淡入效果在指定的持续时间内应用。

两个输入必须是恒定帧率,并且具有相同的分辨率、像素格式、帧率和时间基准。

该滤镜接受以下选项:

transition

设置可用的过渡效果之一:

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

默认的过渡效果是淡入淡出。

duration

设置交叉淡入的持续时间,单位为秒。 范围是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)的第一个/第二个/第三个/第四个分量的值,第二个输入的。

30.289.1 例子

  • 从一个输入视频淡入另一个输入视频,使用淡入过渡效果,持续时间为2秒, 从偏移量为5秒开始:
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

30.290 xmedian

从多个输入视频中选取中值像素。

该滤镜接受以下选项:

inputs

设置输入的数量。 默认值为3。允许范围为3到255。 如果输入数量为偶数,则结果将在两个中值之间取均值。

planes

设置要过滤的平面。默认值为15,即处理所有平面。

percentile

设置中值百分位数。默认值为0.5。 默认值0.5将始终选择中值, 而0将选择最小值,1最大值。

30.290.1 命令

此滤镜支持上述所有选项作为命令,不包括选项inputs.

30.291 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 Journal: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选项。

30.291.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 超高清视频 ref_source.yuv(位深度为 8)和 test_video.yuv(位深度为 10)进行 XPSNR 分析,两个视频皆为每秒 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 -
    

30.292 xstack

将视频输入堆叠为自定义布局。

所有流必须具有相同的像素格式。

此滤镜接受以下选项:

inputs

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

layout

指定输入的布局。 此选项需要用户显式设置所需布局配置。 这将设置每个视频输入在输出中的位置。每个输入 由 ‘|’ 分隔。 第一个数字表示列,第二个数字表示行。 数字从 0 开始,用 ‘_’ 分隔。可选地,可以使用 wX 和 hX, 其中 X 是从视频输入中获取宽度或高度。 多个值可以使用 ‘+’ 分隔。在这种情况下,值会被相加。

请注意,如果输入的尺寸不同,可能会出现间隙,因为不是所有输出视频框架都会被填充。 类似地,如果位置没有为相邻的视频留出足够的完整帧空间,视频可能会相互重叠。

对于 2 个输入,设置了默认布局0_0|w0_0(等同于grid=2x1)。在所有其他情况下,布局或网格必须由用户设置。可以同时指定gridlayout之一。指定两者将导致错误。

grid

指定固定大小的输入网格。 此选项用于创建固定大小的输入流网格。以形式设置 网格大小COLUMNSxROWS。必须有ROWS * COLUMNS个输入流,它们将按照具有ROWS行和COLUMNS列的网格排列。在使用此选项时,每行中的每个输入流 必须具有相同的高度,所有行必须具有相同的宽度。

如果grid设置为 1,则将忽略inputs选项并隐含地设置为ROWS * COLUMNS.

对于 2 个输入,设置了默认网格2x1(等同于layout=0_0|w0_0)。在所有其他情况下,布局或网格必须由用户设置。可以同时指定gridlayout之一。指定两者将导致错误。

shortest

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

fill

如果设置为有效的颜色,所有未使用的像素将填充为该颜色。 默认填充设置为 none,因此填充被禁用。

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

    请注意,如果输入的大小不同,可能会出现间隙或重叠。

30.293 yadif

对输入视频进行去隔行处理("yadif" 的意思是 "yet another deinterlacing filter")。

它接受以下参数:

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.

30.294 yadif_cuda

使用yadif算法对输入视频进行去隔行处理,但在 CUDA 中实现,以便可以作为 GPU 加速管道的一部分,与 nvdec 和/或 nvenc 协同工作。

它接受以下参数:

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.

30.295 yaepblur

应用模糊滤镜同时保留边缘("yaepblur" 的意思是 "yet another edge preserving blur filter")。算法见 "J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980."。

它接受以下参数:

radius, r

设置窗口半径。默认值为 3。

planes, p

设置要滤波的平面。默认值为仅第一个平面。

sigma, s

设置模糊强度。默认值为 128。

30.295.1 命令

此滤镜支持与选项相同的命令

30.296 zoompan

应用缩放和平移效果。

此滤镜接受以下选项:

zoom, 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

输出帧计数。

in_time, it

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

out_time, time, ot

以秒为单位表示的输出时间戳。

x
y

当前输入帧的‘x’和‘y’表达式最后计算的‘x’和‘y’位置。

px
py

前一个输入帧的上一个输出帧的‘x’和‘y’,或者当尚无此类帧(第一个输入帧)时为 0。

zoom

当前输入帧‘z’表达式最后计算的缩放。

pzoom

前一个输入帧的最后一个输出帧的最后计算缩放。

duration

当前输入帧输出帧的数量。为每个输入帧从‘d’表达式计算。

pduration

为前一个输入帧创建的输出帧数量。

a

有理数:输入宽度 / 输入高度

sar

样本纵横比

dar

显示纵横比

30.296.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)'
    

30.297 zscale

使用 z.lib 库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg。要启用此滤镜的编译,需配置 FFmpeg 和--enable-libzimg.

zscale 滤镜强制输出显示纵横比与输入保持一致,方法是更改输出样本纵横比。

如果输入图像格式与下一滤镜请求的格式不同,zscale 滤镜将输入转换为请求的格式。

30.297.1 选项

滤镜接受以下选项。

width, w
height, h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果宽度w值为 0,则输出使用输入宽度。如果高度h值为 0,则输出使用输入高度。

如果其中一个值为 -n 且 n >= 1,则 zscale 滤镜将使用从另一个指定维度计算出的值,以保持输入图像的纵横比。然而,它会确保计算出的维度可以被 n 整除,并在必要时调整值。

如果两个值都为 -n 且 n >= 1,则行为与两个值都设置为 0 的情况相同,如前面所述。

有关维度表达式可接受的常量列表,请参见下文。

size, s

设置视频大小。有关此选项语法,请查看(ffmpeg-utils) "视频大小" 部分在 ffmpeg-utils 手册中.

dither, d

设置抖动类型。

可能值为:

有序
随机
误差扩散

默认值为无。

filter, f

设置缩放滤镜类型。

可能值为:

双线性
双三次方
spline16
spline36
lanczos

默认值为双线性。

range, r

设置颜色范围。

可能值为:

输入
有限
完全

默认值与输入相同。

primaries, p

设置颜色主色。

可能值为:

输入
709
未指定
170m
240m
2020

默认值与输入相同。

transfer, t

设置传输特性。

可能值为:

输入
709
未指定
601
线性
2020_10
2020_12
smpte2084
iec61966-2-1
arib-std-b67

默认值与输入相同。

matrix, m

设置色彩空间矩阵。

可能值为:

输入
709
未指定
470bg
170m
2020_ncl
2020_cl

默认值与输入相同。

rangein, rin

设置输入颜色范围。

可能值为:

输入
有限
完全

默认值与输入相同。

primariesin, pin

设置输入颜色主色。

可能值为:

输入
709
未指定
170m
240m
2020

默认值与输入相同。

transferin, tin

设置输入传输特性。

可能值为:

输入
709
未指定
601
线性
2020_10
2020_12

默认值与输入相同。

matrixin, min

设置输入颜色空间矩阵。

可能值为:

输入
709
未指定
470bg
170m
2020_ncl
2020_cl
chromal, c

设置输出色度位置。

可能的值有:

输入
中心
左上
顶部
左下
底部
chromalin, cin

设置输入色度位置。

可能的值有:

输入
中心
左上
顶部
左下
底部
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。

30.297.2 命令

此滤镜支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

31 OpenCL 视频滤镜

下面是当前可用的OpenCL视频滤镜的描述。

要启用这些滤镜的编译,你需要配置FFmpeg和--enable-opencl.

运行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滤镜以使输出符合支持的格式。

31.1 avgblur_opencl

应用平均模糊滤镜。

此滤镜接受以下选项:

sizeX

设置水平半径大小。 范围是[1, 1024],默认值是1.

planes

设置需过滤的平面。默认值为0xf,即所有平面都会被处理。

sizeY

设置垂直半径大小。范围是[1, 1024],默认值是0。如果为零,将使用sizeX值。

31.1.1 示例

  • 使用水平和垂直大小为3的平均模糊滤镜,使输出的每个像素等于以输入为中心的7x7区域的平均值。对于图像边缘的像素,区域不会超出图像边界,因此不会使用超范围坐标进行计算。
    -i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
    

31.2 boxblur_opencl

对输入视频应用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

为模糊相应输入平面的盒子半径设置表达式。

半径值必须是非负数,并且不能大于表达式min(w,h)/2在亮度和Alpha平面,以及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

Specify how many times the boxblur filter is applied to the corresponding plane.

Default value for luma_power is 2. If not specified, chroma_power and alpha_power default to the corresponding value set for luma_power.

A value of 0 will disable the effect.

31.2.1 Examples

Apply boxblur filter, setting each pixel of the output to the average value of box-radiuses luma_radius, chroma_radius, alpha_radius for each plane respectively. The filter will apply luma_power, chroma_power, alpha_power times onto the corresponding plane. For pixels on the edges of the image, the radius does not extend beyond the image boundaries, and so out-of-range coordinates are not used in the calculations.

  • Apply a boxblur filter with the luma, chroma, and alpha radius set to 2 and luma, chroma, and alpha power set to 3. The filter will run 3 times with box-radius set to 2 for every plane of the image.
    -i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
    -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
    
  • Apply a boxblur filter with luma radius set to 2, luma_power to 1, chroma_radius to 4, chroma_power to 5, alpha_radius to 3 and alpha_power to 7.

    For the luma plane, a 2x2 box radius will be run once.

    For the chroma plane, a 4x4 box radius will be run 5 times.

    For the alpha plane, a 3x3 box radius will be run 7 times.

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

31.3 colorkey_opencl

RGB colorspace color keying.

The filter accepts the following options:

color

The color which will be replaced with transparency.

similarity

Similarity percentage with the key color.

0.01 matches only the exact key color, while 1.0 matches everything.

blend

Blend percentage.

0.0 makes pixels either fully transparent, or not transparent at all.

Higher values result in semi-transparent pixels, with a higher transparency the more similar the pixels color is to the key color.

31.3.1 Examples

  • Make every semi-green pixel in the input transparent with some slight blending:
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

31.4 convolution_opencl

Apply convolution of 3x3, 5x5, 7x7 matrix.

The filter accepts the following options:

0m
1m
2m
3m

Set matrix for each plane. Matrix is sequence of 9, 25 or 49 signed numbers. Default value for each plane is 0 0 0 0 1 0 0 0 0.

0rdiv
1rdiv
2rdiv
3rdiv

Set multiplier for calculated value for each plane. If unset or 0, it will be sum of all matrix elements. The option value must be a float number greater or equal to 0.0. Default value is 1.0.

0bias
1bias
2bias
3bias

Set bias for each plane. This value is added to the result of the multiplication. Useful for making the overall image brighter or darker. The option value must be a float number greater or equal to 0.0. Default value is 0.0.

31.4.1 Examples

  • Apply sharpen:
    -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
    
  • Apply blur:
    -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
    
  • Apply edge enhance:
    -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
    
  • Apply edge detect:
    -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
    
  • Apply laplacian edge detector which includes diagonals:
    -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
    
  • Apply emboss:
    -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
    

31.5 erosion_opencl

Apply erosion effect to the video.

This filter replaces the pixel by the local(3x3) minimum.

It accepts the following options:

threshold0
threshold1
threshold2
threshold3

Limit the maximum change for each plane. Range is [0, 65535] and default value is 65535. If 0, plane will remain unchanged.

coordinates

Flag which specifies the pixel to refer to. Range is [0, 255] and default value is 255, i.e. all eight pixels are used.

Flags to local 3x3 coordinates region centered on x:

1 2 3

4 x 5

6 7 8

31.5.1 Example

  • Apply erosion filter with threshold0 set to 30, threshold1 set 40, threshold2 set to 50 and coordinates set to 231, setting each pixel of the output to the local minimum between pixels: 1, 2, 3, 6, 7, 8 of the 3x3 region centered on it in the input. If the difference between input pixel and local minimum is more then threshold of the corresponding plane, output pixel will be set to input pixel - threshold of corresponding plane.
    -i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

31.6 deshake_opencl

Feature-point based video stabilization filter.

The filter accepts the following options:

tripod

Simulates a tripod by preventing any camera movement whatsoever from the original frame. Defaults to 0.

debug

Whether or not additional debug info should be displayed, both in the processed output and in the console.

Note that in order to see console debug output you will also need to pass -v verbose to ffmpeg.

Viewing point matches in the output video is only supported for RGB input.

Defaults to 0.

adaptive_crop

Whether or not to do a tiny bit of cropping at the borders to cut down on the amount of mirrored pixels.

Defaults to 1.

refine_features

Whether or not feature points should be refined at a sub-pixel level.

This can be turned off for a slight performance gain at the cost of precision.

Defaults to 1.

smooth_strength

The strength of the smoothing applied to the camera path from 0.0 to 1.0.

1.0 is the maximum smoothing strength while values less than that result in less smoothing.

0.0 causes the filter to adaptively choose a smoothing strength on a per-frame basis.

Defaults to 0.0.

smooth_window_multiplier

Controls the size of the smoothing window (the number of frames buffered to determine motion information from).

The size of the smoothing window is determined by multiplying the framerate of the video by this number.

Acceptable values range from 0.1 to 10.0.

Larger values increase the amount of motion data available for determining how to smooth the camera path, potentially improving smoothness, but also increase latency and memory usage.

Defaults to 2.0.

31.6.1 Examples

  • Stabilize a video with a fixed, medium smoothing strength:
    -i INPUT -vf "hwupload, deshake_opencl=smooth_strength=0.5, hwdownload" OUTPUT
    
  • Stabilize a video with debugging (both in console and in rendered video):
    -i INPUT -filter_complex "[0:v]format=rgba, hwupload, deshake_opencl=debug=1, hwdownload, format=rgba, format=yuv420p" -v verbose OUTPUT
    

31.7 dilation_opencl

Apply dilation effect to the video.

This filter replaces the pixel by the local(3x3) maximum.

It accepts the following options:

threshold0
threshold1
threshold2
threshold3

Limit the maximum change for each plane. Range is [0, 65535] and default value is 65535. If 0, plane will remain unchanged.

coordinates

Flag which specifies the pixel to refer to. Range is [0, 255] and default value is 255, i.e. all eight pixels are used.

Flags to local 3x3 coordinates region centered on x:

1 2 3

4 x 5

6 7 8

31.7.1 Example

  • Apply dilation filter with threshold0 set to 30, threshold1 set 40, threshold2 set to 50 and coordinates set to 231, setting each pixel of the output to the local maximum between pixels: 1, 2, 3, 6, 7, 8 of the 3x3 region centered on it in the input. If the difference between input pixel and local maximum is more then threshold of the corresponding plane, output pixel will be set to input pixel + threshold of corresponding plane.
    -i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

31.8 nlmeans_opencl

Non-local Means denoise filter through OpenCL, this filter accepts same options as nlmeans.

31.9 overlay_opencl

Overlay one video on top of another.

It takes two inputs and has one output. The first input is the "main" video on which the second input is overlaid. This filter requires same memory layout for all the inputs. So, format conversion may be needed.

The filter accepts the following options:

x

设置叠加视频在主视频上的 x 坐标。 默认值为0.

y

设置叠加视频在主视频上的 y 坐标。 默认值为0.

31.9.1 示例

  • 在输入视频的左上角叠加一个 LOGO 图像。两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    
  • 输入的颜色通道具有相同的内存布局,叠加层拥有额外的 alpha 平面,例如输入是 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
    

31.10 pad_opencl

为输入图像添加填充,并将原始输入放置于指定的x, y坐标。

它接受以下选项:

width, w
height, h

指定一个表达式来设置添加填充后的输出图像大小。如果宽度高度的值为 0,则使用输入大小作为输出大小。

宽度表达式可以引用由高度表达式设置的值,反之亦然。

默认值为宽度高度是 0。

x
y

指定偏移量,以便在填充区域内放置输入图像,相对于输出图像的顶部/左侧边界。

x表达式可以引用由y表达式设置的值,反之亦然。

默认值为xy是 0。

如果xy的计算结果为负数,则它们将被更改,以使输入图像位于填充区域的中心。

color

指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)"颜色"部分在 ffmpeg-utils 手册中.

aspect

填充为特定宽高比,而不是固定分辨率。

对于宽度, 高度, xy选项的值是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与in_win_h.

out_w
out_h

输出的宽度和高度(即填充区域的大小),如宽度高度表达式中指定。

ow
oh

这些与out_wout_h.

x
y

xy表达式指定的 x 和 y 偏移量,或者如果尚未指定,则为 NAN。

a

等同于iw / ih

sar

输入的采样宽高比

dar

输入的显示宽高比,与 (iw / ih) * sar

31.11 prewitt_opencl

对输入视频流应用 Prewitt 算子(https://en.wikipedia.org/wiki/Prewitt_operator)。

该滤镜接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置与过滤结果相乘的数值。 范围是[0.0, 65535],默认值为1.0.

delta

设置与过滤结果相加的数值。 范围是[-65535, 65535],默认值为0.0.

31.11.1 示例

  • 应用 Prewitt 算子,设置 scale 为 2,delta 为 10。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

31.12 program_opencl

使用 OpenCL 程序过滤视频。

source

OpenCL 程序的源文件。

kernel

程序中的内核名称。

inputs

滤镜的输入数量。默认值为 1。

size, s

输出帧的大小。默认为与第一个输入相同。

program_opencl滤镜还支持framesync选项。

程序源文件必须包含具有指定名称的内核函数,该函数将对输出的每个平面运行一次。每次平面运行都会排队为一个单独的 2D 全局 NDRange,每个工作项对应于要生成的像素的一个坐标。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。

内核函数需要以下参数:

  • 目标图像,__write_only image2d_t.

    此图像将成为输出;内核应该写入整个图像。

  • 帧索引,unsigned int.

    这是从零开始的计数器,每帧递增 1。

  • 源图像,__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));
    }
    

31.13 remap_opencl

使用第二个 Xmap 和第三个 Ymap 输入视频流重映射像素。

目标像素位置 (X, Y) 将从源 (x, y) 位置选取,其中 x = Xmap(X, Y),y = Ymap(X, Y)。如果映射值超出范围,则目标像素将使用零值作为像素。

Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流将具有与 Xmap/Ymap 视频流相同的尺寸。 Xmap 和 Ymap 输入视频流是 32 位浮点像素格式,单通道。

interp

指定用于像素重映射的插值。 允许的值是nearlinear。 默认值为linear.

fill

指定未映射像素的颜色。有关此选项的语法,请查看(ffmpeg-utils)"颜色"部分在 ffmpeg-utils 手册中。默认颜色为black.

31.14 roberts_opencl

对输入视频流应用 Roberts 交叉算子(https://en.wikipedia.org/wiki/Roberts_cross)。

该滤镜接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置与过滤结果相乘的数值。 范围是[0.0, 65535],默认值为1.0.

delta

设置与过滤结果相加的数值。 范围是[-65535, 65535],默认值为0.0.

31.14.1 示例

  • 应用 Roberts 交叉算子,设置 scale 为 2,delta 为 10
    -i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

31.15 sobel_opencl

对输入视频流应用 Sobel 算子(https://en.wikipedia.org/wiki/Sobel_operator)。

该滤镜接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置与过滤结果相乘的数值。 范围是[0.0, 65535],默认值为1.0.

delta

设置与过滤结果相加的数值。 范围是[-65535, 65535],默认值为0.0.

31.15.1 示例

  • 应用 Sobel 算子,设置 scale 为 2,delta 为 10
    -i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

31.16 tonemap_opencl

执行 HDR(PQ/HLG) 到 SDR 的转换,带有色调映射。

它接受以下参数:

tonemap

指定要使用的色调映射算子。与tonemap.

param

中的 tonemap 选项相同。tonemap.

desat

对超过此亮度级别的高光应用去饱和处理。参数越高,保留的颜色信息越多。此设置有助于防止超高光部分颜色过度突兀地变为白色,从而使图像感觉更自然,但代价是减少了超范围颜色的信息。

默认值为 0.5,当前算法与 CPU 版本的 tonemap 稍有不同。设置为 0.0 可禁用此选项。

threshold

色调映射算法的参数会根据每个场景进行精细调整,并且使用一个阈值来检测场景是否发生变化。如果当前帧平均亮度与当前运行平均值之间的距离超过阈值,我们将重新计算场景的平均亮度和峰值亮度。 默认值为 0.2。

format

指定输出像素格式。

当前支持的格式是:

p010
nv12
range, r

设置输出颜色范围。

可能的值是:

tv/mpeg
pc/jpeg

默认值与输入相同。

primaries, p

设置输出颜色原座标。

可能的值是:

bt709
bt2020

默认值与输入相同。

transfer, t

设置输出传输特性。

可能的值是:

bt709
bt2020

默认值为 bt709。

matrix, m

设置输出颜色空间矩阵。

可能的值是:

bt709
bt2020

默认值与输入相同。

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

31.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’。

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

31.18 xfade_opencl

通过使用 OpenCL,为两个视频添加自定义过渡效果的交叉淡化处理。

它接受以下选项:

transition

设置一种可能的过渡效果。

custom

选择自定义过渡效果,实际的过渡描述将从源文件和内核选项中选择。

fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown

默认过渡是 fade。

source

自定义过渡的 OpenCL 程序源文件。

kernel

设置要从程序源文件中用于自定义过渡的内核名称。

duration

设置视频过渡的持续时间。

offset

设置相对于第一个视频的过渡开始时间。

程序源文件必须包含具有指定名称的内核函数,该函数将对输出的每个平面运行一次。每次平面运行都会排队为一个单独的 2D 全局 NDRange,每个工作项对应于要生成的像素的一个坐标。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。

内核函数需要以下参数:

  • 目标图像,__write_only image2d_t.

    此图像将成为输出;内核应该写入整个图像。

  • 第一源图像,__read_only image2d_t。 第二源图像,__read_only image2d_t.

    这些是每个输入上的最新图像。内核可能会从中读取数据来生成输出,但无法写入它们。

  • 过渡进度,float。该值总是在 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);
    }
    

32 VAAPI 视频滤镜

VAAPI 视频滤镜通常与 VAAPI 解码器和 VAAPI 编码器一起使用。以下是 VAAPI 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用以下配置 FFmpeg--enable-vaapi.

要使用 vaapi 滤镜,您需要正确设置 vaapi 设备。有关更多信息,请参阅https://trac.ffmpeg.org/wiki/Hardware/VAAPI

32.1 overlay_vaapi

将一个视频叠加在另一个视频之上。

它需要两个输入并生成一个输出。第一个输入是“主”视频,第二个输入则叠加在主视频之上。

该滤镜接受以下选项:

x
y

设置叠加视频在主视频上的 x 和 y 坐标表达式。

默认值为两者都为 "0"。

w
h

为主视频中的叠加视频设置宽度和高度的表达式。

默认值为 'overlay_iw' 对于 'w','overlay_ih*w/overlay_iw' 对于 'h'。

表达式可以包含以下参数:

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

参见帧同步.

shortest

参见帧同步.

repeatlast

参见帧同步.

该过滤器也支持帧同步选项。

32.1.1 示例

  • 将图片 LOGO 覆盖在 INPUT 视频的左上角。此过滤器的两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
    
  • 将图片 LOGO 覆盖在距离 INPUT 视频左上角 (200, 100) 的偏移处。输入具有相同的颜色通道内存布局,叠加层有额外的 alpha 平面,例如 INPUT 是 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
    

32.2 tonemap_vaapi

执行 HDR 到 SDR 或 HDR 到 HDR 的色调映射。目前仅接受 HDR10 作为输入。

它接受以下参数:

format

指定输出像素格式。

对于 HDR 到 SDR 映射,默认值为 nv12;对于 HDR 到 HDR 映射,默认值为 p010。

primaries, p

设置输出颜色基准。

对于 HDR 到 SDR 映射,默认值为 bt709;对于 HDR 到 HDR 映射,则与输入相同。

transfer, t

设置输出传递特性。

对于 HDR 到 SDR 映射,默认值为 bt709;对于 HDR 到 HDR 映射,则与输入相同。

matrix, m

设置输出色彩空间矩阵。

对于 HDR 到 SDR 映射,默认值为 bt709;对于 HDR 到 HDR 映射,则与输入相同。

display

设置输出主显示颜色量。给定一个以 '|' 分隔的两组值,两个值为空格分隔。它设置显示基准的 G、B、R 顺序的 x 和 y,然后为白点的 x 和 y,名义的最小和最大显示亮度。

当设置此选项时,将执行 HDR 到 HDR 的色调映射。

light

设置输出内容光照级别信息。接受 2 个空格分隔的值,第一个是最大光亮级别,第二个是最大平均光亮级别。

对于 HDR 到 SDR 映射,此选项将被忽略;对于 HDR 到 HDR 映射,此选项为可选项。

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

32.3 hstack_vaapi

水平堆叠输入视频。

这是hstack过滤器的 VA-API 变体,每个输入流可以拥有不同的高度,此过滤器会在保持原始比例的情况下缩放每个输入流。

它接受以下选项:

inputs

参见hstack.

shortest

参见hstack.

height

设置输出的高度。如果设置为 0,此过滤器将会将输出高度设置为第一个输入流的高度。默认值为 0。

32.4 vstack_vaapi

垂直堆叠输入视频。

这是vstack过滤器的 VA-API 变体,每个输入流可以拥有不同的宽度,此过滤器会在保持原始比例的情况下缩放每个输入流。

它接受以下选项:

inputs

参见vstack.

shortest

参见vstack.

width

设置输出的宽度。如果设置为 0,此过滤器将会将输出宽度设置为第一个输入流的宽度。默认值为 0。

32.5 xstack_vaapi

将视频输入堆叠为自定义布局。

这是xstack过滤器的 VA-API 变体, 每个输入流可以具有不同大小,此过滤器会将每个输入流缩放到给定的输出大小,或者第一个输入流的大小。

它接受以下选项:

inputs

参见xstack.

shortest

参见xstack.

layout

参见xstack此外,这允许用户为每个输入流提供输出大小。

xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

参见xstack.

grid_tile_size

设置每个输入流的输出大小当grid已设置。如果未设置此选项,此过滤器会默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请参阅(ffmpeg-utils)"视频大小"部分,在 ffmpeg-utils 手册中。.

fill

参见xstack.

32.6 pad_vaapi

为输入图像添加填充,并将原始输入放置在指定的x, y坐标。

它接受以下选项:

width, w
height, h

为添加填充后的输出图像的大小指定一个表达式。如果宽度高度的值为 0,输出将使用对应的输入尺寸。

The 宽度表达式可以引用高度表达式中设置的值,反之亦然。

默认值为宽度高度为 0。

x
y

指定将输入图像放置在填充区域内的位置偏移量,参考输出图像的顶部/左侧边界。

The x表达式可以引用y表达式中设置的值,反之亦然。

默认值为xy为 0。

如果xy计算为负值,它们会被更改,以便输入图像居中填充区域。

color

指定填充区域的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分在 ffmpeg-utils 手册中。.

aspect

填充到某个长宽比而不是某个分辨率。

值适用于宽度, 高度, xy选项,这些选项是含有以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与in_win_h.

out_w
out_h

输出宽度和高度(填充区域的大小),由宽度高度表达式指定。

ow
oh

这些与out_wout_h.

x
y

xy表达式中指定的偏移值相同,如果尚未指定则为 NAN。

a

iw / ih

sar

输入采样宽高比。

dar

输入显示宽高比,这等于iw / ih) * sar

32.7 drawbox_vaapi

在输入图像上绘制一个彩色边框。

它接受以下参数:

x
y

指定框左上角坐标的表达式。默认值为 0。

width, w
height, h

指定框的宽度和高度的表达式;如果设置为 0,则默认为输入的宽度和高度。默认值为 0。

color, c

指定要绘制的边框颜色。有关此选项的通用语法,请参阅(ffmpeg-utils)"颜色"部分在 ffmpeg-utils 手册中。.

thickness, t

设置框边缘厚度的表达式。值为fill将创建实心框。默认值为3.

有关接受的常量列表,请参阅下方。

replace

值为1时,被绘制的边框像素会覆盖视频的颜色和 alpha 像素。默认值为0,即将边框与输入视频叠加。

有关x, y, wht的参数是包含以下常量的表达式: are expressions containing the following constants:

in_h, ih
in_w, iw

输入的宽度和高度。

x
y

画框的 x 和 y 偏移坐标。

w
h

绘制框的宽度和高度。

t

绘制框的厚度。

32.7.1 示例

  • 在输入图像边缘绘制一个黑框:
    drawbox
    
  • 绘制一个红色的框,透明度为 50%:
    drawbox=10:20:200:60:red@0.5
    

    前一个示例可以指定为:

    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
    
  • 填充一个粉红色的框:
    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5: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
    

33 Vulkan 视频过滤器

以下是当前可用 Vulkan 视频过滤器的描述。

要启用这些过滤器的编译,需要使用以下参数配置 FFmpeg--enable-vulkan以及--enable-libglslang或者--enable-libshaderc.

运行 Vulkan 过滤器需要初始化一个硬件设备,并将该设备传递到任何过滤器图中的所有过滤器中。

-init_hw_device vulkan[=名称][:设备[,键=值...]]

初始化一个新的,类型为vulkan的硬件设备,名为名称,使用给定的设备参数和选项键=值。支持以下选项:

debug

如果设置为 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过滤器,使输出处于支持的格式中。

33.1 avgblur_vulkan

应用基于 Vulkan 在 GPU 上实现的平均模糊过滤器。

过滤器接收以下选项:

sizeX

设置水平半径大小。范围为[1, 32],默认值为3.

sizeY

设置垂直半径大小。范围为[1, 32],默认值为3.

planes

设置要过滤的平面。默认值为0xf,表示所有平面都会被处理。

33.2 blend_vulkan

将两个 Vulkan 帧相互混合。

过滤器接收两个输入流并输出一个输出流,第一个输入是“顶部”层,第二个输入是“底部”层。默认情况下,当最长的输入结束时,输出也结束。blend filter takes two input streams and outputs one stream, the first input is the "top" layer and second input is "bottom" layer. By default, the output terminates when the longest input terminates.

以下是接收的选项说明。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

为特定像素分量或所有像素分量设置混合模式。如果是all_mode,默认值是normal.

组件模式的可用值有:

normal
multiply

33.3 bwdif_vulkan

使用bwdif,即基于 Vulkan 在 GPU 上实现的“Bob Weaver 去隔行过滤器”算法进行去隔行处理。

它接受以下参数:

mode

选择采纳的隔行模式。可接受以下值:

0, send_frame

每帧输出一帧。

1, send_field

每场输出一帧。

默认值为send_field.

parity

为输入隔行视频假定的画面场序。可接受以下值:

0, tff

假设上场优先。

1, bff

假设下场优先。

-1, auto

启用场序的自动检测。

默认值为auto。如果隔行信息未知或解码器未导出此信息,则假定为上场优先。

deint

指定要去隔行的帧。可接受以下值:

0, all

去隔行所有帧。

1, interlaced

仅对标记为隔行的帧进行去隔行。

默认值为all.

33.4 chromaber_vulkan

应用模仿色差效果的过滤器。对 RGB 输入效果最佳,但对 YCbCr 输入也提供类似效果。

dist_x

水平位移倍数。每个色度像素的位置将从图像中心开始乘以此数值。默认值为0.

dist_y

同样地,这里设置垂直位移倍数。默认值为0.

33.5 color_vulkan

创建纯色 Vulkan 帧的视频源。适用于基准测试或叠加。

它接受以下参数:

color

使用的颜色。可以是名称或者十六进制值。默认值为black.

size

输出帧的大小。默认值为1920x1080.

rate

输出的帧率。默认值为60帧每秒。

duration

视频时长。默认值为-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)。

33.6 vflip_vulkan

垂直翻转图像。

33.7 hflip_vulkan

水平翻转图像。

33.8 flip_vulkan

在垂直和水平方向同时翻转图像。

33.9 gblur_vulkan

在 Vulkan 帧上应用高斯模糊滤镜。

过滤器接受以下选项:

sigma

设置水平 sigma 值,高斯模糊的标准偏差。默认值为0.5.

sigmaV

设置垂直 sigma 值,如果为负值,则与sigma相同。 默认值为-1.

planes

设置需要过滤的平面。默认情况下将过滤所有平面。

size

设置沿水平方向的内核大小。默认值为19.

sizeV

设置沿垂直方向的内核大小。默认值为0, 与大小.

33.10 nlmeans_vulkan

使用 GPU 上的非局部均值算法对帧进行去噪,基于 Vulkan 实现。 支持的像素格式比nlmeansnlmeans_opencl更多,包括对 alpha 通道的支持。

过滤器接受以下选项。

s

为所有分量设置去噪强度。默认值为 1.0。必须在范围 [1.0, 100.0] 内。

p

为所有平面设置补丁大小。默认值为 7。必须为奇数,在范围 [0, 99] 内。

r

设置搜索大小。默认值为 15。必须为奇数,在范围 [0, 99] 内。

t

设置并行性。默认值是 36。必须在范围 [1, 168] 内。 更大的值可能会加快处理速度,但会消耗更多的显存(VRAM)。 较小的值则会减慢处理速度,减少显存使用。 仅在支持浮点原子操作的 GPU 上(例如 RDNA3+、Ampere+)支持。

s0
s1
s2
s3

为特定分量设置去噪强度。默认值为1, 等于s。 必须为奇数,在范围 [1, 100] 内。

p0
p1
p2
p3

为特定分量设置补丁大小。默认值为7, 等于p。 必须为奇数,在范围 [0, 99] 内。

33.11 overlay_vulkan

将一个视频叠加在另一个视频上。

需要两个输入并产生一个输出。第一个输入是"主"视频,第二个输入将叠加在其上。 此过滤器要求所有输入使用相同的像素格式。因此可能需要进行格式转换。

过滤器接受以下选项:

x

设置叠加视频在主视频上的 x 坐标。 默认值为0.

y

设置叠加视频在主视频上的 y 坐标。 默认值为0.

33.12 transpose_vt

在输入视频中将行与列转置并可选地进行翻转。 更多详细的示例请参见transpose视频过滤器,它们大部分共享相同的选项。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

hflip

水平翻转输入视频。

vflip

垂直翻转输入视频。

passthrough

如果输入几何形状匹配指定的值,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留人像几何结构(当高度 >= 宽度).

landscape

保留风景几何结构(当宽度 >= 高度).

33.13 transpose_vulkan

在输入视频中将行与列转置并可选地进行翻转。 更多详细的示例请参见transpose视频过滤器,它们大部分共享相同的选项。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何形状匹配指定的值,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留人像几何结构(当高度 >= 宽度).

landscape

保留风景几何结构(当宽度 >= 高度).

34 QSV 视频过滤器

以下是目前可用的 QSV 视频过滤器的说明。

要启用这些过滤器的编译,您需要使用以下配置 FFmpeg--enable-libmfx--enable-libvpl.

要使用 QSV 过滤器,您需要正确设置 QSV 设备。有关详情,请阅读https://trac.ffmpeg.org/wiki/Hardware/QuickSync

34.1 hstack_qsv

水平堆叠输入视频。

这是hstack过滤器的 QSV 变体,每个输入流可以有不同的高度,此过滤器将缩小/放大每个输入流,同时保持原始宽高比。

它接受以下选项:

inputs

参见hstack.

shortest

参见hstack.

height

设置输出高度。如果设置为 0,此过滤器将设置输出高度为第一个输入流的高度。默认值为 0。

34.2 vstack_qsv

垂直堆叠输入视频。

这是vstack过滤器的 QSV 变体,每个输入流可以有不同的宽度,此过滤器将缩小/放大每个输入流,同时保持原始宽高比。

它接受以下选项:

inputs

参见vstack.

shortest

参见vstack.

width

设置输出宽度。如果设置为 0,此过滤器将设置输出宽度为第一个输入流的宽度。默认值为 0。

34.3 xstack_qsv

将视频输入堆叠为自定义布局。

这是xstack过滤器的 QSV 变体。

它接受以下选项:

inputs

参见xstack.

shortest

参见xstack.

layout

参见xstack。 此外,这允许用户为每个输入流提供输出大小。

xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

参见xstack.

grid_tile_size

grid被设置时,为每个输入流设置输出大小。如果未设置此选项,此过滤器将默认将输出大小设置为第一个输入流的大小。有关此选项语法,请查阅(ffmpeg-utils)"视频大小"部分,位于 ffmpeg-utils 手册.

fill

参见xstack.

35 视频来源

以下是目前可用的视频来源的说明。

35.1 buffer

缓冲视频帧,并将其提供给过滤器链。

此来源主要用于程序化使用,特别是通过libavfilter/buffersrc.h.

中定义的接口。

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项语法的详情,请参阅(ffmpeg-utils)"视频大小"部分,位于 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

另外,这些选项可以作为扁平字符串指定,但这种语法已被弃用:

宽度:高度:像素格式:时间基数分子:时间基数分母:像素宽高比分子:像素宽高比分母

35.2 cellauto

通过基本元胞自动机生成图案。

元胞自动机的初始状态可通过filenamepattern选项定义。如果未指定这些选项,则初始状态会随机创建。

在每一帧中,视频中的一新行将填满元胞自动机下一代的结果。全帧填满时的行为由scroll选项定义。

此来源接受以下选项:

filename, 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)"视频大小"部分,位于 ffmpeg-utils 手册.

如果filenamepattern已指定,则大小默认设置为指定初始状态行的宽度,高度设置为宽度* PHI。

如果size已设定,则它必须包含所指定模式字符串的宽度,并且所指定的模式将以居中对齐方式放置在更大的行中。

如果未指定文件名或模式字符串,则大小默认值为 "320x518"(用于随机生成的初始状态)。

scroll

如果设置为 1,当输出中的所有行已被填满时,将向上滚动输出。如果设置为 0,将在填满底部行后,新的生成行将在顶部行上写入。 默认值为 1。

start_full, full

如果设置为 1,则在输出第一帧之前完全用生成的行填满输出。 这是默认行为,要禁用,请设置为 0。

stitch

如果设置为 1,则将左边和右边的行边缘连接在一起。 这是默认行为,要禁用,请设置为 0。

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

35.3 coreimagesrc

使用Apple在OSX上的CoreImage API在GPU上生成的视频源。

此视频源是coreimage视频过滤器的一个特定版本。 在应用的过滤链开始处使用核心图像生成器生成内容。

coreimagesrc视频源接受以下选项:

list_generators

列出所有可用生成器及其各自的所有选项,以及可能的最小值和最大值及默认值。

list_generators=true
size, s

指定视频源的尺寸。此选项的语法,请参阅(ffmpeg-utils)"视频尺寸"部分在ffmpeg-utils手册中。 默认值为320x240.

rate, r

指定视频源的视频帧率,即每秒生成的帧数。帧率必须是以下格式之一的字符串frame_rate_num/frame_rate_den,整数,浮点数或有效的视频帧率缩写。默认值为"25"。

sar

设置视频源的采样纵横比。

duration, d

设置视频源的时长。参见(ffmpeg-utils)时间时长部分在ffmpeg-utils(1)手册中的接受的语法。

如果未指定,或者表达的时长为负,预计视频将无限生成。

另外,还接受coreimage视频过滤器的所有选项。 可使用完整的过滤链进一步处理生成的输入而无需CPU主机转换。详情请参见coreimage文档和示例。

35.3.1 示例

  • 使用CIQRCodeGenerator创建用于FFmpeg主页的二维码,提供Apple标准bash shell的完整且转义的命令行:
    ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

    此示例等效于coreimage的二维码示例,而无需nullsrc视频源。

35.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时,过滤器将等待桌面更新(帧间间隔在此情况下可能会显著变化)。

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

35.5 gradients

生成多个渐变。

size, s

设置帧的尺寸。此选项的语法,请参阅(ffmpeg-utils)"视频尺寸"部分在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)时间时长部分在ffmpeg-utils(1)手册中的接受的语法。

如果未指定,或者表达的时长为负,预计视频将无限生成。

speed

设置渐变旋转的速度。

type, t

设置渐变的类型。 可用的值为:

linear
radial
circular
spiral
square

默认类型为线性.

35.5.1 命令

此来源支持上面的一些选项作为命令.

35.6 mandelbrot

生成曼德布罗特集合分形,并逐步缩放到使用start_xstart_y.

指定的点。

end_pts

设置终止的pts值。默认值为400。

end_scale

设置终止的缩放值。 必须为浮点值。默认值为0.3。

inner

设置内部着色模式,即用于绘制曼德布罗特分形内部区域的算法。

它可以采用以下值之一:

black

设置黑色模式。

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)"视频尺寸"部分在ffmpeg-utils手册中。默认值为"640x480"。

start_scale

设置初始缩放值。默认值为3.0。

start_x

设置初始x位置。必须是-100到100之间的浮点值。默认值为-0.743643887037158704752191506114774。

start_y

设置初始y位置。必须是-100到100之间的浮点值。默认值为-0.131825904205311970493132056385139。

35.7 mptestsrc

生成各种测试模式,由MPlayer测试滤镜生成。

生成的视频尺寸固定为256x256。 此源特别有助于测试编码功能。

此源接受以下选项:

rate, r

指定视频源的帧率,即每秒生成的帧数。帧率必须是以下格式之一的字符串frame_rate_num/frame_rate_den,整数,浮点数或有效的视频帧率缩写。默认值为"25"。

duration, d

设置视频源的时长。参见(ffmpeg-utils)时间时长部分在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"测试模式。

35.8 frei0r_src

提供一个frei0r源。

要启用此过滤器的编译,您需要安装frei0r头文件并使用以下参数配置FFmpeg:--enable-frei0r.

此源接受以下参数:

size

要生成的视频大小。此选项的语法,请参阅(ffmpeg-utils)"视频尺寸"部分在ffmpeg-utils手册中.

framerate

生成视频的帧率。可以是形式为num/den的字符串,或帧速率缩写。

filter_name

要加载的frei0r源的名称。有关frei0r和如何设置参数的更多信息,请阅读frei0r部分在视频滤镜文档中。

filter_params

分隔符为‘|’的参数列表,这些参数将传递给frei0r源。

例如,生成一个frei0r partik0l源,大小为200x200,帧率为10,并覆盖到overlay过滤器主输入上:

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

35.9 life

生成一个生命模式。

此源基于John Conway生命游戏的广义化版本。

源输入表示一个生命网格,每个像素代表一个单元,可以处于两种状态之一,生存或死亡。每个单元与其八个邻居交互,这些邻居为水平、垂直或对角相邻的单元。

在每次交互中,网格根据采用的规则进化,该规则规定了使单元维持存活或重新生成所需的邻居活单元数量。rule选项允许指定要采用的规则。

此源接受以下选项:

filename, 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位 用于编码每个邻居活细胞数量的活细胞的下一个状态,低9位指定"出生"规则。更高位编码更多邻居细胞的规则。 例如数字6153 =(12<<9)+9指定了保持活着的规则为12,出生规则为9,这对应于"S23/B03"。

默认值是"S23/B3",这是原始康威生命游戏的规则,它将保持细胞在有2或3个邻居活细胞周围时存活,周围有3个活细胞时,死细胞会“出生”。

size, s

设置输出视频的大小。有关此选项的语法,请检查(ffmpeg-utils)"Video size"部分在ffmpeg-utils手册中.

如果filename被指定,尺寸默认设置为输入文件的大小。如果size被设置,它必须包含输入文件中指定的尺寸,并且初始网格会出现在结果区域的中心。

如果未指定文件名,大小值默认为"320x240" (用于随机生成的初始网格)。

stitch

如果设置为1,将网格的左边缘和右边缘连接在一起,同时也连接上边缘和下边缘。默认值为1。

mold

设置细胞变化速度。如果设置,一个死细胞会从death_color变到mold_color以步长为mold. mold的速度。 可以具有从0到255的值。

life_color

设置活细胞(或新出生细胞)的颜色。

death_color

设置死细胞的颜色。如果mold设置,这是表示死细胞的初始颜色。

mold_color

设置霉变细胞的颜色,用于肯定死亡且霉变的细胞。

有关这三个颜色选项的语法,请检查(ffmpeg-utils)"Color"部分在ffmpeg-utils手册中.

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

35.10 perlin

生成Perlin噪声。

Perlin噪声是一种在空间上具有局部连续性的噪声。 这可用于生成在空间和时间上具有连续性的模式,例如模拟烟雾、流体或地形。

如果通过octaves选项指定了多个倍频,Perlin噪声作为组件的总和被生成,每个组件的频率加倍。在这种情况下,persistence选项指定与前一个组件振幅的比例。更多倍频组件使得生成的噪声中可以指定更多的高频细节(例如生成的地形中岩石的小尺寸变化)。

35.10.1 选项

size, s

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请检查(ffmpeg-utils)"Video size"部分在ffmpeg-utils手册中。 默认值是320x240.

rate, r

指定视频流的期望帧率,表示每秒帧数。默认值是25.

octaves

指定噪声组成的总组件数量,每个组件的频率翻倍。默认值是1.

persistence

设置一个比例用于计算下一个倍频组件的振幅,相对于前一个组件的振幅。默认值是1.

xscale
yscale

定义一个比例因子,用于乘以x, y坐标。这可以用于定义沿x或y轴拉伸模式的效果。默认值是1.

tscale

定义一个比例因子,用于乘以时间坐标。这可以用于改变时间变化的速度。默认值是1.

random_mode

设置用于计算初始模式的随机模式。

支持的值是:

random

计算并使用随机种子。

ken

使用Ken Perlin在原始文章中定义的预定义初始模式,可用于与其他来源输出进行比较。

seed

使用由random_seed选项指定的值。

默认值是random.

random_seed, seed

random_mode设置为random_seed时,使用此值计算初始模式。默认值是0.

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

35.11 qrencodesrc

使用libqrencode库生成一个二维码(参见https://fukuchi.org/works/qrencode/).

要启用此源代码的编译,您需要使用以下方式配置FFmpeg:--enable-libqrencode.

二维码从提供的文本或文本模式生成。 二维码根据指定的输出大小选项进行缩放并放置在视频输出中。

如果未指定文本,则不会生成二维码,而是返回一个空的彩色输出。

此源接受以下选项:

qrcode_width, q
padded_qrcode_width, Q

指定渲染的二维码的宽度(包括和不包括填充)的表达式。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

指定QR编码错误纠正级别。较高的纠正级别会增加编码的大小,但代码对损坏会更具鲁棒性。 较低级别是L.

它接受以下值:

L
M
Q
H
expansion

选择如何扩展输入文本。可以是nonenormal(默认)。详见qrencode文本扩展部分。

text
textfile

定义要呈现的文本。如果未指定任何文本,则不会编码二维码(仅为一个空的彩色框)。

如果启用了扩展,则文本将作为文本模板处理,使用qrencode扩展机制。详见qrencode 文本扩展部分。

background_color, bc
foreground_color, fc

设置二维码和背景颜色。默认值foreground_color是"black",默认值background_color是"white"。

有关颜色选项语法,请检查(ffmpeg-utils)"Color" 部分在ffmpeg-utils手册里.

35.11.1 示例

  • 使用默认尺寸生成编码指定文本的二维码:
    qrencodesrc=text=www.ffmpeg.org
    
  • 效果与上面相同,但选择蓝色-粉色的颜色:
    qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
    
  • 生成宽度为200像素的二维码,并填充使填充宽度为二维码宽度的4/3:
    qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成宽度为200像素的填充二维码,并填充使二维码宽度为填充宽度的3/4:
    qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 生成编码帧号的二维码:
    qrencodesrc=text=%{n}
    
  • 生成编码GMT时间戳的二维码:
    qrencodesrc=text=%{gmtime}
    
  • 生成编码为浮点数的时间戳的二维码:
    qrencodesrc=text=%{pts}
    

35.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

源代码返回大小为4096x4096的所有RGB颜色的帧。allrgb source returns frames of size 4096x4096 of all rgb colors.

源代码返回大小为4096x4096的所有YUV颜色的帧。allyuv source returns frames of size 4096x4096 of all yuv colors.

源代码提供均匀的彩色输入。color source provides an uniformly colored input.

源代码提供颜色检查图表。colorchart source provides a colors checker chart.

源代码提供一个颜色光谱输入。colorspectrum source provides a color spectrum input.

源代码提供一个身份Hald CLUT。参见haldclutsrc source provides an identity Hald CLUT. See also haldclut过滤器。

源代码返回未处理的视频帧。 主要用于在分析/调试工具中使用,或作为忽略输入数据的过滤器的源。nullsrc source returns unprocessed video frames. It is mainly useful to be employed in analysis / debugging tools, or as the source for filters which ignore the input data.

源代码生成根据EBU PAL推荐的颜色条纹图案,颜色级别为75%。pal75bars source generates a color bars pattern, based on EBU PAL recommendations with 75% color levels.

源代码生成根据EBU PAL推荐的颜色条纹图案,颜色级别为100%。pal100bars source generates a color bars pattern, based on EBU PAL recommendations with 100% color levels.

源代码生成一个有助于检测RGB与BGR问题的RGB测试图案。你应该看到自上而下分别为红、绿和蓝色的条纹。rgbtestsrc source generates an RGB test pattern useful for detecting RGB vs BGR issues. You should see a red, green and blue stripe from top to bottom.

源代码生成根据SMPTE工程指导EG 1-1990的颜色条纹图案。smptebars source generates a color bars pattern, based on the SMPTE Engineering Guideline EG 1-1990.

源代码生成根据SMPTE RP 219-2002的颜色条纹图案。smptehdbars source generates a color bars pattern, based on the SMPTE RP 219-2002.

源代码生成一个测试视频图案,显示颜色图案、滚动渐变和时间戳。这主要用于测试用途。testsrc source generates a test video pattern, showing a color pattern, a scrolling gradient and a timestamp. This is mainly intended for testing purposes.

源代码类似于testsrc,但支持更多像素格式,而不仅仅是testsrc2 source is similar to testsrc, but supports more pixel formats instead of just rgb24。 这允许将其作为输入用于其他测试,而无需格式转换。

源代码生成一个YUV测试图案。你应该看到自上而下分别为y, cb和cr的条纹。yuvtestsrc source generates an YUV test pattern. You should see a y, cb and cr stripe from top to bottom.

源代码接受以下参数:

level

指定Hald CLUT的级别,仅适用于haldclutsrc源代码。级别为N时生成N*N*NxN*N*N像素矩阵,用作用作3D查找表的身份矩阵。每个组件在1/(N*N)标量范围内编码。

color, c

指定源代码的颜色,仅适用于color源代码。有关此选项的语法,请检查(ffmpeg-utils)"Color"部分在ffmpeg-utils手册中.

size, s

指定源视频的大小。有关此选项的语法,请检查(ffmpeg-utils)"Video size"部分在ffmpeg-utils手册中。 默认值为320x240.

此选项不适用于allrgb, allyuvhaldclutsrc过滤器。

rate, r

指定源视频帧率,表示每秒生成的帧数。其格式必须是frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为"25"。

duration, d

设置源视频的时长。详见(ffmpeg-utils)的时间持续部分在ffmpeg-utils(1)手册中接受的语法。

如果未指定,或者表达的时长为负数,视频将被假定生成永远。

由于帧率用作时间基准,所有帧包括最后一帧将具有完整时间持续。如果指定的时长不是帧持续时间的倍数,它将被向上舍入。

sar

设置源视频的采样宽高比。

alpha

指定背景的alpha(不透明度),仅适用于testsrc2源代码。值必须介于0(完全透明)和255(完全不透明,默认值)。

decimals, n

设置时间戳中显示的小数位数,仅适用于testsrc来源。

显示的时间戳值将对应于原始时间戳值乘以指定值的10次幂。默认值为0。

type

设置色谱的类型,仅在colorspectrum来源。可以是以下之一:

black
white
all
patch_size

设置单色块的尺寸,仅在colorchart来源。默认值是64x64.

preset

设置标准颜色检查器的预设,仅在colorchart来源。

可用值为:

reference
skintones

默认值是reference.

35.12.1 示例

  • 生成一个持续时间为5.3秒,尺寸为176x144,帧率为每秒10帧的视频:
    testsrc=duration=5.3:size=qcif:rate=10
    
  • 以下图形描述将生成一个透明度为0.2的红色来源,大小为“qcif”,帧率为每秒10帧:
    color=c=red@0.2:s=qcif:r=10
    
  • 如果输入内容需要忽略,nullsrc可以使用。以下命令通过使用geq滤镜在亮度平面上生成噪声:
    nullsrc=s=256x256, geq=random(1)*255:128:128
    

35.12.2 命令

color来源支持以下命令:

c, color

设置所创建图像的颜色。接受与相应color选项相同的语法。

35.13 openclsrc

使用OpenCL程序生成视频。

source

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);
    }
    

35.14 sierpinski

生成一个Sierpinski地毯/三角形分形,并随机进行平移。

此来源接受以下选项:

size, s

设置帧大小。有关此选项语法,请查看(ffmpeg-utils)“视频尺寸”部分。默认值为“640x480”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

seed

设置用于随机平移的种子。

jump

设置单次平移目的地的最大跳跃距离。允许范围是1到10000。

type

设置分形类型,可以是默认值carpettriangle.

35.15 zoneplate

生成一个zoneplate测试视频图案。

此来源接受以下选项:

size, s

设置帧大小。有关此选项语法,请查看(ffmpeg-utils)“视频尺寸”部分。默认值为“320x240”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

duration, d

设置视频的持续时间。请参见(ffmpeg-utils)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。

35.15.1 命令

此来源支持一些上述选项作为命令。.

35.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
    
  • 生成圆形zone-plate:
    zoneplate=ku=512:kv=100:kt2=0:ky2=256:kx2=556:s=wvga:yo=0:kt=11
    

36 视频接收端

下面是当前可用的视频接收端的描述。

36.1 buffersink

缓冲视频帧,使其在过滤器图末端可用。

此接收端主要用于编程用途,特别是通过libavfilter/buffersink.h或选项系统定义的接口。

它接受一个指向AVBufferSinkContext结构的指针,该结构定义了传入缓冲区的格式,并作为opaque参数传递给avfilter_init_filter进行初始化。

36.2 nullsink

空视频接收端:对输入视频绝对不做任何处理。它主要作为模板使用,也用于分析/调试工具。

37 多媒体过滤器

下面是当前可用多媒体过滤器的描述。

37.1 a3dscope

将输入音频转换为3D示波图视频输出。

该滤镜接受以下选项:

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请参见(ffmpeg-utils)“视频尺寸”部分。 默认值为hd720.

fov

设置相机的视场角。默认是90度。允许范围是40到150。

roll

设置相机的滚转角。

pitch

设置相机的俯仰角。

yaw

设置相机的偏航角。

xzoom

设置相机在X轴上的缩放比例。

yzoom

设置相机在Y轴上的缩放比例。

zzoom

设置相机在Z轴上的缩放比例。

xpos

设置相机在X轴上的位置。

ypos

设置相机在Y轴上的位置。

zpos

设置相机在Z轴上的位置。

length

设置显示的音频波的长度(以帧数表示)。

37.1.1 命令

过滤器支持一些上述选项作为命令。.

37.2 abitscope

将输入音频转换为视频输出,显示音频位示波图。

该滤镜接受以下选项:

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请参见(ffmpeg-utils)“视频尺寸”部分。 默认值为1024x256.

colors

指定用空格或‘|’分隔的颜色列表,这会用于绘制通道。无法识别或缺失的颜色将被替换为白色。

mode, m

设置输出模式。可以是barstrace。默认值为bars.

37.3 adrawgraph

使用输入音频元数据绘制图表。

参见drawgraph

37.4 agraphmonitor

参见graphmonitor.

37.5 ahistogram

将输入音频转换为视频输出,显示音量直方图。

该滤镜接受以下选项:

dmode

指定如何计算直方图。

它接受以下值:

single

为所有通道共用一个直方图。

separate

为每个通道使用单独的直方图。

默认值是single.

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请参见(ffmpeg-utils)“视频尺寸”部分。 默认值为hd720.

scale

设置显示比例。

它接受以下值:

log

对数比例

sqrt

平方根

cbrt

立方根

lin

线性

rlog

反对数比例

默认值是log.

ascale

设置振幅比例。

它接受以下值:

log

对数比例

lin

线性比例

默认值是log.

acount

设置在直方图中累积的帧数。 默认值为1。将此设置为-1会累积所有帧。

rheight

设置窗口高度的直方图比例。

slide

设置声谱滑动。

它接受以下值:

replace

将旧行替换为新行。

scroll

从顶部滚动到底部。

默认值是replace.

hmode

设置直方图模式。

它接受以下值:

abs

使用样本的绝对值。

sign

使用未处理的样本值。

默认值是abs.

37.6 aphasemeter

测量输入音频的相位,结果作为元数据导出,表示当前音频帧的平均相位。此外,还可以产生视频输出,默认启用。音频作为第一个输出传递。lavfi.aphasemeter.phase, representing mean phase of current audio frame. A video output can also be produced and is enabled by default. The audio is passed through as first output.

音频将被重新混合为立体声,如果它具有不同的通道布局。相位值的范围是[-1, 1]其中-1表示左右声道完全反相,1表示声道同步。

滤镜接受以下与其视频输出相关的选项:

rate, r

设置输出帧率。默认值为25.

size, s

指定输出的视频大小。有关此选项的语法,请参见(ffmpeg-utils)“视频尺寸”部分。 默认值为800x400.

rc
gc
bc

指定红、绿、蓝颜色对比度。默认值为2, 71。 允许范围是[0, 255].

mpc

设置用于绘制中值相位的颜色。如果颜色为默认值none,则不会绘制中值相位值。

video

启用视频输出。默认启用。

37.6.1 相位检测

该滤镜还可以检测立体声流中的反相和单声道序列。当序列持续时间超过或等于设置的最小时,滤镜会记录序列的开始、结束和持续时间。

滤镜接受以下与该检测相关的选项:

phasing

启用单声道和反相检测。默认关闭。

tolerance, t

设置单声道检测的相位容差(以振幅比表示)。默认值为0。 允许范围是[0, 1].

angle, a

设置反相检测的角度阈值(以度为单位)。默认值为170。 允许范围是[90, 180].

duration, d

设置单声道或反相持续时间(以秒为单位),直到通知为止。默认值为2.

37.6.2 示例

  • 使用ffmpeg的完整示例,用于检测具有0.001相位容差的1秒单声道:
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

37.7 avectorscope

将输入音频转换为视频输出,表示音频矢量示波图。

该滤镜用于测量立体声音频流的通道之间的差异。单声道信号(左声道和右声道相同的信号)会形成垂直直线。任何立体声分离都会偏离这条线,形成Lissajous图。如果出现水平直线(或从直线的偏差),则表示左右声道反相。

该滤镜接受以下选项:

mode, m

设置矢量示波器模式。

可用值为:

lissajous

旋转45度的Lissajous图。

lissajous_xy

与上述相同,但未旋转。

polar

形状类似于半圆。

默认值为“lissajous’.

size, s

指定输出的视频大小。有关此选项的语法,请参见(ffmpeg-utils)“视频尺寸”部分。 默认值为400x400.

rate, r

设置输出帧率。默认值为25.

rc
gc
bc
ac

指定红、绿、蓝和Alpha通道的对比度。默认值为40, 160, 80255。 允许范围是[0, 255].

rf
gf
bf
af

指定红、绿、蓝和Alpha通道的淡化。默认值为15, 10, 55。 允许范围是[0, 255].

zoom

设置缩放比例。默认值为1。 允许范围是[0, 10]。 小于1的值将自动调整缩放比例到最大可能的值。

draw

设置矢量示波器的绘图模式。

可用值为:

dot

为每个样本画一个点。

line

在前一个样本和当前样本之间画一条线。

aaline

在前一个样本和当前样本之间画一条抗锯齿线。

默认值为‘dot’.

scale

指定音频样本的幅度比例。

可用值为:

lin

线性。

sqrt

平方根。

cbrt

立方根。

log

对数。

swap

交换左声道和右声道的轴。

mirror

镜像轴。

none

无镜像。

x

仅镜像x轴。

y

仅镜像y轴。

xy

同时镜像x轴和y轴。

37.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]'
    

37.7.2 命令

此过滤器支持除选项sizerate.

之外的所有上述选项作为命令

基准测试过滤器图的一部分。

过滤器接受以下选项:

action

启动或停止计时器。

可用值为:

start

获取当前时间,将其设置为帧元数据(使用键lavfi.bench.start_time),并将帧转发到下一个过滤器。

stop

获取当前时间并从lavfi.bench.start_time输入帧元数据对中获取时间差。时间差、平均值、最大值和最小值(分别为t, avg, maxmin)然后被打印。时间戳以秒为单位。

37.8.1 示例

  • 基准测试选择颜色过滤器:
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

37.9 拼接

拼接音频和视频流,将它们串联在一起。

该过滤器适用于同步的视频和音频流片段。所有片段必须包含相同数量的每种类型的流,这也将是输出中的流数量。

过滤器接受以下选项:

n

设置片段数。默认值为2。

v

设置输出视频流的数量,这也是每个片段中的视频流数。默认值为1。

a

设置输出音频流的数量,这也是每个片段中的音频流数。默认值为0。

unsafe

激活非安全模式:如果片段具有不同的格式,不要失败。

此过滤器具有视频输出+音频输出:首先是 outputs: first 视频输出,然后是 video outputs, then 音频输出。 audio outputs.

nx(视频输出+音频输出) 输入:首先是第一个片段的输入,顺序与输出相同,然后是第二个片段的输入,依此类推。

相关流因编码器帧大小或制作粗糙等各种原因,并不总是具有完全相同的持续时间。因此,相关的同步流(例如视频及其音频轨道)应同时拼接。拼接过滤器将使用每个片段中最长流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。

为了使此过滤器工作正确,所有片段必须从时间戳0开始。

所有对应的流在所有片段中必须具有相同的参数;过滤系统将自动为视频流选择一个公共像素格式,以及为音频流选择一个公共样本格式、采样率和频道布局,但其他设置(如分辨率)必须由用户显式转换。

允许不同的帧率,但输出将有可变帧率;请务必配置输出文件以处理它。

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

    如果第一文件中的音频和视频流的持续时间不完全相同,拼接处将发生不同步。

37.9.2 命令

此过滤器支持以下命令:

next

关闭当前段并跳到下一个

37.10 ebur128

EBU R128 扫描器过滤器。此过滤器接收音频流并分析其响度级别。默认情况下,它以10Hz的频率记录一条消息,其中包含瞬时响度(由M标识)、短期响度(S)、综合响度(I)和响度范围(LRA).

过滤器仅能分析具有双精度浮点样本格式的流。如果需要,输入流将转换为此规范。用户可能需要在此过滤器之后插入aformat和/或aresample过滤器,以获得原始参数。

该过滤器还具有一个视频输出(参见视频选项),带有一个实时图形以观察响度变化。图形包含上述记录的消息,因此在设置此选项时不再打印,除非设置了详细日志记录。主图形区域包含短期响度(分析3秒),右侧的量表显示瞬时响度(400毫秒),但可以选择配置为显示短期响度(参见量表).

绿色区域表示目标响度(默认为-23LUFS,除非通过目标).

修改)上下1LU的范围。更多有关EBU R128响度推荐的信息请访问.

过滤器接受以下选项:

video

激活视频输出。无论该选项是否设置,音频流都将保持不变。如果激活,视频流将成为第一个输出流。默认值为0.

size

设置视频大小。此选项仅适用于视频。有关此选项的语法,请检查(ffmpeg-utils) "视频大小"部分,位于ffmpeg-utils手册中。 默认且最低分辨率为640x480.

meter

设置EBU刻度计。默认值为9。常见值是918,分别对应EBU刻度计+9和EBU刻度计+18。允许的范围内的任何其他整数值也是可以的。

metadata

设置元数据注入。如果设置为1,音频输入将分段为100ms输出帧,每个帧都包含元数据中的各种响度信息。所有元数据键都以lavfi.r128..

前缀。默认值为0.

framelog

强制帧日志记录级别。

可用值为:

quiet

日志记录已禁用

info

信息日志记录级别

verbose

详细日志记录级别

默认情况下,日志记录级别设置为信息。如果videometadata选项设置了,它会切换到详细.

peak

设置峰值模式。

可以累积的可用模式(该选项为flag类型)。可能的值是:

none

禁用任何峰值模式(默认)。

sample

启用采样峰值模式。

简单峰值模式,查找更高的样本值。它记录一条消息,用于采样峰值(由SPK).

true

标识)。

如果启用,输入流的峰值查找将在过采样版本上进行,以获得更高的峰值精度。它记录一条消息用于真实峰值(标识为TPK)以及每帧真实峰值(标识为FTPK)。 此模式需要一个带有libswresample.

dualmono

功能的构建。true调整单声道文件为“双声道单声”。如果单声道文件旨在在立体声系统上播放,其EBU R128测量值将被感知不准确。如果设置为

panlaw

,此选项将补偿此效果。 多通道输入文件不受此选项影响。

target

设置一个特定的平衡律,用于测量双声道单声文件。此参数是可选的,其默认值为-3.01dB。

gauge

设置图形中显示的值。有效值是momentarymshortterm和s。默认情况下,将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如,现场混音)。

scale

设置响度的显示刻度。有效参数是absolute(以LUFS为单位)或relative(LU)相对于目标。这仅影响视频输出,不影响摘要或连续日志输出。

integrated

只读导出值,用于测量的综合响度,以LUFS为单位。

range

只读导出值,用于测量的响度范围,以LU为单位。

lra_low

只读导出值,用于测量的LRA低值,以LUFS为单位。

lra_high

只读导出值,用于测量的LRA高值,以LUFS为单位。

sample_peak

只读导出值,用于测量的采样峰值,以dBFS为单位。

true_peak

只读导出值,用于测量的真实峰值,以dBFS为单位。

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

37.11 交错,a交错

临时交错来自多个输入的帧。

interleave用于视频输入,ainterleave用于音频。

这些过滤器从多个输入中读取帧,并将最旧的排队帧发送到输出。

输入流必须具有明确定义的,单调递增的帧时间戳值。

为了向输出提交一个帧,这些过滤器需要为每个输入排队至少一个帧,因此,如果一个输入尚未终止并且不会接收传入帧,它们将无法正常工作。

例如,考虑一个输入是一个select过滤器,它一直丢弃输入帧。interleave过滤器将继续从该输入中读取,但无法发送新帧到输出,直到输入发送流末信号。

此外,根据输入同步,过滤器会在一个输入接收到的帧比其他输入更多并且队列已经满的情况下丢弃帧。

这些过滤器接受以下选项:

nb_inputs, n

设置不同输入的数量,默认值为2。

duration

如何确定流末信号。

longest

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

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

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

添加闪烁模糊效果:

37.12 延迟,a延迟

测量过滤延迟。

报上一个过滤器的过滤延迟,对于音频过滤器以音频样本为单位,对于视频过滤器以视频帧为单位。

37.13 元数据,a元数据

操作帧元数据。

此过滤器接受以下选项:

mode

设置过滤器的操作模式。

可为以下之一:

select

如果valuekey都被设置,选择具有此类元数据的帧。如果仅设置key,选择每个具有此键的元数据帧。

add

添加新的元数据keyvalue。如果键已经存在,则什么也不做。

modify

修改现有键的值。

delete

如果设置了value,仅删除具有此值的键。否则删除键。如果未设置key,删除帧中的所有元数据值。

print

如果找到元数据,则打印键及其值。如果未设置key,则打印帧中所有可用的元数据值。

key

在所有模式下使用的键。除printdelete.

value

模式外,必须设置。modify设置将使用的元数据值。此选项对于add模式是强制性的。

function

用于与元数据值进行比较时要使用的函数。value.

可为以下之一:

same_str

值被解释为字符串,如果元数据值与value.

starts_with

开头,则返回true。value选项字符串。

less

值被解释为浮点数,如果元数据值小于,则返回 true。value.

equal

值被解释为浮点数,如果value与元数据值相等,则返回 true。

greater

值被解释为浮点数,如果元数据值大于,则返回 true。value.

expr

值被解释为浮点数,如果选项表达式expr计算结果为真,则返回 true。

ends_with

值被解释为字符串,如果元数据值以选项字符串结尾,则返回 true。value选项字符串。

expr

设置表达式,用于function设置为时使用expr。 表达式通过 eval API 进行评估,可以包含以下常量:

VALUE1, FRAMEVAL

元数据键中的value的浮点表示。

VALUE2, USERVAL

选项中用户提供的value的浮点表示。value

file

如果在print模式中指定,输出将写入指定的文件名。除了普通文件名外,还可以指定任何可写 URL。文件名 “-” 是标准输出的简写。如果file选项未设置,输出将以 AV_LOG_INFO 日志级别写入日志。

direct

当使用文件将输出写入 URL 时,减少打印模式中的缓冲。.

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

37.14 perms, aperms

设置输出帧的读/写权限。

这些滤镜主要针对开发人员,用于测试过滤器图中的后续过滤器的直接路径。

过滤器接受以下选项:

mode

选择权限模式。

它接受以下值:

none

不采取任何操作。这是默认值。

ro

设置所有输出帧为只读。

rw

设置所有输出帧为直接可写。

toggle

如果可写则使帧为只读,如果是只读则使其可写。

random

随机设置每个输出帧为只读或可写。

seed

随机模式设置种子,必须是0UINT32_MAX之间的一个整数。如果未指定,或明确设置为-1,过滤器会尽最大努力使用良好的随机种子。

注意:在权限过滤器与后续滤镜之间插入的自动插入滤镜的情况下,可能无法按照预期接收到权限。在权限/aperms 过滤器之前插入格式a格式过滤器可以避免此问题。

37.15 实时, 实时音频

减缓过滤,以大致匹配实时。

这些过滤器将暂停过滤一段可变时间,以使输入时间戳的输出速率相匹配。 它们类似于为re选项设置的ffmpeg.

limit

暂停的时间限制。超过该时间长度的暂停将被视为时间戳不连续,并重置计时器。默认值为 2 秒。

speed

处理的速度因子。该值必须是大于零的浮点数。超过 1.0 的值将导致比实时更快的处理,小于 1.0 的值将减慢处理速度。限制将根据需要自动调整。默认值为 1.0。

不能通过这些过滤器实现比其本身更快的处理速度。

37.15.1 命令

两个过滤器都支持所有上述选项作为命令.

37.16 片段, 音频片段

将单个输入流拆分为多个输出流。

此过滤器与合并过滤器的作用相反。

segment作用于视频帧,asegment作用于音频样本。

此过滤器接受以下选项:

timestamps

由 '|' 分隔的输出片段的时间戳。第一个片段从输入流的开始运行。最后一个片段将运行直到输入流的结束。

frames, samples

分割片段的精确帧/样本数。

在所有情况下,每个片段前添加 '+' 将使其与前一个片段相对。

37.16.1 示例

  • 将输入音频流分为三个输出音频流,从输入音频流的开头开始并存储在第一个输出音频流中,接着是在第 60 秒时开始并存储在第 2 个输出音频流中,最后是在输入音频流的第 150 秒后存储在第 3 个输出音频流中:
    asegment=timestamps="60|150"
    

37.17 选择, 音频选择

选择帧以通过输出。

此过滤器接受以下选项:

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(演示时间戳),以时间基单位表示。如果未定义,则为 NAN。

t

过滤帧的 PTS,以秒表示。如果未定义,则为 NAN。

prev_pts

之前过滤帧的 PTS。如果未定义,则为 NAN。

prev_selected_pts

最近之前过滤帧的 PTS。如果未定义,则为 NAN。

prev_selected_t

最近之前选定帧的 PTS,以秒表示。如果未定义,则为 NAN。

start_pts

流中第一个非 NAN 的 PTS。如果未找到,则仍为 NAN。

start_t

流中第一个非 NAN 的 PTS,以秒表示。如果未找到,则仍为 NAN。

pict_type (仅视频)

过滤帧的类型。它可以假设以下值之一:

I
P
B
S
SI
SP
BI
interlace_type (仅视频)

帧的隔行扫描类型。它可以假设以下值之一:

PROGRESSIVE

帧是渐进式的(非隔行扫描)。

TOPFIRST

帧是顶部优先字段。

BOTTOMFIRST

帧是底部优先字段。

consumed_sample_n (仅音频)

当前帧之前选定的样本数

samples_n (仅音频)

当前帧中的样本数

sample_rate (仅音频)

输入的采样率

key

如果过滤帧是关键帧,则为 1,否则为 0。

pos

过滤帧在文件中的位置,如果信息不可用(例如,对于合成视频),则为 -1;不推荐使用,请勿使用。

scene (仅视频)

介于 0 和 1 之间的值,用于指示新场景;低值表示当前帧引入新场景的可能性较低,而高值表示当前帧更有可能是新场景(见下方示例)。

concatdec_select

合并解复用器可以通过设置入点和出点仅选择部分合并输入文件,但输出包可能未完全包含在所选区间内。通过使用此变量,可以跳过合并解复用器生成的未完全包含在所选区间的帧。

这通过将帧的 PTS 与lavf.concat.start_timelavf.concat.duration的包元数据值进行比较,这些值也存在于解码帧中。

The concatdec_select变量为 -1,如果帧的 PTS 至少为开始时间,并且缺少持续时间元数据或帧的 PTS 小于开始时间 + 持续时间;否则为 0,如果缺少开始时间元数据,则为 NaN。

这基本上意味着,如果输入帧的 PTS 在合并解复用器设置的间隔内,则选择该帧。

iw (仅视频)

表示输入视频帧的宽度。

ih (仅视频)

表示输入视频帧的高度。

view (仅视频)

多视图视频的视图 ID。

选择表达式的默认值为 "1"。

37.17.1 示例

  • 选择输入中的所有帧:
    select
    

    上面的示例与以下示例相同:

    select=1
    
  • 跳过所有帧:
    select=0
    
  • 仅选择关键帧:
    select='eq(pict_type\,I)'
    
  • 每 100 帧选择一个帧:
    select='not(mod(n\,100))'
    
  • 仅选择处于 10-20 秒时间区间的帧:
    select=between(t\,10\,20)
    
  • 仅选择处于 10-20 秒时间区间的关键帧:
    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
    

    比较场景与介于 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
    

37.18 发送命令,发送音频命令

向过滤器图中的过滤器发送命令。

这些过滤器读取要发送到过滤器图中其他过滤器的命令。

sendcmd必须插入到两个视频过滤器之间,asendcmd必须插入到两个音频过滤器之间,但除此之外它们的作用相同。

命令的规范可以通过过滤器参数中的命令选项指定,或在文件中通过文件名选项指定。

这些过滤器接受以下选项:

commands, c

设置要读取的命令并发送到其他过滤器。

filename, f

设置命令文件名以读取命令并发送到其他过滤器。

37.18.1 命令语法

命令描述由一系列间隔规范构成,其中包含事件发生时需要执行的命令列表。事件通常是当前帧时间进入或离开给定的时间间隔。

一个间隔通过以下语法指定:

开始[-结束] 命令;

时间间隔通过开始结束时间指定。结束是可选的,默认为最大时间。

如果当前帧时间包含在间隔 [开始, 结束) 中,则视为在指定间隔内,也就是说,当时间大于或等于开始并且小于结束.

命令由与该间隔相关联的一个或多个命令规范组成,用 "," 分隔。

[标志] 目标 命令 参数

标志是可选的,用于指定与时间间隔相关的启用发送命令的事件类型,必须是用 "[" 和 "]" 包裹的非空标识符标志序列,由 "+" 或 "|" 分隔。

以下标志可被识别:

enter

当当前帧时间戳进入指定间隔时发送命令。换句话说,当前一帧时间戳不在给定间隔内,而当前帧时间戳在该范围内时发送命令。

leave

当当前帧时间戳离开指定间隔时发送命令。换句话说,当前一帧时间戳在给定间隔内,而当前帧时间戳不在时发送命令。

expr

命令参数被解释为表达式,表达式结果作为传递给参数.

表达式通过 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]

37.18.2 示例

  • 在第4秒指定音频节奏变化:
    asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位特定滤镜实例:
    asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定绘制文本和色调命令列表。
    # 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
    

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

命令应用后的第一帧时间或无命令时的第一帧时间。

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

37.19.2 命令

两个滤镜支持上述所有选项作为命令.

37.20 setrange

为输出视频帧强制设置颜色范围。

滤镜标记输出帧的颜色范围属性。它不会更改输入帧,只设置相关属性,影响帧在后续滤镜中的处理方式。setrange filter marks the color range property for the output frames. It does not change the input frame, but only sets the corresponding property, which affects how the frame is treated by following filters.

滤镜接受以下选项:

range

可以用的值有:

auto

保持相同的颜色范围属性。

unspecified, unknown

将颜色范围设置为未指定。

limited, tv, mpeg

将颜色范围设置为有限。

full, pc, jpeg

将颜色范围设置为完整。

37.21 settb, asettb

设置用于输出帧时间戳的时间基准。 主要用于测试时间基准配置。

它接受以下参数:

expr, tb

评估为输出时间基准的表达式。

的值是表示有理数的算术表达式。表达式可以包含常量"AVTB"(默认时间基准)、"intb"(输入时间基准)和"sr"(采样率,仅音频)。默认值为"intb"。tb is an arithmetic expression representing a rational. The expression can contain the constants "AVTB" (the default timebase), "intb" (the input timebase) and "sr" (the sample rate, audio only). Default value is "intb".

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

37.22 showcqt

将输入音频转化为表示频谱的视频输出 计算频域系数,使用Brown-Puckette常数Q变换算法(但变换本身并不是真正的常数Q,相反,Q因子实际上是可变的/受限), 有乐音标尺,从E0到D#10。

滤镜接受以下选项:

size, s

指定输出的视频尺寸。它必须为偶数。此选项的语法可以查看(ffmpeg-utils)"视频尺寸"章节在ffmpeg-utils手册中默认值为1920x1080.

fps, rate, r

设置输出帧速率。默认值为25.

bar_h

设置柱状图高度。它必须为偶数。默认值为-1自动计算柱状图高度。

axis_h

设置轴高。它必须为偶数。默认值为-1自动计算轴高。

sono_h

设置声谱图高度。它必须为偶数。默认值为-1自动计算声谱图高度。

fullhd

设置全高清分辨率。此选项已弃用,请使用尺寸, s替代。默认值为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

指定变换时间约束。在低频率下,时间域和频率域的精度之间存在权衡。如果时间约束值较低,时间域事件会更准确地表示(如快速低音鼓),否则频率域事件会更准确地表示(如低音吉他)。可接受范围是[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字体文件。如果未指定,则使用嵌入字体。请注意,使用字体文件或嵌入字体在使用自定义基频结束频率时未实现,请改用轴文件选项。

font

指定字体配置模式。它的优先级低于字体文件:模式中的|可能被替换以避免不必要的转义。

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

指定图像文件以刻画轴。这将覆盖字体文件字体颜色选项。

axis, text

启用/禁用向轴文字绘制。如果设置为0,绘制到轴上被禁用,忽略字体文件轴文件选项。 默认值是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.

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

37.23 showcwt

将输入音频转化为视频输出,表示频谱, 使用连续小波变换和Morlet小波。

滤镜接受以下选项:

size, s

指定输出的视频尺寸。关于此选项的语法, 可以查看(ffmpeg-utils)"视频尺寸"章节在ffmpeg-utils手册中。 默认值是640x512.

rate, r

设置输出帧速率。默认值是25.

scale

设置使用的频率比例。允许值有:

linear
log
bark
mel
erbs
sqrt
cbrt
qdrt
fm

默认值是linear.

iscale

设置使用的强度比例。允许值有:

linear
log
sqrt
cbrt
qdrt

默认值是log.

min

设置输出中将使用的最小频率。 默认值是20Hz。

max

设置输出中将使用的最大频率。 默认值是20000Hz。实际频率上限 取决于输入音频的采样率,并且在设置值超过奈奎斯特频率时会强制此值。

imin

设置输出中将使用的最小强度。

imax

设置输出中将使用的最大强度。

logb

设置亮度强度在将计算的幅值映射到像素值时所采用的对数基数。 允许范围是从01. 默认值是0.0001.

deviation

设置频率偏差。 低于1的值更注重频率, 而高于1的值更注重时间。 允许范围是从010。 默认值是1.

pps

设置每秒每行输出的像素数量。 允许范围是从11024。 默认值是64.

mode

设置输出视觉模式。 允许的值有:

magnitude

显示幅度。

phase

仅显示相位。

magphase

显示幅度和相位的组合。 幅度映射到亮度,相位映射到颜色。

channel

显示每个通道幅度的独特颜色。

stereo

显示每个立体声差异的独特颜色。

默认值是magnitude.

slide

设置输出滑动方式。 允许的值有:

replace
scroll
frame
direction

为输出滑动方式设置方向方法。 允许的值有:

lr

从左到右的方向。

rl

从右到左的方向。

ud

从上到下的方向。

du

从下到上的方向。

bar

设置条形图显示与显示尺寸的比例。 默认值是0。

rotation

设置颜色轮转,必须在[-1.0, 1.0]范围。 默认值是0.

37.24 显示频率

将输入音频转换为视频输出,表示音频功率谱。 音频振幅在Y轴上,频率在X轴上。

过滤器接受以下选项:

size, s

指定视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"部分的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

设置处理音频时要使用的通道。 默认情况下处理所有通道。

37.25 显示空间

将立体声输入音频转换为视频输出,表示两个通道之间的空间关系。

过滤器接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"部分的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

设置输出帧率。

37.26 显示频谱

将输入音频转换为视频输出,表示音频频率谱。

过滤器接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"部分的ffmpeg-utils手册。 默认值是640x512.

slide

指定频谱应该如何沿窗口滑动。

它接受以下值:

replace

样本到达右侧时重新从左开始

scroll

样本从右向左滚动

fullframe

仅在样本到达右侧时产生帧

rscroll

样本从左向右滚动

lreplace

样本到达左侧时重新从右开始

默认值是replace.

mode

指定显示模式。

它接受以下值:

combined

所有通道在同一行显示

separate

所有通道分别行显示

默认值是 ‘combined’.

color

指定显示的颜色模式。

它接受以下值:

channel

每个通道用不同的颜色显示

intensity

所有通道使用相同的颜色方案显示

rainbow

所有通道使用彩虹颜色方案显示

moreland

所有通道使用莫尔兰颜色方案显示

nebulae

所有通道使用星云颜色方案显示

fire

所有通道使用火焰颜色方案显示

fiery

所有通道使用炽热颜色方案显示

fruit

所有通道使用鲜果颜色方案显示

cool

所有通道使用冷色方案显示

magma

所有通道使用岩浆颜色方案显示

green

所有通道使用绿色方案显示

viridis

所有通道使用维里迪斯颜色方案显示

plasma

所有通道使用等离子颜色方案显示

cividis

所有通道使用西威迪斯颜色方案显示

terrain

所有通道使用地形颜色方案显示

默认值是 ‘channel’.

scale

指定用于计算强度颜色值的比例。

它接受以下值:

lin

线性

sqrt

平方根,默认

cbrt

立方根

log

对数

4thrt

第四根

5thrt

第五根

默认值是 ‘sqrt’.

fscale

指定频率比例。

它接受以下值:

lin

线性

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.

start

设置开始显示频谱的起始频率。 默认值是0.

stop

设置停止显示频谱的截止频率。 默认值是0.

fps

设置最高帧率限制。 默认值是auto, 无限制。

legend

绘制时间和频率轴及图例。 默认情况下是禁用的。

drange

设置用于计算强度颜色值的动态范围。 默认值是120 dBFS。 允许范围从10到200。

limit

设置输入音频样本音量在dBFS中的上限。 默认值是0 dBFS。 允许范围从-100到100。

opacity

使用具有alpha组件的像素格式输出时设置不透明度强度。

用法与showwaves过滤器非常类似;请参阅该部分中的示例。

37.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]'
    

37.27 显示频谱图片

将输入音频转换为单个视频帧,表示音频频率谱。

过滤器接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"部分的ffmpeg-utils手册。 默认值是4096x2048.

mode

指定显示模式。

它接受以下值:

combined

所有通道在同一行显示

separate

所有通道分别行显示

默认值是 ‘combined’.

color

指定显示的颜色模式。

它接受以下值:

channel

每个通道用不同的颜色显示

intensity

所有通道使用相同的颜色方案显示

rainbow

所有通道使用彩虹颜色方案显示

moreland

所有通道使用莫尔兰颜色方案显示

nebulae

所有通道使用星云颜色方案显示

fire

所有通道使用火焰颜色方案显示

fiery

所有通道使用炽热颜色方案显示

fruit

所有通道使用鲜果颜色方案显示

cool

所有通道使用冷色方案显示

magma

所有通道使用岩浆颜色方案显示

green

所有通道使用绿色方案显示

viridis

所有通道使用维里迪斯颜色方案显示

plasma

所有通道使用等离子颜色方案显示

cividis

所有通道使用西威迪斯颜色方案显示

terrain

所有通道使用地形颜色方案显示

默认值是 ‘intensity’.

scale

指定用于计算强度颜色值的比例。

它接受以下值:

lin

线性

sqrt

平方根,默认

cbrt

立方根

log

对数

4thrt

第四根

5thrt

第五根

默认值是 ‘log’.

fscale

指定频率比例。

它接受以下值:

lin

线性

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.

start

设置开始显示频谱的起始频率。 默认值是0.

stop

设置停止显示频谱的截止频率。 默认值是0.

drange

设置用于计算强度颜色值的动态范围。 默认值是120 dBFS。 允许范围从10到200。

limit

设置输入音频样本音量在dBFS中的上限。 默认值是0 dBFS。 允许范围从-100到100。

opacity

使用具有alpha组件的像素格式输出时设置不透明度强度。

37.27.1 示例

  • 提取完整音轨的音频频谱图 并以1024x1024图片表示ffmpeg:
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

37.28 显示音量

将输入音频音量转换为视频输出。

过滤器接受以下选项:

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或RMS:r, 默认是p.

ds

设置显示比例,可以是线性:lin或对数:log, 默认是lin.

dm

以秒为单位。 若设置为> 0.,将在过去几秒钟的最大水平线处显示线。 默认情况下是禁用:0.

dmc

最大线的颜色。 当dm选项设置为> 0时使用。 默认值是:orange

37.29 显示波形

将输入音频转换为表示样本波形的视频输出。

过滤器接受以下选项:

size, s

指定输出视频的大小。有关此选项的语法,请查看(ffmpeg-utils)"视频大小"部分的 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.

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

37.30 showwavespic

将输入音频转换为单个视频帧,表示样本波形。

滤镜接受以下选项:

size, s

指定输出视频的大小。有关此选项的语法,请查看(ffmpeg-utils)"视频大小"部分的 ffmpeg-utils 手册. 默认值为600x240.

split_channels

设置通道是否分别绘制或叠加。默认值为0。

colors

设置由‘|’分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置振幅比例。

可用的值是:

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认是线性。

draw

设置绘制模式。

可用的值是:

scale

为每个绘制的样本缩放像素值。

full

直接绘制每个样本。

默认值为scale.

filter

设置过滤模式。

可用的值是:

average

对每个绘制的样本使用平均样本值。

peak

对每个绘制的样本使用峰值样本值。

默认值为average.

37.30.1 示例

  • 在1024x800图像中提取整个音轨波形的通道分割表示ffmpeg:
    ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
    

37.31 sidedata, asidedata

删除帧附加数据或基于它选择帧。

此滤镜接受以下选项:

mode

设置滤镜的操作模式。

可以是以下之一:

select

选择具有以下附加数据的每个帧:type.

delete

删除以下附加数据:type如果未设置type,则删除帧中的所有附加数据。

type

设置与所有模式一起使用的附加数据类型。必须为select模式设置。 有关帧附加数据类型的列表,请参阅AVFrameSideDataType枚举 在libavutil/frame.h中。例如,要选择AV_FRAME_DATA_PANSCAN附加数据,应指定PANSCAN.

37.32 spectrumsynth

从2个输入视频频谱合成音频,第一个输入流表示跨时间的幅值,第二个输入流表示跨时间的相位。 滤镜将视频中显示的频域转换回音频输出呈现的时间域。

此滤镜主要用于反转处理后的showspectrum滤镜输出,但也可以从其他频谱图合成声音。 但在这种情况下,如果相位数据不可用,结果将很差,因为在这种情况下需要重建相位数据,通常只是从随机噪声中重建。 为了获得最佳效果,请使用灰度输出(channel颜色模式在showspectrum滤镜)和log幅度视频的比例和lin相位视频的比例。 生成第二个视频相位时,请使用data选项。 输入视频通常应使用fullframe滑块模式,因为它节省了解码视频所需的资源。

滤镜接受以下选项:

sample_rate

指定输出音频的采样率,频谱生成的音频采样率可能有所不同。

channels

设置输入视频频谱中表示的通道数。

scale

设置生成幅值输入频谱时使用的比例。 可以是linlog。 默认值为log.

slide

设置生成输入频谱时使用的滑块。 可以是replace, scroll, fullframerscroll。 默认值为fullframe.

win_func

设置用于重合成的窗口函数。

overlap

设置窗口重叠范围。[0, 1]。 默认值为1, 这意味着将选择针对所选窗口函数的优化重叠。

orientation

设置输入视频的方向。 可以是verticalhorizontal。 默认值为vertical.

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

37.33 split, asplit

将输入分成几个相同的输出。

asplit适用于音频输入,split适用于视频输入。

滤镜接受一个参数,用于指定输出的数量。如果未指定,默认值为2。

37.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];
    
  • 使用生成输入音频的5个副本ffmpeg:
    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
    

37.34 zmq, azmq

接收通过libzmq客户端发送的命令,并将它们转发到过滤器图中的滤镜。

zmqazmq作为通路过滤器。zmq必须插入在两个视频滤镜之间,azmq插入在两个音频滤镜之间。 两者都能够向任何类型的滤镜发送消息。

要启用这些过滤器,您需要安装libzmq库和头文件,并通过以下方式配置FFmpeg:--enable-libzmq.

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

过滤器zmqazmq作为libzmq服务器, 它接收通过网络接口定义的消息,接口通过bind_address(或"b"的缩写)选项定义。 该选项的默认值为tcp://localhost:5555。您可能需要根据需要更改此值,但不要忘记转义任何‘:’符号(见过滤器图逃逸)).

接收到的消息格式必须为:

目标 命令 [参数]

目标指定命令的目标,通常是滤波器类的名称或特定滤波器实例的名称。 默认的过滤器实例名称使用模式‘Parsed_<filter_name>_<index>’, 但是您可以通过使用‘filter_name@id’语法来覆盖默认值 (参阅过滤器图语法)。).

命令指定目标过滤器的命令名称。

参数是可选的,指定给定命令的可选参数列表。.

接收消息后,消息将被处理,并将相应的命令注入到过滤器图中。根据结果,过滤器将向客户端发送回复,回复格式为:

错误代码 错误原因
消息

消息是可选的。

37.34.1 示例

查看tools/zmqsend有关zmq客户端的示例,该客户端可以用于发送由这些滤镜处理的命令。

请考虑以下过滤器图由ffplay生成。 在此示例中,最后一个叠加滤镜具有实例名称。所有其他过滤器将具有默认实例名称。

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

38 多媒体来源

以下是当前可用的多媒体来源的描述。

38.1 amovie

movie来源相同,但默认选择一个音频流。

38.2 avsynctest

生成一个音频/视频同步测试。

生成的流定期显示闪烁的视频帧,并在音频中发出哔音。 可用于检查音频/视频同步问题。

它接受以下选项:

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

设置前景/背景/附加颜色。

38.2.1 命令

此源支持某些上面的选项作为命令.

38.3 movie

从电影容器中读取音频和/或视频流。

它接受以下参数:

filename

要读取的资源名称(不一定是文件;它也可以是访问某些协议的设备或流)。

format_name, f

指定假设的电影格式,可以是容器的名称或者输入设备的名称。如果未指定,格式从movie_name中猜测或通过探测得到。

seek_point, sp

指定以秒为单位的搜索点。 从这个搜索点开始输出帧。该参数使用av_strtod进行评估,因此数值可能附加IS后缀。 默认值为"0"。

streams, s

指定要读取的流。可以指定多个流,以"+"分隔。源将具有许多输出,以相同顺序输出。 语法详见(ffmpeg)"流说明"部分中的ffmpeg手册专用名称"dv"和"da"分别指定默认(最佳适配)视频和音频流。 默认是"dv",如果过滤器名为"amovie",默认值为"da"。

stream_index, si

指定要读取的视频流索引。如果值为-1,最适合的视频流将自动选择。默认值为"-1"。 已弃用。如果过滤器名为"amovie",它将选择音频而不是视频。

loop

指定按顺序读取流的次数。 如果值为0,则流将无限循环。 默认值为"1"。

注意,当电影循环时,源时间戳不会更改,因此它将生成非单调增加的时间戳。

discontinuity

指定帧之间时间差,超过该点的时间差被视为时间戳不连续性,通过调整后续时间戳移除。

dec_threads

指定解码线程数量。

format_opts

为打开的文件指定格式选项。格式选项可以指定为=对,使用':'分隔。 以下示例显示如何添加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 -------+

38.3.1 示例

  • 跳过AVI文件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的音频流;视频连接到标记为"视频"的插脚,音频连接到标记为"音频"的插脚:
    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
    

38.3.2 命令

movie 和 amovie 同时支持以下命令:

seek

使用"av_seek_frame"进行搜索。 语法为:搜索流索引|时间戳|标志

  • 流索引: 如果 stream_index 为 -1,则选择一个默认流,并且时间戳会自动从 AV_TIME_BASE 单位转换为流特定的 time_base。
  • 时间戳: 时间戳以 AVStream.time_base 单位表示,或者如果没有指定流,则以 AV_TIME_BASE 单位表示。
  • 标志: 选择方向和查找模式的标志。
get_duration

以 AV_TIME_BASE 单位获取电影时长。

39 外部库

FFmpeg 可以配合多种外部库使用,来支持更多的格式。这些库默认情况下不会使用,必须通过传递适当的标志显式请求使用它们。./configure.

39.1 开放媒体联盟 (AOM)

FFmpeg 可以使用 AOM 库来进行 AV1 解码和编码。

访问http://aomedia.org/并按照安装库的说明操作。然后传递--enable-libaom到 configure 来启用它。

39.2 AMD AMF/VCE

FFmpeg 可以使用 AMD 高级媒体框架库来加速具有视频编码引擎 (VCE) 的硬件的 H.264 和 HEVC (仅限 Windows) 编码。

要启用支持,您必须从以下地址获取 AMF 框架头文件(版本 1.4.9+):https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git.

在系统包含路径中创建一个AMF/目录。将AMF/amf/public/include/的内容复制到该目录中。然后使用--enable-amf.

初始化 AMF 编码器按以下顺序进行: 1) 尝试通过 dx11 初始化 (仅限 Windows) 2) 尝试通过 dx9 初始化 (仅限 Windows) 3) 尝试通过 Vulkan 初始化

要在 Linux 上使用 H.264 (AMD VCE) 编码器,需要 amdgpu-pro 版本 19.20+ 和 amf-amdgpu-pro 包(amdgpu-pro 包含,但不会自动安装)。

可以使用官方 AMD 驱动程序存档中的 amdgpu-pro-install 脚本安装此驱动。

39.3 AviSynth

FFmpeg 可以将 AviSynth 脚本作为输入读取。要启用支持,请在安装由--enable-avisynth to configure after installing the headers provided by AviSynth+提供的头文件后传递-DHEADERS_ONLY:bool=on到正常基于 CMake 的构建系统,或使用提供的GNUmakefile.

对于 Windows,支持的 AviSynth 变体为AviSynth 2.6 RC1 或更高版本支持 32 位构建,以及AviSynth+ r1718 或更高版本支持 32 位和 64 位构建。

对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 变体是AviSynth+,从版本 3.5 开始支持。

在 2016 年,AviSynth+ 添加了支持使用 GCC 构建。但是,由于 Windows 的调用约定的特殊性,使用 GCC 构建的 32 位 AviSynth+ 与典型的 32 位 FFmpeg 构建不兼容。

默认情况下,FFmpeg 假定与 MSVC 构建的 32 位 AviSynth+ 兼容,因为这是最广泛使用和令人信服的构建配置。用户可以通过传递-DAVSC_WIN32_GCC32--extra-cflags在配置 FFmpeg 时覆盖此设置并启用对 GCC 构建的 32 位 AviSynth+ 的支持。

FFmpeg 的 64 位构建不受影响,可以使用 MSVC 或 GCC 构建的 AviSynth+,无需任何特殊标志。

AviSynth(+) 是动态加载的。分发者可以使用--enable-avisynth构建 FFmpeg,即使最终用户未安装 AviSynth,该二进制文件也会正常工作。如果/当最终用户希望使用 AviSynth 脚本时,他们可以安装 AviSynth(+) 并且 FFmpeg 能够找到并使用它打开脚本。

39.4 Chromaprint

FFmpeg 可以使用 Chromaprint 库生成音频指纹。传递--enable-chromaprint到 configure 来启用它。参见https://acoustid.org/chromaprint.

39.5 codec2

FFmpeg 可以使用 codec2 库进行 codec2 解码和编码。目前没有原生解码器,因此解码时必须使用 libcodec2。

访问http://freedv.org/下载“Codec 2 源代码归档”。 使用 CMake 构建并安装。Debian 用户可以安装 libcodec2-dev 包。 安装 libcodec2 后,可以传递--enable-libcodec2到 configure 来启用它。

使用 codec2 最简单的方法是使用 .c2 文件,因为它们包含解码所需的模式信息。 要编码这样的文件,请使用 .c2 文件扩展名并为 libcodec2 编码器提供 -模式选项:ffmpeg -i input.wav -mode 700C output.c2。 播放十分简单,只需ffplay output.c2。 要查看支持的模式列表,请运行ffmpeg -h encoder=libcodec2。 原始 codec2 文件也受到支持。 为了理解它们,需要将使用的模式指定为格式选项:ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav.

39.6 dav1d

FFmpeg 可以使用 dav1d 库进行 AV1 视频解码。

访问https://code.videolan.org/videolan/dav1d并按照安装库的说明操作。然后传递--enable-libdav1d到 configure 来启用它。

39.7 davs2

FFmpeg 可以使用 davs2 库进行 AVS2-P2/IEEE1857.4 视频解码。

访问https://github.com/pkuvcl/davs2并按照安装库的说明操作。然后传递--enable-libdavs2到 configure 来启用它。

libdavs2 遵循 GNU 公共许可证版本 2 或更高版本 (参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html有关详细信息),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

39.8 uavs3d

FFmpeg 可以使用 uavs3d 库进行 AVS3-P2/IEEE1857.10 视频解码。

访问https://github.com/uavs3/uavs3d并按照安装库的说明操作。然后传递--enable-libuavs3d到 configure 来启用它。

39.9 游戏音乐仿真

FFmpeg 可以使用游戏音乐仿真库来读取支持的视频游戏音乐文件格式中的音频。传递--enable-libgme到 configure 来启用它。参见https://bitbucket.org/mpyne/game-music-emu/overview.

39.10 Intel QuickSync 视频

FFmpeg 可以使用 Intel QuickSync 视频 (QSV) 加速多个编解码器的解码和编码。 要使用 QSV,FFmpeg 必须链接到libmfx调度器,以加载实际的解码库。

调度器是开源的,可以从以下地址下载https://github.com/lu-zero/mfx_dispatch.git。 FFmpeg 需要配置--enable-libmfx选项,并且pkg-config需要能够定位调度器的.pc文件。

39.11 Kvazaar

FFmpeg 可以使用 Kvazaar 库进行 HEVC 编码。

访问https://github.com/ultravideo/kvazaar并按照安装库的说明操作。然后传递--enable-libkvazaar到 configure 来启用它。

39.12 LAME

FFmpeg 可以使用 LAME 库进行 MP3 编码。

访问http://lame.sourceforge.net/并按照安装库的说明操作。 然后传递--enable-libmp3lame到 configure 来启用它。

39.13 LCEVCdec

FFmpeg 可以使用 liblcevc_dec 库对支持的比特流进行 LCEVC 增强层解码。

访问https://github.com/v-novaltd/LCEVCdec并按照安装库的说明操作。然后传递--enable-liblcevc-dec到 configure 来启用它。

LCEVCdec 遵循 BSD-3-Clause-Clear 许可证。

39.14 libilbc

iLBC 是 Google 在 WebRTC 项目中免费提供的一种窄带语音编解码器。libilbc 是 iLBC 编解码的包装友好副本。 FFmpeg 可以使用 libilbc 库进行 iLBC 解码和编码。

访问https://github.com/TimothyGu/libilbc并按照安装库的说明操作。然后传递--enable-libilbc到 configure 来启用它。

39.15 libjxl

JPEG XL 是一种图像格式,旨在从长远来看完全取代老旧的 JPEG。请参阅https://jpegxl.info/了解更多信息,并参阅https://github.com/libjxl/libjxl获取库资源。您可以传递--enable-libjxl到 configure 来启用 libjxl 包装器。

39.16 libvpx

FFmpeg 可以使用 libvpx 库进行 VP8/VP9 解码和编码。

访问http://www.webmproject.org/并按照安装库的说明操作。然后传递--enable-libvpx到 configure 来启用它。

39.17 ModPlug

FFmpeg 可以使用该库(源自 Modplug-XMMS)从 MOD 类音乐文件中读取内容。 请参阅https://github.com/Konstanty/libmodplug。传递--enable-libmodplug到 configure 来启用它。

39.18 OpenCORE、VisualOn 和 Fraunhofer 库

作为 Google Android 源代码的衍生版本,OpenCore、VisualOn 和 Fraunhofer 库为多种音频编解码器提供了编码器。

OpenCORE 和 VisualOn 库遵循 Apache 许可证 2.0 (参见http://www.apache.org/licenses/LICENSE-2.0了解详情),不兼容 LGPL 版本 2.1 和 GPL 版本 2。 您必须通过传递以下内容将 FFmpeg 的许可证升级为 LGPL 版本 3(或如果您启用了 GPL 组件,则为 GPL 版本 3):--enable-version3到 configure 才能使用。

Fraunhofer AAC 库的许可证与 GPL 不兼容。 因此,对于 GPL 构建,您必须传递--enable-nonfree到 configure 才能使用。尽我们所知,它与 LGPL 兼容。

39.18.1 OpenCORE AMR

FFmpeg 可以使用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。 然后传递--enable-libopencore-amrnb和/或--enable-libopencore-amrwb到 configure 来启用它们。

39.18.2 VisualOn AMR-WB 编码库

FFmpeg 可以使用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。 然后传递--enable-libvo-amrwbenc到 configure 来启用它。

39.18.3 Fraunhofer AAC 库

FFmpeg 可以使用 Fraunhofer AAC 库进行 AAC 解码和编码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明操作。 然后传递--enable-libfdk-aac到 configure 来启用它。

39.18.4 LC3 库

FFmpeg 可以使用 Google LC3 库进行 LC3 解码和编码。

访问https://github.com/google/liblc3/并按照安装库的说明操作。 然后传递--enable-liblc3到 configure 来启用它。

39.19 OpenH264

FFmpeg 可以使用 OpenH264 库进行 H.264 解码和编码。

访问http://www.openh264.org/并按照安装库的说明操作。然后传递--enable-libopenh264到 configure 来启用它。

对于解码,此库比内置解码器 libavcodec 更为有限;目前,此库缺乏对解码 B 帧及某些主/高配置文件功能的支持。(它目前仅支持受限基线配置文件和 CABAC。)使用它主要用于测试及利用 Cisco 的专利组合许可证(http://www.openh264.org/BINARY_LICENSE.txt).

39.20 OpenJPEG

FFmpeg 可以使用 OpenJPEG 库进行 J2K 视频的解码和编码。访问http://www.openjpeg.org/获取库并按照安装说明操作。要在 FFmpeg 中启用使用 OpenJPEG,请传递--enable-libopenjpeg./configure.

39.21 rav1e

FFmpeg 可以通过 C 绑定使用 rav1e (Rust AV1 编码器) 对视频进行编码。 访问https://github.com/xiph/rav1e/并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请传递--enable-librav1e./configure.

39.22 SVT-AV1

FFmpeg可以使用SVT-AV1库进行AV1编码。

前往https://gitlab.com/AOMediaCodec/SVT-AV1/并按照说明安装库。然后传递--enable-libsvtav1到配置以启用它。

39.23 TwoLAME

FFmpeg可以使用TwoLAME库进行MP2编码。

前往http://www.twolame.org/并按照说明安装库。然后传递--enable-libtwolame到配置以启用它。

39.24 VapourSynth

FFmpeg可以读取VapourSynth脚本作为输入。要启用支持,请传递--enable-vapoursynth到配置。Vapoursynth通过pkg-config进行检测。支持版本42或更高。 见http://www.vapoursynth.com/.

由于安全问题,Vapoursynth脚本将不会被自动检测,因此必须强制选择输入格式。对于ff* CLI工具,请添加-f vapoursynth到输入之前。-i yourscript.vpy.

39.25 x264

FFmpeg可以使用x264库进行H.264编码。

前往http://www.videolan.org/developers/x264.html并按照说明安装库。然后传递--enable-libx264到配置以启用它。

x264是根据GNU公共许可证版本2或更高版本发布的 (见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html了解详情),您必须将FFmpeg的许可证升级为GPL才能使用它。

39.26 x265

FFmpeg可以使用x265库进行HEVC编码。

前往http://x265.org/developers.html并按照说明安装库。然后传递--enable-libx265到配置以启用它。

x265是根据GNU公共许可证版本2或更高版本发布的 (见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html了解详情),您必须将FFmpeg的许可证升级为GPL才能使用它。

39.27 xavs

FFmpeg可以使用xavs库进行AVS编码。

前往http://xavs.sf.net/并按照说明安装库。然后传递--enable-libxavs到配置以启用它。

39.28 xavs2

FFmpeg可以使用xavs2库进行AVS2-P2/IEEE1857.4视频编码。

前往https://github.com/pkuvcl/xavs2并按照说明安装库。然后传递--enable-libxavs2到配置以启用它。

libxavs2是根据GNU公共许可证版本2或更高版本发布的 (见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html了解详情),您必须将FFmpeg的许可证升级为GPL才能使用它。

39.29 eXtra-fast Essential Video Encoder (XEVE)

FFmpeg可以使用XEVE库进行EVC视频编码。

前往https://github.com/mpeg5/xeve并按照说明安装XEVE库。然后传递--enable-libxeve到配置以启用它。

39.30 eXtra-fast Essential Video Decoder (XEVD)

FFmpeg可以使用XEVD库进行EVC视频解码。

前往https://github.com/mpeg5/xevd并按照说明安装XEVD库。然后传递--enable-libxevd到配置以启用它。

39.31 ZVBI

ZVBI是一种VBI解码库,FFmpeg可以使用它解码DVB电视文字页和DVB电视文字字幕。

前往http://sourceforge.net/projects/zapping/并按照说明安装库。然后传递--enable-libzvbi到配置以启用它。

40 支持的文件格式、编解码器或功能

您可以使用-formats-codecs选项获取详尽列表。

40.1 文件格式

FFmpeg通过libavformat库支持以下文件格式:

名称编码解码备注
3dostrX
4xmX4X Technologies格式,用于某些游戏。
8088flex TMVX
AAXXAudible增强音频格式,用于有声书。
AAXAudible格式2、3和4,用于有声书。
ACT语音X包含G.729音频
Adobe影片条XX
Audio IFF (AIFF)XX
American Laser Games MMXMultimedia format used in games like Mad Dog McCree.
3GPP AMRXX
Amazing Studio Packed Animation FileXMultimedia format used in game Heart Of Darkness.
Apple HTTP Live StreamingX
Artworx Data FormatX
Interplay ACMXAudio only format used in some Interplay games.
ADPXAudio format used on the Nintendo Gamecube.
AFCXAudio format used on the Nintendo Gamecube.
ADS/SS2XAudio format used on the PS2.
APNGXX
ASFXXAdvanced / Active Streaming Format.
ASTXXAudio format used on the Nintendo Wii.
AVIXX
AviSynthX
AVRXAudio format used on Mac.
AVSXMultimedia format used by the Creature Shock game.
Beam Software SIFFXAudio and video format used in some games by Beam Software.
Bethesda Softworks VIDXUsed in some games from Bethesda Softworks.
Binary textX
BinkXMultimedia format used by many games.
Bink AudioXAudio only multimedia format used by some games.
Bitmap Brothers JVXUsed in Z and Z95 games.
BRPXArgonaut Games format.
Brute Force & IgnoranceXUsed in the game Flash Traffic: City of Angels.
BFSTMXAudio format used on the Nintendo WiiU (based on BRSTM).
BRSTMXAudio format used on the Nintendo Wii.
BW64XBroadcast Wave 64bit.
BWFXX
codec2 (raw)XXMust be given -mode format option to decode correctly.
codec2 (.c2 files)XXContains header with version and mode info, simplifying playback.
CRI ADXXXAudio-only format used in console video games.
CRI AIXX
CRI HCAXAudio-only format used in console video games.
Discworld II BMVX
Interplay C93XUsed in the game Cyberia from Interplay.
Delphine Software International CINXMultimedia format used by Delphine Software games.
Digital Speech Standard (DSS)X
CD+GXVideo format used by CD+G karaoke disks
Phantom CineX
Commodore CDXLXAmiga CD video format
Core Audio FormatXXApple Core Audio Format
CRC testing formatX
Creative VoiceXXCreated for the Sound Blaster Pro.
CRYO APCXAudio format used in some games by CRYO Interactive Entertainment.
D-Cinema audioXX
Deluxe Paint AnimationX
DCSTRX
DFAXThis format is used in Chronomaster game
DirectDraw SurfaceX
DSD Stream File (DSF)X
DV videoXX
DXAXThis format is used in the non-Windows version of the Feeble Files game and different game cutscenes repacked for use with ScummVM.
Electronic Arts cdataX
Electronic Arts MultimediaXUsed in various EA games; files have extensions like WVE and UV2.
Ensoniq Paris Audio FileX
FFM (FFserver live feed)XX
Flash (SWF)XX
Flash 9 (AVM2)XXOnly embedded audio is decoded.
FLI/FLC/FLX animationX.fli/.flc files
Flash Video (FLV)XXMacromedia Flash video files
framecrc testing formatX
FunCom ISSXAudio format used in various games from FunCom like The Longest Journey.
G.723.1XX
G.726XBoth left- and right-justified.
G.729 BITXX
G.729 rawX
GENHXAudio format for various games.
GIF AnimationXX
GXFXXGeneral eXchange Format SMPTE 360M, used by Thomson Grass Valley playout servers.
HNMXOnly version 4 supported, used in some games from Cryo Interactive
iCEDraw FileX
ICOXXMicrosoft Windows ICO
id Quake II CIN videoX
id RoQXXUsed in Quake III, Jedi Knight 2 and other computer games.
IEC61937 encapsulationXX
IFFXInterchange File Format
IFVXA format used by some old CCTV DVRs.
iLBCXX
Interplay MVEXFormat used in various Interplay computer games.
Iterated Systems ClearVideoXI-frames only
IV8XA format generated by IndigoVision 8000 video server.
IVF (On2)XXA format used by libvpx
Internet Video RecordingX
IRCAMXX
LAFXLimitless Audio Format
LATMXX
LMLM4XUsed by Linux Media Labs MPEG-4 PCI boards
LOASXcontains LATM multiplexed AAC audio
LRCXX
LVFX
LXFXVR native stream format, used by Leitch/Harris’ video servers.
Magic Lantern Video (MLV)X
MatroskaXX
Matroska audioX
FFmpeg metadataXXMetadata in text format.
MAXIS XAXUsed in Sim City 3000; file extension .xa.
MCAXUsed in some games from Capcom; file extension .mca.
MD StudioX
Metal Gear Solid: The Twin SnakesX
Megalux FrameXUsed by Megalux Ultimate Paint
MobiClip MODSX
MobiClip MOFLEXX
Mobotix .mxgX
Monkey’s AudioX
Motion Pixels MVIX
MOV/QuickTime/MP4XX3GP, 3GP2, PSP, iPod variants supported
MP2XX
MP3XX
MPEG-1 SystemXXmuxed audio and video, VCD format supported
MPEG-PS (program stream)XXalso known as VOB file, SVCD and DVD format supported
MPEG-TS (transport stream)XXalso known as DVB Transport Stream
MPEG-4XXMPEG-4 is a variant of QuickTime.
MSFXAudio format used on the PS3.
Mirillis FIC videoXNo cursor rendering.
MIDI Sample Dump StandardX
MIME multipart JPEGX
MSN TCP webcamXUsed by MSN Messenger webcam streams.
MTVX
MusepackX
Musepack SV8X
Material eXchange Format (MXF)XXSMPTE 377M, used by D-Cinema, broadcast industry.
Material eXchange Format (MXF), D-10 MappingXXSMPTE 386M, D-10/IMX Mapping.
NC camera feedXNC (AVIP NC4600) camera streams
NIST SPeech HEader REsourcesX
Computerized Speech Lab NSPX
NTT TwinVQ (VQF)XNippon Telegraph and Telephone Corporation TwinVQ.
Nullsoft Streaming VideoX
NuppelVideoX
NUTXXNUT Open Container Format
OggXX
Playstation Portable PMPX
Portable Voice FormatX
RK Audio (RKA)X
TechnoTrend PVAXUsed by TechnoTrend DVB PCI boards.
QCPX
raw ADTS (AAC)XX
raw AC-3XX
raw AMR-NBX
raw AMR-WBX
raw APACX
raw aptXXX
raw aptX HDXX
raw BonkX
raw Chinese AVS videoXX
raw DFPWMXX
raw DiracXX
raw DNxHDXX
raw DTSXX
raw DTS-HDX
raw E-AC-3XX
raw EVCXX
raw FLACXX
raw GSMX
raw H.261XX
raw H.263XX
raw H.264XX
raw HEVCXX
raw Ingenient MJPEGX
raw MJPEGXX
raw MLPX
raw MPEGX
raw MPEG-1X
raw MPEG-2X
raw MPEG-4XX
raw NULLX
raw videoXX
raw id RoQX
raw OBUXX
raw OSQX
raw SBCXX
raw ShortenX
raw TAKX
raw TrueHDXX
raw VC-1XX
raw PCM A-lawXX
raw PCM mu-lawXX
raw PCM Archimedes VIDCXX
raw PCM signed 8 bitXX
raw PCM signed 16 bit big-endianXX
raw PCM signed 16 bit little-endianXX
raw PCM signed 24 bit big-endianXX
raw PCM signed 24 bit little-endianXX
raw PCM signed 32 bit big-endianXX
raw PCM signed 32 bit little-endianXX
raw PCM signed 64 bit big-endianXX
raw PCM signed 64 bit little-endianXX
raw PCM unsigned 8 bitXX
raw PCM unsigned 16 bit big-endianXX
raw PCM unsigned 16 bit little-endianXX
raw PCM unsigned 24 bit big-endianXX
raw PCM unsigned 24 bit little-endianXX
raw PCM unsigned 32 bit big-endianXX
raw PCM unsigned 32 bit little-endianXX
raw PCM 16.8 floating point little-endianX
raw PCM 24.0 floating point little-endianX
raw PCM floating-point 32 bit big-endianXX
raw PCM floating-point 32 bit little-endianXX
raw PCM floating-point 64 bit big-endianXX
raw PCM floating-point 64 bit little-endianXX
RDTX
REDCODE R3DXFile format used by RED Digital cameras, contains JPEG 2000 frames and PCM audio.
RealMediaXX
RedirectorX
RedSparkX
Renderware TeXture DictionaryX
Resolume DXVXXEncoding is only supported for the DXT1 (Normal Quality, No Alpha) texture format.
RF64X
RL2XAudio and video format used in some games by Entertainment Software Partners.
RPL/ARMovieX
Lego Mindstorms RSOXX
RSDX
RTMPXXOutput is performed by publishing stream to RTMP server
RTPXX
RTSPXX
Sample Dump eXchangeX
SAPXX
SBGX
SDNSX
SDPX
SERX
Digital Pictures SGAX
Sega FILM/CPKXX用于许多 Sega Saturn 游戏机的游戏。
Silicon Graphics MovieX
Sierra SOLX.sol 文件用于 Sierra Online 游戏。
Sierra VMDX用于 Sierra CD-ROM 游戏。
SmackerX多媒体格式,许多游戏使用。
SMJPEGXX用于某些 Loki 游戏移植版。
SMPTE 337M 封装X
SmushX在一些 LucasArts 游戏中使用的多媒体格式。
Sony OpenMG (OMA)XXSony Sonic Stage 和 Sony Vegas 所使用的音频格式。
Sony PlayStation STRX
Sony Wave64 (W64)XX
SoX 原生格式XX
SUN AU 格式XX
SUP 原始 PGS 字幕XX
SVAGXKonami PS2 游戏中使用的音频格式。
TDSCX
文本文件X
THPX用于 Nintendo GameCube。
Tiertex Limited SEQXTiertex 在 DOS CD-ROM 版游戏 Flashback 中使用的 .seq 文件。
True AudioXX
VAGX许多 Sony PS2 游戏使用的音频格式。
VC-1 测试比特流XX
Vidvox HapXX
VivoX
VPKXSony PS 游戏中使用的音频格式。
Marble WADYX
WAVXX
波形归档X
WavPackXX
WebMXX
Windows Televison (WTV)XX
Wing Commander III movieXOrigin's Wing Commander III 电脑游戏使用的多媒体格式。
Westwood Studios 音频XXWestwood Studios 游戏中使用的多媒体格式。
Westwood Studios VQAXWestwood Studios 游戏中使用的多媒体格式。
宽带单比特数据 (WSD)X
WVEX
Konami XMDX
XMVXXbox 游戏中使用的 Microsoft 视频容器。
XVAGXPS3 上使用的音频格式。
xWMAXXAudio 2 使用的 Microsoft 音频容器。
扩展二进制文本 (XBIN)X
YUV4MPEG 管道XX
Psygnosis YOPX

X表示该列中的功能(编码 / 解码)已支持。

40.2 图像格式

FFmpeg 可以读取和写入视频序列每帧的图像。 支持以下图像格式:

名称编码解码备注
.Y.U.VXX每个组件一个原始文件
Alias PIXXXAlias/Wavefront PIX 图像格式
动画 GIFXX
APNGXX动画便携网络图形
BMPXXMicrosoft BMP 图像
BRender PIXXArgonaut BRender 3D 引擎图像格式。
CRIXCintel RAW
DPXXX数字图片交换
EXRXOpenEXR
FITSXX柔性图像传输系统
HDRXXRadiance HDR RGBE 图像格式
IMGXGEM 栅格图像
JPEGXX不支持渐进 JPEG。
JPEG 2000XX
JPEG-LSXX
LJPEGX无损 JPEG
Media 100X
MSPXMicrosoft Paint 图像
PAMXXPAM 是带有 Alpha 支持的 PNM 扩展。
PBMXX便携式位图图像
PCDXPhotoCD
PCXXXPC Paintbrush
PFMXX便携式浮动图像
PGMXX便携式灰度图像
PGMYUVXXPGM 带有 YUV 4:2:0 的 U 和 V 组件
PGXXPGX 文件解码器
PHMXX便携式半浮点图像
PICXPictor/PC Paint
PNGXX便携式网络图形图像
PPMXX便携式像素图图像
PSDXPhotoshop
PTXXV.Flash PTX 格式
QOIXXQuite OK 图像格式
SGIXXSGI RGB 图像格式
Sun 栅格文件XXSun RAS 图像格式
TIFFXXYUV、JPEG 和某些扩展尚未支持。
Truevision TargaXXTarga (.TGA) 图像格式
VBNXXVizrt 二进制图像格式
WBMPXX无线应用协议位图图像格式
WebPEXWebP 图像格式,通过外部库 libwebp 支持编码
XBMXXX 位图图像格式
XFaceXXX-Face 图像格式
XPMXX PixMap 图像格式
XWDXXX Window Dump 图像格式

X表示该列中的功能(编码 / 解码)已支持。

E表示支持通过外部库提供。

40.3 视频编解码器

名称编码解码备注
4X MovieX用于某些电脑游戏。
8088flex TMVX
A64 多色模式X创建适合在 Commodore 64 上播放的视频(多色模式)。
Amazing Studio PAF 视频X
American Laser Games MMX用于游戏如 Mad Dog McCree。
Amuse Graphics MovieX
AMV 视频XX用于中国的 MP3 播放器。
ANSI/ASCII 艺术X
Apple Intermediate CodecX
Apple MJPEG-BX
Apple PixletX
Apple ProResXXfourcc: apch,apcn,apcs,apco,ap4h,ap4x
Apple QuickDrawXfourcc: qdrw
Argonaut VideoXUsed in some Argonaut games.
Asus v1XXfourcc: ASV1
Asus v2XXfourcc: ASV2
ATI VCR1Xfourcc: VCR1
ATI VCR2Xfourcc: VCR2
Auravision AuraX
Auravision Aura 2X
Autodesk Animator Flic videoX
Autodesk RLEXfourcc: AASC
AV1EESupported through external libraries libaom, libdav1d, librav1e and libsvtav1
Avid 1:1 10-bit RGB PackerXXfourcc: AVrp
AVS (Audio Video Standard) videoXVideo encoding used by the Creature Shock game.
AVS2-P2/IEEE1857.4EESupported through external libraries libxavs2 and libdavs2
AVS3-P2/IEEE1857.10ESupported through external library libuavs3d
AYUVXXMicrosoft uncompressed packed 4:4:4:4
Beam Software VBX
Bethesda VID videoXUsed in some games from Bethesda Softworks.
Bink VideoX
BitJazz SheerVideoX
Bitmap Brothers JV videoX
y41p Brooktree uncompressed 4:1:1 12-bitXX
Brooktree ProSumer VideoXfourcc: BT20
Brute Force & IgnoranceXUsed in the game Flash Traffic: City of Angels.
C93 videoXCodec used in Cyberia game.
CamStudioXfourcc: CSCD
CD+GXVideo codec for CD+G karaoke disks
CDXLXAmiga CD video codec
Chinese AVS videoEXAVS1-P2, JiZhun profile, encoding through external library libxavs
Delphine Software International CIN videoXCodec used in Delphine Software International games.
Discworld II BMV VideoX
CineForm HDXX
Canopus HQX
Canopus HQAX
Canopus HQXX
Canopus Lossless CodecX
CDToonsXCodec used in various Broderbund games.
CinepakX
Cirrus Logic AccuPakXXfourcc: CLJR
CPiA Video FormatX
Creative YUV (CYUV)X
DFAXCodec used in Chronomaster game.
DiracEXsupported though the native vc2 (Dirac Pro) encoder
Deluxe Paint AnimationX
DNxHDXXaka SMPTE VC3
Duck TrueMotion 1.0Xfourcc: DUCK
Duck TrueMotion 2.0Xfourcc: TM20
Duck TrueMotion 2.0 RTXfourcc: TR20
DV (Digital Video)XX
Dxtory capture formatX
Feeble Files/ScummVM DXAXCodec originally used in Feeble Files game.
Electronic Arts CMV videoXUsed in NHL 95 game.
Electronic Arts Madcow videoX
Electronic Arts TGV videoX
Electronic Arts TGQ videoX
Electronic Arts TQI videoX
Escape 124X
Escape 130X
EVC / MPEG-5 Part 1EEencoding and decoding supported through external libraries libxeve and libxevd
FFmpeg video codec #1XXlossless codec (fourcc: FFV1)
Flash Screen Video v1XXfourcc: FSV1
Flash Screen Video v2XX
Flash Video (FLV)XXSorenson H.263 used in Flash
FM Screen Capture CodecX
Forward UncompressedX
FrapsX
Go2MeetingXfourcc: G2M2, G2M3
Go2WebinarXfourcc: G2M4
Gremlin Digital VideoX
H.261XX
H.263 / H.263-1996XX
H.263+ / H.263-1998 / H.263 version 2XX
H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10EXencoding supported through external library libx264 and OpenH264
HEVCXXencoding supported through external library libx265 and libkvazaar
HNM version 4X
HuffYUVXX
HuffYUV FFmpeg variantXX
IBM UltimotionXfourcc: ULTI
id Cinematic videoXUsed in Quake II.
id RoQ videoXXUsed in Quake III, Jedi Knight 2, other computer games.
IFF ILBMXIFF interleaved bitmap
IFF ByteRun1XIFF run length encoded bitmap
Infinity IMM4X
Intel H.263X
Intel Indeo 2X
Intel Indeo 3X
Intel Indeo 4X
Intel Indeo 5X
Interplay C93XUsed in the game Cyberia from Interplay.
Interplay MVE videoXUsed in Interplay .MVE files.
J2KXX
Karl Morton’s video codecXCodec used in Worms games.
Kega Game Video (KGV1)XKega emulator screen capture codec.
LagarithX
LCEVC / MPEG-5 LCEVC / MPEG-5 Part 2Edecoding supported through external library liblcevc-dec
LCL (LossLess Codec Library) MSZHX
LCL (LossLess Codec Library) ZLIBEE
LEAD MCMPX
LOCOX
LucasArts SANM/SmushXUsed in LucasArts games / SMUSH animations.
lossless MJPEGXX
MagicYUV VideoXX
Mandsoft Screen Capture CodecX
Microsoft ATC ScreenXAlso known as Microsoft Screen 3.
Microsoft Expression Encoder ScreenXAlso known as Microsoft Titanium Screen 2.
Microsoft RLEXX
Microsoft Screen 1XAlso known as Windows Media Video V7 Screen.
Microsoft Screen 2XAlso known as Windows Media Video V9 Screen.
Microsoft Video 1X
MimicXUsed in MSN Messenger Webcam streams.
Miro VideoXLXfourcc: VIXL
MJPEG (Motion JPEG)XX
Mobotix MxPEG videoX
Motion Pixels videoX
MPEG-1 videoXX
MPEG-2 videoXX
MPEG-4 part 2XXlibxvidcore can be used alternatively for encoding.
MPEG-4 part 2 Microsoft variant version 1X
MPEG-4 part 2 Microsoft variant version 2XX
MPEG-4 part 2 Microsoft variant version 3XX
Newtek SpeedHQXX
Nintendo Gamecube THP videoX
NotchLCX
NuppelVideo/RTjpegXVideo encoding used in NuppelVideo files.
On2 VP3Xstill experimental
On2 VP4Xfourcc: VP40
On2 VP5Xfourcc: VP50
On2 VP6Xfourcc: VP60,VP61,VP62
On2 VP7Xfourcc: VP70,VP71
VP8EXfourcc: VP80, encoding supported through external library libvpx
VP9EXencoding supported through external library libvpx
Pinnacle TARGA CineWave YUV16Xfourcc: Y216
Q-team QPEGXfourccs: QPEG, Q1.0, Q1.1
QuickTime 8BPS videoX
QuickTime Animation (RLE) videoXXfourcc: ’rle ’
QuickTime Graphics (SMC)XXfourcc: ’smc ’
QuickTime video (RPZA)XXfourcc: rpza
R10K AJA Kona 10-bit RGB CodecXX
R210 Quicktime Uncompressed RGB 10-bitXX
Raw VideoXX
RealVideo 1.0XX
RealVideo 2.0XX
RealVideo 3.0Xstill far from ideal
RealVideo 4.0X
Renderware TXD (TeXture Dictionary)XTexture dictionaries used by the Renderware Engine.
RivaTuner VideoXfourcc: ’RTV1’
RL2 videoXused in some games by Entertainment Software Partners
ScreenPressorX
ScreenpressoX
Screen Recorder Gold CodecX
Sierra VMD videoXUsed in Sierra VMD files.
Silicon Graphics Motion Video Compressor 1 (MVC1)X
Silicon Graphics Motion Video Compressor 2 (MVC2)X
Silicon Graphics RLE 8-bit videoX
Smacker videoXVideo encoding used in Smacker.
SMPTE VC-1X
SnowXXexperimental wavelet codec (fourcc: SNOW)
Sony PlayStation MDEC (Motion DECoder)X
Sorenson Vector Quantizer 1XXfourcc: SVQ1
Sorenson Vector Quantizer 3Xfourcc: SVQ3
Sunplus JPEG (SP5X)Xfourcc: SP5X
TechSmith Screen Capture CodecXfourcc: TSCC
TechSmith Screen Capture Codec 2Xfourcc: TSC2
TheoraEXencoding supported through external library libtheora
Tiertex Limited SEQ videoXCodec used in DOS CD-ROM FlashBack game.
Ut VideoXX
v210 QuickTime uncompressed 4:2:2 10-bitXX
v308 QuickTime uncompressed 4:4:4XX
v408 QuickTime uncompressed 4:4:4:4XX
v410 QuickTime uncompressed 4:4:4 10-bitXX
VBLE Lossless CodecX
vMix VideoXfourcc: ’VMX1’
VMware Screen Codec / VMware VideoXCodec used in videos captured by VMware.
Westwood Studios VQA (Vector Quantized Animation) videoX
Windows Media ImageX
Windows Media Video 7XX
Windows Media Video 8XX
Windows Media Video 9Xnot completely working
Wing Commander III / XanXUsed in Wing Commander III .MVE files.
Wing Commander IV / XanXUsed in Wing Commander IV.
Winnov WNV1X
WMV7XX
YAMAHA SMAFXX
Psygnosis YOP VideoX
yuv4XXlibquicktime uncompressed packed 4:2:0
ZeroCodec Lossless VideoX
ZLIBXXpart of LCL, encoder experimental
Zip Motion Blocks VideoXXEncoder works only in PAL8.

X means that the feature in that column (encoding / decoding) is supported.

E means that support is provided through an external library.

40.4 音频编解码器

名称编码解码注释
8SVX 指数X
8SVX 斐波那契X
AACEXX通过内部编码器和外部库 libfdk-aac 支持编码
AAC+EIX通过外部库 libfdk-aac 支持编码
AC-3IXIX
ACELP.KELVINX
ADPCM 4X 电影X
ADPCM Yamaha AICAX
ADPCM AmuseGraphics MovieX
ADPCM Argonaut GamesXX
ADPCM CDROM XAX
ADPCM Creative TechnologyX16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
ADPCM Electronic ArtsX用于 EA 的各种游戏标题。
ADPCM Electronic Arts Maxis CDROM XSX用于《城市模拟3000》。
ADPCM Electronic Arts R1X
ADPCM Electronic Arts R2X
ADPCM Electronic Arts R3X
ADPCM Electronic Arts XASX
ADPCM G.722XX
ADPCM G.726XX
ADPCM IMA Acorn ReplayX
ADPCM IMA AMVXX用于 AMV 文件
ADPCM IMA Cunning DevelopmentsX
ADPCM IMA Electronic Arts EACSX
ADPCM IMA Electronic Arts SEADX
ADPCM IMA FuncomX
ADPCM IMA High Voltage Software ALPXX
ADPCM IMA Mobiclip MOFLEXX
ADPCM IMA QuickTimeXX
ADPCM IMA Simon & Schuster InteractiveXX
ADPCM IMA Ubisoft APMXX
ADPCM IMA Loki SDL MJPEGX
ADPCM IMA WAVXX
ADPCM IMA WestwoodX
ADPCM ISS IMAX用于 FunCom 游戏。
ADPCM IMA DialogicX
ADPCM IMA Duck DK3X用于部分 Sega Saturn 主机游戏。
ADPCM IMA Duck DK4X用于部分 Sega Saturn 主机游戏。
ADPCM IMA RadicalX
ADPCM MicrosoftXX
ADPCM MS IMAXX
ADPCM Nintendo Gamecube AFCX
ADPCM Nintendo Gamecube DTKX
ADPCM Nintendo THPX
ADPCM PlaystationX
ADPCM QT IMAXX
ADPCM SEGA CRI ADXXX用于 Sega Dreamcast 游戏。
ADPCM Shockwave FlashXX
ADPCM Sound Blaster Pro 2-bitX
ADPCM Sound Blaster Pro 2.6-bitX
ADPCM Sound Blaster Pro 4-bitX
ADPCM VIMAX用于 LucasArts SMUSH 动画。
ADPCM Konami XMDX
ADPCM Westwood Studios IMAXX用于 Westwood Studios 游戏如《命令与征服》。
ADPCM YamahaXX
ADPCM ZorkX
AMR-NBEX通过外部库 libopencore-amrnb 支持编码
AMR-WBEX通过外部库 libvo-amrwbenc 支持编码
Amazing Studio PAF 音频X
Apple 无损音频XXQuickTime fourcc 'alac'
aptXXX用于蓝牙 A2DP
aptX HDXX用于蓝牙 A2DP
ATRAC1X
ATRAC3X
ATRAC3+X
ATRAC9X
Bink 音频X用于许多游戏中的 Bink 和 Smacker 文件。
Bonk 音频X
CELTE解码通过外部库 libcelt 支持
codec2EE通过外部库 libcodec2 支持编码/解码
CRI HCAX
Delphine Software International CIN 音频X在 Delphine Software International 游戏中使用的编解码器。
DFPWMXX
数码语音标准 - 标准播放模式 (DSS SP)X
Discworld II BMV 音频X
COOKX除 5.1 版本外的所有版本支持。
DCA (DTS Coherent Acoustics)XX支持扩展:XCh, XXCH, X96, XBR, XLL, LBR(部分支持)
Dolby EX
DPCM 立方根-差分-精确X用于少量游戏。
DPCM GremlinX
DPCM id RoQXX用于《雷神之锤 III》、《绝地武士2》等其他电脑游戏。
DPCM Marble WADYX
DPCM InterplayX用于各种 Interplay 电脑游戏。
DPCM 平方根-差分-精确X用于各种游戏。
DPCM Sierra OnlineX用于 Sierra Online 游戏音频文件。
DPCM SolX
DPCM XanX用于 Origin 的《银河飞行IV AVI文件》。
DPCM Xilam DERFX
DSD (直接流数字),最小有效位最先X
DSD (直接流数字),最大有效位最先X
DSD (直接流数字),最小有效位最先,平面X
DSD (直接流数字),最大有效位最先,平面X
DSP Group TrueSpeechX
DST (直接流传输)X
DV 音频X
增强型 AC-3XX
EVRC (增强型可变速率编解码器)X
FLAC (自由无损音频编解码器)XIX
FTR 语音X
G.723.1XX
G.729X
GSMEXencoding supported through external library libgsm
GSM Microsoft variantEXencoding supported through external library libgsm
IAC (Indeo Audio Coder)X
iLBC (Internet Low Bitrate Codec)EEXencoding and decoding supported through external library libilbc
IMC (Intel Music Coder)X
Interplay ACMX
LC3EEsupported through external library liblc3
MACE (Macintosh Audio Compression/Expansion) 6:1X
Marian’s A-pac audioX
MI-SC4 (Micronas SC-4 Audio)X
MLP (Meridian Lossless Packing)XXUsed in DVD-Audio discs.
Monkey’s AudioX
MP1 (MPEG audio layer 1)IX
MP2 (MPEG audio layer 2)IXIXencoding supported also through external library TwoLAME
MP3 (MPEG audio layer 3)EIXencoding supported through external library LAME, ADU MP3 and MP3onMP4 also supported
MPEG-4 Audio Lossless Coding (ALS)X
MobiClip FastAudioX
Musepack SV7X
Musepack SV8X
Nellymoser AsaoXX
On2 AVC (Audio for Video Codec)X
OpusEXencoding supported through external library libopus
OSQ (Original Sound Quality)X
PCM A-lawXX
PCM mu-lawXX
PCM Archimedes VIDCXX
PCM signed 8-bit planarXX
PCM signed 16-bit big-endian planarXX
PCM signed 16-bit little-endian planarXX
PCM signed 24-bit little-endian planarXX
PCM signed 32-bit little-endian planarXX
PCM 32-bit floating point big-endianXX
PCM 32-bit floating point little-endianXX
PCM 64-bit floating point big-endianXX
PCM 64-bit floating point little-endianXX
PCM D-Cinema audio signed 24-bitXX
PCM signed 8-bitXX
PCM signed 16-bit big-endianXX
PCM signed 16-bit little-endianXX
PCM signed 24-bit big-endianXX
PCM signed 24-bit little-endianXX
PCM signed 32-bit big-endianXX
PCM signed 32-bit little-endianXX
PCM signed 16/20/24-bit big-endian in MPEG-TSX
PCM unsigned 8-bitXX
PCM unsigned 16-bit big-endianXX
PCM unsigned 16-bit little-endianXX
PCM unsigned 24-bit big-endianXX
PCM unsigned 24-bit little-endianXX
PCM unsigned 32-bit big-endianXX
PCM unsigned 32-bit little-endianXX
PCM SGAX
QCELP / PureVoiceX
QDesign Music Codec 1X
QDesign Music Codec 2XThere are still some distortions.
RealAudio 1.0 (14.4K)XXReal 14400 bit/s codec
RealAudio 2.0 (28.8K)XReal 28800 bit/s codec
RealAudio 3.0 (dnet)IXXReal low bitrate AC-3 codec
RealAudio LosslessX
RealAudio SIPR / ACELP.NETX
RK Audio (RKA)X
SBC (low-complexity subband codec)XXUsed in Bluetooth A2DP
ShortenX
Sierra VMD audioXUsed in Sierra VMD files.
Smacker audioX
SMPTE 302M AES3 audioXX
SonicXXexperimental codec
Sonic losslessXXexperimental codec
SpeexEEXsupported through external library libspeex
TAK (Tom’s lossless Audio Kompressor)X
True Audio (TTA)XX
TrueHDXXUsed in HD-DVD and Blu-Ray discs.
TwinVQ (VQF flavor)X
VIMAXUsed in LucasArts SMUSH animations.
ViewQuest VQCX
VorbisEXA native but very primitive encoder exists.
Voxware MetaSoundX
Waveform ArchiverX
WavPackXX
Westwood Audio (SND1)X
Windows Media Audio 1XX
Windows Media Audio 2XX
Windows Media Audio LosslessX
Windows Media Audio ProX
Windows Media Audio VoiceX
Xbox Media Audio 1X
Xbox Media Audio 2X

X means that the feature in that column (encoding / decoding) is supported.

E means that support is provided through an external library.

I means that an integer-only version is available, too (ensures high performance on systems without hardware floating point support).

40.5 Subtitle Formats

NameMuxingDemuxingEncodingDecoding
3GPP Timed TextXX
AQTitleXX
DVBXXXX
DVB teletextXE
DVDXXXX
JACOsubXXX
MicroDVDXXX
MPL2XX
MPsub (MPlayer)XX
PGSX
PJS (Phoenix)XX
RealTextXX
SAMIXX
Spruce format (STL)XX
SSA/ASSXXXX
SubRip (SRT)XXXX
SubViewer v1XX
SubViewerXX
TED Talks captionsXX
TTMLXX
VobSub (IDX+SUB)XX
VPlayerXX
WebVTTXXXX
XSUBXX

X means that the feature is supported.

E means that support is provided through an external library.

40.6 Network Protocols

NameSupport
AMQPE
fileX
FTPX
GopherX
GophersX
HLSX
HTTPX
HTTPSX
IcecastX
MMSHX
MMSTX
pipeX
Pro-MPEG FECX
RTMPX
RTMPEX
RTMPSX
RTMPTX
RTMPTEX
RTMPTSX
RTPX
SAMBAE
SCTPX
SFTPE
TCPX
TLSX
UDPX
ZMQE

X means that the protocol is supported.

E means that support is provided through an external library.

40.7 Input/Output Devices

NameInputOutput
ALSAXX
BKTRX
cacaX
DV1394X
Lavfi virtual deviceX
Linux framebufferXX
JACKX
LIBCDIOX
LIBDC1394X
OpenALX
OpenGLX
OSSXX
PulseAudioXX
SDLX
Video4Linux2XX
VfW captureX
X11 grabbingX
Win32 grabbingX

X means that input/output is supported.

40.8 Timecode

Codec/formatReadWrite
AVIXX
DVXX
GXFXX
MOVXX
MPEG1/2XX
MXFXX

41 See Also

ffplay, ffmpeg, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

42 Authors

The FFmpeg developers.

For details about the authorship, see the Git history of the project (https://git.ffmpeg.org/ffmpeg), e.g. by typing the command git log in the FFmpeg source directory, or browsing the online repository at https://git.ffmpeg.org/ffmpeg.

Maintainers for the specific components are listed in the file MAINTAINERS in the source code tree.

This document was generated using makeinfo.

Hosting provided by telepoint.bg