ffplay 文档

目录

1 概要

ffplay [选项] [输入_url]

2 描述

FFplay 是一个非常简单且可移植的媒体播放器,它使用 FFmpeg 库和 SDL 库。它主要用作各种 FFmpeg API 的测试平台。

3 选项

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

如果将 ‘i’ 附加到 SI 单位前缀,则完整的前缀将被解释为二进制倍数的单位前缀,它是基于 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 将复制所有流而不进行重新编码。

流指定符的可能形式为:

stream_index

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

stream_type[:additional_stream_specifier]

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

g:group_specifier[:additional_stream_specifier]

匹配具有指定符 group_specifier 的组中的流。如果使用了 additional_stream_specifier,则它匹配既是组的一部分又匹配 additional_stream_specifier 的流。group_specifier 可以是以下之一:

group_index

匹配具有此组索引的流。

#group_id 或 i:group_id

匹配具有此组 ID 的流。

p:program_id[:additional_stream_specifier]

匹配具有 id program_id 的程序中的流。如果使用了 additional_stream_specifier,则它匹配既是程序的一部分又匹配 additional_stream_specifier 的流。

#stream_id 或 i:stream_id

通过流 ID 匹配流(例如,MPEG-TS 容器中的 PID)。

m:key[:value]

匹配具有元数据标签 key 且具有指定值的流。如果未给出 value,则匹配包含具有任何值的给定标签的流。 keyvalue 中的冒号字符 ‘:’ 需要使用反斜杠进行转义。

disp:dispositions[:additional_stream_specifier]

匹配具有给定 disposition(s) 的流。dispositions 是一个或多个 disposition(由 -dispositions 选项打印)的列表,并用 ‘+’ 连接。

u

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

请注意,在 ffmpeg 中,按元数据匹配仅对输入文件有效。

3.2 通用选项

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

-L

显示许可证。

-h, -?, -help, --help [arg]

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

arg 的可能值为:

long

除了基本工具选项外,还打印高级工具选项。

full

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

decoder=decoder_name

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

encoder=encoder_name

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

demuxer=demuxer_name

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

muxer=muxer_name

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

filter=filter_name

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

bsf=bitstream_filter_name

打印名为 bitstream_filter_name 的比特流滤镜的详细信息。使用 -bsfs 选项获取所有比特流滤镜的列表。

protocol=protocol_name

打印名为 protocol_name 的协议的详细信息。使用 -protocols 选项获取所有协议的列表。

-version

显示版本。

-buildconf

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

-formats

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

-demuxers

显示可用的解复用器。

-muxers

显示可用的复用器。

-devices

显示可用的设备。

-codecs

显示 libavcodec 已知的所有编解码器。

请注意,在本文档中,“编解码器”一词用作更准确的媒体比特流格式的简写。

-decoders

显示可用的解码器。

-encoders

显示所有可用的编码器。

-bsfs

显示可用的比特流滤镜。

-protocols

显示可用的协议。

-filters

显示可用的 libavfilter 滤镜。

-pix_fmts

显示可用的像素格式。

-sample_fmts

显示可用的采样格式。

-layouts

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

-dispositions

显示流的配置。

-colors

显示已识别的颜色名称。

-sources device[,opt1=val1[,opt2=val2]...]

显示输入设备的自动检测到的源。某些设备可能会提供无法自动检测到的系统相关的源名称。不能假定返回的列表始终完整。

ffmpeg -sources pulse,server=192.168.0.4
-sinks device[,opt1=val1[,opt2=val2]...]

显示输出设备的自动检测到的接收器。某些设备可能会提供无法自动检测到的系统相关的接收器名称。不能假定返回的列表始终完整。

ffmpeg -sinks pulse,server=192.168.0.4
-loglevel [flags+]loglevel | -v [flags+]loglevel

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

可选的 flags 前缀可以包含以下值

repeat

表示不应将重复的日志输出压缩到第一行,并且将省略“最后一条消息重复了 n 次”行。

level

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

也可以单独使用标志,方法是添加“+”/“-”前缀来设置/重置单个标志,而不影响其他 flags 或更改 loglevel。当同时设置 flagsloglevel 时,最后一个 flags 值和 loglevel 之前需要一个“+”分隔符。

loglevel 是一个字符串或数字,包含以下值之一

quiet, -8

什么都不显示;保持静默。

panic, 0

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

fatal, 8

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

error, 16

显示所有错误,包括可以从中恢复的错误。

warning, 24

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

info, 32

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

verbose, 40

info 相同,但更详细。

debug, 48

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

trace, 56

例如,要启用重复的日志输出,添加 level 前缀,并将 loglevel 设置为 verbose

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

另一个示例,启用重复的日志输出,而不影响当前 level 前缀标志或 loglevel 的状态

ffmpeg [...] -loglevel +repeat

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

-report

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

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

识别以下选项

file

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

level

使用数值设置日志详细程度(请参阅 -loglevel)。

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

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
特定处理器
pentium2
pentium3
pentium4
k6
k62
athlon
athlonxp
k8
-cpucount count (全局)

覆盖 CPU 计数的检测。此选项用于测试。除非您知道自己在做什么,否则请勿使用它。

ffmpeg -cpucount 2
-max_alloc bytes

设置 ffmpeg 的 malloc 函数族在堆上分配块的最大大小限制。使用此选项时请极其谨慎。如果您不完全理解这样做的全部后果,请不要使用。默认值为 INT_MAX。

3.3 AVOptions

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

通用

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

私有

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

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

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

所有编解码器 AVOptions 都是针对每个流的,因此应该将流说明符附加到它们。

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 语法不能用于布尔 AVOptions,请使用 -option 0/-option 1

注意:通过在选项名称前添加 v/a/s 来指定每个流 AVOptions 的旧的、未记录的方式现在已经过时,很快将被删除。

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

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

-volume

设置启动音量。0 表示静音,100 表示不进行音量降低或放大。负值被视为 0,高于 100 的值被视为 100。

-f 格式

强制格式。

-window_title 标题

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

-left 标题

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

-top 标题

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

-loop 次数

循环播放电影 <次数> 次。0 表示永远循环。

-showmode 模式

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

0, video

显示视频

1, waves

显示音频波形

2, rdft

使用 RDFT((逆)实离散傅立叶变换)显示音频频段

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

您可以通过按键交互式循环浏览可用的显示模式:w.

-vf 滤镜图

创建由 滤镜图 指定的滤镜图,并使用它来过滤视频流。

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

您可以多次指定此参数,并通过按键来循环浏览指定的滤镜图以及显示模式:w.

-af 滤镜图

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

-i 输入 URL

读取 输入 URL

3.5 高级选项

-stats

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

-fast

不符合规范的优化。

-genpts

生成 pts。

-sync 类型

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

-ast 音频流说明符

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

-vst 视频流说明符

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

-sst 字幕流说明符

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

-autoexit

视频播放完成后退出。

-exitonkeydown

如果按下任何键则退出。

-exitonmousedown

如果按下任何鼠标按钮则退出。

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

强制为由 media_specifier 标识的流指定特定的解码器实现,media_specifier 可以取值 a (音频)、v (视频) 和 s (字幕)。

-acodec codec_name

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

-vcodec codec_name

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

-scodec codec_name

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

-autorotate

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

-framedrop

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

-infbuf

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

-filter_threads nb_threads

定义用于处理过滤器管道的线程数。每个管道将生成一个线程池,其中包含这么多线程可用于并行处理。默认值为 0,表示线程数将由可用 CPU 的数量确定。

-enable_vulkan

使用 Vulkan 渲染器而不是 SDL 内置渲染器。取决于 libplacebo。

-vulkan_params

使用以 ":" 分隔的 key=value 对列表进行 Vulkan 配置。

-hwaccel

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

3.6 播放时

q, ESC

退出。

f

切换全屏。

p, SPC

暂停。

m

切换静音。

9, 0
/, *

分别降低和增大音量。

a

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

v

循环切换视频通道。

t

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

c

循环切换节目。

w

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

s

步进到下一帧。

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

left/right

向后/向前搜索 10 秒。

down/up

向后/向前搜索 1 分钟。

page down/page up

搜索到上一章/下一章。或者如果没有章节,则向后/向前搜索 10 分钟。

右键单击鼠标

搜索到文件中与宽度分数对应的百分比位置。

鼠标左键双击

切换全屏。

4 语法

本节介绍了 FFmpeg 库和工具使用的语法和格式。

4.1 引号和转义

除非明确指定,否则 FFmpeg 采用以下引号和转义机制。应用以下规则

  • '”和“\”是特殊字符(分别用于引用和转义)。除此之外,根据使用转义和引用的特定语法,可能还有其他特殊字符。
  • 特殊字符通过在其前面添加“\”来转义。
  • 所有用“''”括起来的字符都按字面包含在解析的字符串中。引号字符“'”本身不能被引用,因此您可能需要关闭引号并对其进行转义。
  • 除非转义或引用,否则解析的字符串将删除开头和结尾的空格。

请注意,当使用命令行或脚本时,您可能需要添加第二级转义,这取决于所采用的 Shell 语言的语法。

定义在 libavutil/avstring.h 中的函数 av_get_token 可以用于根据上述规则解析引用或转义的标记。

FFmpeg 源代码树中的工具 tools/ffescape 可用于自动引用或转义脚本中的字符串。

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

如果值为 "now",则采用当前时间。

时间是当地时间,除非附加 Z,在这种情况下,它被解释为 UTC。如果未指定年-月-日部分,则采用当前的年-月-日。

4.3 时间长度

有两种接受的语法来表示持续时间。

[-][HH:]MM:SS[.m...]

HH 表示小时数,MM 表示分钟数(最多 2 位数字),SS 表示秒数(最多 2 位数字)。末尾的 m 表示 SS 的十进制值。

[-]S+[.m...][s|ms|us]

S 表示秒数,带有可选的十进制部分 m。可选的字面后缀“s”、“ms”或“us”表示将值分别解释为秒、毫秒或微秒。

在两个表达式中,可选的“-”表示负持续时间。

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 视频尺寸

指定源视频的大小,它可以是 widthxheight 形式的字符串,或大小缩写的名称。

识别以下缩写

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]` 序列,可能后跟 @ 和一个表示 alpha 分量的字符串。

alpha 分量可以是 "0x" 后跟十六进制数或介于 0.0 和 1.0 之间的十进制数组成的字符串,它表示不透明度值('0x00' 或 '0.0' 表示完全透明,'0xff' 或 '1.0' 表示完全不透明)。如果未指定 alpha 分量,则假定为 '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

9.1.6

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

hexadecagonal

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

binaural

BIL+BIR

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” 开头的十六进制数(请参阅 libavutil/channel_layout.h 中的 AV_CH_* 宏)。

在 libavutil 版本 53 之前,用于指定声道数量的尾随字符 “c” 是可选的,但现在是必需的,而声道布局掩码也可以指定为十进制数(当且仅当后面没有 “c” 或 “C” 时)。

另请参阅 libavutil/channel_layout.h 中定义的函数 av_channel_layout_from_string

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)

返回 xminmax 之间裁剪的值。

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)

计算 xy 次幂,等效于 "(x)^(y)"。

print(t)
print(t, l)

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

random(idx)

返回 0.0 到 1.0 之间的伪随机值。 idx 是用于保存种子/状态的内部变量的索引,该索引可以使用 st(idx) 预先存储。

要初始化种子,您需要在索引为 idx 的内部变量中存储种子值作为 64 位无符号整数。

例如,要在索引为 0 的内部变量中存储值为 42 的种子并打印几个随机值

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

返回 minmax 之间的伪随机值。 idx 是用于保存种子/状态的内部变量的索引,该索引可以使用 st(idx) 预先存储。

要初始化种子,您需要在索引为 idx 的内部变量中存储种子值作为 64 位无符号整数。

root(expr, max)

找到一个输入值,使得以 ld(0) 作为参数的 expr 所代表的函数在区间 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) 访问的各种输入值多次计算。如果未指定 idx,则假定为 0。

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

time(0)

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

trunc(expr)

将表达式 expr 的值向零舍入到最接近的整数。例如,"trunc(-1.5)" 是 "-1.0"。

while(cond, expr)

当表达式 cond 非零时,计算表达式 expr,并返回最后一次 expr 计算的值,如果 cond 始终为假,则返回 NAN。

以下常量可用

PI

单位圆盘的面积,约为 3.14

E

exp(1)(欧拉数),约为 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.h API 进行编程使用。

以下是支持的选项列表

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

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

ab 整数 (编码,音频)

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

bt 整数 (编码,视频)

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

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

将全局头放在 extradata 中,而不是每个关键帧中。

bitexact

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

aic

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

ilme

应用隔行运动估计。

cgop

使用封闭 GOP。

output_corrupt

即使是潜在的损坏帧也输出。

time_base 有理数

设置编解码器时间基。

它是表示帧时间戳的基本时间单位(以秒为单位)。对于固定帧率的内容,时间基应为 1 / 帧率,并且时间戳增量应始终为 1。

g 整数 (编码,视频)

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

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

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

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

设置音频通道数。

cutoff 整数 (编码,音频)

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

frame_size 整数 (编码,音频)

设置音频帧大小。

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

frame_number 整数

设置帧号。

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

设置视频量化器缩放压缩 (VBR)。它在码率控制公式中用作常量。默认 rc_eq 的建议范围:0.0-1.0。

qblur 浮点数 (编码,视频)

设置视频量化器缩放模糊 (VBR)。

qmin 整数 (编码,视频)

设置最小视频量化器标度 (VBR)。必须在 -1 和 69 之间,默认值为 2。

qmax 整数 (编码,视频)

设置最大视频量化器标度 (VBR)。必须在 -1 和 1024 之间,默认值为 31。

qdiff 整数 (编码,视频)

设置量化器标度之间的最大差异 (VBR)。

bf 整数 (编码,视频)

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

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

默认值为 0。

b_qfactor 浮点数 (编码,视频)

设置 P 帧和 B 帧之间的 qp 系数。

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

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

可能的值

autodetect
xvid_ilace

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

ump4

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

no_padding

填充错误(自动检测)

amv
qpel_chroma
std_qpel

旧标准 qpel(每个 fourcc/版本自动检测)

qpel_chroma2
direct_blocksize

direct-qpel-blocksize 错误(每个 fourcc/版本自动检测)

edge

边缘填充错误(每个 fourcc/版本自动检测)

hpel_chroma
dc_clip
ms

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

trunc

截断帧

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

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

可能的值

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

b_qoffset 浮点数 (编码,视频)

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

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

设置错误检测标志。

可能的值

crccheck

验证嵌入式 CRC

bitstream

检测比特流规范偏差

buffer

检测不正确的比特流长度

explode

在检测到次要错误时中止解码

ignore_err

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

careful

将违反规范且在野外未见的事物视为错误

compliant

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

aggressive

将健全的编码器不应该做的事情视为错误

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

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

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

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

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

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

i_qfactor 浮点数 (编码,视频)

设置 P 帧和 I 帧之间的 QP 系数。

i_qoffset 浮点数 (编码,视频)

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

dct 整数 (编码,视频)

设置 DCT 算法。

可能的值

auto

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

fastint

快速整数 DCT

int

精确整数 DCT

mmx
altivec
faan

浮点 AAN DCT

lumi_mask 浮点数 (编码,视频)

对高亮区域的压缩强度大于中等区域。

tcplx_mask 浮点数 (编码,视频)

设置时间复杂度掩蔽。

scplx_mask 浮点数 (编码,视频)

设置空间复杂度掩蔽。

p_mask 浮点数 (编码,视频)

设置帧间掩蔽。

dark_mask 浮点数 (编码,视频)

对阴暗区域的压缩强度大于中等区域。

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

选择 IDCT 实现方式。

可能的值

auto
int
simple
simplemmx
simpleauto

自动选择与 simple IDCT 兼容的 IDCT

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点 AAN IDCT

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

设置错误隐藏策略。

可能的值

guess_mvs

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

deblock

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

favor_inter

优先从前一帧而不是当前帧进行预测

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

设置采样纵横比。

sar 有理数 (编码,视频)

设置采样纵横比。 aspect 的别名。

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

打印特定的调试信息。

可能的值

pict

图像信息

rc

速率控制

bitstream
mb_type

宏块 (MB) 类型

qp

每个块的量化参数 (QP)

dct_coeff
green_metadata

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

skip
startcode
er

错误识别

mmco

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

bugs
buffers

图像缓冲区分配

thread_ops

线程操作

nomc

跳过运动补偿

cmp 整数 (编码,视频)

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

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

该块所需的比特数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

保噪声平方差之和

w53

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

w97

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

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

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

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

该块所需的比特数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

保噪声平方差之和

w53

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

w97

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

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

设置宏块比较函数。

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

该块所需的比特数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

保噪声平方差之和

w53

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

w97

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

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

设置隔行 DCT 比较函数。

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

该块所需的比特数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

保噪声平方差之和

w53

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

w97

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

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

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

(1024, INT_MAX)

全运动估计(最慢)

(768, 1024]

umh 运动估计

(512, 768]

hex 运动估计

(256, 512]

l2s 菱形运动估计

[2,256]

var 菱形运动估计

(-1, 2)

小菱形运动估计

-1

有趣的菱形运动估计

(INT_MIN, -1)

sab 菱形运动估计

last_pred 整数 (编码,视频)

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

precmp 整数 (编码,视频)

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

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

该块所需的比特数

rd

速率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

保噪声平方差之和

w53

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

w97

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

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

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

subq 整数 (编码,视频)

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

me_range 整数 (编码,视频)

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

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

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

可能的值

simple

使用 mbcmp(默认)

bits

使用最少比特

rd

使用最佳速率失真

rc_init_occupancy 整数 (编码,视频)

设置解码开始前应加载到 rc 缓冲区的比特数。

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

可能的值

fast

允许不符合规范的加速技巧。

noout

跳过比特流编码。

ignorecrop

忽略来自 sps 的裁剪信息。

local_header

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

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 解码器支持此功能。

enhancements

通过帧边数据导出图像增强元数据,例如 LCEVC(请参阅 AV_FRAME_DATA_LCEVC)。

threads integer (解码/编码,视频)

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

可能的值

auto, 0

自动选择要设置的线程数

默认值为 ‘auto’。

dc integer (编码,视频)

设置 intra_dc_precision。

nssew integer (编码,视频)

设置 nsse 权重。

skip_top integer (解码,视频)

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

skip_bottom integer (解码,视频)

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

profile integer (编码,音频,视频)

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

level integer (编码,音频,视频)

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

可能的值

unknown
lowres integer (解码,音频,视频)

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

mblmin integer (编码,视频)

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

mblmax integer (编码,视频)

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

skip_loop_filter integer (解码,视频)
skip_idct integer (解码,视频)
skip_frame integer (解码,视频)

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

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

可能的值

none

不丢弃任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

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

nointra

丢弃除 I 帧外的所有帧。

all

丢弃所有帧。

默认值为 ‘default’。

bidir_refine integer (编码,视频)

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

keyint_min integer (编码,视频)

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

refs integer (编码,视频)

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

trellis integer (编码,音频,视频)

设置率失真最优量化。

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

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

rc_max_vbv_use float (编码,视频)
rc_min_vbv_use float (编码,视频)
color_primaries integer (解码/编码,视频)

可能的值

bt709

BT.709

bt470m

BT.470 M

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

film

电影

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

color_trc integer (解码/编码,视频)

可能的值

bt709

BT.709

gamma22

BT.470 M

gamma28

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

linear

线性

log
log100

对数

log_sqrt
log316

对数平方根

iec61966_2_4
iec61966-2-4

IEC 61966-2-4

bt1361
bt1361e

BT.1361

iec61966_2_1
iec61966-2-1

IEC 61966-2-1

bt2020_10
bt2020_10bit

BT.2020 - 10 位

bt2020_12
bt2020_12bit

BT.2020 - 12 位

smpte2084

SMPTE ST 2084

smpte428
smpte428_1

SMPTE ST 428-1

arib-std-b67

ARIB STD-B67

colorspace integer (解码/编码,视频)

可能的值

rgb

RGB

bt709

BT.709

fcc

FCC

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

ycocg

YCOCG

bt2020nc
bt2020_ncl

BT.2020 NCL

bt2020c
bt2020_cl

BT.2020 CL

smpte2085

SMPTE 2085

chroma-derived-nc

色度派生的 NCL

chroma-derived-c

色度派生的 CL

ictcp

ICtCp

color_range integer (解码/编码,视频)

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

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

chroma_sample_location integer (解码/编码,视频)

可能的值

left
center
topleft
top
bottomleft
bottom
log_level_offset integer

设置日志级别偏移量。

slices integer (编码,视频)

切片数,用于并行编码。

thread_type flags (解码/编码,视频)

选择要使用的多线程方法。

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

可能的值

slice

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

仅当视频使用切片编码时,使用切片的多线程才有效。

frame

一次解码多个帧。

默认值为 ‘slice+frame’。

audio_service_type integer (编码,音频)

设置音频服务类型。

可能的值

ma

主音频服务

ef

特效

vi

视觉障碍

hi

听力障碍

di

对白

co

解说

em

紧急

vo

画外音

ka

卡拉 OK

request_sample_fmt sample_fmt (解码,音频)

设置音频解码器应首选的采样格式。默认值为 none

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

设置输入字幕的字符编码。

field_order 场序 (视频)

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

progressive

逐行扫描视频

tt

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

bb

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

tb

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

bt

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

skip_alpha 布尔值 (解码,视频)

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

codec_whitelist 列表 (输入)

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

dump_separator 字符串 (输入)

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

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

每张图像的最大像素数。此值可用于避免由于大图像导致的内存不足错误。

apply_cropping 布尔值 (解码,视频)

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

7 解码器

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

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

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

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

8 视频解码器

下面描述了一些当前可用的视频解码器。

8.1 av1

AOMedia Video 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 动态更改的情况很有用。

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

请注意,如果您正在使用 ffmpeg CLI 工具,则应使用其手册中记录的视图说明符,而不是此处记录的选项。

8.2.1 选项

view_ids (MV-HEVC)

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

view_ids_available (MV-HEVC)

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

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

view_pos_available (MV-HEVC)

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

view_ids_available 相同的有效性限制适用于此选项。

8.3 rawvideo

原始视频解码器。

此解码器解码 rawvideo 流。

8.3.1 选项

top 顶场优先

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

-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

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

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

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

8.7.1 选项

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

要获得更准确和更详尽的 libxevd 选项文档,请调用命令 xevd_app --help 或查阅 libxevd 文档。

threads (线程)

强制使用特定数量的线程

8.8 QSV 解码器

Intel QuickSync 视频解码器系列(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(自动检测)。对于 BOXX 文件中出现的无跨距 v210,可以使用特殊的 -1 值。

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 解码 Internet 低比特率编解码器 (iLBC) 音频编解码器。需要在配置期间存在 libilbc 标头和库。您需要使用 --enable-libilbc 显式配置构建。

9.6.1 选项

libilbc 包装器支持以下选项。

增强

设置为 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 布尔值

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

默认情况下启用。

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

没有格式的简单基于文本的输出。

默认值与 libaribb24 解码器相同,为 ass。一些现有的播放器(例如,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 字体名称[,字体名称2,...]

指定用于 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 布尔值

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

默认值为 false

-replace_drcs boolean

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

默认值为 true

-replace_msz_ascii boolean

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

默认值为 true

-replace_msz_japanese boolean

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

默认值为 true

-replace_msz_glyph boolean

指定如果字体支持,是否将 MSZ(中等尺寸;半宽)字符替换为半宽字形。此选项在 FreeType 或 DirectWrite 渲染器下,且使用符合 Adobe-Japan1 标准的字体时有效。例如,IBM Plex Sans JP、Morisawa BIZ UDGothic、Morisawa BIZ UDMincho、Yu Gothic、Yu Mincho 和 Meiryo。

默认值为 true

-canvas_size image_size

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

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

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

ffplay -sub_type bitmap -canvas_size 1920x1080 MPEG.TS

将 ARIB 字幕嵌入转码后的视频中

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

10.3 dvbsub

10.3.1 选项

compute_clut
-2

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

-1

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

0

永远不计算 CLUT

1

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

dvb_substream

选择 DVB 子流,如果为 -1,则选择所有子流,这是默认值。

10.4 dvdsub

此编解码器解码 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 显式配置构建。

10.5.1 选项

txt_page

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

txt_default_region

设置用于解码的默认字符集,取值范围为 0 到 87(请参阅 ETS 300 706,第 15 节,表 32)。默认值为 -1,这不会覆盖 libzvbi 默认值。对于某些无法发出正确字符集的旧版 1.0 传输,此选项是必需的。

txt_chop_top

丢弃顶部的图文电视行。默认值为 1。

txt_format

指定解码字幕的格式。

bitmap

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

text

没有格式的简单基于文本的输出。

ass

格式化的 ASS 输出,字幕页面和图文电视页面以不同的样式返回,字幕页面被剥离为文本,但会努力保持文本对齐和格式。

txt_left

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

txt_top

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

txt_chop_spaces

从生成的文本中删除开头和结尾的空格,并删除空行。此选项对于基于图文电视的字幕非常有用,在这些字幕中,由于双倍大小的图文电视字符,在行首或行尾可能存在空格,或者在字幕行之间可能存在空行。默认值为 1。

txt_duration

设置解码后的图文电视页面或字幕的显示持续时间,以毫秒为单位。默认值为 -1,表示无限期或直到下一个字幕事件到来。

txt_transparent

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

txt_opacity

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

11 比特流过滤器

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

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

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

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 的 TU 的开头插入一个 TD。

remove

从每个包含 TD 的 TU 的开头删除 TD。

color_primaries
transfer_characteristics
matrix_coefficients

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

color_range

设置流中的颜色范围(参见 AV1 第 6.4.2 节;请注意,对于使用 BT.709 原色、sRGB 传递特性和恒等(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 比特流中操作杜比视界元数据,可以选择启用元数据压缩。

strip

如果启用,则从流中剥离所有杜比视界元数据(配置记录 + RPU 数据块)。

compression

要启用的压缩级别。

none

不进行元数据压缩。

limited

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

extended

扩展的元数据压缩。设备不需要支持此项。请注意,此级别目前在 libavcodec 中的行为与 ‘limited’ 相同。

11.6 dump_extra

将额外数据添加到已过滤数据包的开头,除非所述数据包已经完全以要添加的额外数据开头。

freq

附加参数指定应筛选哪些数据包。它接受以下值:

k
keyframe

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

e
all

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

如果未指定,则假定为 ‘k’。

例如,以下 ffmpeg 命令强制在 libx264 编码器生成的 H.264 数据包中使用全局头(从而禁用单独的数据包头),但通过将存储在额外数据中的头添加到关键帧数据包来纠正它们

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

特定的错误状态代码

请参阅 http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf 的第 44-46 页或第 5.5 节

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 单元类型 (nal_unit_type)(请参阅 H.264 和 HEVC 规范中的表 7-1 或 H.266 规范中的表 5)、JPEG 的标记值(不带 0xFF 前缀)和 MPEG-2 的起始码(不带起始码前缀)(即 0x000001 之后的字节)。对于 VP8 和 VP9,每个单元的类型都为零。

此转换不会更改额外数据,但请注意,如果流包含内联参数集,则如果删除这些参数集,输出可能无法使用。

例如,要从 H.264 流中删除所有非 VCL NAL 单元

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

默认值为 pass。

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 参数中设置刻度率(time_scale / num_units_in_tick)。这是流中可表示的最小时间单位,在许多情况下表示流的场速率(帧速率的两倍)。

fixed_frame_rate_flag

设置流是否具有固定帧率 - 通常这表示帧率正好是时钟频率的一半,但确切含义取决于隔行扫描和图像结构(请参阅 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

默认值为 pass。

插入模式与 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

这会将特定的修复应用于某些包含冗余 PPS 的蓝光 BDMV H264 流。PPS 修改了流的不相关参数,这会混淆需要正确额外数据的其他转换。

在这些受影响的流中使用的编码器在整个流中添加了额外的 PPS,从而改变了初始 QP 以及是否启用了加权预测。这会在将流复制到全局头容器后导致问题,因为起始 PPS 不适合流的其余部分。例如,一个副作用是,在出现新的 PPS 之前,搜索将返回乱码输出。

此 BSF 删除额外的 PPS 并重写切片头,以便流在全局头中使用单个前导 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 参数中设置时钟频率(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 值(例如,级别 5.1 的 ‘153’),或特殊名称 ‘auto’,表示过滤器应尝试从输入流属性中猜测级别。

11.16 hevc_mp4toannexb

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

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

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

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 编解码器,并且对于使用适当的 -tag:v 的 Final Cut Pro 7 和更高版本可能不需要。

例如,要将 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,或者至少是具有 MJPG 四字符码的 AVI 中的 MJPEG,是受限的 JPEG,具有固定的 - 且*省略*的 - Huffman 表。JPEG 必须是 YCbCr 色彩空间,必须是 4:2:2,并且必须使用基本的 Huffman 编码,而不是算术或渐进式编码。... 你确实可以提取 MJPEG 帧并使用常规 JPEG 解码器对其进行解码,但你必须在它们前面加上 DHT 段,否则解码器将不知道如何解压缩数据。OpenDML 规范中给出了必要的精确表。”

此码流过滤器会修补从 MJPEG 流中提取的帧的头部(带有 AVI1 头部 ID 且缺少 DHT 段),以生成完全合格的 JPEG 图像。

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 子系统的解决方法。 它们占用更多空间,可能会导致轻微的 AV 同步问题,需要更多的 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=4drop=-4 相同。 如果还指定了 drop,则忽略此项。

amountdrop 都接受包含以下变量的表达式

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。

pad, p

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

frame_rate, r

此选项使过滤器每秒输出固定数量的数据包,而不是每个数据包固定数量的样本。 如果音频采样率不能被帧率整除,则样本数将不是恒定的,但会略有变化,以便每个数据包尽可能接近帧边界开始。 使用此选项的优先级高于 nb_out_samples

您可以使用 frame_rate 选项为 NTSC 帧率生成众所周知的 1602-1601-1602-1601-1602 48kHz 音频模式。

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)需要此操作。

11.27 prores_metadata

修改嵌入在 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

设置 duration 的表达式。

time_base

设置输出时基。

表达式通过 eval API 计算,可以包含以下常量

N

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

TS

tsdts 选项的情况下,表示输入中的解复用时间戳;在 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 工具中指定 -option value 来设置选项,或者通过在 AVFormatContext 选项中显式设置值,或者使用 libavutil/opt.h API 进行编程使用。

支持的选项列表如下

avioflags flags (输入/输出)

可能的值

direct

减少缓冲。

probesize integer (输入)

设置探测大小(以字节为单位),即用于分析以获取流信息的数据大小。较高的值将能够在流中分散信息的情况下检测到更多信息,但会增加延迟。必须是不小于 32 的整数。默认为 5000000。

max_probe_packets integer (输入)

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

packetsize integer (输出)

设置数据包大小。

fflags flags

设置格式标志。有些标志仅针对有限的格式实现。

输入文件的可能值

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 integer (输入)

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

analyzeduration integer (输入)

指定分析多少微秒来探测输入。较高的值将能够检测到更准确的信息,但会增加延迟。它默认为 5,000,000 微秒 = 5 秒。

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

设置解密密钥。

indexmem integer (输入)

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

rtbufsize integer (输入)

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

fdebug flags (输入/输出)

打印特定的调试信息。

可能的值

ts
max_delay integer (输入/输出)

设置复用或解复用的最大延迟(以微秒为单位)。

fpsprobesize integer (输入)

设置用于探测 fps 的帧数。

audio_preload integer (输出)

设置音频数据包应提前交错的微秒数。

chunk_duration integer (输出)

设置每个数据块的微秒时长。

chunk_size integer (输出)

设置每个数据块的字节大小。

err_detect, f_err_detect flags (输入)

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

可能的值

crccheck

验证嵌入的 CRC。

bitstream

检测比特流规范偏差。

buffer

检测不正确的比特流长度。

explode

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

careful

将违反规范但在实际应用中未出现的情况视为错误。

compliant

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

aggressive

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

max_interleave_delta integer (输出)

设置交错的最大缓冲时长。时长以微秒表示,默认为 10000000(10 秒)。

为确保所有流正确交错,libavformat 会等待直到它至少拥有每个流的一个数据包,然后才将任何数据包写入输出文件。当某些流“稀疏”(即,连续数据包之间存在较大间隔)时,这可能会导致过度缓冲。

此字段指定多路复用队列中第一个数据包和最后一个数据包之间时间戳的最大差异,超过此差异时,无论是否已为所有流排队数据包,libavformat 都将输出一个数据包。

如果设置为 0,libavformat 将继续缓冲数据包,直到它拥有每个流的数据包,而不管缓冲数据包之间时间戳的最大差异。

use_wallclock_as_timestamps integer (输入)

如果设置为 1,则使用系统时间作为时间戳。默认为 0。

avoid_negative_ts integer (输出)

可能的值

make_non_negative

移动时间戳以使其为非负数。另请注意,这仅影响前导负时间戳,而不影响非单调的负时间戳。

make_zero

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

auto (默认)

在目标格式需要时启用移动。

disabled

禁用时间戳移动。

启用移动时,所有输出时间戳都将移动相同的量。与不移动的情况相比,音频、视频和字幕的去同步和相对时间戳差异会保留。

skip_initial_bytes integer (输入)

如果设置为 1,则在读取标头和帧之前跳过指定数量的字节。默认为 0。

correct_ts_overflow integer (输入)

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

flush_packets integer (输出)

在每个数据包之后刷新底层 I/O 流。默认为 -1(自动),这意味着底层协议将决定是否刷新,1 表示启用刷新,具有降低延迟的效果,0 表示禁用刷新,在某些情况下可能会提高 I/O 吞吐量。

output_ts_offset offset (输出)

设置输出时间偏移量。

offset 必须是时间持续时间规范,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分

复用器将偏移量添加到输出时间戳。

指定正偏移量意味着相应的流将延迟 offset 中指定的时间持续时间。默认值为 0(表示不应用偏移量)。

format_whitelist list (输入)

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

dump_separator 字符串 (输入)

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

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

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

skip_estimate_duration_from_pts bool (输入)

如果需要为文件末尾的 PTS 进行额外探测,则跳过输入持续时间的估计。目前,适用于 MPEG-PS 和 MPEG-TS。

duration_probesize integer (输入)

当需要为文件末尾的 PTS 进行额外探测时(目前:MPEG-PS 和 MPEG-TS),设置输入持续时间估计的探测大小(以字节为单位)。它面向对自身更好的持续时间探测感兴趣的用户,或者间接地因为使用了 concat 解复用器。典型的用例是具有高比特率、高视频缓冲且使用视频和音频的相似 PTS 进行结尾清理的 MPEG-TS CBR:在这种情况下,最后一个视频数据包和最后一个音频数据包之间较大的物理差距使得需要读取许多字节才能获得视频流持续时间。另一个用例是,由于帧重新排序,默认探测行为仅到达单个视频帧,而该帧不是流的最后一帧,因此持续时间不准确。即使对于小文件,设置此选项也会对性能产生影响,因为探测大小是固定的。默认行为是一种通用的折衷方案,具有很强的自适应性,但不会不惜一切代价扩展探测大小以获取流持续时间。必须是不小于 1 的整数,或者 0 表示默认行为。

strict, f_strict integer (输入/输出)

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

可能的值

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

12.1 格式流指定符

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

流指定符的确切语义由 libavformat/avformat.h 标头中声明的 avformat_match_stream_specifier() 函数定义,并在 (ffmpeg)ffmpeg(1) 手册中的流指定符部分中进行了说明。

13 解复用器

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

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

您可以使用配置选项 --disable-demuxers 禁用所有解复用器,并使用选项 --enable-demuxer=DEMUXER 选择性地启用单个解复用器,或使用选项 --disable-demuxer=DEMUXER 禁用它。

ff* 工具的 -demuxers 选项将显示已启用的解复用器列表。使用 -formats 查看已启用的解复用器和复用器的组合列表。

下面是一些当前可用的解复用器的描述。

13.1 aa

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

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

13.2 aac

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

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

13.3 apng

动画便携式网络图形解复用器。

此解复用器用于解复用 APNG 文件。所有标头(PNG 签名除外)直到(但不包括)第一个 fcTL 数据块都作为附加数据传输。然后,帧被拆分为两个 fcTL 数据块之间或最后一个 fcTL 和 IEND 数据块之间的所有数据块。

-ignore_loop bool

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

-max_fps int

最大帧率(以每秒帧数为单位)。默认值 0 表示没有限制。

-default_fps int

文件中未指定帧率时的默认帧率(以每秒帧数为单位)(0 表示尽可能快)。默认为 15。

13.4 asf

高级系统格式解复用器。

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

-no_resync_search bool

不要尝试通过查找某个可选的起始码来重新同步。

13.5 concat

虚拟连接脚本解复用器。

此解复用器从文本文件中读取文件列表和其他指令,并按顺序解复用它们,就好像它们的所有数据包都已复用到一起一样。

文件中的时间戳会被调整,以便第一个文件从 0 开始,每个下一个文件从上一个文件结束的地方开始。请注意,这是全局完成的,如果所有流的长度不完全相同,可能会导致间隙。

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

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

13.5.1 语法

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

file path

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

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

ffconcat version 1.0

标识脚本类型和版本。

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

duration dur

文件的时长。此信息可以从文件中指定;如果文件中的信息不可用或不准确,则在此处指定可能会更有效或更有帮助。

如果为所有文件设置了时长,则可以在整个连接的视频中进行搜索。

inpoint timestamp

文件的入点。当解复用器打开文件时,它会立即搜索到指定的时间戳。执行搜索是为了使所有流都可以在入点成功呈现。

此指令最适用于帧内编解码器,因为对于非帧内编解码器,您通常会在实际入点之前获得额外的包,并且解码的内容很可能也包含入点之前的帧。

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

由于指定的入点之前可能存在数据包,因此两个串联文件之间的数据包时间戳可能会重叠。

outpoint timestamp

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

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

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

文件的时长(如果未通过 duration 指令指定)将根据其指定的出点减少。

file_packet_metadata key=value

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

file_packet_meta key value

文件数据包的元数据。将为每个文件数据包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。

option key value

用于访问、打开和探测文件的选项。可以多次出现。

stream

在虚拟文件中引入一个流。所有后续与流相关的指令都适用于最后引入的流。必须设置一些流属性,以便允许识别子文件中匹配的流。如果脚本中未定义任何流,则复制第一个文件中的流。

exact_stream_id id

设置流的 ID。如果给定此指令,则将使用子文件中具有相应 ID 的字符串。这对于 MPEG-PS (VOB) 文件特别有用,其中流的顺序不可靠。

stream_meta key value

流的元数据。可以多次出现。

stream_codec value

流的编解码器。

stream_extradata hex_string

以十六进制编码的字符串的附加数据。

chapter id start end

添加章节。id 是一个唯一的标识符,可能很小且连续。

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 数据包元数据值,这些值是连接输出中相应文件段的 start_time 和 duration,以微秒表示。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 上的动态自适应流解复用器。

此解复用器呈现清单中找到的所有 AVStreams。通过在 AVStreams 上设置 discard 标志,调用方可以决定实际接收哪些流。每个流都镜像来自 <Representation>idbandwidth 属性,作为名为“id”和“variant_bitrate”的元数据键。

13.6.1 选项

此解复用器接受以下选项:

cenc_decryption_key

16 字节密钥,以十六进制表示,用于解密使用 ISO 通用加密 (CENC/AES-128 CTR; ISO/IEC 23001-7) 加密的文件。

13.7 dvdvideo

DVD-Video 解复用器,由 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-Video 不是传统意义上的直接访问、线性容器格式。相反,它允许复杂且可编程地播放精心混合的 MPEG-PS 流,这些流存储在无头 VOB 文件中。对于最终用户而言,这些流通常被称为“标题”,但实际的逻辑播放顺序是由标题内的一个或多个“PGC”(即程序组链)定义的。PGC 又由多个“PG”(即程序)组成,这些程序是实际的视频片段(对于典型的视频功能,它们是按顺序排列的)。PGC 结构,以及流布局和元数据,存储在需要解析的 IFO 文件中。可以更简单地将 PGC 视为播放列表。

实际的 DVD 播放器依赖于用户通过菜单和内部虚拟机进行的 GUI 交互来驱动解复用的方向。通常,用户会导航(通过菜单)或自动重定向到他们选择的 PGC。在此过程和随后的播放过程中,DVD 播放器的内部虚拟机还会维护状态并执行指令,这些指令可以在播放过程中创建跳转到不同扇区的操作。这就是为什么需要 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_lumenu_vtspgcpg)。默认值为 false。

menu_lu int

要解复用的菜单语言。在 DVD 中,菜单按语言分组。默认值为 1,即第一个语言单元。

menu_vts int

菜单所在的 VTS,如果它是 VMG 菜单(根级别),则为 0。默认值为 1,即第一个 VTS 的菜单。

pgc int

要开始播放的入口 PGC,与 pg 结合使用。替代设置 title。目前不支持章节标记。必须为菜单显式设置。默认值为 0,自动从 title 的值解析。

pg int

要开始播放的入口 PG,与 pgc 结合使用。替代设置 title。目前不支持章节标记。默认值为 1,即 PGC 的第一个 PG。

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

Electronic Arts 多媒体格式解复用器。

此格式由各种 Electronic Arts 游戏使用。

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

如果未指定 -assetmaps,则解复用器会在与 CPL 相同的目录中查找名为 ASSETMAP.xml 的文件。

13.10 flv, live_flv, kux

Adobe Flash 视频格式解复用器。

此解复用器用于解复用 FLV 文件和 RTMP 网络流。如果是实时网络流,如果您强制使用格式,可以使用 live_flv 选项而不是 flv 来避免时间戳不连续的情况。KUX 是在优酷平台上使用的 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(将近 11 分钟),这是规范允许的最大值。

default_delay

设置帧之间默认延迟,以百分之一秒为单位。范围为 0 到 6000。默认值为 10。

ignore_loop

GIF 文件可以包含循环特定次数(或无限次)的信息。如果将 ignore_loop 设置为 1,则会忽略输入中的循环设置,并且不会发生循环。如果设置为 0,则将发生循环,并将根据 GIF 循环指定的次数。默认值为 1。

例如,使用 overlay 过滤器,将无限循环的 GIF 放置在另一个视频之上

ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv

请注意,在上面的示例中,overlay 过滤器的最短选项用于在最短输入文件的长度处结束输出视频,在本例中为 input.mp4,因为本例中的 GIF 无限循环。

13.12 hls

HLS 解复用器

Apple HTTP Live Streaming 解复用器。

此解复用器会呈现所有变体流中的所有 AVStream。id 字段设置为比特率变体索引号。通过设置 AVStream 上的丢弃标志(在 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

使用以 : 分隔的 key=value 对列表为媒体片段的解复用器设置选项。

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 是表示数字的 0 填充的总位数。可以使用字符串 "%%" 在模式中指定文字字符 '%'。

如果序列模式包含 "%d" 或 "%0Nd",则模式指定的文件列表的第一个文件名必须包含一个介于 start_numberstart_number+start_number_range-1 之间的数字(包括这两个值),并且所有后续数字必须是顺序的。

例如,模式 "img-%03d.bmp" 将匹配 img-001.bmpimg-002.bmp、...、img-010.bmp 等形式的文件名序列;模式 "i%%m%%g-%d.jpg" 将匹配 i%m%g-1.jpgi%m%g-2.jpg、...、i%m%g-10.jpg 等形式的文件名序列。

请注意,该模式不一定必须包含 "%d" 或 "%0Nd",例如,要转换单个图像文件 img.jpeg,可以使用以下命令

ffmpeg -i img.jpeg img.png
glob

选择 glob 通配符模式类型。

该模式被解释为 glob() 模式。只有在 libavformat 编译时支持 globbing 时才能选择此项。

glob_sequence (已弃用,将被删除)

选择混合的 glob 通配符/序列模式。

如果您的 libavformat 版本在编译时支持 globbing,并且提供的模式包含至少一个未转义的 "%" 前面的 glob 元字符(%*?[]{}),则该模式被解释为 glob() 模式,否则它将被解释为序列模式。

所有 glob 特殊字符 %*?[]{} 都必须以 "%" 为前缀。要转义文字 "%",应使用 "%%"。

例如,模式 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.jpegimg-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" glob 模式的图像,即所有以 ".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 音频流。可以选择导出带有或不带有打印元数据的 pal8 16 色视频流。

它接受以下选项

noise_reduction

应用简单的低通滤波器。可以是 1(开)或 0(关)。默认值为 0。

reverb_depth

设置混响量。范围 0-100。默认值为 0。

reverb_delay

设置延迟(以毫秒为单位),钳位到 40-250 毫秒。默认值为 0。

bass_amount

应用低音扩展,也称为 XBass 或 megabass。范围是 0(静音)到 100(响亮)。默认值为 0。

低音范围

设置低频的截止频率,即上限。范围是 10-100 Hz。默认值为 0。

环绕深度

应用杜比 Pro-Logic 环绕效果。范围是 0(静音)到 100(强)。默认值为 0。

环绕延迟

设置环绕延迟,单位为毫秒 (ms),范围限制为 5-40 毫秒。默认值为 0。

最大尺寸

解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小,该大小反过来充当可读取文件大小的上限。范围是 0 到 100 MiB。0 表示移除缓冲区大小限制(不推荐)。默认值为 5 MiB。

视频流表达式

使用 eval API 计算的字符串,用于为生成的视频流分配颜色。可使用的变量包括 xywhtspeedtempoorderpatternrow

视频流

生成视频流。可以是 1(开启)或 0(关闭)。默认值为 0。

视频流宽度

设置视频帧宽度,单位为“字符”,其中一个字符表示 8 个像素。范围是 20-512。默认值为 30。

视频流高度

设置视频帧高度,单位为“字符”,其中一个字符表示 8 个像素。范围是 20-512。默认值为 30。

视频流文本

在视频流上打印元数据。包括 speedtempoorderpatternrowts(时间,单位为毫秒)。可以是 1(开启)或 0(关闭)。默认值为 1。

13.16 libopenmpt

基于 libopenmpt 的模块解复用器

有关更多信息,请参阅 https://lib.openmpt.org/libopenmpt/

某些文件有多个子歌曲(音轨),可以使用 subsong 选项设置。

它接受以下选项

子歌曲

设置子歌曲索引。可以是“all”、“auto”或子歌曲的索引。子歌曲索引从 0 开始。默认值为“auto”。

默认值是让 libopenmpt 选择。

布局

设置声道布局。有效值是 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 第 12 部分,ISO/IEC 15444-12 或 JPEG 2000 第 12 部分)的解复用器。

注册扩展名:mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, ismv, isma, f4v

13.17.1 选项

此解复用器接受以下选项

启用外部引用

启用加载外部音轨,默认情况下禁用。理论上,启用此功能在某些用例中可能会泄漏信息。

使用绝对路径

允许通过绝对路径加载外部音轨,默认情况下禁用。启用此功能存在安全风险。只有在已知来源无恶意时才应启用。

单独查找流

查找时,分别识别每个流中的最近点,并从识别的点解复用该流中的数据包。与从头开始线性解复用相比,这可能会导致不同的数据包序列。默认值为 true。

忽略编辑列表

忽略任何编辑列表原子。默认情况下,解复用器会修改流索引以反映编辑列表描述的时间线。默认值为 false。

高级编辑列表

修改流索引以反映编辑列表描述的时间线。必须将 ignore_editlist 设置为 false,此选项才有效。如果 ignore_editlist 和此选项都设置为 false,则仅修改流索引的开头以反映编辑列表描述的初始停留时间或起始时间戳。默认值为 true。

忽略章节

不解析章节。这包括 GoPro“HiLight”标签/时刻。请注意,只有当输入可查找时才会解析章节。默认值为 false。

使用 mfra 进行

对于可查找的分段输入,如果存在媒体片段随机访问框,则从该框设置片段的起始时间戳。

以下选项可用

auto

自动检测是将 mfra 时间戳设置为 PTS 还是 DTS (默认)

dts

将 mfra 时间戳设置为 DTS

pts

将 mfra 时间戳设置为 PTS

0

不使用 mfra 框设置时间戳

使用 tfdt

对于分段输入,将片段的起始时间戳设置为 tfdt 框中的 baseMediaDecodeTime。默认情况下启用,这将优先使用 tfdt 框来设置 DTS。禁用此选项可使用 sidx 框中的 earliest_presentation_time。在这两种情况下,如果 mfra 框可用且 use_mfra_for 设置为 pts 或 dts,则将使用 mfra 框中的时间戳。

导出全部

udta 框中无法识别的框导出为元数据条目。框类型的前四个字符设置为键。默认值为 false。

导出 xmp

XMP_ 框和 uuid 框的全部内容导出为键为 xmp 的字符串。请注意,如果设置了 export_all 但未设置此选项,则仍会导出 XMP_ 框的内容,但键为 XMP_。默认值为 false。

激活字节

解密 Audible AAX 和 AAX+ 文件所需的 4 字节密钥。请参阅下面的 Audible AAX 小节。

Audible 固定密钥

用于处理 Audible AAX/AAX+ 文件的固定密钥。它已预先设置,因此无需指定。

解密密钥

16 字节密钥,以十六进制表示,用于解密使用 ISO 通用加密 (CENC/AES-128 CTR; ISO/IEC 23001-7) 加密的文件。

最大 stts 增量

在 trak 的 stts 框中写入的非常大的采样增量有时可能是故意的,但通常是错误写入的,或者在被视为带符号的 32 位整数时用于存储 dts 校正的负值。此选项允许用户设置上限,超出此上限时,增量将钳位为 1。如果当转换为 int32 时,大于限制的值为负数,则用于调整后续 dts。

单位为音轨时间刻度。范围是 0 到 UINT_MAX。默认值为 UINT_MAX - 48000*10,这允许 48 kHz 音频流最多进行 10 秒的 dts 校正,同时容纳 99.9% 的 uint32 范围。

交错读取

在解复用器级别交错来自多个音轨的数据包。对于交错不佳的文件,这可以防止由于不同音轨中的数据包之间存在较大间隙而导致的播放问题,因为 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 传输流解复用器。

此解复用器接受以下选项

重新同步大小

设置查找新同步的大小限制。默认值为 65536。

跳过未知 PMT

跳过 PAT 中未定义的程序的 PMT。默认值为 0。

修复图文电视 PTS

使用从第一个程序(图文电视流所属且未被丢弃的程序)的 PCR 计算出的时间戳覆盖图文电视数据包的 PTS 和 DTS 值。默认值为 1,如果要保持图文电视数据包的 PTS 和 DTS 值不变,请将此选项设置为 0。

传输流数据包大小

输出选项,用于承载原始数据包的大小(以字节为单位)。显示检测到的原始数据包大小,用户无法设置。

扫描所有 PMT

扫描并合并所有 PMT。该值是一个整数,值为 -1 到 1(-1 表示自动设置,1 表示启用,0 表示禁用)。默认值为 -1。

合并 PMT 版本

当 PMT 的版本更新并且基本流移动到不同的 PID 时,重用现有流。默认值为 0。

最大数据包大小

设置解复用器发出的数据包的最大大小(以字节为单位)。大于此大小的有效负载将拆分到多个数据包中。范围是 1 到 INT_MAX/2。默认值为 204800 字节。

13.19 mpjpeg

封装在多部分 MIME 中的 MJPEG 解复用器。

此解复用器允许读取 MJPEG,其中每个帧都表示为 multipart/x-mixed-replace 流的一部分。

严格 MIME 边界

默认实现对多部分 MIME 边界检测应用宽松标准,以防止与众多未生成正确 MIME MJPEG 流的现有端点发生回归。通过将其设置为 1 来启用此选项将导致对边界值进行更严格的检查。

13.20 rawvideo

原始视频解复用器。

这个解复用器允许读取原始视频数据。由于没有指定假设视频参数的头部信息,用户必须指定这些参数才能正确解码数据。

此解复用器接受以下选项

framerate

设置输入视频帧率。默认值为 25。

pixel_format

设置输入视频像素格式。默认值为 yuv420p

video_size

设置输入视频尺寸。此值必须显式指定。

例如,要使用 ffplay 读取一个名为 input.raw 的原始视频文件,假设像素格式为 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 不提供字幕的链接,但是可以从页面中推测出来。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* CLI 工具,在输入 -i yourscript.vpy 之前添加 -f vapoursynth

此解复用器接受以下选项:

max_script_size

解复用器将整个脚本缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来又充当可以读取的脚本大小的上限。默认值为 1 MiB。

13.25 w64

Sony Wave64 音频解复用器。

此解复用器接受以下选项

最大尺寸

请参阅 wav 解复用器的相同选项。

13.26 wav

RIFF Wave 音频解复用器。

此解复用器接受以下选项

最大尺寸

指定解复用数据包的最大数据包大小(以字节为单位)。默认情况下,此值设置为 0,这意味着将根据输入格式选择一个合理的值。

14 元数据

FFmpeg 能够将媒体文件中的元数据转储到简单的 UTF-8 编码的类似 INI 的文本文件中,然后使用元数据复用器/解复用器将其加载回来。

文件格式如下:

  1. 文件由一个头部和多个元数据标签组成,这些标签分为几个部分,每个部分都在自己的行上。
  2. 头部是一个 ‘;FFMETADATA’ 字符串,后跟一个版本号(现在为 1)。
  3. 元数据标签的形式为 ‘key=value
  4. 头部之后紧跟着全局元数据
  5. 在全局元数据之后,可能会有包含每个流/每个章节元数据的部分。
  6. 一个部分以大写的节名称(即 STREAM 或 CHAPTER)在括号 (‘[’,‘]’) 中开始,并以下一个部分或文件结尾结束。
  7. 在章节部分的开头,可能有一个可选的时基,用于起始/结束值。它必须采用 ‘TIMEBASE=num/den’ 的形式,其中 numden 是整数。如果缺少时基,则假定起始/结束时间以纳秒为单位。

    接下来,章节部分必须包含章节开始和结束时间,格式为 ‘START=num’,‘END=num’,其中 num 是一个正整数。

  8. 空行和以 ‘;’ 或 ‘#’ 开头的行将被忽略。
  9. 包含特殊字符 (‘=’,‘;’,‘#’,‘\’ 和换行符) 的元数据键或值必须使用反斜杠 ‘\’ 进行转义。
  10. 请注意,元数据中的空格(例如,‘foo = bar’)被视为标签的一部分(在上面的示例中,键是 ‘foo ’,值是 ‘ bar’)。

ffmetadata 文件可能如下所示:

;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 文件将该文件转码为输出文件。

使用 ffmpeg 提取 ffmetadata 文件如下:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE

可以如下方式从 FFMETADATAFILE 文件中重新插入编辑后的元数据信息:

ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT

15 协议选项

libavformat 库提供了一些通用的全局选项,这些选项可以在所有协议上设置。此外,每个协议可能支持所谓的私有选项,这些选项是该组件特有的。

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

支持的选项列表如下

protocol_whitelist list (input)

设置一个以“,”分隔的允许协议列表。“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 版是基于代理的发布-订阅通信协议。

FFmpeg 必须使用 –enable-librabbitmq 编译才能支持 AMQP。还必须运行一个单独的 AMQP 代理。一个开源的 AMQP 代理示例是 RabbitMQ。

启动代理后,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”与广播操作相同(即,数据被转发到 fanout 交换机上的所有队列,而与 routing_key 无关);“amq.topic”类似于“amq.direct”,但允许更复杂的模式匹配(请参阅 RabbitMQ 文档)。

routing_key

设置路由键。默认值为“amqp”。路由键在“amq.direct”和“amq.topic”交换机上用于决定是否将数据包写入订阅者的队列。

pkt_size

发送/接收到代理的每个数据包的最大大小。默认值为 131072。最小值为 4096,最大值为任何大值(可用 int 表示)。当接收数据包时,此设置在 FFmpeg 中设置内部缓冲区大小。它应等于或大于发布到代理的数据包的大小。否则,接收到的消息可能会被截断,从而导致解码错误。

connection_timeout

初始连接到代理的超时时间,以秒为单位。默认值为 rw_timeout,如果未设置 rw_timeout,则为 5 秒。

delivery_mode mode

设置发送到代理的每个消息的传递模式。接受以下值:

persistent

传递模式设置为“持久”(2)。这是默认值。根据其设置,消息可能会被写入代理的磁盘。

non-persistent

传递模式设置为“非持久”(1)。除非代理内存不足,否则消息将保留在代理的内存中。

16.2 async

输入流的异步数据填充包装器。

在后台线程中填充数据,以将 I/O 操作与解复用线程分离。

async:URL
async:http://host/resource
async:cache:http://host/resource

16.3 bluray

读取 BluRay 播放列表。

接受的选项包括:

angle

BluRay 角度

chapter

起始章节 (1...N)

playlist

要读取的播放列表 (BDMV/PLAYLIST/?????.mpls)

示例

从安装到 /mnt/bluray 的 BluRay 读取最长的播放列表

bluray:/mnt/bluray

从安装到 /mnt/bluray 的 BluRay 读取播放列表 4 的角度 2,从第 2 章开始

-playlist 4 -angle 2 -chapter 2 bluray:/mnt/bluray

16.4 cache

输入流的缓存包装器。

将输入流缓存到临时文件。它为实时流带来了查找功能。

接受的选项包括:

read_ahead_limit

在不支持查找时,可以预读的字节数。范围为 -1 到 INT_MAX。-1 表示无限制。默认值为 65536。

URL 语法为:

cache:URL

16.5 concat

物理连接协议。

按顺序从多个资源中读取和查找,就好像它们是一个唯一的资源。

此协议接受的 URL 具有以下语法:

concat:URL1|URL2|...|URLN

其中 URL1URL2、...、URLN 是要连接的资源的 URL,每个 URL 都可能指定不同的协议。

例如,要使用 ffplay 读取文件序列 split1.mpegsplit2.mpegsplit3.mpeg,请使用以下命令:

ffplay concat:split1.mpeg\|split2.mpeg\|split3.mpeg

请注意,您可能需要转义字符“|”,它对许多 shell 来说是特殊的。

16.6 concatf

使用换行符分隔的资源列表的物理连接协议。

按顺序从多个资源中读取和查找,就好像它们是一个唯一的资源。

此协议接受的 URL 具有以下语法:

concatf:URL

其中 URL 是包含换行符分隔的要连接的资源列表的 URL,每个资源都可能指定不同的协议。特殊字符必须使用反斜杠或单引号进行转义。请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的“引用和转义”部分

例如,要使用 ffplay 读取文件 split.txt 中单独列出的文件序列 split1.mpegsplit2.mpegsplit3.mpeg,请使用以下命令:

ffplay concatf:split.txt

其中 split.txt 包含以下行:

split1.mpeg
split2.mpeg
split3.mpeg

16.7 crypto

AES 加密流读取协议。

接受的选项包括:

key

从给定的十六进制表示设置 AES 解密密钥二进制块。

iv

从给定的十六进制表示设置 AES 解密初始化向量二进制块。

接受的 URL 格式:

crypto:URL
crypto+URL

16.8 data

URI 中的内联数据。请参阅 http://en.wikipedia.org/wiki/Data_URI_scheme

例如,要使用 ffmpeg 转换内联给定的 GIF 文件:

ffmpeg -i "data:image/gif;base64,R0lGODdhCAAIAMIEAAAAAAAA//8AAP//AP///////////////ywAAAAACAAIAAADF0gEDLojDgdGiJdJqUX02iB4E8Q9jUMkADs=" smiley.png

16.9 fd

文件描述符访问协议。

接受的语法是

fd: -fd file_descriptor

如果未指定 fd,则默认情况下,标准输出文件描述符将用于写入,标准输入用于读取。与管道协议不同,如果 fd 协议对应于常规文件,则它支持查找。fd 协议不支持通过 URL 传递文件描述符以确保安全。

此协议接受以下选项:

blocksize

设置 I/O 操作的最大块大小,以字节为单位。默认值为 INT_MAX,这导致不限制请求的块大小。合理地降低此值可以改善用户终止请求的反应时间,如果数据传输速度慢,这将很有价值。

fd

设置文件描述符。

16.10 file

文件访问协议。

从文件读取或写入文件。

文件 URL 的形式可以是:

file:filename

其中 filename 是要读取的文件的路径。

没有协议前缀的 URL 将被假定为文件 URL。根据构建版本,看起来像以驱动器盘符开头的 Windows 路径的 URL 也将被假定为文件 URL(通常在类 Unix 系统的构建版本中不是这种情况)。

例如,要使用 ffmpeg 从文件 input.mpeg 读取数据,请使用以下命令:

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 方案名称后指定 "+proto" 来声明,其中 proto 为 "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/<版本>")

referer

设置 Referer 标头。在 HTTP 请求中包含 “Referer: URL” 标头。

multiple_requests

如果设置为 1,则使用持久连接,默认为 0。

post_data

设置自定义 HTTP POST 数据。

mime_type

导出 MIME 类型。

http_version

导出 HTTP 响应版本号。通常为 "1.0" 或 "1.1"。

cookies

设置要在未来请求中发送的 cookie。每个 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 方法不匹配,则会向客户端提供错误请求响应。如果未设置,则目前不会检查 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://server:port

# Client side (receiving):
ffmpeg -i http://server:port -c copy somefile.ogg

# Client can also be done with wget:
wget http://server:port -O somefile.ogg

# Server side (receiving):
ffmpeg -listen 1 -i http://server:port -c copy somefile.ogg

# Client side (sending):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://server:port

# Client can also be done with wget:
wget --post-file=somefile.ogg http://server:port
resource

当使用实验性 HTTP 服务器时,客户端请求的资源。

reply_code

当使用实验性 HTTP 服务器时,返回给客户端的 HTTP 代码。

short_seek_size

设置阈值(以字节为单位),当预读优于寻址和新的 HTTP 请求时。例如,这对于确保使用相同的连接来读取大的视频数据包和中间的小音频数据包很有用。

16.15.1 HTTP Cookie

某些 HTTP 请求将被拒绝,除非在请求中传递 cookie 值。cookies 选项允许指定这些 cookie。至少,每个 cookie 必须指定一个值以及路径和域。与域和路径都匹配的 HTTP 请求将自动在 HTTP Cookie 标头字段中包含 cookie 值。多个 cookie 可以用换行符分隔。

指定 cookie 来播放流所需的语法是

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 的支持,这些版本不支持 HTTP PUT 方法,但支持 SOURCE 方法。

tls

建立与 Icecast 的 TLS (HTTPS) 连接。

icecast://[username[:password]@]server:port/mountpoint

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

通过 TCP 的 MMS(微软媒体服务器)协议。

16.19 mmsh

通过 HTTP 的 MMS(微软媒体服务器)协议。

所需的语法是

mmsh://server[:port][/app][/playpath]

16.20 md5

MD5 输出协议。

计算要写入的数据的 MD5 哈希值,并在关闭时将其写入指定的输出或标准输出(如果未指定)。它可用于在不写入实际文件的情况下测试复用器。

下面是一些例子。

# 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:[number]

如果未指定 fd,则 number 是管道文件描述符对应的数字(例如,0 表示标准输入,1 表示标准输出,2 表示标准错误)。如果未指定 number,则默认情况下标准输出文件描述符将用于写入,标准输入用于读取。

例如,要使用 ffmpeg 从标准输入读取

cat test.wav | ffmpeg -i pipe:0
# ...this is the same as...
cat test.wav | ffmpeg -i pipe:

要使用 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 是一种 2D 奇偶校验前向纠错机制,用于通过 RTP 发送的 MPEG-2 传输流。

此协议必须与 rtp_mpegts 复用器和 rtp 协议一起使用。

所需的语法是

-f rtp_mpegts -fec prompeg=option=val... rtp://hostname:port

目标 UDP 端口对于列 FEC 流为 port + 2,对于行 FEC 流为 port + 4

此协议接受以下选项:

l=n

列数 (4-20, LxD <= 100)

d=n

行数 (4-20, LxD <= 100)

用法示例

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://hostname:port

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[:port][/app][/instance][/playpath]

接受的参数是

username

可选用户名(主要用于发布)。

password

可选密码(主要用于发布)。

server

RTMP 服务器的地址。

port

要使用的 TCP 端口号(默认值为 1935)。

app

它是要访问的应用程序的名称。它通常对应于应用程序在 RTMP 服务器上安装的路径(例如,/ondemand//flash/live/ 等)。您也可以通过 rtmp_app 选项覆盖从 URI 解析的值。

playpath

它是要播放的资源路径或名称,参考在 app 中指定的应用程序,可以前缀 "mp4:"。您也可以通过 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 流的编解码器列表。此选项应设置为逗号分隔的 fourcc 值列表,例如多个编解码器的 hvc1,av01,vp09 或仅一个编解码器的 hvc1。指定的列表将显示在连接命令消息的“fourCcLive”属性中。

rtmp_flashver

用于运行 SWF 播放器的 Flash 插件版本。默认值为 LNX 9,0,124,2。(发布时,默认值为 FMLE/3.0 (兼容; <libavformat 版本>)。)

rtmp_flush_interval

在同一请求中刷新数据包的数量(仅限 RTMPT)。默认值为 10。

rtmp_live

指定媒体为直播流。直播流不支持恢复或快进。默认值为 any,表示订阅者首先尝试播放 playpath 中指定的直播流。如果找不到该名称的直播流,则播放录制流。其他可能的值为 liverecorded

rtmp_pageurl

嵌入媒体的网页 URL。默认情况下,不发送任何值。

rtmp_playpath

要播放或发布的流标识符。此选项会覆盖 URI 中指定的参数。

rtmp_subscribe

要订阅的直播流名称。默认情况下,不发送任何值。仅当指定了该选项或 rtmp_live 设置为 live 时才会发送。

rtmp_swfhash

解压缩后的 SWF 文件的 SHA256 哈希值(32 字节)。

rtmp_swfsize

解压缩后的 SWF 文件的大小,SWFVerification 需要此大小。

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 服务器 "myserver" 的 "vod" 应用程序读取名为 "sample" 的多媒体资源

ffplay rtmp://myserver/vod/sample

要发布到受密码保护的服务器,需分别传递 playpath 和 app 名称

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 变体,并且 serverportappplaypath 的含义与 RTMP 本机协议指定的含义相同。options 包含一个以空格分隔的选项列表,格式为 key=val

有关更多信息,请参阅 librtmp 手册页 (man 3 librtmp)。

例如,要使用 ffmpeg 将文件实时流式传输到 RTMP 服务器

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][?options]

port 指定要使用的 RTP 端口。

options 包含一个以 & 分隔的选项列表,格式为 key=val

支持以下 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

这是一个已弃用的选项。应改为使用 localrtpport

localaddr=addr

用于发送数据包或加入多播组的网络接口的本地 IP 地址。

timeout=n

将套接字 I/O 操作的超时时间(以微秒为单位)设置为 n

重要说明

  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 URL 的所需语法为

rtsp://hostname[:port]/path

可以在 ffmpeg/ffplay 命令行中设置选项,或者通过 AVOptionavformat_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 可用作 RTSP RTP 传输,则首先尝试 TCP 进行 RTP 传输。

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 字段)来禁用此功能。

当使用 ffplay 观看多比特率 Real-RTSP 流时,可以使用 -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 中的协议处理程序,它是一个多路复用器和解复用器。它用于通过在单独的端口上定期公告流的 SDP 来发出 RTP 流的信号。

16.35.1 封装器

提供给多路复用器的 SAP URL 的语法为

sap://destination[:port][?options]

RTP 数据包在端口 port 上发送到 destination,如果未指定端口,则发送到端口 5004。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 URL 的语法为

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://host:port[?options]

该协议接受以下选项

listen

如果设置为任何值,则监听传入连接。默认情况下会进行传出连接。

max_streams

设置最大流数。默认情况下不设置限制。

16.37 srt

通过 libsrt 实现的 Haivision 安全可靠传输协议。

SRT URL 的支持语法为

srt://hostname:port[?options]

options 包含一个以 & 分隔的选项列表,格式为 key=val

options srt://hostname:port

options 包含 ‘-key val’ 选项列表。

此协议接受以下选项。

connect_timeout=milliseconds

连接超时;SRT 无法在 RTT > 1500 毫秒(2 次握手交换)的情况下使用 3 秒的默认连接超时时间进行连接。此选项适用于调用方和会合连接模式。会合模式的连接超时时间是设置值的 10 倍(可用作解决早期版本此连接问题的一种方法)。

ffs=bytes

飞行标志大小(窗口大小),以字节为单位。FFS 实际上是一个内部参数,您应将其设置为不小于 recv_buffer_sizemss。默认值相对较大,因此,除非您设置非常大的接收器缓冲区,否则无需更改此选项。默认值为 25600。

inputbw=bytes/seconds

发送端标称输入速率,单位为字节每秒。当 maxbw 设置为相对值 (0) 时,与 oheadbw 一起使用,用于计算当恢复包与主媒体流一起发送时的最大发送速率:如果 inputbw 未设置,而 maxbw 设置为相对值 (0),则实际输入速率将在库内部计算。inputbw * (100 + oheadbw) / 100。默认值为 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 使用 Rendez-Vous 连接模式。默认值为 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。

kmrefreshrate=数据包

传输多少个数据包后将加密密钥切换为新密钥。默认值为 -1。-1 表示自动(在 srt 库中为 0x1000000)。此选项的范围是 0 - INT_MAX 范围内的整数。

kmpreannounce=数据包

发送新加密密钥和发生切换之间的时间间隔。此值也适用于发生切换和旧加密密钥停用之间的后续间隔。默认值为 -1。-1 表示自动(在 srt 库中为 0x1000)。此选项的范围是 0 - INT_MAX 范围内的整数。

snddropdelay=微秒

发送方在丢弃数据包之前的额外延迟。此延迟将添加到默认的丢弃延迟时间间隔值。

特殊值 -1:完全不在发送方丢弃数据包。

payload_size=字节

设置在 Live 模式下,单次调用发送函数时传输的数据包的最大声明大小。如果未使用此值(在文件模式下是默认值),则使用 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 个字符的字符串,可以在连接之前设置在套接字上。监听端可以通过从 srt_accept 返回的套接字检索此流 ID,该套接字是由具有该设置流 ID 的套接字连接的。SRT 不强制对该字符串内容进行任何特殊解释。此选项在 Rendezvous 连接中没有意义;结果可能是其中一方会覆盖另一方的值,并且哪一方获胜取决于运气。

srt_streamid=字符串

为避免与 ffmpeg 命令行选项冲突而设置的 ‘streamid’ 的别名。

smoother=live|file

用于该套接字传输的 Smoother 类型,它负责传输和拥塞控制。连接双方的 Smoother 类型必须完全相同,否则连接将被拒绝。

messageapi=1|0

设置后,此套接字使用消息 API,否则使用缓冲区 API。请注意,在实时模式下(请参阅 transtype),只有消息 API 可用。在文件模式下,您可以选择使用两种模式之一。

流 API(默认,当此选项为 false 时)。在这种模式下,您可以使用一个发送指令发送任意多的数据,甚至可以使用直接从文件读取的专用函数。内部工具将处理任何速度和拥塞控制。接收时,您也可以接收任意多的数据,未提取的数据将等待下次调用。在流模式下,数据部分之间没有边界。

消息 API。在此模式下,您的单个发送指令会传递具有边界(消息)的精确一段数据。与实时模式相反,此消息可能跨越多个 UDP 数据包,唯一的尺寸限制是它应作为一个整体放入发送缓冲区。接收器应使用尽可能大的缓冲区来接收消息,否则将不会放弃该消息。当消息不完整(并非所有数据包都已接收到或存在数据包丢失)时,将不会放弃该消息。

transtype=live|file

设置套接字的传输类型,特别是,设置此选项会将多个其他参数设置为特定传输类型所需的默认值。

live:将选项设置为实时传输。在这种模式下,您应该仅使用一个发送指令发送足够的数据以适应一个 UDP 数据包,并限制为在 payload_size 中定义的第一个值(在此模式下,默认值为 1316)。在这种模式下没有速度控制,只有带宽控制(如果配置),以避免使用开销传输(重传和控制数据包)超出带宽。

file:将选项设置为非实时传输。有关更多说明,请参阅 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://hostname:port[?options]

options 包含一个以 & 分隔的选项列表,格式为 key=val

以下是支持的选项列表。

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 数据包的最大段大小,以字节为单位表示。

以下示例显示如何使用 ffmpeg 设置侦听 TCP 连接,然后使用 ffplay 访问该连接

ffmpeg -i input -f format tcp://hostname:port?listen
ffplay tcp://hostname:port

16.42 tls

传输层安全 (TLS) / 安全套接字层 (SSL)

TLS/SSL URL 的必需语法为

tls://hostname:port[?options]

以下参数可以通过命令行选项设置(或在代码中通过 AVOption 设置)

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 input -f format tls://hostname:port?listen&cert=server.crt&key=server.key

使用 ffplay 从 TLS/SSL 服务器回放流。

ffplay tls://hostname:port

16.43 udp

用户数据报协议。

UDP URL 的必需语法是

udp://hostname:port[?options]

options 包含一个以 & 分隔的选项列表,格式为 key=val

如果系统上启用了线程,则会使用循环缓冲区来存储传入的数据,这允许减少由于 UDP 套接字缓冲区溢出而导致的数据丢失。 fifo_sizeoverrun_nonfatal 选项与此缓冲区相关。

以下是支持的选项列表。

buffer_size=size

设置 UDP 最大套接字缓冲区大小(以字节为单位)。这用于设置接收或发送缓冲区大小,具体取决于套接字的用途。输出默认为 32 KB,输入默认为 384 KB。另请参阅 fifo_size

bitrate=比特率

如果设置为非零值,则如果输入有足够的包来维持它,则输出将具有指定的恒定比特率。

burst_bits=比特数

使用 bitrate 时,这指定数据包突发中的最大比特数。

localport=端口

覆盖要绑定的本地 UDP 端口。

localaddr=addr

用于发送数据包或加入多播组的网络接口的本地 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 input -f format udp://hostname:port
    
  • 使用 ffmpeg 通过 UDP 以 mpegts 格式流式传输,使用 188 大小的 UDP 数据包,并使用大型输入缓冲区
    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    
  • 使用 ffmpeg 从远程端点通过 UDP 接收
    ffmpeg -i udp://[multicast-address]:port ...
    

16.44 unix

Unix 本地套接字

Unix 套接字 URL 的必需语法是

unix://filepath

以下参数可以通过命令行选项设置(或在代码中通过 AVOption 设置)

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 地址/端口)并订阅该流。服务器和客户端启动的顺序通常无关紧要。

必须使用 –enable-libzmq 选项编译 ffmpeg 才能支持此协议。

可以在 ffmpeg/ffplay 命令行上设置选项。支持以下选项

pkt_size

强制发送/接收数据的最大数据包大小。默认值为 131,072 字节。在服务器端,这设置了通过 ZeroMQ 发送的数据包的最大大小。在客户端上,它设置了用于接收数据包的内部缓冲区大小。请注意,客户端上的 pkt_size 应等于或大于服务器上的 pkt_size。否则,接收到的消息可能会被截断,导致解码错误。

17 设备选项

libavdevice 库提供与 libavformat 相同的接口。即,输入设备被视为解复用器,输出设备被视为复用器,并且接口和通用设备选项与 libavformat 提供的相同(请参阅 ffmpeg-formats 手册)。

此外,每个输入或输出设备都可以支持所谓的私有选项,这些选项是该组件特有的。

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

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:CARD[,DEV[,SUBDEV]]

其中 DEVSUBDEV 组件是可选的。

三个参数(按顺序:CARDDEVSUBDEV)分别指定卡号或标识符、设备号和子设备号(-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

设置采样率,单位为 Hz。默认值为 48000。

通道数

设置通道数。默认值为 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 上,您需要通过 widl 运行 IDL 文件。

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

如果设置为非零值,则将从垂直辅助数据捕获额外的图文电视流。支持 SD PAL (576i) 和 HD (1080i 或 1080p) 源。对于 HD 源,将解码 OP47 数据包。

此选项是一个位掩码,用于指定捕获的 SD PAL VBI 行,具体来说是第 6 行到第 22 行,以及第 318 行到第 335 行。第 6 行是掩码中的最低有效位 (LSB)。所选的、不包含图文电视信息的行将被忽略。您可以使用特殊的 all 常量来选择所有可能的行,或者使用 standard 来跳过第 6、318 和 319 行,因为这些行与并非所有接收器兼容。

对于 SD 源,ffmpeg 需要使用 --enable-libzvbi 编译。对于 HD 源,在较旧的(4K 前)DeckLink 卡型号上,您必须以 10 位模式捕获。

通道数

定义要捕获的音频通道数。必须为 ‘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 已将双工属性替换为配置文件属性。对于 DeckLink Duo 2 和 DeckLink Quad 2,配置文件在任何使用相同连接器的 2 个子设备之间共享。对于 DeckLink 8K Pro,配置文件在所有 4 个子设备之间共享。因此,DeckLink 8K Pro 支持四个配置文件。

DeckLink 8K Pro 的有效配置文件模式(使用 DeckLink SDK >= 11.0):‘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 时间码,对于 >30 fps 的内容,‘rp188any’ 查询的时间码类型顺序为 HFR、VITC1、VITC2 和 LTC。请注意,这与 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 个不同硬件设备之间保持输入同步非常有用。在使用此选项之前,应使用 NTP 或 PTP 等协议同步不同硬件设备的系统时间。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,可能不会发生输入同步。同步可能会出现 1 帧的错误,或者在更罕见的情况下出现 timestamp_align 秒的错误。默认为 ‘0’。

wait_for_tc (bool)

丢弃帧,直到收到带有时间码的帧。有时,串行时间码不会与第一个输入帧一起收到。如果发生这种情况,则存储的流时间码将不准确。如果此选项设置为 true,则会丢弃输入帧,直到收到带有时间码的帧。必须指定选项 timecode_format。默认为 false

enable_klv(bool)

如果设置为 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 支持。目前仅支持音频和视频设备。

可以将多个设备作为单独的输入打开,也可以在同一个输入上打开,这应该可以提高它们之间的同步性。

输入名称应采用以下格式:

TYPE=NAME[:TYPE=NAME]

其中 TYPE 可以是 audiovideoNAME 是设备的名称或备用名称。

18.6.1 选项

如果未指定任何选项,则使用设备的默认值。如果设备不支持请求的选项,则将无法打开。

video_size

设置捕获视频中的视频大小。

framerate

设置捕获视频中的帧速率。

sample_rate

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

sample_size

设置捕获音频的采样大小(以位为单位)。

通道数

设置捕获音频中的通道数。

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 fps) 输入帧率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描率/帧率,并避免底部出现绿条、扫描线闪烁等问题。请注意,对于某些设备,更改这些属性还会影响未来的调用(设置新的默认值),直到系统重启。

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,在开始捕获之前,会弹出一个显示对话框给最终用户,允许他们手动修改电视音频(如单声道 vs. 立体声,语言 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
    
  • 打开视频设备 Camera
    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开名称为 Camera 的第二个视频设备
    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备 Camera 和音频设备 Microphone
    $ 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)。

要使用 ffmpeg 从帧缓冲设备 /dev/fb0 录制

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=window_title

hwnd=window_hwnd

第一个选项将捕获整个桌面或桌面的固定区域。第二个和第三个选项将捕获单个窗口的内容,而不管其在屏幕上的位置。

例如,要使用 ffmpeg 抓取整个桌面

ffmpeg -f gdigrab -framerate 6 -i desktop out.mpg

在位置 10,20 抓取 640x480 的区域

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

在屏幕上显示抓取的区域。

如果 show_region 指定为 1,则将在屏幕上指示抓取区域。使用此选项,如果只抓取屏幕的一部分,则很容易知道正在抓取什么。

请注意,show_region 与抓取单个窗口的内容不兼容。

例如

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=window_title,则默认捕获全窗口大小。

offset_x

当使用 video_size 捕获区域时,设置与屏幕或桌面左边缘的距离。

请注意,偏移量的计算是从 Windows 主显示器的左上角开始的。如果您的显示器位于主显示器的左侧,则需要使用负的 offset_x 值将区域移动到该显示器。

offset_y

当使用 video_size 捕获区域时,设置与屏幕或桌面顶边缘的距离。

请注意,偏移量的计算是从 Windows 主显示器的左上角开始的。如果您的显示器位于主显示器的上方,则需要使用负的 offset_y 值将区域移动到该显示器。

18.9 iec61883

使用 libiec61883 的 FireWire DV/HDV 输入设备。

要启用此输入设备,您需要在系统上安装 libiec61883、libraw1394 和 libavc1394。使用 configure 选项 --enable-libiec61883 进行编译,以启用该设备。

iec61883 捕获设备支持使用 libiec61883 和新的 Linux FireWire 堆栈 (juju) 从通过 IEEE1394 (FireWire) 连接的视频设备捕获。这是 Linux Kernel 2.6.37 及更高版本中的默认 DV/HDV 输入方法,因为旧的 FireWire 堆栈已被删除。

指定要用作输入文件的 FireWire 端口,或指定“auto”以选择连接的第一个端口。

18.9.1 选项

dvtype

覆盖 DV/HDV 的自动检测。仅当自动检测不起作用,或应禁止使用不同的设备类型时才应使用此选项。将 DV 设备视为 HDV(或反之亦然)将不起作用,并导致未定义的行为。支持 autodvhdv 值。

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 可写客户端,每个音频通道一个,名称为 client_name:input_N,其中 client_name 是应用程序提供的名称,N 是标识通道的数字。每个可写客户端会将获取的数据发送到 FFmpeg 输入设备。

创建一或多个 JACK 可读客户端后,您需要将它们连接到一或多个 JACK 可写客户端。

要连接或断开 JACK 客户端,您可以使用 jack_connectjack_disconnect 程序,或通过图形界面进行操作,例如使用 qjackctl

要列出 JACK 客户端及其属性,您可以调用命令 jack_lsp

下面是一个示例,演示如何使用 ffmpeg 捕获 JACK 可读客户端。

# 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

有关更多信息,请阅读:http://jackaudio.org/

18.10.1 选项

通道数

设置通道数。默认值为 2。

18.11 kmsgrab

KMS 视频输入设备。

将与指定的 CRTC 或平面关联的 KMS 扫描输出帧缓冲区捕获为可以传递给其他硬件功能的 DRM 对象。

需要 DRM 主控或 CAP_SYS_ADMIN 才能运行。

如果您不理解所有这些内容,您可能不需要这个。请查看 x11grab 代替。

18.11.1 选项

设备

要捕获的 DRM 设备。默认为 /dev/dri/card0

格式

帧缓冲区的像素格式。如果您运行的是 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_idplane_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 开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给 "out0" 标签,但所有其他输出都需要显式指定。

后缀 "+subcc" 可以附加到输出标签,以创建一个额外的流,其中包含附加到该输出的隐藏字幕数据包(实验性的;目前仅用于 EIA-608 / CEA-708)。subcc 流在所有正常流之后创建,顺序与相应的流相同。例如,如果存在 "out19+subcc"、"out7+subcc" 和最多 "out42",则流 #43 是流 #7 的 subcc,而流 #44 是流 #19 的 subcc。

如果未指定,则默认为为输入设备指定的文件名。

graph_file

设置要读取并发送到其他滤镜的滤镜图的文件名。滤镜图的语法与选项 graph 指定的语法相同。

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 的音频 CD 输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libcdio。它需要配置选项 --enable-libcdio

此设备允许播放和抓取音频 CD。

例如,要使用 ffmpeg/dev/sr0 中复制整个音频 CD,您可以运行以下命令

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 配置 FFmpeg。

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 的一部分,Core Audio 是官方的 Mac OS X 音频接口。请参阅 http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许从通过 OpenAL 处理的音频输入设备进行捕获。

您需要在提供的文件名中指定要捕获的设备的名称。如果提供空字符串,设备将自动选择默认设备。您可以使用 list_devices 选项获取支持的设备列表。

18.15.1 选项

通道数

设置捕获音频中的通道数。目前仅支持 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

例如,要使用 ffmpeg/dev/dsp 获取,请使用命令

ffmpeg -f oss -i /dev/dsp /tmp/oss.wav

有关 OSS 的更多信息,请参阅:http://manuals.opensound.com/usersguide/dsp.html

18.16.1 选项

sample_rate

设置采样率,单位为 Hz。默认值为 48000。

通道数

设置通道数。默认值为 2。

18.17 pulse

PulseAudio 输入设备。

要启用此输出设备,您需要使用 --enable-libpulse 配置 FFmpeg。

提供给输入设备的文件名是源设备或字符串 “default”。

要列出 PulseAudio 源设备及其属性,您可以调用命令 pactl list sources

有关 PulseAudio 的更多信息,请访问 http://www.pulseaudio.org

18.17.1 选项

server

连接到由 IP 地址指定的特定 PulseAudio 服务器。未提供时使用默认服务器。

name

指定 PulseAudio 在显示活动客户端时将使用的应用程序名称,默认情况下为 LIBAVFORMAT_IDENT 字符串。

stream_name

指定 PulseAudio 在显示活动流时将使用的流名称,默认情况下为“record”。

sample_rate

指定采样率(以 Hz 为单位),默认情况下使用 48kHz。

通道数

指定正在使用的通道,默认情况下设置为 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

例如,要使用 ffmpeg/dev/audio0 获取,请使用命令

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

18.18.1 选项

sample_rate

设置采样率,单位为 Hz。默认值为 48000。

通道数

设置通道数。默认值为 2。

18.19 video4linux2, v4l2

Video4Linux2 输入视频设备。

“v4l2”可以用作“video4linux2”的别名。

如果 FFmpeg 构建时启用了 v4l-utils 支持(通过使用 --enable-libv4l2 配置选项),则可以使用 -use_libv4l2 输入设备选项。

要抓取的设备的名称是一个文件设备节点,通常 Linux 系统在设备(例如 USB 网络摄像头)插入系统时会自动创建此类节点,其名称类似于 /dev/videoN,其中 N 是与设备关联的数字。

Video4Linux2 设备通常支持有限的 widthxheight 大小和帧率。您可以使用 -list_formats all 来检查哪些是 Video4Linux2 设备支持的。一些设备,例如电视卡,支持一个或多个标准。可以使用 -list_standards all 列出所有支持的标准。

时间戳的时间基准是 1 微秒。根据内核版本和配置,时间戳可能来自实时时钟(起点为 Unix 纪元)或单调时钟(起点通常在启动时,不受 NTP 或手动更改时钟的影响)。可以使用 -timestamps abs-ts abs 选项强制转换为实时时钟。

以下是 ffmpegffplay 使用 video4linux2 设备的一些示例

  • 列出 video4linux2 设备支持的格式
    ffplay -f video4linux2 -list_formats all /dev/video0
    
  • 抓取并显示 video4linux2 设备的输入
    ffplay -f video4linux2 -framerate 30 -video_size hd720 /dev/video0
    
  • 抓取并记录 video4linux2 设备的输入,保持帧率和大小与之前设置的一样
    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

设置视频帧大小。参数必须是 WIDTHxHEIGHT 形式的字符串或有效的尺寸缩写。

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 显示器的某个区域。

作为输入传递的文件名具有以下语法

[hostname]:display_number.screen_number[+x_offset,y_offset]

hostname:display_number.screen_number 指定要从中抓取的屏幕的 X11 显示名称。hostname 可以省略,默认为 “localhost”。环境变量 DISPLAY 包含默认显示名称。

x_offsety_offset 指定抓取区域相对于 X11 屏幕左上角的偏移量。它们默认为 0。

有关更多详细信息,请查阅 X11 文档(例如 man X)。

使用 xdpyinfo 程序获取有关 X11 显示器属性的基本信息(例如,grep “name” 或 “dimensions”)。

例如,要使用 ffmpeg:0.0 抓取

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 时,会提示用户通过点击并拖动以图形方式选择抓取区域。单击但不拖动将选择整个屏幕。宽度或高度为零的区域也将选择整个屏幕。此选项会覆盖 video_sizegrab_xgrab_y 选项。默认值为 0

draw_mouse

指定是否绘制鼠标指针。值为 0 时,指定不绘制指针。默认值为 1

follow_mouse

使抓取区域跟随鼠标。参数可以是 centered 或像素数 PIXELS

当指定为“centered”时,抓取区域跟随鼠标指针,并将指针保持在区域的中心;否则,仅当鼠标指针到达区域边缘 PIXELS(大于零)像素内时,区域才会跟随。

例如

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

使用 follow_mouse

ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
window_id

抓取此窗口,而不是整个屏幕。默认值为 0,它映射到整个屏幕(根窗口)。

可以使用 xwininfo 程序找到窗口的 ID,可能带有选项 -tree 和 -root。

如果窗口稍后被放大,则不会记录新区域。当窗口关闭、取消映射(即,图标化)或缩小到超出视频大小(默认为初始窗口大小)时,视频结束。

此选项禁用 follow_mouseselect_region 选项。

video_size

设置视频帧大小。默认值为整个桌面或窗口。

grab_x
grab_y

设置抓取区域坐标。它们表示为 X11 窗口左上角的偏移量,并对应于设备名称中的 x_offsety_offset 参数。两个选项的默认值均为 0。

19 重采样器选项

音频重采样器支持以下命名选项。

可以通过在 FFmpeg 工具中指定 -option value,为 aresample 过滤器指定 option=value,在 SwrContext 选项中显式设置值,或者使用 libavutil/opt.h API 进行编程使用来设置选项。

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,启用后,尝试使用基于输入和输出采样率的精确 phase_count。但是,如果它大于 1 << phase_shift,则 phase_count 将回退为 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,为“非理性”比率选择通带滚降 none (Chebyshev) & 更高精度的近似值。默认值为 0。

async

仅针对 swr,使用拉伸、挤压、填充和修剪对时间戳进行简单的 1 参数音频同步。将其设置为 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

选择 none

dolby

选择 Dolby

dplii

选择 Dolby Pro Logic II

默认值为 none

filter_type

仅针对 swr,选择重采样滤波器类型。这只会影响重采样操作。

它接受以下值

cubic

选择 cubic

blackman_nuttall

选择 Blackman Nuttall 窗化 sinc

kaiser

选择 Kaiser 窗化 sinc

kaiser_beta

仅针对 swr,设置 Kaiser 窗口 beta 值。必须是区间 [2,16] 中的双精度浮点值,默认值为 9。

output_sample_bits

仅针对 swr,设置用于抖动的已用输出采样位数。必须是区间 [0,64] 中的整数,默认值为 0,表示不使用。

20 缩放器选项

视频缩放器支持以下命名选项。

可以通过在 FFmpeg 工具中指定 -option value 来设置选项,但下面注明了一些仅限 API 的例外情况。对于编程使用,可以在 SwsContext 选项中或通过 libavutil/opt.h API 显式设置它们。

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

bayer 抖动

ed

误差扩散抖动

a_dither

基于加法的算术抖动

x_dither

基于异或的算术抖动(比 a_dither 更随机/更不明显的图案)。

alphablend

设置当输入具有 alpha 但输出没有 alpha 时要使用的 alpha 混合。默认值为 “none”。

uniform_color

混合到均匀背景颜色上

checkerboard

混合到棋盘上

none

无混合

21 滤镜介绍

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

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

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

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

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

结果将是视频的顶部一半镜像到输出视频的底部一半。

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

发送到 split 的第二个输出(标记为 [tmp])的流通过 crop 过滤器处理,该过滤器裁剪掉视频的下半部分,然后垂直翻转。overlay 过滤器接收 split 过滤器的第一个未更改的输出(标记为 [main]),并在其下半部分覆盖由 crop,vflip 过滤器链生成的输出。

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

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

22 graph2dot

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

调用命令

graph2dot -h

查看如何使用 graph2dot

然后你可以将点描述传递给 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 滤镜图语法

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

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

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

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

filter_name 是所描述滤镜的滤镜类的名称,必须是在程序中注册的滤镜类之一的名称,可以选择后跟 "@id"。滤镜类的名称可以选择后跟字符串 "=arguments"。

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

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

如果选项值本身是一个项目列表(例如,format 滤镜采用像素格式列表),则列表中的项目通常用 ‘|’ 分隔。

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

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

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

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

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

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

如果未标记输出垫,则默认情况下,它将链接到滤镜链中下一个滤镜的第一个未标记输入垫。例如,在滤镜链中:

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

split 滤镜实例有两个输出垫,而 overlay 滤镜实例有两个输入垫。split 的第一个输出垫标记为 "L1",overlay 的第一个输入垫标记为 "L2",而 split 的第二个输出垫链接到 overlay 的第二个输入垫,这两个输入垫都未标记。

在滤镜描述中,如果未指定第一个滤镜的输入标签,则假定为 "in";如果未指定最后一个滤镜的输出标签,则假定为 "out"。

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

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

例如,滤镜图

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

可以表示为

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

[L1][L2] hstack

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

以下是滤镜图语法的 BNF 描述:

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

23.2 关于滤镜图转义的说明

滤镜图描述的组合需要多个级别的转义。有关所采用的转义过程的更多信息,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的“引用和转义”部分

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

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

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

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

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

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

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

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

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

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

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

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

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

例如,对于 drawtext 滤镜,您可能更喜欢使用 textfile 选项来代替 text 选项,以指定要渲染的文本。

24 时间线编辑

一些滤镜支持通用的 enable 选项。对于支持时间线编辑的滤镜,此选项可以设置为一个表达式,该表达式在将帧发送到滤镜之前进行评估。如果评估结果为非零值,则启用该滤镜;否则,该帧将保持不变地发送到滤镜图中的下一个滤镜。

该表达式接受以下值:

t

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

n

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

pos

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

w
h

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

此外,这些滤镜还支持一个 enable 命令,可用于重新定义表达式。

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

例如,要从 10 秒到 3 分钟启用模糊滤镜 (smartblur),并从 3 秒开始启用 curves 滤镜,

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

请参阅 ffmpeg -filters 以查看哪些滤镜支持时间线。

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

一些选项可以在滤镜运行时使用命令进行更改。这些选项在 ffmpeg -h filter=<滤镜名称> 的输出中标记为“T”。命令的名称是选项的名称,参数是新值。

26 具有多个输入的滤镜的选项(帧同步)

一些具有多个输入的滤镜支持一组通用的选项。这些选项只能通过名称设置,而不能使用简短符号。

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 设置信号必须在阈值之下下降多长时间才能再次减少衰减。比所选 attack 时间短的信号将保持不变。信号的整体衰减可以在之后使用 makeup 设置进行补偿。因此,将信号的峰值压缩约 6dB,并将 makeup 提高到此电平,将导致信号比源响亮两倍。为了在压缩中获得更柔和的入口,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

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

该滤镜接受以下选项:

对比度

设置对比度。默认值为 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 分贝。

默认值为 4th

level

设置输入增益级别。允许范围为 0 到 1。默认值为 1。

gains

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

precision

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

auto

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

float

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

double

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

默认值为 auto

27.6.1 示例

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

27.7 acrusher

降低音频位分辨率。

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

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

该滤镜接受以下选项:

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 毫秒。

通道数

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

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 赫兹。允许的范围为 2 到 1000000 赫兹。

dqfactor

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

tfrequency

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

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

选择 Columbia。

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

选择 cubic

选择立方

squ

选择平方根

cbr

选择立方根

par

选择抛物线

exp

选择指数

iqsin

选择反向四分之一正弦波

ihsin

选择反向半个正弦波

dese

选择双指数座

desi

选择双指数 S 形

losi

选择逻辑 S 形

sinc

选择正弦基数函数

isinc

选择反向正弦基数函数

quat

选择四次

quatr

选择四次根

qsin2

选择平方四分之一正弦波

hsin2

选择平方半正弦波

nofade

未应用淡化

设置淡入的初始增益或淡出的最终增益。默认值为 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 个频带中的每一个设置自定义频带噪声配置文件。频带之间用“ ”或“|”分隔。

残余本底,rf

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

跟踪噪声,tn

启用噪声本底跟踪。默认情况下禁用。启用此选项后,将自动调整噪声本底。

跟踪残余,tr

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

输出模式,om

设置输出模式。

它接受以下值

输入,i

保持输入不变。

输出,o

传递已过滤掉的噪声。

噪声,n

仅传递噪声。

默认值为 输出

自适应性,ad

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

本底偏移,fo

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

噪声链接,nl

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

它接受以下值

none

使用未更改的通道的噪声本底。

最小值

使用所有通道测得的最小噪声本底。

最大值

使用所有通道测得的最大噪声本底。

平均值

使用所有通道测得的平均噪声本底。

默认值为 最小值

频带乘数,bm

设置频带乘数因子,用于控制频带在频率 bin 上的扩展程度。允许范围为 0.25。默认值为 1.25

采样噪声,sn

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

它接受以下值

开始,begin

开始采样噪声捕获。

停止,end

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

默认值为 none

增益平滑,gs

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

27.23.1 命令

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

27.23.2 示例

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

27.24 afftfilt

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

实部

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

虚部

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

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

sr

采样率

b

当前频率 bin 编号

nb

可用 bin 的数量

ch

当前表达式的通道号

chs

通道数

pts

当前帧 pts

re

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

im

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

real(b, ch)

返回位于(binchannel)处的频率 bin 的实部值

imag(b, ch)

返回位于(binchannel)处的频率 bin 的虚部值

窗口大小

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

窗口函数

设置窗口函数。

它接受以下值

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

默认值为 hann

重叠

设置窗口重叠。如果设置为 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

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

此滤波器设计用于应用长达 60 秒的长 FIR 滤波器。

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

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

它接受以下参数

干声

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

湿声

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

长度

设置脉冲响应滤波器长度。默认值为 1,这意味着将处理整个 IR。

gtype

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

irnorm

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

irlink

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

irgain

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

irfmt

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

maxir

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

响应

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

channel

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

大小

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

速率

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

minp

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

maxp

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

nbirs

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

ir

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

precision

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

auto

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

float

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

double

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

默认值为 auto。

irload

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

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

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

门限通过检测低于选定级别 threshold 的音量,并将其除以 ratio 设置的因子来完成。噪声本底的底部通过 range 设置。因为对信号的精确操作会导致波形失真,所以可以在一段时间内平衡减少量。这通过设置 attackrelease 来完成。

attack 确定信号必须降到阈值以下多长时间才会发生任何减少,而 release 设置信号必须升到阈值以上多长时间才能再次减少减少量。比选择的启动时间短的信号将保持不变。

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 之间。

响应

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

channel

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

大小

设置视频流大小。此选项仅在启用 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。

限制

不允许高于此电平的信号通过限制器。默认值为 1。

attack

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

release

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

asc

当始终需要增益降低时,ASC 会负责释放到平均降低水平,而不是在释放时间达到 0 的降低值。

asc_level

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

level

自动调整输出信号的电平。默认启用。如果启用,这将音频归一化回 0dB。

延迟

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

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

27.32 allpass

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

该滤镜接受以下选项:

频率,f

设置频率,单位为 Hz。

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以宽度类型单位指定滤波器的带宽。

混合,m

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

通道,c

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

normalize, n

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

阶数,o

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

27.32.1 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

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

宽度,w

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

混合,m

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

27.33 aloop

循环播放音频样本。

该滤镜接受以下选项:

loop

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

大小

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

start

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

时间

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

27.34 amerge

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

该滤镜接受以下选项:

输入

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

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

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

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

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

如果输入的持续时间不同,则输出将以最短的持续时间停止。

27.34.1 示例

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

27.35 amix

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

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

它接受以下参数

输入

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

duration

如何确定流的结束。

最长

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

shortest

最短输入的持续时间。

第一个

第一个输入的持续时间。

丢失过渡

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

权重

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

归一化

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

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 命令

此滤波器支持以下命令

权重
归一化

语法与同名选项相同。

27.36 amultiply

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

通过这种逐元素相乘,可以创建幅度淡化和幅度调制。

27.37 anequalizer

每个通道的高阶参数多频段均衡器。

它接受以下参数

参数

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

chn

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

f

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

w

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

g

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

t

为频段设置滤波器类型,可选,可以是

0

巴特沃斯滤波器,这是默认值。

1

切比雪夫类型 1 滤波器。

2

切比雪夫类型 2 滤波器。

曲线

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

大小

设置视频流大小。仅当激活曲线选项时才有用。

mgain

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

fscale

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

颜色

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

27.37.1 示例

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

27.37.2 命令

此滤波器支持以下命令

更改

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

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

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

27.38 anlmdn

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

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

该滤镜接受以下选项:

强度,s

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

补丁,p

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

研究,r

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

输出,o

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递已过滤掉的噪声。

n

仅传递噪声。

默认值为 o

平滑,m

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

27.38.1 命令

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

27.39 anlmf, anlms

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

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

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

order

设置滤波器阶数。

mu

设置滤波器 mu。

eps

设置滤波器 eps。

泄漏

设置滤波器泄漏。

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_len,也未设置 whole_len,也未设置 pad_dur,也未设置 whole_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 aphaser

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

移相器滤波器在频谱中创建一系列峰值和谷值。峰值和谷值的位置被调制,以便它们随时间变化,从而产生扫描效果。

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

in_gain

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

out_gain

设置输出增益。默认为 0.74

延迟

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

衰减

设置衰减。默认为 0.4。

speed

以赫兹为单位设置调制速度。默认为 0.5。

type

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

它接受以下值

三角形,t
正弦波,s

27.43 aphaseshift

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

该滤镜接受以下选项:

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]。

削波

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

差异

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

adaptive

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

迭代

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

level

自动调整输出信号的电平。默认禁用。如果启用,则将音频标准化回 0dBFS。

27.45.1 命令

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

27.46 apulsator

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

该滤镜接受以下选项:

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

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

27.47 aresample

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

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

该滤波器接受语法 [采样率:]重采样器选项,其中 采样率 表示采样率,而 重采样器选项 是以 ":" 分隔的 = 对列表。有关支持的选项的完整列表,请参见 (ffmpeg-resampler) 手册中的“重采样器选项”部分

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

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

默认值为 o

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。

pad, p

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

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

asetnsamples=n=1234:p=0

27.53 asetrate

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

该滤镜接受以下选项:

sample_rate, r

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

27.54 ashowinfo

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

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

以下值显示在输出中

n

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

pts

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

pts_time

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

fmt

采样格式。

chlayout

通道布局。

速率

音频帧的采样率。

nb_samples

帧中的样本数(每个通道)。

checksum

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

plane_checksums

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

27.55 asisdr

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

此滤波器采用两个音频流作为输入,并输出第一个音频流。结果以分贝为单位,每个通道在任一输入结束时获得。

27.56 asoftclip

应用音频软削波。

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

此滤波器接受以下选项

type

设置软削波的类型。

它接受以下值

hard
tanh
atan
cubic
选择抛物线
alg
quintic
sin
erf
threshold

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

output

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

param

设置控制 S 形函数的其他参数。

oversample

设置过采样因子。

27.56.1 命令

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

27.57 aspectralstats

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

它接受以下选项

窗口大小

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

窗口函数

设置窗口函数。

它接受以下值

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

默认值为 hann

重叠

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

measure

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

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

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

27.58 asr

自动语音识别

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

它接受以下选项

速率

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

hmm

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

dict

设置发音字典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置要使用的语言模型。

logfn

设置日志消息的输出。

此滤镜将识别的语音作为帧元数据 lavfi.asr.text 导出。

27.59 astats

显示有关音频通道的时域统计信息。将计算并显示每个音频通道的统计信息,并在适用时还会提供总体数据。

它接受以下选项

长度

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

metadata

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

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

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

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

请阅读以下键的描述。

reset

设置在重置之前计算累积统计信息的帧数。默认情况下禁用。

measure_perchannel

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

measure_overall

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

以下是对测量键的描述

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

增强低音频率。

该滤镜接受以下选项:

干声

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

湿声

设置湿声增益,保留多少滤波信号。允许的范围是 0 到 1。默认值为 1.0。

boost

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

衰减

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

feedback

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

cutoff

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

斜率

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

延迟

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

通道数

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

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

应用高阶 Butterworth 带通滤波器。

该滤镜接受以下选项:

centerf

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

order

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

qfactor

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

level

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

27.63.1 命令

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

27.64 asuperstop

应用高阶 Butterworth 带阻滤波器。

该滤镜接受以下选项:

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 赫兹。

斜率

设置倾斜的斜率方向。默认值为 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

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

startendduration 以时间持续时间规范表示;请参阅 (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 和 1)。如果结果为 1,则表示两个输入样本在该选定片段中高度相关。结果为 0 表示它们根本不相关。如果结果为 -1,则表示两个输入样本异相,这意味着它们会相互抵消。

该滤镜接受以下选项:

大小

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

algo

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

27.68.1 示例

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

27.69 bandpass

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

该滤镜接受以下选项:

频率,f

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

csg

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

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以宽度类型单位指定滤波器的带宽。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.69.1 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

更改带通 width_type。命令语法为:“width_type

宽度,w

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

混合,m

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

27.70 bandreject

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

该滤镜接受以下选项:

频率,f

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

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以宽度类型单位指定滤波器的带宽。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.70.1 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

更改带阻 width_type。命令语法为:“width_type

宽度,w

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

混合,m

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

27.71 bass, lowshelf

使用与标准高保真音调控制的响应类似的双极搁架滤波器来提升或降低音频的低音(较低)频率。这也称为搁架均衡(EQ)。

该滤镜接受以下选项:

gain, g

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

频率,f

设置滤波器的中心频率,因此可用于扩展或缩小要提升或降低的频率范围。默认值为 100 Hz。

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

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

poles, p

设置极点数。默认值为 2。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.71.1 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

更改低音 width_type。命令语法为:“width_type

宽度,w

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

gain, g

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

混合,m

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

27.72 biquad

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

27.72.1 命令

此滤波器支持以下命令

a0
a1
a2
b0
b1
b2

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

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.73 bs2b

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

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

它接受以下参数

profile

预定义的串扰级别。

default

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

cmoy

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

jmeier

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

fcut

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

feed

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

27.74 channelmap

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

它接受以下参数

map

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

channel_layout

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

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

27.74.1 示例

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

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

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

27.75 channelsplit

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

它接受以下参数

channel_layout

输入流的声道布局。默认为 "stereo"(立体声)。

通道数

一个声道布局,用于描述要提取为单独输出流的声道,或者使用 "all" 来提取每个输入声道作为单独的流。默认为 "all"(全部)。

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

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 chorus

为音频添加合唱效果。

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

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

它接受以下参数

in_gain

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

out_gain

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

delays

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

decays

设置衰减。

速度

设置速度。

深度

设置深度。

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 compand

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

它接受以下参数

启动时间
decays

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

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

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

软拐点

设置所有连接处的曲线半径,单位为分贝 (dB)。默认为 0.01。

增益

设置要应用于传递函数上所有点的附加增益,单位为分贝 (dB)。这样可以轻松调整整体增益。默认为 0。

音量

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

延迟

设置延迟,以秒为单位。会立即分析输入音频,但在将音频馈送到音量调节器之前会延迟。指定一个大致等于启动/衰减时间的延迟,可以使滤波器有效地以预测模式而不是反应模式运行。默认为 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
    
  • 在 -35 dB 处的硬噪声门
    compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
    
  • 软限幅器
    compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
    

27.78 compensationdelay

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

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

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

该滤波器接受以下参数

毫米

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

厘米

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

m

干声

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

湿声

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

温度

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

27.78.1 命令

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

27.79 crossfeed

应用耳机串音滤波器。

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

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

该滤镜接受以下选项:

强度

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

range

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

斜率

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

level_in

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

level_out

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

块大小

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

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

27.79.1 命令

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

27.80 crystalizer

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

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

该滤镜接受以下选项:

i

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

c

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

27.80.1 命令

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

27.81 dcshift

将直流偏移应用于音频。

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

shift

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

limitergain

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

27.82 deesser

对音频样本应用去齿音处理。

i

设置触发去齿音处理的强度。允许范围为 0 到 1。默认值为 0。

m

设置对声音高音部分进行压制的程度。允许范围为 0 到 1。默认值为 0.5。

f

在去齿音处理时保留多少原始频率内容。允许范围为 0 到 1。默认值为 0.5。

s

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递被过滤掉的齿音。

e

仅传递齿音。

默认值为 o

27.83 dialoguenhance

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

此滤波器接受立体声输入并产生环绕声 (3.0) 通道输出。新产生的前置中央声道增强了原始立体声通道中可用的语音对话。此滤波器输出的左前和右前通道与立体声输入中的相同。

该滤镜接受以下选项:

原始

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

增强

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

语音

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

27.83.1 命令

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

27.84 drmeter

测量音频动态范围。

动态范围 (DR) 值在 14 或更高时,通常出现在动态范围非常大的素材中。DR 值在 8 到 13 之间时,通常出现在过渡素材中。任何小于 8 的值都具有非常差的动态范围并且被高度压缩。

该滤镜接受以下选项:

长度

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

27.85 dynaudnorm

动态音频标准化器。

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

framelen, f

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

gausssize, g

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

peak, p

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

maxgain, m

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

targetrms, r

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

耦合, 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 的值将进行不那么保守的增益调整,就像当 framelen 选项设置为较小的值时一样,如果为非零重叠补偿了 framelen 选项值,那么与零重叠情况相比,增益调整在时间上会更平滑。

curve, v

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

该表达式可以包含以下常量

ch

当前通道号

sn

当前样本号

nb_channels

通道数

t

以秒为单位表示的时间戳

sr

采样率

p

当前帧峰值

27.85.1 命令

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

27.86 earwax

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

此过滤器向 44.1kHz 立体声(即音频 CD 格式)音频添加“提示”,以便当在耳机上收听时,立体声图像从您的头部内部(耳机标准)移动到外部和听众的前面(扬声器标准)。

从 SoX 移植。

27.87 equalizer

应用双极峰值均衡 (EQ) 滤波器。使用此滤波器,可以增加或减少所选频率及其周围的信号电平,而(与带通和带阻滤波器不同)所有其他频率的信号电平保持不变。

为了产生复杂的均衡曲线,可以多次使用此滤波器,每次都使用不同的中心频率。

该滤镜接受以下选项:

频率,f

以 Hz 为单位设置滤波器的中心频率。

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以宽度类型单位指定滤波器的带宽。

gain, g

以 dB 为单位设置所需的增益或衰减。使用正增益时要注意削波。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.87.1 示例

  • 在 1000 Hz 处衰减 10 dB,带宽为 200 Hz
    equalizer=f=1000:t=h:width=200:g=-10
    
  • 在 1000 Hz 处应用 2 dB 增益,Q 为 1,在 100 Hz 处衰减 5 dB,Q 为 2
    equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
    

27.87.2 命令

此滤波器支持以下命令

频率,f

更改均衡器频率。命令的语法是:“frequency

宽度类型,t

更改均衡器宽度类型。命令的语法是:“width_type

宽度,w

更改均衡器宽度。命令的语法是:“width

gain, g

更改均衡器增益。命令的语法是:“gain

混合,m

更改均衡器混合。命令的语法是:“mix

27.88 extrastereo

线性增加左右通道之间的差异,从而为播放添加某种“现场”效果。

该滤镜接受以下选项:

m

设置差异系数(默认值:2.5)。0.0 表示单声道声音(两个通道的平均值),1.0 表示声音不变,-1.0 表示左右通道将交换。

c

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

27.88.1 命令

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

27.89 firequalizer

使用任意频率响应应用 FIR 均衡。

此滤镜接受以下选项

增益

设置增益曲线方程(以 dB 为单位)。该表达式可以包含变量

f

评估的频率

sr

采样率

ch

通道号,当禁用多通道评估时设置为 0

chid

通道 ID,请参阅 libavutil/channel_layout.h,当禁用多通道评估时设置为第一个通道 ID

chs

通道数

chlayout

channel_layout,请参阅 libavutil/channel_layout.h

和函数

gain_interpolate(f)

基于 gain_entry 在频率 f 上插值增益

cubic_interpolate(f)

与 gain_interpolate 相同,但更平滑

此选项也可以作为命令使用。默认为 gain_interpolate(f)

gain_entry

为 gain_interpolate 函数设置增益条目。该表达式可以包含函数

entry(f, g)

在频率 f 处存储增益条目,值为 g

此选项也可以作为命令使用。

延迟

以秒为单位设置滤波器延迟。值越高表示越精确。默认为 0.01

accuracy

以 Hz 为单位设置滤波器精度。值越低表示越精确。默认为 5

wfunc

设置窗口函数。可接受的值为

rectangular

矩形窗口,当增益曲线已经平滑时很有用

hann

汉宁窗口(默认)

hamming

汉明窗口

blackman

布莱克曼窗口

nuttall3

3项连续一阶导数努塔尔窗

mnuttall3

最小3项不连续努塔尔窗

nuttall

4项连续一阶导数努塔尔窗

bnuttall

最小4项不连续努塔尔(布莱克曼-努塔尔)窗

bharris

布莱克曼-哈里斯窗

tukey

图基窗

fixed

如果启用,则使用固定数量的音频样本。这可以提高使用较大延迟进行滤波时的速度。默认禁用。

multi

启用增益的多通道评估。默认禁用。

zero_phase

通过减去时间戳来补偿延迟,启用零相位模式。默认禁用。

scale

设置增益使用的比例。可接受的值为

linlin

线性频率,线性增益

linlog

线性频率,对数(以分贝为单位)增益(默认)

loglin

对数(以 20 Hz 为 0 的倍频程尺度)频率,线性增益

loglog

对数频率,对数增益

dumpfile

设置用于转储的文件,适用于 gnuplot。

dumpscale

设置转储文件的比例。可接受的值与 scale 选项相同。默认值为 linlog。

fft2

启用使用复数 FFT 的双通道卷积。这可以显著提高速度。默认禁用。

min_phase

启用最小相位脉冲响应。默认禁用。

27.89.1 示例

  • 1000 Hz 低通
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 使用 gain_entry 的 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 flanger

将镶边效果应用于音频。

该滤镜接受以下选项:

延迟

以毫秒为单位设置基本延迟。范围从 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 haas

将哈斯效应应用于音频。

请注意,这对于应用于单声道信号最有意义。将此滤波器应用于单声道信号时,它会产生一些方向性并拉伸其立体声图像。

该滤镜接受以下选项:

level_in

设置输入电平。默认值为 1,即 0dB

level_out

设置输出电平。默认值为 1,即 0dB。

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

一起处理立体声通道。如果通道之间的 target_gain 不匹配,则认为其无效并使用最后一个有效的 target_gain。

cdt_ms

以毫秒为单位设置代码检测计时器周期。

force_pe

即使未发出 PE 信号,也始终扩展高于 -3dBFS 的峰值。

analyze_mode

用纯音替换音频,并调整幅度以指示解码过程的某些特定方面。可以将输出文件与原始文件一起加载到音频编辑器中以帮助分析。

analyze_mode=pe:force_pe=true 可用于查看 PE 电平以上的所有样本。

模式为

0, off

禁用

1, lle

每个样本的增益调整级别

2, pe

发生峰值扩展的样本

3, cdt

代码检测计时器处于活动状态的样本

4, tgm

通道之间目标增益不匹配的样本

27.93 headphone

应用头部相关传递函数 (HRTF),通过耳机为双耳收听创建用户周围的虚拟扬声器。HRIR 通过附加流提供,每个通道都需要一个立体声输入流。

该滤镜接受以下选项:

map

设置卷积的输入流映射。该参数是以“|”分隔的通道名称列表,按照它们作为过滤器的附加流输入给出的顺序排列。这也指定了输入流的数量。输入流的数量必须不小于第一个流中的通道数加 1。

增益

设置应用于音频的增益。值为 dB。默认值为 0。

type

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq

lfe

为 LFE 通道设置自定义增益。值为 dB。默认值为 0。

大小

以样本数为单位设置将一次处理的帧大小。默认值为 1024。允许的范围是从 1024 到 96000。

hrir

设置 hrir 流的格式。默认值为 stereo。替代值为 multich。如果该值设置为 stereo,则附加流的数量应大于或等于第一个输入流中的输入通道数。此外,每个附加流都应具有立体声通道数。如果该值设置为 multich,则附加流的数量应正好为一个。此外,附加流的输入通道数应等于或大于第一个输入流的通道数的两倍。

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 降混的完整示例,但现在采用 multich hrir 格式。
    ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
    output.wav
    

27.94 highpass

应用具有 3dB 点频率的高通滤波器。该滤波器可以是单极点或双极点(默认)。该滤波器的滚降为每极点每倍频程 6dB(每极点每十倍频 20dB)。

该滤镜接受以下选项:

频率,f

以 Hz 为单位设置频率。默认值为 3000。

poles, p

设置极点数。默认值为 2。

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。仅适用于双极点滤波器。默认值为 0.707q,并给出巴特沃斯响应。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.94.1 命令

此滤波器支持以下命令

频率,f

更改高通频率。命令语法为:“频率

宽度类型,t

更改高通 width_type。命令语法为:“width_type

宽度,w

更改高通宽度。命令语法为:“宽度

混合,m

更改高通混合。命令语法为:“混合

27.95 join

将多个输入流加入到一个多通道流中。

它接受以下参数

输入

输入流的数量。默认为 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)插件。

要启用此滤镜的编译,您需要使用 --enable-ladspa 配置 FFmpeg。

file, f

指定要加载的 LADSPA 插件库的名称。如果定义了环境变量 LADSPA_PATH,则将在 LADSPA_PATH 中以冒号分隔的列表指定的每个目录中搜索 LADSPA 插件,否则在标准的 LADSPA 路径中搜索,这些路径按以下顺序排列:HOME/.ladspa/lib//usr/local/lib/ladspa//usr/lib/ladspa/

plugin, p

指定库中的插件。有些库只包含一个插件,但有些库包含很多插件。如果未设置此项,则滤镜将列出指定库中所有可用的插件。

controls, c

设置用“|”分隔的控制列表,该列表是零个或多个浮点数值,用于确定已加载插件的行为(例如延迟、阈值或增益)。控制项需要使用以下语法定义:c0=value0|c1=value1|c2=value2|...,其中 valuei 是设置在第 i 个控制项上的值。或者,也可以使用以下语法定义:value0|value1|value2|...,其中 valuei 是设置在第 i 个控制项上的值。如果 controls 设置为 help,则会打印所有可用的控制项及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧中每个声道的采样数,默认为 1024。仅在插件没有输入时使用。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被截断。如果未指定,或者表示的持续时间为负,则假定音频将永远生成。仅在插件没有输入时使用。

latency, l

启用延迟补偿,默认情况下禁用。仅在插件有输入时使用。

27.96.1 示例

  • 列出 amp(LADSPA 示例插件)库中所有可用的插件
    ladspa=file=amp
    
  • 列出 VCF 库中 vcf_notch 插件的所有可用控件及其有效范围
    ladspa=f=vcf:p=vcf_notch:c=help
    
  • 使用 Computer Music Toolkit (CMT) 插件库模拟低质量音频设备
    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
    
  • 使用 TAP-plugins(Tom 的音频处理插件)为音频添加混响
    ladspa=file=tap_reverb:tap_reverb
    
  • 生成白噪声,幅度为 0.2
    ladspa=file=cmt:noise_source_white:c=c0=.2
    
  • 使用来自 C* Audio Plugin Suite (CAPS) 库的插件 C* Click - Metronome 生成 20 bpm 的咔哒声
    ladspa=file=caps:Click:c=c1=20'
    
  • 应用 C* Eq10X2 - Stereo 10-band equaliser 效果
    ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
    
  • 使用来自 Steve Harris SWH Plugins 合集的快速前瞻限制器将音量提高 20dB
    ladspa=fast_lookahead_limiter_1913:fastLookaheadLimiter:20|0|2
    
  • 使用来自 Steve Harris SWH Plugins 合集的多频段均衡器衰减低频
    ladspa=mbeq_1197:mbeq:-24|-24|-24|0|0|0|0|0|0|0|0|0|0|0|0
    
  • 使用来自 C* Audio Plugin Suite (CAPS) 库的 Narrower 减小立体声图像
    ladspa=caps:Narrower
    
  • 另一个白噪声,现在使用 C* Audio Plugin Suite (CAPS) 库
    ladspa=caps:White:.2
    
  • 一些分形噪声,使用 C* Audio Plugin Suite (CAPS) 库
    ladspa=caps:Fractal:c=c1=1
    
  • 使用 VLevel 插件进行动态音量归一化
    ladspa=vlevel-ladspa:vlevel_mono
    

27.96.2 命令

此滤波器支持以下命令

cN

修改第 N 个控制项的值。

如果指定的值无效,则会忽略该值并保留先前的值。

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

输入文件的测量 IL。范围为 -99.0 - +0.0。

measured_LRA, measured_lra

输入文件的测量 LRA。范围为 0.0 - 99.0。

measured_TP, measured_tp

输入文件的测量真实峰值。范围为 -99.0 - +99.0。

measured_thresh

输入文件的测量阈值。范围为 -99.0 - +0.0。

offset

设置偏移增益。增益在真实峰值限制器之前应用。范围为 -99.0 - +99.0。默认值为 +0.0。

linear

通过线性缩放源音频进行归一化。必须指定 measured_Imeasured_LRAmeasured_TPmeasured_thresh。目标 LRA 不应低于源 LRA,并且集成响度的变化不应导致真实峰值超过目标 TP。如果不满足任何这些条件,归一化模式将恢复为 dynamic。选项为 truefalse。默认值为 true

dual_mono

将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,则其 EBU R128 测量在感知上是不正确的。如果设置为 true,此选项将补偿此效果。多声道输入文件不受此选项的影响。选项为 true 或 false。默认值为 false。

print_format

设置统计信息的打印格式。选项为 summary、json 或 none。默认值为 none。

27.98 lowpass

应用具有 3dB 点频率的低通滤波器。该滤波器可以是单极或双极(默认)。滤波器以每倍频程每极 6dB(每 10 年每极 20dB)的速率滚降。

该滤镜接受以下选项:

频率,f

设置频率,单位为 Hz。默认值为 500。

poles, p

设置极点数。默认值为 2。

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

以 width_type 单位指定滤波器的带宽。仅适用于双极点滤波器。默认值为 0.707q,并给出巴特沃斯响应。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,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 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

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

宽度,w

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

混合,m

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

27.99 lv2

加载一个 LV2(LADSPA 版本 2)插件。

要启用此滤镜的编译,您需要使用 --enable-lv2 配置 FFmpeg。

plugin, p

指定插件 URI。您可能需要转义“:”。

controls, c

设置用“|”分隔的控制列表,该列表是零个或多个浮点数值,用于确定已加载插件的行为(例如延迟、阈值或增益)。如果 controls 设置为 help,则会打印所有可用的控制项及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧中每个声道的采样数,默认为 1024。仅在插件没有输入时使用。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。请注意,生成的音频的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被截断。如果未指定,或者表示的持续时间为负,则假定音频将永远生成。仅在插件没有输入时使用。

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

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

使用四阶 Linkwitz-Riley IIR 将输入音频分成多个频段。这类似于扬声器的分频器,并且在没有扩展器作用时会导致平坦的频率响应。

它接受以下参数

args

此选项语法为:attack,decay,[attack,decay..] soft-knee points crossover_frequency [delay [initial_volume [gain]]] | attack,decay ... 有关每个项目的解释,请参阅 compand 滤镜文档。

27.101 pan

以特定的增益级别混合声道。该滤镜接受输出声道布局,后跟一组声道定义。

此滤镜还旨在有效地重新映射音频流的声道。

该滤波器接受以下形式的参数:"l|outdef|outdef|..."

l

输出通道布局或通道数

outdef

输出通道规范,形式为:"out_name=[gain*]in_name[(+-)[gain*]in_name...]"

out_name

要定义的输出通道,可以是通道名称(FL,FR等)或通道号(c0,c1等)

增益

通道的乘法系数,1表示音量不变

in_name

要使用的输入通道,详细信息请参阅 out_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_gaintrack_peak

该滤波器接受以下导出的只读选项

track_gain

流结尾处导出的轨道增益(以 dB 为单位)。

track_peak

流结尾处导出的轨道峰值。

27.103 resample

转换音频采样格式、采样率和通道布局。它不打算直接使用。

27.104 rubberband

使用 librubberband 应用时间伸缩和音高偏移。

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

该滤镜接受以下选项:

tempo

设置速度缩放因子。

pitch

设置音高缩放因子。

transients

设置瞬态检测器。可能的值是

crisp
mixed
smooth
detector

设置检测器。可能的值是

compound
percussive
soft
phase

设置相位。可能的值是

laminar
independent
window

设置处理窗口大小。可能的值是

standard
short
long
smoothing

设置平滑。可能的值是

off
on
formant

在进行音高偏移时启用共振峰保留。可能的值是

shifted
preserved
pitchq

设置音高质量。可能的值是

quality
speed
consistency
通道数

设置通道。可能的值是

apart
together

27.104.1 命令

此滤波器支持以下命令

tempo

更改滤镜速度缩放因子。命令的语法是:“tempo

pitch

更改滤波器音高缩放因子。命令的语法是:“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

选择边链流的所有通道之间的平均电平还是边链流的较响亮(最大)通道影响降低。默认值为平均

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。可以是峰值或 rms。

link

选择是所有通道之间的平均电平还是较响亮的通道影响降低。默认值为平均值。可以是平均值或最大值。

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 对应于通道号。

该滤镜接受以下选项:

噪声,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 的完整示例,以检测 silence.mp3 中噪声容限为 0.0001 的静音
    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”)或幅度比率来指定。默认值为 0

start_silence

指定修剪后在开头保留的最大静音持续时间。默认值为 0,这相当于修剪所有检测为静音的样本。

start_mode

指定在多声道音频开头检测静音结束的模式。可以是 anyall。默认值为 any。使用 any 时,来自任何声道的任何被检测为非静音的样本都将触发音频流开头静音修剪的结束。使用 all 时,只有当来自每个声道的每个样本都被检测为非静音时,才会触发音频流开头静音修剪的结束,使用范围有限。

stop_periods

设置从音频末尾修剪静音的计数。指定正值时,它会在找到指定的静音时段后修剪音频。要从文件的中间删除静音,请指定一个负值的 stop_periods。然后,此值将视为正值,并用于指示效果应按照 stop_periods 的指定重新开始处理,使其适合删除音频中间的静音时段。默认值为 0

stop_duration

指定必须存在的静音持续时间,之后才不再复制音频。通过指定较长的持续时间,可以将想要的静音保留在音频中。默认值为 0

stop_threshold

这与 start_threshold 相同,但用于从音频末尾修剪静音。可以使用分贝(如果指定的值附加了“dB”)或幅度比率来指定。默认值为 0

stop_silence

指定修剪后在末尾保留的最大静音持续时间。默认值为 0,这相当于修剪所有检测为静音的样本。

stop_mode

指定在多声道音频开始后检测静音开始的模式。可以是 anyall。默认值为 all。使用 any 时,来自任何声道的任何被检测为静音的样本都将触发音频流开始后静音修剪的开始,使用范围有限。使用 all 时,只有当来自每个声道的每个样本都被检测为静音时,才会触发音频流开始后静音修剪的开始。

detection

设置如何检测静音。

avg

移动窗口中样本绝对值的平均值。

rms

移动窗口中样本绝对值的均方根。

peak

移动窗口中样本绝对值的最大值。

median

移动窗口中样本绝对值的中位数。

ptp

移动窗口中样本的最大峰值与最小峰值之差的绝对值。

dev

移动窗口中样本值的标准差。

默认值为 rms

window

设置用于计算静音检测窗口大小(以样本数表示)的持续时间(以秒为单位)。使用 0 将有效地禁用任何窗口化,并且仅使用每个声道的单个样本进行静音检测。在这种情况下,可能还需要将 start_silence 和/或 stop_silence 设置为非零值,并将 start_duration 和/或 stop_duration 设置为非零值。默认值为 0.02。允许的范围是从 010

timestamp

设置每个音频帧输出时间戳的处理模式。

write

完全重写时间戳,仅保留第一个输出帧的开始时间。

copy

未丢弃的帧保留与输入音频帧相同的时间戳。

默认值为 write

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 使用头部相关传递函数 (HRTF) 通过耳机为用户创建虚拟扬声器,以便进行双耳聆听(支持多达 9 个声道的音频格式)。HRTF 存储在 SOFA 文件中(有关数据库,请参见 http://www.sofacoustics.org/)。SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。

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

该滤镜接受以下选项:

sofa

设置用于渲染的 SOFA 文件。

增益

设置应用于音频的增益。值为 dB。默认值为 0。

rotation

设置虚拟扬声器的旋转角度(以度为单位)。默认值为 0。

elevation

设置虚拟扬声器的仰角(以度为单位)。默认值为 0。

radius

设置扬声器与使用近场 HRTF 的收听者之间的距离(以米为单位)。默认值为 1。

type

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认值为 freq

speakers

设置虚拟扬声器的自定义位置。此选项的语法为: <CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都用简短的通道名称描述,后跟方位角和仰角(以度为单位)。每个虚拟扬声器描述之间用“|”分隔。例如,要覆盖前左和前右通道的位置,请使用:‘speakers=FL 45 15|FR 345 15’。不识别的通道名称的描述将被忽略。

lfegain

为 LFE 通道设置自定义增益。值为 dB。默认值为 0。

framesize

设置自定义帧大小,以样本数量为单位。默认值为 1024。允许的范围为 1024 到 96000。仅当选项‘type’设置为 freq 时才使用。

归一化

导入 SOFA 文件时是否应将所有 IR 进行归一化。默认情况下启用。

interpolate

如果确切位置不匹配,是否应使用相邻的 IR 对最近的 IR 进行插值。默认情况下禁用。

minphase

加载 SOFA 文件时,对所有 IR 进行最小相位处理。默认情况下禁用。

anglestep

设置邻居搜索角度步长。仅当启用选项 interpolate 时才使用。

radstep

设置邻居搜索半径步长。仅当启用选项 interpolate 时才使用。

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

语音标准化器。

此滤波器根据阈值扩展或压缩音频样本的每个半周期(局部样本集全部高于或全部低于零,并且在两个最近的过零点之间),因此在以下选项控制的条件下,音频达到目标峰值。

该滤镜接受以下选项:

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。

延迟

设置左通道与右通道之间以及右通道与左通道之间的延迟(以毫秒为单位)。默认值为 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

此滤波器通过抑制两个通道共有的信号,并将左声道的信号延迟到右声道,反之亦然,从而增强立体声效果,从而拓宽立体声效果。

该滤镜接受以下选项:

延迟

左声道信号延迟到右声道,反之亦然的时间,以毫秒为单位。默认值为 20 毫秒。

feedback

延迟信号到右声道,反之亦然的增益量。使左声道信号在右输出中产生延迟效果,反之亦然,从而产生拓宽效果。默认值为 0.3。

串扰

左声道到右声道的串扰,相位反转。这有助于抑制单声道。如果值为 1,它将消除两个通道共有的所有信号。默认值为 0.3。

干声混合

设置原始通道输入信号的电平。默认值为 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) 手册中的通道布局部分

chl_in

设置输入通道布局。默认情况下,这是 立体声

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

level_in

设置输入音量级别。默认情况下,这是 1

level_out

设置输出音量级别。默认情况下,这是 1

lfe

如果输出通道布局包含 LFE 通道,则启用 LFE 通道输出。默认情况下,此设置已启用。

lfe_low

设置 LFE 低截止频率。默认情况下,这是 128 Hz。

lfe_high

设置 LFE 高截止频率。默认情况下,这是 256 Hz。

lfe_mode

设置 LFE 模式,可以是 addsub。默认值为 add。在 add 模式下,LFE 通道由输入音频创建并添加到输出。在 sub 模式下,LFE 通道由输入音频创建并添加到输出,但所有非 LFE 输出通道也会减去输出 LFE 通道。

smooth

设置时间平滑强度,用于在时间上转换立体声时逐步更改因子。允许的范围是从 0.01.0。当 focus 选项值大于 0.0 时,有助于提高输出质量。默认值为 0.0。只有在此范围内的值且没有边缘的值才有效。

angle

设置立体声环绕变换的角度,允许的范围是从 0360。默认值为 90

focus

设置立体声环绕变换的焦点,允许的范围是从 -11。默认值为 0

fc_in

设置前中置输入音量。默认情况下,这是 1

fc_out

设置前中置输出音量。默认情况下,这是 1

fl_in

设置前左输入音量。默认情况下,这是 1

fl_out

设置前左输出音量。默认情况下,这是 1

fr_in

设置前右输入音量。默认情况下,这是 1

fr_out

设置前右输出音量。默认情况下,这是 1

sl_in

设置侧左输入音量。默认情况下,这是 1

sl_out

设置侧左输出音量。默认情况下,这是 1

sr_in

设置侧右输入音量。默认情况下,这是 1

sr_out

设置侧右输出音量。默认情况下,这是 1

bl_in

设置后左输入音量。默认情况下,这是 1

bl_out

设置后左输出音量。默认情况下,这是 1

br_in

设置后右输入音量。默认情况下,这是 1

br_out

设置后右输出音量。默认情况下,这是 1

bc_in

设置后中置输入音量。默认情况下,这是 1

bc_out

设置后中置输出音量。默认情况下,这是 1

lfe_in

设置 LFE 输入音量。默认情况下,这是 1

lfe_out

设置 LFE 输出音量。默认情况下,这是 1

allx

设置立体声图像在 X 轴上所有通道的展开使用。允许的范围是从 -115。默认情况下,此值为负值 -1,因此未使用。

ally

设置立体声图像在 Y 轴上所有通道的展开使用。允许的范围是从 -115。默认情况下,此值为负值 -1,因此未使用。

fcx、flx、frx、blx、brx、slx、srx、bcx

设置每个通道的立体声图像在 X 轴上的展开使用。允许的范围是从 0.0615。默认情况下,此值为 0.5

fcy、fly、fry、bly、bry、sly、sry、bcy

设置每个通道的立体声图像在 Y 轴上的展开使用。允许的范围是从 0.0615。默认情况下,此值为 0.5

窗口大小

设置窗口大小。允许的范围是从 102465536。默认大小为 4096

窗口函数

设置窗口函数。

它接受以下值

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

默认值为 hann

重叠

设置窗口重叠。如果设置为 1,则将选择所选窗口函数的建议重叠。默认值为 0.5

27.115 tiltshelf

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

该滤镜接受以下选项:

gain, g

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

频率,f

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

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

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

poles, p

设置极点数。默认值为 2。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.115.1 命令

此滤波器支持一些选项作为命令

27.116 treble, highshelf

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

该滤镜接受以下选项:

gain, g

在 ~22 kHz 和奈奎斯特频率中较低的频率处给出增益。其有用范围约为 -20(大幅度衰减)到 +20(大幅度增强)。使用正增益时请注意削波。

频率,f

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

宽度类型,t

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

h

Hz

q

Q 因子

o

倍频程

s

斜率

k

kHz

宽度,w

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

poles, p

设置极点数。默认值为 2。

混合,m

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

通道,c

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

normalize, n

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

变换,a

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

di
dii
tdi
tdii
latt
svf
zdf
精度,r

设置滤波的精度。

auto

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

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

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

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

27.116.1 命令

此滤波器支持以下命令

频率,f

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

宽度类型,t

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

宽度,w

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

gain, g

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

混合,m

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

27.117 tremolo

正弦幅度调制。

该滤镜接受以下选项:

f

以赫兹为单位的调制频率。次谐波范围(20 Hz 或更低)内的调制频率将产生颤音效果。通过指定高于 20 Hz 的调制频率,此滤波器也可以用作环形调制器。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。

27.118 vibrato

正弦相位调制。

该滤镜接受以下选项:

f

以赫兹为单位的调制频率。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。

27.119 virtualbass

应用音频虚拟低音滤波器。

此滤波器接受立体声输入并产生带有 LFE (2.1) 声道输出的立体声。新生成的 LFE 声道具有增强的虚拟低音,最初是从两个立体声声道获得的。此滤波器输出与立体声输入中可用的前置左声道和前置右声道相同,保持不变。

该滤镜接受以下选项:

cutoff

设置虚拟低音截止频率。默认值为 250 Hz。允许范围为 100 到 500 Hz。

强度

设置虚拟低音强度。允许范围为 0.5 到 3。默认值为 3。

27.120 volume

调整输入音频音量。

它接受以下参数

音量

设置音频音量表达式。

输出值被削波到最大值。

输出音频音量由以下关系式给出

output_volume = volume * input_volume

volume 的默认值为 "1.0"。

precision

此参数表示数学精度。

它决定了允许哪些输入采样格式,这会影响音量缩放的精度。

fixed

8 位定点;这会将输入采样格式限制为 U8、S16 和 S32。

float

32 位浮点;这会将输入采样格式限制为 FLT。(默认)

double

64 位浮点;这会将输入采样格式限制为 DBL。

replaygain

选择在输入帧中遇到 ReplayGain 边数据时的行为。

drop

删除 ReplayGain 边数据,忽略其内容(默认)。

ignore

忽略 ReplayGain 边数据,但将其保留在帧中。

track

如果存在,则优先使用音轨增益。

album

如果存在,则优先使用专辑增益。

replaygain_preamp

以 dB 为单位的预放大增益,用于应用于所选的 replaygain 增益。

replaygain_preamp 的默认值为 0.0。

replaygain_noclip

通过限制应用的增益来防止削波。

replaygain_noclip 的默认值为 1。

eval

设置何时评估音量表达式。

它接受以下值

once

仅在过滤器初始化期间或发送 ‘volume’ 命令时评估表达式一次

frame

为每个传入帧评估表达式

默认值为 ‘once’。

音量表达式可以包含以下参数。

n

帧号(从零开始)

nb_channels

通道数

nb_consumed_samples

过滤器消耗的样本数量

nb_samples

当前帧中的样本数量

pos

文件中原始帧的位置;已弃用,请勿使用

pts

帧 PTS

sample_rate

采样率

startpts

流开始时的 PTS

startt

流开始的时间

t

帧时间

tb

时间戳时基

音量

上次设置的音量值

请注意,当 eval 设置为 ‘once’ 时,仅 sample_ratetb 变量可用,所有其他变量将评估为 NAN。

27.120.1 命令

此滤波器支持以下命令

音量

修改音量表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

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 volumedetect

检测输入视频的音量。

该过滤器没有参数。它仅支持 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 之间。
  • 在 -4 dB 处有 6 个样本,在 -5 dB 处有 62 个,在 -6 dB 处有 286 个,等等。

换句话说,将音量提高 +4 dB 不会导致任何削波,将其提高 +5 dB 会导致 6 个样本发生削波,等等。

28 音频源

以下是当前可用音频源的描述。

28.1 abuffer

缓冲音频帧,并使其可用于过滤器链。

此源主要用于编程,特别是通过 libavfilter/buffersrc.h 中定义的接口。

它接受以下参数

time_base

将用于提交帧的时间戳的时基。它必须是浮点数或 numerator/denominator 形式。

sample_rate

传入音频缓冲区的采样率。

sample_fmt

传入音频缓冲区的采样格式。可以是采样格式名称,也可以是 libavutil/samplefmt.h 中枚举 AVSampleFormat 的对应整数表示。

channel_layout

传入音频缓冲区的声道布局。可以是 libavutil/channel_layout.c 中 channel_layout_map 中的声道布局名称,也可以是 libavutil/channel_layout.h 中 AV_CH_LAYOUT_* 宏的对应整数表示。

通道数

传入音频缓冲区的声道数。如果同时指定了 channelschannel_layout,则它们必须一致。

28.1.1 示例

abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo

将指示源接受 44100Hz 的平面 16 位有符号立体声。由于名称为 "s16p" 的采样格式对应于数字 6,而 "stereo" 声道布局对应于值 0x3,因此这等效于

abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3

28.2 aevalsrc

生成由表达式指定的音频信号。

此源接受一个或多个表达式(每个声道一个)作为输入,这些表达式会被评估并用于生成相应的音频信号。

此源接受以下选项

exprs

为每个单独的声道设置以 ‘|’ 分隔的表达式列表。如果未指定 channel_layout 选项,则选择的声道布局取决于提供的表达式数量。否则,最后一个指定的表达式将应用于其余的输出声道。

channel_layout, c

设置声道布局。指定布局中的声道数必须等于指定的表达式数。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参见 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾处被剪切。

如果未指定,或表示的持续时间为负数,则音频应永久生成。

nb_samples, n

设置每个输出帧的每个声道的样本数,默认为 1024。

sample_rate, s

指定采样率,默认为 44100。

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

n

从 0 开始的已评估样本的编号

t

以秒为单位表示的被评估样本的时间,从 0 开始

s

采样率

28.2.1 示例

  • 生成静音
    aevalsrc=0
    
  • 生成频率为 440 Hz 的正弦信号,并将采样率设置为 8000 Hz
    aevalsrc="sin(440*2*PI*t):s=8000"
    
  • 生成一个双声道信号,明确指定声道布局(前置中央 + 后置中央)
    aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
    
  • 生成白噪声
    aevalsrc="-2+random(0)"
    
  • 生成一个幅度调制信号
    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
    
  • 在 360 Hz 的载波上生成 2.5 Hz 的双耳节拍
    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
    

28.3 afdelaysrc

生成分数延迟 FIR 系数。

生成的流可以与 afir 滤波器一起使用,用于过滤音频信号。

该滤镜接受以下选项:

延迟,d

设置分数延迟。默认值为 0。

sample_rate, r

设置采样率,默认值为 44100。

nb_samples, n

设置每帧的采样数。默认值为 1024。

抽头数,t

设置输出音频流中的滤波器系数数量。默认值为 0。

channel_layout, c

指定声道布局,可以是表示声道布局的字符串。 channel_layout 的默认值为“stereo”。

28.4 afireqsrc

生成 FIR 均衡器系数。

生成的流可以与 afir 滤波器一起使用,用于过滤音频信号。

该滤镜接受以下选项:

预设,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
增益,g

设置每个频段的自定义增益。仅当预设选项设置为 custom 时使用。增益之间用空格分隔,每个增益以 dBFS 为单位设置。默认值为 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

频段,b

设置自定义均衡器增益所应用的自定义频段。这必须严格按升序排列。仅当预设选项设置为 custom 时使用。频段之间用空格分隔,每个频段表示频率,单位为 Hz。默认值为 25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000

抽头数,t

设置输出音频流中的滤波器系数数量。默认值为 4096

sample_rate, r

设置输出音频流的采样率,默认值为 44100

nb_samples, n

设置输出音频流中每帧的采样数。默认值为 1024

插值,i

设置 FIR 均衡器系数的插值方法。可以是 linearcubic

相位,h

设置 FIR 滤波器的相位类型。可以是 linearmin:最小相位。默认为最小相位滤波器。

28.5 afirsrc

使用频率采样方法生成 FIR 系数。

生成的流可以与 afir 滤波器一起使用,用于过滤音频信号。

该滤镜接受以下选项:

抽头数,t

设置输出音频流中的滤波器系数数量。默认值为 1025。

频率,f

设置幅度相位值的频率点。这必须是非递减顺序,第一个元素必须是 0,最后一个元素必须是 1。元素之间用空格分隔。

幅度,m

frequency 设置的每个频率点设置幅度值。值的数量必须与频率点的数量相同。值之间用空格分隔。

相位,p

frequency 设置的每个频率点设置相位值。值的数量必须与频率点的数量相同。值之间用空格分隔。

sample_rate, r

设置采样率,默认值为 44100。

nb_samples, n

设置每帧的采样数。默认值为 1024。

窗口函数,w

设置窗口函数。默认为 blackman。

28.6 anullsrc

空音频源,返回未经处理的音频帧。它主要用作模板,并用于分析/调试工具,或作为忽略输入数据的滤波器的源(例如 sox 合成滤波器)。

此源接受以下选项

声道布局,cl

指定声道布局,可以是整数或表示声道布局的字符串。 channel_layout 的默认值为“stereo”。

有关字符串和声道布局值之间的映射,请查看 libavutil/channel_layout.c 中的 channel_layout_map 定义。

sample_rate, r

指定采样率,默认为 44100。

nb_samples, n

设置每个请求帧的采样数。

duration, d

设置源音频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负数,则音频应永久生成。

28.6.1 示例

  • 将采样率设置为 48000 Hz,将声道布局设置为 AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更清晰的语法执行相同的操作
    anullsrc=r=48000:cl=mono
    

所有参数都需要显式定义。

28.7 flite

使用 libflite 库合成语音。

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

请注意,2.0 之前的 flite 库版本不是线程安全的。

该滤镜接受以下选项:

list_voices

如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。

nb_samples, n

设置每帧的最大采样数。默认值为 512。

textfile

设置包含要说的文本的文件名。

text

设置要说的文本。

语音,v

设置用于语音合成的语音。默认值为 kal。另请参阅 list_voices 选项。

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
    
  • 使用 flitelavfi 设备,让 ffplay 说出指定的文本
    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。

幅度,a

指定生成的音频流的幅度(0.0 - 1.0)。默认值为 1.0。

duration, d

指定生成的音频流的持续时间。不指定此选项会导致噪声具有无限长度。

颜色,colour,c

指定噪声的颜色。可用的噪声颜色有白色、粉色、棕色、蓝色、紫色和天鹅绒色。默认颜色为白色。

种子,s

指定用于播种 PRNG 的值。

nb_samples, n

设置每个输出帧的采样数,默认值为 1024。

密度

为天鹅绒噪声发生器设置密度(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。

抽头数,t

设置 FIR 滤波器的长度,默认值为 22051。

nb_samples, n

设置每帧的采样数。

窗口函数,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

设置凯撒窗 beta 值。

att

设置阻带衰减。默认值为 120dB,允许范围为 40 到 180 dB。

round

启用舍入,默认情况下禁用。

hptaps

设置高通滤波器的抽头数。

lptaps

设置低通滤波器的抽头数。

28.11 sine

生成一个由振幅为 1/8 的正弦波组成的音频信号。

音频信号是位精确的。

该滤镜接受以下选项:

频率,f

设置载波频率。默认值为 440 Hz。

beep_factor, b

启用每秒发出一次周期性蜂鸣声,频率为载波频率的 beep_factor 倍。默认值为 0,表示禁用蜂鸣声。

sample_rate, r

指定采样率,默认值为 44100。

duration, d

指定生成的音频流的持续时间。

samples_per_frame

设置每个输出帧的采样数。

该表达式可以包含以下常量

n

输出音频帧的(顺序)编号,从 0 开始。

pts

输出音频帧的 PTS(表示时间戳),以 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
    
  • 生成一个遵循 1602,1601,1602,1601,1602 NTSC 模式的 1 kHz 正弦波
    sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
    

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

区域高度(像素)。

参数 xywh 是表达式,可能包含以下变量

iw

输入帧的宽度。

ih

输入帧的高度。

qoffset

在区域内应用的量化偏移。

这必须是 -1 到 +1 范围内的实数值。值为零表示没有质量变化。负值要求更高的质量(更少的量化),而正值要求更低的质量(更多的量化)。

范围经过校准,因此极端值表示最大可能的偏移 - 如果帧的其余部分以最差的质量编码,则 -1 的偏移表示此区域应以最佳的质量编码。然后,中间值以某种取决于编解码器的方式进行插值。

例如,在 10 位 H.264 中,量化参数在 -12 到 51 之间变化。典型的 qoffset 值 -1/10 因此表示此区域应以比帧的其余部分好大约十分之一的完整范围的 QP 进行编码。因此,如果帧的大部分要以大约 30 的 QP 进行编码,则此区域将获得大约 24 的 QP(偏移量约为 -1/10 * (51 - -12) = -6.3)。极端值 -1 表示此区域应以最佳的质量进行编码,而与帧其余部分的处理方式无关 - 即,应以 -12 的 QP 进行编码。

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 (Advanced Substation Alpha) 字幕文件。

除了 subtitles 滤镜的通用选项外,此滤镜还接受以下选项:

shaping

设置塑形引擎。

可用值为

auto

默认的 libass 塑形引擎,是目前可用的最佳引擎。

simple

快速、不依赖字体的塑形器,只能进行替换。

complex

较慢的塑形器,使用 OpenType 进行替换和定位。

默认为 auto

30.6 atadenoise

对视频输入应用自适应时域平均去噪器。

该滤镜接受以下选项:

0a

设置第一平面的阈值 A。默认为 0.02。有效范围为 0 到 0.3。

0b

设置第一平面的阈值 B。默认为 0.04。有效范围为 0 到 5。

1a

设置第二平面的阈值 A。默认为 0.02。有效范围为 0 到 0.3。

1b

设置第二平面的阈值 B。默认为 0.04。有效范围为 0 到 5。

2a

设置第三平面的阈值 A。默认为 0.02。有效范围为 0 到 0.3。

2b

设置第三平面的阈值 B。默认为 0.04。有效范围为 0 到 5。

阈值 A 用于响应输入信号的突变,而阈值 B 用于响应输入信号的持续变化。

s

设置滤波器用于平均的帧数。默认为 9。必须是 [5, 129] 范围内的奇数。

p

设置滤波器将用于平均的帧的哪些平面。默认为全部。

a

设置滤波器将用于平均的算法变体。默认为 p 并行。也可以设置为 s 串行。

并行可能比串行更快,反之则不然。并行会在第一个变化大于阈值时提前中止,而串行会继续处理帧的其他部分,如果它们等于或低于阈值。

0s
1s
2s

设置第一平面、第二平面或第三平面的 sigma 值。默认为 32767。有效范围为 0 到 32767。此选项控制大小定义的半径内每个像素的权重。默认值表示每个像素具有相同的权重。将此选项设置为 0 会有效地禁用滤波。

30.6.1 命令

此滤镜支持与选项相同的 命令,除了选项 s。该命令接受相应选项的相同语法。

30.7 avgblur

应用平均模糊滤镜。

该滤镜接受以下选项:

sizeX

设置水平半径大小。

planes

设置要过滤哪些平面。默认情况下,所有平面都会被过滤。

sizeY

设置垂直半径大小,如果为零,则与 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

设置高斯函数计算空间权重的 sigma 值。允许的范围是 0 到 512。默认为 0.1。

sigmaR

设置高斯函数计算范围权重的 sigma 值。允许的范围是 0 到 1。默认为 0.1。

planes

设置要过滤的平面。默认为仅第一个。

30.10.1 命令

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

30.11 bilateral_cuda

CUDA 加速的双边滤波器,一种保留边缘的滤波器。由于使用了 GPU 加速,此滤镜在数学上是准确的。为了获得最佳输出质量,请使用一对一的色度子采样,即 yuv444p 格式。

该滤镜接受以下选项:

sigmaS

设置高斯函数计算空间权重的 sigma 值,也称为 sigma 空间。允许的范围是 0.1 到 512。默认为 0.1。

sigmaR

设置高斯函数计算颜色范围权重的 sigma 值,也称为 sigma 颜色。允许的范围是 0.1 到 512。默认为 0.1。

window_size

设置双边函数的窗口大小,以确定要循环的邻居数量。如果输入的数字是偶数,则会自动加一。允许的范围是 1 到 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

设置将图片视为“黑色”的阈值。表示该比率的最小值

nb_black_pixels / nb_pixels

图片被认为是黑色的。默认值为 0.98。

pixel_black_th, pix_th

设置将像素视为“黑色”的阈值。

该阈值表示将像素视为“黑色”的最大像素亮度值。提供的值根据以下公式进行缩放:

absolute_threshold = luma_minimum_value + pixel_black_th * luma_range_size

luma_range_sizeluma_minimum_value 取决于输入视频格式,YUV 全范围格式的范围为 [0-255],YUV 非全范围格式的范围为 [16-235]。

默认值为 0.10。

以下示例将最大像素阈值设置为最小值,并且仅检测 2 秒或更长的黑色间隔。

blackdetect=d=2:pix_th=0.00

30.14 blackframe

检测(几乎)完全黑色的帧。可用于检测章节过渡或广告。输出行包括检测到的帧的帧号、黑色百分比、文件中已知的位置(如果已知)或 -1 以及时间戳(以秒为单位)。

为了显示输出行,您需要将日志级别至少设置为 AV_LOG_INFO 值。

此滤镜导出帧元数据 lavfi.blackframe.pblack。该值表示图片中低于阈值的像素百分比。

它接受以下参数

amount

必须低于阈值的像素百分比;默认为 98

threshold, thresh

像素值被认为是黑色的阈值;默认为 32

30.15 blend

将两个视频帧混合在一起。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶”层,第二个输入是“底”层。默认情况下,当最长的输入终止时,输出终止。

tblend(时间混合)滤镜从单个流中获取两个连续的帧,并输出通过将新帧混合到旧帧之上而获得的结果。

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

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

设置特定像素组件或所有像素组件(对于 all_mode)的混合模式。默认值为 normal

组件模式的可用值有:

addition’(加法)
and’(与)
average’(平均)
bleach’(漂白)
burn’(刻蚀)
darken’(变暗)
difference’(差异)
divide’(除法)
dodge’(减淡)
exclusion’(排除)
extremity’(极端)
freeze’(冻结)
geometric’(几何)
glow’(发光)
grainextract’(颗粒提取)
grainmerge’(颗粒合并)
hardlight’(强光)
hardmix’(强混合)
hardoverlay’(强叠加)
harmonic’(谐波)
heat’(加热)
interpolate’(插值)
lighten’(变亮)
linearlight’(线性光)
multiply’(正片叠底)
multiply128’(正片叠底128)
negation’(否定)
normal
or’(或)
overlay’(叠加)
phoenix’(凤凰)
pinlight’(点光)
reflect’(反射)
screen’(滤色)
softdifference’(柔和差异)
softlight’(柔光)
stain’(染色)
subtract’(减法)
vividlight’(鲜亮光)
xor’(异或)
c0_opacity
c1_opacity
c2_opacity
c3_opacity
all_opacity

为特定像素组件或所有像素组件(在 all_opacity 的情况下)设置混合不透明度。 仅与像素组件混合模式结合使用。

c0_expr
c1_expr
c2_expr
c3_expr
all_expr

为特定像素组件或所有像素组件(在 all_expr 的情况下)设置混合表达式。 请注意,如果设置了相关的模式选项,则这些选项将被忽略。

表达式可以使用以下变量

N

已过滤帧的序列号,从 0 开始。

X
Y

当前样本的坐标

W
H

当前过滤平面的宽度和高度

SW
SH

被过滤平面的宽度和高度缩放比例。它是当前平面尺寸与亮度平面的尺寸之比,例如,对于 yuv420p 帧,亮度平面的值为 1,1,色度平面的值为 0.5,0.5

T

当前帧的时间,以秒为单位。

TOP, A

第一个视频帧(顶层)当前位置的像素组件值。

BOTTOM, B

第二个视频帧(底层)当前位置的像素组件值。

blend 滤镜还支持 framesync 选项。

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 年第 13 届欧洲信号处理会议。

该滤镜接受以下选项:

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 连通性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

radius

定义在边缘像素周围搜索局部最大值的半径。

block_pct

仅针对以百分比给出的最重要块确定模糊度。

block_width

确定宽度为 block_width 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且整个图像作为一个整体进行处理,而与 block_height 无关。

block_height

确定高度为 block_height 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且整个图像作为一个整体进行处理,而与 block_width 无关。

planes

设置要过滤的平面。默认为仅第一个。

30.17.1 示例

  • 确定 80% 的最重要 32x32 块的模糊度
    blurdetect=block_width=32:block_height=32:block_pct=80
    

30.18 bm3d

使用块匹配 3D 算法对帧进行去噪。

该滤镜接受以下选项。

sigma

设置去噪强度。默认值为 1。允许的范围是 0 到 999.9。去噪算法对 sigma 非常敏感,因此请根据源进行调整。

block

设置局部块大小。这设置了 2D 尺寸。

bstep

设置处理块的滑动步长。默认值为 4。允许的范围是 1 到 64。较小的值允许处理更多参考块,但速度较慢。

group

设置 3D 中相似块的最大数量。默认值为 1。设置为 1 时,不进行块匹配。较大的值允许单个组中包含更多块。允许的范围是 1 到 256。

range

设置搜索块匹配的半径。默认值为 9。允许的范围是 1 到 INT32_MAX。

mstep

设置块匹配两个搜索位置之间的步长。默认值为 1。允许的范围是 1 到 64。较小的值较慢。

thmse

设置块匹配的均方误差阈值。有效范围是 0 到 INT32_MAX。

hdthr

设置 3D 变换域中硬阈值的阈值参数。较大的值会导致频域中更强的硬阈值滤波。

estim

设置滤波估计模式。可以是 basicfinal。默认为 basic

ref

如果启用,滤镜将使用第二个流进行块匹配。对于 estim 选项的 basic 值,默认情况下禁用,如果 estim 的值为 final,则始终启用。

planes

设置要过滤的平面。默认情况下,所有可用的平面(除了 alpha 通道)都会被过滤。

30.18.1 示例

  • 使用 bm3d 进行基本滤波
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic
    
  • 与上面相同,但仅过滤亮度
    bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic:planes=1
    
  • 与上面相同,但使用两种估计模式
    split[a][b],[a]bm3d=sigma=3:block=4:bstep=2:group=1:estim=basic[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
    
  • 与上面相同,但先用 nlmeans 滤镜进行预过滤
    split[a][b],[a]nlmeans=s=3:r=7:p=3[a],[b][a]bm3d=sigma=3:block=4:bstep=2:group=16:estim=final:ref=1
    

30.19 boxblur

将盒状模糊算法应用于输入视频。

它接受以下参数

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

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

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

为用于模糊相应输入平面的盒半径(以像素为单位)设置表达式。

半径值必须是非负数,并且对于亮度和 alpha 平面,不得大于表达式 min(w,h)/2 的值,对于色度平面,不得大于 min(cw,ch)/2 的值。

luma_radius 的默认值为 "2"。如果未指定,chroma_radiusalpha_radius 将默认为为 luma_radius 设置的对应值。

表达式可以包含以下常量

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子采样值。 例如,对于像素格式 "yuv422p",hsub 是 2,vsub 是 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定将盒状模糊滤镜应用于相应平面的次数。

luma_power 的默认值为 2。如果未指定,chroma_poweralpha_power 将默认为为 luma_power 设置的对应值。

值为 0 将禁用该效果。

30.19.1 示例

  • 应用盒状模糊滤镜,其中亮度、色度和 alpha 半径设置为 2
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • 将亮度半径设置为 2,将 alpha 和色度半径设置为 0
    boxblur=2:1:cr=0:ar=0
    
  • 将亮度和色度半径设置为视频尺寸的一部分
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

30.20 bwdif

对输入视频进行去隔行处理(“bwdif” 代表 “Bob Weaver Deinterlacing Filter”)。

基于 yadif 的运动自适应反交错,使用 w3fdif 和三次插值算法。它接受以下参数:

mode

要采用的隔行扫描模式。它接受以下值之一:

0,send_frame

每个帧输出一个帧。

1,send_field

每个场输出一个帧。

默认值为 send_field

parity

输入隔行扫描视频所假定的图像场奇偶性。它接受以下值之一:

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用场奇偶性的自动检测。

默认值为 auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0,all

反交错所有帧。

1,interlaced

仅反交错标记为隔行扫描的帧。

默认值为 all

30.21 bwdif_cuda

使用 bwdif 算法反交错输入视频,但以 CUDA 实现,以便它可以作为带有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分工作。

它接受以下参数

mode

要采用的隔行扫描模式。它接受以下值之一:

0,send_frame

每个帧输出一个帧。

1,send_field

每个场输出一个帧。

默认值为 send_field

parity

输入隔行扫描视频所假定的图像场奇偶性。它接受以下值之一:

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用场奇偶性的自动检测。

默认值为 auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0,all

反交错所有帧。

1,interlaced

仅反交错标记为隔行扫描的帧。

默认值为 all

30.22 ccrepack

重新打包 CEA-708 字幕辅助数据

此过滤器修复了商业编码器中看到的与上游格式错误的 CEA-708 有效负载相关的各种问题,特别是元组数量不正确(目标 FPS 的 cc_count 错误)以及元组顺序不正确(即 CEA-608 元组不在有效负载的第一个条目)。

30.23 cas

将对比度自适应锐化滤镜应用于视频流。

该滤镜接受以下选项:

强度

设置锐化强度。默认值为 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 色彩空间颜色/色度键控。

此过滤器的工作方式类似于普通的色度键控过滤器,但在 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

设置边缘模式,可以是 smear(默认)或 warp

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

设置 cie 示波器大小,默认设置为 512。

intensity, i

设置用于将输入像素值映射到 CIE 图的强度。

对比度

设置用于绘制超出活动颜色系统色域的舌头颜色的对比度。

corrgamma

校正示波器上显示的伽玛值,默认启用。

showwhite

在 CIE 图上显示白点,默认禁用。

gamma

设置输入伽玛值。仅与 XYZ 输入色彩空间一起使用。

fill

用 CIE 颜色填充。默认情况下启用。

30.30 codecview

可视化某些编解码器导出的信息。

某些编解码器可以通过使用辅助数据或其他方式的帧导出信息。例如,某些基于 MPEG 的编解码器通过编解码器 flags2 选项中的 export_mvs 标志导出运动向量。

此滤镜接受以下选项

block

使用亮度平面显示块分区结构。

mv

设置要可视化的运动向量。

mv 的可用标志为:

pf

P 帧的前向预测 MV

bf

B 帧的前向预测运动矢量

bb

B 帧的后向预测运动矢量

量化参数 (qp)

使用色度平面显示量化参数。

运动矢量类型, mvt

设置要可视化的运动矢量类型。包括所有帧的运动矢量,除非由 frame_type 选项指定。

mv_type 可用的标志是

fp

前向预测运动矢量

bp

后向预测运动矢量

帧类型, ft

设置要可视化运动矢量的帧类型。

frame_type 可用的标志是

if

帧内编码帧(I 帧)

pf

预测帧(P 帧)

bf

双向预测帧(B 帧)

30.30.1 示例

  • 使用 ffplay 可视化所有帧的前向预测运动矢量
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 使用 ffplay 可视化 P 帧和 B 帧的多向运动矢量
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

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

设置每个 rcgmby 选项值的权重。默认值为 0.0。允许范围为 0.0 到 1.0。如果所有权重均为 0.0,则禁用滤波。

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。

饱和度

设置饱和度量。允许范围为 -3.0 到 3.0。默认值为 1。

分析

如果设置为除 manual 之外的任何值,它将分析每一帧,并使用派生的参数来过滤输出帧。

可能的值为

manual
average’(平均)
minmax
median

默认值为 manual

30.33.1 命令

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

30.34 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此滤镜通过添加与同一像素的其他通道相关联的值来修改颜色通道。例如,如果要修改的值是红色,则输出值将为

red=red*rr + blue*rb + green*rg + alpha*ra

该滤镜接受以下选项:

rr
rg
rb
ra

调整输入红色、绿色、蓝色和 alpha 通道对输出红色通道的贡献。 rr 的默认值为 1rgrbra 的默认值为 0

gr
gg
gb
ga

调整输入红色、绿色、蓝色和 alpha 通道对输出绿色通道的贡献。gg 的默认值为 1grgbga 的默认值为 0

br
bg
bb
ba

调整输入红色、绿色、蓝色和 alpha 通道对输出蓝色通道的贡献。bb 的默认值为 1brbgba 的默认值为 0

ar
ag
ab
aa

调整输入红色、绿色、蓝色和 alpha 通道对输出 alpha 通道的贡献。aa 的默认值为 1aragab 的默认值为 0

选项的允许范围为 [-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 colorize

在视频流上覆盖纯色。

该滤镜接受以下选项:

色调

设置颜色色调。允许范围为 0 到 360。默认值为 0。

饱和度

设置颜色饱和度。允许范围为 0 到 1。默认值为 0.5。

亮度

设置颜色亮度。允许范围为 0 到 1。默认值为 0.5。

mix

设置源亮度的混合。默认设置为 1.0。允许范围为 0.0 到 1.0。

30.35.1 命令

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

30.36 colorkey

RGB 色彩空间的颜色键控。此滤镜通过将落在关键颜色的相似半径内的每个像素的 alpha 分量设置为 0,从而对 8 位 RGB 格式的帧进行操作。相似半径之外的像素的 alpha 值取决于混合选项的值。

该滤镜接受以下选项:

color

设置 alpha 将设置为 0(完全透明)的颜色。请参阅 ffmpeg-utils 手册中的“(ffmpeg-utils)“颜色”部分。默认值为 black

similarity

设置其他颜色也具有完全透明度的关键颜色的半径。计算出的距离与关键颜色的 RGB 值与像素颜色之间在 3D 空间中的单位分数距离有关。范围为 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 colorhold

删除除特定颜色之外的所有 RGB 颜色的所有颜色信息。

该滤镜接受以下选项:

color

将不会被替换为中性灰色的颜色。

similarity

与上述颜色的相似度百分比。 0.01 仅匹配确切的键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。0.0 使像素完全为灰色。较高的值会导致保留更多的颜色。

30.37.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.38 colorlevels

使用级别调整视频输入帧。

该滤镜接受以下选项:

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 colormap

将自定义颜色映射应用于视频流。

此滤镜需要三个输入视频流。第一个流是要被过滤掉的视频流。第二个和第三个视频流指定源颜色到目标颜色映射的颜色块。

该滤镜接受以下选项:

patch_size

设置源和目标视频流的色块大小(以像素为单位)。

nb_patches

设置源和目标视频流中使用的最大色块数量。默认值是附加视频流中可用的色块数量。允许的最大色块数量为 64

type

设置用于目标颜色的调整。可以是 relativeabsolute。默认为 absolute

kernel

设置用于测量映射颜色之间颜色差异的内核。

接受的值为

euclidean
weuclidean

默认值为 euclidean

30.40 colormatrix

转换颜色矩阵。

该滤镜接受以下选项:

src
dst

指定源和目标颜色矩阵。必须同时指定这两个值。

接受的值为

bt709

BT.709

fcc

FCC

bt601

BT.601

bt470

BT.470

bt470bg

BT.470BG

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

例如,要从 BT.601 转换为 SMPTE-240M,请使用命令

colormatrix=bt601:smpte240m

30.41 colorspace

转换色彩空间、传递特性或色彩原色。输入视频需要具有偶数大小。

该滤镜接受以下选项:

all

一次指定所有颜色属性。

接受的值为

bt470m

BT.470M

bt470bg

BT.470BG

bt601-6-525

BT.601-6 525

bt601-6-625

BT.601-6 625

bt709

BT.709

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

space

指定输出色彩空间。

接受的值为

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

ycgco

YCgCo

bt2020ncl

具有非恒定亮度的 BT.2020

trc

指定输出传递特性。

接受的值为

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG

gamma22

恒定伽玛值 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

用于 10 位内容的 BT.2020

bt2020-12

用于 12 位内容的 BT.2020

primaries

指定输出色彩原色。

接受的值为

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

film

film

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22 荧光粉

range

指定输出颜色范围。

接受的值为

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(全)范围

jpeg

JPEG(全)范围

格式

指定输出颜色格式。

接受的值为

yuv420p

YUV 4:2:0 平面 8 位

yuv420p10

YUV 4:2:0 平面 10 位

yuv420p12

YUV 4:2:0 平面 12 位

yuv422p

YUV 4:2:2 平面 8 位

yuv422p10

YUV 4:2:2 平面 10 位

yuv422p12

YUV 4:2:2 平面 12 位

yuv444p

YUV 4:4:4 平面 8 位

yuv444p10

YUV 4:4:4 平面 10 位

yuv444p12

YUV 4:4:4 平面 12 位

fast

执行快速转换,跳过伽玛/原色校正。这将占用更少的 CPU,但在数学上是不正确的。要获得与 colormatrix 滤镜产生的输出兼容的输出,请使用 fast=1。

dither

指定抖动模式。

接受的值为

none

无抖动

fsb

Floyd-Steinberg 抖动

wpadapt

白点适配模式。

接受的值为

bradford

Bradford 白点适配

vonkries

von Kries 白点适配

identity

恒等白点适配(即无白点适配)

iall

一次覆盖所有输入属性。接受的值与 all 相同。

ispace

覆盖输入色彩空间。接受的值与 space 相同。

iprimaries

覆盖输入色彩原色。接受的值与 primaries 相同。

itrc

覆盖输入传递特性。接受的值与 trc 相同。

irange

覆盖输入颜色范围。接受的值与 range 相同。

该滤镜将传递特性、色彩空间和色彩原色转换为指定的用户值。如果未指定输出值,则会根据 "all" 属性将其设置为默认值。如果该属性也未指定,则滤镜将记录错误。输出颜色范围和格式默认为与输入颜色范围和格式相同的值。输入传递特性、色彩空间、色彩原色和颜色范围应在输入数据上设置。如果缺少其中任何一项,则滤镜将记录错误,并且不会进行转换。

例如,要将输入转换为 SMPTE-240M,请使用命令

colorspace=smpte240m

30.42 colorspace_cuda

色彩空间滤镜的 CUDA 加速实现。

与软件色彩空间滤镜相比,它在功能上远未完善,并且目前仅支持 jpeg/全范围和 mpeg/受限范围之间的颜色范围转换。

该滤镜接受以下选项:

range

指定输出颜色范围。

接受的值为

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(全)范围

jpeg

JPEG(全)范围

30.43 colortemperature

调整视频中的色温,以模拟环境色温的变化。

该滤镜接受以下选项:

temperature

以开尔文为单位设置温度。允许范围为 1000 到 40000。默认值为 6500 K。

mix

设置与过滤输出的混合。允许范围为 0 到 1。默认值为 1。

pl

设置保留亮度的量。允许范围为 0 到 1。默认值为 0。

30.43.1 命令

此滤镜支持与选项相同的 命令

30.44 convolution

应用 3x3、5x5、7x7 或水平/垂直(最多 49 个元素)的卷积。

该滤镜接受以下选项:

0m
1m
2m
3m

为每个平面设置矩阵。矩阵是 square 模式下 9、25 或 49 个有符号整数的序列,在 row 模式下是 1 到 49 个奇数个有符号整数的序列。

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面的计算值设置乘数。如果未设置或为 0,则将为 1/所有矩阵元素的总和。

0bias
1bias
2bias
3bias

为每个平面设置偏置。此值将添加到乘法的结果中。对于使整个图像更亮或更暗非常有用。默认值为 0.0。

0mode
1mode
2mode
3mode

为每个平面设置矩阵模式。可以是 squarerowcolumn。默认值为 square

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 convolve

使用第二个流作为脉冲,在频域中应用视频流的 2D 卷积。

该滤镜接受以下选项:

planes

设置要处理的平面。

脉冲

设置要处理的脉冲视频帧,可以是 firstall。默认值为 all

convolve 滤镜也支持 framesync 选项。

30.46 copy

将输入视频源原封不动地复制到输出。这主要用于测试目的。

30.47 coreimage

在 OSX 上使用 Apple 的 CoreImage API 进行 GPU 视频滤波。

硬件加速基于 OpenGL 上下文。通常,这意味着它由视频硬件处理。但是,存在基于软件的 OpenGL 实现,这意味着不能保证硬件处理。这取决于各自的 OSX。

Apple 提供了许多带有各种选项的滤镜和图像生成器。必须通过其名称及其选项引用该滤镜。

coreimage 滤镜接受以下选项

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-HOST 传输,从而可以快速处理复杂的滤镜链。当前,仅支持具有零个(生成器)或恰好一个(滤镜)输入图像和一个输出图像的滤镜。此外,过渡滤镜尚未按预期使用。

某些滤镜会根据各自的滤镜内核生成带有额外填充的输出图像。会自动删除填充,以确保滤镜输出与输入图像的大小相同。

对于图像生成器,输出图像的大小由滤镜链的前一个输出图像或整个滤镜链的输入图像确定。生成器不使用此图像的像素信息来生成其输出。但是,生成的输出会混合到此图像上,从而导致部分或完全覆盖输出图像。

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 主页创建一个 QR 码,以 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

覆盖矩形对象

它接受以下选项

覆盖

可选覆盖图像的文件路径,需要为 yuv420 格式。

mode

设置覆盖模式。

它接受以下值

cover

用提供的图像覆盖它

blur

通过插值周围的像素来覆盖它

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

out_wout_hxy 参数是包含以下常数的表达式

x
y

xy 的计算值。它们为每个新帧进行评估。

in_w
in_h

输入宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(裁剪)宽度和高度。

ow
oh

这些与 out_wout_h 相同。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

n

输入帧的编号,从 0 开始。

pos

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

t

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

out_w 的表达式可能取决于 out_h 的值,而 out_h 的表达式可能取决于 out_w,但它们不能取决于 xy,因为 xy 是在 out_wout_h 之后评估的。

参数 xy 指定输出(未裁剪)区域左上角的表达式。它们会对每一帧进行求值。如果求得的值无效,则会近似为最接近的有效值。

x 的表达式可能依赖于 y,而 y 的表达式可能依赖于 x

30.50.1 示例

  • 在位置 (12, 34) 处裁剪大小为 100x100 的区域。
    crop=100:100:12:34
    

    使用命名选项,上面的示例变为

    crop=w=100:h=100:x=12:y=34
    
  • 裁剪输入视频的中心区域,大小为 100x100
    crop=100:100
    
  • 裁剪输入视频的中心区域,大小为输入视频的 2/3
    crop=2/3*in_w:2/3*in_h
    
  • 裁剪输入视频的中心正方形
    crop=out_w=in_h
    crop=in_h
    
  • 限定一个矩形,其左上角位于位置 100:100,右下角与输入图像的右下角对齐。
    crop=in_w-100:in_h-100:100:100
    
  • 从左右边界裁剪 10 个像素,从上下边界裁剪 20 个像素
    crop=in_w-2*10:in_h-2*20
    
  • 仅保留输入图像的右下四分之一
    crop=in_w/2:in_h/2:in_w/2:in_h/2
    
  • 裁剪高度以获得希腊和谐比例
    crop=in_w:1/PHI*in_w
    
  • 应用颤抖效果
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
    
  • 应用取决于时间戳的不稳定相机效果
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)
    
  • 设置 x 的值取决于 y 的值
    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
    

30.50.2 命令

此滤波器支持以下命令

w, out_w
h, out_h
x
y

设置输出视频的宽度/高度以及输入视频中的水平/垂直位置。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.51 cropdetect

自动检测裁剪大小。

它会计算必要的裁剪参数,并通过日志系统打印建议的参数。检测到的尺寸对应于根据 mode 输入视频的非黑色或视频区域。

它接受以下参数

mode

根据 mode,裁剪检测基于周围像素的纯黑色值或运动矢量和边缘像素的组合。

black

检测播放视频周围的黑色像素。要进行精细控制,请使用选项 limit

mvedges

通过视频内部的运动矢量和扫描通常构成播放视频边界的边缘像素来检测播放视频。

限制

设置更高的黑色值阈值,可以选择从无 (0) 到全部(对于 8 位格式为 255)进行指定。大于设定值的强度值被认为是黑色。默认值为 24。您还可以指定介于 0.0 和 1.0 之间的值,该值将根据像素格式的位深度进行缩放。

round

宽度/高度应被整除的值。默认值为 16。偏移量会自动调整以使视频居中。使用 2 可以仅获得偶数尺寸(4:2:2 视频需要)。当编码到大多数视频编解码器时,16 是最佳选择。

skip

设置跳过评估的初始帧数。默认值为 2。范围是 0 到 INT_MAX。

reset_count, reset

设置计数器,该计数器确定在多少帧之后,cropdetect 将重置先前检测到的最大视频区域,并重新开始检测当前最佳裁剪区域。默认值为 0。

当频道徽标扭曲视频区域时,这可能很有用。0 表示“从不重置”,并返回播放期间遇到的最大区域。

mv_threshold

设置运动检测的像素单位阈值。默认值为 8。

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过 8 连通性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,且 low 应小于或等于 high

low 的默认值为 5/255high 的默认值为 15/255

30.51.1 示例

  • 查找被黑色边框包围的视频区域
    ffmpeg -i file.mp4 -vf cropdetect,metadata=mode=print -f null -
    
  • 查找嵌入式视频区域,预先生成运动矢量
    ffmpeg -i file.mp4 -vf mestimate,cropdetect=mode=mvedges,metadata=mode=print -f null -
    
  • 查找嵌入式视频区域,使用解码器中的运动矢量
    ffmpeg -flags2 +export_mvs -i file.mp4 -vf cropdetect=mode=mvedges,metadata=mode=print -f null -
    

30.51.2 命令

此滤波器支持以下命令

限制

该命令接受相应选项的相同语法。如果指定的表达式无效,则保持其当前值。

30.52 cue

延迟视频过滤直到给定的挂钟时间戳。过滤器首先传递 preroll 数量的帧,然后缓冲最多 buffer 数量的帧并等待提示。到达提示后,它会转发缓冲的帧以及后续的任何输入帧。

该过滤器可用于同步多个 ffmpeg 进程的输出,以用于诸如 decklink 之类的实时输出设备。通过将延迟放在过滤链中并预缓冲帧,该进程可以在达到目标挂钟时间戳后几乎立即将数据传递给输出。

不能保证完美的帧精度,但对于某些用例来说,结果足够好。

cue

以微秒为单位的 UNIX 时间戳表示的提示时间戳。默认值为 0。

preroll

以秒为单位表示的要作为预卷传递的内容持续时间。默认值为 0。

buffer

以秒为单位表示的在等待提示之前要缓冲的最大内容持续时间。默认值为 0。

30.53 curves

使用曲线应用颜色调整。

此滤镜类似于 Adobe Photoshop 和 GIMP 曲线工具。每个组件(红色、绿色和蓝色)的值由 N 个使用平滑曲线相互连接的关键点定义。x 轴表示输入帧的像素值,y 轴表示要为输出帧设置的新像素值。

默认情况下,组件曲线由两个点 (0;0)(1;1) 定义。这将创建一条直线,其中每个原始像素值都被“调整”为其自身的值,这意味着图像没有变化。

该滤镜允许您重新定义这两个点并添加更多点。将定义一条新曲线以平滑地穿过所有这些新坐标。新定义的点需要在 x 轴上严格递增,并且它们的 xy 值必须在 [0;1] 区间内。曲线通过使用自然或单调三次样条插值形成,具体取决于 interp 选项(默认值:natural)。natural 样条通常会产生更平滑的曲线,而单调 (pchip) 样条则保证指定点之间的过渡是单调的。如果计算出的曲线恰好超出向量空间,则将相应地剪切这些值。

该滤镜接受以下选项:

preset

选择一个可用的颜色预设。此选项可以与 rgb 参数一起使用;在这种情况下,后面的选项优先于预设值。可用的预设为

none
color_negative
cross_process
darker
increase_contrast
lighter
linear_contrast
medium_contrast
negative
strong_contrast
vintage

默认值为 none

master, m

设置主关键点。这些点将定义第二次传递映射。它有时被称为“亮度”或“值”映射。它可以与 rgball 一起使用,因为它就像一个后处理 LUT。

red, r

设置红色分量的关键点。

green, g

设置绿色分量的关键点。

blue, b

设置蓝色分量的关键点。

all

设置所有分量的关键点(不包括主关键点)。可以与其他关键点组件选项一起使用。在这种情况下,未设置的组件将回退到此 all 设置。

psfile

指定一个 Photoshop 曲线文件 (.acv) 以从中导入设置。

plot

将曲线的 Gnuplot 脚本保存在指定的文件中。

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'
    
  • 使用 ffmpeggnuplot 查看 cross_process 配置文件的曲线
    ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
    gnuplot -p /tmp/curves.plt
    

30.54 datascope

视频数据分析过滤器。

此过滤器显示视频部分区域的十六进制像素值。

该滤镜接受以下选项:

size, s

设置输出视频大小。

x

设置从何处选取像素的 x 偏移量。

y

设置从何处选取像素的 y 偏移量。

mode

设置范围模式,可以是以下之一

mono

在黑色背景上用白色绘制十六进制像素值。

color

在黑色背景上使用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中选取的彩色背景上绘制十六进制像素值,文本颜色以始终可见的方式选取。

在视频的左侧和顶部绘制行号和列号。

不透明度

设置背景不透明度。

格式

设置显示数字格式。可以是 hexdec。默认为 hex

分量

设置要显示像素分量。默认情况下,将显示所有像素分量。

30.54.1 命令

此过滤器支持与选项相同的 命令,但不包括 size 选项。

30.55 dblur

应用方向模糊滤镜。

该滤镜接受以下选项:

angle

设置方向模糊的角度。默认为 45

radius

设置方向模糊的半径。默认为 5

planes

设置要过滤哪些平面。默认情况下,所有平面都会被过滤。

30.55.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.56 dctdnoiz

使用 2D DCT(频域滤波)对帧进行去噪。

此过滤器不是为实时设计的。

该滤镜接受以下选项:

西格玛, s

设置噪声西格玛常数。

西格玛 定义了 3 * 西格玛 的硬阈值;低于此阈值的每个 DCT 系数(绝对值)都将被丢弃。

如果您需要更高级的滤波,请参阅 expr

默认为 0

重叠

设置每个块的重叠像素数。由于过滤器可能很慢,您可能希望减小此值,但代价是降低过滤器的效果,并存在各种伪影的风险。

如果重叠值不允许处理整个输入宽度或高度,将显示警告,并且相应的边界将不会去噪。

默认值为 块大小-1,这是最佳设置。

表达式, e

设置系数因子表达式。

对于 DCT 块的每个系数,此表达式将被计算为该系数的乘数值。

如果设置了此选项,则将忽略 sigma 选项。

可以通过 c 变量访问该系数的绝对值。

n

使用位数设置 块大小1<<n 定义了 块大小,它是处理块的宽度和高度。

默认值为 3 (8x8),对于 16x16 的 块大小,可以提高到 4。请注意,更改此设置会对处理速度产生巨大影响。此外,较大的块大小并不一定意味着更好的去噪。

30.56.1 示例

应用西格玛值为 4.5 的去噪

dctdnoiz=4.5

可以使用表达式系统实现相同的操作

dctdnoiz=e='gte(c, 4.5*3)'

使用 16x16 的块大小进行剧烈去噪

dctdnoiz=15:n=4

30.57 deband

从输入视频中消除条带伪影。它的工作原理是将带状像素替换为参考像素的平均值。

该滤镜接受以下选项:

1thr
2thr
3thr
4thr

为每个平面设置条带检测阈值。默认值为 0.02。有效范围为 0.00003 到 0.5。如果当前像素和参考像素之间的差异小于阈值,则将其视为带状。

范围, r

像素中的条带检测范围。默认值为 16。如果为正数,将使用范围 0 到设定值之间的随机数。如果为负数,将使用精确的绝对值。该范围定义了当前像素周围四个像素的正方形。

方向, d

设置将比较四个像素的弧度方向。如果为正数,将从 0 到设定方向之间选择随机方向。如果为负数,将选择精确的绝对值。例如,方向 0、-PI 或 -2*PI 弧度将仅选择同一行上的像素,而 -PI/2 将仅选择同一列上的像素。

模糊, b

如果启用,则将当前像素与周围所有四个像素的平均值进行比较。默认情况下启用。如果禁用,则将当前像素与周围所有四个像素进行比较。如果仅与周围像素的所有四个差异都小于阈值,则将该像素视为带状。

耦合, c

如果启用,则仅当所有像素分量均为带状时才会更改当前像素,例如,所有颜色分量都触发了条带检测阈值。默认情况下禁用。

30.57.1 命令

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

30.58 deblock

消除输入视频中的块伪影。

该滤镜接受以下选项:

filter

设置过滤器类型,可以是 。默认为 。这控制应用哪种类型的去块。

block

设置块的大小,允许的范围是 4 到 512。默认为 8

alpha
beta
gamma
delta

设置块检测阈值。允许的范围是 0 到 1。默认值为:alpha0.098,其余为 0.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 decimate

按固定间隔删除重复帧。

该滤镜接受以下选项:

循环

设置将删除一帧的帧数。将其设置为 N 表示每批 N 帧中的一帧将被删除。默认值为 5

dupthresh

设置重复检测的阈值。如果帧的差异度量小于或等于此值,则将其声明为重复。默认值为 1.1

scthresh

设置场景更改阈值。默认值为 15

块x
块y

设置度量计算期间使用的 x 轴和 y 轴块的大小。较大的块可提供更好的噪声抑制,但也使对小运动的检测效果更差。必须是 2 的幂。默认值为 32

ppsrc

将主输入标记为预处理输入,并激活干净的源输入流。这允许使用各种过滤器预处理输入,以帮助度量计算,同时保持帧选择无损。当设置为 1 时,第一个流用于预处理输入,第二个流是从中选择保留帧的干净源。默认值为 0

色度

设置在度量计算中是否考虑色度。默认值为 1

mixed

设置输入是否仅部分包含要抽取的内容。默认为 false。如果启用,视频输出流将为可变帧率。

30.60 deconvolve

使用第二个流作为脉冲,在频域中应用视频流的 2D 反卷积。

该滤镜接受以下选项:

planes

设置要处理的平面。

脉冲

设置要处理的脉冲视频帧,可以是 firstall。默认值为 all

噪声

在进行除法时设置噪声。默认值为 0.0000001。当宽度和高度不同且不是 2 的幂或者卷积之前的流有噪声时很有用。

deconvolve 过滤器还支持 framesync 选项。

30.61 dedot

减少视频中的交叉亮度(点爬行)和交叉颜色(彩虹)。

它接受以下选项

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 的输出将具有可变的帧率。可能会更改容器的记录帧率。除了该更改之外,此滤镜不会影响恒定帧率视频。

此滤镜中可用的选项是

循环

指定抖动重复的窗口长度。

接受任何大于 1 的整数。有用的值是

4

如果原始帧率是从 24 到 30 fps 的电视电影转换(电影到 NTSC)。

5

如果原始帧率是从 25 到 30 fps 的电视电影转换(PAL 到 NTSC)。

20

如果两者混合。

默认值为 ‘4’。

30.65 delogo

通过对周围像素进行简单插值来抑制电视台徽标。只需设置一个覆盖徽标的矩形,然后看着它消失(有时会出现更丑陋的东西 - 效果可能因人而异)。

它接受以下参数

x
y

指定徽标的左上角坐标。必须指定它们。

w
h

指定要清除的徽标的宽度和高度。必须指定它们。

show

设置为 1 时,屏幕上会绘制一个绿色矩形,以简化查找正确的 xywh 参数。默认值为 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 for C 库(请参阅 https://tensorflowcn.cn/install/lang_c)并使用 --enable-libtensorflow 配置 FFmpeg

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 只能加载其格式的文件。

要获得完整功能(例如异步执行),请使用 dnn_processing 滤镜。

30.67 deshake

尝试修复水平和/或垂直偏移中的微小变化。此滤镜有助于消除手持相机、撞到三脚架、在车辆上移动等引起的相机抖动。

该滤镜接受以下选项:

x
y
w
h

指定一个矩形区域,在其中限制运动矢量的搜索。如果需要,可以将运动矢量的搜索限制为帧的矩形区域,该矩形区域由其左上角、宽度和高度定义。这些参数的含义与 drawbox 滤镜的含义相同,该滤镜可用于可视化边界框的位置。

当帧内主体的同时移动可能会被运动矢量搜索误认为相机运动时,此功能很有用。

如果 xywh 中的任何一个或全部设置为 -1,则使用完整帧。这允许在不为运动矢量搜索指定边界框的情况下设置后面的选项。

默认 - 搜索整个帧。

rx
ry

指定 x 和 y 方向上的最大移动范围,范围为 0-64 像素。默认值为 16。

edge

指定如何生成像素以填充帧边缘的空白。可用值为

blank, 0

在空白位置填充零

original, 1

空白位置的原始图像

clamp, 2

空白位置的拉伸边缘值

mirror, 3

空白位置的镜像边缘

默认值为 ‘mirror’。

blocksize

指定用于运动搜索的块大小。范围为 4-128 像素,默认值为 8。

对比度

指定块的对比度阈值。仅考虑具有超过指定对比度(最暗和最亮像素之间的差异)的块。范围为 1-255,默认值为 125。

search

指定搜索策略。可用值为

exhaustive, 0

设置详尽搜索

less, 1

设置较不详尽的搜索。

默认值为 ‘exhaustive’。

filename

如果设置,则将运动搜索的详细日志写入指定的文件。

30.68 despill

去除由绿幕或蓝幕的反射颜色引起的前景颜色中的不需要的污染。

此滤波器接受以下选项

type

设置要使用的去溢出类型。

mix

设置将如何生成溢出图。

expand

设置要去除的剩余溢出量。

红色

控制溢出区域中红色的量。

绿色

控制溢出区域中绿色的量。对于绿幕应为 -1。

蓝色

控制溢出区域中蓝色的量。对于蓝幕应为 -1。

亮度

控制溢出区域的亮度,保留颜色。

alpha

修改从生成的溢出图得出的 alpha 值。

30.68.1 命令

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

30.69 detelecine

应用电影电视操作的精确逆运算。它需要使用 pattern 选项指定的预定义模式,该模式必须与传递给电影电视滤镜的模式相同。

此滤波器接受以下选项

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 视频大小的 rgb 输入
    ffmpeg -i INPUT -f lavfi -i nullsrc=s=hd720,lutrgb=128:128:128 -f lavfi -i nullsrc=s=hd720,geq='r=128+30*sin(2*PI*X/400+T):g=128+30*sin(2*PI*X/400+T):b=128+30*sin(2*PI*X/400+T)' -lavfi '[0][1][2]displace' OUTPUT
    
  • 将波浪效果添加到 hd720 视频大小的 rgb 输入
    ffmpeg -i INPUT -f lavfi -i nullsrc=hd720,geq='r=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):g=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):b=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T))' -lavfi '[1]split[x][y],[0][x][y]displace' OUTPUT
    

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 的名称(通常是 “background”),第二行是标签 ID 1 的名称,依此类推。如果未提供标签文件,则标签 ID 被视为名称。

backend_configs

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。

30.74 dnn_processing

使用深度神经网络进行图像处理。它与另一个将帧的像素格式转换为 dnn 网络所需的格式的滤镜一起工作。

该滤镜接受以下选项:

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项接受以下值

tensorflow

TensorFlow 后端。要启用此后端,需要安装 TensorFlow for C 库(请参阅 https://tensorflowcn.cn/install/lang_c)并使用 --enable-libtensorflow 配置 FFmpeg

openvino

OpenVINO 后端。要启用此后端,您需要构建并安装 OpenVINO for C 库(请参阅 https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用 --enable-libopenvino 配置 FFmpeg(如果头文件和库未安装到系统路径中,则可能需要 –extra-cflags=-I… –extra-ldflags=-L…)

torch

Libtorch 后端。要启用此后端,您需要构建并安装 Libtroch for C++ 库。请下载 cxx11 ABI 版本(请参阅 https://pytorch.ac.cn/get-started/locally)并使用 --enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/ 配置 FFmpeg。

model

设置指定网络架构及其参数的模型文件路径。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其格式的文件。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

backend_configs

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。

对于 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 帧(支持平面 YUV 格式)的 Y 通道(请参阅 sr 滤镜)
    ./ffmpeg -i 480p.jpg -vf format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y -y srcnn.jpg
    
  • 使用 espcn.pb 处理 Y 通道(请参阅 sr 滤镜),该滤镜更改 yuv420p 格式(支持平面 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 drawbox

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框左上角坐标的表达式。默认为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认为 0。

颜色,c

指定要写入的框的颜色。有关此选项的常规语法,请查看 ffmpeg-utils 手册中的 “Color” 部分。如果使用特殊值 invert,则框边缘颜色与反转亮度的视频相同。

厚度,t

设置框边缘厚度的表达式。值 fill 将创建一个填充框。默认值为 3

请参见下面的接受常量列表。

replace

如果输入具有 alpha 值,则适用。值为 1 时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将框合成到输入上,保持视频的 alpha 值不变。

xywht 的参数是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

in_h, ih
in_w, iw

输入宽度和高度。

sar

输入样本宽高比。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制的框的宽度和高度。

box_source

如果您想使用边数据的检测边界框中的框数据,则可以将框源设置为 side_data_detection_bboxes。

如果设置了 box_source,则会忽略 xywidthheight,并且仍然使用侧边数据中检测到的边界框中的框数据。因此,如果您不确定框的来源,请不要使用此参数。

t

绘制的框的粗细。

这些常量允许 xywht 表达式相互引用,因此您可以例如指定 y=x/darh=w/dar

30.75.1 示例

  • 在输入图像的边缘绘制一个黑色框
    drawbox
    
  • 绘制一个红色、不透明度为 50% 的框
    drawbox=10:20:200:60:[email protected]
    

    前面的例子可以指定为

    drawbox=x=10:y=20:w=200:h=60:[email protected]
    
  • 用粉红色填充框
    drawbox=x=10:y=10:w=100:h=100:[email protected]:t=fill
    
  • 绘制一个 2 像素红色、宽高比为 2.40:1 的遮罩
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

30.75.2 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.76 drawgraph

使用输入视频元数据绘制图形。

它接受以下参数

m1

设置第一个帧元数据键,将从中获取元数据值来绘制图形。

fg1

设置第一个前景色表达式。

m2

设置第二个帧元数据键,将从中获取元数据值来绘制图形。

fg2

设置第二个前景色表达式。

m3

设置第三个帧元数据键,将从中获取元数据值来绘制图形。

fg3

设置第三个前景色表达式。

m4

设置第四个帧元数据键,将从中获取元数据值来绘制图形。

fg4

设置第四个前景色表达式。

最小值

设置元数据值的最小值。

最大值

设置元数据值的最大值。

bg

设置图形背景颜色。默认值为白色。

mode

设置图形模式。

模式的可用值是

bar
dot
line

默认值为 line

slide

设置滑动模式。

滑动的可用值是

frame

到达右边界时绘制新帧。

replace

用新的列替换旧的列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单个图片。

默认值为 frame

大小

设置图形视频的大小。有关此选项的语法,请查看 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 drawgrid

在输入图像上绘制网格。

它接受以下参数

x
y

指定网格交叉点某些点的坐标的表达式(用于配置偏移量)。两者默认值都为 0。

宽度,w
高度,h

指定网格单元格的宽度和高度的表达式,如果为 0,则分别解释为输入宽度和高度减去 thickness,从而将图像加框。默认值为 0。

颜色,c

指定网格的颜色。有关此选项的通用语法,请查看 ffmpeg-utils 手册 中的“颜色”部分。如果使用特殊值 invert,则网格颜色与具有反转亮度的视频相同。

厚度,t

设置网格线粗细的表达式。默认值为 1

请参见下面的接受常量列表。

replace

如果输入具有 alpha 值,则适用。如果为 1,则绘制的网格的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,这会将网格合成到输入上,保持视频的 alpha 不变。

xywht 的参数是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

in_h, ih
in_w, iw

输入网格单元格的宽度和高度。

sar

输入样本宽高比。

x
y

网格交叉点某些点的 x 和 y 坐标(用于配置偏移量)。

w
h

绘制的单元格的宽度和高度。

t

绘制的单元格的粗细。

这些常量允许 xywht 表达式相互引用,因此您可以例如指定 y=x/darh=w/dar

30.77.1 示例

  • 绘制一个 100x100 像素、粗细为 2 像素、颜色为红色、不透明度为 50% 的网格
    drawgrid=width=100:height=100:thickness=2:[email protected]
    
  • 绘制一个白色 3x3 网格,不透明度为 50%
    drawgrid=w=iw/3:h=ih/3:t=2:[email protected]
    

30.77.2 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.78 drawtext

使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。

要启用此滤波器的编译,您需要使用 --enable-libfreetype--enable-libharfbuzz 配置 FFmpeg。要启用默认字体回退和 font 选项,您需要使用 --enable-libfontconfig 配置 FFmpeg。要启用 text_shaping 选项,您需要使用 --enable-libfribidi 配置 FFmpeg。

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"。

boxcolor

用于在文本周围绘制框的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册 中的“颜色”部分。

boxcolor 的默认值为 "white"。

line_spacing

设置行间距(以像素为单位)。line_spacing 的默认值为 0。

text_align

设置文本相对于框边界的垂直和水平对齐方式。该值是标志的组合,一个用于垂直对齐(T=顶部、M=中间、B=底部),一个用于水平对齐(L=左侧、C=居中、R=右侧)。请注意,制表符仅支持左侧水平对齐。

y_align

指定 y 值所指的内容。可能的值为

  • text 将第一行文本的最高字形的顶部放置在 y
  • baseline 将第一行文本的基线放置在 y
  • font 将第一行文本的基线放置在 y 加上字体指标中定义的上升高度(以像素为单位)处

为了向后兼容,y_align 的默认值为 "text"。

borderw

设置要使用 bordercolor 在文本周围绘制的边框的宽度。borderw 的默认值为 0。

bordercolor

设置用于在文本周围绘制边框的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册 中的“颜色”部分。

bordercolor 的默认值为 "black"。

expansion

选择如何展开 text。可以是 nonestrftime(已弃用)或 normal(默认值)。有关详细信息,请参阅下面的 文本展开 部分。

basetime

设置计数的开始时间。值以微秒为单位。仅在已弃用的 strftime 扩展模式下应用。要在普通扩展模式下模拟,请使用 pts 函数,提供开始时间(以秒为单位)作为第二个参数。

fix_bounds

如果为 true,则检查并修复文本坐标以避免剪切。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册 中的“颜色”部分。

fontcolor 的默认值为 "black"。

fontcolor_expr

字符串,其展开方式与 text 相同,以获得动态的 fontcolor 值。默认情况下,此选项为空值,不进行处理。设置此选项后,它会覆盖 fontcolor 选项。

font

用于绘制文本的字体系列。默认值为 Sans。

fontfile

用于绘制文本的字体文件。必须包含路径。如果禁用了 fontconfig 支持,则此参数是必需的。

alpha

绘制文本时应用 alpha 混合。该值可以是 0.0 到 1.0 之间的数字。表达式也接受相同的变量 x, y 。默认值为 1。请参阅 fontcolor_expr

fontsize

用于绘制文本的字体大小。 fontsize 的默认值为 16。

text_shaping

如果设置为 1,则尝试在绘制文本之前对文本进行整形(例如,反转从右到左的文本的顺序并连接阿拉伯字符)。否则,仅按给定的方式绘制文本。默认值为 1(如果支持)。

ft_load_flags

用于加载字体的标志。

这些标志映射 libfreetype 支持的相应标志,并且是以下值的组合

default
no_scale
no_hinting
render
no_bitmap
vertical_layout
force_autohint
crop_bitmap
pedantic
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint

默认值为“default”。

有关更多信息,请参阅 FT_LOAD_* libfreetype 标志的文档。

shadowcolor

用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

shadowcolor 的默认值为“black”。

boxw

设置要围绕文本绘制的框的宽度。 boxw 的默认值会自动计算以匹配文本宽度

boxh

设置要围绕文本绘制的框的高度。 boxh 的默认值会自动计算以匹配文本高度

shadowx
shadowy

文本阴影相对于文本位置的 x 和 y 偏移量。它们可以是正值或负值。两者的默认值均为“0”。

start_number

n/frame_num 变量的起始帧号。默认值为“0”。

tabsize

用于呈现制表符的空格数。默认值为 4。

timecode

以“hh:mm:ss[:;.]ff”格式设置初始时间码表示形式。它可以与 text 参数一起使用或不使用。必须指定 timecode_rate 选项。

timecode_rate, rate, r

设置时间码帧率(仅限时间码)。该值将四舍五入到最接近的整数。最小值为“1”。帧率 30 和 60 支持丢帧时间码。

tc24hmax

如果设置为 1,则时间码选项的输出将在 24 小时后回绕。默认为 0(禁用)。

text

要绘制的文本字符串。文本必须是 UTF-8 编码字符的序列。如果未使用参数 textfile 指定文件,则此参数是必需的。

textfile

包含要绘制的文本的文本文件。文本必须是 UTF-8 编码字符的序列。

如果未使用参数 text 指定文本字符串,则此参数是必需的。

如果同时指定了 texttextfile ,则会引发错误。

text_source

如果要使用边数据检测边界框中的文本数据,则应将文本源设置为 side_data_detection_bboxes。

如果设置了文本源,则将忽略 texttextfile,并且仍然使用边数据检测边界框中的文本数据。因此,如果您不确定文本源,请不要使用此参数。

reload

textfile 将按指定的帧间隔重新加载。请确保以原子方式更新 textfile ,否则可能会部分读取,甚至失败。范围为 0 到 INT_MAX。默认值为 0。

x
y

指定文本将在视频帧内绘制的偏移量的表达式。它们相对于输出图像的顶部/左侧边界。

xy 的默认值为“0”。

有关接受的常量和函数的列表,请参见下文。

xy 的参数是包含以下常量和函数的表达式

dar

输入显示纵横比,与 (w / h) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

line_h, lh

每行文本的高度

main_h, h, H

输入高度

main_w, w, W

输入宽度

max_glyph_a, ascent

从基线到用于放置字形轮廓点的最高/上部网格坐标的最大距离,适用于所有渲染的字形。由于网格的方向与 Y 轴向上,因此它是一个正值。

max_glyph_d, descent

从基线到用于放置字形轮廓点的最低网格坐标的最大距离,适用于所有渲染的字形。由于网格的方向与 Y 轴向上,这是一个负值。

max_glyph_h

最大字形高度,即渲染文本中包含的所有字形的最大高度,它等效于 ascent - descent

max_glyph_w

最大字形宽度,即渲染文本中包含的所有字形的最大宽度

font_a

字体指标中定义的上升尺寸

font_d

字体指标中定义的下降尺寸

top_a

第一行文本的字形的最大上升高度

bottom_d

最后一行文本的字形的最大下降高度

n

输入帧的数量,从 0 开始

rand(min, max)

返回包含在 minmax 之间的随机数

sar

输入样本宽高比。

t

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

text_h, th

渲染文本的高度

text_w, tw

渲染文本的宽度

x
y

文本绘制位置的 x 和 y 偏移坐标。

这些参数允许 xy 表达式相互引用,例如,您可以指定 y=x/dar

pict_type

当前帧的图片类型的一个字符描述。

pkt_pos

当前数据包在输入文件或流中的位置(以字节为单位,从输入开始)。-1 值表示此信息不可用。

duration

当前数据包的持续时间(以秒为单位)。

pkt_size

当前数据包的大小(以字节为单位)。

30.78.2 文本扩展

如果 expansion 设置为 strftime ,则过滤器会识别提供的文本中 strftime C 函数接受的序列,并相应地展开它们。检查 strftime 的文档。此功能已弃用,推荐使用 normal 扩展以及 gmtimelocaltime 扩展函数。

如果 expansion 设置为 none,则文本按原样打印。

如果 expansion 设置为 normal(默认值),则使用以下扩展机制。

反斜杠字符 ‘\’ 后跟任何字符,始终会扩展为第二个字符。

形如 %{...} 的序列会被展开。大括号之间的文本是一个函数名称,可能后跟用 ‘:’ 分隔的参数。如果参数包含特殊字符或分隔符(‘:’ 或 ‘}’),则应进行转义。

请注意,它们可能还必须在过滤器参数字符串的 text 选项的值中以及在滤镜图描述的过滤器参数中进行转义,并且可能还需要在 shell 中进行转义,这最多有四层转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用:

表达式, e

表达式计算结果。

它必须接受一个参数,该参数指定要计算的表达式,该表达式接受与 xy 值相同的常量和函数。请注意,并非所有常量都应该使用,例如在计算表达式时文本大小未知,因此常量 text_wtext_h 将具有未定义的值。

expr_int_format, eif

计算表达式的值并将其输出为格式化的整数。

第一个参数是要计算的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为 ‘x’、‘X’、‘d’ 和 ‘u’。它们的处理方式与 printf 函数中完全相同。第三个参数是可选的,用于设置输出所占用的位数。它可用于从左侧添加零填充。

gmtime

过滤器运行时的 UTC 时间。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串扩展为支持变量 %[1-6]N,该变量打印秒的小数部分,并可选择指定位数。

localtime

过滤器运行时的本地时区时间。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串扩展为支持变量 %[1-6]N,该变量打印秒的小数部分,并可选择指定位数。

metadata

帧元数据。接受一个或两个参数。

第一个参数是必需的,用于指定元数据键。

第二个参数是可选的,用于指定默认值,当找不到元数据键或元数据键为空时使用。

可以通过检查运行 ffprobe -show_frames 打印的每个帧部分中以 TAG 开头的条目来识别可用的元数据。

在引导到 drawtext 过滤器的过滤器中生成的字符串元数据也可用。

n, frame_num

帧编号,从 0 开始。

pict_type

当前图像类型的一个字符描述。

pts

当前帧的时间戳。它最多可以接受三个参数。

第一个参数是时间戳的格式;默认为 flt,表示以微秒精度表示的十进制秒数;hms 表示格式化的 [-]HH:MM:SS.mmm 时间戳,精度为毫秒。gmtime 表示格式化为 UTC 时间的帧的时间戳;localtime 表示格式化为本地时区时间的帧的时间戳。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 hms,则可以提供第三个参数 24HH,以 24 小时格式(00-23)显示格式化时间戳的小时部分。

如果格式设置为 localtimegmtime,则可以提供第三个参数:一个 strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

30.78.3 命令

此过滤器支持通过命令更改参数

reinit

更改现有过滤器参数。

参数的语法与过滤器调用相同,例如

fontsize=56:fontcolor=green:text='Hello World'

带有 sendcmd 的完整过滤器调用如下所示

sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'

如果无法解析或应用整个参数作为有效值,则过滤器将继续使用其现有参数。

以下选项也支持作为 命令

  • x
  • y
  • alpha
  • fontsize
  • fontcolor
  • boxcolor
  • bordercolor
  • shadowcolor
  • box
  • boxw
  • boxh
  • boxborderw
  • line_spacing
  • text_align
  • shadowx
  • shadowy
  • borderw

30.78.4 示例

  • 使用字体 FreeSerif 绘制“Test Text”,使用可选参数的默认值。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 使用字体 FreeSerif 绘制大小为 24 的 “Test Text”,位置为 x=100 和 y=50(从屏幕左上角开始计数),文本为黄色,周围有一个红色框。文本和框的不透明度均为 20%。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
              x=100: y=50: fontsize=24: [email protected]: box=1: [email protected]"
    

    请注意,如果参数列表中未使用空格,则不需要双引号。

  • 在视频帧的中心显示文本
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
    
  • 在随机位置显示文本,每 30 秒切换到新位置
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
    
  • 在视频帧的最后一行显示从右向左滑动的文本行。假设文件 LONG_LINE 包含没有换行符的单行文本。
    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
    
  • 显示文件 CREDITS 的内容,该内容在帧底部下方并向上滚动。
    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
    
  • 在输入视频的中心绘制一个绿色的字母“g”。字形基线放置在屏幕高度的一半处。
    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
    
  • 每 3 秒显示文本 1 秒
    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
    
  • 使用 fontconfig 设置字体。请注意,冒号需要转义。
    drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
    
  • 绘制 “Test Text”,字体大小取决于视频的高度。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(请参阅 strftime C 函数的文档)
    drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
    
  • 显示淡入和淡出(出现/消失)的文本
    #!/bin/sh
    DS=1.0 # display start
    DE=10.0 # display end
    FID=1.5 # fade in duration
    FOD=5 # fade out duration
    ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
    
  • 水平对齐多个单独的文本。请注意,max_glyph_afontsize 值包含在 y 偏移量中。
    drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
    drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
    
  • 如果存在此类元数据,则将特殊 lavf.image2dec.source_basename 元数据绘制到每个帧上。否则,绘制字符串 “NA”。请注意,图像 2 解复用器必须具有选项 -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 edgedetect

检测并绘制边缘。该过滤器使用 Canny 边缘检测算法。

该滤镜接受以下选项:

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过 8 连通性与低阈值选择的“弱”边缘像素连接。

lowhigh 阈值必须在 [0,1] 范围内选择,且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

mode

定义绘图模式。

wires

在黑色背景上绘制白色/灰色线条。

colormix

混合颜色以创建绘画/卡通效果。

canny

在所有选定的平面上应用 Canny 边缘检测器。

默认值为 wires

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。

种子,s

设置一个随机种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定,或者如果显式设置为 -1,则过滤器将尽力使用良好的随机种子。

pal8

设置 pal8 输出像素格式。此选项不适用于码本长度大于 256 的情况。默认禁用。

use_alpha

在量化计算中包含 alpha 值。允许创建具有多个 alpha 平滑混合的调色板输出图像(例如 PNG8)。

30.81 entropy

测量视频帧颜色通道直方图中的灰度熵。

它接受以下参数

mode

可以是 normaldiff。 默认值为 normal

diff 模式测量直方图增量值的熵,即相邻直方图值之间的绝对差值。

30.82 epx

应用专为像素艺术设计的 EPX 放大滤镜。

它接受以下选项

n

设置缩放维度:2 代表 2xEPX3 代表 3xEPX。默认值为 3

30.83 eq

设置亮度、对比度、饱和度和近似伽玛调整。

该滤镜接受以下选项:

对比度

设置对比度表达式。该值必须是 -1000.01000.0 范围内的浮点值。默认值为 "1"。

亮度

设置亮度表达式。该值必须是 -1.01.0 范围内的浮点值。默认值为 "0"。

饱和度

设置饱和度表达式。该值必须是 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 命令

该滤镜支持以下命令

对比度

设置对比度表达式。

亮度

设置亮度表达式。

饱和度

设置饱和度表达式。

gamma

设置伽玛表达式。

gamma_r

设置 gamma_r 表达式。

gamma_g

设置 gamma_g 表达式。

gamma_b

设置 gamma_b 表达式。

gamma_weight

设置 gamma_weight 表达式。

该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

30.84 erosion

对视频应用腐蚀效果。

此滤镜将像素替换为局部 (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

调整视频流的曝光度。

该滤镜接受以下选项:

exposure

以 EV 为单位设置曝光校正。允许范围为 -3.0 到 3.0 EV。默认值为 0 EV。

black

设置黑电平校正。允许范围为 -1.0 到 1.0。默认值为 0。

30.86.1 命令

此滤镜支持与选项相同的 命令

30.87 extractplanes

从输入视频流中提取颜色通道分量到单独的灰度视频流中。

此滤镜接受以下选项

planes

设置要提取的平面。

可用的平面值为

y
u
v
a
r
g
b

选择输入中不可用的平面将导致错误。这意味着您不能同时选择具有 yuv 平面的 rgb 平面。

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 fade

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

它接受以下参数

type, t

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

start_frame, s

指定开始应用淡入淡出效果的帧数。默认值为 0。

nb_frames, n

淡入淡出效果持续的帧数。在淡入效果结束时,输出视频的强度将与输入视频相同。在淡出过渡结束时,输出视频将填充选定的 color。默认值为 25。

alpha

如果设置为 1,则仅淡化 alpha 通道(如果输入存在)。默认值为 0。

start_time, st

指定开始应用淡入淡出效果的帧的时间戳(以秒为单位)。如果同时指定了 start_frame 和 start_time,则淡入淡出效果将从两者中的较晚者开始。默认值为 0。

duration, d

淡入淡出效果必须持续的秒数。在淡入效果结束时,输出视频的强度将与输入视频相同,在淡出过渡结束时,输出视频将填充选定的 color。如果同时指定了 duration 和 nb_frames,则使用 duration。默认值为 0(默认使用 nb_frames)。

颜色,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 帧上淡入 Alpha 通道
    fade=in:0:25:alpha=1
    
  • 将前 5.5 秒设置为黑色,然后淡入 0.5 秒
    fade=t=in:st=5.5:d=0.5
    

30.89 feedback

应用反馈视频滤镜。

此滤镜将裁剪后的输入帧传递到第二个输出。在那里可以使用其他视频滤镜进行过滤。当滤镜从第二个输入接收到帧后,该帧将与来自第一个输入的原始帧组合,并传递到第一个输出。

典型的用法是仅过滤帧的一部分。

该滤镜接受以下选项:

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

使用 3D FFT(频域滤波)对帧进行去噪。

该滤镜接受以下选项:

sigma

设置噪声 sigma 常数。这设置了去噪强度。默认值为 1。允许的范围为 0 到 30。在高重叠率下使用非常高的 sigma 值可能会产生块状伪影。

amount

设置去噪量。默认情况下,将减少所有检测到的噪声。默认值为 1。允许的范围为 0 到 1。

block

设置块的大小(以像素为单位),默认值为 32,可以是 8 到 256。

重叠

设置块重叠。默认值为 0.5。允许的范围为 0.2 到 0.8。

method

设置去噪方法。默认值为 wiener,也可以是 hard

上一个

设置用于去噪的上一个帧的数量。默认情况下设置为 0。

下一个

设置用于去噪的下一个帧的数量。默认情况下设置为 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

指定是提取顶部场(如果值为 0top)还是底部场(如果值为 1bottom)。

30.93 fieldhint

通过复制提示文件中提供的周围帧的顶部和底部场来创建新帧。

提示

设置包含提示的文件:绝对/相对帧编号。

剪辑中的每一帧都必须有一行。每行必须包含两个数字,用逗号分隔,可以选择后跟 -+。在文件的每一行中提供的数字不能超出 [N-1,N+1],其中 N 是 absolute 模式的当前帧号,或者超出 relative 模式的 [-1, 1] 范围。第一个数字告诉从哪个帧提取顶部场,第二个数字告诉从哪个帧提取底部场。

如果选择后跟 +,则输出帧将标记为隔行扫描,否则如果后跟 -,则输出帧将标记为逐行扫描,否则它将标记为与输入帧相同。如果选择后跟 t,则输出帧将仅使用顶部场,如果选择 b,则它将仅使用底部场。如果行以 #; 开头,则跳过该行。

mode

可以是项目 absoluterelativepattern。默认值为 absolutepattern 模式与 relative 模式相同,不同之处在于,如果文件最后条目之后有比 hint 文件更多的帧要处理,则会回溯到开头。

relative 模式的 hint 文件的前几行示例

0,0 - # first frame
1,0 - # second frame, use third's frame top field and second's frame bottom field
1,0 - # third frame, use fourth's frame top field and third's frame bottom field
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -

30.94 fieldmatch

用于逆电视电影的场匹配滤镜。它旨在从电视电影流重建逐行帧。滤镜不会丢弃重复的帧,因此为了实现完整的逆电视电影,fieldmatch 需要后跟一个抽取滤镜,例如滤镜图中的 decimate

场匹配和抽取的区分主要是为了在两者之间插入去隔行滤镜回退的可能性。如果源具有混合的电视电影和真正的隔行扫描内容,则 fieldmatch 将无法匹配隔行扫描部分的场。但是这些剩余的梳状帧将被标记为隔行扫描,因此可以在抽取之前通过后面的滤镜(例如 yadif)进行去隔行扫描。

除了各种配置选项外,fieldmatch 还可以采用可选的第二流,通过 ppsrc 选项激活。如果启用,则帧重建将基于此第二流的场和帧。这允许对第一个输入进行预处理,以帮助滤镜的各种算法,同时保持输出无损(假设场匹配正确)。通常,场感知去噪器或亮度/对比度调整会有所帮助。

请注意,此滤镜使用与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)相同的算法。后者是 TFM 的一个轻量级克隆,fieldmatch 是基于该克隆的。虽然语义和用法非常相似,但某些行为和选项名称可能会有所不同。

decimate 滤镜当前仅适用于恒定帧率输入。如果您的输入具有混合的电视电影(30fps)和较低帧率(如 24fps)的逐行内容,请使用以下滤镜链生成必要的 cfr 流:dejudder,fps=30000/1001,fieldmatch,decimate

该滤镜接受以下选项:

order

指定输入流的假定场序。可用值包括

auto

自动检测奇偶校验(使用 FFmpeg 的内部奇偶校验值)。

bff

假设底部场优先。

tff

假设顶部场优先。

请注意,有时建议不要信任流声明的奇偶校验。

默认值为 auto

mode

设置匹配模式或策略。pc 模式是最安全的,因为它在可能的情况下不会因重复帧而导致抖动,但如果存在不良编辑或混合场,则最终会输出梳状帧,而实际上可能存在良好的匹配。另一方面,pcn_ub 模式在创建抖动方面风险最高,但如果存在好的帧,几乎总是能找到。其他值在风险抖动和创建重复帧与在存在不良编辑、孤立场、混合场等部分中寻找良好匹配方面,都介于 pcpcn_ub 之间。

有关 p/c/n/u/b 的更多详细信息,请参阅 p/c/n/u/b 含义 部分。

可用值为

pc

双向匹配 (p/c)

pc_n

双向匹配,如果仍然是梳状帧则尝试第三次匹配 (p/c + n)

pc_u

双向匹配,如果仍然是梳状帧则尝试第三次匹配(相同顺序) (p/c + u)

pc_n_ub

双向匹配,如果仍然是梳状帧则尝试第三次匹配,如果仍然是梳状帧则尝试第四/第五次匹配 (p/c + n + u/b)

pcn

三向匹配 (p/c/n)

pcn_ub

三向匹配,如果所有 3 个原始匹配都被检测为梳状,则尝试第四/第五次匹配 (p/c/n + u/b)

末尾的括号表示假设 order=tff(以及 fieldautotop)时该模式将使用的匹配项。

就速度而言,pc 模式是最快的,而 pcn_ub 是最慢的。

默认值为 pc_n

ppsrc

将主输入流标记为预处理的输入,并启用辅助输入流作为从中选择场的干净源。有关更多详细信息,请参阅过滤器介绍。它类似于 VFM/TFM 中的 clip2 功能。

默认值为 0(禁用)。

field

设置要匹配的场。建议将其设置为与 order 相同的值,除非您在该设置下遇到匹配失败。在某些情况下,更改用于匹配的场会对匹配性能产生很大影响。可用值为

auto

自动(与 order 相同的值)。

bottom

从底部场匹配。

top

从顶部场匹配。

默认值为 auto

mchroma

设置匹配比较期间是否包括色度。在大多数情况下,建议保持启用状态。仅当您的剪辑存在严重的色度问题(例如严重的彩虹纹或其他伪影)时,才应将其设置为 0。将其设置为 0 也可以在牺牲一些准确性的情况下加快速度。

默认值为 1

y0
y1

这些定义了一个排除带,该排除带从场匹配决策中排除 y0y1 之间的行。排除带可用于忽略字幕、徽标或其他可能干扰匹配的内容。y0 设置起始扫描线,y1 设置结束线;y0y1 之间的所有行(包括 y0y1)都将被忽略。将 y0y1 设置为相同的值将禁用该功能。y0y1 默认为 0

scthresh

将场景变化检测阈值设置为亮度平面上最大变化的百分比。好的值在 [8.0, 14.0] 范围内。场景变化检测仅在 combmatch=sc 的情况下相关。scthresh 的范围是 [0.0, 100.0]

默认值为 12.0

combmatch

combatch 不是 none 时,fieldmatch 在决定使用哪个匹配项作为最终匹配项时,将考虑匹配项的梳状得分。可用值为

none

不进行基于梳状得分的最终匹配。

sc

仅当检测到场景变化时才使用梳状得分。

full

始终使用梳状得分。

默认值为 sc

combdbg

强制 fieldmatch 计算某些匹配项的梳状度量并打印它们。此设置在 TFM/VFM 词汇中称为 micout。可用值为

none

不强制计算。

pcn

强制 p/c/n 计算。

pcnub

强制 p/c/n/u/b 计算。

默认值为 none

cthresh

这是用于梳状帧检测的区域梳状阈值。这基本上控制着必须检测到的梳状的“强度”或“可见度”。较大的值意味着梳状必须更可见,而较小的值意味着梳状可以不太可见或不强,但仍然可以检测到。有效设置从 -1(每个像素都将被检测为梳状)到 255(没有像素将被检测为梳状)。这基本上是一个像素差异值。一个好的范围是 [8, 12]

默认值为 9

色度

设置在梳状帧决策中是否考虑色度。仅当您的源存在色度问题(彩虹纹等),导致启用色度的梳状帧检测出现问题时,才禁用此选项。实际上,使用 chroma=0 通常更可靠,除非源中存在仅色度的梳状。

默认值为 0

块x
块y

分别设置梳状帧检测期间使用的窗口的 x 轴和 y 轴大小。这与需要检测为梳状的 combpel 像素的区域大小有关,才能将帧声明为梳状。有关更多信息,请参见 combpel 参数描述。可能的值是任何从 4 开始到 512 的 2 的幂。

默认值为 16

combpel

帧上任何 blocky 乘以 blockx 大小的块内的梳状像素数,以便检测到该帧为梳状。虽然 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=bottom) 进行匹配时,此输入流的转换方式如下

Input stream:
                T     1 2 2 3 4
                B     1 2 3 4 4   <-- matching reference

Matches:              c c n n c

Output stream:
                T     1 2 3 4 4
                B     1 2 3 4 4

由于场匹配,我们可以看到某些帧被重复。要执行完整的反向电视电影,您需要在该操作之后依赖抽取过滤器。例如,请参见 decimate 过滤器。

现在从顶部场匹配(field=top)的相同操作如下所示

Input stream:
                T     1 2 2 3 4   <-- matching reference
                B     1 2 3 4 4

Matches:              c c p p c

Output stream:
                T     1 2 2 3 4
                B     1 2 2 3 4

在这些示例中,我们可以看到 pcn 的含义;基本上,它们指的是相反奇偶性的帧和场

  • p 匹配上一帧中相反奇偶性的场
  • c 匹配当前帧中相反奇偶性的场
  • n 匹配下一帧中相反奇偶性的场

30.94.1.2 u/b

ub 匹配有点特殊,因为它们从相反的奇偶性标志匹配。在以下示例中,我们假设当前正在匹配第二帧(顶部:2,底部:2)。根据匹配情况,在每个匹配场上方和下方放置一个“x”。

底部匹配时 (field=bottom)

Match:           c         p           n          b          u

                 x       x               x        x          x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x         x           x        x              x

Output frames:
                 2          1          2          2          2
                 2          2          2          1          3

顶部匹配时 (field=top)

Match:           c         p           n          b          u

                 x         x           x        x              x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x       x               x        x          x

Output frames:
                 2          2          2          1          2
                 2          1          3          2          2

30.94.2 示例

顶部场优先电视电影流的简单 IVTC

fieldmatch=order=tff:combmatch=none, decimate

高级 IVTC,对于仍然梳状的帧,回退到 yadif

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

30.95 fieldorder

变换输入视频的场序。

它接受以下参数

order

输出场序。有效值为 tff(顶场优先)或 bff(底场优先)。

默认值为 ‘tff’。

通过将图像内容向上或向下移动一行,并用适当的图像内容填充剩余的行来完成转换。此方法与大多数广播场序转换器一致。

如果输入视频未标记为隔行扫描,或者它已经标记为所需的输出场序,则此滤镜不会更改传入的视频。

在转换为或从 PAL DV 素材转换时非常有用,PAL DV 素材为底场优先。

例如

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

30.96 fillborders

填充输入视频的边框,而不更改视频流的尺寸。有时视频的四个边缘可能会有垃圾内容,您可能不希望裁剪视频输入以保持大小为某个数字的倍数。

此滤波器接受以下选项

左侧

从左边框填充的像素数。

右侧

从右边框填充的像素数。

顶部

从顶部边框填充的像素数。

底部

从底部边框填充的像素数。

mode

设置填充模式。

它接受以下值

smear

使用最外层的像素填充像素

mirror

使用镜像填充像素(半采样对称)

fixed

用常数值填充像素

reflect’(反射)

使用反射填充像素(全采样对称)

wrap

使用环绕填充像素

fade

将像素淡化为常数值

margins

在顶部和底部使用边框附近像素的加权平均值填充像素

默认值为 smear

color

设置固定或淡化模式下像素的颜色。默认为 black

30.96.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.97 find_rect

在输入视频中查找矩形对象。

要搜索的对象必须指定为使用 object 选项指定的灰度8图像。

对于每个可能的匹配项,都会计算一个分数。如果分数达到指定的阈值,则认为已找到该对象。

如果输入视频包含对象的多个实例,则滤镜将仅找到其中一个。

找到对象后,将在匹配帧中设置以下元数据条目

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

mipmap 的数量,默认为 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 floodfill

使用另一个值填充具有相同像素分量值的区域。

它接受以下选项

x

设置像素 x 坐标。

y

设置像素 y 坐标。

s0

设置源 #0 分量值。

s1

设置源 #1 分量值。

s2

设置源 #2 分量值。

s3

设置源 #3 分量值。

d0

设置目标 #0 分量值。

d1

设置目标 #1 分量值。

d2

设置目标 #2 分量值。

d3

设置目标 #3 分量值。

30.99 format

将输入视频转换为指定的像素格式之一。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

通过根据需要复制或丢弃帧,将视频转换为指定的恒定帧率。

它接受以下参数

fps

所需的输出帧率。它接受包含以下常数的表达式

source_fps

输入的帧率

ntsc

NTSC 帧率 30000/1001

pal

PAL 帧率 25.0

film

电影帧率 24.0

ntsc_film

NTSC 电影帧率 24000/1001

默认值为 25

start_time

假设第一个 PTS 应为给定值(以秒为单位)。这允许在流的开头进行填充/修剪。默认情况下,不对第一帧的预期 PTS 做任何假设,因此不进行填充或修剪。例如,如果视频流在音频流之后开始,或者要修剪任何具有负 PTS 的帧,则可以将其设置为 0,以使用第一帧的副本填充开头。

round

时间戳 (PTS) 舍入方法。

可能的值为

zero

向 0 舍入

inf

远离 0 舍入

down

向负无穷大舍入

up

向正无穷大舍入

near

舍入到最近的值

默认值为 near

eof_action

读取最后一帧时执行的操作。

可能的值为

round

使用与其他帧相同的 时间戳舍入方法。

pass

如果尚未达到输入持续时间,则传递最后一帧。

默认值为 round

或者,可以将选项指定为平面字符串:fps[:start_time[:round]]。

另请参见 setpts 滤镜。

30.100.1 示例

  • 为了将 fps 设置为 25 的典型用法
    fps=fps=25
    
  • 将 fps 设置为 24,使用缩写和舍入方法舍入到最近的值
    fps=fps=film:round=near
    

30.101 framepack

将两个不同的视频流打包到立体视频中,并在受支持的编解码器上设置正确的元数据。两个视图应具有相同的大小和帧率,并且当较短的视频结束时,处理将停止。请注意,您可以使用 scalefps 滤镜方便地调整视图属性。

它接受以下参数

格式

所需的打包格式。支持的值包括

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 framerate

通过从源帧插值新的视频输出帧来更改帧率。

此滤镜并非设计为与隔行扫描媒体正常工作。如果要更改隔行扫描媒体的帧率,则需要在使用此滤镜之前进行去隔行扫描,并在此滤镜之后进行重新隔行扫描。

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

fps

指定每秒输出帧数。此选项也可以单独指定为一个值。默认值为 50

interp_start

指定一个范围的起始点,在该范围内,输出帧将作为两个帧的线性插值创建。范围为 [0-255],默认值为 15

interp_end

指定一个范围的结束点,在该范围内,输出帧将作为两个帧的线性插值创建。范围为 [0-255],默认值为 240

scene

指定场景变更检测的级别,该值介于 0 到 100 之间,用于指示新场景;较低的值反映当前帧引入新场景的可能性较低,而较高的值意味着当前帧更有可能是一个新场景。默认值为 8.2

flags

指定影响过滤器进程的标志。

flags 的可用值为

scene_change_detect, scd

使用选项 scene 的值启用场景变更检测。默认情况下启用此标志。

30.103 framestep

每 N 帧选择一个帧。

此过滤器接受以下选项

step

每隔 step 帧选择一帧。允许值为大于 0 的正整数。默认值为 1

30.104 freezedetect

检测冻结的视频。

当检测到输入视频在指定时间内内容没有明显变化时,此过滤器会记录一条消息并设置帧元数据。视频冻结检测会计算视频帧所有分量的平均绝对差值,并将其与噪声基底进行比较。

打印的时间和持续时间以秒为单位表示。 lavfi.freezedetect.freeze_start 元数据键在时间戳等于或超过检测持续时间的第一个帧上设置,它包含冻结的第一个帧的时间戳。 lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end 元数据键在冻结后的第一个帧上设置。

该滤镜接受以下选项:

噪声,n

设置噪声容限。可以以分贝 (如果指定的值附加了“dB”) 或以 0 到 1 之间的差异比率指定。默认值为 -60dB 或 0.001。

duration, d

设置冻结持续时间直到通知(默认值为 2 秒)。

30.105 freezeframes

冻结视频帧。

此过滤器使用第二个输入中的帧冻结视频帧。

该滤镜接受以下选项:

第一个

设置开始冻结的第一个帧的编号。

last

设置结束冻结的最后一个帧的编号。

replace

设置将用于替换帧的第二个输入中的帧的编号。

30.106 frei0r

将 frei0r 效果应用于输入视频。

要启用此过滤器的编译,您需要安装 frei0r 标头并使用 --enable-frei0r 配置 FFmpeg。

它接受以下参数

filter_name

要加载的 frei0r 效果的名称。如果定义了环境变量 FREI0R_PATH,则会在 FREI0R_PATH 中由冒号分隔的列表中指定的每个目录中搜索 frei0r 效果。否则,将按以下顺序搜索标准 frei0r 路径:HOME/.frei0r-1/lib//usr/local/lib/frei0r-1//usr/lib/frei0r-1/

filter_params

传递给 frei0r 效果的“|”分隔的参数列表。

frei0r 效果参数可以是布尔值(其值为“y”或“n”)、双精度浮点数、颜色(指定为 R/G/B,其中 RGB 是介于 0.0 和 1.0 之间的浮点数,包括 0.0 和 1.0),或者在 ffmpeg-utils 手册中的 “Color” 部分中指定的颜色描述、位置(指定为 X/Y,其中 XY 是浮点数)和/或字符串。

参数的数量和类型取决于加载的效果。如果未指定效果参数,则会设置默认值。

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 的更快版本。

它将 (I)DCT 分为水平/垂直通道。与简单的后处理过滤器不同,其中一个通道是按块执行一次,而不是按像素执行一次。这允许更高的速度。

该滤镜接受以下选项:

quality

设置质量。此选项定义平均的级别数。它接受 4-5 范围内的整数。默认值为 4

量化参数 (qp)

强制使用常量量化参数。它接受 0-63 范围内的整数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

强度

设置过滤器强度。它接受 -15 到 32 范围内的整数。较低的值意味着更多的细节,但也意味着更多的伪影,而较高的值使图像更平滑但也更模糊。默认值为 0 - PSNR 最佳。

use_bframe_qp

如果设置为 1,则启用使用 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认值为 0(未启用)。

30.108 fsync

使用来自文件的外部映射同步视频帧。

对于映射文件中给出的每个输入 PTS,它会丢弃或创建尽可能多的帧,以重新创建映射文件中给出的输出帧序列。

此过滤器对于重新创建使用 ffmpeg 选项 -stats_mux_pre 记录到映射文件中的 fps 过滤器进行帧速率转换的输出帧非常有用,并且可以对相应的帧进行进一步处理,例如质量比较。

映射文件的每一行必须包含每个输入帧的三个项目,输入 PTS(十进制)、输出 PTS(十进制)和输出 TIMEBASE(十进制/十进制),以空格分隔。此文件格式对应于 -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

设置水平 sigma,高斯模糊的标准差。默认值为 0.5

steps

设置高斯近似的步数。默认值为 1

planes

设置要过滤哪些平面。默认情况下,所有平面都会被过滤。

sigmaV

设置垂直 sigma,如果为负数,则与 sigma 相同。默认值为 -1

30.109.1 命令

此滤镜支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.110 geq

将通用方程应用于每个像素。

该滤镜接受以下选项:

lum_expr, lum

设置亮度表达式。

cb_expr, cb

设置色度蓝色表达式。

cr_expr, cr

设置色度红色表达式。

alpha_expr, a

设置 alpha 表达式。

red_expr, r

设置红色表达式。

green_expr, g

设置绿色表达式。

blue_expr, b

设置蓝色表达式。

颜色空间根据指定的选项选择。如果指定了 lum_exprcb_exprcr_expr 选项之一,则过滤器会自动选择 YCbCr 颜色空间。如果指定了 red_exprgreen_exprblue_expr 选项之一,则会选择 RGB 颜色空间。

如果未定义其中一个色度表达式,则会回退到另一个色度表达式。如果未指定 alpha 表达式,则会计算为不透明值。如果未指定任何色度表达式,则它们会计算为亮度表达式。

表达式可以使用以下变量和函数

N

已过滤帧的序列号,从 0 开始。

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

SW
SH

宽度和高度比例取决于当前过滤的平面。它是相应的亮度平面像素数与当前平面像素数之间的比率。例如,对于 YUV4:2:0,亮度平面的值为 1,1,色度平面的值为 0.5,0.5

T

当前帧的时间,以秒为单位。

p(x, y)

返回当前平面位置 (x,y) 处的像素值。

lum(x, y)

返回亮度平面上位置 (x,y) 处的像素值。

cb(x, y)

返回蓝色差色度平面上位置 (x,y) 处的像素值。如果不存在该平面,则返回 0。

cr(x, y)

返回红色差色度平面上位置 (x,y) 处的像素值。如果不存在该平面,则返回 0。

r(x, y)
g(x, y)
b(x, y)

返回红色/绿色/蓝色分量上位置 (x,y) 处的像素值。如果不存在该分量,则返回 0。

alpha(x, y)

返回 Alpha 平面上位置 (x,y) 处的像素值。如果不存在该平面,则返回 0。

psum(x,y), lumsum(x, y), cbsum(x,y), crsum(x,y), rsum(x,y), gsum(x,y), bsum(x,y), alphasum(x,y)

从 (0,0) 到 (x,y) 的矩形中样本值的总和,这允许获取矩形内样本的总和。请参阅没有 sum 后缀的函数。

interpolation

设置一种插值方法

nearest, n
bilinear, b

默认值为双线性插值。

对于函数,如果 xy 超出区域范围,则值将自动裁剪到最近的边缘。

请注意,此滤镜可以使用多个线程,在这种情况下,每个切片都有其自己的表达式状态。如果您希望仅使用单个表达式状态,因为您的表达式依赖于先前的状态,那么您应将滤镜线程的数量限制为 1。

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 滤镜)
    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 位颜色深度而有时在近乎平坦的区域中引入的条带伪影。对应该在条带所在位置的渐变进行插值并抖动它们。

它仅设计用于播放。请勿在有损压缩之前使用它,因为压缩往往会丢失抖动并带回条带。

它接受以下参数

强度

滤镜将更改任何一个像素的最大量。这也是检测近乎平坦区域的阈值。可接受的值范围为 .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 greyedge

一种颜色恒常性变体滤镜,通过灰度边缘算法估计场景光照,并相应地校正场景颜色。

参见:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

该滤镜接受以下选项:

difford

要应用于场景的微分阶数。必须在 [0,2] 范围内选择,默认值为 1。

minknorm

用于计算 Minkowski 距离的 Minkowski 参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 可获得最大值,而不是计算 Minkowski 距离。

sigma

应用于场景的高斯模糊的标准偏差。必须在 [0,1024.0] 范围内选择,默认值为 1。如果 difford 大于 0,则 floor( sigma * break_off_sigma(3) ) 不能等于 0。

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 视频帧,可以是 firstall。默认值为 all

shortest

当最短的输入终止时强制终止。默认值为 0

repeatlast

在流结束后继续应用最后一个 CLUT。值为 0 时,将在达到 CLUT 的最后一帧后禁用滤波器。默认值为 1

haldclut 也具有与 lut3d 相同的插值选项(两个滤波器共享相同的内部结构)。

此滤镜还支持 framesync 选项。

关于 Hald CLUT 的更多信息,请访问 Eskil Steenberg 的网站(Hald CLUT 的作者):http://www.quelsolaar.com/technology/clut.html

30.116.1 命令

此滤波器支持 commands 中的 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 x Level*Level*Level 像素的方形图像。对于给定的 Hald CLUT,FFmpeg 将选择从图片左上角开始的最大可能的正方形。剩余的填充像素(底部或右侧)将被忽略。此区域可用于添加 Hald CLUT 的预览。

通常,haldclut 滤波器将支持以下生成的 Hald CLUT

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

此滤波器在每帧的基础上应用全局颜色直方图均衡化。

它可用于校正像素强度范围压缩的视频。滤波器重新分配像素强度,以均衡它们在强度范围内的分布。它可以被视为“自动调整对比度滤波器”。此滤波器仅对校正降级或采集不良的源视频有用。

该滤镜接受以下选项:

强度

确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认为 0.200。

intensity

设置可以生成的最大强度,并适当缩放输出值。强度应按需设置,然后可以限制强度以避免冲刷。该值必须是 [0,1] 范围内的浮点数,默认为 0.210。

antibanding

设置抗条带级别。如果启用,滤波器将随机改变输出像素的亮度,以避免直方图出现条带。可能的值为 noneweakstrong。默认为 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

设置模式。可以是 linearlogarithmic。默认值为 linear

分量

设置要显示哪些颜色分量。默认值为 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*luma_spatial/4.0。

luma_tmp

一个浮点数,指定亮度时间强度。它默认为 6.0*luma_spatial/4.0。

chroma_tmp

一个浮点数,指定色度时间强度。它默认为 luma_tmp*chroma_spatial/luma_spatial

30.120.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.121 hwdownload

将硬件帧下载到系统内存。

输入必须是硬件帧,输出必须是非硬件格式。并非所有格式都将在输出上得到支持 - 可能需要在图中紧跟其后插入一个额外的 format 过滤器,以获得支持格式的输出。

30.122 hwmap

将硬件帧映射到系统内存或另一个设备。

此滤波器有几种不同的操作模式;使用的模式取决于输入和输出格式

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并传递给输出。如果稍后需要原始硬件帧(例如,在部分覆盖其他内容后),可以在下一个模式中再次使用 hwmap 滤镜来检索它。

  • 普通帧输入,硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射它 - 即,返回原始硬件帧。

    否则,必须提供设备。在该设备上为输出创建新的硬件表面,然后将其映射回输入处的软件格式,并将这些帧提供给前面的滤镜。这将像 hwupload 滤镜一样工作,但当输入已经是兼容格式时,可能会避免额外的复制。

  • 硬件帧输入和输出

    必须为输出提供设备,可以直接提供,也可以使用 derive_device 选项提供。输入和输出设备必须是不同的类型并且兼容 - 其确切含义取决于系统,但通常意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。

    如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。

    否则,将帧映射到输出设备 - 在输出上创建与输入上的帧对应的新硬件帧。

接受以下附加参数

mode

设置帧映射模式。以下组合之一:

read

映射的帧应该是可读的。

write

映射的帧应该是可写的。

overwrite

映射将始终覆盖整个帧。

这在某些情况下可以提高性能,因为不需要加载帧的原始内容。

direct

映射不得涉及任何复制。

在某些情况下,如果直接映射不可能或会产生意外属性,则会创建到帧副本的间接映射。设置此标志可确保映射是直接的,如果不可能则会失败。

如果未指定,则默认为 read+write

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。

reverse

在硬件到硬件的映射中,反向映射 - 在接收器中创建帧,然后将它们映射回源。在某些情况下,当需要单向映射但所使用的设备仅支持相反方向时,这可能是必需的。

此选项很危险 - 如果对该滤镜的输出有任何其他约束,它可能会以未定义的方式破坏前面的滤镜。请不要在完全了解其使用含义的情况下使用它。

30.123 hwupload

将系统内存帧上传到硬件表面。

初始化滤镜时必须提供要上传到的设备。如果使用 ffmpeg,请使用 -filter_hw_device 选项或 derive_device 选项选择适当的设备。输入和输出设备必须是不同的类型并且兼容 - 其确切含义取决于系统,但通常意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。

接受以下附加参数

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个类型为 type 的新设备。

30.124 hwupload_cuda

将系统内存帧上传到 CUDA 设备。

它接受以下可选参数

设备

要使用的 CUDA 设备的编号

30.125 hqx

应用专为像素艺术设计的高质量放大滤镜。此滤镜最初由 Maxim Stepin 创建。

它接受以下选项

n

设置缩放维度:2 表示 hq2x3 表示 hq3x4 表示 hq4x。默认为 3

30.126 hstack

水平堆叠输入视频。

所有流必须具有相同的像素格式和相同的高度。

请注意,此滤镜比使用 overlaypad 滤镜创建相同输出的速度更快。

此滤镜接受以下选项

输入

设置输入流的数量。默认为 2。

shortest

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

30.127 hsvhold

将某个 HSV 范围转换为灰度值。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,输出颜色可以更改为灰色或不灰色。

该滤镜接受以下选项:

色调

设置将在色差计算中使用的色调值。允许范围为 -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 hsvkey

将某个 HSV 范围转换为透明度。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,可以通过添加 alpha 通道将输出颜色更改为透明。

该滤镜接受以下选项:

色调

设置将在色差计算中使用的色调值。允许范围为 -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 hue

修改输入的色调和/或饱和度。

它接受以下参数

h

将色调角度指定为度数。它接受一个表达式,默认为 "0"。

s

指定 [-10,10] 范围内的饱和度。它接受一个表达式,默认为 "1"。

H

将色调角度指定为弧度。它接受一个表达式,默认为 "0"。

b

指定 [-10,10] 范围内的亮度。它接受一个表达式,默认为 "0"。

hH 是互斥的,不能同时指定。

bhHs 选项值是包含以下常量的表达式

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 huesaturation

将色调-饱和度-强度调整应用于输入视频流。

此滤镜在 RGB 色彩空间中工作。

此滤波器接受以下选项

色调

设置要应用的色调偏移量,以度为单位。默认为 0。允许范围为 -180 到 180。

饱和度

设置饱和度偏移量。默认为 0。允许范围为 -1 到 1。

intensity

设置强度偏移量。默认为 0。允许范围为 -1 到 1。

颜色

设置将要调整的原色和互补色。此选项通过提供一个或多个值来设置。这可以同时选择多个颜色。默认情况下,选择所有颜色。

r

调整红色。

y

调整黄色。

g

调整绿色。

c

调整青色。

b

调整蓝色。

m

调整洋红色。

a

调整所有颜色。

强度

设置滤波强度。允许范围为 0 到 100。默认值为 1。

rw, gw, bw

设置每个 RGB 分量的权重。允许的范围是 0 到 1。默认设置为 0.333、0.334、0.333。这些选项用于饱和度和亮度处理。

亮度

设置保持亮度,默认禁用。调整色调可能会改变原始 RGB 三元组的亮度,启用此选项后,亮度将保持相同的值。

30.131 hysteresis

通过连接组件将第一个流扩展到第二个流。这使得构建更强大的边缘掩模成为可能。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

threshold

设置用于过滤的阈值。如果像素分量值高于此值,则会激活用于连接组件的过滤算法。默认值为 0。

hysteresis 滤波器还支持 framesync 选项。

30.132 iccdetect

从嵌入的 ICC 配置文件(如果存在)检测色彩空间,并相应地更新帧的标签。

此滤波器接受以下选项

force

如果为 true,则帧的现有色彩空间标签将始终被从 ICC 配置文件检测到的值覆盖。否则,它们仅在包含 unknown 时才会被分配。默认启用。

30.133 iccgen

生成 ICC 配置文件并将其附加到帧。

此滤波器接受以下选项

color_primaries
color_trc

配置将为其生成 ICC 配置文件的色彩空间。默认值 auto 从输入帧的元数据推断该值,默认为 BT.709/sRGB(如果适用)。

请参阅 setparams 滤波器以获取可能值的列表,但请注意,unknown 不是此滤波器的有效值。

force

如果为 true,即使它会覆盖已存在的 ICC 配置文件,也会生成 ICC 配置文件。默认禁用。

30.134 identity

获取两个输入视频之间的标识分数。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,这些帧逐个进行比较。

通过日志系统打印获得的每个分量、平均、最小和最大标识分数。

该滤波器将每帧计算的标识分数存储在帧元数据中。

此滤镜还支持 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

解交错或交错场。

此滤波器允许您处理隔行扫描图像场,而无需对它们进行解交错。解交错将输入帧拆分为 2 个场(所谓的半图片)。奇数行移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(过滤)它们,然后重新交错它们。

该滤镜接受以下选项:

luma_mode, l
chroma_mode, c
alpha_mode, a

luma_modechroma_modealpha_mode 的可用值包括

none

不执行任何操作。

deinterleave, d

解交错场,将一个场放在另一个场之上。

interleave, i

交错场。反转解交错的效果。

默认值为 none

luma_swap, ls
chroma_swap, cs
alpha_swap, as

交换亮度/色度/alpha 场。交换偶数行和奇数行。默认值为 0

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。

锐化

如果设置为 1,则启用额外的锐化。默认值为 0。

双向

如果设置为 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

缓慢更新较暗的像素。

此滤镜使短促的闪光看起来更长。此滤镜接受以下选项:

衰减

设置衰减因子。默认值为 .95。允许的范围是从 0 到 1。

planes

设置要过滤的平面。默认值为全部。允许范围为 0 到 15。

30.141.1 命令

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

30.142 lenscorrection

校正径向镜头失真

此滤镜可用于校正因使用广角镜头而可能导致的径向失真,从而重新校正图像。要找到正确的参数,可以使用例如 OpenCV 部分中提供的工具,或者简单地进行试错。要使用 OpenCV,请使用 OpenCV 源代码中的校准示例(在 samples/cpp 下),并从结果矩阵中提取 k1 和 k2 系数。

请注意,实际上,KDE 项目中的开源工具 Krita 和 Digikam 中也提供了相同的滤镜。

与也可以用于补偿镜头误差的 渐晕 滤镜相比,此滤镜校正图像的失真,而 渐晕 校正亮度分布,因此您可能需要在某些情况下同时使用这两个滤镜,但您必须注意顺序,即渐晕应该在镜头校正之前还是之后应用。

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

要应用的校正类型。以下值是有效的选项:

渐晕

启用修复镜头渐晕。

几何

启用修复镜头几何。这是默认值。

子像素

启用修复色差。

渐晕_几何

启用修复镜头渐晕和镜头几何。

渐晕_子像素

启用修复镜头渐晕和色差。

失真

启用修复镜头几何和色差。

all

启用所有可能的校正。

焦距

图像/视频的焦距(缩放;对于视频,预计为常量)。例如,18-55 毫米镜头的焦距范围为 [18-55],因此在使用该镜头时应选择该范围内的值。默认值为 18。

光圈

图像/视频的光圈(对于视频,预计为常量)。请注意,光圈仅用于渐晕校正。默认值为 3.5。

对焦距离

图像/视频的对焦距离(对于视频,预计为常量)。请注意,对焦距离仅用于渐晕,并且仅略微影响渐晕校正过程。如果未知,则将其保留为默认值(即 1000)。

scale

变换后应用的缩放因子。校正后,视频不再一定是矩形的。此参数控制结果图像中可见的内容量。值 0 表示将自动选择一个值,从而使输出图像中几乎没有或没有未映射区域。1.0 表示不进行额外的缩放。较低的值可能会使校正后的图像的更多部分可见,而较高的值可能会避免输出中出现未映射区域。

目标几何

输出图像/视频的目标几何。以下值是有效的选项:

直线(默认)
鱼眼
全景
等距柱状投影
鱼眼_正交
鱼眼_立体
鱼眼_等立体角
鱼眼_索比
reverse

应用图像校正的反向(而不是校正失真,而是应用失真)。

interpolation

校正失真时使用的插值类型。以下值是有效的选项:

最近邻
线性(默认)
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 lcevc

基于 liblcevc_dec 的低复杂度增强视频编解码器滤镜 (https://github.com/v-novaltd/LCEVCdec)。

30.145 libplacebo

基于 libplacebo 的灵活 GPU 加速处理滤镜 (https://code.videolan.org/videolan/libplacebo)。

30.145.1 选项

此滤镜的选项分为以下几个部分:

30.145.1.1 输出模式

这些选项控制整体输出模式。默认情况下,libplacebo 会尽可能保留源色彩和尺寸,但会应用源帧中嵌入的任何胶片颗粒、杜比视界元数据或变形 SAR。

输入

设置输入数量。它可以与 idx 变量一起使用,以允许将多个输入放置/混合到输出帧中。这有效地启用了类似于 hstackoverlay 等的功能。

w
h

设置输出视频维度表达式。默认值为 iwih

允许与 scale 滤镜相同的表达式。

crop_x
crop_y

设置输入裁剪 x/y 表达式,默认值为 (iw-cw)/2(ih-ch)/2

crop_w
crop_h

设置输入裁剪宽度/高度表达式,默认值为 iwih

pos_x
pos_y

设置输出放置 x/y 表达式,默认值为 (ow-pw)/2(oh-ph)/2

pos_w
pos_h

设置输出放置宽度/高度表达式,默认值为 owoh

fps

设置输出帧率。这可以是有理数,例如 60000/1001。如果设置为特殊字符串 none(默认值),则输入时间戳将不修改地传递到输出。否则,输入视频帧将根据需要进行插值,以将视频缩放到指定的目标帧率,缩放方式由 frame_mixer 选项确定。

格式

设置输出格式覆盖。如果未设置(默认值),则帧将以与各自的输入帧相同的格式输出。否则,将执行格式转换。

force_original_aspect_ratio
force_divisible_by

与相同的 scale 滤镜选项的工作方式相同。

normalize_sar

如果启用,输出帧将始终具有 1:1 的像素宽高比。这将根据需要引入额外的填充/裁剪。如果禁用(默认值),任何宽高比不匹配,包括来自例如变形视频源的宽高比不匹配,都将转发到输出像素宽高比。

pad_crop_ratio

指定当输入宽高比与输出宽高比不匹配且 normalize_sar 生效时,填充和裁剪之间的比率(介于 0.01.0 之间)。默认值 0.0 始终用黑色边框填充内容,而值 1.0 始终裁剪掉部分内容。可以使用中间值,从而导致这两种方法的混合。

fillcolor

设置用于填充输出图像未覆盖的输出区域的颜色,例如由于 normalize_sar 导致。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的“颜色”部分。默认为 black

corner_rounding

渲染带有圆角的帧。该值以 0.01.0 范围内的浮点数给出,表示圆角的相对程度,从完全正方形到完全圆形。换句话说,它给出了半径除以较小边长的一半。默认为 0.0

extra_opts

传递额外的 libplacebo 内部配置选项。这些可以指定为以 ':' 分隔的 key=value 对列表。以下示例展示了如何配置自定义滤镜内核(“EWA LanczosSharp”)并使用它将输入图像分辨率加倍

-vf "libplacebo=w=iw*2:h=ih*2:extra_opts='upscaler=custom\:upscaler_preset=ewa_lanczos\:upscaler_blur=0.9812505644269356'"
colorspace
color_primaries
color_trc
range

配置输出帧将以其交付的色彩空间。默认值 auto 以与输入帧相同的格式输出帧,从而不会发生任何更改。对于任何其他值,将执行转换。

有关可能值的列表,请参阅 setparams 滤镜。

apply_filmgrain

如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则应用胶片颗粒并将其从输出中去除。默认启用。

apply_dolbyvision

如果源帧中存在杜比视界 RPU 元数据,则应用杜比视界 RPU 元数据并将其从输出中去除。默认启用。请注意,杜比视界将始终输出 BT.2020+PQ,从而覆盖通常的输入帧元数据。这些也将被选为各自帧输出选项的 auto 值。

除了为 scale 滤镜记录的表达式常量之外,crop_wcrop_hcrop_xcrop_ypos_wpos_hpos_xpos_y 选项还可以包含以下常量

in_idx, idx

当前活动输入流的(从 0 开始的)数字索引。

crop_w, cw
crop_h, ch

crop_wcrop_h 的计算值。

pos_w, pw
pos_h, ph

pos_wpos_h 的计算值。

in_t, t

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

out_t, ot

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

n

输入帧编号,从 0 开始。

30.145.1.2 缩放

此部分中的选项控制 libplacebo 如何执行上采样和(如果需要)下采样。请注意,libplacebo 将始终在内部以 4:4:4 内容进行操作,因此任何子采样的色度格式(如 yuv420p)都必然会作为渲染过程的一部分进行上采样和下采样。这意味着即使源分辨率和目标分辨率相同,缩放也可能会生效。

upscaler
downscaler

配置用于上采样和下采样的滤镜内核。各自的默认值是 spline36mitchell。有关可能值的完整列表,请将 help 传递给这些选项。最重要的值是

none

强制使用内置 GPU 纹理采样(通常为双线性)。速度极快但质量较差,尤其是在下采样时。

bilinear

双线性插值。通常可以在 GPU 上免费完成,除非这样做会导致混叠。速度快且质量低。

最近邻

最近邻插值。锐利但高度混叠。

oversample

在视觉上看起来类似于最近邻插值的算法,但尝试保留像素宽高比。对于像素艺术来说很好,因为它会导致对艺术外观的最小失真。

lanczos

标准 sinc-sinc 插值内核。

spline36

lanczos 的三次样条逼近。性能没有差异,但振铃略少。

ewa_lanczos

基于 jinc-sinc 内核的 lanczos 的椭圆加权平均版本。这也通常被称为“Jinc 缩放”。速度慢但质量非常高。

gaussian

高斯内核。具有某些理想的数学特性,但主观上非常模糊。

mitchell

由米切尔和内特拉瓦利推荐参数的三次 BC 样条插值。 几乎没有振铃效应。

frame_mixer

控制用于时间混合帧的内核。默认值为 none,禁用帧混合。如需查看所有可能的值,请向此选项传递 help。最重要的值是

none

禁用帧混合,产生等效于“最近邻”语义的结果。

oversample

过采样输入视频以创建“平滑运动”类型的效果:如果输出帧正好落在两个视频帧之间的过渡处,则会根据相对重叠进行混合。只要需要保留原始主观外观,就建议使用此选项。

mitchell_clamp

较大的滤波器内核,以一种旨在尽可能消除振铃和其他伪影的方式平滑插值多个帧。 无论何时需要最大的视觉平滑度,都建议使用此选项。

linear

帧之间的线性混合/淡入淡出。 特别适用于构建幻灯片等。

lut_entries

配置缩放器 LUT 的大小,范围从 1256。 默认值 0 将选择 libplacebo 的内部默认值,通常为 64

antiringing

启用抗振铃(对于非 EWA 滤波器)。该值(介于 0.01.0 之间)配置抗振铃算法的强度。如果设置得过高,可能会增加混叠。默认情况下禁用。

sigmoid

在放大期间启用 S 型压缩。 略微减少振铃。 默认情况下启用。

30.145.1.3 去条带

Libplacebo 自带一个内置的去带状滤波器,该滤波器擅长抵消许多常见的带状和块状伪影。只要需要质量,强烈建议启用此功能。

deband

启用(快速)去带状算法。 默认情况下禁用。

deband_iterations

去带状算法的去带状迭代次数。每次迭代都以逐渐增大的半径(和减小的阈值)执行。建议的值在 14 的范围内。默认为 1

deband_threshold

去带状滤波器强度。数字越大,去带状效果越积极。默认为 4.0

deband_radius

去带状滤波器半径。较大的半径更适合缓慢渐变,而较小的半径更适合陡峭渐变。默认为 16.0

deband_grain

要添加的额外输出颗粒量。有助于隐藏瑕疵。默认为 6.0

30.145.1.4 颜色调整

一组主观颜色控件。 不是很严格,因此确切的效果会因输入原色和颜色空间而略有不同。

亮度

亮度增强,介于 -1.01.0 之间。默认为 0.0

对比度

对比度增益,介于 0.016.0 之间。默认为 1.0

饱和度

饱和度增益,介于 0.016.0 之间。默认为 1.0

色调

色调偏移,单位为弧度,介于 -3.143.14 之间。默认为 0.0。这将旋转 UV 子向量,对于 RGB 输入,默认为 BT.709 系数。

gamma

伽玛调整,介于 0.016.0 之间。默认为 1.0

cones

用于色盲模拟的锥体模型。接受 lms 的任意组合。以下是一些示例

m

Deuteranomaly / deuteranopia(影响 3%-4% 的人口)

l

Protanomaly / protanopia(影响 1%-2% 的人口)

l+m

单色性(非常罕见)

l+m+s

Achromatopsy(完全丧失白天的视觉,极其罕见)

cone-strength

cones 指定的锥体的增益因子,介于 0.010.0 之间。值 1.0 不会对色彩视觉产生任何改变。值 0.0(默认值)模拟这些锥体的完全丧失。大于 1.0 的值会导致夸大锥体之间的差异,这可能有助于补偿色彩视觉的降低。

30.145.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.145.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 的 EETF,方法 A。专为良好母带处理的 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 为《神秘海域 2》开发的逐段电影式色调映射算法,灵感来自柯达使用的类似色调映射算法。因其在具有 HDR 渲染的视频游戏中的使用而普及。可以很好地保留暗部和亮部细节,但缺点是会显着改变平均亮度。这有点类似于参数为 0.24reinhard

gamma

拟合伽马(幂)函数以在源颜色空间和目标颜色空间之间进行转换,从而有效地产生感知上的硬膝连接两个大致线性的部分。这可以相当准确地保留所有比例的细节,但可能会导致图像外观柔和或暗淡。该参数用作截止点,默认为 0.5

linear

在线性范围内拉伸输入范围到输出范围(在 PQ 空间中)。这将准确地保留所有细节,但会导致显着不同的平均亮度。除了常规色调映射之外,还可用于反向色调映射。该参数可以用作额外的线性增益系数(默认为 1.0)。

tonemapping_param

对于可调谐的色调映射函数,此参数可用于微调曲线行为。请参阅 tonemapping 的文档。默认值 0.0 将被曲线的首选默认设置替换。

inverse_tonemapping

如果启用,此滤镜还会尝试拉伸 SDR 信号以填充 HDR 输出颜色容量。默认禁用。

tonemapping_lut_size

色调映射 LUT 的大小,介于 21024 之间。默认为 256。请注意,当与 peak_detect 结合使用时,此数字将平方。

contrast_recovery

对比度恢复强度。如果设置为高于 0.0 的值,则源图像将分为高频和低频分量,并且一部分高频图像会添加回色调映射的输出。对于某些 HDR 源,可能会导致过度的振铃伪像,但可以提高色调映射后图像中剩余的主观清晰度和细节。默认为 0.30

contrast_smoothness

对比度恢复低通内核大小。默认为 3.5。增加或减小此值将显着影响视觉外观。当禁用 contrast_recovery 时无效。

30.145.1.7 抖动

默认情况下,libplacebo 会在必要时进行抖动,包括渲染到任何低于 16 位精度的整数格式。建议始终保持启用状态,因为不这样做可能会导致输出中出现可见的条带,即使启用了 debanding 滤镜也是如此。如果需要最大性能,请使用 ordered_fixed 而不是禁用抖动。

dithering

要使用的抖动方法。接受以下值

none

完全禁用抖动。可能会导致明显的条带。

blue

使用伪蓝色噪声进行抖动。这是默认值。

ordered

可调谐的有序抖动模式。

ordered_fixed

更快的有序抖动,固定大小为 6。无纹理。

white

使用白噪声进行抖动。无纹理。

dither_lut_size

抖动 LUT 大小,以 18 之间的 2 为底的对数表示。默认为 6,对应于 64x64 的 LUT 大小。

dither_temporal

启用时间抖动。默认禁用。

30.145.1.8 自定义着色器

libplacebo 支持许多基于 mpv .hook GLSL 语法的自定义着色器。可以在这里找到此类着色器的集合:https://github.com/mpv-player/mpv/wiki/User-Scripts#user-shaders

对 mpv 着色器格式的完整描述超出了本节的范围,但可以在此处找到摘要:https://mpv.io/manual/master/#options-glsl-shader

custom_shader_path

指定要在运行时加载的自定义着色器文件的路径。

custom_shader_bin

将完整的自定义着色器指定为原始字符串。

30.145.1.9 调试/性能

本节中的所有选项默认关闭。当尝试以牺牲质量为代价来挤出最大性能时,它们可能会有所帮助。

skip_aa

缩小时禁用抗锯齿。

polar_cutoff

将此绝对幅度以下的极坐标(EWA)缩放器内核截断,介于 0.01.0 之间。

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置 GPU 采样(强制使用 LUT)。

disable_fbos

强制禁用 FBO,导致几乎所有功能丧失,但提供尽可能快的速度。

30.145.2 命令

此滤镜几乎支持上述所有选项作为命令

30.145.3 示例

  • 将输入色调映射到标准色域 BT.709 输出
    libplacebo=colorspace=bt709:color_primaries=bt709:color_trc=bt709:range=tv
    
  • 重新缩放输入以适合标准 1080p,具有高质量缩放
    libplacebo=w=1920:h=1080:force_original_aspect_ratio=decrease:normalize_sar=true:upscaler=ewa_lanczos:downscaler=ewa_lanczos
    
  • 将低 FPS / VFR 输入插值为平滑的恒定 60 fps 输出
    libplacebo=fps=60:frame_mixer=mitchell_clamp
    
  • 将输入转换为标准 sRGB JPEG
    libplacebo=format=yuv420p:colorspace=bt470bg:color_primaries=bt709:color_trc=iec61966-2-1:range=pc
    
  • 使用更高质量的去条带设置
    libplacebo=deband=true:deband_iterations=3:deband_radius=8:deband_threshold=6
    
  • 在安装了 Mesa 的系统上在 CPU 上运行此滤镜(并禁用最昂贵的选项)
    ffmpeg ... -init_hw_device vulkan:llvmpipe ... -vf libplacebo=upscaler=none:downscaler=none:peak_detect=false
    
  • 在解码器中抑制基于 CPU 的 AV1/H.274 胶片颗粒应用,而倾向于使用此滤镜来完成。请注意,只有当帧已在 GPU 上,或者您将 libplacebo 用于其他目的时,这才能获得增益,因为否则 VRAM 往返行程将抵消任何预期的加速。
    ffmpeg -export_side_data +film_grain ... -vf libplacebo=apply_filmgrain=true
    
  • 与 VAAPI hwdec 互操作以避免通过 RAM 的往返
    ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
    

30.146 libvmaf

计算输入视频的参考/失真对的 VMAF(视频多方法评估融合)分数。

第一个输入是失真视频,第二个输入是参考视频。

获得的 VMAF 分数通过日志系统打印。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装该库后,可以使用以下命令启用:./configure --enable-libvmaf

该滤镜具有以下选项

model

以 ‘|’ 分隔的 vmaf 模型列表。每个模型都可以配置多个参数。默认值:"version=vmaf_v0.6.1"

feature

以 ‘|’ 分隔的功能列表。每个功能都可以配置多个参数。

log_path

设置用于存储日志文件的文件路径。

log_fmt

设置日志文件的格式(xml、json、csv 或 sub)。

pool

设置用于计算 VMAF 的池化方法。选项包括 minharmonic_meanmean(默认)。

n_threads

设置初始化 libvmaf 时使用的线程数。默认值为 0,表示不使用线程。

n_subsample

设置要使用的帧子采样间隔。

此滤镜还支持 framesync 选项。

30.146.1 示例

  • 在以下示例中,失真视频 distorted.mpg 与参考文件 reference.mpg 进行比较。
  • 基本用法
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null -
    
  • 使用多个模型的示例
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null -
    
  • 使用多个附加功能的示例
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null -
    
  • 使用选项和不同容器的示例
    ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null -
    

30.147 libvmaf_cuda

这是 libvmaf 滤波器的 CUDA 变体。它只接受 CUDA 帧。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装该库后,可以使用以下命令启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf

30.147.1 示例

  • 基本用法,展示了 CUVID 硬件解码和使用 scale_cuda 进行 CUDA 缩放
    ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
        -filter_complex "
            [0:v]scale_cuda=format=yuv420p[dis]; \
            [1:v]scale_cuda=format=yuv420p[ref]; \
            [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
        " \
        -f null -
    

30.148 limitdiff

使用第二个和可选的第三个视频流应用有限差异滤波器。

该滤镜接受以下选项:

threshold

设置允许视频流之间存在特定差异时使用的阈值。任何绝对差异值小于或等于此阈值时,将从第一个视频流中选取像素分量。

elasticity

设置处理视频流时软阈值的弹性。此值乘以第一个值设置第二个阈值。任何绝对差异值大于或等于第二个阈值时,将从第二个视频流中选取像素分量。对于介于这两个阈值之间的值,将使用第一个和第二个视频流之间的线性插值。

reference

启用参考(第三个)视频流处理。默认情况下禁用。如果设置,此视频流将用于计算与第一个视频流的绝对差异。

planes

指定将处理哪些平面。默认为所有可用的平面。

30.148.1 命令

此滤波器支持上述所有选项作为 命令,除了 ‘reference’ 选项。

30.149 limiter

将像素分量值限制在指定的范围 [min, max] 内。

该滤镜接受以下选项:

最小值

下限。默认为允许的最小输入值。

最大值

上限。默认为允许的最大输入值。

planes

指定将处理哪些平面。默认为所有可用的平面。

30.149.1 命令

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

30.150 loop

循环播放视频帧。

该滤镜接受以下选项:

loop

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

大小

设置最大帧数。默认值为 0。

start

设置循环的第一帧。默认值为 0。

时间

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

30.150.1 示例

  • 无限循环播放单个第一帧
    loop=loop=-1:size=1:start=0
    
  • 循环播放单个第一帧 10 次
    loop=loop=10:size=1:start=0
    
  • 循环播放前 10 帧 5 次
    loop=loop=5:size=10:start=0
    

30.151 lut1d

将一维 LUT 应用于输入视频。

该滤镜接受以下选项:

file

设置一维 LUT 文件名。

当前支持的格式

cube

Iridas

csp

cineSpace

interp

选择插值模式。

可用值为

最近邻

使用最近定义的点的值。

linear

使用线性插值插值值。

cosine

使用余弦插值插值值。

cubic

使用三次插值插值值。

spline

使用样条插值插值值。

30.151.1 命令

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

30.152 lut3d

将三维 LUT 应用于输入视频。

该滤镜接受以下选项:

file

设置三维 LUT 文件名。

当前支持的格式

3dl

AfterEffects

cube

Iridas

dat

DaVinci

m3d

Pandora

csp

cineSpace

interp

选择插值模式。

可用值为

最近邻

使用最近定义的点的值。

trilinear

使用定义立方体的 8 个点插值值。

tetrahedral

使用四面体插值值。

pyramid

使用金字塔插值值。

prism

使用棱镜插值值。

30.152.1 命令

此滤波器支持 commands 中的 interp 选项。

30.153 lumakey

将某些亮度值转换为透明度。

该滤镜接受以下选项:

threshold

设置将用作透明度基础的亮度。默认值为 0

tolerance

设置要键控出的亮度值范围。默认值为 0.01

softness

设置柔和度范围。默认值为 0。使用此项控制从零到完全透明的渐变过渡。

30.153.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.154 lut, lutrgb, lutyuv

计算一个查找表,用于将每个像素分量输入值绑定到输出值,并将其应用于输入视频。

lutyuv 将查找表应用于 YUV 输入视频,lutrgb 应用于 RGB 输入视频。

这些滤波器接受以下参数

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 alpha 分量

r

设置红色分量表达式

g

设置绿色分量表达式

b

设置蓝色分量表达式

a

alpha 分量表达式

y

设置 Y/亮度分量表达式

u

设置 U/Cb 分量表达式

v

设置 V/Cr 分量表达式

它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。

与每个 c* 选项关联的确切分量取决于输入格式。

lut 滤波器要求输入为 YUV 或 RGB 像素格式,lutrgb 要求输入为 RGB 像素格式,而 lutyuv 要求输入为 YUV。

表达式可以包含以下常量和函数

w
h

输入宽度和高度。

val

像素分量的输入值。

clipval

输入值,被裁剪到 minval-maxval 范围内。

maxval

像素分量的最大值。

minval

像素分量的最小值。

negval

像素分量值的取反值,被裁剪到 minval-maxval 范围内;它对应于表达式 "maxval-clipval+minval"。

clip(val)

val 中计算的值,被裁剪到 minval-maxval 范围内。

gammaval(gamma)

像素分量值的计算伽马校正值,被裁剪到 minval-maxval 范围内。它对应于表达式 "pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval"

所有表达式默认为 "clipval"。

30.154.1 命令

此滤镜支持与选项相同的 命令

30.154.2 示例

  • 反转输入视频
    lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
    lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
    

    以上与以下相同

    lutrgb="r=negval:g=negval:b=negval"
    lutyuv="y=negval:u=negval:v=negval"
    
  • 反转亮度
    lutyuv=y=negval
    
  • 移除色度分量,将视频转换为灰度图像
    lutyuv="u=128:v=128"
    
  • 应用亮度燃烧效果
    lutyuv="y=2*val"
    
  • 移除绿色和蓝色分量
    lutrgb="g=0:b=0"
    
  • 在输入上设置恒定的 alpha 通道值
    format=rgba,lutrgb=a="maxval-minval/2"
    
  • 将亮度伽马校正 0.5 的因子
    lutyuv=y=gammaval(0.5)
    
  • 丢弃亮度的最低有效位
    lutyuv=y='bitand(val, 128+64+32)'
    
  • 类似 Technicolor 的效果
    lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
    

30.155 lut2, tlut2

lut2 滤波器接受两个输入流并输出一个流。

tlut2 (time lut2) 滤波器接受来自单个流的两个连续帧。

此滤波器接受以下参数

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 alpha 分量

d

设置输出位深度,仅适用于 lut2 滤波器。默认值为 0,这意味着位深度将自动从第一个输入格式中选取。

lut2 滤波器还支持 framesync 选项。

它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。

与每个 c* 选项关联的确切分量取决于输入格式。

表达式可以包含以下常量

w
h

输入宽度和高度。

x

像素分量的第一个输入值。

y

像素分量的第二个输入值。

bdx

第一个输入视频位深度。

bdy

第二个输入视频位深度。

所有表达式默认为 "x"。

30.155.1 命令

此滤波器支持上述所有选项作为 命令,除了 d 选项。

30.155.2 示例

  • 突出显示两个 RGB 视频流之间的差异
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
    
  • 突出显示两个 YUV 视频流之间的差异
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
    
  • 显示两个视频流之间的最大差异
    lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
    

30.156 maskedclamp

使用第二个和第三个输入流钳制第一个输入流。

返回第一个流的值,该值介于第二个输入流 - undershoot 和第三个输入流 + overshoot 之间。

此滤波器接受以下选项

undershoot

默认值为 0

overshoot

默认值为 0

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

30.156.1 命令

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

30.157 maskedmax

使用第二个输入流和第一个输入流之间的绝对差异以及第三个输入流和第一个输入流之间的绝对差异,将第二个和第三个输入流合并到输出流中。如果第二个绝对差异大于第一个绝对差异,则选取的值将来自第二个输入流,否则将来自第三个输入流。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

30.157.1 命令

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

30.158 maskedmerge

使用第三个输入流中的每像素权重将第一个输入流与第二个输入流合并。

第三个流像素分量的值为 0 表示保持第一个流的像素分量不变,而最大值(例如 8 位视频的 255)表示保持第二个流的像素分量不变。中间值定义了两个输入流像素分量之间的混合程度。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

30.158.1 命令

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

30.159 maskedmin

使用第二个输入流与第一个输入流之间的绝对差值,以及第三个输入流与第一个输入流之间的绝对差值,将第二个和第三个输入流合并到输出流中。如果第二个绝对差值小于第一个绝对差值,则选择第二个输入流的值;否则,选择第三个输入流的值。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

30.159.1 命令

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

30.160 maskedthreshold

通过比较两个视频流与固定阈值的绝对差来选择像素。

如果第一个和第二个视频流的像素分量之间的绝对差值小于或等于用户提供的阈值,则选择第一个视频流的像素分量;否则,选择第二个视频流的像素分量。

此滤波器接受以下选项

threshold

设置从两个输入视频流的绝对差值中选择像素时使用的阈值。

planes

设置哪些平面将作为位图处理,未处理的平面将从第二个流复制。默认值为 0xf,表示所有平面都将被处理。

mode

设置过滤器操作模式。可以是 absdiff。默认值为 abs

30.160.1 命令

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

30.161 maskfun

从输入视频创建蒙版。

例如,在 tblend 过滤器之后创建运动蒙版很有用。

此滤波器接受以下选项

low

设置低阈值。任何小于或等于此值的像素分量都将被设置为 0。

high

设置高阈值。任何高于此值的像素分量都将被设置为当前像素格式允许的最大值。

planes

设置要过滤的平面,默认情况下,所有可用的平面都会被过滤。

fill

用此值填充所有帧像素。

求和

设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,则输出帧将完全填充由 fill 选项设置的值。通常与 tblend 过滤器结合使用时,对于场景更改很有用。

30.161.1 命令

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

30.162 mcdeint

应用运动补偿去隔行。

它需要每个帧一个场作为输入,因此必须与 yadif=1/3 或等效项一起使用。

此滤波器接受以下选项

mode

设置去隔行模式。

它接受以下值之一

fast
medium
slow

使用迭代运动估计

extra_slow

类似于 ‘slow’,但使用多个参考帧。

默认值为 ‘fast’。

parity

设置输入视频假定的图像场奇偶性。它必须是以下值之一

0, tff

假设顶场优先

1, bff

假设底场优先

默认值为 ‘bff’。

量化参数 (qp)

设置内部编码器使用的每个块的量化参数 (QP)。

较高的值应该会产生更平滑的运动矢量场,但各个向量的优化程度较低。默认值为 1。

30.163 median

从由半径定义的特定矩形中选择中值像素。

此滤波器接受以下选项

radius

设置水平半径大小。默认值为 1。允许的范围是 1 到 127 的整数。

planes

设置要处理的平面。默认值为 15,即所有可用的平面。

radiusV

设置垂直半径大小。默认值为 0。允许的范围是 0 到 127 的整数。如果为 0,则将从水平 radius 选项中选择值。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

30.163.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.164 mergeplanes

合并来自多个视频流的颜色通道分量。

该过滤器最多接受 4 个输入流,并将选定的输入平面合并到输出视频中。

此滤波器接受以下选项

mapping

设置输入到输出平面的映射。默认值为 0

映射指定为位图。它应该以十六进制数的形式指定,格式为 0xAa[Bb[Cc[Dd]]]。“Aa” 描述了输出流第一个平面的映射。“A” 设置要使用的输入流的编号(从 0 到 3),而 “a” 设置要使用的相应输入的平面编号(从 0 到 3)。其余映射类似,“Bb” 描述了输出流第二个平面的映射,“Cc” 描述了输出流第三个平面的映射,“Dd” 描述了输出流第四个平面的映射。

格式

设置输出像素格式。默认值为 yuva444p

map0s
map1s
map2s
map3s

设置输出第 N 个平面的输入到输出流的映射。默认值为 0

map0p
map1p
map2p
map3p

设置输出第 N 个平面的输入到输出平面的映射。默认值为 0

30.164.1 示例

  • 将三个宽度和高度相同的灰度视频流合并到单个视频流中
    [a0][a1][a2]mergeplanes=0x001020:yuv444p
    
  • 将第一个 yuv444p 流和第二个灰度视频流合并到 yuva444p 视频流中
    [a0][a1]mergeplanes=0x00010210:yuva444p
    
  • 交换 yuva444p 流中的 Y 和 A 平面
    format=yuva444p,mergeplanes=0x03010200:yuva444p
    
  • 交换 yuv420p 流中的 U 和 V 平面
    format=yuv420p,mergeplanes=0x000201:yuv420p
    
  • 将 rgb24 剪辑转换为 yuv444p
    format=rgb24,mergeplanes=0x000102:yuv444p
    

30.165 mestimate

使用块匹配算法估计和导出运动矢量。运动矢量存储在帧侧数据中,供其他过滤器使用。

此滤波器接受以下选项

method

指定运动估计方法。接受以下值之一

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强型预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认值为 ‘esa’。

mb_size

宏块大小。默认为 16

search_param

搜索参数。默认为 7

30.166 midequalizer

使用两个视频流应用 Midway 图像均衡化效果。

Midway 图像均衡化调整一对图像以具有相同的直方图,同时尽可能保持其动态。它对于例如匹配来自一对立体摄像机的曝光很有用。

此过滤器有两个输入和一个输出,它们必须具有相同的像素格式,但大小可能不同。过滤器的输出是第一个输入,使用两个输入的中间直方图进行调整。

此过滤器接受以下选项

planes

设置要处理的平面。默认值为 15,即所有可用的平面。

30.167 minterpolate

使用运动插值将视频转换为指定的帧率。

此滤波器接受以下选项

fps

指定输出帧率。这可以是有理数,例如 60000/1001。如果 fps 低于源 fps,则会丢帧。默认值为 60

mi_mode

运动插值模式。接受以下值

dup

复制前一帧或下一帧以插值新帧。

blend

混合源帧。插值帧是前一帧和下一帧的平均值。

mci

运动补偿插值。选择此模式时,以下选项有效

mc_mode

运动补偿模式。接受以下值

obmc

重叠块运动补偿。

aobmc

自适应重叠块运动补偿。根据相邻运动矢量的可靠性自适应控制窗口加权系数,以减少过度平滑。

默认模式为 ‘obmc’。

me_mode

运动估计模式。接受以下值

bidir

双向运动估计。为每个源帧估计前向和后向的运动矢量。

bilat

双边运动估计。直接为插值帧估计运动矢量。

默认模式为 ‘bilat’。

me

用于运动估计的算法。接受以下值

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强型预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认算法为 ‘epzs’。

mb_size

宏块大小。默认为 16

search_param

运动估计搜索参数。默认为 32

vsbmc

启用可变大小块运动补偿。在对象边界处应用较小块大小的运动估计,以使其不那么模糊。默认为 0(禁用)。

scd

场景切换检测方法。场景切换会导致运动矢量朝随机方向。场景切换检测会用重复帧替换插值帧。其他模式可能不需要。接受以下值

none

禁用场景切换检测。

fdiff

帧差异。比较对应的像素值,如果满足 scd_threshold,则检测到场景切换。

默认方法为 ‘fdiff’。

scd_threshold

场景切换检测阈值。默认为 10.

30.168 mix

将多个视频输入流混合为一个视频流。

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

输入

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

权重

按顺序指定每个输入视频流的权重。每个权重之间用空格分隔。如果权重的数量小于frames的数量,则最后一个指定的权重将用于所有剩余的未设置权重。

scale

指定缩放,如果设置了缩放,它将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale 会自动缩放到权重之和。

planes

设置要过滤的平面。默认值为全部。允许范围为 0 到 15。

duration

指定如何确定流的结尾。

longest

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

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

30.168.1 命令

此滤波器支持以下命令

权重
scale
planes

语法与同名选项相同。

30.169 monochrome

使用自定义颜色滤镜将视频转换为灰度。

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

cb

设置色度蓝色点。允许范围为 -1 到 1。默认值为 0。

cr

设置色度红色点。允许范围为 -1 到 1。默认值为 0。

大小

设置颜色滤镜大小。允许范围为 .1 到 10。默认值为 1。

high

设置高光强度。允许范围为 0 到 1。默认值为 0。

30.169.1 命令

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

30.170 morpho

此滤镜允许应用主要的形态学灰度变换,使用在第二个输入流中设置的任意结构进行腐蚀和膨胀。

腐蚀膨胀 滤镜中朴素的实现方式和慢得多的性能不同,当速度至关重要时,应改为使用 morpho 滤镜。

下面是接受的选项的描述,

mode

设置要应用的形态学变换,可以是

erode
dilate
open
close
gradient
tophat
blackhat

默认为 erode

planes

设置要过滤的平面,默认情况下会过滤除 alpha 之外的所有平面。

structure

设置将从第二个输入流处理哪个结构视频帧,可以是 firstall。默认为 all

morpho 滤镜还支持 framesync 选项。

30.170.1 命令

此滤镜支持与选项相同的 命令

30.171 mpdecimate

丢弃与前一帧差异不大的帧,以降低帧率。

此滤镜的主要用途是用于非常低比特率的编码(例如,通过拨号调制解调器进行流传输),但理论上也可以用于修复错误地进行反向电视电影处理的影片。

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

最大值

设置可以丢弃的最大连续帧数(如果为正数),或丢弃帧之间的最小间隔(如果为负数)。如果值为 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.172 msad

获取两个输入视频之间的 MSAD(平均绝对差值之和)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,这些帧逐个进行比较。

通过日志系统打印获得的每个分量、平均值、最小值和最大值 MSAD。

该滤镜将每帧计算的 MSAD 存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

30.173 multiply

将第一个视频流的像素值与第二个视频流的像素值相乘。

该滤镜接受以下选项:

scale

设置应用于第二个视频流的缩放。默认值为 1。允许范围为 09

offset

设置应用于第二个视频流的偏移量。默认值为 0.5。允许范围为 -11

planes

指定将处理的输入视频流中的平面。默认情况下,会处理所有平面。

30.173.1 命令

此滤镜支持与选项相同的 命令

30.174 negate

反转(否定)输入视频。

它接受以下选项

分量

设置要否定的分量。

分量的可用值是

y
u
v
a
r
g
b
negate_alpha

如果值为 1,则否定 alpha 分量(如果存在)。默认值为 0。

30.174.1 命令

此滤镜支持与选项相同的 命令

30.175 nlmeans

使用非局部均值算法对帧进行降噪。

通过查找具有相似上下文的其他像素来调整每个像素。此上下文相似性是通过比较其大小为 pxp 的周围块来定义的。在像素周围 rxr 的区域中搜索块。

请注意,搜索区域定义了块的中心,这意味着某些块将由该搜索区域之外的像素组成。

该滤镜接受以下选项。

s

设置降噪强度。默认为 1.0。必须在 [1.0, 30.0] 范围内。

p

设置块大小。默认为 7。必须是 [0, 99] 范围内的奇数。

pc

p 相同,但用于色度平面。

默认值为 0,表示自动。

r

设置搜索大小。默认为 15。必须是 [0, 99] 范围内的奇数。

rc

r 相同,但用于色度平面。

默认值为 0,表示自动。

30.176 nnedi

使用神经网络边缘定向插值对视频进行反交错。

此滤波器接受以下选项

权重

强制性选项,没有二进制文件,滤镜无法工作。当前文件可以在这里找到: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.176.1 命令

此滤镜支持与选项相同的命令,但排除 weights 选项。

30.177 noformat

强制 libavfilter 不要使用任何指定的像素格式作为下一个滤镜的输入。

它接受以下参数

pix_fmts

一个以“|”分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

30.177.1 示例

  • 强制 libavfilter 使用与 yuv420p 不同的格式作为 vflip 滤镜的输入
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式
    noformat=yuv420p|yuv444p|yuv410p
    

30.178 noise

在视频输入帧上添加噪声。

该滤镜接受以下选项:

all_seed
c0_seed
c1_seed
c2_seed
c3_seed

为特定像素分量或所有像素分量设置噪声种子,如果使用 all_seed。默认值为 123457

all_strength, alls
c0_strength, c0s
c1_strength, c1s
c2_strength, c2s
c3_strength, c3s

为特定像素分量或所有像素分量设置噪声强度,如果使用 all_strength。默认值为 0。允许的范围是 [0, 100]。

all_flags, allf
c0_flags, c0f
c1_flags, c1f
c2_flags, c2f
c3_flags, c3f

如果使用 all_flags,则设置像素分量标志或设置所有分量的标志。分量标志的可用值包括

a

平均时间噪声(更平滑)

p

将随机噪声与(半)规则模式混合

t

时间噪声(帧之间的噪声模式发生变化)

u

均匀噪声(否则为高斯噪声)

30.178.1 示例

向输入视频添加时间和均匀噪声

noise=alls=20:allf=t+u

30.179 normalize

标准化 RGB 视频(也称为直方图拉伸,对比度拉伸)。请参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每个帧的每个通道,滤镜会计算输入范围,并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的全动态范围。

可以在输入范围内使用时间平滑来减少因小而暗或明亮的物体进入或离开场景而引起的闪烁(亮度快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且像摄像机一样,它可能会导致视频出现一段时间的过度曝光或曝光不足。

R、G、B 通道可以独立标准化,这可能会导致一些颜色偏移,或者可以作为单个通道链接在一起,从而防止颜色偏移。链接的标准化会保留色调。独立标准化不会,因此可用于消除一些色偏。独立标准化和链接标准化可以按任何比例组合。

normalize 滤镜接受以下选项

blackpt
whitept

定义输出范围的颜色。最小输入值映射到 blackpt。最大输入值映射到 whitept。默认值分别为黑色和白色。为 blackpt 指定白色,为 whitept 指定黑色将产生颜色反转的标准化视频。可以使用灰色阴影来降低动态范围(对比度)。在此处指定饱和颜色可以产生一些有趣的效果。

smoothing

用于时间平滑的先前帧数。使用当前帧和 smoothing 个先前帧的滚动平均值来平滑每个通道的输入范围。默认值为 0(无时间平滑)。

independence

控制独立(颜色偏移)通道标准化与链接(颜色保留)标准化的比率。0.0 为完全链接,1.0 为完全独立。默认值为 1.0(完全独立)。

强度

滤镜的整体强度。1.0 为完全强度。0.0 是一个相当昂贵的空操作。默认值为 1.0(完全强度)。

30.179.1 命令

此滤镜支持与选项相同的命令,但排除 smoothing 选项。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.179.2 示例

拉伸视频对比度以使用全动态范围,且无时间平滑;可能会根据源内容而闪烁

normalize=blackpt=black:whitept=white:smoothing=0

如上所述,但使用 50 帧的时间平滑;应减少闪烁,具体取决于源内容

normalize=blackpt=black:whitept=white:smoothing=50

如上所述,但使用保留色调的链接通道标准化

normalize=blackpt=black:whitept=white:smoothing=50:independence=0

如上所述,但强度为一半

normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5

将最暗的输入颜色映射为红色,将最亮的输入颜色映射为青色

normalize=blackpt=red:whitept=cyan

30.180 null

将视频源原封不动地传递到输出。

30.181 ocr

光学字符识别

此滤镜使用 Tesseract 进行光学字符识别。要启用此滤镜的编译,您需要使用 --enable-libtesseract 配置 FFmpeg。

它接受以下选项

datapath

将 datapath 设置为 tesseract 数据。默认值是使用安装时设置的值。

language

设置语言,默认值为 "eng"。

whitelist

设置字符白名单。

blacklist

设置字符黑名单。

该滤镜将识别的文本导出为帧元数据 lavfi.ocr.text。该滤镜将识别单词的置信度导出为帧元数据 lavfi.ocr.confidence

30.182 ocv

使用 libopencv 应用视频转换。

要启用此滤镜,请安装 libopencv 库和头文件,并使用 --enable-libopencv 配置 FFmpeg。

它接受以下参数

filter_name

要应用的 libopencv 滤镜的名称。

filter_params

要传递给 libopencv 滤镜的参数。如果未指定,则假定为默认值。

有关更精确的信息,请参阅官方 libopencv 文档:https://docs.opencv.ac.cn/master/modules/imgproc/doc/filtering.html

支持多个 libopencv 滤镜;请参阅以下小节。

30.182.1 dilate

通过使用特定的结构元素来膨胀图像。它对应于 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.182.2 erode

通过使用特定的结构元素来腐蚀图像。它对应于 libopencv 函数 cvErode

它接受参数:struct_el:nb_iterations,其语法和语义与 dilate 滤镜相同。

30.182.3 smooth

平滑输入视频。

该滤镜采用以下参数:type|param1|param2|param3|param4

type 是要应用的平滑滤波器的类型,必须是以下值之一:"blur"、"blur_no_scale"、"median"、"gaussian" 或 "bilateral"。默认值为 "gaussian"。

param1param2param3param4 的含义取决于平滑类型。param1param2 接受整数正值或 0。param3param4 接受浮点数值。

param1 的默认值为 3。其他参数的默认值为 0。

这些参数对应于分配给 libopencv 函数 cvSmooth 的参数。

30.183 oscilloscope

2D 视频示波器。

用于测量空间脉冲、阶跃响应、色度延迟等。

它接受以下参数

x

设置示波器中心 x 坐标。

y

设置示波器中心 y 坐标。

s

设置示波器大小,相对于帧对角线。

t

设置示波器倾斜/旋转角度。

o

设置轨迹不透明度。

tx

设置轨迹中心 x 坐标。

ty

设置轨迹中心 y 坐标。

tw

设置轨迹宽度,相对于帧宽度。

th

设置轨迹高度,相对于帧高度。

c

设置要追踪的组件。默认情况下,它会追踪前三个组件。

g

绘制轨迹网格。默认启用。

st

绘制一些统计信息。默认启用。

sc

绘制示波器。默认启用。

30.183.1 命令

此过滤器支持与选项相同的 命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.183.2 示例

  • 检查视频帧的完整第一行。
    oscilloscope=x=0.5:y=0:s=1
    
  • 检查视频帧的完整最后一行。
    oscilloscope=x=0.5:y=1:s=1
    
  • 检查高度为 1080 的视频帧的完整第 5 行。
    oscilloscope=x=0.5:y=5/1080:s=1
    
  • 检查视频帧的完整最后一列。
    oscilloscope=x=1:y=0.5:s=1:t=1
    

30.184 overlay

将一个视频叠加在另一个视频之上。

它接受两个输入并产生一个输出。第一个输入是“主要”视频,第二个输入叠加在其上。

它接受以下参数

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

x
y

设置主视频上叠加视频的 x 和 y 坐标的表达式。两个表达式的默认值均为 "0"。如果表达式无效,则将其设置为一个巨大的值(意味着叠加层不会显示在输出可见区域内)。

eof_action

请参阅 framesync

eval

设置何时计算 xy 表达式。

它接受以下值

init

仅在滤镜初始化期间或处理命令时计算一次表达式

frame

为每个传入的帧计算表达式

默认值为 ‘frame’。

shortest

请参阅 framesync

格式

设置输出视频的格式。

它接受以下值

yuv420

强制使用 YUV 4:2:0 8 位平面输出

yuv420p10

强制使用 YUV 4:2:0 10 位平面输出

yuv422

强制使用 YUV 4:2:2 8 位平面输出

yuv422p10

强制使用 YUV 4:2:2 10 位平面输出

yuv444

强制使用 YUV 4:4:4 8 位平面输出

yuv444p10

强制使用 YUV 4:4:4 10 位平面输出

rgb

强制使用 RGB 8 位打包输出

gbrp

强制使用 RGB 8 位平面输出

auto

自动选择格式

默认值为 ‘yuv420’。

repeatlast

请参阅 framesync

alpha

设置叠加视频的 alpha 格式,它可以是 straightpremultiplied。默认为 straight

xy 表达式可以包含以下参数。

main_w, W
main_h, H

主输入的宽度和高度。

overlay_w, w
overlay_h, h

叠加输入的宽度和高度。

x
y

xy 的计算值。它们为每个新帧进行评估。

hsub
vsub

输出格式的水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

n

输入帧的数量,从 0 开始

pos

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

t

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

此滤镜还支持 framesync 选项。

请注意,nt 变量仅在逐帧进行评估时才可用,并且当 eval 设置为 ‘init’ 时,将评估为 NAN。

请注意,帧是从每个输入视频按时间戳顺序获取的,因此,如果它们的初始时间戳不同,最好将两个输入都传递给 setpts=PTS-STARTPTS 过滤器,使它们以相同的时间戳 0 开始,如 movie 过滤器的示例所示。

您可以链接更多叠加层,但您应该测试这种方法的效率。

30.184.1 命令

此滤波器支持以下命令

x
y

修改叠加输入的 x 和 y 坐标。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.184.2 示例

  • 在主视频右下角 10 像素处绘制叠加层
    overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

    使用命名选项,上面的示例变为

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
    
  • 使用 ffmpeg 工具和 -filter_complex 选项,在输入的左下角插入一个透明的 PNG 徽标
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用 ffmpeg 工具插入 2 个不同的透明 PNG 徽标(第二个徽标在右下角)
    ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加一个透明的颜色层;WxH 必须指定叠加过滤器的主要输入大小
    [email protected]:size=WxH [over]; [in][over] overlay [out]
    
  • 使用 ffplay 工具并排播放原始视频和经过滤的版本(此处使用 deshake 过滤器)
    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
    

    以上命令与

    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
    
  • 制作一个从屏幕左上部分从左到右滑入的叠加层,从时间 2 开始
    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
    
  • 通过将两个输入视频并排放在一起来合成输出
    ffmpeg -i left.avi -i right.avi -filter_complex "
    nullsrc=size=200x100 [background];
    [0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
    [1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
    [background][left]       overlay=shortest=1       [background+left];
    [background+left][right] overlay=shortest=1:x=100 [left+right]
    "
    
  • 通过对某个部分应用 delogo 过滤器来遮罩视频的 10-20 秒
    ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
    -vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
    masked.avi
    
  • 级联多个叠加层
    nullsrc=s=200x200 [bg];
    testsrc=s=100x100, split=4 [in0][in1][in2][in3];
    [in0] lutrgb=r=0, [bg]   overlay=0:0     [mid0];
    [in1] lutrgb=g=0, [mid0] overlay=100:0   [mid1];
    [in2] lutrgb=b=0, [mid1] overlay=0:100   [mid2];
    [in3] null,       [mid2] overlay=100:100 [out0]
    

30.185 overlay_cuda

将一个视频叠加在另一个视频之上。

这是 overlay 过滤器的 CUDA 变体。它只接受 CUDA 帧。底层输入像素格式必须匹配。

它接受两个输入并产生一个输出。第一个输入是“主要”视频,第二个输入叠加在其上。

它接受以下参数

x
y

设置主视频上叠加视频的 x 和 y 坐标的表达式。

它们可以包含以下参数

main_w, W
main_h, H

主输入的宽度和高度。

overlay_w, w
overlay_h, h

叠加输入的宽度和高度。

x
y

xy 的计算值。它们为每个新帧进行评估。

n

主输入帧的序号索引,从 0 开始。

pos

主输入帧在文件中的字节偏移位置,如果未知则为 NAN。已弃用,请勿使用。

t

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

两个表达式的默认值均为 "0"。

eval

设置何时计算 xy 表达式。

它接受以下值

init

在过滤器初始化期间或处理命令时评估表达式一次。

frame

为每个传入帧评估表达式

默认值为 frame

eof_action

请参阅 framesync

shortest

请参阅 framesync

repeatlast

请参阅 framesync

此滤镜还支持 framesync 选项。

30.186 owdenoise

应用过完备小波去噪器。

该滤镜接受以下选项:

depth

设置深度。

较大的深度值将更多地去除较低频率分量的噪声,但会减慢滤波速度。

必须是 8-16 范围内的整数,默认值为 8

luma_strength, ls

设置亮度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

chroma_strength, cs

设置色度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

30.187 pad

向输入图像添加填充,并将原始输入放置在提供的 xy 坐标处。

它接受以下参数

宽度,w
高度,h

使用添加的填充指定输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定相对于输出图像的左上边界,输入图像在填充区域内的偏移量。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,使输入图像在填充区域中居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中“颜色”部分

color 的默认值为“black”。

eval

指定何时计算 widthheightxy 表达式。

它接受以下值

init

仅在滤镜初始化期间或处理命令时计算一次表达式。

frame

为每个传入的帧评估表达式。

默认值为 ‘init’。

aspect

填充到指定的宽高比,而不是指定的分辨率。

widthheightxy 选项的值是包含以下常量的表达式

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

ow
oh

这些与 out_wout_h 相同。

x
y

xy 表达式指定的 x 和 y 偏移量,如果尚未指定,则为 NAN。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

30.187.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.188 palettegen

为整个视频流生成一个调色板。

它接受以下选项

max_colors

设置要在调色板中量化的最大颜色数。注意:调色板仍然包含 256 种颜色;未使用的调色板条目将是黑色的。

reserve_transparent

创建一个最多 255 种颜色的调色板,并保留最后一个颜色用于透明度。保留透明颜色对于 GIF 优化很有用。如果未设置,则调色板中的最大颜色数为 256。您可能希望为独立图像禁用此选项。默认情况下设置。

transparency_color

设置将用作透明背景的颜色。

stats_mode

设置统计模式。

它接受以下值

full

计算完整帧直方图。

diff

仅计算与上一帧不同的部分的直方图。如果背景是静态的,这可能有助于更重视输入的移动部分。

single

为每一帧计算新的直方图。

默认值为 full

该滤镜还导出帧元数据 lavfi.color_quant_ratio (nb_color_in / nb_color_out),您可以使用它来评估调色板的颜色量化程度。此信息也可在 info 日志级别中查看。

30.188.1 示例

  • 使用 ffmpeg 生成给定视频的代表性调色板。
    ffmpeg -i input.mkv -vf palettegen palette.png
    

30.189 paletteuse

使用调色板对输入视频流进行降采样。

该滤镜接收两个输入:一个视频流和一个调色板。调色板必须是 256 像素的图像。

它接受以下选项

dither

选择抖动模式。可用的算法有

bayer

有序的 8x8 拜耳抖动(确定性的)

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

Bill Atkinson 在 Apple Computer 开发的 Atkinson 抖动(误差扩散)

none

禁用抖动。

默认值为 sierra2_4a

bayer_scale

当选择 bayer 抖动时,此选项定义图案的比例(交叉影线图案的可见程度)。较低的值表示更可见的图案,减少条带效应,而较高的值表示较少的可见图案,但会增加条带效应。

该选项必须是 [0,5] 范围内的整数值。默认值为 2

diff_mode

如果设置,则定义要处理的区域

rectangle

仅重新处理变化的矩形。这类似于 GIF 的裁剪/偏移压缩机制。如果只有图像的一部分在变化,此选项对于加速很有用,并且具有以下用例,例如将误差扩散 dither 的范围限制在包围移动场景的矩形内(如果场景变化不大,它会导致更多确定性的输出,从而减少移动噪声和更好的 GIF 压缩)。

默认值为 none

new

为每个输出帧获取新的调色板。

alpha_threshold

设置透明度的 alpha 阈值。高于此阈值的 alpha 值将被视为完全不透明,而低于此阈值的 alpha 值将被视为完全透明。

该选项必须是 [0,255] 范围内的整数值。默认值为 128

30.189.1 示例

  • 使用调色板(例如使用 palettegen 生成)使用 ffmpeg 编码 GIF。
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

30.190 perspective

校正未垂直于屏幕录制的视频的透视。

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

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

将隔行扫描视频延迟一个场时间,以便更改场顺序。

其预期用途是修复以与电影到视频传输相反的场顺序捕获的 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.191.1 命令

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

30.192 photosensitivity

减少视频中各种闪烁,以帮助癫痫患者。

它接受以下选项

帧数,f

设置过滤时使用的帧数。默认值为 30。

threshold, t

设置检测阈值因子。默认值为 1。较低的值更严格。

skip

设置采样帧时跳过的像素数。默认值为 1。允许范围为 1 到 1024。

bypass

保持帧不变。默认情况下禁用。

30.193 pixdesctest

像素格式描述符测试过滤器,主要用于内部测试。输出视频应与输入视频相等。

例如

format=monow, pixdesctest

可用于测试单色像素格式描述符的定义。

30.194 pixelize

将像素化应用于视频流。

该滤镜接受以下选项:

宽度,w
高度,h

设置用于像素化的块维度。默认值为 16

mode, m

设置使用的像素化模式。

可能的值为

avg
min
max

默认值为 avg

平面,p

设置要过滤的平面。默认值是过滤所有平面。

30.194.1 命令

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

30.195 pixscope

显示颜色通道的采样值。主要用于检查颜色和电平。支持的最低分辨率为 640x480。

过滤器接受以下选项

x

设置示波器 X 位置,X 轴上的相对偏移量。

y

设置示波器 Y 位置,Y 轴上的相对偏移量。

w

设置示波器宽度。

h

设置示波器高度。

o

设置窗口不透明度。此窗口还保存有关像素区域的统计信息。

wx

设置窗口 X 位置,X 轴上的相对偏移量。

wy

设置窗口 Y 位置,Y 轴上的相对偏移量。

30.195.1 命令

此滤镜支持与选项相同的 命令

30.196 pp

使用 libpostproc 启用指定的后处理子过滤器链。此库应通过 GPL 构建 (--enable-gpl) 自动选择。子过滤器必须用“/”分隔,并且可以通过在前面添加“ - ”来禁用。每个子过滤器和一些选项都有一个短名称和一个长名称,可以互换使用,即 dr/dering 相同。

过滤器接受以下选项

子过滤器

设置后处理子过滤器字符串。

所有子过滤器共享用于确定其范围的通用选项

a/autoq

遵循此子过滤器的质量命令。

c/chrom

也进行色度过滤(默认)。

y/nochrom

仅进行亮度过滤(无色度)。

n/noluma

仅进行色度过滤(无亮度)。

这些选项可以附加在子过滤器名称之后,用“|”分隔。

可用的子过滤器有

hb/hdeblock[|difference[|flatness]]

水平去块过滤器

difference

差值因子,值越高表示去块越多(默认值:32)。

flatness

平坦度阈值,值越低表示去块越多(默认值:39)。

vb/vdeblock[|difference[|flatness]]

垂直去块过滤器

difference

差值因子,值越高表示去块越多(默认值:32)。

flatness

平坦度阈值,值越低表示去块越多(默认值:39)。

ha/hadeblock[|difference[|flatness]]

精确水平去块过滤器

difference

差值因子,值越高表示去块越多(默认值:32)。

flatness

平坦度阈值,值越低表示去块越多(默认值:39)。

va/vadeblock[|difference[|flatness]]

精确垂直去块过滤器

difference

差值因子,值越高表示去块越多(默认值:32)。

flatness

平坦度阈值,值越低表示去块越多(默认值:39)。

水平和垂直去块过滤器共享差值和平坦度值,因此您无法设置不同的水平和垂直阈值。

h1/x1hdeblock

实验性水平去块过滤器

v1/x1vdeblock

实验性垂直去块过滤器

dr/dering

去振铃过滤器

tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], 时间降噪器
threshold1

值越大 -> 过滤越强

threshold2

值越大 -> 过滤越强

threshold3

值越大 -> 过滤越强

al/autolevels[:f/fullyrange], 自动亮度/对比度校正
f/fullyrange

将亮度拉伸到 0-255

lb/linblenddeint

线性混合去隔行过滤器,通过使用 (1 2 1) 过滤器过滤所有行来对给定块进行去隔行。

li/linipoldeint

线性插值去隔行过滤器,通过对每隔一行进行线性插值来对给定块进行去隔行。

ci/cubicipoldeint

三次插值去隔行过滤器,通过对每隔一行进行三次插值来对给定块进行去隔行。

md/mediandeint

中值去隔行过滤器,通过对每隔一行应用中值过滤器来对给定块进行去隔行。

fd/ffmpegdeint

FFmpeg 去隔行过滤器,通过使用 (-1 4 2 4 -1) 过滤器过滤每隔一行来对给定块进行去隔行。

l5/lowpass5

垂直应用 FIR 低通去隔行过滤器,通过使用 (-1 2 6 2 -1) 过滤器过滤所有行来对给定块进行去隔行。

fq/forceQuant[|quantizer]

使用您指定的常量量化器覆盖来自输入的量化器表。

量化器

要使用的量化器

de/default

默认 pp 过滤器组合 (hb|a,vb|a,dr|a)

fa/fast

快速 pp 过滤器组合 (h1|a,v1|a,dr|a)

ac

高质量 pp 过滤器组合 (ha|a|128|7,va|a,dr|a)

30.196.1 示例

  • 应用水平和垂直去块、去振铃和自动亮度/对比度
    pp=hb/vb/dr/al
    
  • 应用不带亮度/对比度校正的默认过滤器
    pp=de/-al
    
  • 应用默认过滤器和时间降噪器
    pp=default/tmpnoise|1|2|3
    
  • 仅对亮度应用去块,并根据可用的 CPU 时间自动切换垂直去块的开关状态
    pp=hb|y/vb|a
    

30.197 pp7

应用后处理过滤器 7。它是 spp 过滤器的变体,类似于 spp = 6,采用 7 点 DCT,其中 IDCT 后仅使用中心采样。

该滤镜接受以下选项:

量化参数 (qp)

强制使用常量量化参数。它接受 0 到 63 范围内的整数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式为

hard

设置硬阈值。

soft

设置软阈值(去振铃效果更好,但可能会更模糊)。

medium

设置中等阈值(效果好,默认)。

30.198 premultiply

使用第二个流的第一个平面作为 alpha 将 alpha 预乘效果应用于输入视频流。

两个流必须具有相同的尺寸和相同的像素格式。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

30.199 prewitt

将 prewitt 算子应用于输入视频流。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.199.1 命令

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

30.200 pseudocolor

使用伪颜色更改视频中的帧颜色。

此滤波器接受以下选项

c0

设置像素第一分量表达式

c1

设置像素第二分量表达式

c2

设置像素第三分量表达式

c3

设置像素第四分量表达式,对应于 alpha 分量

索引,i

设置要用作更改颜色基础的分量

预设,p

选择内置的 LUT 之一。默认设置为 none。

可用的 LUT

magma
inferno
plasma
viridis
turbo
cividis
range1
range2
shadows
highlights
solar
nominal
preferred
total
spectral
cool
heat’(加热)
fiery
blues
green
helix
不透明度

设置输出颜色的不透明度。允许范围为 0 到 1。默认值设置为 1。

每个表达式选项指定用于计算相应像素分量值的查找表的表达式。

表达式可以包含以下常量和函数

w
h

输入宽度和高度。

val

像素分量的输入值。

ymin, umin, vmin, amin

允许的最小分量值。

ymax, umax, vmax, amax

允许的最大分量值。

所有表达式默认都为“val”。

30.200.1 命令

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

30.200.2 示例

  • 将过高的亮度值更改为渐变
    pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
    

30.201 psnr

获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。

此滤镜接收两个输入视频,第一个输入被视为“主”源,并保持不变地传递到输出。第二个输入用作计算 PSNR 的“参考”视频。

为了使此滤镜正常工作,两个视频输入的 resolution 和像素格式必须相同。此外,它假定两个输入具有相同数量的帧,这些帧会逐个进行比较。

获得的平均 PSNR 通过日志系统打印出来。

滤镜存储每个帧的累积 MSE(均方误差),并在处理结束时,将所有帧的 MSE 平均,并应用以下公式来获得 PSNR

PSNR = 10*log10(MAX^2/MSE)

其中 MAX 是图像每个分量的最大值的平均值。

以下是接受的参数的说明。

stats_file, f

如果指定,滤镜将使用指定的文件来保存每个单独帧的 PSNR。当文件名等于“-”时,数据将发送到标准输出。

stats_version

指定要使用的统计信息文件格式的版本。每个格式的详细信息如下所述。默认值为 1。

stats_add_max

确定是否将最大值输出到统计日志。默认值为 0。需要 stats_version >= 2。如果设置此选项且 stats_version < 2,则滤镜将返回错误。

此滤镜还支持 framesync 选项。

如果选择了 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。

如果指定的 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.201.1 示例

  • 例如
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] psnr="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件将与参考文件 ref_movie.mpg 进行比较。每个单独帧的 PSNR 存储在 stats.log 中。

  • 另一个具有不同容器的示例
    ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
    

30.202 pullup

下移反转(逆向电视电影)滤镜,能够处理混合的硬电视电影、24000/1001 fps 逐行和 30000/1001 fps 逐行内容。

上拉滤镜旨在利用未来上下文做出决策。此滤镜是无状态的,因为它不锁定要遵循的模式,而是向前查看以下字段,以便识别匹配项并重建逐行帧。

要生成具有均匀帧率的内容,请在上拉后插入 fps 滤镜,如果输入帧率为 29.97fps,则使用 fps=24000/1001,对于 30fps 则使用 fps=24,对于(罕见的)电视电影 25fps 输入,则使用 `fps=24`。

该滤镜接受以下选项:

jl
jr
jt
jb

这些选项分别设置要忽略的图像左侧、右侧、顶部和底部的“垃圾”量。左侧和右侧的单位为 8 个像素,而顶部和底部的单位为 2 行。默认情况下,每侧为 8 个像素。

sb

设置严格中断。将此选项设置为 1 将减少滤镜生成偶尔不匹配帧的机会,但也可能会导致在高运动序列期间丢弃过多的帧。相反,将其设置为 -1 将使滤镜更容易匹配字段。这可能有助于处理字段之间存在轻微模糊的视频,但也可能导致输出中出现隔行扫描帧。默认值为 0

mp

设置要使用的度量平面。它接受以下值

l

使用亮度平面。

u

使用色度蓝色平面。

v

使用色度红色平面。

可以设置此选项以使用色度平面而不是默认的亮度平面进行滤镜的计算。这可以提高非常干净的源材料的准确性,但更可能降低准确性,尤其是在存在色度噪声(彩虹效应)或任何灰度视频时。将 mp 设置为色度平面的主要目的是减少 CPU 负载,并使上拉可以在慢速计算机上实时使用。

为了获得最佳结果(输出文件中没有重复的帧),有必要更改输出帧率。例如,要逆向电视电影 NTSC 输入

ffmpeg -i input -vf pullup -r 24000/1001 ...

30.203 qp

更改视频量化参数 (QP)。

此滤镜接受以下选项

量化参数 (qp)

设置量化参数的表达式。

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

known

如果索引不是 129,则为 1,否则为 0。

量化参数 (qp)

从 -129 到 128 的顺序索引。

30.203.1 示例

  • 一些类似以下的等式
    qp=2+2*sin(PI*qp)
    

30.204 qrencode

使用 libqrencode 库生成 QR 码(请参阅 https://fukuchi.org/works/qrencode/),并将其叠加在当前帧的顶部。

要启用此滤镜的编译,你需要使用 --enable-libqrencode 配置 FFmpeg。

QR 码是根据提供的文本或文本模式生成的。根据指定的选项,相应的 QR 码会被缩放并叠加到视频输出中。

如果未指定任何文本,则不叠加 QR 码。

此滤波器接受以下选项

qrcode_width, q
padded_qrcode_width, Q

指定渲染的 QR 码的宽度(带和不带填充)的表达式。qrcode_width 表达式可以引用由 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参阅 qrencode 表达式 部分。

x
y

指定用于定位带有填充的 QR 码左上角的表达式。x 表达式可以引用由 y 表达式设置的值,反之亦然。

默认情况下,xy 设置为 0,这意味着 QR 码放置在输入的左上角。

这些表达式会针对每个新帧进行评估。

有关详细信息,请参阅 qrencode 表达式 部分。

case_sensitive, cs

指示 libqrencode 使用区分大小写的编码。默认情况下启用此功能。可以禁用此功能以减小 QR 编码大小。

level, l

指定 QR 编码纠错级别。纠错级别越高,编码大小将越大,但代码对损坏的鲁棒性将更高。较低的级别是 L

它接受以下值

L
M
Q
H
expansion

选择如何展开输入文本。可以是 nonenormal(默认值)。有关详细信息,请参阅下面的 qrencode 文本展开 部分。

text
textfile

定义要渲染的文本。如果未指定两者,则不编码 QR(仅为空彩色帧)。

如果启用了展开,则使用 qrencode 展开机制将文本视为文本模板。有关详细信息,请参阅下面的 qrencode 文本展开 部分。

background_color, bc
foreground_color, fc

设置二维码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

关于颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分

30.204.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.204.2 qrencode 文本扩展

如果 expansion 设置为 none,则文本按原样打印。

如果 expansion 设置为 normal(默认值),则使用以下扩展机制。

反斜杠字符 ‘\’ 后跟任何字符,始终会扩展为第二个字符。

形如 %{...} 的序列会被展开。大括号之间的文本是一个函数名称,可能后跟用 ‘:’ 分隔的参数。如果参数包含特殊字符或分隔符(‘:’ 或 ‘}’),则应进行转义。

请注意,它们可能还必须在过滤器参数字符串的 text 选项的值中以及在滤镜图描述的过滤器参数中进行转义,并且可能还需要在 shell 中进行转义,这最多有四层转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用:

n, frame_num

返回帧号

pts

返回当前帧的呈现时间戳。

它最多可以接受两个参数。

第一个参数是时间戳的格式;默认为 flt,表示以微秒精度的十进制数表示的秒数;hms 表示格式化的 [-]HH:MM:SS.mmm 时间戳,精确到毫秒。gmtime 表示帧的时间戳,格式为 UTC 时间;localtime 表示帧的时间戳,格式为本地时区时间。如果格式设置为 hms24hh,则时间格式为 24 小时制 (00-23)。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 localtimegmtime,则可以提供第三个参数:一个 strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

表达式, e

计算表达式的值并以 double 类型输出。

它必须接受一个参数,指定要计算的表达式,并接受 qrencode_expressions 中定义的常量和函数。

expr_formatted, ef

计算表达式的值并以格式化的字符串输出。

第一个参数是要计算的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为 ‘x’、‘X’、‘d’ 和 ‘u’。它们的处理方式与 printf 函数中完全相同。第三个参数是可选的,用于设置输出所占用的位数。它可用于从左侧添加零填充。

gmtime

过滤器运行时的 UTC 时间。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串扩展为支持变量 %[1-6]N,该变量打印秒的小数部分,并可选择指定位数。

localtime

过滤器运行时的本地时区时间。它可以接受一个参数:一个 strftime C 函数格式字符串。格式字符串扩展为支持变量 %[1-6]N,该变量打印秒的小数部分,并可选择指定位数。

metadata

帧元数据。接受一个或两个参数。

第一个参数是必需的,用于指定元数据键。

第二个参数是可选的,用于指定默认值,当找不到元数据键或元数据键为空时使用。

可以通过检查运行 ffprobe -show_frames 打印的每个帧部分中以 TAG 开头的条目来识别可用的元数据。

在导致 qrencode 滤镜的滤镜中生成的字符串元数据也可用。

rand(min, max)

返回包含在 minmax 之间的随机数

30.204.3 示例

  • 生成一个默认大小的二维码,编码指定的文本,覆盖在输入视频的左上角,默认大小
    qrencode=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉色作为颜色
    qrencode=text=www.ffmpeg.org:[email protected]:fc=blue
    
  • 将二维码放置在输入视频的右下角
    qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
    
  • 生成一个宽度为 200 像素并带有填充的二维码,使填充后的宽度为二维码宽度的 4/3
    qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成一个填充宽度为 200 像素并带有填充的二维码,使二维码宽度为填充后宽度的 3/4
    qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 使二维码成为输入视频宽度的一部分
    qrencode=text=www.ffmpeg.org:q=W/5
    
  • 生成一个编码帧号的二维码
    qrencode=text=%{n}
    
  • 生成一个编码 GMT 时间戳的二维码
    qrencode=text=%{gmtime}
    
  • 生成一个以浮点数表示的时间戳编码的二维码
    qrencode=text=%{pts}
    

30.205 quirc

使用 libquirc 库(参见 https://github.com/dlbeer/quirc/)识别并解码二维码,并将识别到的二维码位置和有效载荷作为元数据打印出来。

要启用此滤镜的编译,你需要使用 --enable-libquirc 配置 FFmpeg。

对于输入视频中找到的每个二维码,都会添加一些带有前缀 lavfi.quirc.N 的元数据条目,其中 N 是与二维码关联的索引,从 0 开始。

以下是每个元数据值的描述

lavfi.quirc.count

找到的二维码数量,如果没有找到,则不设置

lavfi.quirc.N.corner.M.x
lavfi.quirc.N.coreer.M.y

包含二维码的正方形的四个角的 x/y 位置,其中 M 是角的索引,从 0 开始

lavfi.quirc.N.payload

二维码的有效载荷

30.206 random

将帧从内部帧缓存区以随机顺序刷新到外部。不丢弃任何帧。受 frei0r nervous 滤镜的启发。

frames

设置内部缓存的帧数大小,范围从 2512。默认为 30

seed

为随机数生成器设置种子,必须是介于 0UINT32_MAX 之间的整数。如果未指定,或者显式设置为小于 0,则滤镜将尽最大努力尝试使用良好的随机种子。

30.207 readeia608

从视频帧的顶部读取隐藏字幕 (EIA-608) 信息。

此滤镜为 lavfi.readeia608.X.cclavfi.readeia608.X.line 添加帧元数据,其中 X 是具有 EIA-608 数据的已识别行的编号(从 0 开始)。以下是每个元数据值的描述

lavfi.readeia608.X.cc

以 EIA-608 数据形式存储的两个字节(以十六进制打印)。

lavfi.readeia608.X.line

识别和读取 EIA-608 数据的行的编号。

此滤波器接受以下选项

scan_min

设置开始扫描 EIA-608 数据的行。默认为 0

scan_max

设置结束扫描 EIA-608 数据的行。默认为 29

spw

设置为同步代码检测保留的宽度比例。默认为 0.27。允许的范围是 [0.1 - 0.7]

chp

启用奇偶校验位的检查。如果发生奇偶校验错误,则滤镜将为该字符输出 0x00。默认为 false。

lp

在进一步处理之前对行进行低通滤波。默认启用。

30.207.1 命令

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

30.207.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.208 readvitc

从视频帧的顶部读取垂直间隔时码 (VITC) 信息。

如果检测到有效的时间码,则滤镜会添加帧元数据键 lavfi.readvitc.tc_str,其中包含时间码值。根据是否找到时间码数据,进一步的元数据键 lavfi.readvitc.found 设置为 0/1。

此滤波器接受以下选项

scan_max

设置扫描 VITC 数据的最大行数。如果该值设置为 -1,则扫描整个视频帧。默认为 45

thr_b

设置黑色的亮度阈值。接受范围为 [0.0,1.0] 的浮点数,默认值为 0.2。该值必须小于或等于 thr_w

thr_w

设置白色的亮度阈值。接受范围为 [0.0,1.0] 的浮点数,默认值为 0.6。该值必须大于或等于 thr_b

30.208.1 示例

  • 检测并将 VITC 数据绘制到视频帧上;如果未检测到有效的 VITC,则绘制 --:--:--:-- 作为占位符
    ffmpeg -i input.avi -filter:v 'readvitc,drawtext=fontfile=FreeMono.ttf:text=%{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--}:x=(w-tw)/2:y=400-ascent'
    

30.209 remap

使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。

位置 (X, Y) 处的目的像素将从源 (x, y) 位置中选取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则将对目的像素使用零值。

Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap 和 Ymap 输入视频流为 16 位深度,单通道。

格式

指定此滤镜的输出像素格式。可以是 colorgray。默认为 color

fill

指定未映射像素的颜色。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分。默认颜色为 black

30.210 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.211 removelogo

使用图像文件来确定哪些像素构成徽标,从而抑制电视台徽标。它的工作原理是用相邻像素填充构成徽标的像素。

该滤镜接受以下选项:

文件名,f

设置滤镜位图文件,该文件可以是 libavformat 支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度相匹配。

提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果您使用白色 (255) 作为徽标,黑色 (0) 作为其余部分,您将是安全的。对于制作滤镜位图,建议截取一个带有可见徽标的黑色帧,然后使用阈值滤镜,然后使用腐蚀滤镜一次或两次。

如果需要,可以手动修复小的斑点。请记住,如果徽标像素未被覆盖,滤镜质量将大大降低。将过多的像素标记为徽标的一部分不会造成太大损害,但它会增加覆盖图像所需的模糊量,并破坏比必要的更多信息,并且额外的像素会减慢大型徽标的处理速度。

30.212 repeatfields

此滤镜使用 Video ES 标头中的 repeat_field 标志,并根据其值进行硬重复场。

30.213 reverse

反转视频剪辑。

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

30.213.1 示例

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

30.214 rgbashift

水平和/或垂直移动 R/G/B/A 像素。

该滤镜接受以下选项:

rh

设置红色水平移动的量。

rv

设置红色垂直移动的量。

gh

设置绿色水平移动的量。

gv

设置绿色垂直移动的量。

bh

设置蓝色水平移动的量。

bv

设置蓝色垂直移动的量。

ah

设置 alpha 水平移动的量。

av

设置 alpha 垂直移动的量。

edge

设置边缘模式,可以是 smear(默认)或 warp

30.214.1 命令

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

30.215 roberts

将罗伯茨交叉算子应用于输入视频流。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.215.1 命令

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

30.216 rotate

将视频按任意角度(以弧度表示)旋转。

该滤镜接受以下选项:

以下是可选参数的描述。

角度,a

设置一个表达式,用于表示输入视频顺时针旋转的角度,以弧度数表示。负值将导致逆时针旋转。默认设置为“0”。

此表达式针对每一帧进行评估。

输出宽度,ow

设置输出宽度表达式,默认值为“iw”。此表达式在配置期间仅评估一次。

输出高度,oh

设置输出高度表达式,默认值为“ih”。此表达式在配置期间仅评估一次。

双线性

如果设置为 1,则启用双线性插值,值为 0 则禁用它。默认值为 1。

填充颜色,c

设置用于填充未被旋转图像覆盖的输出区域的颜色。有关此选项的通用语法,请查看 (ffmpeg-utils)手册中的“颜色”部分。如果选择了特殊值“none”,则不打印背景(例如,如果从不显示背景,则非常有用)。

默认值为“black”。

角度和输出大小的表达式可以包含以下常量和函数

n

输入帧的顺序号,从 0 开始。在过滤第一帧之前始终为 NAN。

t

输入帧的时间(以秒为单位),在配置滤镜时设置为 0。在过滤第一帧之前始终为 NAN。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

in_w, iw
in_h, ih

输入视频的宽度和高度

输出宽度,ow
输出高度,oh

输出宽度和高度,即 宽度高度 表达式指定的填充区域的大小

rotw(a)
roth(a)

完全包含旋转 a 弧度的输入视频所需的最小宽度/高度。

这些仅在计算 out_wout_h 表达式时可用。

30.216.1 示例

  • 将输入顺时针旋转 PI/6 弧度
    rotate=PI/6
    
  • 将输入逆时针旋转 PI/6 弧度
    rotate=-PI/6
    
  • 将输入顺时针旋转 45 度
    rotate=45*PI/180
    
  • 应用周期为 T 的恒定旋转,从 PI/3 的角度开始
    rotate=PI/3+2*PI*t/T
    
  • 使输入视频旋转以 T 秒为周期振荡,振幅为 A 弧度
    rotate=A*sin(2*PI/T*t)
    
  • 旋转视频,选择输出大小,以便整个旋转的输入视频始终完全包含在输出中
    rotate='2*PI*t:ow=hypot(iw,ih):oh=ow'
    
  • 旋转视频,减小输出大小,以便永远不会显示背景
    rotate=2*PI*t:ow='min(iw,ih)/sqrt(2)':oh=ow:c=none
    

30.216.2 命令

该滤镜支持以下命令

a, 角度

设置角度表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.217 sab

应用形状自适应模糊。

该滤镜接受以下选项:

luma_radius, lr

设置亮度模糊滤镜强度,值必须在 0.1-4.0 范围内,默认值为 1.0。值越大,图像越模糊,处理速度越慢。

亮度预滤镜半径,lpfr

设置亮度预滤镜半径,值必须在 0.1-2.0 范围内,默认值为 1.0。

luma_strength, ls

设置像素之间仍然被考虑为亮度最大差异的值,值必须在 0.1-100.0 范围内,默认值为 1.0。

chroma_radius, cr

设置色度模糊滤镜强度,值必须在 -0.9-4.0 范围内。值越大,图像越模糊,处理速度越慢。

色度预滤镜半径,cpfr

设置色度预滤镜半径,值必须在 -0.9-2.0 范围内。

chroma_strength, cs

设置像素之间仍然被考虑为色度最大差异的值,值必须在 -0.9-100.0 范围内。

每个色度选项值,如果未明确指定,则设置为对应的亮度选项值。

30.218 scale

使用 libswscale 库缩放(调整大小)输入视频。

缩放滤镜通过更改输出采样宽高比,强制输出显示宽高比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,则缩放滤镜会将输入转换为请求的格式。

30.218.1 选项

该滤镜接受以下选项,以及 libswscale 缩放器支持的任何选项,以及任何 帧同步 选项。

有关缩放器选项的完整列表,请参阅 (ffmpeg-scaler) ffmpeg-scaler 手册

宽度,w
高度,h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果 widthw 值为 0,则输出使用输入宽度。如果 heighth 值为 0,则输出使用输入高度。

如果只有一个值为 -n,其中 n >= 1,则缩放滤镜将使用一个值来保持输入图像的宽高比,该值从另一个指定的维度计算得出。之后,它将确保计算出的维度可以被 n 整除,并在必要时调整该值。

如果两个值均为 -n,其中 n >= 1,则其行为将与两个值都设置为 0 的情况相同,如前所述。

有关维度表达式中使用的接受常量列表,请参见下文。

eval

指定何时评估 widthheight 表达式。它接受以下值

init

仅在滤镜初始化期间或处理命令时计算一次表达式。

frame

为每个传入的帧评估表达式。

默认值为 ‘init’。

隔行

设置隔行扫描模式。它接受以下值

1

强制进行隔行感知缩放。

0

不应用隔行缩放。

-1

根据源帧是否标记为隔行扫描,选择隔行感知缩放。

默认值为 ‘0’。

flags

设置 libswscale 缩放标志。有关值的完整列表,请参阅 (ffmpeg-scaler) ffmpeg-scaler 手册。如果未明确指定,则滤镜将应用默认标志。

param0, param1

为需要它们的缩放算法设置 libswscale 输入参数。有关完整文档,请参阅 (ffmpeg-scaler) ffmpeg-scaler 手册。如果未明确指定,则滤镜将应用空参数。

意图

设置在不同色彩空间之间转换时要使用的 ICC 渲染意图。它接受以下值

perceptual

使用感知引导的色调和色域映射曲线。所用映射的确切细节可能随时更改,不应将其视为稳定。建议在典型观看设置中最终观看图像/视频内容时使用此意图。

相对比色

使用尝试找到色度上最不相似的色域内颜色的比色裁剪曲线,静态裁剪色域外的颜色。此意图执行白点适应和黑点适应。这是默认值。只要忠实地再现颜色至关重要,即使以裁剪为代价,也建议使用此意图。

绝对比色

硬裁剪色域外的颜色,而不尝试进行白点或黑点再现。此意图将在输出显示器上 1:1 再现色域内的颜色,就像它们在参考显示器上显示一样,假设输出显示器已正确校准。

saturation

执行饱和度映射 - 即以非线性方式将输入颜色体积直接拉伸到输出颜色体积上,从而尽可能保持原始信号外观。建议用于信号内容评估,因为它不会导致任何裁剪。它大致类似于不执行任何颜色映射,尽管它仍然会考虑主显示器的原色和编码 TRC 的任何差异。

size, s

设置视频大小。有关此选项的语法,请查看 (ffmpeg-utils) ffmpeg-utils 手册中的“视频大小”部分

in_color_matrix
out_color_matrix

设置输入/输出 YCbCr 色彩空间类型。

这允许覆盖自动检测到的值,并允许强制使用于输出和编码器的特定值。

如果未指定,则色彩空间类型取决于像素格式。

可能的值

auto

自动选择。

bt709

符合国际电信联盟(ITU)建议 BT.709 的格式。

fcc

设置符合美国联邦通信委员会(FCC)联邦法规(CFR)第 47 篇(2003)73.682(a)的色彩空间。

bt601
bt470
smpte170m

设置符合

  • ITU 无线电通信部门(ITU-R)建议 BT.601 的色彩空间
  • ITU-R Rec. BT.470-6 (1998) 系统 B、B1 和 G
  • 美国电影电视工程师协会(SMPTE)ST 170:2004
smpte240m

设置符合 SMPTE ST 240:1999 的色彩空间。

bt2020

设置符合 ITU-R BT.2020 非恒定亮度系统的色彩空间。

in_range
out_range

设置输入/输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制使用于输出和编码器的特定值。如果未指定,则范围取决于像素格式。可能的值

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(在 8 位亮度的情况下为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(在 8 位亮度的情况下为 16-235)。

in_chroma_loc
out_chroma_loc

设置输入/输出色度采样位置。如果未指定,则默认使用中心位置色度。可能的值

auto, unknown
left
center
topleft
top
bottomleft
bottom
in_primaries
out_primaries

设置输入/输出 RGB 原色。

这允许覆盖自动检测到的值,并允许强制使用于输出和编码器的特定值。可能的值

auto

自动选择。这是默认值。

bt709
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
ebu3213
in_transfer
out_transfer

设置输入/输出传输响应曲线(TRC)。

这允许覆盖自动检测到的值,并允许强制使用于输出和编码器的特定值。可能的值

auto

自动选择。这是默认值。

bt709
bt470m
gamma22
bt470bg
gamma28
smpte170m
smpte240m
linear
iec61966-2-1
srgb
iec61966-2-4
xvycc
bt1361e
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
force_original_aspect_ratio

如果需要保持原始宽高比,则启用减小或增加输出视频宽度或高度。可能的值

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备的最大允许分辨率时,可以使用此选项将输出视频限制为该分辨率,同时保持宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(将其设置为 decrease)并在命令行中指定 1280x720 会使输出为 1280x533。

请注意,这与为 wh 指定 -1 是不同的,您仍然需要指定输出分辨率才能使此选项生效。

force_divisible_by

force_original_aspect_ratio 一起使用时,确保输出尺寸的宽度和高度都可以被给定的整数整除。这类似于在 wh 选项中使用 -n

此选项会遵循 force_original_aspect_ratio 设置的值,相应地增加或减少分辨率。视频的宽高比可能会略有修改。

如果您需要让视频在 force_original_aspect_ratio 的基础上,适应或超出定义的宽高比,同时还要满足编码器对宽度或高度可除性的限制,此选项会非常方便。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放)的宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

hsub
vsub

水平和垂直输入色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

ohsub
ovsub

水平和垂直输出色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

n

输入帧的(顺序)编号,从 0 开始。仅在 eval=frame 时可用。

t

输入帧的表示时间戳,以秒为单位表示。仅在 eval=frame 时可用。

pos

帧在输入流中的位置(字节偏移),如果此信息不可用和/或无意义(例如,在合成视频的情况下),则为 NaN。仅在 eval=frame 时可用。已弃用,请勿使用。

ref_w, rw
ref_h, rh
ref_a
ref_dar, rdar
ref_n
ref_t
ref_pos

与上述等效,但用于第二个参考输入。如果存在这些变量中的任何一个,则此滤镜接受两个输入。

30.218.2 示例

  • 将输入视频缩放至 200x100 的大小
    scale=w=200:h=100
    

    这等效于

    scale=200:100
    

    scale=200x100
    
  • 为输出大小指定大小缩写
    scale=qcif
    

    也可以写成

    scale=size=qcif
    
  • 将输入缩放至 2 倍
    scale=w=2*iw:h=2*ih
    
  • 以上与以下相同
    scale=2*in_w:2*in_h
    
  • 将输入缩放至 2 倍并强制使用隔行扫描缩放
    scale=2*iw:2*ih:interl=1
    
  • 将输入缩放至一半大小
    scale=w=iw/2:h=ih/2
    
  • 增加宽度,并将高度设置为相同大小
    scale=3/2*iw:ow
    
  • 追求希腊和谐
    scale=iw:1/PHI*iw
    scale=ih*PHI:ih
    
  • 增加高度,并将宽度设置为高度的 3/2
    scale=w=3/2*oh:h=3/5*ih
    
  • 增加大小,使大小为色度子采样值的倍数
    scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
    
  • 将宽度增加到最大 500 像素,保持与输入相同的宽高比
    scale=w='min(500\, iw*3/2):h=-1'
    
  • 通过组合缩放和 setsar 使像素变为正方形
    scale='trunc(ih*dar):ih',setsar=1/1
    
  • 通过组合缩放和 setsar 使像素变为正方形,确保生成的分辨率是偶数(某些编解码器需要)
    scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
    
  • 在叠加之前,缩放字幕流 (sub) 的大小以匹配主视频 (main) 的大小。("scale2ref")
    '[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
    
  • 将徽标缩放到视频高度的 1/10,同时保持其显示宽高比。
    [logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
    

30.218.3 命令

此滤波器支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

30.219 scale_cuda

使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的方式与 scale 滤镜相同。

该滤镜接受以下选项:

w
h

设置输出视频尺寸表达式。默认值为输入尺寸。

允许与 scale 滤镜相同的表达式。

interp_algo

设置用于缩放的算法

nearest

最近邻

如果输入参数与所需的输出匹配,则默认使用。

双线性

双线性

双三次

双三次

这是默认值。

lanczos

Lanczos

格式

控制输出像素格式。默认情况下,或如果没有指定,则使用输入像素格式。

此滤镜不支持在 YUV 和 RGB 像素格式之间进行转换。

passthrough

如果设置为 0,则会处理每一帧,即使不需要转换。此模式对于将滤镜用作下游帧消费者的缓冲区,从而耗尽有限的解码器帧池非常有用。

如果设置为 1,则如果帧与所需的输出参数匹配,则会按原样传递帧。这是默认行为。

param

特定于算法的参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

与相同的 scale 滤镜选项的工作方式相同。

30.219.1 示例

  • 将输入缩放到 720p,保持宽高比,并确保输出为 yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻算法放大到 4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理滤镜和编码链非常有用,否则会耗尽解码器帧池。
    scale_cuda=passthrough=0
    

30.220 scale_npp

使用 NVIDIA Performance Primitives (libnpp) 对 CUDA 视频帧执行缩放和/或像素格式转换。设置输出宽度和高度的方式与 scale 滤镜相同。

接受以下附加选项

格式

输出 CUDA 帧的像素格式。如果设置为字符串 "same" (默认值),则将保留输入格式。请注意,硬件帧尚不支持自动格式协商和转换

interp_algo

用于调整大小的插值算法。以下之一

nn

最近邻。

linear
cubic
cubic2p_bspline

2 参数三次 (B=1, C=0)

cubic2p_catmullrom

2 参数三次 (B=0, C=1/2)

cubic2p_b05c03

2 参数三次 (B=1/2, C=3/10)

super

超采样

lanczos
force_original_aspect_ratio

如果需要保持原始宽高比,则启用减小或增加输出视频宽度或高度。可能的值

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备的最大允许分辨率时,可以使用此选项将输出视频限制为该分辨率,同时保持宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(将其设置为 decrease)并在命令行中指定 1280x720 会使输出为 1280x533。

请注意,这与为 wh 指定 -1 是不同的,您仍然需要指定输出分辨率才能使此选项生效。

force_divisible_by

force_original_aspect_ratio 一起使用时,确保输出尺寸的宽度和高度都可以被给定的整数整除。这类似于在 wh 选项中使用 -n

此选项会遵循 force_original_aspect_ratio 设置的值,相应地增加或减少分辨率。视频的宽高比可能会略有修改。

如果您需要让视频在 force_original_aspect_ratio 的基础上,适应或超出定义的宽高比,同时还要满足编码器对宽度或高度可除性的限制,此选项会非常方便。

eval

指定何时评估 widthheight 表达式。它接受以下值

init

仅在滤镜初始化期间或处理命令时计算一次表达式。

frame

为每个传入的帧评估表达式。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放)的宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

n

输入帧的(顺序)编号,从 0 开始。仅在 eval=frame 时可用。

t

输入帧的表示时间戳,以秒为单位表示。仅在 eval=frame 时可用。

pos

帧在输入流中的位置(字节偏移),如果此信息不可用和/或无意义(例如,在合成视频的情况下),则为 NaN。仅在 eval=frame 时可用。已弃用,请勿使用。

30.221 scale2ref_npp

使用 NVIDIA Performance Primitives (libnpp) 基于参考视频缩放(调整大小)输入视频。

有关可用选项,请参阅 scale_npp 滤镜,scale2ref_npp 支持相同的选项,但使用参考视频而不是主输入作为基础。scale2ref_npp 还支持 wh 选项的以下附加常量

main_w
main_h

主输入视频的宽度和高度

main_a

main_w / main_h 相同

main_sar

主输入视频的采样宽高比

main_dar, mdar

主输入视频的显示宽高比。从 (main_w / main_h) * main_sar 计算得出。

main_n

主输入帧的(顺序)编号,从 0 开始。仅在 eval=frame 时可用。

main_t

主输入帧的表示时间戳,以秒为单位表示。仅在 eval=frame 时可用。

main_pos

帧在主输入流中的位置(字节偏移),如果此信息不可用和/或无意义(例如,在合成视频的情况下),则为 NaN。仅在 eval=frame 时可用。

30.221.1 示例

  • 缩放字幕流 (b) 的大小以匹配主视频 (a) 的大小,然后再叠加
    'scale2ref_npp[b][a];[a][b]overlay_cuda'
    
  • 将徽标缩放到视频高度的 1/10,同时保持其显示宽高比。
    [logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
    

30.222 scale_vt

使用 VTPixelTransferSession 缩放和转换颜色参数。

该滤镜接受以下选项:

w
h

设置输出视频尺寸表达式。默认值为输入尺寸。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出颜色原色。

color_transfer

设置输出传输特性。

30.223 scharr

对输入视频流应用 scharr 算子。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.223.1 命令

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

30.224 scroll

以恒定速度水平和/或垂直滚动输入视频。

该滤镜接受以下选项:

horizontal, h

设置水平滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会更改滚动方向。

vertical, v

设置垂直滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会改变滚动方向。

hpos

设置初始水平滚动位置。默认值为 0。允许的范围为 0 到 1。

vpos

设置初始垂直滚动位置。默认值为 0。允许的范围为 0 到 1。

30.224.1 命令

此滤镜支持以下命令

horizontal, h

设置水平滚动速度。

vertical, v

设置垂直滚动速度。

30.225 scdet

检测视频场景变化。

此滤镜会设置帧元数据,包括帧之间的 mafd、场景得分,并将帧转发到下一个滤镜,以便它们可以使用这些元数据来检测场景变化或其他内容。

此外,当此滤镜通过 threshold 检测到场景变化时,它会记录一条消息并设置帧元数据。

lavfi.scd.mafd 元数据键会为每一帧设置 mafd。

lavfi.scd.score 元数据键会为每一帧设置场景变化得分,用于检测场景变化。

lavfi.scd.time 元数据键会设置当前过滤帧的时间,该时间使用 threshold 检测场景变化。

该滤镜接受以下选项:

threshold, t

设置场景变化检测阈值,作为最大变化的百分比。较好的值在 [8.0, 14.0] 范围内。threshold 的范围是 [0., 100.]

默认值为 10.

sc_pass, s

设置标志以将场景变化帧传递到下一个滤镜。默认值为 0。如果您只想获取场景变化帧的快照,可以启用它。

30.226 selectivecolor

将青色、洋红色、黄色和黑色 (CMYK) 调整到特定颜色范围(例如“红色”、“黄色”、“绿色”、“青色”等)。调整范围由颜色的“纯度”(即它已有的饱和度)定义。

此滤镜类似于 Adobe Photoshop 的可选颜色工具。

该滤镜接受以下选项:

correction_method

选择颜色校正方法。

可用值为

absolute

指定的调整将“按原样”应用(添加到或从原始像素分量值中减去)。

relative

指定的调整相对于原始分量值。

默认为 absolute

reds

对红色像素(红色分量最大的像素)的调整

yellows

对黄色像素(蓝色分量最小的像素)的调整

greens

对绿色像素(绿色分量最大的像素)的调整

cyans

对青色像素(红色分量最小的像素)的调整

blues

对蓝色像素(蓝色分量最大的像素)的调整

magentas

对洋红色像素(绿色分量最小的像素)的调整

whites

对白色像素(所有分量都大于 128 的像素)的调整

neutrals

对除纯黑色和纯白色之外的所有像素的调整

blacks

对黑色像素(所有分量都小于 128 的像素)的调整

psfile

指定一个 Photoshop 可选颜色文件 (.asv) 以从中导入设置。

所有调整设置(redsyellows 等)最多接受 4 个空格分隔的浮点调整值,范围为 [-1,1],分别用于调整其范围内像素的青色、洋红色、黄色和黑色量。

30.226.1 示例

  • 在每个绿色区域中将青色增加 50% 并将黄色减少 33%,并在蓝色区域中将洋红色增加 27%
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用 Photoshop 可选颜色预设
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

30.227 separatefields

separatefields 滤镜采用基于帧的视频输入,并将每个帧拆分为其组成场,生成一个具有两倍帧率和两倍帧数的新半高剪辑。

此滤镜使用帧中的场优势信息来决定将每对场中的哪个场放在输出中的第一个。如果它弄错了,请在 separatefields 滤镜之前使用 setfield 滤镜。

30.228 setdar, setsar

setdar 滤镜设置滤镜输出视频的显示纵横比。

这是通过根据以下等式更改指定的采样(又名像素)纵横比来实现的

DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR

请记住,setdar 滤镜不会修改视频帧的像素尺寸。此外,此滤镜设置的显示纵横比可能会被滤镜链中后面的滤镜更改,例如在缩放的情况下,或者如果应用了另一个“setdar”或“setsar”滤镜。

setsar 滤镜设置滤镜输出视频的采样(又名像素)纵横比。

请注意,由于应用此滤镜,输出显示纵横比将根据上面的等式更改。

请记住,setsar 滤镜设置的采样纵横比可能会被滤镜链中后面的滤镜更改,例如,如果应用了另一个“setsar”或“setdar”滤镜。

它接受以下参数

r、ratio、dar(仅限 setdar)、sar(仅限 setsar

设置滤镜使用的纵横比。

该参数可以是浮点数字符串,也可以是表达式。如果未指定该参数,则假定值为“0”,这意味着使用相同的输入值。

最大值

设置将表示的纵横比简化为有理数时,用于表示分子和分母的最大整数值。默认值为 100

参数 sar 是一个包含以下常量的表达式

w, h

输入宽度和高度。

a

w / h 相同。

sar

输入样本宽高比。

dar

输入显示纵横比。它与 (w / h) * sar 相同。

hsub, vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

30.228.1 示例

  • 要将显示纵横比更改为 16:9,请指定以下选项之一
    setdar=dar=1.77777
    setdar=dar=16/9
    
  • 要将采样纵横比更改为 10:11,请指定
    setsar=sar=10/11
    
  • 要设置 16:9 的显示纵横比,并在纵横比简化中指定最大整数值为 1000,请使用以下命令
    setdar=ratio=16/9:max=1000
    

30.229 setfield

强制输出视频帧的场。

setfield 滤镜标记输出帧的隔行扫描类型场。它不会更改输入帧,而只是设置相应的属性,该属性会影响后续滤镜(例如 fieldorderyadif)如何处理该帧。

该滤镜接受以下选项:

mode

可用值为

auto

保留相同的场属性。

bff

将帧标记为 bottom-field-first。

tff

将帧标记为 top-field-first。

prog

将帧标记为逐行扫描。

30.230 setparams

强制输出视频帧的帧参数。

setparams 滤镜标记输出帧的隔行扫描和颜色范围。它不会更改输入帧,而只是设置相应的属性,该属性会影响滤镜/编码器如何处理该帧。

field_mode

可用值为

auto

保留相同的场属性(默认)。

bff

将帧标记为 bottom-field-first。

tff

将帧标记为 top-field-first。

prog

将帧标记为逐行扫描。

range

可用值为

auto

color_range

保留相同的颜色范围属性(默认)。

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

color_trc

auto

保留相同的色彩空间属性(默认)。

保留相同的颜色 trc 属性(默认)。
bt709
unknown
fcc
bt470bg
smpte170m
smpte240m
ycgco
bt2020nc
bt2020c
smpte2085
chroma-derived-nc
chroma-derived-c
ictcp
colorspace

设置颜色空间。可用值为

auto

gbr

保留相同的颜色范围属性(默认)。
left
center
topleft
top
bottomleft
bottom

30.231 sharpen_npp

chroma_location

接受以下附加选项

设置色度采样位置。可用值为

保留相同的色度位置(默认)。

使用 NVIDIA Performance Primitives (libnpp) 执行带有边界控制的图像锐化。

border_type

30.232 shear

要在帧边界处使用的采样类型。以下之一

replicate

复制像素值。

将剪切变换应用于输入视频。

此滤镜支持以下选项

shx

填充颜色,c

设置用于填充未被变换视频覆盖的输出区域的颜色。有关此选项的通用语法,请查阅 ffmpeg-utils 手册中的 “Color” 部分。如果选择特殊值“none”,则不打印背景(例如,如果背景永远不会显示,则此项很有用)。

默认值为“black”。

interp

设置插值类型。可以是 bilinearnearest。默认为 bilinear

30.232.1 命令

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

30.233 showinfo

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

replicate

checksum

计算每个平面的校验和。默认启用。

udu_sei_as_ascii

尽可能尝试以 ASCII 字符形式打印用户数据未注册的 SEI,否则以十六进制格式打印。

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

以下值显示在输出中

n

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

pts

输入帧的呈现时间戳,表示为时间基准单位的数量。时间基准单位取决于过滤器输入填充。

pts_time

输入帧的呈现时间戳,表示为秒数。

fmt

像素格式名称。

sar

输入帧的样本宽高比,以 num/den 的形式表示。

s

输入帧的大小。有关此选项的语法,请查阅 ffmpeg-utils 手册中的“视频大小”部分

i

隔行模式的类型(“P”表示“逐行”,“T”表示顶场优先,“B”表示底场优先)。

iskey

如果该帧是关键帧,则此值为 1,否则为 0。

type

输入帧的图片类型(“I”表示 I 帧,“P”表示 P 帧,“B”表示 B 帧,或“?”表示未知类型)。另请参阅 libavutil/avutil.h 中定义的 AVPictureType 枚举和 av_get_picture_type_char 函数的文档。

checksum

输入帧所有平面的 Adler-32 校验和(以十六进制打印)。

plane_checksum

输入帧每个平面的 Adler-32 校验和(以十六进制打印),以 “[c0 c1 c2 c3]” 的形式表示。

mean

输入帧每个平面中像素的平均值,以 “[mean0 mean1 mean2 mean3]” 的形式表示。

stdev

输入帧每个平面中像素值的标准差,以 “[stdev0 stdev1 stdev2 stdev3]” 的形式表示。

30.234 showpalette

显示每个帧的 256 色调色板。此滤镜仅适用于 pal8 像素格式的帧。

它接受以下选项

s

设置用于表示一个调色板颜色条目的框的大小。默认为 30(表示 30x30 像素的框)。

30.235 shuffleframes

重新排序和/或复制和/或删除视频帧。

它接受以下参数

mapping

设置输入帧的目标索引。这是一个空格或“|”分隔的索引列表,将输入帧映射到输出帧。索引的数量还设置了每个索引可能具有的最大值。“-1”索引具有特殊含义,表示删除帧。

第一帧的索引为 0。默认值是保持输入不变。

30.235.1 示例

  • 交换输入中每三个帧的第二帧和第三帧
    ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
    
  • 交换输入中每十个帧的第十帧和第一帧
    ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
    

30.236 shufflepixels

重新排序视频帧中的像素。

此滤波器接受以下选项

方向, d

设置随机方向。可以是正向或反向。默认方向为正向。

mode, m

设置随机模式。可以是水平、垂直或块模式。

宽度,w
高度,h

设置随机块大小。在水平随机模式下,仅使用大小的宽度部分;在垂直随机模式下,仅使用大小的高度部分。

种子,s

设置用于随机像素的随机种子。主要用于设置,以便能够反转过滤过程以获得原始输入。例如,要反转正向随机,您需要使用相同的参数和完全相同的种子,并将方向设置为反向。

30.237 shuffleplanes

重新排序和/或复制视频平面。

它接受以下参数

map0

用作第一个输出平面的输入平面的索引。

map1

用作第二个输出平面的输入平面的索引。

map2

用作第三个输出平面的输入平面的索引。

map3

用作第四个输出平面的输入平面的索引。

第一个平面的索引为 0。默认值是保持输入不变。

30.237.1 示例

  • 交换输入的第二和第三个平面
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

30.238 signalstats

评估各种视觉指标,以帮助确定与模拟视频媒体数字化相关的问题。

默认情况下,过滤器将记录这些元数据值

YMIN

显示输入帧中包含的最小 Y 值。表示范围为 [0-255]。

YLOW

显示输入帧中 10% 百分位的 Y 值。表示范围为 [0-255]。

YAVG

显示输入帧内的平均 Y 值。表示范围为 [0-255]。

YHIGH

显示输入帧中 90% 百分位的 Y 值。表示范围为 [0-255]。

YMAX

显示输入帧中包含的最大 Y 值。表示范围为 [0-255]。

UMIN

显示输入帧中包含的最小 U 值。表示范围为 [0-255]。

ULOW

显示输入帧中 10% 百分位的 U 值。表示范围为 [0-255]。

UAVG

显示输入帧内的平均 U 值。表示范围为 [0-255]。

UHIGH

显示输入帧中 90% 百分位的 U 值。表示范围为 [0-255]。

UMAX

显示输入帧中包含的最大 U 值。表示范围为 [0-255]。

VMIN

显示输入帧中包含的最小 V 值。表示范围为 [0-255]。

VLOW

显示输入帧中 10% 百分位的 V 值。表示范围为 [0-255]。

VAVG

显示输入帧内的平均 V 值。表示范围为 [0-255]。

VHIGH

显示输入帧中 90% 百分位的 V 值。表示范围为 [0-255]。

VMAX

显示输入帧中包含的最大 V 值。表示范围为 [0-255]。

SATMIN

显示输入帧中包含的最小饱和度值。表示范围为 [0-~181.02]。

SATLOW

显示输入帧中 10% 百分位的饱和度值。表示范围为 [0-~181.02]。

SATAVG

显示输入帧内的平均饱和度值。表示范围为 [0-~181.02]。

SATHIGH

显示输入帧中 90% 百分位的饱和度值。表示范围为 [0-~181.02]。

SATMAX

显示输入帧中包含的最大饱和度值。表示范围为 [0-~181.02]。

HUEMED

显示输入帧中色调的中位数。表示范围为 [0-360]。

HUEAVG

显示输入帧中色调的平均值。表示范围为 [0-360]。

YDIF

显示当前帧中 Y 平面的所有值与先前输入帧的相应值之间的样本值平均差。表示范围为 [0-255]。

UDIF

显示当前帧中 U 平面的所有值与先前输入帧的相应值之间的样本值平均差。表示范围为 [0-255]。

VDIF

显示当前帧中 V 平面的所有值与先前输入帧的相应值之间的样本值平均差。表示范围为 [0-255]。

YBITDEPTH

显示当前帧中 Y 平面的位深度。表示范围为 [0-16]。

UBITDEPTH

显示当前帧中 U 平面的位深度。范围为 [0-16]。

VBITDEPTH

显示当前帧中 V 平面的位深度。范围为 [0-16]。

该滤镜接受以下选项:

stat
out

stat 指定图像分析的附加形式。out 输出视频,其中突出显示指定类型的像素。

两个选项都接受以下值

tout

识别时间异常值像素。时间异常值是指与同一场中的相邻像素不同的像素。时间异常值的例子包括视频丢失、磁头堵塞或磁带跟踪问题造成的现象。

vrep

识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中,垂直线重复很常见,但在从模拟源数字化的视频中,这种模式并不常见。当它出现在由模拟源数字化产生的视频中时,可能表明来自丢失补偿器的隐藏。

brng

识别超出合法广播范围的像素。

颜色,c

设置 out 选项的突出显示颜色。默认颜色为黄色。

30.238.1 示例

  • 输出各种视频指标的数据
    ffprobe -f lavfi movie=example.mov,signalstats="stat=tout+vrep+brng" -show_frames
    
  • 输出每帧 Y 平面的最小值和最大值的特定数据
    ffprobe -f lavfi movie=example.mov,signalstats -show_entries frame_tags=lavfi.signalstats.YMAX,lavfi.signalstats.YMIN
    
  • 播放视频,同时以红色突出显示超出广播范围的像素。
    ffplay example.mov -vf signalstats="out=brng:color=red"
    
  • 播放视频,并在帧上绘制 signalstats 元数据。
    ffplay example.mov -vf signalstats=stat=brng+vrep+tout,drawtext=fontfile=FreeSerif.ttf:textfile=signalstat_drawtext.txt
    

    命令中使用的 signalstat_drawtext.txt 的内容为

    time %{pts:hms}
    Y (%{metadata:lavfi.signalstats.YMIN}-%{metadata:lavfi.signalstats.YMAX})
    U (%{metadata:lavfi.signalstats.UMIN}-%{metadata:lavfi.signalstats.UMAX})
    V (%{metadata:lavfi.signalstats.VMIN}-%{metadata:lavfi.signalstats.VMAX})
    saturation maximum: %{metadata:lavfi.signalstats.SATMAX}
    
    

30.239 signature

计算 MPEG-7 视频签名。该过滤器可以处理多个输入。在这种情况下,还可以计算输入之间的匹配度。过滤器始终传递第一个输入。每个流的签名可以写入文件中。

它接受以下选项

detectmode

启用或禁用匹配过程。

可用值为

off

禁用匹配计算(默认)。

full

计算整个视频的匹配度,并输出整个视频是否匹配或仅匹配部分。

fast

仅计算到找到匹配项或视频结束。在某些情况下应该更快。

nb_inputs

设置输入数量。选项值必须是非负整数。默认值为 1。

filename

设置写入输出的路径。如果存在多个输入,则路径必须是原型,即必须包含 %d 或 %0nd(其中 n 是正整数),它将被输入编号替换。如果未指定文件名,则不会写入任何输出。这是默认设置。

格式

选择输出格式。

可用值为

binary

使用指定的二进制表示形式(默认)。

xml

使用指定的 xml 表示形式。

th_d

设置检测一个词相似的阈值。选项值必须是大于零的整数。默认值为 9000。

th_dc

设置检测所有词相似的阈值。选项值必须是大于零的整数。默认值为 60000。

th_xh

设置检测帧相似的阈值。选项值必须是大于零的整数。默认值为 116。

th_di

设置识别为匹配序列的帧序列的最小长度。选项值必须是非负整数值。默认值为 0。

th_it

设置匹配帧与所有帧必须具有的最小关系。选项值必须是介于 0 和 1 之间的双精度值。默认值为 0.5。

30.239.1 示例

  • 要计算输入视频的签名并将其存储在 signature.bin 中
    ffmpeg -i input.mkv -vf signature=filename=signature.bin -map 0:v -f null -
    
  • 要检测两个视频是否匹配并将签名以 XML 格式存储在 signature0.xml 和 signature1.xml 中
    ffmpeg -i input1.mkv -i input2.mkv -filter_complex "[0:v][1:v] signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml" -map :v -f null -
    

30.240 siti

计算视频的空间信息 (SI) 和时间信息 (TI) 分数,如 ITU-T Rec. P.910 (11/21) 中定义:多媒体应用的主观视频质量评估方法。PDF 文档可在https://www.itu.int/rec/T-REC-P.910-202111-S/en 获取。请注意,这是一个与已废弃的建议相对应的旧实现。有关最新版本,请参阅 ITU-T Rec. P.910 (07/22):https://www.itu.int/rec/T-REC-P.910-202207-I/en

它接受以下选项

print_summary

如果设置为 1,则会将摘要统计信息打印到控制台。默认值为 0。

30.240.1 示例

  • 要计算 SI/TI 指标并打印摘要
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

30.241 smartblur

模糊输入视频,而不影响轮廓。

它接受以下选项

luma_radius, lr

设置亮度半径。选项值必须是范围为 [0.1,5.0] 的浮点数,它指定用于模糊图像的高斯滤波器的方差(值越大,速度越慢)。默认值为 1.0。

luma_strength, ls

设置亮度强度。选项值必须是范围为 [-1.0,1.0] 的浮点数,它配置模糊效果。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 1.0。

luma_threshold, lt

设置用作系数的亮度阈值,以确定是否应模糊像素。选项值必须是范围为 [-30,30] 的整数。值为 0 将过滤整个图像,包含在 [0,30] 中的值将过滤平坦区域,而包含在 [-30,0] 中的值将过滤边缘。默认值为 0。

chroma_radius, cr

设置色度半径。选项值必须是范围为 [0.1,5.0] 的浮点数,它指定用于模糊图像的高斯滤波器的方差(值越大,速度越慢)。默认值为 luma_radius

chroma_strength, cs

设置色度强度。选项值必须是范围为 [-1.0,1.0] 的浮点数,它配置模糊效果。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 luma_strength

chroma_threshold, ct

设置用作系数的色度阈值,以确定是否应模糊像素。选项值必须是范围为 [-30,30] 的整数。值为 0 将过滤整个图像,包含在 [0,30] 中的值将过滤平坦区域,而包含在 [-30,0] 中的值将过滤边缘。默认值为 luma_threshold

alpha_radius, ar

设置 alpha 半径。选项值必须是范围为 [0.1,5.0] 的浮点数,它指定用于模糊图像的高斯滤波器的方差(值越大,速度越慢)。默认值为 luma_radius

alpha_strength, as

设置 alpha 强度。选项值必须是范围为 [-1.0,1.0] 的浮点数,它配置模糊效果。包含在 [0.0,1.0] 中的值将模糊图像,而包含在 [-1.0,0.0] 中的值将锐化图像。默认值为 luma_strength

alpha_threshold, at

设置用于确定像素是否应被模糊的 alpha 阈值系数。选项值必须是 [-30,30] 范围内的整数。值为 0 将过滤整个图像,[0,30] 范围内的值将过滤平坦区域,[-30,0] 范围内的值将过滤边缘。默认值为 luma_threshold

如果未显式设置色度或 alpha 选项,则会设置相应的亮度值。

30.242 sobel

将 Sobel 算子应用于输入视频流。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

30.242.1 命令

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

30.243 spp

应用一个简单的后处理滤波器,该滤波器在多个(或在 quality 级别为 6 的情况下,所有)偏移处压缩和解压缩图像,并对结果进行平均。

该滤镜接受以下选项:

quality

设置质量。此选项定义用于平均的级别数。它接受 0-6 范围内的整数。如果设置为 0,则过滤器将不起作用。值为 6 表示最高质量。对于该值的每次增加,速度大约降低 2 倍。默认值为 3

量化参数 (qp)

强制使用恒定量化参数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式为

hard

设置硬阈值(默认)。

soft

设置软阈值(去振铃效果更好,但可能会更模糊)。

use_bframe_qp

如果设置为 1,则启用使用 B 帧的 QP。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认值为 0(未启用)。

30.243.1 命令

此滤波器支持以下命令

质量,级别

设置质量级别。值 max 可用于设置最大级别,目前为 6

30.244 sr

通过应用基于卷积神经网络的超分辨率方法之一来缩放输入。支持的模型

训练脚本以及用于模型文件 (.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://tensorflowcn.cn/install/lang_c)并使用 --enable-libtensorflow 配置 FFmpeg

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 和 OpenVINO 后端只能加载其格式的文件。

缩放因子

设置 SRCNN 模型的缩放因子。允许的值为 234。默认值为 2。缩放因子对于 SRCNN 模型是必要的,因为它接受使用双三次上采样和适当缩放因子进行上采样的输入。

要获得完整功能(例如异步执行),请使用 dnn_processing 滤镜。

30.245 ssim

获取两个输入视频之间的 SSIM(结构相似性度量)。

此过滤器接收两个输入视频,第一个输入被视为“主”源,并保持不变地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。

为了使此滤镜正常工作,两个视频输入的 resolution 和像素格式必须相同。此外,它假定两个输入具有相同数量的帧,这些帧会逐个进行比较。

该过滤器存储每个帧计算出的 SSIM。

以下是接受的参数的说明。

stats_file, f

如果指定,过滤器将使用指定的文件来保存每个单独帧的 SSIM。当文件名等于 "-" 时,数据将发送到标准输出。

如果选择了 stats_file,则打印的文件包含每个比较的帧对的 key:value 形式的键/值对序列。

下面是每个显示参数的描述

n

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

Y、U、V、R、G、B

通过后缀指定的组件的比较帧的 SSIM。

全部

整个帧的比较帧的 SSIM。

分贝

与上述相同,但以分贝表示。

此滤镜还支持 framesync 选项。

30.245.1 示例

  • 例如
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] ssim="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件 ref_movie.mpg 进行比较。每个单独帧的 SSIM 存储在 stats.log 中。

  • 另一个同时使用 psnr 和 ssim 的示例
    ffmpeg -i main.mpg -i ref.mpg -lavfi  "ssim;[0:v][1:v]psnr" -f null -
    
  • 另一个具有不同容器的示例
    ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim" -f null -
    

30.246 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

浮雕红/青色,使用杜波依斯的最小二乘投影进行优化(左眼红色滤镜,右眼青色滤镜)

agmg

浮雕绿/品红灰度(左眼绿色滤镜,右眼品红滤镜)

agmh

浮雕绿/品红半彩色(左眼绿色滤镜,右眼品红滤镜)

agmc

浮雕绿/品红色(左眼绿色滤镜,右眼品红滤镜)

agmd

浮雕绿/品红色,使用杜波依斯的最小二乘投影进行优化(左眼绿色滤镜,右眼品红滤镜)

aybg

浮雕黄/蓝灰度(左眼黄色滤镜,右眼蓝色滤镜)

aybh

浮雕黄/蓝半彩色(左眼黄色滤镜,右眼蓝色滤镜)

aybc

浮雕黄/蓝色(左眼黄色滤镜,右眼蓝色滤镜)

aybd

浮雕黄/蓝色,使用杜波依斯的最小二乘投影进行优化(左眼黄色滤镜,右眼蓝色滤镜)

ml

单声道输出(仅左眼)

mr

单声道输出(仅右眼)

chl

棋盘格,左眼优先

chr

棋盘格,右眼优先

icl

交错列,左眼优先

icr

交错列,右眼优先

hdmi

HDMI 帧封装

默认值为 ‘arcd’。

30.246.1 示例

  • 将输入视频从并排平行转换为浮雕黄/蓝杜波依斯
    stereo3d=sbsl:aybd
    
  • 将上下格式(左眼在上,右眼在下)的输入视频转换为左右交叉视差格式。
    stereo3d=abl:sbsr
    

30.247 streamselect, astreamselect

选择视频或音频流。

该滤镜接受以下选项:

输入

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

map

设置要映射到输出的输入索引。

30.247.1 命令

streamselectastreamselect 滤镜支持以下命令

map

设置要映射到输出的输入索引。

30.247.2 示例

  • 选择前 5 秒的第一个流,其余时间选择第二个流
    sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
    
  • 与上面相同,但用于音频
    asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
    

30.248 subtitles

使用 libass 库在输入视频上绘制字幕。

要启用此滤镜的编译,您需要使用 --enable-libass 配置 FFmpeg。此滤镜还需要使用 libavcodec 和 libavformat 进行构建,以便将传递的字幕文件转换为 ASS(高级字幕 Alpha)字幕格式。

该滤镜接受以下选项:

文件名,f

设置要读取的字幕文件名。必须指定。

original_size

指定原始视频的大小,即 ASS 文件所对应的视频。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。由于 ASS 长宽比算法中的设计缺陷,如果长宽比已更改,则需要此选项来正确缩放字体。

fontsdir

设置一个包含滤镜可以使用的字体的目录路径。这些字体将添加到字体提供程序使用的字体之外。

alpha

处理 alpha 通道,默认情况下 alpha 通道保持不变。

charenc

设置字幕输入字符编码。仅限 subtitles 滤镜。仅在非 UTF-8 时有用。

stream_index, si

设置字幕流索引。仅限 subtitles 滤镜。

force_style

覆盖字幕的默认样式或脚本信息参数。它接受一个字符串,其中包含以逗号分隔的 ASS 样式格式 KEY=VALUE 对。

wrap_unicode

根据 Unicode 换行算法断行。可用性要求至少 libass 发布版本 0.17.0(或 LIBASS_VERSION 0x01600010),并且 libass 必须使用 libunibreak 构建。

默认情况下启用该选项,但原生 ASS 除外。

如果未指定第一个键,则假定第一个值指定 filename

例如,要在输入视频上渲染文件 sub.srt,请使用以下命令

subtitles=sub.srt

这等效于

subtitles=filename=sub.srt

要渲染文件 video.mkv 中的默认字幕流,请使用

subtitles=video.mkv

要渲染该文件中的第二个字幕流,请使用

subtitles=video.mkv:si=1

要使来自 sub.srt 的字幕流以 80% 透明的蓝色 DejaVu Serif 字体显示,请使用

subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'

30.249 super2xsai

使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入缩放 2 倍并进行平滑处理。

对于放大像素艺术图像而不降低锐度很有用。

30.250 swaprect

交换视频中的两个矩形对象。

此滤波器接受以下选项

w

设置对象宽度。

h

设置对象高度。

x1

设置第一个矩形的 x 坐标。

y1

设置第一个矩形的 y 坐标。

x2

设置第二个矩形的 x 坐标。

y2

设置第二个矩形的 y 坐标。

所有表达式都针对每一帧求值一次。

所有选项都是包含以下常量的表达式

w
h

输入宽度和高度。

a

w / h 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (w / h) * sar 相同

n

输入帧的编号,从 0 开始。

t

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

pos

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

30.250.1 命令

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

30.251 swapuv

交换 U 和 V 平面。

30.252 tblend

混合连续的视频帧。

请参阅 blend

30.253 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.254 thistogram

计算并绘制输入视频随时间的颜色分布直方图。

histogram 视频滤镜不同,后者仅显示特定时间单个输入帧的直方图,此滤镜还显示由 width 选项定义的帧数范围内的过去直方图。

计算出的直方图是图像中颜色分量分布的表示。

该滤镜接受以下选项:

宽度,w

设置单个颜色分量输出的宽度。默认值为 0。值 0 表示宽度将从输入视频中选取。这也设置要保留的传递的直方图数量。允许的范围是 [0, 8192]。

display_mode, d

设置显示模式。它接受以下值

stack

每个颜色分量的图形彼此放置在下方。

parade

每个颜色分量的图形并排放置。

overlay’(叠加)

呈现与 parade 中相同的信息,只是表示颜色分量的图形直接叠加在一起。

默认值为 stack

levels_mode, m

设置模式。可以是 linearlogarithmic。默认值为 linear

components, c

设置要显示哪些颜色分量。默认值为 7

bgopacity, b

设置背景不透明度。默认值为 0.9

envelope, e

显示包络线。默认情况下禁用。

ecolor, ec

设置包络线颜色。默认值为 gold

slide

设置滑动模式。

滑动的可用值是

frame

到达右边界时绘制新帧。

replace

用新的列替换旧的列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单个图片。

默认值为 replace

30.255 threshold

对视频流应用阈值效果。

此滤镜需要四个视频流来执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后一个,第四个流保存最大值。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

例如,如果第一个流像素的分量值小于来自第二个阈值流的像素分量值的阈值,则将选择第三个流的值,否则将选择第四个流像素分量值。

使用颜色源滤镜,可以执行各种类型的阈值处理

30.255.1 命令

此滤镜支持所有与 commands 相同的选项。

30.255.2 示例

  • 二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=black -f lavfi -i color=white -lavfi threshold output.avi
    
  • 反转二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -f lavfi -i color=black -lavfi threshold output.avi
    
  • 截断二值化阈值,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=gray -lavfi threshold output.avi
    
  • 阈值归零,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -f lavfi -i color=white -i 320x240.avi -lavfi threshold output.avi
    
  • 反转阈值归零,使用灰色作为阈值
    ffmpeg -i 320x240.avi -f lavfi -i color=gray -i 320x240.avi -f lavfi -i color=white -lavfi threshold output.avi
    

30.256 thumbnail

在给定的连续帧序列中选择最具代表性的帧。

该滤镜接受以下选项:

n

设置要分析的帧批次大小;在一组 n 个帧中,滤镜将选择其中一个,然后处理下一批 n 个帧,直到结束。默认值为 100

log

设置要显示选定帧统计信息的日志级别。默认值为 info

由于滤镜会跟踪整个帧序列,因此较大的 n 值将导致更高的内存使用率,因此不建议使用较高的值。

30.256.1 示例

  • 每 50 帧提取一张图片
    thumbnail=50
    
  • 使用 ffmpeg 创建缩略图的完整示例
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

30.257 tile

将多个连续帧平铺在一起。

untile 滤镜可以执行相反的操作。

该滤镜接受以下选项:

布局

COLUMNSxROWS 形式设置网格大小。范围为最多 UINT_MAX 个单元格。默认值为 6x5

nb_frames

设置要在给定区域中渲染的最大帧数。它必须小于或等于 wxh。默认值为 0,表示将使用所有区域。

margin

以像素为单位设置外边框边距。范围为 0 到 1024。默认值为 0

padding

设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如,对边缘使用不同的值),请参阅 pad 视频滤镜。范围为 0 到 1024。默认值为 0

color

指定未使用区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分color 的默认值为“黑色”。

重叠

设置在将多个连续帧平铺在一起时要重叠的帧数。该值必须介于 0nb_frames - 1 之间。默认值为 0

init_padding

设置在显示第一个输出帧之前最初为空的帧数。这控制何时获得第一个输出帧。该值必须介于 0nb_frames - 1 之间。默认值为 0

30.257.1 示例

  • 生成电影中所有关键帧(-skip_frame nokey)的 8x8 PNG 瓦片
    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

    -vsync 0 是必需的,以防止 ffmpeg 复制每个输出帧以适应最初检测到的帧率。

  • 3x2 帧的区域中显示 5 张图片,它们之间间隔 7 个像素,初始边距为 2 个像素,使用混合的平面和命名选项
    tile=3x2:nb_frames=5:padding=7:margin=2
    

30.258 tiltandshift

应用倾斜和移位效果。

当您反转时间和空间时会发生什么?

通常,视频由多个帧组成,这些帧代表不同的时间瞬间,并显示在帧捕获的空间中演变的场景。此滤镜是该概念的反面,灵感来自倾斜和移位摄影。

一个经过滤的帧包含了构成序列的整个事件时间线,这是通过将每一帧中的像素切片放入单个帧中获得的。然而,由于没有无限宽度的帧,所以这样做会达到输入帧的宽度,并通过为每个后续帧移开一列来重新组合视频。为了将空间映射到时间,该滤镜还会倾斜每个输入帧,以便保留运动。这是通过从每个输入帧中逐步选择不同的列来实现的。

最终的结果是一种反向视差,因此远处的物体移动速度比前面的物体快得多。这种视频效果的理想条件是当运动非常小且背景是静态的,或者当运动很多且景深很宽时(例如,在火车上移动时的广阔全景)。

该滤波器接受以下参数

倾斜

倾斜视频同时平移(默认)。如果未设置,视频将滑动一个静态图像,该图像由每一帧的第一列组成。

start

开始过滤时要执行的操作(见下文)。

end

结束过滤时要执行的操作(见下文)。

保持

在开始过滤之前应该经过多少列。

填充

在结束过滤之前应该插入多少列。

通常,滤镜会从第一个帧开始平移和倾斜,并在收到最后一个帧时停止。然而,在开始过滤之前,可以保留正常的视频,以便效果缓慢地移入到位。类似地,最后一个视频帧可以在末尾重建。或者,可以只以黑色开始和结束。

none

过滤立即开始,并在收到最后一帧时结束。

frame

在处理过程中,第一个帧或最后一个帧保持不变。

black

在过滤的开始或结束处填充黑色。

30.259 tinterlace

执行各种类型的时间场交错。

帧从 1 开始计数,因此第一个输入帧被认为是奇数。

该滤镜接受以下选项:

mode

指定交错的模式。此选项也可以单独指定为值。请参阅下面的此选项的值列表。

可用值为

merge, 0

将奇数帧移动到上场,偶数帧移动到下场,以一半帧率生成一个双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
11111                           33333
22222                           44444
drop_even, 1

仅输出奇数帧,偶数帧被丢弃,以一半帧率生成一个高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111                           33333
11111                           33333
11111                           33333
11111                           33333
drop_odd, 2

仅输出偶数帧,奇数帧被丢弃,以一半帧率生成一个高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
                22222                           44444
                22222                           44444
                22222                           44444
                22222                           44444
pad, 3

将每个帧扩展到全高,但用黑色填充交替的行,以相同的输入帧率生成一个双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
11111           .....           33333           .....
.....           22222           .....           44444
interleave_top, 4

将奇数帧的上场与偶数帧的下场交错,以一半帧率生成一个高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-

Output:
11111                           33333
22222                           44444
11111                           33333
22222                           44444
interleave_bottom, 5

将奇数帧的下场与偶数帧的上场交错,以一半帧率生成一个高度不变的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444
11111           22222<-         33333           44444<-
11111<-         22222           33333<-         44444

Output:
22222                           44444
11111                           33333
22222                           44444
11111                           33333
interlacex2, 6

以不变的高度将帧率加倍。插入的每个帧都包含来自前一个输入帧的第二个时间场和来自下一个输入帧的第一个时间场。此模式依赖于 top_field_first 标志。对于没有场同步的隔行扫描视频显示器非常有用。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
 11111           22222           33333           44444
11111           22222           33333           44444
 11111           22222           33333           44444

Output:
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
11111   22222   22222   33333   33333   44444   44444
 11111   11111   22222   22222   33333   33333   44444
mergex2, 7

将奇数帧移动到上场,偶数帧移动到下场,以相同的帧率生成一个双倍高度的帧。

 ------> time
Input:
Frame 1         Frame 2         Frame 3         Frame 4

11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444
11111           22222           33333           44444

Output:
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444
11111           33333           33333           55555
22222           22222           44444           44444

数值已被弃用,但出于向后兼容性的原因被接受。

默认模式为 merge

flags

指定影响过滤器进程的标志。

flags 的可用值为

低通滤波, vlpf

在滤镜中启用线性垂直低通滤波。当从包含高频垂直细节的渐进式源创建隔行扫描目标时,需要垂直低通滤波。滤波将减少隔行扫描“闪烁”和莫尔条纹。

复杂滤波, cvlpf

启用复杂的垂直低通滤波。这将稍微减少隔行扫描“闪烁”和莫尔条纹,但更好地保留细节和主观清晰度印象。

绕过_il

绕过已隔行扫描的帧,仅调整帧率。

垂直低通滤波和绕过已隔行扫描的帧只能为 mode interleave_topinterleave_bottom 启用。

30.260 tmedian

从几个连续的输入视频帧中选取中值像素。

该滤镜接受以下选项:

radius

设置中值滤波器的半径。默认值为 1。允许的范围为 1 到 127。

planes

设置要过滤的平面。默认值为 15,表示处理所有平面。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

30.260.1 命令

此滤镜支持以上所有选项作为 命令,不包括选项 radius

30.261 tmidequalizer

应用时间中值视频均衡效果。

中值视频均衡调整一系列视频帧,使其具有相同的直方图,同时尽可能保持其动态。例如,它对于匹配视频帧序列中的曝光非常有用。

此过滤器接受以下选项

radius

设置滤波半径。默认值为 5。允许的范围为 1 到 127。

sigma

设置滤波 sigma。默认值为 0.5。这控制滤波的强度。将此选项设置为 0 实际上不执行任何操作。

planes

设置要处理的平面。默认值为 15,即所有可用的平面。

30.262 tmix

混合连续的视频帧。

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

frames

要混合的连续帧的数量。如果未指定,则默认为 3。

权重

指定每个输入视频帧的权重。每个权重用空格分隔。如果权重的数量小于 frames 的数量,则最后一个指定的权重将用于所有剩余的未设置的权重。

scale

指定缩放,如果设置了缩放,它将与每个权重乘以像素值的总和相乘,以给出最终的目标像素值。默认情况下,scale 会自动缩放到权重之和。

planes

设置要过滤的平面。默认值为全部。允许范围为 0 到 15。

30.262.1 示例

  • 平均 7 个连续帧
    tmix=frames=7:weights="1 1 1 1 1 1 1"
    
  • 应用简单的时间卷积
    tmix=frames=3:weights="-1 3 -1"
    
  • 与上述类似,但仅显示时间差异
    tmix=frames=3:weights="-1 2 -1":scale=1
    

30.262.2 命令

此滤波器支持以下命令

权重
scale
planes

语法与同名选项相同。

30.263 tonemap

对来自不同动态范围的颜色进行色调映射。

此滤镜期望单精度浮点数据,因为它需要在(并且可以输出)超出范围的值上进行操作。需要另一个滤镜(例如 zscale)将生成的帧转换为可用的格式。

实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

30.263.1 选项

该滤镜接受以下选项。

色调映射

设置要使用的色调映射算法。

可能的值为

none

不应用任何色调映射,仅对过亮像素进行去饱和。

削波

硬剪切任何超出范围的值。对于范围内值的完美颜色准确度使用它,同时扭曲超出范围的值。

linear

将整个参考色域拉伸到显示器的线性倍数。

gamma

在色调曲线之间拟合对数变换。

莱因哈德

使用简单的曲线保持整体图像亮度,使用非线性对比度,这会导致细节扁平化并降低颜色准确度。

哈布尔

reinhard 更好地保留暗部和亮部细节,但代价是整体略微变暗。当保留细节比颜色和亮度准确性更重要时使用。

mobius

平滑地映射超出范围的值,同时尽可能保留范围内素材的对比度和颜色。当颜色准确性比细节保留更重要时使用。

默认为 none。

param

调整色调映射算法。

这会影响以下算法

none

忽略。

linear

指定拉伸时使用的缩放因子。默认为 1.0。

gamma

指定函数的指数。默认为 1.8。

削波

指定一个额外的线性系数,在剪切之前乘以信号。默认为 1.0。

莱因哈德

指定显示峰值处的局部对比度系数。默认为 0.5,这意味着在色域内的值亮度大约为剪切时的一半。

哈布尔

忽略。

mobius

指定从线性变换到 mobius 变换的过渡点。低于此点的每个值都保证进行 1:1 映射。该值越高,结果越准确,但代价是会丢失亮部细节。默认为 0.3,由于初始斜率陡峭,仍然可以相当准确地保留色域内的颜色。

desat

对超过此亮度级别的高光应用去饱和度。参数越高,保留的颜色信息越多。此设置通过(平滑地)变为白色来帮助防止超高光出现不自然的色彩爆发。这使得图像感觉更自然,但代价是会减少超出范围的颜色信息。

默认值 2.0 有些保守,主要只适用于天空或阳光直射的表面。设置为 0.0 会禁用此选项。

仅当输入帧具有支持的颜色标签时,此选项才有效。

peak

使用此值覆盖信号/标称/参考峰值。当显示元数据中嵌入的峰值信息不可靠或从较低范围色调映射到较高范围时很有用。

30.264 tpad

临时填充视频帧。

该滤镜接受以下选项:

start

指定输入视频流之前的延迟帧数。默认为 0。

stop

指定输入视频流之后的填充帧数。设置为 -1 表示无限期填充。默认为 0。

start_mode

设置添加到流开头的帧的类型。可以是 addclone。使用 add 会添加纯色帧。使用 clone 会克隆第一帧。默认为 add

stop_mode

设置添加到流结尾的帧的类型。可以是 addclone。使用 add 会添加纯色帧。使用 clone 会克隆最后一帧。默认为 add

start_duration, stop_duration

指定开始/停止延迟的持续时间。有关接受的语法,请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分。这些选项会覆盖 startstop。默认为 0。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中“颜色”部分

color 的默认值为“black”。

30.265 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 >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

默认值为 none

例如,要顺时针旋转 90 度并保留纵向布局

transpose=dir=1:passthrough=portrait

以上命令也可以指定为

transpose=1:portrait

30.266 transpose_npp

转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,它共享大部分相同的选项。

它接受以下参数

dir

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

30.267 trim

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

它接受以下参数

start

指定保留部分的开始时间,即具有时间戳 start 的帧将是输出中的第一帧。

end

指定将被删除的第一帧的时间,即紧邻时间戳为 end 的帧之前的帧将是输出中的最后一帧。

start_pts

这与 start 相同,但此选项以时间基准单位而不是秒为单位设置开始时间戳。

end_pts

这与 end 相同,但此选项以时间基准单位而不是秒为单位设置结束时间戳。

duration

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

start_frame

应该传递到输出的第一帧的编号。

end_frame

应该删除的第一帧的编号。

startendduration 表示为时间持续时间规范;有关接受的语法,请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分

请注意,前两组开始/结束选项和 duration 选项查看帧时间戳,而 _frame 变体只是计算通过滤镜的帧。另请注意,此滤镜不会修改时间戳。如果您希望输出时间戳从零开始,请在 trim 滤镜之后插入 setpts 滤镜。

如果设置了多个开始或结束选项,则此滤镜会尝试贪婪地保留所有至少匹配一个指定约束的帧。要仅保留同时匹配所有约束的部分,请链接多个 trim 滤镜。

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

示例

  • 丢弃除输入第二分钟以外的所有内容
    ffmpeg -i INPUT -vf trim=60:120
    
  • 仅保留第一秒
    ffmpeg -i INPUT -vf trim=duration=1
    

30.268 unpremultiply

使用第二流的第一平面作为 alpha,对输入视频流应用 alpha 预乘效果。

两个流必须具有相同的尺寸和相同的像素格式。

此滤镜接受以下选项

planes

设置将要处理的平面,未处理的平面将被复制。默认值 0xf,所有平面都将被处理。

如果格式有 1 或 2 个分量,则亮度为位 0。如果格式有 3 或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 为亮度,位 1 为色度-U,位 2 为色度-V。如果存在,alpha 通道始终是最后一位。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

30.269 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.269.1 示例

  • 应用强亮度锐化效果
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度参数和色度参数应用强模糊效果
    unsharp=7:7:-2:7:7:-2
    

30.270 untile

将由平铺图像组成的视频分解为单独的图像。

输出视频的帧率是输入视频的帧率乘以平铺的数量。

此滤镜执行与 tile 相反的操作。

该滤镜接受以下选项:

布局

设置网格大小(即行数和列数)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

30.270.1 示例

  • 从一个由 25 帧垂直堆叠的静止图像文件生成一个 1 秒的视频,就像一个模拟胶片卷一样
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

30.271 uspp

应用超慢/简单的后处理滤镜,在几个(或者在 quality 等级为 8 的情况下为所有)偏移处压缩和解压缩图像,并对结果取平均值。

这与 spp 行为的不同之处在于,uspp 实际上使用 libavcodec Snow 对每种情况进行编码和解码,而 spp 使用类似于 MJPEG 的简化版仅帧内 8x8 DCT。

此滤镜在 5.0 到 6.0 之间的 ffmpeg 版本中不可用。

该滤镜接受以下选项:

quality

设置质量。此选项定义平均值的级别数。它接受 0-8 范围内的整数。如果设置为 0,则滤镜将不起作用。值为 8 表示更高质量。该值的每次增加,速度都会下降大约 2 倍。默认值为 3

量化参数 (qp)

强制使用恒定量化参数。如果未设置,则过滤器将使用视频流中的 QP(如果可用)。

codec

使用指定的编解码器代替 snow。

30.272 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

up

d

down

f

向前

b

向后

默认值为 rludfb

in_frot
out_frot

设置输入/输出立方体贴图的面旋转。为每个位置选择一个角度。

角度的指定

0

顺时针 0 度

1

顺时针 90 度

2

顺时针 180 度

3

顺时针 270 度

默认值为 000000

eac

等角立方体贴图。

flat
gnomonic
rectilinear

普通视频。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

dfisheye

双鱼眼。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

barrel
fb
barrelsplit

Facebook 的 360 度格式。

sg

立体投影格式。

格式特定选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视场。值为度。

如果设置了对角线视场,则它将覆盖水平和垂直视场。

mercator

墨卡托格式。

ball

球体格式,在背面产生明显的失真。

hammer

Hammer-Aitoff 地图投影格式。

sinusoidal

正弦地图投影格式。

鱼眼

鱼眼投影。

格式特定选项

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
最近邻

最近邻。

line
linear

双线性插值。

lagrange9

拉格朗日 9 插值。

cube
cubic

双三次插值。

lanc
lanczos

兰索斯插值。

sp16
spline16

样条 16 插值。

gauss
gaussian

高斯插值。

mitchell

米切尔插值。

默认值为 line

w
h

设置输出视频分辨率。

默认分辨率取决于格式。

in_stereo
out_stereo

设置输入/输出立体格式。

2d

2D 单声道

sbs

并排

tb

顶部底部

输入和输出格式的默认值为 2d

yaw
pitch
roll

设置输出视频的旋转。值为度。

rorder

设置输出视频的旋转顺序。为每个位置选择一个项目。

y, Y

yaw

p, P

pitch

r, R

roll

默认值为 ypr

h_flip
v_flip
d_flip

水平翻转输出视频(左右互换)/垂直翻转(上下互换)/深度翻转(前后互换)。布尔值。

ih_flip
iv_flip

设置输入视频是否水平/垂直翻转。布尔值。

in_trans

设置输入视频是否转置。布尔值,默认禁用。

out_trans

设置输出视频是否需要转置。布尔值,默认禁用。

h_offset
v_offset

设置输出水平/垂直偏轴偏移量。默认设置为 0。允许的范围是 -1 到 1。

alpha_mask

通过将所有未映射的像素标记为完全透明,在 alpha 通道中构建遮罩。布尔值,默认禁用。

reset_rot

重置输出视频的旋转。布尔值,默认禁用。

30.272.1 示例

  • 使用双三次插值将等距柱状投影视频转换为 3x2 布局和 1% 填充的立方体贴图
    ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
    
  • 提取等角立方体贴图的后视图
    ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
    
  • 将并排立体格式的转置和水平翻转的等角立方体贴图转换为上下立体格式的等距柱状投影
    v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
    

30.272.2 命令

此滤镜支持上述选项的子集作为命令

30.273 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

要处理的平面的列表。默认情况下,处理所有平面。

type

滤镜将使用的阈值类型。

它接受以下值

universal

所有分解都使用相同的阈值。

bayes

使用的阈值也取决于每个分解系数。

默认为 universal。

30.274 varblur

通过使用第二个视频流设置模糊半径,应用可变模糊滤镜。第二个流必须具有相同的尺寸。

此滤波器接受以下选项

min_r

设置允许的最小半径。允许的范围是 0 到 254。默认值为 0。

max_r

设置允许的最大半径。允许的范围是 1 到 255。默认值为 8。

planes

设置要处理的平面。默认情况下,使用所有平面。

varblur 滤镜也支持 framesync 选项。

30.274.1 命令

此滤镜支持上述所有选项作为命令

30.275 vectorscope

在二维图形(称为矢量示波器)中显示 2 个颜色分量值。

此滤波器接受以下选项

mode, m

设置矢量示波器模式。

它接受以下值

gray
tint

灰度值显示在图形上,亮度越高意味着在图形上的位置有更多像素具有相同的分量颜色值。这是默认模式。

color

灰度值显示在图形上。视频帧中不存在的周围像素值以由选项 xy 设置的 2 个颜色分量的梯度绘制。第 3 个颜色分量是静态的。

color2

视频帧中存在的实际颜色分量值显示在图形上。

color3

与 color2 类似,但图形上相同值 xy 的频率越高,另一个颜色分量的值就越高,默认情况下,该颜色分量是亮度,由 xy 的值表示。

color4

视频帧中存在的实际颜色显示在图形上。如果两种不同的颜色映射到图形上的同一位置,则选择图形中不存在的分量值较高的颜色。

color5

灰度值显示在图形上。类似于 color,但第 3 个颜色分量是从径向梯度中选择的。

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

默认为 auto。

tint0, t0
tint1, t1

设置灰度/色调矢量示波器模式的颜色色调。默认情况下,两个选项都为零。这意味着没有色调,输出将保持灰色。

30.276 vidstabdetect

分析视频稳定/去抖动。执行 2 次传递中的第 1 次,有关第 2 次传递,请参见 vidstabtransform

此滤镜生成一个文件,其中包含关于后续帧的相对平移和旋转变换信息,然后由 vidstabtransform 滤镜使用。

要启用此滤镜的编译,您需要使用 --enable-libvidstab 配置 FFmpeg。

此滤波器接受以下选项

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.276.1 示例

  • 使用默认值
    vidstabdetect
    
  • 分析剧烈抖动的视频,并将结果放入文件 mytransforms.trf
    vidstabdetect=shakiness=10:accuracy=15:result="mytransforms.trf"
    
  • 可视化结果视频中的内部变换结果
    vidstabdetect=show=1
    
  • 使用 ffmpeg 分析中等抖动的视频
    ffmpeg -i input -vf vidstabdetect=shakiness=5:show=1 dummy.avi
    

30.277 vidstabtransform

视频稳定/去抖动:第 2 次(共 2 次),请参阅 vidstabdetect 进行第 1 次。

读取每个帧的变换信息文件并应用/补偿它们。与 vidstabdetect 滤镜一起使用,可以用来去抖动视频。另请参阅 http://public.hronopik.de/vid.stab。重要的是还要使用 unsharp 滤镜,见下文。

要启用此滤镜的编译,您需要使用 --enable-libvidstab 配置 FFmpeg。

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

请注意,此处计算的值会添加到 zoom 给定的值中。

zoomspeed

设置每帧最大缩放百分比(当 optzoom 设置为 2 时启用)。范围从 0 到 5,默认值为 0.25。

interpol

指定插值类型。

可用值为

no

无插值

linear

仅水平方向线性插值

bilinear

两个方向上的线性插值(默认)

bicubic

两个方向上的三次插值(慢)

tripod

如果设置为 1,则启用虚拟三脚架模式,这等效于 relative=0:smoothing=0。默认值为 0。

同时使用 vidstabdetecttripod 选项。

debug

如果设置为 1,则增加日志详细程度。此外,检测到的全局运动也会写入临时文件 global_motions.trf。默认值为 0。

30.277.2 示例

  • 使用 ffmpeg 进行默认值的典型稳定
    ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
    

    请注意使用 unsharp 滤镜,始终建议使用。

  • 稍微放大一点,并从给定文件加载变换数据
    vidstabtransform=zoom=5:input="mytransforms.trf"
    
  • 进一步平滑视频
    vidstabtransform=smoothing=30
    

30.278 vflip

垂直翻转输入视频。

例如,使用 ffmpeg 垂直翻转视频

ffmpeg -i in.avi -vf "vflip" out.avi

30.279 vfrdet

检测可变帧率视频。

此滤镜尝试检测输入是可变帧率还是恒定帧率。

最后,它将输出检测到的具有可变增量 pts 的帧数和具有恒定增量 pts 的帧数。如果存在具有可变增量的帧,则它还将显示遇到的最小、最大和平均增量。

30.280 vibrance

增强或改变饱和度。

该滤镜接受以下选项:

intensity

设置增强强度(如果为正值)或改变强度(如果为负值)。默认值为 0。允许的范围为 -2 到 2。

rbal

设置红色平衡。默认值为 1。允许的范围为 -10 到 10。

gbal

设置绿色平衡。默认值为 1。允许的范围为 -10 到 10。

bbal

设置蓝色平衡。默认值为 1。允许的范围为 -10 到 10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

alternate

如果 intensity 为负值,并且此项设置为 1,则颜色将发生变化,否则颜色将不那么饱和,更接近灰色。

30.280.1 命令

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

30.281 vif

获取两个输入视频之间的平均 VIF(视觉信息保真度)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,这些帧逐个进行比较。

获得的平均 VIF 分数通过日志记录系统打印。

该滤镜存储每帧计算的 VIF 分数。

此滤镜还支持 framesync 选项。

在下面的示例中,将正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

30.282 vignette

制作或反转自然的晕影效果。

该滤镜接受以下选项:

角度,a

将镜头角度表达式设置为弧度数。

该值被截断在 [0,PI/2] 范围内。

默认值:"PI/5"

x0
y0

设置中心坐标表达式。默认情况下分别为 "w/2""h/2"

mode

设置向前/向后模式。

可用的模式为

forward

距离中心点越远,图像就越暗。

backward

距离中心点越远,图像就越亮。这可用于反转晕影效果,尽管没有自动检测来提取镜头 angle 和其他设置(尚未)。它也可以用来创建燃烧效果。

默认值为 ‘forward’。

eval

设置表达式(anglex0y0)的评估模式。

它接受以下值

init

仅在滤镜初始化期间评估表达式一次。

frame

为每个传入帧评估表达式。这比 ‘init’ 模式慢得多,因为它需要重新计算所有缩放器,但它允许高级动态表达式。

默认值为 ‘init’。

dither

设置抖动以减少圆形条带效应。默认值为 1(启用)。

aspect

设置晕影纵横比。此设置允许调整晕影的形状。将此值设置为输入的 SAR 将使晕影成为遵循视频尺寸的矩形。

默认值为 1/1

30.282.1 表达式

alphax0y0 表达式可以包含以下参数。

w
h

输入宽度和高度

n

输入帧的数量,从 0 开始

pts

过滤视频帧的 PTS(显示时间戳)时间,以 TB 单位表示,如果未定义,则为 NAN

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

过滤视频帧的 PTS(显示时间戳),以秒为单位表示,如果未定义,则为 NAN

tb

输入视频的时间基准

30.282.2 示例

  • 应用简单的强晕影效果
    vignette=PI/4
    
  • 制作闪烁的晕影
    vignette='PI/4+random(1)*PI/50':eval=frame
    

30.283 vmafmotion

获取视频的平均 VMAF 运动得分。它是 VMAF 的组成指标之一。

获得的平均运动得分通过日志记录系统打印。

该滤镜接受以下选项:

stats_file

如果指定,则滤镜将使用指定的文件来保存每帧相对于前一帧的运动得分。当文件名等于“-”时,数据将发送到标准输出。

示例

ffmpeg -i ref.mpg -vf vmafmotion -f null -

30.284 vstack

垂直堆叠输入视频。

所有流必须具有相同的像素格式和相同的宽度。

请注意,此滤镜比使用 overlaypad 滤镜创建相同输出的速度更快。

该滤镜接受以下选项:

输入

设置输入流的数量。默认为 2。

shortest

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

30.285 w3fdif

对输入视频进行反交错(“w3fdif”代表“Weston 3 场反交错滤波器”)。

基于 Martin Weston 为 BBC R&D 描述的过程,并基于 Jim Easterbrook 为 BBC R&D 编写的反交错算法实现,Weston 3 场反交错滤波器使用 BBC R&D 计算的滤波器系数。

此滤波器使用帧中的场优势信息来决定将每一对场中的哪个场首先放置在输出中。如果它弄错了,请在使用 w3fdif 滤波器之前使用 setfield 滤波器。

有两组滤波器系数,分别称为“简单”和“复杂”。可以通过传递一个可选参数来设置使用哪一组滤波器系数。

filter

设置反交错滤波器系数。接受以下值之一

simple

简单滤波器系数组。

complex

更复杂的滤波器系数组。

默认值为“complex”。

mode

要采用的隔行扫描模式。它接受以下值之一:

frame

每个帧输出一个帧。

field

每个场输出一个帧。

默认值为 field

parity

输入隔行扫描视频所假定的图像场奇偶性。它接受以下值之一:

tff

假设顶场优先。

bff

假设底场优先。

auto

启用场奇偶性的自动检测。

默认值为 auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

all

对所有帧进行反交错,

interlaced

仅反交错标记为隔行扫描的帧。

默认值为“all”。

30.285.1 命令

此滤镜支持与选项相同的 命令

30.286 waveform

视频波形监视器。

波形监视器绘制颜色分量强度。默认情况下仅绘制亮度。波形的每一列对应于源视频中的一列像素。

它接受以下选项

mode, m

可以是 rowcolumn。默认值为 column。在行模式下,左侧的图形表示颜色分量值 0,右侧表示值 = 255。在列模式下,顶部表示颜色分量值 = 0,底部表示值 = 255。

intensity, i

设置强度。较小的值有助于找出相同亮度的值在输入行/列中的分布情况。默认值为 0.04。允许的范围为 [0, 1]。

镜像, r

设置镜像模式。0 表示不镜像,1 表示镜像。在镜像模式下,对于 row 模式,较高的值将显示在左侧,对于 column 模式,较高的值将显示在顶部。默认值为 1(镜像)。

显示, d

设置显示模式。它接受以下值

overlay’(叠加)

呈现与 parade 中相同的信息,只是表示颜色分量的图形直接叠加在一起。

此显示模式可以更容易地发现颜色分量的重叠区域中相对的差异或相似之处,这些颜色分量应该相同,例如中性白色、灰色或黑色。

stack

row 模式下并排显示颜色分量的单独图形,或者在 column 模式下一个接一个地显示颜色分量的单独图形。

parade

column 模式下并排显示颜色分量的单独图形,或者在 row 模式下一个接一个地显示颜色分量的单独图形。

使用此显示模式可以很容易地发现图像高光和阴影中的色偏,方法是比较每个波形的顶部和底部图形的轮廓。由于白色、灰色和黑色的特点是红色、绿色和蓝色量完全相等,因此图片的中心区域应显示三个宽度/高度大致相等的波形。如果不是,则可以通过对三个波形进行电平调整来轻松进行校正。

默认值为 stack

components, c

设置要显示的颜色分量。默认值为 1,表示如果输入为 RGB 色彩空间,则仅显示亮度或红色分量。例如,如果设置为 7,则将显示所有 3 个(如果)可用的颜色分量。

envelope, e
none

无包络,这是默认值。

instant

即时包络,即使 step 值很小,图形中呈现的最小值和最大值也将很容易看到。

peak

在时间上保持图形中呈现的最小值和最大值。这样,您仍然可以发现超出范围的值,而无需一直查看波形。

peak+instant

峰值和即时包络组合在一起。

滤波器, f
lowpass

不进行滤波,这是默认值。

flat

亮度和色度组合在一起。

aflat

与上面类似,但显示蓝色和红色色度之间的差异。

xflat

与上面类似,但使用不同的颜色。

yflat

与上面类似,但再次使用不同的颜色。

chroma

仅显示色度。

color

在波形上显示实际颜色值。

acolor

与上面类似,但亮度显示色度值的频率。

graticule, g

设置要显示的格线。

none

不显示格线。

green

显示绿色格线,显示合法的广播范围。

orange

显示橙色格线,显示合法的广播范围。

invert

显示反向格线,显示合法的广播范围。

opacity, o

设置刻度不透明度。

标志, fl

设置刻度标志。

numbers

在线条上方绘制数字。默认情况下启用。

dots

绘制点而不是线。

缩放, s

设置用于显示格线的缩放比例。

digital
millivolts
ire

默认值为数字。

bgopacity, b

设置背景不透明度。

tint0, t0
tint1, t1

设置输出的色调。仅在低通滤波器且显示不是叠加并且输入像素格式不是 RGB 时使用。

fitmode, fm

设置视频输出帧的样本纵横比。可用于配置波形,使其不会在一个方向上过度拉伸。

none

将样本纵横比设置为 1/1。

size

设置样本纵横比以匹配视频的输入大小。

默认值为“none”。

input

设置滤波器要从中选择的输入格式。可以是“all”,用于从所有可用格式中选择,也可以是“first”,用于选择第一个可用的格式。默认值为“first”。

30.287 weave, doubleweave

weave 获取基于场的视频输入,并将每个连续的两个场连接成一个帧,从而生成一个新的双倍高度的剪辑,帧率和帧数减半。

doubleweave 的工作方式与 weave 相同,但不会使帧率和帧数减半。

它接受以下选项

first_field

设置第一个场。可用值为

top, t

将帧设置为顶场优先。

bottom, b

将帧设置为底场优先。

30.287.1 示例

  • 使用 selectseparatefields 滤波器交错视频。
    separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
    

30.288 xbr

应用专为像素艺术设计的高质量 xBR 放大滤波器。它遵循一组边缘检测规则,请参阅 https://forums.libretro.com/t/xbr-algorithm-tutorial/123

它接受以下选项

n

设置缩放维度:2 表示 2xBR3 表示 3xBR4 表示 4xBR。默认值为 3

30.289 xcorrelate

应用第一个和第二个输入视频流之间的归一化互相关。

第二个输入视频流的尺寸必须小于第一个输入视频流。

该滤镜接受以下选项:

planes

设置要处理的平面。

次要

设置将从第二个输入视频流处理哪些次要视频帧,可以是 firstall。默认值为 all

xcorrelate 滤波器还支持 framesync 选项。

30.290 xfade

应用从一个输入视频流到另一个输入视频流的交叉淡入淡出。交叉淡入淡出应用于指定的持续时间。

两个输入都必须是恒定帧率,并且具有相同的分辨率、像素格式、帧率和时基。

该滤镜接受以下选项:

过渡

设置可用的过渡效果之一

custom
fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown
circlecrop
rectcrop
distance
fadeblack
fadewhite
radial
smoothleft
smoothright
smoothup
smoothdown
circleopen
circleclose
vertopen
vertclose
horzopen
horzclose
dissolve
pixelize
diagtl
diagtr
diagbl
diagbr
hlslice
hrslice
vuslice
vdslice
hblur
fadegrays
wipetl
wipetr
wipebl
wipebr
squeezeh
squeezev
zoomin
fadefast
fadeslow
hlwind
hrwind
vuwind
vdwind
coverleft
coverright
coverup
coverdown
revealleft
revealright
revealup
revealdown

默认的转场效果是淡入淡出。

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.290.1 示例

  • 将一个输入视频淡入淡出到另一个输入视频,使用淡入淡出转场,转场持续时间为 2 秒,从偏移 5 秒开始。
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

30.291 xmedian

从多个输入视频中选择中间像素。

该滤镜接受以下选项:

输入

设置输入数量。默认值为 3。允许的范围是 3 到 255。如果输入数量为偶数,则结果将是两个中间值的平均值。

planes

设置要过滤的平面。默认值为 15,表示处理所有平面。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

30.291.1 命令

此滤镜支持上述所有选项作为命令,但不包括 inputs 选项。

30.292 xpsnr

获取两个输入视频之间的平均值(跨所有输入帧)和最小值(跨所有颜色平面平均值)的扩展感知加权峰值信噪比 (XPSNR)。

XPSNR 是一种低复杂度的心理视觉驱动的失真测量算法,用于评估两个视频流或图像之间的差异。 这对于客观地量化由视频和图像编解码器引起的失真尤其有用,可以替代正式的主观测试。 对数 XPSNR 输出值与传统的 psnr 评估值在相似的范围内,但更好地反映了人类对视觉编码质量的印象。 有关 XPSNR 测量的更多详细信息(它本质上表示 PSNR 测量的分块加权变体),可以在以下免费提供的论文中找到:

  • C. R. Helmrich, M. Siekmann, S. Becker, S. Bosse, D. Marpe, and T. Wiegand, "XPSNR: A Low-Complexity Extension of the Perceptually Weighted Peak Signal-to-Noise Ratio for High-Resolution Video Quality Assessment," in Proc. IEEE Int. Conf. Acoustics, Speech, Sig. Process. (ICASSP), virt./online, May 2020. www.ecodis.de/xpsnr.htm
  • C. R. Helmrich, S. Bosse, H. Schwarz, D. Marpe, and T. Wiegand, "A Study of the Extended Perceptually Weighted Peak Signal-to-Noise Ratio (XPSNR) for Video Compression with Different Resolutions and Bit Depths," ITU Journal: ICT Discoveries, vol. 3, no. 1, pp. 65 - 72, May 2020. http://handle.itu.int/11.1002/pub/8153d78b-en

当发布使用(例如)此 FFmpeg 过滤器获得的 XPSNR 评估结果时,强烈建议参考上述论文作为文档的手段。 该过滤器需要两个输入视频。 第一个输入被认为是(通常没有失真的)参考源,并以未更改的方式传递到输出,而第二个输入是(失真的)测试信号。 除了位深度之外,这两个视频输入必须具有相同的像素格式。 此外,为了获得最佳性能,两个比较的输入视频都应采用 YCbCr 颜色格式。

通过日志系统打印上述获得的整体 XPSNR 值。 对于具有多个颜色平面的输入,我们建议报告最小的 XPSNR 平均值。

接受以下参数,其行为类似于 psnr 过滤器的参数:

stats_file, f

如果指定,过滤器将使用指定的文件来保存每个单独帧和颜色平面的 XPSNR 值。当文件名等于“-”时,该数据将发送到标准输出。

此滤镜还支持 framesync 选项。

30.292.1 示例

  • 对两个 1080p 高清视频 ref_source.yuv 和 test_video.yuv 进行 XPSNR 分析,均为每秒 24 帧,颜色格式为 4:2:0,位深度为 8,并输出名为 "xpsnr.log" 的日志文件。
    ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate
    24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
    
  • 对两个 2160p UHD 视频进行 XPSNR 分析,ref_source.yuv 的位深度为 8,test_video.yuv 的位深度为 10,均为每秒 60 帧,颜色格式为 4:2:0,没有日志文件输出。
    ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate
    60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
    

30.293 xstack

将视频输入堆叠到自定义布局中。

所有流必须具有相同的像素格式。

该滤镜接受以下选项:

输入

设置输入流的数量。默认为 2。

布局

指定输入的布局。 此选项需要用户显式设置所需的布局配置。 这会设置每个视频输入在输出中的位置。 每个输入用“|”分隔。 第一个数字表示列,第二个数字表示行。 数字从 0 开始,并用“_”分隔。 可选地,可以使用 wX 和 hX,其中 X 是从中获取宽度或高度的视频输入。 当用“+”分隔时,可以使用多个值。 在这种情况下,值将被加在一起。

请注意,如果输入的大小不同,则可能会出现间隙,因为并非所有输出视频帧都将被填充。 同样,如果视频的位置没有为相邻视频的完整帧留下足够的空间,则视频可能会相互重叠。

对于 2 个输入,设置默认布局 0_0|w0_0(相当于 grid=2x1)。 在所有其他情况下,用户必须设置布局或网格。 一次只能指定 gridlayout。 同时指定两者会导致错误。

grid

指定输入的固定大小网格。 此选项用于创建输入流的固定大小网格。 以 COLUMNSxROWS 的形式设置网格大小。 必须有 ROWS * COLUMNS 个输入流,它们将排列成具有 ROWS 行和 COLUMNS 列的网格。 使用此选项时,行内的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。

如果设置了 grid,则忽略 inputs 选项,并隐式设置为 ROWS * COLUMNS

对于 2 个输入,设置默认网格 2x1(相当于 layout=0_0|w0_0)。 在所有其他情况下,用户必须设置布局或网格。 一次只能指定 gridlayout。 同时指定两者会导致错误。

shortest

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

fill

如果设置为有效的颜色,则所有未使用的像素都将填充该颜色。 默认情况下,填充设置为无,因此已禁用。

30.293.1 示例

  • 将 4 个输入显示到 2x2 网格中。

    Layout

    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 网格中。

    Layout

    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 网格中。

    Layout

    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 网格中。

    Layout

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

对输入视频进行去隔行处理(“yadif”表示“又一个去隔行过滤器”)。

它接受以下参数

mode

要采用的隔行扫描模式。它接受以下值之一:

0,send_frame

每个帧输出一个帧。

1,send_field

每个场输出一个帧。

2, send_frame_nospatial

send_frame 类似,但它会跳过空间隔行扫描检查。

3, send_field_nospatial

send_field 类似,但它会跳过空间隔行扫描检查。

默认值是 send_frame

parity

输入隔行扫描视频所假定的图像场奇偶性。它接受以下值之一:

0,tff

假设顶场优先。

1,bff

假设底场优先。

-1,auto

启用场奇偶性的自动检测。

默认值为 auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0,all

反交错所有帧。

1,interlaced

仅反交错标记为隔行扫描的帧。

默认值为 all

30.295 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.296 yaepblur

应用模糊滤镜,同时保留边缘(“yaepblur”表示“又一个保留边缘的模糊滤镜”)。 该算法在“J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980.” 中进行了描述。

它接受以下参数

半径,r

设置窗口半径。默认值为 3。

平面,p

设置要过滤的平面。默认值是仅第一个平面。

西格玛, s

设置模糊强度。默认值为 128。

30.296.1 命令

此滤镜支持与选项相同的 命令

30.297 zoompan

应用缩放和平移效果。

此滤波器接受以下选项

缩放,z

设置缩放表达式。范围是 1-10。默认值为 1。

x
y

设置 x 和 y 表达式。默认值为 0。

d

设置持续时间表达式(以帧数为单位)。这将设置单个输入图像效果持续的帧数。默认值为 90。

s

设置输出图像大小,默认值为“hd720”。

fps

设置输出帧率,默认值为“25”。

每个表达式都可以包含以下常量

in_w, iw

输入宽度。

in_h, ih

输入高度。

输出宽度,ow

输出宽度。

输出高度,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.297.1 示例

  • 放大到 1.5 倍并同时平移到图片中心附近的某个位置
    zoompan=z='min(zoom+0.0015,1.5)':d=700:x='if(gte(zoom,1.5),x,x+1/a)':y='if(gte(zoom,1.5),y,y+1)':s=640x360
    
  • 放大到 1.5 倍并始终平移到图片中心
    zoompan=z='min(zoom+0.0015,1.5)':d=700:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    
  • 与上述相同,但没有暂停
    zoompan=z='min(max(zoom,pzoom)+0.0015,1.5)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    
  • 仅在输入视频的第一秒内将图像中心放大 2 倍
    zoompan=z='if(between(in_time,0,1),2,1)':d=1:x='iw/2-(iw/zoom/2)':y='ih/2-(ih/zoom/2)'
    

30.298 zscale

使用 z.lib 库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg。 要启用此滤镜的编译,您需要使用 --enable-libzimg 配置 FFmpeg。

zscale 滤镜通过更改输出样本纵横比来强制输出显示纵横比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,则 zscale 滤镜会将输入转换为请求的格式。

30.298.1 选项

该滤镜接受以下选项。

宽度,w
高度,h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果 widthw 值为 0,则输出使用输入宽度。如果 heighth 值为 0,则输出使用输入高度。

如果只有一个值为 -n 且 n >= 1,则 zscale 滤镜将使用从另一个指定的维度计算得出的值来保持输入图像的纵横比。 之后,它将确保计算出的维度可被 n 整除,并在必要时调整该值。

如果两个值均为 -n,其中 n >= 1,则其行为将与两个值都设置为 0 的情况相同,如前所述。

有关维度表达式中使用的接受常量列表,请参见下文。

size, s

设置视频大小。有关此选项的语法,请查看 (ffmpeg-utils) ffmpeg-utils 手册中的“视频大小”部分

抖动,d

设置抖动类型。

可能的值为

none
有序
随机
误差扩散

默认为 none。

滤波器, f

设置调整大小的滤镜类型。

可能的值为

双线性
双三次
样条 16
样条 36
lanczos

默认值为双线性插值。

范围, r

设置颜色范围。

可能的值为

input
有限
full

默认值与输入相同。

原色,p

设置颜色原色。

可能的值为

input
709
未指定
170m
240m
2020

默认值与输入相同。

传输,t

设置传输特性。

可能的值为

input
709
未指定
601
linear
2020_10
2020_12
smpte2084
iec61966-2-1
arib-std-b67

默认值与输入相同。

矩阵,m

设置色彩空间矩阵。

可能的值为

input
709
未指定
470bg
170m
2020_ncl
2020_cl

默认值与输入相同。

rangein,rin

设置输入颜色范围。

可能的值为

input
有限
full

默认值与输入相同。

primariesin,pin

设置输入颜色原色。

可能的值为

input
709
未指定
170m
240m
2020

默认值与输入相同。

transferin,tin

设置输入传输特性。

可能的值为

input
709
未指定
601
linear
2020_10
2020_12

默认值与输入相同。

matrixin,min

设置输入色彩空间矩阵。

可能的值为

input
709
未指定
470bg
170m
2020_ncl
2020_cl
色度位置,c

设置输出色度位置。

可能的值为

input
左侧
中心
左上
顶部
左下
底部
色度输入位置,cin

设置输入色度位置。

可能的值为

input
左侧
中心
左上
顶部
左下
底部
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.298.2 命令

此滤波器支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则将其保留为当前值。

31 OpenCL 视频滤镜

以下是当前可用的 OpenCL 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-opencl 配置 FFmpeg。

运行 OpenCL 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device opencl[=name][:device[,key=value...]]

使用给定的设备参数初始化一个名为 nameopencl 类型的新硬件设备。

-filter_hw_device name

将名为 name 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参阅 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

将盒状模糊算法应用于输入视频。

它接受以下参数

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

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

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

为用于模糊相应输入平面的盒半径(以像素为单位)设置表达式。

半径值必须是非负数,并且对于亮度和 alpha 平面,不得大于表达式 min(w,h)/2 的值,对于色度平面,不得大于 min(cw,ch)/2 的值。

luma_radius 的默认值为 "2"。如果未指定,chroma_radiusalpha_radius 将默认为为 luma_radius 设置的对应值。

表达式可以包含以下常量

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子采样值。 例如,对于像素格式 "yuv422p",hsub 是 2,vsub 是 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定将盒状模糊滤镜应用于相应平面的次数。

luma_power 的默认值为 2。如果未指定,chroma_poweralpha_power 将默认为为 luma_power 设置的对应值。

值为 0 将禁用该效果。

31.2.1 示例

应用 boxblur 滤镜,将输出的每个像素设置为每个平面对应的框半径 luma_radiuschroma_radiusalpha_radius 的平均值。 该滤镜将对相应平面应用 luma_powerchroma_poweralpha_power 次。 对于图像边缘上的像素,半径不会超出图像边界,因此在计算中不会使用超出范围的坐标。

  • 应用一个 boxblur 滤镜,其中亮度、色度和 alpha 半径设置为 2,亮度、色度和 alpha 功率设置为 3。 该滤镜将对图像的每个平面运行 3 次,其中框半径设置为 2。
    -i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
    -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
    
  • 应用一个 boxblur 滤镜,其中亮度半径设置为 2,亮度功率设置为 1,色度半径设置为 4,色度功率设置为 5,alpha 半径设置为 3,alpha 功率设置为 7。

    对于亮度平面,将运行一次 2x2 框半径。

    对于色度平面,将运行 5 次 4x4 框半径。

    对于 alpha 平面,将运行 7 次 3x3 框半径。

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

31.3 colorkey_opencl

RGB 色彩空间颜色键控。

该滤镜接受以下选项:

color

将被透明度替换的颜色。

similarity

与键颜色的相似度百分比。

0.01 仅匹配确切的键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。

0.0 使像素完全透明,或者根本不透明。

较高的值会导致半透明像素,像素颜色与键颜色越相似,透明度越高。

31.3.1 示例

  • 使输入中的每个半绿色像素透明,并进行一些轻微的混合
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

31.4 convolution_opencl

应用 3x3、5x5、7x7 矩阵的卷积。

该滤镜接受以下选项:

0m
1m
2m
3m

为每个平面设置矩阵。矩阵是由 9、25 或 49 个有符号数字组成的序列。每个平面的默认值为 0 0 0 0 1 0 0 0 0

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面的计算值设置乘数。如果未设置或为 0,则它将是所有矩阵元素的总和。选项值必须是大于或等于 0.0 的浮点数。默认值为 1.0

0bias
1bias
2bias
3bias

为每个平面设置偏置。此值将添加到乘法的结果中。可用于使整体图像更亮或更暗。选项值必须是大于或等于 0.0 的浮点数。默认值为 0.0

31.4.1 示例

  • 应用锐化
    -i INPUT -vf "hwupload, convolution_opencl=0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0:0 -1 0 -1 5 -1 0 -1 0, hwdownload" OUTPUT
    
  • 应用模糊
    -i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1 1 1 1 1 1 1 1 1:1/9:1/9:1/9:1/9, hwdownload" OUTPUT
    
  • 应用边缘增强
    -i INPUT -vf "hwupload, convolution_opencl=0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:0 0 0 -1 1 0 0 0 0:5:1:1:1:0:128:128:128, hwdownload" OUTPUT
    
  • 应用边缘检测
    -i INPUT -vf "hwupload, convolution_opencl=0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:0 1 0 1 -4 1 0 1 0:5:5:5:1:0:128:128:128, hwdownload" OUTPUT
    
  • 应用包含对角线的拉普拉斯边缘检测器
    -i INPUT -vf "hwupload, convolution_opencl=1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:1 1 1 1 -8 1 1 1 1:5:5:5:1:0:128:128:0, hwdownload" OUTPUT
    
  • 应用浮雕
    -i INPUT -vf "hwupload, convolution_opencl=-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2:-2 -1 0 -1 1 1 0 1 2, hwdownload" OUTPUT
    

31.5 erosion_opencl

对视频应用腐蚀效果。

此滤镜将像素替换为局部 (3x3) 最小值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化。范围是 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。范围是 [0, 255],默认值为 255,即使用所有八个像素。

标记以 x 为中心的局部 3x3 坐标区域

1 2 3

4 x 5

6 7 8

31.5.1 示例

  • 应用腐蚀滤镜,阈值 0 设置为 30,阈值 1 设置为 40,阈值 2 设置为 50,坐标设置为 231,将输出的每个像素设置为输入中以其为中心的 3x3 区域的像素:1、2、3、6、7、8 之间的局部最小值。如果输入像素与局部最小值之间的差异大于相应平面的阈值,则输出像素将被设置为输入像素减去相应平面的阈值。
    -i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

31.6 deshake_opencl

基于特征点的视频稳定滤镜。

该滤镜接受以下选项:

tripod

通过阻止摄像机相对于原始帧的任何移动来模拟三脚架。默认为 0

debug

是否应在处理后的输出和控制台中显示其他调试信息。

请注意,要查看控制台调试输出,您还需要将 -v verbose 传递给 ffmpeg。

仅支持 RGB 输入在输出视频中查看匹配的视点。

默认为 0

adaptive_crop

是否在边界处进行少量裁剪以减少镜像像素的数量。

默认为 1

refine_features

是否应在子像素级别优化特征点。

可以关闭此选项以略微提高性能,但会降低精度。

默认为 1

smooth_strength

应用于从 0.01.0 的摄像机路径的平滑强度。

1.0 是最大平滑强度,而小于该值会导致平滑度降低。

0.0 会导致过滤器自适应地为每一帧选择平滑强度。

默认为 0.0

smooth_window_multiplier

控制平滑窗口的大小(用于确定运动信息的缓冲帧数)。

平滑窗口的大小是通过将视频的帧率乘以该数字来确定的。

可接受的值范围为 0.110.0

较大的值会增加可用于确定如何平滑摄像机路径的运动数据量,从而可能提高平滑度,但也增加了延迟和内存使用量。

默认为 2.0

31.6.1 示例

  • 使用固定的中等平滑强度稳定视频
    -i INPUT -vf "hwupload, deshake_opencl=smooth_strength=0.5, hwdownload" OUTPUT
    
  • 使用调试(控制台和渲染视频中)稳定视频
    -i INPUT -filter_complex "[0:v]format=rgba, hwupload, deshake_opencl=debug=1, hwdownload, format=rgba, format=yuv420p" -v verbose OUTPUT
    

31.7 dilation_opencl

对视频应用膨胀效果。

此滤镜将像素替换为局部(3x3)最大值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化。范围是 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

coordinates

指定要引用的像素的标志。范围是 [0, 255],默认值为 255,即使用所有八个像素。

标记以 x 为中心的局部 3x3 坐标区域

1 2 3

4 x 5

6 7 8

31.7.1 示例

  • 应用膨胀滤镜,阈值 0 设置为 30,阈值 1 设置为 40,阈值 2 设置为 50,坐标设置为 231,将输出的每个像素设置为输入中以其为中心的 3x3 区域的像素:1、2、3、6、7、8 之间的局部最大值。如果输入像素与局部最大值之间的差异大于相应平面的阈值,则输出像素将被设置为输入像素加上相应平面的阈值。
    -i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

31.8 nlmeans_opencl

通过 OpenCL 进行非局部均值降噪滤波,此滤波器接受与 nlmeans 相同的选项。

31.9 overlay_opencl

将一个视频叠加在另一个视频之上。

它需要两个输入,并有一个输出。第一个输入是“主”视频,第二个输入在其上覆盖。此过滤器需要所有输入具有相同的内存布局。因此,可能需要进行格式转换。

该滤镜接受以下选项:

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 平面,例如,INPUT 为 yuv420p,而 LOGO 为 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    

31.10 pad_opencl

向输入图像添加填充,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

使用添加的填充指定输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定相对于输出图像的左上边界,输入图像在填充区域内的偏移量。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,使输入图像在填充区域中居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中“颜色”部分

aspect

填充到宽高比而不是分辨率。

widthheightxy 选项的值是包含以下常量的表达式

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

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 算子,比例设置为 2,增量设置为 10。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

31.12 program_opencl

使用 OpenCL 程序过滤视频。

source

OpenCL 程序源文件。

kernel

程序中的内核名称。

输入

过滤器的输入数量。默认为 1。

size, s

输出帧的大小。默认为与第一个输入相同。

program_opencl 过滤器还支持 framesync 选项。

程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。在平面上的每次运行都将作为单独的 2D 全局 NDRange 排队,每个要生成的像素都有一个工作项。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。

内核函数需要采用以下参数

  • 目标图像,__write_only image2d_t

    此图像将成为输出;内核应写入所有内容。

  • 帧索引,unsigned int

    这是一个从零开始计数且每帧加一的计数器。

  • 源图像,__read_only image2d_t

    这些是每个输入上最新的图像。内核可以从中读取以生成输出,但不能写入它们。

示例程序

  • 将输入复制到输出(输出的大小必须与输入的大小相同)。
    __kernel void copy(__write_only image2d_t destination,
                       unsigned int index,
                       __read_only  image2d_t source)
    {
        const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE;
    
        int2 location = (int2)(get_global_id(0), get_global_id(1));
    
        float4 value = read_imagef(source, sampler, location);
    
        write_imagef(destination, location, value);
    }
    
  • 应用简单的转换,使输入旋转的角度随索引计数器而增加。像素值由采样器线性插值,并且输出不必与输入具有相同的尺寸。
    __kernel void rotate_image(__write_only image2d_t dst,
                               unsigned int index,
                               __read_only  image2d_t src)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
    
        float angle = (float)index / 100.0f;
    
        float2 dst_dim = convert_float2(get_image_dim(dst));
        float2 src_dim = convert_float2(get_image_dim(src));
    
        float2 dst_cen = dst_dim / 2.0f;
        float2 src_cen = src_dim / 2.0f;
    
        int2   dst_loc = (int2)(get_global_id(0), get_global_id(1));
    
        float2 dst_pos = convert_float2(dst_loc) - dst_cen;
        float2 src_pos = {
            cos(angle) * dst_pos.x - sin(angle) * dst_pos.y,
            sin(angle) * dst_pos.x + cos(angle) * dst_pos.y
        };
        src_pos = src_pos * src_dim / dst_dim;
    
        float2 src_loc = src_pos + src_cen;
    
        if (src_loc.x < 0.0f      || src_loc.y < 0.0f ||
            src_loc.x > src_dim.x || src_loc.y > src_dim.y)
            write_imagef(dst, dst_loc, 0.5f);
        else
            write_imagef(dst, dst_loc, read_imagef(src, sampler, src_loc));
    }
    
  • 将两个输入混合在一起,每个输入的使用量随索引计数器而变化。
    __kernel void blend_images(__write_only image2d_t dst,
                               unsigned int index,
                               __read_only  image2d_t src1,
                               __read_only  image2d_t src2)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
    
        float blend = (cos((float)index / 50.0f) + 1.0f) / 2.0f;
    
        int2  dst_loc = (int2)(get_global_id(0), get_global_id(1));
        int2 src1_loc = dst_loc * get_image_dim(src1) / get_image_dim(dst);
        int2 src2_loc = dst_loc * get_image_dim(src2) / get_image_dim(dst);
    
        float4 val1 = read_imagef(src1, sampler, src1_loc);
        float4 val2 = read_imagef(src2, sampler, src2_loc);
    
        write_imagef(dst, dst_loc, val1 * blend + val2 * (1.0f - blend));
    }
    

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) 手册中的“颜色”部分。默认颜色为 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 交叉算子,比例设置为 2,增量设置为 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 算子,比例设置为 2,增量设置为 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 中的 param 选项相同。

desat

对超过此亮度级别的高光应用去饱和度。参数越高,保留的颜色信息越多。此设置通过(平滑地)变为白色来帮助防止超高光出现不自然的色彩爆发。这使得图像感觉更自然,但代价是会减少超出范围的颜色信息。

默认值为 0.5,此处的算法与当前 CPU 版本的色调映射略有不同。设置为 0.0 将禁用此选项。

threshold

色调映射算法的参数是针对每个场景进行微调的。并且使用一个阈值来检测场景是否已更改。如果当前帧平均亮度与当前运行平均值之间的距离超过阈值,我们将重新计算场景平均亮度和峰值亮度。默认值为 0.2。

格式

指定输出像素格式。

当前支持的格式有

p010
nv12
范围, r

设置输出颜色范围。

可能的值为

tv/mpeg
pc/jpeg

默认值与输入相同。

原色,p

设置输出颜色原色。

可能的值为

bt709
bt2020

默认值与输入相同。

传输,t

设置输出传输特性。

可能的值为

bt709
bt2020

默认值为 bt709。

矩阵,m

设置输出色彩空间矩阵。

可能的值为

bt709
bt2020

默认值与输入相同。

31.16.1 示例

  • 使用线性算子将 HDR (PQ/HLG) 视频转换为 bt2020-transfer-characteristic 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 通过自定义过渡效果淡入淡出两个视频。

它接受以下选项

过渡

设置一个可能的过渡效果。

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 之间(包含 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 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-vaapi 配置 FFmpeg。

要使用 vaapi 滤镜,您需要正确设置 vaapi 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/VAAPI

32.1 overlay_vaapi

在一个视频之上叠加另一个视频。

它接受两个输入并产生一个输出。第一个输入是“主要”视频,第二个输入叠加在其上。

该滤镜接受以下选项:

x
y

设置主视频上叠加视频的 x 和 y 坐标的表达式。

两个表达式的默认值均为 "0"。

w
h

设置主视频上叠加视频的宽度和高度的表达式。

“w”的默认值为“overlay_iw”, “h”的默认值为 “overlay_ih*w/overlay_iw”。

表达式可以包含以下参数

main_w, W
main_h, H

主输入的宽度和高度。

overlay_iw
overlay_ih

叠加输入的宽度和高度。

overlay_w, w
overlay_h, h

叠加输出宽度和高度。

overlay_x, x
overlay_y, y

叠加层在主视频内的位置

alpha

设置叠加视频的透明度。允许的范围为 0.0 到 1.0。值越高表示透明度越低。默认值为 1.0

eof_action

请参阅 framesync

shortest

请参阅 framesync

repeatlast

请参阅 framesync

此滤镜还支持 framesync 选项。

32.1.1 示例

  • 在输入视频的左上角叠加一个图像 LOGO。此滤镜的两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
    
  • 从输入视频的左上角偏移 (200, 100) 的位置叠加一个图像 LOGO。输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,例如输入为 yuv420p,LOGO 为 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
    

32.2 tonemap_vaapi

执行 HDR 到 SDR 或 HDR 到 HDR 色调映射。它目前仅接受 HDR10 作为输入。

它接受以下参数

格式

指定输出像素格式。

HDR 到 SDR 色调映射的默认值为 nv12,HDR 到 HDR 色调映射的默认值为 p010。

原色,p

设置输出颜色原色。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

传输,t

设置输出传输特性。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

矩阵,m

设置输出色彩空间矩阵。

HDR 到 SDR 色调映射的默认值为 bt709,HDR 到 HDR 色调映射的默认值与输入相同。

display

设置输出母带显示色彩范围。它由以“|”分隔的两个值列表给出,这两个值以空格分隔。它设置显示原色 x & y(按 G、B、R 顺序),然后是白点 x & y,以及标称的最小和最大显示亮度。

设置此选项后,将执行 HDR 到 HDR 色调映射。

light

设置输出内容光照级别信息。它接受 2 个以空格分隔的值,第一个输入是最大光照级别,第二个输入是最大平均光照级别。

它对于 HDR 到 SDR 色调映射将被忽略,对于 HDR 到 HDR 色调映射是可选的。

32.2.1 示例

  • 将 HDR (HDR10) 视频转换为 bt2020-transfer-characteristic 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 变体,每个输入流可能具有不同的高度,此滤镜将缩放每个输入流,同时保持原始纵横比。

它接受以下选项

输入

请参见 hstack

shortest

请参见 hstack

height

设置输出高度。如果设置为 0,则此滤镜会将输出的高度设置为第一个输入流的高度。默认值为 0。

32.4 vstack_vaapi

垂直堆叠输入视频。

这是 vstack 滤镜的 VA-API 变体,每个输入流可能具有不同的宽度,此滤镜将缩放每个输入流,同时保持原始纵横比。

它接受以下选项

输入

请参见 vstack

shortest

请参见 vstack

width

设置输出宽度。如果设置为 0,则此滤镜会将输出的宽度设置为第一个输入流的宽度。默认值为 0。

32.5 xstack_vaapi

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 VA-API 变体,每个输入流可能具有不同的大小,此滤镜将缩放每个输入流到给定的输出大小或第一个输入流的大小。

它接受以下选项

输入

请参见 xstack

shortest

请参见 xstack

布局

请参见 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) 手册中的“视频大小”部分

fill

请参见 xstack

32.6 pad_vaapi

向输入图像添加填充,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

使用添加的填充指定输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定相对于输出图像的左上边界,输入图像在填充区域内的偏移量。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,它们将被更改,使输入图像在填充区域中居中。

color

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中“颜色”部分

aspect

填充到宽高比而不是分辨率。

widthheightxy 选项的值是包含以下常量的表达式

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出的宽度和高度(填充区域的大小),由 widthheight 表达式指定。

ow
oh

这些与 out_wout_h 相同。

x
y

xy 表达式指定的 x 和 y 偏移量,如果尚未指定,则为 NAN。

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示纵横比,与 (iw / ih) * sar 相同

32.7 drawbox_vaapi

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框左上角坐标的表达式。默认为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认为 0。

颜色,c

指定要写入的框的颜色。有关此选项的常规语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分

厚度,t

设置框边缘厚度的表达式。值 fill 将创建一个填充框。默认值为 3

请参见下面的接受常量列表。

replace

当值为 1 时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将框合成到输入视频上。

xywht 的参数是包含以下常量的表达式

in_h, ih
in_w, iw

输入宽度和高度。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制的框的宽度和高度。

t

绘制的框的粗细。

32.7.1 示例

  • 在输入图像的边缘绘制一个黑色框
    drawbox
    
  • 绘制一个红色、不透明度为 50% 的框
    drawbox=10:20:200:60:[email protected]
    

    前面的例子可以指定为

    drawbox=x=10:y=20:w=200:h=60:[email protected]
    
  • 用粉红色填充框
    drawbox=x=10:y=10:w=100:h=100:[email protected]:t=fill
    
  • 绘制一个 2 像素红色、宽高比为 2.40:1 的遮罩
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

33 Vulkan 视频滤镜

以下是当前可用的 Vulkan 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-vulkan 以及 --enable-libglslang--enable-libshaderc 配置 FFmpeg。

运行 Vulkan 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device vulkan[=name][:device[,key=value...]]

使用给定的设备参数和 key=value 中的选项,初始化一个名为 name 的新 vulkan 类型硬件设备。支持以下选项

debug

如果设置为 1,则打开验证层。

linear_images

分配线性图像。不适用于解码。

disable_multiplane

禁用多平面图像。不适用于解码。

-filter_hw_device name

将名为 name 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参阅 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

应用平均模糊滤镜,在 GPU 上使用 Vulkan 实现。

该滤镜接受以下选项:

sizeX

设置水平半径大小。范围为 [1, 32],默认值为 3

sizeY

设置垂直半径大小。范围为 [1, 32],默认值为 3

planes

设置要过滤的平面。默认值是 0xf,表示处理所有平面。

33.2 blend_vulkan

将两个 Vulkan 帧混合在一起。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶”层,第二个输入是“底”层。默认情况下,当最长的输入终止时,输出终止。

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

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

设置特定像素组件或所有像素组件(对于 all_mode)的混合模式。默认值为 normal

组件模式的可用值有:

normal
multiply’(正片叠底)

33.3 bwdif_vulkan

使用 bwdif 的去隔行器,“Bob Weaver 去隔行滤镜”算法,在 GPU 上使用 Vulkan 实现。

它接受以下参数

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

大小

输出帧的大小。默认值为 1920x1080

速率

输出的帧率。默认值为每秒 60 帧。

duration

视频时长。默认值为 -0.000001

sar

视频信号宽高比。默认值为 1/1

格式

输出 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

设置要过滤哪些平面。默认情况下,所有平面都会被过滤。

大小

设置沿水平轴的内核大小。默认值为 19

sizeV

设置沿垂直轴的内核大小。默认值为 0,这将设置为与 size 相同的值。

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。较低的值会减慢速度,从而减少 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

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

33.13 transpose_vulkan

转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,它共享大部分相同的选项。

它接受以下参数

dir

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

passthrough

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

34 QSV 视频滤镜

以下是当前可用的 QSV 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-libmfx--enable-libvpl 配置 FFmpeg。

要使用 QSV 滤镜,您需要正确设置 QSV 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/QuickSync

34.1 hstack_qsv

水平堆叠输入视频。

这是 hstack 滤镜的 QSV 变体,每个输入流可以有不同的高度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。

它接受以下选项

输入

请参见 hstack

shortest

请参见 hstack

height

设置输出高度。如果设置为 0,则此滤镜会将输出的高度设置为第一个输入流的高度。默认值为 0。

34.2 vstack_qsv

垂直堆叠输入视频。

这是 vstack 滤镜的 QSV 变体,每个输入流可以有不同的宽度,此滤镜将在保持原始宽高比的同时缩小/放大每个输入流。

它接受以下选项

输入

请参见 vstack

shortest

请参见 vstack

width

设置输出宽度。如果设置为 0,则此滤镜会将输出的宽度设置为第一个输入流的宽度。默认值为 0。

34.3 xstack_qsv

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 QSV 变体。

它接受以下选项

输入

请参见 xstack

shortest

请参见 xstack

布局

请参见 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) 手册中的“视频大小”部分

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 中的 enum AVPixelFormat 定义),此示例对应于

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,可以将选项指定为扁平字符串,但此语法已弃用

width:height:pix_fmt:time_base.num:time_base.den:pixel_aspect.num:pixel_aspect.den

35.2 cellauto

创建由基本元胞自动机生成的模式。

可以通过 filenamepattern 选项定义元胞自动机的初始状态。如果未指定此类选项,则会随机创建初始状态。

在每个新帧中,视频中的新行都会填充元胞自动机下一代的结果。当整个帧被填充时的行为由 scroll 选项定义。

此源接受以下选项

文件名,f

从指定的文件读取初始元胞自动机状态,即起始行。在该文件中,每个非空格字符都被视为一个活动的单元格,换行符将终止该行,并且文件中进一步的字符将被忽略。

pattern, p

从指定的字符串读取初始元胞自动机状态,即起始行。

字符串中的每个非空格字符都被视为一个活动的单元格,换行符将终止该行,并且字符串中进一步的字符将被忽略。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始细胞自动机行的随机填充率。它是一个介于 0 到 1 之间的浮点数值,默认为 1/PHI。

当指定文件或模式时,此选项将被忽略。

random_seed, seed

设置随机填充初始行的种子,必须是一个介于 0 和 UINT32_MAX 之间的整数。如果未指定,或显式设置为 -1,过滤器将尽最大努力使用一个好的随机种子。

rule

设置细胞自动机规则,它是一个介于 0 到 255 之间的数字。默认值为 110。

size, s

设置输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分

如果指定了 filenamepattern,则默认将大小设置为指定初始状态行的宽度,高度设置为 width * PHI。

如果设置了 size,它必须包含指定模式字符串的宽度,并且指定的模式将位于较大行的中心。

如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。

scroll

如果设置为 1,则当输出中的所有行都已填充时,向上滚动输出。如果设置为 0,则在底部行填充后,新生成的行将覆盖顶行。默认为 1。

start_full, full

如果设置为 1,则在输出第一帧之前,使用生成的行完全填充输出。这是默认行为,要禁用,请将值设置为 0。

stitch

如果设置为 1,则将左右行边缘缝合在一起。这是默认行为,要禁用,请将值设置为 0。

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

在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上生成的视频源。

此视频源是 coreimage 视频过滤器的专用版本。在应用的过滤器链的开头使用 core image 生成器来生成内容。

coreimagesrc 视频源接受以下选项

list_generators

列出所有可用的生成器及其各自的选项,以及可能的最小值和最大值以及默认值。

list_generators=true
size, s

指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分。默认值为 320x240

rate, r

指定源视频的帧率,以每秒生成的帧数表示。它必须是一个格式为 frame_rate_num/frame_rate_den 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为 "25"。

sar

设置源视频的采样纵横比。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)手册中的“时间持续时间”部分

如果未指定,或者表示的持续时间为负,则假定视频将无限期生成。

此外,还接受 coreimage 视频过滤器的所有选项。可以使用完整的过滤器链来进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅 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 的 QRCode 示例,无需 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)手册中的“视频大小”部分。默认值为“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)手册中的“时间持续时间”部分

如果未指定,或者表示的持续时间为负,则假定视频将无限期生成。

speed

设置渐变旋转的速度。

type, t

设置渐变的类型。可用的值有

linear
radial
circular
spiral
square

默认类型为 linear

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)手册中的“视频大小”部分。默认值为“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)手册中的“时间持续时间”部分

如果未指定,或者表示的持续时间为负,则假定视频将无限期生成。

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 头文件并使用 --enable-frei0r 配置 FFmpeg。

此源接受以下参数

大小

要生成的视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分

framerate

生成的视频的帧率。它可以是 num/den 形式的字符串或帧率缩写。

filter_name

要加载的 frei0r 源的名称。有关 frei0r 以及如何设置参数的更多信息,请阅读视频过滤器文档中的 frei0r 部分。

filter_params

要传递给 frei0r 源的以“|”分隔的参数列表。

例如,要生成一个大小为 200x200 且帧率为 10 的 frei0r partik0l 源,该源覆盖在叠加滤镜的主输入之上

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

35.9 life

生成一个生命模式。

此源基于约翰·康威的生命游戏的概括。

源输入表示一个生命网格,每个像素代表一个单元格,该单元格可以处于两种可能的状态之一:存活或死亡。每个单元格与其八个相邻单元格进行交互,这些相邻单元格是在水平、垂直或对角线上相邻的单元格。

在每次交互时,网格根据采用的规则演变,该规则指定了将使单元格保持存活或诞生的相邻存活单元格的数量。rule 选项允许指定要采用的规则。

此源接受以下选项

文件名,f

设置从中读取初始网格状态的文件。在该文件中,每个非空白字符都被视为一个存活单元格,并且换行符用于分隔每一行的末尾。

如果未指定此选项,则会随机生成初始网格。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始随机网格的随机填充率。它是一个介于 0 到 1 之间的浮点数值,默认为 1/PHI。如果指定了文件,则忽略此值。

random_seed, seed

设置用于填充初始随机网格的种子,必须是包含在 0 和 UINT32_MAX 之间的整数。如果未指定,或者如果显式设置为 -1,则过滤器将尽最大努力尝试使用良好的随机种子。

rule

设置生命规则。

可以使用 “SNS/BNB” 形式的代码指定规则,其中 NSNB 是 0-8 范围内的数字序列,NS 指定使存活单元格保持存活的相邻存活单元格的数量,NB 指定使死亡单元格变为存活(即“诞生”)的相邻存活单元格的数量。可以使用 “s” 和 “b” 分别代替 “S” 和 “B”。

或者,可以通过一个 18 位整数指定规则。高 9 位用于编码如果该单元格对于每个数量的相邻存活单元格都存活,则下一个单元格状态,低位指定“诞生”新单元格的规则。高位编码更大的相邻单元格数量。例如,数字 6153 = (12<<9)+9 指定一个存活规则为 12,一个诞生规则为 9,这对应于 “S23/B03”。

默认值为 “S23/B3”,这是最初的康威生命游戏规则,如果一个单元格有 2 个或 3 个相邻的存活单元格,则该单元格将保持存活,如果有 3 个存活的单元格围绕一个死亡的单元格,则将诞生一个新的单元格。

size, s

设置输出视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分

如果指定了 filename,则默认情况下将大小设置为与输入文件的大小相同。如果设置了 size,则必须包含输入文件中指定的大小,并且在该文件中定义的初始网格位于更大的结果区域的中心。

如果未指定文件名,则大小值默认为 “320x240”(用于随机生成的初始网格)。

stitch

如果设置为 1,则将网格的左右边缘拼接在一起,并且上下边缘也拼接在一起。默认为 1。

mold

设置单元格霉变速度。如果设置,则死亡单元格将以 mold 的步长从 death_color 变为 mold_colormold 的值可以是 0 到 255 之间的值。

life_color

设置存活(或新诞生)单元格的颜色。

death_color

设置死亡单元格的颜色。如果设置了 mold,这是用于表示死亡单元格的第一个颜色。

mold_color

设置霉变颜色,用于完全死亡和发霉的单元格。

有关这 3 个颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分

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

生成柏林噪声。

柏林噪声是一种在空间中具有局部连续性的噪声。这可以用来生成在空间和时间上具有连续性的图案,例如模拟烟雾、流体或地形。

如果通过 octaves 选项指定了多个八度音阶,则会生成珀林噪声作为各个分量的总和,每个分量的频率都会翻倍。在这种情况下,persistence 选项指定了相对于前一个分量的幅度比率。更多的八度音阶分量能够在生成的噪声中指定更多的高频细节(例如,由于生成的地形中的巨石而产生的小尺寸变化)。

35.10.1 选项

size, s

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 320x240

rate, r

指定视频流的预期帧率,以每秒帧数表示。默认值为 25

octaves

指定构成噪声的总分量数,每个分量的频率都会翻倍。默认值为 1

persistence

设置用于计算下一个八度音阶分量相对于前一个分量幅度的幅值比率。默认值为 1

xscale
yscale

定义用于乘以 x、y 坐标的比例因子。这对于定义沿 x 轴或 y 轴拉伸的图案效果很有用。默认值为 1

tscale

定义用于乘以时间坐标的比例因子。这对于改变时间变化速度很有用。默认值为 1

random_mode

设置用于计算初始图案的随机模式。

支持的值为

随机

计算并使用随机种子。

ken

使用 Ken Perlin 在原始文章中定义的预定义初始图案,这对于将输出与其他来源进行比较很有用。

seed

使用 random_seed 选项指定的值。

默认值为 random

random_seed, seed

random_mode 设置为 random_seed 时,使用此值计算初始图案。默认值为 0

35.10.2 示例

  • 生成单个分量
    perlin
    
  • 使用 7 个分量的珀林噪声,每个分量对总幅度的贡献减半
    perlin=octaves=7:persistence=0.5
    
  • 将珀林噪声与 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 库生成 QR 代码(请参阅 https://fukuchi.org/works/qrencode/)。

要启用此源的编译,您需要使用 --enable-libqrencode 配置 FFmpeg。

QR 代码从提供的文本或文本模式生成。相应的 QR 代码会根据指定的输出大小选项进行缩放并放置在视频输出中。

如果未指定任何文本,则不会生成 QR 代码,而是返回一个空的彩色输出。

此源接受以下选项

qrcode_width, q
padded_qrcode_width, Q

指定渲染的 QR 码的宽度(带和不带填充)的表达式。qrcode_width 表达式可以引用由 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式仅在初始化源时评估一次。有关详细信息,请参阅 qrencode 表达式部分。

请注意,源缺少一些常量(例如 xtn),因为它们仅在评估每帧的表达式而不是在初始化时才有意义。

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

定义要渲染的文本。如果未指定两者,则不编码 QR(仅为空彩色帧)。

如果启用了展开,则该文本将被视为文本模板,使用 qrencode 展开机制。有关详细信息,请参阅 qrencode 文本展开部分。

background_color, bc
foreground_color, fc

设置二维码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

关于颜色选项的语法,请查看 (ffmpeg-utils) 手册中的“颜色”部分

35.11.1 示例

  • 生成使用默认大小编码指定文本的 QR 代码
    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

allrgb 源返回大小为 4096x4096 的所有 RGB 颜色的帧。

allyuv 源返回大小为 4096x4096 的所有 YUV 颜色的帧。

color 源提供均匀着色的输入。

colorchart 源提供颜色检查图表。

colorspectrum 源提供颜色频谱输入。

haldclutsrc 源提供一个恒等 Hald CLUT。另请参阅 haldclut 滤镜。

nullsrc 源返回未处理的视频帧。它主要用于分析/调试工具,或作为忽略输入数据的滤镜的源。

pal75bars 源生成一个基于 EBU PAL 建议的 75% 颜色级别的彩色条纹图案。

pal100bars 源生成一个基于 EBU PAL 建议的 100% 颜色级别的彩色条纹图案。

rgbtestsrc 源生成一个 RGB 测试图案,用于检测 RGB 与 BGR 问题。您应该看到从上到下的红色、绿色和蓝色条纹。

smptebars 源生成一个基于 SMPTE 工程指南 EG 1-1990 的彩色条纹图案。

smptehdbars 源生成一个基于 SMPTE RP 219-2002 的彩色条纹图案。

testsrc 源生成一个测试视频图案,显示一个颜色图案、一个滚动的渐变和一个时间戳。这主要用于测试目的。

testsrc2 源类似于 testsrc,但支持更多像素格式,而不仅仅是 rgb24。这允许将其用作其他测试的输入,而无需进行格式转换。

yuvtestsrc 源生成一个 YUV 测试图案。您应该看到从上到下的 y、cb 和 cr 条纹。

这些源接受以下参数

level

指定 Hald CLUT 的级别,仅在 haldclutsrc 源中可用。N 级别生成一个 N*N*NN*N*N 像素的图像,用作 3D 查找表的恒等矩阵。每个分量都以 1/(N*N) 比例编码。

颜色,c

指定源的颜色,仅在 color 源中可用。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分

size, s

指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分。默认值为 320x240

此选项不适用于 allrgballyuvhaldclutsrc 滤镜。

rate, r

指定源视频的帧率,以每秒生成的帧数表示。它必须是一个格式为 frame_rate_num/frame_rate_den 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为 "25"。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)手册中的“时间持续时间”部分

如果未指定,或者表示的持续时间为负,则假定视频将无限期生成。

由于帧率用作时间基准,因此包括最后一帧在内的所有帧都将具有完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上取整。

sar

设置源视频的采样纵横比。

alpha

指定背景的 alpha(不透明度),仅在 testsrc2 源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。

小数位数,n

设置在时间戳中显示的小数位数,仅在 testsrc 源中可用。

显示的时间戳值将对应于原始时间戳值乘以指定值的 10 的幂。默认值为 0。

type

设置颜色频谱的类型,仅在 colorspectrum 源中可用。可以是以下之一

black
white
all
patch_size

设置单色块的补丁大小,仅在 colorchart 源中可用。默认值为 64x64

preset

设置 colorchecker 颜色预设,仅在 colorchart 源中可用。

可用值为

reference
skintones

默认值为 reference

35.12.1 示例

  • 生成一个时长为 5.3 秒的视频,尺寸为 176x144,帧率为每秒 10 帧
    testsrc=duration=5.3:size=qcif:rate=10
    
  • 以下图形描述将生成一个红色源,不透明度为 0.2,尺寸为 “qcif”,帧率为每秒 10 帧
    [email protected]:s=qcif:r=10
    
  • 如果要忽略输入内容,可以使用 nullsrc。以下命令通过使用 geq 滤镜在亮度平面生成噪声
    nullsrc=s=256x256, geq=random(1)*255:128:128
    

35.12.2 命令

color 源支持以下命令

c, color

设置创建的图像的颜色。接受与相应的 color 选项相同的语法。

35.13 openclsrc

使用 OpenCL 程序生成视频。

source

OpenCL 程序源文件。

kernel

程序中的内核名称。

size, s

要生成的帧的大小。必须设置此项。

格式

用于生成帧的像素格式。必须设置此项。

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

生成一个区板测试视频图案。

此源接受以下选项

size, s

设置帧大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为“320x240”。

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils)手册中的“时间持续时间”部分

如果未指定,或者表示的持续时间为负,则假定视频将无限期生成。

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
    
  • 生成圆形区板
    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 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给 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 轴上的位置。

长度

设置显示的音频波的长度(以帧数为单位)。

37.1.1 命令

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

37.2 abitscope

将输入音频转换为视频输出,显示音频位示波器。

该滤镜接受以下选项:

rate, r

设置帧率,以每秒帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 1024x256

颜色

指定由空格或“|”分隔的颜色列表,这些颜色将用于绘制通道。无法识别或缺失的颜色将被白色替换。

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

logarithmic

sqrt

平方根

cbrt

立方根

lin

linear

rlog

反向对数

默认值为 log

ascale

设置振幅比例。

它接受以下值

log

logarithmic

lin

linear

默认值为 log

acount

设置在直方图中累积多少帧。默认值为 1。将其设置为 -1 会累积所有帧。

rheight

设置直方图与窗口高度的比率。

slide

设置声谱图滑动。

它接受以下值

replace

用新的行替换旧的行。

scroll

从上到下滚动。

默认值为 replace

hmode

设置直方图模式。

它接受以下值

abs

使用样本的绝对值。

sign

使用样本的原始值。

默认值为 abs

37.6 aphasemeter

测量输入音频的相位,该相位以元数据 lavfi.aphasemeter.phase 的形式导出,表示当前音频帧的平均相位。还可以生成视频输出,默认情况下启用。音频作为第一个输出传递。

如果音频具有不同的通道布局,则将重新混合为立体声。相位值在 [-1, 1] 范围内,其中 -1 表示左右通道完全异相,而 1 表示通道同相。

该滤镜接受以下选项,所有选项都与其视频输出相关

rate, r

设置输出帧率。默认值为 25

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 800x400

rc
gc
bc

指定红色、绿色、蓝色对比度。默认值分别为 271。允许的范围是 [0, 255]

mpc

设置将用于绘制中值相位的颜色。如果颜色为 none,这是默认值,则不会绘制中值相位值。

video

启用视频输出。默认情况下启用。

37.6.1 相位检测

该滤镜还检测立体声流中的异相和单声道序列。当它持续时间长于或等于设置的最小值时,它会记录序列的开始、结束和持续时间。

该滤镜接受以下选项进行此检测

phasing

启用单声道和异相检测。默认情况下禁用。

tolerance, t

设置单声道检测的相位容差(以振幅比表示)。默认值为 0。允许的范围是 [0, 1]

角度,a

设置异相检测的角度阈值(以度为单位)。默认值为 170。允许的范围是 [90, 180]

duration, d

设置单声道或异相持续时间,直到发出通知,以秒为单位。默认值为 2

37.6.2 示例

  • 使用 ffmpeg 检测 1 秒单声道且相位容差为 0.001 的完整示例
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

37.7 avectorscope

将输入音频转换为视频输出,表示音频矢量示波器。

该滤波器用于测量立体声音频流的通道之间的差异。由相同的左右信号组成的单声道信号会产生一条垂直直线。任何立体声分离都表现为偏离此直线的偏差,从而形成一个利萨茹图形。如果出现直线(或偏离直线的)水平线,则表示左右通道异相。

该滤镜接受以下选项:

mode, m

设置矢量示波器模式。

可用值为

lissajous

利萨茹图形旋转 45 度。

lissajous_xy

与上述相同,但不旋转。

polar

形状类似于半圆。

默认值为 ‘lissajous’。

size, s

设置输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认值为 400x400

rate, r

设置输出帧率。默认值为 25

rc
gc
bc
ac

指定红色、绿色、蓝色和 Alpha 对比度。默认值分别为 4016080255。允许的范围是 [0, 255]

rf
gf
bf
af

指定红色、绿色、蓝色和 Alpha 衰减。默认值分别为 151055。允许的范围是 [0, 255]

zoom

设置缩放因子。默认值为 1。允许的范围是 [0, 10]。小于 1 的值将自动调整缩放因子为最大可能值。

draw

设置矢量示波器绘制模式。

可用值为

dot

为每个采样绘制点。

line

在前一个采样和当前采样之间绘制线条。

aaline

在前一个采样和当前采样之间绘制抗锯齿线条。

默认值为 ‘dot’。

scale

指定音频采样的幅度比例。

可用值为

lin

线性。

sqrt

平方根。

cbrt

立方根。

log

对数。

swap

将左通道轴与右通道轴交换。

mirror

镜像轴。

none

不镜像。

x

仅镜像 x 轴。

y

仅镜像 y 轴。

xy

镜像两个轴。

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 之外,此滤波器支持上述所有选项作为命令。

37.8 bench, abench

滤波器图的一部分的基准测试。

该滤镜接受以下选项:

action

启动或停止计时器。

可用值为

start

获取当前时间,将其设置为帧元数据(使用键 lavfi.bench.start_time),并将帧转发到下一个滤波器。

stop

获取当前时间并从输入帧元数据中提取 lavfi.bench.start_time 元数据,以获取时间差。然后打印时间差、平均时间、最大时间和最小时间(分别为 tavgmaxmin)。时间戳以秒为单位表示。

37.8.1 示例

  • 基准测试 selectivecolor 滤波器
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

37.9 concat

连接音频和视频流,将它们一个接一个地连接在一起。

该滤波器在同步的视频和音频流片段上工作。所有片段必须具有相同数量的每种类型的流,并且这也将是输出的流的数量。

该滤镜接受以下选项:

n

设置片段的数量。默认值为 2。

v

设置输出视频流的数量,这也是每个片段中视频流的数量。默认值为 1。

a

设置输出音频流的数量,这也是每个片段中音频流的数量。默认值为 0。

unsafe

激活不安全模式:如果片段具有不同的格式,则不会失败。

该滤波器有 v+a 个输出:首先是 v 个视频输出,然后是 a 个音频输出。

nx(v+a) 个输入:首先是第一个片段的输入,顺序与输出相同,然后是第二个片段的输入,等等。

相关流并不总是具有完全相同的持续时间,原因包括编解码器帧大小或草率的创作。因此,相关的同步流(例如,视频及其音轨)应一次连接。concat 滤波器将使用每个片段中最长流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。

为了使此滤波器正常工作,所有片段必须从时间戳 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 命令

此滤波器支持以下命令

下一个

关闭当前片段并进入下一个片段

37.10 ebur128

EBU R128 扫描仪滤波器。此滤波器接收音频流并分析其响度级别。默认情况下,它以 10Hz 的频率记录一条消息,其中包含瞬时响度(由 M 标识)、短时响度(S)、集成响度(I)和响度范围(LRA)。

该滤波器只能分析采样格式为双精度浮点数的流。如果需要,输入流将转换为此规范。用户可能需要在该滤波器之后插入 aformat 和/或 aresample 滤波器以获得原始参数。

该滤波器还有一个带有实时图的视频输出(请参阅 video 选项),用于观察响度的变化。图形包含上面提到的记录消息,因此当设置此选项时,不再打印该消息,除非设置了详细日志记录。主图形区域包含短时响度(分析 3 秒),右侧的仪表用于瞬时响度(400 毫秒),但可以选择配置为改为显示短时响度(请参阅 gauge)。

绿色区域标记了以目标响度(默认情况下为 -23LUFS,除非通过 target 修改)为中心的 +/- 1LU 目标范围。

有关响度建议 EBU R128 的更多信息,请访问 http://tech.ebu.ch/loudness

该滤镜接受以下选项:

video

激活视频输出。无论是否设置此选项,音频流都不会更改。如果激活,视频流将是第一个输出流。默认值为 0

大小

设置视频大小。此选项仅适用于视频。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分。默认和最小分辨率为 640x480

meter

设置 EBU 音量计刻度。默认值为 9。常用值为 918,分别对应 EBU 音量计 +9 和 EBU 音量计 +18。允许使用此范围内的任何其他整数值。

metadata

设置元数据注入。如果设置为 1,音频输入将被分割成 100 毫秒的输出帧,每个帧都包含各种响度信息在元数据中。所有元数据键都以 lavfi.r128. 为前缀。

默认为 0

framelog

强制帧日志记录级别。

可用值为

quiet

禁用日志记录

info

信息日志记录级别

verbose

详细日志记录级别

默认情况下,日志记录级别设置为 info。如果设置了 videometadata 选项,它将切换到 verbose

peak

设置峰值模式。

可累加使用可用模式(该选项为 flag 类型)。可能的值为:

none

禁用任何峰值模式(默认)。

sample

启用采样峰值模式。

简单的峰值模式,查找更高的采样值。它会记录采样峰值消息(由 SPK 标识)。

true

启用真峰值模式。

如果启用,峰值查找将在输入的过采样版本上完成,以获得更好的峰值精度。它会记录真峰值消息(由 TPK 标识)和每帧真峰值(由 FTPK 标识)。此模式需要使用 libswresample 构建。

dualmono

将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,其 EBU R128 测量结果在感知上是不正确的。如果设置为 true,此选项将补偿此效果。多声道输入文件不受此选项的影响。

panlaw

设置用于测量双单声道文件的特定声像定律。此参数是可选的,默认值为 -3.01dB。

target

设置一个特定的目标级别(以 LUFS 为单位),用作可视化中的相对零点。此参数是可选的,默认值为 EBU R128 指定的 -23LUFS。但是,在线发布的内容可能更喜欢 -16LUFS 的级别(例如,用于播客或视频平台)。

gauge

设置仪表显示的值。有效值为 momentaryshortterm。默认情况下将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如,现场混音)。

scale

设置响度的显示比例。有效参数为 absolute (以 LUFS 为单位) 或 relative (以 LU 为单位),相对于目标值。这仅影响视频输出,不影响摘要或连续日志输出。

integrated

测量到的综合响度的只读导出值,以 LUFS 为单位。

range

测量到的响度范围的只读导出值,以 LU 为单位。

lra_low

测量到的 LRA 低值的只读导出值,以 LUFS 为单位。

lra_high

测量到的 LRA 高值的只读导出值,以 LUFS 为单位。

sample_peak

测量到的采样峰值的只读导出值,以 dBFS 为单位。

true_peak

测量到的真峰值的只读导出值,以 dBFS 为单位。

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 interleave, ainterleave

按时间顺序交错来自多个输入的帧。

interleave 用于视频输入,ainterleave 用于音频。

这些过滤器从多个输入读取帧,并将最早排队的帧发送到输出。

输入流必须具有定义良好的、单调递增的帧时间戳值。

为了向输出提交一帧,这些过滤器需要为每个输入至少入队一帧,因此如果一个输入尚未终止并且不会接收到传入帧,它们将无法工作。

例如,考虑一个输入是 select 过滤器的情况,该过滤器始终丢弃输入帧。interleave 过滤器将继续从该输入读取,但直到输入发送流结束信号,它都将无法向输出发送新帧。

此外,根据输入同步情况,如果一个输入接收的帧数多于其他输入,并且队列已满,则过滤器将丢弃帧。

这些过滤器接受以下选项:

nb_inputs, n

设置不同的输入数量,默认为 2。

duration

如何确定流的结束。

最长

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

shortest

最短输入的持续时间。

第一个

第一个输入的持续时间。

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 latency, alatency

测量滤波延迟。

报告前一个过滤器在滤波器图中的滤波延迟,对于音频滤波器,延迟以音频样本数量表示;对于视频滤波器,延迟以视频帧数量表示。

在输入流结束时,过滤器将报告过滤器图中先前运行的过滤器的最小和最大测量延迟。

37.13 metadata, ametadata

操作帧元数据。

此滤波器接受以下选项

mode

设置过滤器的操作模式。

可以是以下值之一

select

如果同时设置了 valuekey,则选择具有此类元数据的帧。如果仅设置了 key,则选择每个元数据中具有此类键的帧。

add

添加新的元数据 keyvalue。如果键已经存在,则不执行任何操作。

modify

修改已存在键的值。

delete

如果设置了 value,则仅删除具有此类值的键。否则,删除键。如果未设置 key,则删除帧中的所有元数据值。

print

如果找到元数据,则打印键及其值。如果未设置 key,则打印帧中所有可用的元数据值。

key

设置所有模式使用的键。除 printdelete 外,必须为所有模式设置。

value

设置将要使用的元数据值。此选项对于 modifyadd 模式是强制性的。

function

比较元数据值和 value 时使用的函数。

可以是以下之一:

same_str

值被解释为字符串,如果元数据值与 value 相同,则返回 true。

starts_with

值被解释为字符串,如果元数据值以 value 选项字符串开头,则返回 true。

less

值被解释为浮点数,如果元数据值小于 value,则返回 true。

equal

值被解释为浮点数,如果 value 等于元数据值,则返回 true。

greater

值被解释为浮点数,如果元数据值大于 value,则返回 true。

expr

值被解释为浮点数,如果选项 expr 中的表达式求值为 true,则返回 true。

ends_with

值被解释为字符串,如果元数据值以 value 选项字符串结尾,则返回 true。

expr

function 设置为 expr 时使用的表达式。该表达式通过 eval API 计算,并且可以包含以下常量

VALUE1, FRAMEVAL

来自元数据键的 value 的浮点数表示。

VALUE2, USERVAL

用户在 value 选项中提供的 value 的浮点数表示。

file

如果在 print 模式下指定,则输出将写入指定的命名文件。除了普通文件名外,还可以指定任何可写入的 URL。文件名 “-” 是标准输出的简写。如果未设置 file 选项,则输出将写入 AV_LOG_INFO 日志级别的日志中。

direct

当使用 file 设置的 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

设置 random 模式的种子,必须是介于 0UINT32_MAX 之间的整数。如果未指定,或者显式设置为 -1,则滤镜将尽力使用一个良好的随机种子。

注意:如果在权限滤镜和后面的滤镜之间自动插入滤镜,则权限可能不会在后面的滤镜中按预期接收。在 perms/aperms 滤镜之前插入 formataformat 滤镜可以避免此问题。

37.15 realtime, arealtime

减慢滤镜处理速度以大致匹配实时速度。

这些滤镜将暂停滤镜处理一段时间,以使输出速率与输入时间戳匹配。它们类似于 ffmpegre 选项。

它们接受以下选项

限制

暂停的时间限制。任何超过此时间的暂停都将被视为时间戳不连续并重置计时器。默认为 2 秒。

speed

处理速度因子。该值必须是大于零的浮点数。大于 1.0 的值将导致处理速度快于实时,较小的值将减慢处理速度。 limit 会自动进行相应的调整。默认为 1.0。

无法实现比没有这些滤镜的处理速度更快的速度。

37.15.1 命令

两个滤镜都支持以上所有选项,作为 命令

37.16 segment, asegment

将单个输入流拆分为多个流。

此滤镜与 concat 滤镜的功能相反。

segment 作用于视频帧,asegment 作用于音频样本。

此滤波器接受以下选项

时间戳

由 ' | ' 分隔的输出片段的时间戳。第一个片段将从输入流的开头开始运行。最后一个片段将运行到输入流的结尾

帧数,样本数

用于拆分片段的确切帧/样本计数。

在所有情况下,在每个片段前加上 ' + ' 将使其相对于上一个片段。

37.16.1 示例

  • 将输入音频流拆分为三个输出音频流,从输入音频流的开头开始,存储在第一个输出音频流中,然后在第 60 秒开始,存储在第二个输出音频流中,最后在输入音频流的第 150 秒后,存储在第三个输出音频流中
    asegment=timestamps="60|150"
    

37.17 select, aselect

选择要在输出中传递的帧。

此滤波器接受以下选项

表达式, e

设置表达式,该表达式将为每个输入帧进行计算。

如果表达式的计算结果为零,则丢弃该帧。

如果计算结果为负数或 NaN,则将该帧发送到第一个输出;否则,将其发送到索引为 ceil(val)-1 的输出,假设输入索引从 0 开始。

例如,值 1.2 对应于索引为 ceil(1.2)-1 = 2-1 = 1 的输出,即第二个输出。

输出数,n

设置输出的数量。发送所选帧的输出基于计算结果。默认值为 1。

该表达式可以包含以下常量

n

经过滤镜处理的帧的(顺序)编号,从 0 开始。

selected_n

所选帧的(顺序)编号,从 0 开始。

prev_selected_n

上一个选定帧的顺序编号。如果未定义,则为 NAN。

TB

输入时间戳的时间基。

pts

经过滤镜处理的帧的 PTS(Presentation TimeStamp),以 TB 单位表示。如果未定义,则为 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

concat demuxer 可以通过设置入点和出点来选择 concat 输入文件的部分内容,但是输出数据包可能不会完全包含在选定的间隔中。通过使用此变量,可以跳过由 concat demuxer 生成的,但未完全包含在选定间隔中的帧。

这是通过比较帧 pts 和 lavf.concat.start_timelavf.concat.duration 数据包元数据值来实现的,这些值也存在于解码帧中。

如果帧时间戳 (pts) 大于等于 start_time,且持续时间元数据缺失或帧时间戳小于 start_time + duration,则 concatdec_select 变量为 -1;否则为 0;如果 start_time 元数据缺失,则为 NaN。

这基本上意味着,如果输入帧的 pts 在 concat 解复用器设置的间隔内,则该帧会被选中。

iw (仅限视频)

表示输入视频帧的宽度。

ih (仅限视频)

表示输入视频帧的高度。

view (仅限视频)

多视图视频的视图 ID。

select 表达式的默认值为 "1"。

37.17.1 示例

  • 选择输入中的所有帧
    select
    

    上面的例子等同于

    select=1
    
  • 跳过所有帧
    select=0
    
  • 仅选择 I 帧
    select='eq(pict_type\,I)'
    
  • 每 100 帧选择一帧
    select='not(mod(n\,100))'
    
  • 仅选择包含在 10-20 时间间隔内的帧
    select=between(t\,10\,20)
    
  • 仅选择包含在 10-20 时间间隔内的 I 帧
    select=between(t\,10\,20)*eq(pict_type\,I)
    
  • 选择最小距离为 10 秒的帧
    select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
    
  • 使用 aselect 仅选择样本数 > 100 的音频帧
    aselect='gt(samples_n\,100)'
    
  • 创建第一个场景的马赛克
    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
    

    通常,将 scene 与 0.3 到 0.5 之间的值进行比较是一个明智的选择。

  • 将偶数帧和奇数帧发送到单独的输出,并组合它们
    select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
    
  • 从 ffconcat 文件中选择有用的帧,该文件使用 inpoints 和 outpoints,但源文件不是仅包含帧内帧。
    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

向滤镜图中的滤镜发送命令。

这些滤镜读取要发送到滤镜图中的其他滤镜的命令。

sendcmd 必须插入两个视频滤镜之间,asendcmd 必须插入两个音频滤镜之间,除此之外,它们的行为方式相同。

命令的规范可以在过滤器参数中使用 commands 选项提供,也可以在 filename 选项指定的文件中提供。

这些过滤器接受以下选项:

commands, c

设置要读取并发送到其他过滤器的命令。

文件名,f

设置要读取并发送到其他过滤器的命令的文件名。

37.18.1 命令语法

命令描述由一系列间隔规范组成,其中包含在与该间隔相关的特定事件发生时要执行的命令列表。发生的事件通常是当前帧时间进入或离开给定时间间隔。

间隔由以下语法指定

START[-END] COMMANDS;

时间间隔由 STARTEND 时间指定。END 是可选的,默认为最大时间。

如果当前帧时间包含在间隔 [START, END) 中,则认为它在该间隔内,即当时间大于或等于 START 且小于 END 时。

COMMANDS 由一个或多个命令规范的序列组成,这些命令规范之间用“,”分隔,并且与该间隔相关。命令规范的语法由下式给出

[FLAGS] TARGET COMMAND ARG

FLAGS 是可选的,它指定与时间间隔相关的事件类型,这些事件类型可以启用发送指定的命令,并且必须是用“+”或“|”分隔并用“[”和“]”括起来的非空标识符标志序列。

可以识别以下标志

enter

当当前帧时间戳进入指定的间隔时,发送命令。换句话说,当上一个帧时间戳不在给定间隔内,而当前帧时间戳在给定间隔内时,将发送命令。

leave

当当前帧时间戳离开指定的间隔时,发送命令。换句话说,当上一个帧时间戳在给定间隔内,而当前帧时间戳不在给定间隔内时,将发送命令。

expr

命令 ARG 被解释为表达式,表达式的结果作为 ARG 传递。

该表达式通过 eval API 进行计算,并且可以包含以下常量

POS

帧在文件中的原始位置,如果当前帧未定义,则未定义。已弃用,请勿使用。

PTS

输入中的显示时间戳。

N

视频或音频输入帧的计数,从 0 开始。

T

当前帧的时间(以秒为单位)。

TS

当前命令间隔的开始时间(以秒为单位)。

TE

当前命令间隔的结束时间(以秒为单位)。

TI

当前命令间隔的内插时间,TI = (T - TS) / (TE - TS)。

W

视频帧宽度。

H

视频帧高度。

如果未指定 FLAGS,则假定默认值为 [enter]

TARGET 指定命令的目标,通常是过滤器类的名称或特定的过滤器实例名称。

COMMAND 指定目标过滤器的命令名称。

ARG 是可选的,它指定给定 COMMAND 的可选参数列表。

在一个间隔规范和另一个间隔规范之间,空白字符或以 # 开头直到行尾的字符序列将被忽略,并且可以用来注释。

命令规范语法的简化 BNF 描述如下

COMMAND_FLAG  ::= "enter" | "leave"
COMMAND_FLAGS ::= COMMAND_FLAG [(+|"|")COMMAND_FLAG]
COMMAND       ::= ["[" COMMAND_FLAGS "]"] TARGET COMMAND [ARG]
COMMANDS      ::= COMMAND [,COMMANDS]
INTERVAL      ::= START[-END] COMMANDS
INTERVALS     ::= INTERVAL[;INTERVALS]

37.18.2 示例

  • 在第 4 秒指定音频速度更改
    asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位特定的过滤器实例
    asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定 drawtext 和 hue 命令列表。
    # show text in the interval 5-10
    5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
             [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
    
    # desaturate the image in the interval 15-20
    15.0-20.0 [enter] hue s 0,
              [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
              [leave] hue s 1,
              [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
    
    # apply an exponential saturation fade-out effect, starting from time 25
    25 [enter] hue s exp(25-t)
    

    一个允许读取和处理存储在 test.cmd 文件中的上述命令列表的滤镜图,可以使用以下方式指定

    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
    

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 过滤器标记输出帧的颜色范围属性。它不会更改输入帧,而只是设置相应的属性,这将影响后续过滤器如何处理该帧。

该滤镜接受以下选项:

range

可用值为

auto

保持相同的颜色范围属性。

保留相同的颜色范围属性(默认)。

将颜色范围设置为未指定。

将帧标记为未指定的颜色范围。

将颜色范围设置为有限。

将帧标记为有限范围。

将颜色范围设置为完整。

37.21 settb, asettb

设置输出帧时间戳使用的时间基准。这主要用于测试时间基准配置。

它接受以下参数

expr, tb

该表达式会被计算为输出时间基准。

tb 的值是一个算术表达式,表示一个有理数。该表达式可以包含常量 "AVTB"(默认时间基准)、"intb"(输入时间基准)和 "sr"(采样率,仅音频)。默认值为 "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

设置全高清分辨率。此选项已弃用,请改用 sizes。默认值为 1

sono_v, volume

指定声谱图音量表达式。它可以包含变量

bar_v

bar_v 的计算表达式

frequency, freq, f

计算时的频率

timeclamp, tc

timeclamp 选项的值

和函数

a_weighting(f)

等响度 A 计权

b_weighting(f)

等响度 B 计权

c_weighting(f)

等响度 C 计权。

默认值为 16

bar_v, volume2

指定条形图音量表达式。它可以包含变量

sono_v

sono_v 的计算表达式

frequency, freq, f

计算时的频率

timeclamp, tc

timeclamp 选项的值

和函数

a_weighting(f)

等响度 A 计权

b_weighting(f)

等响度 B 计权

c_weighting(f)

等响度 C 计权。

默认值为 sono_v

sono_g, gamma

指定声谱图伽玛值。较低的伽玛值使频谱对比度更高,较高的伽玛值使频谱具有更大的范围。默认值为 3。可接受范围为 [1, 7]

bar_g, gamma2

指定条形图伽玛值。默认值为 1。可接受范围为 [1, 7]

bar_t

指定条形图透明度级别。较低的值使条形图更清晰。默认值为 1。可接受范围为 [0, 1]

timeclamp, tc

指定变换时间钳位。在低频时,时域和频域的精度之间存在权衡。如果 timeclamp 较低,则时域中的事件(例如快速低音鼓)表示更准确,否则频域中的事件(例如贝斯吉他)表示更准确。可接受范围为 [0.002, 1]。默认值为 0.17

attack

设置以秒为单位的启动时间。默认值为 0(禁用)。否则,它会通过在时域中应用不对称窗口化来限制未来的采样,当需要低延迟时很有用。可接受的范围是 [0, 1]

basefreq

指定变换的基频。默认值为 20.01523126408007475,即低于 E0 50 音分的频率。可接受范围为 [10, 100000]

endfreq

指定变换的截止频率。默认值为 20495.59681441799654,即高于 D#10 50 音分的频率。可接受范围为 [10, 100000]

coeffclamp

此选项已弃用,将被忽略。

tlength

指定时域中的变换长度。使用此选项可控制每个频率采样在时域和频域之间的精度权衡。它可以包含变量

frequency, freq, f

计算时的频率

timeclamp, tc

timeclamp 选项的值。

默认值为 384*tc/(384+tc*f)

count

指定每个视频帧的变换计数。默认值为 6。可接受范围为 [1, 30]

fcount

指定每个像素的变换计数。默认值为 0,表示自动计算。可接受范围为 [0, 10]

fontfile

指定用于 freetype 绘制轴的字体文件。如果未指定,则使用嵌入式字体。请注意,使用字体文件或嵌入式字体进行绘制时,自定义 basefreqendfreq 不起作用,请改用 axisfile 选项。

font

指定 fontconfig 模式。此选项的优先级低于 fontfile。模式中的 : 可以替换为 |,以避免不必要的转义。

fontcolor

指定字体颜色表达式。这是一个算术表达式,应返回整数值 0xRRGGBB。它可以包含变量

frequency, freq, f

计算时的频率

timeclamp, tc

timeclamp 选项的值

和函数

midi(f)

频率 f 的 midi 数字,一些 midi 数字:E0(16), C1(24), C2(36), A4(69)

r(x), g(x), b(x)

强度 x 的红色、绿色和蓝色值。

默认值为 st(0, (midi(f)-59.5)/12); st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0)); r(1-ld(1)) + b(ld(1))

axisfile

指定用于绘制轴的图像文件。此选项会覆盖 fontfilefontcolor 选项。

axis, text

启用/禁用向轴绘制文本。如果设置为 0,则禁用向轴绘制,忽略 fontfileaxisfile 选项。默认值为 1

csp

设置色彩空间。接受的值为

unspecified

未指定(默认)

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

bt2020ncl

具有非恒定亮度的 BT.2020

cscheme

设置频谱图配色方案。这是浮点数值列表,格式为 left_r|left_g|left_b|right_r|right_g|right_b。默认值为 1|0.5|0|0|0.5|1

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

最小值

设置输出中使用的最小频率。默认为 20 Hz。

最大值

设置输出中使用的最大频率。默认为 20000 Hz。实际频率上限取决于输入音频的采样率,并且当其设置为大于奈奎斯特频率的值时,将强制执行此值。

imin

设置输出中使用的最小强度。

imax

设置输出中使用的最大强度。

logb

设置将计算的幅度值映射到像素值时,亮度强度的对数基数。允许的范围是 01。默认值为 0.0001

deviation

设置频率偏差。小于 1 的值更偏向频率,而大于 1 的值更偏向时间。允许的范围是 010。默认值为 1

pps

设置每秒每行输出的像素数。允许的范围是 11024。默认值为 64

mode

设置输出的视觉模式。允许的值为

magnitude

显示幅度。

phase

仅显示相位。

magphase

显示幅度和相位的组合。幅度映射到亮度,相位映射到颜色。

channel

显示每个通道幅度的独特颜色。

立体声

显示每个立体声差异的独特颜色。

默认值是 magnitude

slide

设置输出滑动方法。允许的值有

replace
scroll
frame
方向

设置输出滑动方法的方向。允许的值有

lr

从左到右的方向。

rl

从右到左的方向。

ud

从上到下的方向。

du

从下到上的方向。

条形

设置条形图显示与显示尺寸的比例。默认值为 0。

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

37.24 showfreqs

将输入音频转换为表示音频功率谱的视频输出。音频振幅在 Y 轴上,而频率在 X 轴上。

该滤镜接受以下选项:

size, s

指定视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 1024x512

rate, r

设置视频帧率。默认值为 25

mode

设置显示模式。这将设置每个频率箱的表示方式。

它接受以下值

line
bar
dot

默认值为 bar

ascale

设置振幅比例。

它接受以下值

lin

线性缩放。

sqrt

平方根缩放。

cbrt

立方根缩放。

log

对数缩放。

默认值为 log

fscale

设置频率缩放。

它接受以下值

lin

线性缩放。

log

对数缩放。

rlog

反向对数缩放。

默认值为 lin

窗口大小

设置窗口大小。允许的范围是 16 到 65536。

默认值为 2048

窗口函数

设置窗口函数。

它接受以下值

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

默认值为 hanning

重叠

设置窗口重叠。在 [0, 1] 范围内。默认值为 1,这意味着将选择所选窗口函数的最佳重叠。

平均

设置时间平均。将其设置为 0 将显示当前最大峰值。默认值为 1,这意味着时间平均已禁用。

颜色

指定用空格或 ' | ' 分隔的颜色列表,这些颜色将用于绘制通道频率。无法识别或缺少的颜色将替换为白色。

cmode

设置通道显示模式。

它接受以下值

combined
separate

默认值为 combined

minamp

设置 log 幅度缩放器中使用的最小幅度。

data

设置数据显示模式。

它接受以下值

magnitude
phase
delay

默认值为 magnitude

通道数

设置在处理音频时要使用的通道。默认情况下,所有通道都会被处理。

37.25 showspatial

将立体声输入音频转换为视频输出,表示两个通道之间的空间关系。

该滤镜接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 512x512

窗口大小

设置窗口大小。允许的范围是从 102465536。默认大小为 4096

窗口函数

设置窗口函数。

它接受以下值

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 showspectrum

将输入音频转换为视频输出,表示音频频谱。

该滤镜接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看 ffmpeg-utils 手册中的 "(ffmpeg-utils)“视频尺寸”部分。默认值为 640x512

slide

指定频谱应如何沿窗口滑动。

它接受以下值

replace

当样本到达右侧时,它们将再次从左侧开始

scroll

样本从右向左滚动

fullframe

仅当样本到达右侧时才产生帧

rscroll

样本从左向右滚动

lreplace

当样本到达左侧时,它们将再次从右侧开始

默认值为 replace

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为 ‘combined’。

color

指定显示颜色模式。

它接受以下值

channel

每个通道都以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道都使用彩虹配色方案显示

moreland

每个通道都使用 moreland 配色方案显示

nebulae

每个通道都使用 nebulae 配色方案显示

fire

每个通道都使用 fire 配色方案显示

fiery

每个通道都使用 fiery 配色方案显示

fruit

每个通道都使用 fruit 配色方案显示

cool

每个通道都使用 cool 配色方案显示

magma

每个通道都使用 magma 配色方案显示

green

每个通道都使用 green 配色方案显示

viridis

每个通道都使用 viridis 配色方案显示

plasma

每个通道都使用 plasma 配色方案显示

cividis

每个通道都使用 cividis 配色方案显示

terrain

每个通道都使用 terrain 配色方案显示

默认值为 ‘channel’。

scale

指定用于计算强度颜色值的缩放。

它接受以下值

lin

linear

sqrt

平方根,默认

cbrt

立方根

log

logarithmic

4thrt

4 次根

5thrt

5 次根

默认值为 ‘sqrt’。

fscale

指定频率缩放。

它接受以下值

lin

linear

log

logarithmic

默认值为 ‘lin’。

饱和度

设置显示颜色的饱和度修改器。负值提供替代配色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

窗口函数

设置窗口函数。

它接受以下值

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

重叠

设置重叠窗口的比例。默认值为 0。当值为 1 时,重叠设置为当前使用的特定窗口函数的建议大小。

增益

设置用于计算强度颜色值的缩放增益。默认值为 1

data

设置要显示的数据。可以是 magnitude(默认)或 phase,或解包的相位:uphase

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

start

设置开始显示频谱图的频率。默认值为 0

stop

设置停止显示频谱图的频率。默认值为 0

fps

设置上限帧率限制。默认值为 auto,无限制。

legend

绘制时间和频率轴和图例。默认情况下禁用。

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。

限制

设置输入音频样本音量上限,单位为 dBFS。默认值为 0 dBFS。允许的范围是 -100 到 100。

不透明度

设置在使用带有 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 showspectrumpic

将输入音频转换为单个视频帧,表示音频频谱。

该滤镜接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 4096x2048

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为 ‘combined’。

color

指定显示颜色模式。

它接受以下值

channel

每个通道都以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道都使用彩虹配色方案显示

moreland

每个通道都使用 moreland 配色方案显示

nebulae

每个通道都使用 nebulae 配色方案显示

fire

每个通道都使用 fire 配色方案显示

fiery

每个通道都使用 fiery 配色方案显示

fruit

每个通道都使用 fruit 配色方案显示

cool

每个通道都使用 cool 配色方案显示

magma

每个通道都使用 magma 配色方案显示

green

每个通道都使用 green 配色方案显示

viridis

每个通道都使用 viridis 配色方案显示

plasma

每个通道都使用 plasma 配色方案显示

cividis

每个通道都使用 cividis 配色方案显示

terrain

每个通道都使用 terrain 配色方案显示

默认值为 ‘intensity’。

scale

指定用于计算强度颜色值的缩放。

它接受以下值

lin

linear

sqrt

平方根,默认

cbrt

立方根

log

logarithmic

4thrt

4 次根

5thrt

5 次根

默认值为 ‘log’。

fscale

指定频率缩放。

它接受以下值

lin

linear

log

logarithmic

默认值为 ‘lin’。

饱和度

设置显示颜色的饱和度修改器。负值提供替代配色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

窗口函数

设置窗口函数。

它接受以下值

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

增益

设置用于计算强度颜色值的缩放增益。默认值为 1

legend

绘制时间和频率轴和图例。默认情况下启用。

rotation

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

start

设置开始显示频谱图的频率。默认值为 0

stop

设置停止显示频谱图的频率。默认值为 0

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。

限制

设置输入音频样本音量上限,单位为 dBFS。默认值为 0 dBFS。允许的范围是 -100 到 100。

不透明度

设置在使用带有 alpha 分量的像素格式输出时的不透明度强度。

37.27.1 示例

  • 使用 ffmpeg 在 1024x1024 图片中提取整个音频轨道的音频频谱图
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

37.28 showvolume

将输入音频音量转换为视频输出。

该滤镜接受以下选项:

rate, r

设置视频帧率。

b

设置边框宽度,允许的范围是 [0, 5]。默认值为 1。

w

设置通道宽度,允许的范围是 [80, 8192]。默认值为 400。

h

设置通道高度,允许的范围是 [1, 900]。默认值为 20。

f

设置淡化,允许的范围是 [0, 1]。默认值为 0.95。

c

设置音量颜色表达式。

该表达式可以使用以下变量

VOLUME

通道当前最大音量,单位为 dB。

PEAK

当前峰值。

CHANNEL

当前通道号,从 0 开始。

t

如果设置,将显示通道名称。默认情况下启用。

v

如果设置,将显示音量值。默认情况下启用。

o

设置方向,可以是水平方向:h 或垂直方向:v,默认值为 h

s

设置步长,允许的范围是 [0, 5]。默认值为 0,这意味着禁用步长。

p

设置背景不透明度,允许的范围是 [0, 1]。默认值为 0。

m

设置计量模式,可以是峰值:p 或均方根值:r,默认值为 p

ds

设置显示比例,可以是线性: lin 或对数: log,默认为 lin

dm

以秒为单位。如果设置为 > 0,则显示前几秒的最大级别线。默认为禁用:0.

dmc

最大值线的颜色。当 dm 选项设置为 > 0 时使用。默认为:orange

37.29 showwaves

将输入音频转换为视频输出,表示采样的波形。

该滤镜接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的 “视频尺寸” 部分。默认值为 600x240

mode

设置显示模式。

可用值为

point

为每个采样点绘制一个点。

line

为每个采样点绘制一条垂直线。

p2p

为每个采样点绘制一个点,并在它们之间绘制一条线。

cline

为每个采样点绘制一条居中的垂直线。

默认值为 point

n

设置在同一列上打印的采样数。较大的值将降低帧率。必须是正整数。只有当未显式指定 rate 的值时,才能设置此选项。

rate, r

设置(近似)输出帧率。这是通过设置选项 n 来完成的。默认值为 "25"。

split_channels

设置通道应单独绘制还是重叠。默认值为 0。

颜色

设置用 “|” 分隔的颜色,这些颜色将用于绘制每个通道。

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) 手册中的 “视频尺寸” 部分。默认值为 600x240

split_channels

设置通道应单独绘制还是重叠。默认值为 0。

颜色

设置用 “|” 分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置振幅比例。

可用值为

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认为线性。

draw

设置绘制模式。

可用值为

scale

缩放每个绘制的采样的像素值。

full

直接绘制每个采样。

默认值为 scale

filter

设置过滤模式。

可用值为

average’(平均)

使用每个绘制采样的平均采样值。

peak

使用每个绘制采样的峰值采样值。

默认值为 average

37.30.1 示例

  • 使用 ffmpeg 在 1024x800 的图片中提取整个音轨波形的通道分离表示
    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 模式设置。有关帧边数据类型列表,请参阅 libavutil/frame.h 中的 AVFrameSideDataType 枚举。例如,要选择 AV_FRAME_DATA_PANSCAN 边数据,必须指定 PANSCAN

37.32 spectrumsynth

从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个输入流表示随时间变化的相位。该滤波器将从视频中显示的频域转换回音频输出中呈现的时域。

此滤波器主要用于反转处理过的 showspectrum 滤波器输出,但也可以从其他频谱图合成声音。但是在这种情况下,如果相位数据不可用,则结果会很差,因为在这种情况下,需要重新创建相位数据,通常只是从随机噪声重新创建。为了获得最佳结果,请为幅度视频使用仅灰色输出(showspectrum 滤波器中的 channel 颜色模式)和 log 比例,为相位视频使用 lin 比例。要生成相位,对于第二个视频,请使用 data 选项。输入视频通常应使用 fullframe 滑动模式,因为这可以节省解码视频所需的资源。

该滤镜接受以下选项:

sample_rate

指定输出音频的采样率,生成频谱的音频采样率可能会有所不同。

通道数

设置输入视频频谱中表示的通道数。

scale

设置生成幅度输入频谱时使用的比例。可以是 linlog。默认为 log

slide

设置生成输入频谱时使用的滑动。可以是 replacescrollfullframerscroll。默认为 fullframe

窗口函数

设置用于重新合成的窗口函数。

重叠

设置窗口重叠。在 [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];
    
  • 使用 ffmpeg 创建 5 个输入音频副本
    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
    

37.34 zmq, azmq

接收通过 libzmq 客户端发送的命令,并将它们转发到过滤器图中的过滤器。

zmqazmq 用作直通滤波器。zmq 必须插入两个视频滤波器之间,azmq 必须插入两个音频滤波器之间。两者都能够向任何滤波器类型发送消息。

要启用这些滤波器,需要安装 libzmq 库和头文件,并使用 --enable-libzmq 配置 FFmpeg。

有关 libzmq 的更多信息,请参阅:http://www.zeromq.org/

zmqazmq 滤波器用作 libzmq 服务器,该服务器接收通过 bind_address(或缩写 “b”)选项定义的网络接口发送的消息。此选项的默认值为 tcp://127.0.0.1:5555。您可能需要根据自己的需要更改此值,但不要忘记转义任何 ‘:’ 符号(请参阅过滤器图转义)。

接收到的消息必须采用以下格式

TARGET COMMAND [ARG]

TARGET 指定命令的目标,通常是过滤器类的名称或特定的过滤器实例名称。默认过滤器实例名称使用 “Parsed_<filter_name>_<index>” 模式,但可以使用 “filter_name@id” 语法覆盖它(请参阅过滤器图语法)。

COMMAND 指定目标过滤器的命令名称。

ARG 是可选的,它为给定的 COMMAND 指定可选的参数列表。

收到消息后,将处理该消息并将相应的命令注入到过滤器图中。根据结果,过滤器将采用以下格式向客户端发送回复

ERROR_CODE ERROR_REASON
MESSAGE

MESSAGE 是可选的。

37.34.1 示例

有关可用于发送这些过滤器处理的命令的 zmq 客户端的示例,请查看 tools/zmqsend

考虑由 ffplay 生成的以下过滤器图。在此示例中,最后一个 overlay 过滤器具有一个实例名称。所有其他过滤器将具有默认实例名称。

ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@my=x=100 "

要更改视频左侧的颜色,可以使用以下命令

echo Parsed_color_0 c yellow | tools/zmqsend

要更改右侧

echo Parsed_color_1 c pink | tools/zmqsend

要更改右侧的位置

echo overlay@my x 150 | tools/zmqsend

38 多媒体源

以下是对当前可用的多媒体源的描述。

38.1 amovie

这与 movie 源相同,只是它默认选择音频流。

38.2 avsynctest

生成音频/视频同步测试。

生成的流会定期显示闪光视频帧并在音频中发出哔声。可用于检查 A/V 同步问题。

它接受以下选项

size, s

设置输出视频大小。默认值为 hd720

framerate, fr

设置输出视频帧率。默认值为 30

samplerate, sr

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

幅度,a

设置输出音频哔声幅度。默认值为 0.7

period, p

设置输出音频蜂鸣声的周期,单位为秒。默认值为 3

延迟, dl

设置输出视频闪烁的延迟,单位为帧数。默认值为 0

循环, c

启用视频延迟的循环,默认情况下禁用。

duration, d

设置流输出的持续时间。默认情况下,持续时间是无限的。

前景色, 背景色, 附加颜色

设置前景色/背景色/附加颜色。

38.2.1 命令

此源支持一些上述选项,作为命令

38.3 movie

从电影容器中读取音频和/或视频流。

它接受以下参数

filename

要读取的资源的名称(不一定是文件;也可以是通过某些协议访问的设备或流)。

格式名称, f

指定要读取的电影的格式,可以是容器的名称或输入设备的名称。如果未指定,则会从 movie_name 或通过探测来猜测格式。

查找点, sp

指定查找点,单位为秒。帧将从此查找点开始输出。该参数使用 av_strtod 进行评估,因此数值可以附加一个 IS 后缀。默认值为“0”。

流, s

指定要读取的流。可以指定多个流,以“+”分隔。源将按相同顺序具有多个输出。语法在 ffmpeg 手册中的“流说明符”部分中解释。两个特殊名称“dv”和“da”分别指定默认(最适合)的视频和音频流。默认值为“dv”,如果过滤器被调用为“amovie”,则为“da”。

stream_index, si

指定要读取的视频流的索引。如果值为 -1,将自动选择最合适的视频流。默认值为“-1”。已弃用。如果过滤器被调用为“amovie”,它将选择音频而不是视频。

loop

指定按顺序读取流的次数。如果值为 0,则流将无限循环。默认值为“1”。

请注意,当电影循环时,源时间戳不会更改,因此会生成非单调递增的时间戳。

不连续性

指定帧之间的时间差,超过此时间差的点被视为时间戳不连续点,通过调整后面的时间戳来消除。

解码线程数

指定解码的线程数

格式选项

为打开的文件指定格式选项。格式选项可以指定为以“:”分隔的=对列表。以下示例演示如何添加 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 示例

  • 从 in.avi AVI 文件开始跳过 3.2 秒,并将其叠加在标记为“in”的输入之上
    movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从 video4linux2 设备读取,并将其叠加在标记为“in”的输入之上
    movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从 dvd.vob 读取第一个视频流和 id 为 0x81 的音频流;视频连接到名为“video”的焊盘,音频连接到名为“audio”的焊盘
    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
    

38.3.2 命令

movie 和 amovie 都支持以下命令

查找

使用“av_seek_frame”执行查找。语法为:seek stream_index|timestamp|flags

  • stream_index:如果 stream_index 为 -1,则选择默认流,并且 timestamp 会自动从 AV_TIME_BASE 单位转换为流特定的 time_base。
  • timestamp:以 AVStream.time_base 单位表示的时间戳,或者如果未指定流,则以 AV_TIME_BASE 单位表示。
  • flags:选择方向和查找模式的标志。
获取持续时间

以 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 Advanced Media Framework 库在具有视频编码引擎 (VCE) 的硬件上加速 H.264 和 HEVC(仅限 Windows)编码。

要启用支持,您必须从 https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git 获取 AMF 框架头文件(1.4.9+ 版本)。

在系统包含路径中创建一个 AMF/ 目录。将 AMF/amf/public/include/ 的内容复制到该目录中。然后使用 --enable-amf 配置 FFmpeg。

amf 编码器的初始化按此顺序进行:1) 尝试通过 dx11 初始化(仅限 Windows)2) 尝试通过 dx9 初始化(仅限 Windows)3) 尝试通过 vulkan 初始化

要在 Linux 上使用 h.264 (AMD VCE) 编码器,需要 amdgru-pro 版本 19.20+ 和 amf-amdgpu-pro 包(amdgru-pro 包含,但不会自动安装)。

可以使用官方 AMD 驱动程序存档中的 amdgpu-pro-install 脚本安装此驱动程序。

39.3 AviSynth

FFmpeg 可以读取 AviSynth 脚本作为输入。要启用支持,请在安装 AviSynth+ 提供的头文件后,将 --enable-avisynth 传递给 configure。可以通过将 -DHEADERS_ONLY:bool=on 传递给正常的基于 CMake 的构建系统,或通过使用提供的 GNUmakefile 来配置 AviSynth+ 仅安装头文件。

对于 Windows,支持的 AviSynth 变体是 AviSynth 2.6 RC1 或更高版本(用于 32 位构建)和 AviSynth+ r1718 或更高版本(用于 32 位和 64 位构建)。

对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 变体是 AviSynth+,从 3.5 版本开始。

2016 年,AviSynth+ 添加了对使用 GCC 构建的支持。但是,由于 Windows 调用约定的怪异之处,32 位 GCC 构建的 AviSynth+ 与典型的 32 位 FFmpeg 构建不兼容。

默认情况下,FFmpeg 假定与 32 位 MSVC 构建的 AviSynth+ 兼容,因为这是最广泛使用和根深蒂固的构建配置。用户可以覆盖此设置,并通过在配置 FFmpeg 时将 -DAVSC_WIN32_GCC32 传递给 --extra-cflags 来启用对 32 位 GCC 构建的 AviSynth+ 的支持。

64 位 FFmpeg 构建不受影响,可以使用 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 编码器提供 -mode 选项: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 进行配置以启用它。

39.7 davs2

FFmpeg 可以使用 davs2 库进行 AVS2-P2/IEEE1857.4 视频解码。

请访问 https://github.com/pkuvcl/davs2 并按照说明安装该库。然后传递 --enable-libdavs2 进行配置以启用它。

libdavs2 采用 GNU 公共许可证第 2 版或更高版本(详情请参阅 https://gnu.ac.cn/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 进行配置以启用它。

39.9 游戏音乐模拟器 (Game Music Emu)

FFmpeg 可以使用 Game Music Emu 库读取受支持的电子游戏音乐文件格式的音频。传递 --enable-libgme 进行配置以启用它。请参阅 https://bitbucket.org/mpyne/game-music-emu/overview

39.10 英特尔 QuickSync 视频

FFmpeg 可以使用 Intel QuickSync Video (QSV) 加速多种编解码器的解码和编码。要使用 QSV,FFmpeg 必须链接到 libmfx 调度器,它会加载实际的解码库。

调度器是开源的,可以从 https://github.com/lu-zero/mfx_dispatch.git 下载。需要使用 --enable-libmfx 选项配置 FFmpeg,并且 pkg-config 需要能够找到调度器的 .pc 文件。

39.11 Kvazaar

FFmpeg 可以使用 Kvazaar 库进行 HEVC 编码。

请访问 https://github.com/ultravideo/kvazaar 并按照说明安装该库。然后传递 --enable-libkvazaar 进行配置以启用它。

39.12 LAME

FFmpeg 可以使用 LAME 库进行 MP3 编码。

请访问 http://lame.sourceforge.net/ 并按照说明安装该库。然后传递 --enable-libmp3lame 进行配置以启用它。

39.13 LCEVCdec

FFmpeg 可以使用 liblcevc_dec 库在支持的码流上进行 LCEVC 增强层解码。

请访问 https://github.com/v-novaltd/LCEVCdec 并按照说明安装该库。然后传递 --enable-liblcevc-dec 进行配置以启用它。

LCEVCdec 采用 BSD-3-Clause-Clear 许可证。

39.14 libilbc

iLBC 是一种窄带语音编解码器,由 Google 作为 WebRTC 项目的一部分免费提供。libilbc 是 iLBC 编解码器的封装友好副本。FFmpeg 可以使用 libilbc 库进行 iLBC 解码和编码。

请访问 https://github.com/TimothyGu/libilbc 并按照说明安装该库。然后传递 --enable-libilbc 进行配置以启用它。

39.15 libjxl

JPEG XL 是一种图像格式,旨在完全取代传统 JPEG 长期使用。有关更多信息,请参阅 https://jpegxl.info/,有关库源代码,请参阅 https://github.com/libjxl/libjxl。您可以传递 --enable-libjxl 进行配置以启用 libjxl 包装器。

39.16 libvpx

FFmpeg 可以使用 libvpx 库进行 VP8/VP9 解码和编码。

请访问 http://www.webmproject.org/ 并按照说明安装该库。然后传递 --enable-libvpx 进行配置以启用它。

39.17 ModPlug

FFmpeg 可以使用此源于 Modplug-XMMS 的库读取 MOD 类音乐文件。请参阅 https://github.com/Konstanty/libmodplug。传递 --enable-libmodplug 进行配置以启用它。

39.18 OpenCORE、VisualOn 和 Fraunhofer 库

源自 Google Android 源代码、OpenCore、VisualOn 和 Fraunhofer 库为多种音频编解码器提供编码器。

OpenCORE 和 VisualOn 库采用 Apache 许可证 2.0(详情请参阅 https://apache.ac.cn/licenses/LICENSE-2.0),与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。您必须通过传递 --enable-version3 进行配置,将 FFmpeg 的许可证升级到 LGPL 版本 3(如果启用了 GPL 组件,则为 GPL 版本 3)才能使用它。

Fraunhofer AAC 库的许可证与 GPL 不兼容。因此,对于 GPL 构建,您必须传递 --enable-nonfree 进行配置才能使用它。据我们所知,它与 LGPL 兼容。

39.18.1 OpenCORE AMR

FFmpeg 可以使用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库。然后传递 --enable-libopencore-amrnb 和/或 --enable-libopencore-amrwb 进行配置以启用它们。

39.18.2 VisualOn AMR-WB 编码器库

FFmpeg 可以使用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装该库。然后传递 --enable-libvo-amrwbenc 进行配置以启用它。

39.18.3 Fraunhofer AAC 库

FFmpeg 可以使用 Fraunhofer AAC 库进行 AAC 解码和编码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装该库。然后传递 --enable-libfdk-aac 进行配置以启用它。

39.18.4 LC3 库

FFmpeg 可以使用 Google LC3 库进行 LC3 解码和编码。

请访问 https://github.com/google/liblc3/ 并按照说明安装该库。然后传递 --enable-liblc3 进行配置以启用它。

39.19 OpenH264

FFmpeg 可以使用 OpenH264 库进行 H.264 解码和编码。

请访问 http://www.openh264.org/ 并按照说明安装该库。然后传递 --enable-libopenh264 进行配置以启用它。

对于解码,此库比 libavcodec 中内置的解码器受到的限制要大得多;目前,此库缺乏对解码 B 帧和一些其他主要/高配置文件功能的支持。(它目前仅支持约束基线配置文件和 CABAC。)使用它主要用于测试,以及利用思科的专利组合许可证 (http://www.openh264.org/BINARY_LICENSE.txt)。

39.20 OpenJPEG

FFmpeg 可以使用 OpenJPEG 库来解码/编码 J2K 视频。请访问 http://www.openjpeg.org/ 获取库文件,并按照安装说明进行安装。要在 FFmpeg 中启用 OpenJPEG,请在执行 ./configure 时传递 --enable-libopenjpeg 参数。

39.21 rav1e

FFmpeg 可以通过其 C 绑定使用 rav1e (Rust AV1 Encoder) 来编码视频。请访问 https://github.com/xiph/rav1e/,并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请在执行 ./configure 时传递 --enable-librav1e 参数。

39.22 SVT-AV1

FFmpeg 可以使用 Scalable Video Technology for 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 工具,在输入 -i yourscript.vpy 之前添加 -f vapoursynth

39.25 x264

FFmpeg 可以使用 x264 库进行 H.264 编码。

请访问 http://www.videolan.org/developers/x264.html 并按照说明安装库。然后,在配置时传递 --enable-libx264 以启用它。

x264 采用 GNU 通用公共许可证第 2 版或更高版本(详情请参阅 https://gnu.ac.cn/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 版或更高版本(详情请参阅 https://gnu.ac.cn/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 版或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

39.29 超快速基本视频编码器 (XEVE)

FFmpeg 可以使用 XEVE 库进行 EVC 视频编码。

请访问 https://github.com/mpeg5/xeve 并按照说明安装 XEVE 库。然后,在配置时传递 --enable-libxeve 以启用它。

39.30 超快速基本视频解码器 (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 VoiceX包含 G.729 音频
Adobe FilmstripXX
Audio IFF (AIFF)XX
American Laser Games MMX用于《Mad Dog McCree》等游戏的多媒体格式。
3GPP AMRXX
Amazing Studio Packed Animation FileX用于游戏《Heart Of Darkness》的多媒体格式。
Apple HTTP Live StreamingX
Artworx Data FormatX
Interplay ACMX用于某些 Interplay 游戏的音频格式。
ADPX用于 Nintendo Gamecube 的音频格式。
AFCX用于 Nintendo Gamecube 的音频格式。
ADS/SS2X用于 PS2 的音频格式。
APNGXX
ASFXX高级/活动流格式。
ASTXX用于 Nintendo Wii 的音频格式。
AVIXX
AviSynthX
AVRX用于 Mac 的音频格式。
AVSXCreature Shock 游戏使用的多媒体格式。
Beam Software SIFFXBeam Software 某些游戏使用的音频和视频格式。
Bethesda Softworks VIDX用于 Bethesda Softworks 的某些游戏。
二进制文本X
BinkX许多游戏使用的多媒体格式。
Bink 音频X某些游戏使用的纯音频多媒体格式。
Bitmap Brothers JVX用于 Z 和 Z95 游戏中。
BRPXArgonaut Games 格式。
Brute Force & IgnoranceX用于游戏《Flash Traffic: City of Angels》。
BFSTMX用于 Nintendo WiiU 的音频格式(基于 BRSTM)。
BRSTMX用于 Nintendo Wii 的音频格式。
BW64XBroadcast Wave 64 位。
BWFXX
codec2 (raw)XX必须给出 -mode 格式选项才能正确解码。
codec2 (.c2 文件)XX包含版本和模式信息的头,简化了播放。
CRI ADXXX用于控制台视频游戏的纯音频格式。
CRI AIXX
CRI HCAX用于控制台视频游戏的纯音频格式。
Discworld II BMVX
Interplay C93X用于 Interplay 的游戏 Cyberia。
Delphine Software International CINXDelphine Software 游戏使用的多媒体格式。
数字语音标准 (DSS)X
CD+GXCD+G 卡拉 OK 磁盘使用的视频格式
Phantom CineX
Commodore CDXLXAmiga CD 视频格式
Core Audio FormatXXApple Core 音频格式
CRC 测试格式X
Creative VoiceXX为 Sound Blaster Pro 创建。
CRYO APCXCRYO Interactive Entertainment 某些游戏使用的音频格式。
D-Cinema 音频XX
Deluxe Paint AnimationX
DCSTRX
DFAX此格式用于 Chronomaster 游戏中
DirectDraw SurfaceX
DSD 流文件 (DSF)X
DV 视频XX
DXAX此格式用于 Feeble Files 游戏的非 Windows 版本以及为 ScummVM 重新打包的不同游戏过场动画。
Electronic Arts cdataX
Electronic Arts 多媒体X用于各种 EA 游戏中;文件扩展名如 WVE 和 UV2。
Ensoniq Paris 音频文件X
FFM (FFserver 实时馈送)XX
Flash (SWF)XX
Flash 9 (AVM2)XX仅解码嵌入式音频。
FLI/FLC/FLX 动画X.fli/.flc 文件
Flash 视频 (FLV)XXMacromedia Flash 视频文件
framecrc 测试格式X
FunCom ISSX用于 FunCom 各种游戏中的音频格式,例如《漫长旅程》。
G.723.1XX
G.726X左对齐和右对齐都支持。
G.729 BITXX
G.729 rawX
GENHX用于各种游戏的音频格式。
GIF 动画XX
GXFXX通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播出服务器使用。
HNMX仅支持版本 4,用于 Cryo Interactive 的一些游戏中
iCEDraw 文件X
ICOXXMicrosoft Windows ICO
id Quake II CIN 视频X
id RoQXX用于雷神之锤 III、绝地武士 2 和其他电脑游戏中。
IEC61937 封装XX
IFFX可交换文件格式
IFVX一些旧的闭路电视 DVR 使用的格式。
iLBCXX
Interplay MVEX用于各种 Interplay 电脑游戏中的格式。
Iterated Systems ClearVideoX仅 I 帧
IV8X由 IndigoVision 8000 视频服务器生成的格式。
IVF (On2)XXlibvpx 使用的格式
互联网视频录制X
IRCAMXX
LAFX无限音频格式
LATMXX
LMLM4X由 Linux Media Labs MPEG-4 PCI 板卡使用
LOASX包含 LATM 多路复用 AAC 音频
LRCXX
LVFX
LXFXVR 原生流格式,由 Leitch/Harris 的视频服务器使用。
Magic Lantern 视频 (MLV)X
MatroskaXX
Matroska 音频X
FFmpeg 元数据XX文本格式的元数据。
MAXIS XAX用于模拟城市 3000;文件扩展名为 .xa。
MCAX用于 Capcom 的一些游戏中;文件扩展名为 .mca。
MD StudioX
合金装备:孪蛇X
Megalux 帧X由 Megalux Ultimate Paint 使用
MobiClip MODSX
MobiClip MOFLEXX
Mobotix .mxgX
Monkey's AudioX
Motion Pixels MVIX
MOV/QuickTime/MP4XX支持 3GP、3GP2、PSP、iPod 变体
MP2XX
MP3XX
MPEG-1 系统XX混合音频和视频,支持 VCD 格式
MPEG-PS (节目流)XX也称为 VOB 文件,支持 SVCD 和 DVD 格式
MPEG-TS (传输流)XX也称为 DVB 传输流
MPEG-4XXMPEG-4 是 QuickTime 的一个变体。
MSFXPS3 上使用的音频格式。
Mirillis FIC 视频X不渲染光标。
MIDI Sample Dump 标准X
MIME 多部分 JPEGX
MSN TCP 网络摄像头X由 MSN Messenger 网络摄像头流使用。
MTVX
MusepackX
Musepack SV8X
材料交换格式 (MXF)XXSMPTE 377M,由数字影院和广播行业使用。
材料交换格式 (MXF),D-10 映射XXSMPTE 386M,D-10/IMX 映射。
NC 摄像头馈送XNC (AVIP NC4600) 摄像头流
NIST 语音头资源X
计算机化语音实验室 NSPX
NTT TwinVQ (VQF)X日本电报电话公司 TwinVQ。
Nullsoft 流媒体视频X
NuppelVideoX
NUTXXNUT 开放容器格式
OggXX
Playstation Portable PMPX
便携式语音格式X
RK 音频 (RKA)X
TechnoTrend PVAX由 TechnoTrend DVB PCI 板卡使用。
QCPX
raw ADTS (AAC)XX
raw AC-3XX
raw AMR-NBX
raw AMR-WBX
raw APACX
raw aptXXX
raw aptX HDXX
raw BonkX
raw 中文 AVS 视频XX
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 视频XX
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 有符号 8 位XX
raw PCM 有符号 16 位大端XX
raw PCM 有符号 16 位小端XX
raw PCM 有符号 24 位大端XX
raw PCM 有符号 24 位小端XX
raw PCM 有符号 32 位大端XX
raw PCM 有符号 32 位小端XX
raw PCM 有符号 64 位大端XX
raw PCM 有符号 64 位小端XX
raw PCM 无符号 8 位XX
raw PCM 无符号 16 位大端XX
raw PCM 无符号 16 位小端XX
raw PCM 无符号 24 位大端XX
raw PCM 无符号 24 位小端XX
raw PCM 无符号 32 位大端XX
raw PCM 无符号 32 位小端XX
raw PCM 16.8 浮点小端X
raw PCM 24.0 浮点小端X
raw PCM 浮点 32 位大端XX
raw PCM 浮点 32 位小端XX
raw PCM 浮点 64 位大端XX
raw PCM 浮点 64 位小端XX
RDTX
REDCODE R3DXRED 数字相机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。
RealMediaXX
重定向器X
RedSparkX
Renderware 纹理字典X
Resolume DXVXX仅支持 DXT1(普通质量,无 Alpha)纹理格式的编码。
RF64X
RL2XEntertainment Software Partners 在一些游戏中使用的音频和视频格式。
RPL/ARMovieX
乐高 Mindstorms RSOXX
RSDX
RTMPXX通过将流发布到 RTMP 服务器来执行输出
RTPXX
RTSPXX
Sample Dump 交换X
SAPXX
SBGX
SDNSX
SDPX
SERX
Digital Pictures SGAX
世嘉 FILM/CPKXX用于许多世嘉土星主机游戏中。
Silicon Graphics 电影X
Sierra SOLXSierra Online 游戏中使用的 .sol 文件。
Sierra VMDX用于 Sierra CD-ROM 游戏中。
SmackerX许多游戏使用的多媒体格式。
SMJPEGXX用于某些 Loki 游戏移植中。
SMPTE 337M 封装X
SmushX一些 LucasArts 游戏中使用的多媒体格式。
索尼 OpenMG (OMA)XX用于索尼 Sonic Stage 和索尼 Vegas 的音频格式。
索尼 PlayStation STRX
索尼 Wave64 (W64)XX
SoX 原生格式XX
SUN AU 格式XX
SUP raw PGS 字幕XX
SVAGX用于科乐美 PS2 游戏中的音频格式。
TDSCX
文本文件X
THPX用于任天堂 GameCube 上。
Tiertex Limited SEQXTiertex .seq 文件,用于游戏《Flashback》的 DOS CD-ROM 版本。
True AudioXX
VAGX用于许多索尼 PS2 游戏中的音频格式。
VC-1 测试比特流XX
Vidvox HapXX
VivoX
VPKX索尼 PS 游戏中使用的音频格式。
Marble WADYX
WAVXX
波形存档器X
WavPackXX
WebMXX
Windows 电视 (WTV)XX
银河飞将 III 电影XOrigin 公司《银河飞将 III》电脑游戏中使用的多媒体格式。
Westwood Studios 音频XXWestwood Studios 游戏中使用多媒体格式。
Westwood Studios VQAXWestwood Studios 游戏中使用多媒体格式。
宽带单比特数据 (WSD)X
WVEX
Konami XMDX
XMVXXbox 游戏中使用的微软视频容器。
XVAGXPS3 上使用的音频格式。
xWMAXXAudio 2 使用的微软音频容器。
扩展二进制文本 (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 画图图像
PAMXXPAM 是一个带有 alpha 支持的 PNM 扩展。
PBMXX便携式位图图像
PCDXPhotoCD
PCXXXPC 画笔
PFMXX便携式浮点图图像
PGMXX便携式灰度图图像
PGMYUVXXYUV 4:2:0 中带有 U 和 V 分量的 PGM
PGXXPGX 文件解码器
PHMXX便携式半浮点图图像
PICXPictor/PC 画图
PNGXX便携式网络图形图像
PPMXX便携式像素图图像
PSDXPhotoshop
PTXXV.Flash PTX 格式
QOIXX相当好的图像格式
SGIXXSGI RGB 图像格式
Sun 光栅文件XXSun RAS 图像格式
TIFFXX尚不支持 YUV、JPEG 和一些扩展。
Truevision TargaXXTarga (.TGA) 图像格式
VBNXXVizrt 二进制图像格式
WBMPXX无线应用协议位图图像格式
WebPEXWebP 图像格式,通过外部库 libwebp 支持编码
XBMXXX 位图图像格式
XFaceXXX-Face 图像格式
XPMXX 像素图图像格式
XWDXXX Window 转储图像格式

X 表示该列(编码/解码)中的功能已支持。

E 表示通过外部库提供支持。

40.3 视频编解码器

名称编码解码备注
4X 电影X在某些电脑游戏中使用。
8088flex TMVX
A64 多彩X创建适合在 Commodore 64 上播放的视频(多彩模式)。
Amazing Studio PAF 视频X
American Laser Games MMX用于《疯狂的麦克斯》等游戏中。
Amuse 图形电影X
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 视频X用于某些 Argonaut 游戏中。
Asus v1XXfourcc:ASV1
Asus v2XXfourcc:ASV2
ATI VCR1Xfourcc:VCR1
ATI VCR2Xfourcc:VCR2
Auravision AuraX
Auravision Aura 2X
Autodesk Animator Flic 视频X
Autodesk RLEXfourcc:AASC
AV1EE通过外部库 libaom、libdav1d、librav1e 和 libsvtav1 提供支持
Avid 1:1 10 位 RGB 打包器XXfourcc:AVrp
AVS(音频视频标准)视频X《生物冲击》游戏使用的视频编码。
AVS2-P2/IEEE1857.4EE通过外部库 libxavs2 和 libdavs2 提供支持
AVS3-P2/IEEE1857.10E通过外部库 libuavs3d 提供支持
AYUVXX微软未压缩打包的 4:4:4:4
Beam Software VBX
Bethesda VID 视频X用于 Bethesda Softworks 的某些游戏。
Bink 视频X
BitJazz SheerVideoX
Bitmap Brothers JV 视频X
y41p Brooktree 未压缩的 4:1:1 12 位XX
Brooktree ProSumer 视频Xfourcc:BT20
Brute Force & IgnoranceX用于游戏《Flash Traffic: City of Angels》。
C93 视频X用于《网络杀手》游戏中的编解码器。
CamStudioXfourcc:CSCD
CD+GX用于 CD+G 卡拉 OK 光盘的视频编解码器
CDXLXAmiga CD 视频编解码器
中国 AVS 视频EXAVS1-P2,基准配置文件,通过外部库 libxavs 进行编码
Delphine Software International CIN 视频X用于 Delphine Software International 游戏中的编解码器。
碟形世界 II BMV 视频X
CineForm HDXX
Canopus HQX
Canopus HQAX
Canopus HQXX
Canopus 无损编解码器X
CDToonsX用于各种 Broderbund 游戏中的编解码器。
CinepakX
Cirrus Logic AccuPakXXfourcc:CLJR
CPiA 视频格式X
Creative YUV (CYUV)X
DFAX用于《时空穿越者》游戏中的编解码器。
DiracEX通过原生 vc2(Dirac Pro)编码器支持
Deluxe Paint AnimationX
DNxHDXX又名 SMPTE VC3
Duck TrueMotion 1.0Xfourcc:DUCK
Duck TrueMotion 2.0Xfourcc:TM20
Duck TrueMotion 2.0 RTXfourcc:TR20
DV(数字视频)XX
Dxtory 捕获格式X
Feeble Files/ScummVM DXAX最初用于 Feeble Files 游戏中的编解码器。
Electronic Arts CMV 视频X用于《NHL 95》游戏中。
Electronic Arts Madcow 视频X
Electronic Arts TGV 视频X
Electronic Arts TGQ 视频X
Electronic Arts TQI 视频X
Escape 124X
Escape 130X
EVC / MPEG-5 Part 1EE通过外部库 libxeve 和 libxevd 提供编码和解码支持
FFmpeg 视频编解码器 #1XX无损编解码器(fourcc:FFV1)
Flash 屏幕视频 v1XXfourcc:FSV1
Flash 屏幕视频 v2XX
Flash 视频 (FLV)XXFlash 中使用的 Sorenson H.263
FM 屏幕捕获编解码器X
向前解压缩X
FrapsX
Go2MeetingXfourcc:G2M2、G2M3
Go2WebinarXfourcc:G2M4
Gremlin 数字视频X
H.261XX
H.263 / H.263-1996XX
H.263+ / H.263-1998 / H.263 版本 2XX
H.264 / AVC / MPEG-4 AVC / MPEG-4 第 10 部分EX通过外部库 libx264 和 OpenH264 支持编码
HEVCXX通过外部库 libx265 和 libkvazaar 支持的编码
HNM 版本 4X
HuffYUVXX
HuffYUV FFmpeg 变体XX
IBM UltimotionXfourcc: ULTI
id Cinematic 视频X用于雷神之锤 II。
id RoQ 视频XX用于雷神之锤 III、绝地武士 2 和其他电脑游戏。
IFF ILBMXIFF 交错位图
IFF ByteRun1XIFF 游程编码位图
Infinity IMM4X
Intel H.263X
Intel Indeo 2X
Intel Indeo 3X
Intel Indeo 4X
Intel Indeo 5X
Interplay C93X用于 Interplay 的游戏 Cyberia。
Interplay MVE 视频X用于 Interplay .MVE 文件。
J2KXX
Karl Morton 的视频编解码器X用于百战天虫游戏。
Kega 游戏视频 (KGV1)XKega 模拟器屏幕捕获编解码器。
LagarithX
LCEVC / MPEG-5 LCEVC / MPEG-5 第 2 部分E通过外部库 liblcevc-dec 支持的解码
LCL (无损编解码器库) MSZHX
LCL (无损编解码器库) ZLIBEE
LEAD MCMPX
LOCOX
LucasArts SANM/SmushX用于 LucasArts 游戏 / SMUSH 动画。
无损 MJPEGXX
MagicYUV 视频XX
Mandsoft 屏幕捕获编解码器X
Microsoft ATC 屏幕X也称为 Microsoft Screen 3。
Microsoft Expression Encoder 屏幕X也称为 Microsoft Titanium Screen 2。
Microsoft RLEXX
Microsoft Screen 1X也称为 Windows Media Video V7 屏幕。
Microsoft Screen 2X也称为 Windows Media Video V9 屏幕。
Microsoft Video 1X
MimicX用于 MSN Messenger 网络摄像头流。
Miro VideoXLXfourcc: VIXL
MJPEG (运动 JPEG)XX
Mobotix MxPEG 视频X
Motion Pixels 视频X
MPEG-1 视频XX
MPEG-2 视频XX
MPEG-4 第 2 部分XXlibxvidcore 可以替代用于编码。
MPEG-4 第 2 部分 Microsoft 变体版本 1X
MPEG-4 第 2 部分 Microsoft 变体版本 2XX
MPEG-4 第 2 部分 Microsoft 变体版本 3XX
Newtek SpeedHQXX
任天堂 Gamecube THP 视频X
NotchLCX
NuppelVideo/RTjpegX用于 NuppelVideo 文件中的视频编码。
On2 VP3X仍在实验中
On2 VP4Xfourcc: VP40
On2 VP5Xfourcc: VP50
On2 VP6Xfourcc: VP60,VP61,VP62
On2 VP7Xfourcc: VP70,VP71
VP8EXfourcc: VP80,通过外部库 libvpx 支持的编码
VP9EX通过外部库 libvpx 支持的编码
Pinnacle TARGA CineWave YUV16Xfourcc: Y216
Q-team QPEGXfourccs: QPEG, Q1.0, Q1.1
QuickTime 8BPS 视频X
QuickTime 动画 (RLE) 视频XXfourcc: 'rle '
QuickTime 图形 (SMC)XXfourcc: 'smc '
QuickTime 视频 (RPZA)XXfourcc: rpza
R10K AJA Kona 10 位 RGB 编解码器XX
R210 Quicktime 未压缩 RGB 10 位XX
原始视频XX
RealVideo 1.0XX
RealVideo 2.0XX
RealVideo 3.0X离理想状态还很远
RealVideo 4.0X
RealVideo 6.0X
Renderware TXD (纹理字典)XRenderware 引擎使用的纹理字典。
RivaTuner 视频Xfourcc: 'RTV1'
RL2 视频X用于 Entertainment Software Partners 的一些游戏中
ScreenPressorX
ScreenpressoX
Screen Recorder Gold 编解码器X
Sierra VMD 视频X用于 Sierra VMD 文件。
Silicon Graphics 运动视频压缩器 1 (MVC1)X
Silicon Graphics 运动视频压缩器 2 (MVC2)X
Silicon Graphics RLE 8 位视频X
Smacker 视频X用于 Smacker 中的视频编码。
SMPTE VC-1X
SnowXX实验性小波编解码器 (fourcc: SNOW)
索尼 PlayStation MDEC (运动解码器)X
Sorenson 向量量化器 1XXfourcc: SVQ1
Sorenson 向量量化器 3Xfourcc: SVQ3
Sunplus JPEG (SP5X)Xfourcc: SP5X
TechSmith 屏幕捕获编解码器Xfourcc: TSCC
TechSmith 屏幕捕获编解码器 2Xfourcc: TSC2
TheoraEX通过外部库 libtheora 支持的编码
Tiertex Limited SEQ 视频X用于 DOS CD-ROM FlashBack 游戏中的编解码器。
Ut VideoXX
v210 QuickTime 未压缩 4:2:2 10 位XX
v308 QuickTime 未压缩 4:4:4XX
v408 QuickTime 未压缩 4:4:4:4XX
v410 QuickTime 未压缩 4:4:4 10 位XX
VBLE 无损编解码器X
vMix 视频Xfourcc: 'VMX1'
VMware 屏幕编解码器 / VMware 视频X用于 VMware 捕获的视频中的编解码器。
Westwood Studios VQA (向量量化动画) 视频X
Windows Media 图像X
Windows Media Video 7XX
Windows Media Video 8XX
Windows Media Video 9X尚未完全工作
银河飞将 III / XanX用于银河飞将 III .MVE 文件。
银河飞将 IV / XanX用于银河飞将 IV。
Winnov WNV1X
WMV7XX
YAMAHA SMAFXX
Psygnosis YOP 视频X
yuv4XXlibquicktime 未压缩打包 4:2:0
ZeroCodec 无损视频X
ZLIBXXLCL 的一部分,编码器为实验性
Zip 运动块视频XX编码器仅在 PAL8 中工作。

X 表示该列(编码/解码)中的功能已支持。

E 表示通过外部库提供支持。

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 电影X
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 IMA XboxX
ADPCM MicrosoftXX
ADPCM MS IMAXX
ADPCM 任天堂 Gamecube AFCX
ADPCM 任天堂 Gamecube DTKX
ADPCM 任天堂 THPX
ADPCM PlaystationX
ADPCM QT IMAXX
ADPCM SEGA CRI ADXXX用于 Sega Dreamcast 游戏。
ADPCM Shockwave FlashXX
ADPCM Sound Blaster Pro 2 位X
ADPCM Sound Blaster Pro 2.6 位X
ADPCM Sound Blaster Pro 4 位X
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 相干声学)XX支持的扩展名:XCh、XXCH、X96、XBR、XLL、LBR (部分支持)
Dolby EX
DPCM Cuberoot-Delta-ExactX在少数游戏中用到。
DPCM GremlinX
DPCM id RoQXX用于雷神之锤 III、绝地武士 2 和其他电脑游戏中。
DPCM Marble WADYX
DPCM InterplayX在各种 Interplay 电脑游戏中用到。
DPCM Squareroot-Delta-ExactX在各种游戏中用到。
DPCM Sierra OnlineX在 Sierra Online 游戏音频文件中用到。
DPCM SolX
DPCM XanX在 Origin 的 Wing Commander 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
GSMEX通过外部库 libgsm 支持编码
GSM Microsoft 变体EX通过外部库 libgsm 支持编码
IAC(Indeo 音频编码器)X
iLBC(互联网低比特率编解码器)EEX通过外部库 libilbc 支持编码和解码
IMC (Intel 音乐编码器)X
Interplay ACMX
LC3EE通过外部库 liblc3 支持
MACE(Macintosh 音频压缩/扩展)6:1X
Marian's A-pac 音频X
MI-SC4 (Micronas SC-4 音频)X
MLP(Meridian 无损封装)XX在 DVD-Audio 光盘中使用。
Monkey's AudioX
MP1(MPEG 音频层 1)IX
MP2(MPEG 音频层 2)IXIX也通过外部库 TwoLAME 支持编码
MP3(MPEG 音频层 3)EIX通过外部库 LAME 支持编码,也支持 ADU MP3 和 MP3onMP4
MPEG-4 无损音频编码 (ALS)X
MobiClip FastAudioX
Musepack SV7X
Musepack SV8X
Nellymoser AsaoXX
On2 AVC (视频音频编解码器)X
OpusEX通过外部库 libopus 支持编码
OSQ(原始音质)X
PCM A-lawXX
PCM mu-lawXX
PCM Archimedes VIDCXX
PCM 有符号 8 位平面XX
PCM 有符号 16 位大端平面XX
PCM 有符号 16 位小端平面XX
PCM 有符号 24 位小端平面XX
PCM 有符号 32 位小端平面XX
PCM 32 位浮点大端XX
PCM 32 位浮点小端XX
PCM 64 位浮点大端XX
PCM 64 位浮点小端XX
PCM D-Cinema 音频有符号 24 位XX
PCM 有符号 8 位XX
PCM 有符号 16 位大端XX
PCM 有符号 16 位小端XX
PCM 有符号 24 位大端XX
PCM 有符号 24 位小端XX
PCM 有符号 32 位大端XX
PCM 有符号 32 位小端XX
MPEG-TS 中的 PCM 有符号 16/20/24 位大端X
PCM 无符号 8 位XX
PCM 无符号 16 位大端XX
PCM 无符号 16 位小端XX
PCM 无符号 24 位大端XX
PCM 无符号 24 位小端XX
PCM 无符号 32 位大端XX
PCM 无符号 32 位小端XX
PCM SGAX
QCELP / PureVoiceX
QDesign 音乐编解码器 1X
QDesign 音乐编解码器 2X仍然存在一些失真。
RealAudio 1.0 (14.4K)XXReal 14400 bit/s 编解码器
RealAudio 2.0 (28.8K)XReal 28800 bit/s 编解码器
RealAudio 3.0 (dnet)IXXReal 低比特率 AC-3 编解码器
RealAudio 无损X
RealAudio SIPR / ACELP.NETX
RK 音频 (RKA)X
SBC(低复杂度子带编解码器)XX用于蓝牙 A2DP
ShortenX
Sierra VMD 音频X用于 Sierra VMD 文件。
Smacker 音频X
SMPTE 302M AES3 音频XX
SonicXX实验性编解码器
Sonic 无损XX实验性编解码器
SpeexEEX通过外部库 libspeex 支持
TAK (Tom's 无损音频压缩器)X
True Audio (TTA)XX
TrueHDXX在 HD-DVD 和蓝光光盘中使用。
TwinVQ (VQF 风味)X
VIMAX用于 LucasArts SMUSH 动画。
ViewQuest VQCX
VorbisEX存在一个原生的但非常原始的编码器。
Voxware MetaSoundX
波形存档器X
WavPackXX
Westwood 音频 (SND1)X
Windows Media 音频 1XX
Windows Media 音频 2XX
Windows Media 无损音频X
Windows Media 音频 ProX
Windows Media 音频语音X
Xbox Media 音频 1X
Xbox Media 音频 2X

X 表示该列(编码/解码)中的功能已支持。

E 表示通过外部库提供支持。

I 表示也提供纯整数版本(确保在没有硬件浮点支持的系统上具有高性能)。

40.5 字幕格式

名称混合解复用编码解码
3GPP 定时文本XX
AQTitleXX
DVBXXXX
DVB 图文电视XE
DVDXXXX
JACOsubXXX
MicroDVDXXX
MPL2XX
MPsub (MPlayer)XX
PGSX
PJS (Phoenix)XX
RealTextXX
SAMIXX
Spruce 格式 (STL)XX
SSA/ASSXXXX
SubRip (SRT)XXXX
SubViewer v1XX
SubViewerXX
TED 演讲字幕XX
TTMLXX
VobSub (IDX+SUB)XX
VPlayerXX
WebVTTXXXX
XSUBXX

X 表示支持该功能。

E 表示通过外部库提供支持。

40.6 网络协议

名称支持
AMQPE
fileX
FTPX
GopherX
GophersX
HLSX
HTTPX
HTTPSX
IcecastX
MMSHX
MMSTX
管道X
Pro-MPEG FECX
RTMPX
RTMPEX
RTMPSX
RTMPTX
RTMPTEX
RTMPTSX
RTPX
SAMBAE
SCTPX
SFTPE
TCPX
TLSX
UDPX
ZMQE

X 表示支持该协议。

E 表示通过外部库提供支持。

40.7 输入/输出设备

名称输入输出
ALSAXX
BKTRX
cacaX
DV1394X
Lavfi 虚拟设备X
Linux 帧缓冲XX
JACKX
LIBCDIOX
LIBDC1394X
OpenALX
OpenGLX
OSSXX
PulseAudioXX
SDLX
Video4Linux2XX
VfW 捕获X
X11 抓取X
Win32 抓取X

X 表示支持输入/输出。

40.8 时间码

编解码器/格式读取写入
AVIXX
DVXX
GXFXX
MOVXX
MPEG1/2XX
MXFXX

41 另请参阅

ffplay, ffmpeg, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

42 作者

FFmpeg 开发人员。

有关作者的详细信息,请参阅项目的 Git 历史记录(https://git.ffmpeg.org/ffmpeg),例如,在 FFmpeg 源代码目录中输入命令 git log,或浏览在线存储库 https://git.ffmpeg.org/ffmpeg

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

本文档于2025 年 1 月 21 日使用 makeinfo 生成。

telepoint.bg 提供托管