ffprobe 文档

目录

1 概要

ffprobe [选项] 输入_url

2 描述

ffprobe 从多媒体流中收集信息,并以人可读和机器可读的方式打印出来。

例如,它可用于检查多媒体流所使用的容器格式以及其中包含的每个媒体流的格式和类型。

如果在输入中指定了 url,ffprobe 将尝试打开并探测 url 内容。如果 url 无法打开或识别为多媒体文件,则返回正的退出代码。

如果没有使用 o 指定输出,ffprobe 将写入标准输出。

ffprobe 既可以作为独立的应用程序使用,也可以与文本过滤器结合使用,后者可以执行更复杂的处理,例如统计处理或绘图。

选项用于列出 ffprobe 支持的某些格式,或用于指定要显示哪些信息,以及设置 ffprobe 将如何显示这些信息。

ffprobe 输出被设计为易于被文本过滤器解析,并且由一个或多个由选定的编写器定义的格式部分组成,该编写器由 输出_格式 选项指定。

节可以包含其他嵌套节,并由名称(可能与其他节共享)和唯一名称标识。请参阅 sections 的输出。

存储在容器或流中的元数据标签将被识别并打印在相应的“FORMAT”、“STREAM”、“STREAM_GROUP_STREAM”或“PROGRAM_STREAM”部分中。

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[:附加_流_指定符]

stream_type 是以下之一:“v”或“V”表示视频,“a”表示音频,“s”表示字幕,“d”表示数据,“t”表示附件。“v”匹配所有视频流,“V”仅匹配未附加图片、视频缩略图或封面艺术的视频流。如果使用 附加_流_指定符,则它匹配既具有此类型又匹配 附加_流_指定符 的流。否则,它匹配指定类型的所有流。

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

匹配属于具有指定符 组_指定符 的组的流。如果使用 附加_流_指定符,则它匹配既是组的一部分又匹配 附加_流_指定符 的流。组_指定符 可以是以下之一

group_index

匹配具有此组索引的流。

#group_id 或 i:group_id

匹配具有此组 ID 的流。

p:程序_id[:附加_流_指定符]

匹配属于 ID 为 程序_id 的程序的流。如果使用 附加_流_指定符,则它匹配既是程序的一部分又匹配 附加_流_指定符 的流。

#流_id 或 i:流_id

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

m:[:]

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

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

匹配具有给定处置的流。处置 是一个或多个使用“+”连接的处置(如 -dispositions 选项打印的)的列表。

u

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

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

3.2 通用选项

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

-L

显示许可证。

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

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

arg 的可能值为

long

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

full

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

decoder=解码器_名称

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

encoder=编码器_名称

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

demuxer=解复用器_名称

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

muxer=复用器_名称

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

filter=过滤器_名称

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

bsf=比特流_过滤器_名称

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

protocol=协议_名称

打印名为 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
Specific Processors
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 选项。它们分为两类:

通用 (generic)

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

私有 (private)

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

例如,要将 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 主要选项

-f format

强制使用的格式。

-unit

显示显示值的单位。

-prefix

为显示的值使用 SI 前缀。除非使用 "-byte_binary_prefix" 选项,否则所有前缀都是十进制的。

-byte_binary_prefix

强制为字节值使用二进制前缀。

-sexagesimal

为时间值使用六十进制格式 HH:MM:SS.MICROSECONDS。

-pretty

美化显示值的格式,它对应于选项 "-unit -prefix -byte_binary_prefix -sexagesimal"。

-output_format, -of, -print_format writer_name[=writer_options]

设置输出打印格式。

writer_name 指定写入器的名称,writer_options 指定要传递给写入器的选项。

例如,要以 JSON 格式打印输出,请指定

-output_format json

有关可用输出打印格式的更多详细信息,请参阅下面的“写入器”部分。

-sections

打印节结构和节信息,然后退出。输出不适合由机器解析。

-select_streams stream_specifier

仅选择由 stream_specifier 指定的流。此选项仅影响与流相关的选项(例如 show_streamsshow_packets 等)。

例如,要仅显示音频流,可以使用命令

ffprobe -show_streams -select_streams a INPUT

要仅显示索引为 1 的视频流的视频数据包

ffprobe -show_packets -select_streams v:1 INPUT
-show_data

以十六进制和 ASCII 转储形式显示有效负载数据。与 -show_packets 结合使用,将转储数据包的数据。与 -show_streams 结合使用,将转储编解码器附加数据。

转储以 "data" 字段的形式打印。它可能包含换行符。

-show_data_hash algorithm

显示有效负载数据的哈希值,对于使用 -show_packets 的数据包,以及使用 -show_streams 的编解码器附加数据。

-show_error

显示在尝试探测输入时发现的错误信息。

错误信息将打印在名为 "ERROR" 的节中。

-show_format

显示有关输入多媒体流的容器格式的信息。

所有容器格式信息都打印在名为 "FORMAT" 的节中。

-show_format_entry name

-show_format 类似,但只打印容器格式信息的指定条目,而不是全部。可以多次指定此选项,然后将显示所有指定的条目。

此选项已弃用,请改用 show_entries

-show_entries section_entries

设置要显示的条目列表。

条目根据以下语法指定。section_entries 包含以 : 分隔的节条目列表。每个节条目由一个节名称(或唯一名称)组成,可选地后跟一个该节本地的条目列表,以 , 分隔。

如果指定了节名称,但后面没有 =,则所有条目都会打印到输出,以及所有包含的节。否则,只打印本地节条目列表中指定的条目。特别是,如果指定了 =,但本地条目列表为空,则不会显示该节的任何条目。

请注意,在输出中不会遵循本地节条目的指定顺序,并且会保留通常的显示顺序。

形式语法由以下内容给出

LOCAL_SECTION_ENTRIES ::= SECTION_ENTRY_NAME[,LOCAL_SECTION_ENTRIES]
SECTION_ENTRY         ::= SECTION_NAME[=[LOCAL_SECTION_ENTRIES]]
SECTION_ENTRIES       ::= SECTION_ENTRY[:SECTION_ENTRIES]

例如,要仅显示每个流的索引和类型,以及数据包的 PTS 时间、持续时间和流索引,您可以指定参数

packet=pts_time,duration_time,stream_index : stream=index,codec_type

要显示“format”节中的所有条目,但仅显示“stream”节中的编解码器类型,请指定参数

format : stream=codec_type

要显示流和格式节中的所有标签

stream_tags : format_tags

要仅显示流节中的 title 标签(如果可用)

stream_tags=title
-show_packets

显示有关输入多媒体流中包含的每个数据包的信息。

每个数据包的信息都打印在名为 "PACKET" 的专用节中。

-show_frames

显示有关输入多媒体流中包含的每个帧和字幕的信息。

每个帧的信息都打印在名为 "FRAME" 或 "SUBTITLE" 的专用节中。

-show_log loglevel

根据 loglevel 中设置的值(请参阅 -loglevel),显示来自解码器关于每个帧的日志信息。此选项需要 -show_frames

每个日志信息都打印在名为 "LOG" 的专用节中。

-show_streams

显示有关输入多媒体流中包含的每个媒体流的信息。

每个媒体流信息都打印在名为 "STREAM" 的专用节中。

-show_programs

显示有关程序及其包含在输入多媒体流中的流的信息。

每个媒体流信息都打印在名为 "PROGRAM_STREAM" 的专用节中。

-show_stream_groups

显示有关流组及其包含在输入多媒体流中的流的信息。

每个媒体流信息都打印在名为 "STREAM_GROUP_STREAM" 的专用节中。

-show_chapters

显示有关存储在格式中的章节的信息。

每个章节都打印在名为 "CHAPTER" 的专用节中。

-count_frames

计算每个流的帧数,并在相应的流节中报告它。

-count_packets

计算每个流的数据包数,并在相应的流节中报告它。

-read_intervals read_intervals

仅读取指定的间隔。read_intervals 必须是以“,”分隔的间隔规范序列。ffprobe 将搜索到间隔的起始点,并将从那里继续读取。

每个间隔由两个可选部分指定,以“%”分隔。

第一部分指定间隔的起始位置。它被解释为绝对位置,或者如果它前面有“+”字符,则被解释为与当前位置的相对偏移量。如果未指定第一部分,则在读取此间隔时将不会执行任何搜索。

第二部分指定间隔的结束位置。它被解释为绝对位置,或者如果前面有“+”字符,则被解释为相对于当前位置的偏移量。如果偏移量规范以“#”开头,则将其解释为从间隔开始读取的数据包数量(不包括刷新数据包)。如果未指定第二部分,程序将读取到输入结束。

请注意,查找不是精确的,因此实际的间隔起始点可能与指定的位置不同。此外,当指定间隔持续时间时,绝对结束时间将通过将持续时间添加到查找文件找到的间隔起始点来计算,而不是添加到指定的起始值。

形式语法由以下内容给出

INTERVAL  ::= [START|+START_OFFSET][%[END|+END_OFFSET]]
INTERVALS ::= INTERVAL[,INTERVALS]

以下是一些示例。

  • 查找时间 10,读取数据包直到找到的查找点之后 20 秒,然后查找位置 01:30 (1 分 30 秒),读取数据包直到位置 01:45
    10%+20,01:30%01:45
    
  • 在查找位置 01:23 后仅读取 42 个数据包
    01:23%+#42
    
  • 仅从开头读取前 20 秒
    %+20
    
  • 从开头读取直到位置 02:30
    %02:30
    
-show_private_data,-private

显示私有数据,即取决于特定显示元素格式的数据。默认情况下启用此选项,但您可能需要在特定用途中禁用它,例如在创建符合 XSD 的 XML 输出时。

-show_program_version

显示与程序版本相关的信息。

版本信息将打印在名为“PROGRAM_VERSION”的部分中。

-show_library_versions

显示与库版本相关的信息。

每个库的版本信息将打印在名为“LIBRARY_VERSION”的部分中。

-show_versions

显示与程序和库版本相关的信息。这相当于同时设置 -show_program_version-show_library_versions 选项。

-show_pixel_formats

显示有关 FFmpeg 支持的所有像素格式的信息。

每种格式的像素格式信息将打印在名为“PIXEL_FORMAT”的部分中。

-show_optional_fields value

一些写入器(例如 JSON 和 XML)会省略打印具有无效或不适用值的字段,而其他写入器始终会打印它们。此选项使您可以控制此行为。有效值为 always/1never/0auto/-1。默认值为 auto

-analyze_frames

分析帧和/或它们的辅助数据,直到提供的读取间隔,提供可能在流级别有用的附加信息。必须与 -show_streams 选项配对使用,否则将不起作用。

当前,启用此选项时提供的附加字段是 closed_captionsfilm_grain 字段。

例如,分析前 20 秒并填充这些字段

ffprobe -show_streams -analyze_frames -read_intervals "%+20" INPUT
-bitexact

强制位精确输出,有助于生成不依赖于特定构建的输出。

-i input_url

读取 input_url

-o output_url

将输出写入 output_url。如果未指定,则将输出发送到 stdout。

4 写入器

写入器定义了 ffprobe 采用的输出格式,并将用于打印输出的所有部分。

写入器可以接受一个或多个参数,这些参数指定要采用的选项。这些选项指定为以“:”分隔的 key=value 对列表。

所有写入器都支持以下选项

string_validation,sv

设置字符串验证模式。

接受以下值。

fail

如果在输入中找到无效的字符串 (UTF-8) 序列或代码点,写入器将立即失败。这对于验证输入元数据特别有用。

ignore

任何验证错误都将被忽略。这可能会导致输出损坏,尤其是在使用 json 或 xml 写入器时。

replace

写入器将用 string_validation_replacement 指定的字符串替换无效的 UTF-8 序列或代码点。

默认值为 ‘replace’。

string_validation_replacement,svr

设置在 string_validation 设置为 ‘replace’ 时使用的替换字符串。

如果未指定此选项,则写入器将假定为空字符串,即它将从输入字符串中删除无效的序列。

下面是当前可用的写入器的说明。

4.1 默认

默认格式。

以以下形式打印每个部分

[SECTION]
key1=val1
...
keyN=valN
[/SECTION]

元数据标记以行为单位打印在相应的 FORMAT、STREAM、STREAM_GROUP_STREAM 或 PROGRAM_STREAM 部分中,并以字符串“TAG:”为前缀。

下面是接受选项的说明。

nokey,nk

如果设置为 1,则指定不打印每个字段的键。默认值为 0。

noprint_wrappers,nw

如果设置为 1,则指定不打印节标题和页脚。默认值为 0。

4.2 紧凑, csv

紧凑和 CSV 格式。

csv 写入器等效于 compact,但支持不同的默认值。

每个部分都打印在单行上。如果未指定任何选项,则输出形式为

section|key1=val1| ... |keyN=valN

元数据标记打印在相应的“format”或“stream”部分中。如果打印了元数据标记键,则以字符串“tag:”为前缀。

下面是接受选项的说明。

item_sep,s

指定用于分隔输出行中字段的字符。它必须是单个可打印字符,默认为“|”(对于 csv 写入器为“,”)。

nokey,nk

如果设置为 1,则指定不打印每个字段的键。其默认值为 0(对于 csv 写入器为 1)。

escape,e

设置要使用的转义模式,默认为“c”(对于 csv 写入器为“csv”)。

它可以采用以下值之一

c

执行类似 C 的转义。包含换行符(‘\n’)、回车符(‘\r’)、制表符(‘\t’)、换页符(‘\f’)、转义字符(‘\’)或项目分隔符字符 SEP 的字符串使用类似 C 的转义方式进行转义,因此换行符转换为序列 ‘\n’,回车符转换为 ‘\r’,‘\’转换为 ‘\\’,分隔符 SEP 转换为 ‘\SEP’。

csv

按照 RFC4180 中的描述执行类似 CSV 的转义。包含换行符(‘\n’)、回车符(‘\r’)、双引号(‘"’)或 SEP 的字符串用双引号括起来。

none

不执行转义。

print_section,p

如果值为 1,则在每行开头打印节名称;如果值设置为 0,则禁用此功能。默认值为 1

4.3 扁平

平面格式。

自由格式输出,其中每行包含一个显式的键=值,例如 "streams.stream.3.tags.foo=bar"。输出是经过 shell 转义的,因此只要分隔符是字母数字字符或下划线(请参阅 sep_char 选项),就可以直接嵌入到 sh 脚本中。

下面是接受选项的说明。

sep_char, s

用于分隔打印字段键中的章节、节名称、ID 和潜在标签的分隔符。

默认值是 ‘.’。

hierarchical, h

指定节名称规范是否应为分层结构。如果设置为 1,并且当前章节中有多个节,则节名称将以章节名称为前缀。如果设置为 0,则禁用此行为。

默认值为 1。

4.4 ini

INI 格式输出。

以基于 INI 的格式打印输出。

采用以下约定

  • 所有键和值均为 UTF-8 编码
  • .’ 是子组分隔符
  • 换行符、‘\t’、‘\f’、‘\b’ 和以下字符会被转义
  • \’ 是转义字符
  • #’ 是注释指示符
  • =’ 是键/值分隔符
  • :’ 不使用,但通常被解析为键/值分隔符

此编写器接受选项,选项形式为 key=value 对列表,并以 ‘:’ 分隔。

下面是接受选项的说明。

hierarchical, h

指定节名称规范是否应为分层结构。如果设置为 1,并且当前章节中有多个节,则节名称将以章节名称为前缀。如果设置为 0,则禁用此行为。

默认值为 1。

4.5 json

基于 JSON 的格式。

每个节都使用 JSON 表示法打印。

下面是接受选项的说明。

compact, c

如果设置为 1,则启用紧凑输出,即每个节将打印在单行上。默认值为 0。

有关 JSON 的更多信息,请参阅 http://www.json.org/

4.6 xml

基于 XML 的格式。

XML 输出在 FFmpeg 数据目录中安装的 XML 模式描述文件 ffprobe.xsd 中进行了描述。

该模式的更新版本可以从 URL http://www.ffmpeg.org/schema/ffprobe.xsd 获取,该 URL 会重定向到 FFmpeg 开发源代码树中提交的最新模式。

请注意,只有在没有指定特殊的全局输出选项(unitprefixbyte_binary_prefixsexagesimal 等)时,发出的输出才符合 ffprobe.xsd 模式。

下面是接受选项的说明。

fully_qualified, q

如果设置为 1,则指定输出是否应为完全限定。默认值为 0。这对于生成可以通过 XSD 文件验证的 XML 文件是必需的。

xsd_strict, x

如果设置为 1,则执行更多检查以确保输出符合 XSD。默认值为 0。此选项会自动将 fully_qualified 设置为 1。

有关 XML 格式的更多信息,请参阅 https://www.w3.org/XML/

5 时间码

ffprobe 支持时间码提取

  • MPEG1/2 时间码从 GOP 中提取,并在视频流详细信息中可用(-show_streams,请参阅 timecode)。
  • MOV 时间码从 tmcd 轨道提取,因此在 tmcd 流元数据中可用(-show_streams,请参阅 TAG:timecode)。
  • DV、GXF 和 AVI 时间码在格式元数据中可用(-show_format,请参阅 TAG:timecode)。

6 语法

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

6.1 引号和转义

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

  • '’ 和 ‘\’ 是特殊字符(分别用于引号和转义)。此外,根据使用转义和引号的特定语法,可能还存在其他特殊字符。
  • 特殊字符通过在其前面添加 ‘\’ 来转义。
  • 所有用 ‘''’ 引起来的字符都按字面形式包含在解析后的字符串中。引号字符 ‘'’ 本身不能被引用,因此你可能需要关闭引号并转义它。
  • 除非转义或引用,否则从解析的字符串中删除前导和尾随空格。

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

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

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

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

6.2 日期

接受的语法是

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

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

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

6.3 时间持续

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

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

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

或者

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

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

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

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

6.4 视频尺寸

指定源视频的大小,它可以是 宽度x高度 形式的字符串,也可以是大小缩写的名称。

识别以下缩写

ntsc

720x480

pal

720x576

qntsc

352x240

qpal

352x288

sntsc

640x480

spal

768x576

film

352x240

ntsc-film

352x240

sqcif

128x96

qcif

176x144

cif

352x288

4cif

704x576

16cif

1408x1152

qqvga

160x120

qvga

320x240

vga

640x480

svga

800x600

xga

1024x768

uxga

1600x1200

qxga

2048x1536

sxga

1280x1024

qsxga

2560x2048

hsxga

5120x4096

wvga

852x480

wxga

1366x768

wsxga

1600x1024

wuxga

1920x1200

woxga

2560x1600

wqsxga

3200x2048

wquxga

3840x2400

whsxga

6400x4096

whuxga

7680x4800

cga

320x200

ega

640x350

hd480

852x480

hd720

1280x720

hd1080

1920x1080

2k

2048x1080

2kflat

1998x1080

2kscope

2048x858

4k

4096x2160

4kflat

3996x2160

4kscope

4096x1716

nhd

640x360

hqvga

240x160

wqvga

400x240

fwqvga

432x240

hvga

480x320

qhd

960x540

2kdci

2048x1080

4kdci

4096x2160

uhd2160

3840x2160

uhd4320

7680x4320

6.5 视频速率

指定视频的帧率,表示为每秒生成的帧数。它必须是 frame_rate_num/frame_rate_den 格式的字符串、整数、浮点数或有效的视频帧率缩写。

识别以下缩写

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

6.6 比率

比率可以表示为表达式,或者 分子:分母 的形式。

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

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

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

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

7 表达式求值

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

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

可以将两个表达式 expr1expr2 组合形成另一个表达式 "expr1;expr2"。expr1expr2 将依次求值,新表达式的值为 expr2 的值。

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

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

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

以下函数可用:

abs(x)

计算 x 的绝对值。

acos(x)

计算 x 的反余弦值。

asin(x)

计算 x 的反正弦值。

atan(x)

计算 x 的反正切值。

atan2(y, x)

计算 y/x 的反正切的主值。

between(x, min, max)

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

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

计算 xy 的按位与/或运算。

在执行按位运算之前,xy 的计算结果将转换为整数。

请注意,转换为整数和转换回浮点数都可能导致精度损失。请注意大数(通常为 2^53 及更大)的意外结果。

ceil(expr)

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

clip(x, min, max)

返回 x 的值,该值被限制在 minmax 之间。

cos(x)

计算 x 的余弦值。

cosh(x)

计算 x 的双曲余弦值。

eq(x, y)

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

exp(x)

计算 x 的指数值(以 e 为底,即欧拉数)。

floor(expr)

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

gauss(x)

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

gcd(x, y)

返回 xy 的最大公约数。如果 xy 均为 0,或者两者中任何一个或两个都小于零,则行为未定义。

gt(x, y)

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

gte(x, y)

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

hypot(x, y)

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

if(x, y)

计算 x 的值,如果结果非零,则返回计算 y 的结果,否则返回 0。

if(x, y, z)

计算 x 的值,如果结果非零,则返回计算 y 的结果,否则返回计算 z 的结果。

ifnot(x, y)

计算 x 的值,如果结果为零,则返回计算 y 的结果,否则返回 0。

ifnot(x, y, z)

计算 x 的值,如果结果为零,则返回计算 y 的结果,否则返回计算 z 的结果。

isinf(x)

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

isnan(x)

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

ld(idx)

加载索引为 idx 的内部变量的值,该值先前已使用 st(idx, expr) 存储。该函数返回加载的值。

lerp(x, y, z)

返回 xy 之间按 z 量进行的线性插值。

log(x)

计算 x 的自然对数。

lt(x, y)

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

lte(x, y)

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

max(x, y)

返回 xy 之间的最大值。

min(x, y)

返回 xy 之间的最小值。

mod(x, y)

计算 x 除以 y 的余数。

not(expr)

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

pow(x, y)

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

print(t)
print(t, l)

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

random(idx)

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

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

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

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

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

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

root(expr, max)

在 0..max 区间内,查找使以 ld(0) 为参数的 expr 所代表的函数值为 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

8 编解码器选项

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

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

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

以下是支持的选项列表

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

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

ab 整数 (编码,音频)

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

bt 整数 (编码,视频)

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

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

设置通用标志。

可能的值

mv4

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

qpel

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

loop

使用环路滤波器。

qscale

使用固定 qscale。

pass1

在第一次编码模式下使用内部 2 次编码率控制。

pass2

在第二次编码模式下使用内部 2 次编码率控制。

gray

仅解码/编码灰度。

psnr

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

truncated

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

drop_changed

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

ildct

使用隔行 DCT。

low_delay

强制低延迟。

global_header

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

bitexact

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

aic

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

ilme

应用隔行运动估计。

cgop

使用封闭 GOP。

output_corrupt

输出甚至可能已损坏的帧。

time_base 有理数

设置编解码器时间基准。

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

g 整数 (编码,视频)

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

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

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

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

设置音频通道数。

cutoff 整数 (编码,音频)

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

frame_size 整数 (编码,音频)

设置音频帧大小。

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

frame_number 整数

设置帧号。

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

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

qblur 浮点数 (编码,视频)

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

qmin 整数 (编码,视频)

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

qmax 整数 (编码,视频)

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

qdiff 整数 (编码,视频)

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

bf 整数 (编码,视频)

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

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

默认值为 0。

b_qfactor 浮点数 (编码,视频)

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

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

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

可能的值

autodetect
xvid_ilace

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

ump4

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

no_padding

填充错误(自动检测)

amv
qpel_chroma
std_qpel

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

qpel_chroma2
direct_blocksize

直接-qpel-块大小错误(每个 fourcc/版本自动检测)

edge

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

hpel_chroma
dc_clip
ms

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

trunc

截断帧

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

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

可能的值

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

b_qoffset 浮点数 (编码,视频)

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

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

设置错误检测标志。

可能的值

crccheck

验证嵌入的 CRC

bitstream

检测比特流规范偏差

buffer

检测不正确的比特流长度

explode

在检测到小错误时中止解码

ignore_err

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

careful

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

compliant

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

aggressive

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

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

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

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

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

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

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

i_qfactor 浮点数 (编码,视频)

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

i_qoffset 浮点数 (编码,视频)

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

dct 整数 (编码,视频)

设置 DCT 算法。

可能的值

auto

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

fastint

快速整数

int

精确整数

mmx
altivec
faan

浮点 AAN DCT

lumi_mask 浮点数 (编码,视频)

压缩比中等区域更亮的区域。

tcplx_mask float (编码,视频)

设置时间复杂度掩蔽。

scplx_mask float (编码,视频)

设置空间复杂度掩蔽。

p_mask float (编码,视频)

设置帧间掩蔽。

dark_mask float (编码,视频)

对黑暗区域的压缩比中等区域更强。

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

选择 IDCT 实现。

可能的值

auto
int
simple
simplemmx
simpleauto

自动选择与 simple 版本兼容的 IDCT

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点 AAN IDCT

slice_count integer
ec flags (解码,视频)

设置错误隐藏策略。

可能的值

guess_mvs

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

deblock

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

favor_inter

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

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

设置样本宽高比。

sar 有理数 (编码,视频)

设置样本宽高比。是 aspect 的别名。

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

打印特定的调试信息。

可能的值

pict

图像信息

rc

码率控制

bitstream
mb_type

宏块 (MB) 类型

qp

每个块的量化参数 (QP)

dct_coeff
green_metadata

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

skip
startcode
er

错误识别

mmco

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

bugs
buffers

图像缓冲区分配

thread_ops

线程操作

nomc

跳过运动补偿

cmp integer (编码,视频)

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

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

噪声保留平方差之和

w53

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

w97

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

dctmax
chroma
subcmp integer (编码,视频)

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

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

噪声保留平方差之和

w53

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

w97

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

dctmax
chroma
mbcmp integer (编码,视频)

设置宏块比较函数。

可能的值

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差之和

dct

绝对 DCT 变换差之和

psnr

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

bit

块所需的比特数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差之和

vsse

平方垂直差之和

nsse

噪声保留平方差之和

w53

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

w97

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

dctmax
chroma
ildctcmp integer (编码,视频)

设置隔行 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 integer (编码,视频)

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

(1024, INT_MAX)

全运动估计(最慢)

(768, 1024]

umh 运动估计

(512, 768]

十六进制运动估计

(256, 512]

l2s 菱形运动估计

[2,256]

可变菱形运动估计

(-1, 2)

小菱形运动估计

-1

有趣菱形运动估计

(INT_MIN, -1)

sab 菱形运动估计

last_pred integer (编码,视频)

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

precmp integer (编码,视频)

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

可能的值

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 integer (编码,视频)

设置用于运动估计预先传递的菱形类型和大小。

subq integer (编码,视频)

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

me_range integer (编码,视频)

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

global_quality integer (编码,音频,视频)
slice_flags integer
mbd integer (编码,视频)

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

可能的值

simple

使用 mbcmp (默认)

bits

使用最少比特

rd

使用最佳率失真

rc_init_occupancy integer (编码,视频)

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

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

可能的值

fast

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

noout

跳过比特流编码。

ignorecrop

忽略来自 sps 的裁剪信息。

local_header

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

chunks

帧数据可能会拆分成多个块。

showall

显示第一个关键帧之前的所有帧。

export_mvs

将运动矢量导出到帧边数据(请参阅 AV_FRAME_DATA_MOTION_VECTORS)以供支持的编解码器使用。另请参阅 doc/examples/export_mvs.c

skip_manual

不要跳过样本,并将跳过信息导出为帧边数据。

ass_ro_flush_noop

在刷新时不要重置 ASS ReadOrder 字段。

icc_profiles

从/向色度标签生成/解析嵌入式 ICC 配置文件。

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

可能的值

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

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

可能的值

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

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

mblmin 整数 (编码,视频)

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

mblmax 整数 (编码,视频)

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

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

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

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

可能的值

none

不丢弃任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

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

nointra

丢弃除 I 帧外的所有帧。

all

丢弃所有帧。

默认值为“default”。

bidir_refine 整数 (编码,视频)

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

keyint_min 整数 (编码,视频)

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

refs 整数 (编码,视频)

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

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

设置速率失真最优量化。

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

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

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

可能的值

bt709

BT.709

bt470m

BT.470 M

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

film

Film

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

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

可能的值

bt709

BT.709

gamma22

BT.470 M

gamma28

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

linear

线性

log
log100

对数

log_sqrt
log316

对数平方根

iec61966_2_4
iec61966-2-4

IEC 61966-2-4

bt1361
bt1361e

BT.1361

iec61966_2_1
iec61966-2-1

IEC 61966-2-1

bt2020_10
bt2020_10bit

BT.2020 - 10 位

bt2020_12
bt2020_12bit

BT.2020 - 12 位

smpte2084

SMPTE ST 2084

smpte428
smpte428_1

SMPTE ST 428-1

arib-std-b67

ARIB STD-B67

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

可能的值

rgb

RGB

bt709

BT.709

fcc

FCC

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

ycocg

YCOCG

bt2020nc
bt2020_ncl

BT.2020 NCL

bt2020c
bt2020_cl

BT.2020 CL

smpte2085

SMPTE 2085

chroma-derived-nc

色度派生 NCL

chroma-derived-c

色度派生 CL

ictcp

ICtCp

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

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

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

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

可能的值

left
center
topleft
top
bottomleft
bottom
log_level_offset 整数

设置日志级别偏移。

slices 整数 (编码,视频)

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

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

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

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

可能的值

slice

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

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

frame

一次解码多个帧。

默认值为“slice+frame”。

audio_service_type 整数 (编码,音频)

设置音频服务类型。

可能的值

ma

主音频服务

ef

效果

vi

视觉障碍

hi

听觉障碍

di

对话

co

评论

em

紧急情况

vo

旁白

ka

卡拉OK

request_sample_fmt sample_fmt (解码,音频)

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

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

设置输入字幕字符编码。

field_order 场序 (视频)

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

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 不能从命令行更改。此外,硬件解码器将不应用左/上裁剪。

9 解码器

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

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

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

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

10 视频解码器

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

10.1 av1

AOMedia Video 1 (AV1) 解码器。

10.1.1 选项

operating_point

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

10.2 hevc

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

该解码器支持最多包含两个视图的 MV-HEVC 多视图流。要输出的视图通过向解码器提供视图 ID 列表来选择(view_ids 选项)。此选项可以在解码器初始化之前静态设置,也可以从 get_format() 回调设置 - 当视图计数或 ID 在解码期间动态更改时很有用。

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

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

10.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 相同的有效性限制适用于此选项。

10.3 rawvideo

原始视频解码器。

此解码器解码 rawvideo 流。

10.3.1 选项

top top_field_first

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

-1

假设视频是逐行的(默认)

0

假设为底场优先

1

假设为顶场优先

10.4 libdav1d

dav1d AV1 解码器。

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

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

10.5 libdavs2

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

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

10.6 libuavs3d

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

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

10.6.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

10.7 libxevd

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

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

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

10.7.1 选项

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

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

threads (threads)

强制使用特定数量的线程

10.8 QSV 解码器

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

10.8.1 通用选项

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

async_depth

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

gpu_copy

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

default
on
off

10.8.2 HEVC 选项

hevc_qsv 的额外选项。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

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

10.9 v210

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

10.9.1 选项

custom_stride

设置 v210 数据行的字节大小。默认值为 0(自动检测)。您可以对 BOXX 文件中看到的无跨距 v210 使用特殊值 -1。

11 音频解码器

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

11.1 ac3

AC-3 音频解码器。

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

11.1.1 AC-3 解码器选项

-drc_scale value

动态范围缩放因子。应用于 AC-3 流中动态范围值的因子。此因子以指数方式应用。默认值为 1。有 3 个值得注意的缩放因子范围

drc_scale == 0

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

0 < drc_scale <= 1

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

drc_scale > 1

DRC 已启用。不对称地应用 drc_scale。响亮的声音被完全压缩。柔和的声音得到增强。

11.2 flac

FLAC 音频解码器。

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

11.2.1 FLAC 解码器选项

-use_buggy_lpc

lavc FLAC 编码器在产生具有高 LPC 值(如默认值)的错误流时存在问题。此选项允许使用 lavc 旧的错误 LPC 逻辑进行解码,从而正确解码此类流。

11.3 ffwavesynth

内部波形合成器。

此解码器根据预定义的序列生成波形。它的使用纯粹是内部的,它接受的数据格式没有公开文档。

11.4 libcelt

libcelt 解码器封装器。

libcelt 允许 libavcodec 解码 Xiph CELT 超低延迟音频编解码器。在配置期间需要存在 libcelt 头文件和库。您需要使用 --enable-libcelt 显式配置构建。

11.5 libgsm

libgsm 解码器封装器。

libgsm 允许 libavcodec 解码 GSM 全速率音频编解码器。在配置期间需要存在 libgsm 头文件和库。您需要使用 --enable-libgsm 显式配置构建。

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

11.6 libilbc

libilbc 解码器封装器。

libilbc 允许 libavcodec 解码互联网低比特率编解码器 (iLBC) 音频编解码器。在配置期间需要存在 libilbc 头文件和库。您需要使用 --enable-libilbc 显式配置构建。

11.6.1 选项

libilbc 封装器支持以下选项。

enhance

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

11.7 libopencore-amrnb

libopencore-amrnb 解码器封装器。

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

存在一个 FFmpeg 原生 AMR-NB 解码器,因此用户可以在没有此库的情况下解码 AMR-NB。

11.8 libopencore-amrwb

libopencore-amrwb 解码器封装器。

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

存在一个 FFmpeg 原生 AMR-WB 解码器,因此用户可以在没有此库的情况下解码 AMR-WB。

11.9 libopus

libopus 解码器封装器。

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

存在一个 FFmpeg 原生 Opus 解码器,因此用户可以在没有此库的情况下解码 Opus。

12 字幕解码器

12.1 libaribb24

ARIB STD-B24 字幕解码器。

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

12.1.1 libaribb24 解码器选项

-aribb24-base-path path

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

默认情况下未设置。

-aribb24-skip-ruby-text boolean

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

默认启用。

12.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 解码器优先。

12.2.1 libaribcaption 解码器选项

-sub_type subtitle_type

指定解码字幕的格式。

bitmap

图形图像。

ass

ASS 格式化文本。

text

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

默认值为 ass,与 libaribb24 解码器相同。一些现有的播放器(例如,mpv)期望 ARIB 字幕采用 ASS 格式。

-caption_encoding encoding_scheme

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

auto

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

jis

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

utf8

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

latin

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

-font font_name[,font_name2,...]

指定用于 bitmapass 类型字幕渲染的以逗号分隔的字体系列名称列表。只有第一个字体名称用于 ass 类型字幕。

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

-ass_single_rect boolean

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

默认值为 false

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

-force_outline_text boolean

指定是否始终为所有字符渲染轮廓文本,无论字符样式是否指示。

默认值为 false

-outline_width number (0.0 - 3.0)

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

默认值为 1.5

-ignore_background boolean

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

默认值为 false

-ignore_ruby boolean

指定是否忽略对 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(中等大小;半宽)字符替换为半宽字形。此选项在具有符合 Adobe-Japan1 标准字体的 FreeType 或 DirectWrite 渲染器下工作。例如,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。

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

12.3 dvbsub

12.3.1 选项

compute_clut
-2

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

-1

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

0

永不计算 CLUT。

1

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

dvb_substream

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

12.4 dvdsub

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

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

12.5 libzvbi-teletext

Libzvbi 允许 libavcodec 解码 DVB 图文电视页面和 DVB 图文电视字幕。需要在配置期间存在 libzvbi 头文件和库。您需要使用 --enable-libzvbi 显式配置构建。

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

13 比特流过滤器

当您配置 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

以下是对当前可用的码流过滤器及其参数(如果有)的描述。

13.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 以及相关格式。

13.2 av1_metadata

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

td

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

insert

在每个尚未拥有时间分隔符的 TU 的开头插入一个 TD。

remove

从每个具有时间分隔符的 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。

13.3 chomp

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

13.4 dca_core

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

13.5 dovi_rpu

操作 HEVC/AV1 码流中的杜比视界元数据,可选择启用元数据压缩。

strip

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

compression

要启用的压缩级别。

none

无元数据压缩。

limited

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

extended

扩展元数据压缩。设备不一定需要支持此功能。请注意,此级别目前在 libavcodec 中的行为与“limited”相同。

13.6 dump_extra

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

频率

附加参数指定应过滤哪些数据包。它接受以下值

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

13.7 dv_error_marker

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

颜色

用于替换损坏块的颜色

状态

一个 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 节

13.8 eac3_core

从 E-AC-3 流中提取核心,删除额外的声道。

13.9 extract_extradata

提取带内附加数据。

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

此比特流过滤器检测带内标头,并使其作为附加数据可用。

移除

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

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

13.11 hapqa_extract

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

纹理

指定要保留的纹理。

颜色
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

13.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”,表示过滤器应尝试根据输入流属性猜测级别。

13.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)输出格式中。

13.14 h264_redundant_pps

此操作对某些包含冗余 PPS 的蓝光 BDMV H264 流应用特定的修复。PPS 会修改流中不相关的参数,从而混淆需要正确附加数据的其他转换。

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

此 BSF 会删除额外的 PPS 并重写切片头,以便该流在全局头中使用单个前导 PPS,从而解决此问题。

13.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”,表示过滤器应尝试根据输入流属性猜测级别。

13.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)输出格式中。

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

13.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 fourcc 的 AVI 中的 MJPEG,是受限制的 JPEG,它具有固定的 - 并且 *省略* - 哈夫曼表。JPEG 必须是 YCbCr 色彩空间,必须是 4:2:2,并且必须使用基本的哈夫曼编码,而不是算术或渐进编码。 。 。。您确实可以提取 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

13.19 mjpegadump

将 MJPEG A 标头添加到比特流,以启用 Quicktime 的解码。

13.20 mov2textsub

从 MOV 字幕中提取可表示的文本文件,并从每个字幕数据包中剥离元数据标头。

另请参阅 text2movsub 过滤器。

13.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)。

13.22 mpeg4_unpack_bframes

解包 DivX 风格的打包 B 帧。

DivX 风格的打包 B 帧不是有效的 MPEG-4,只是对损坏的 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

13.23 noise

损坏数据包的内容或只是丢弃它们而不损坏容器。可用于模糊测试或测试错误恢复/隐藏。

参数

amount

接受一个表达式,该表达式的每次数据包评估都会确定该数据包中字节被修改的频率。小于 0 的值会导致可变频率。默认值为 0,表示不进行任何修改。但是,如果既未指定 amount 也未指定 drop,则 amount 将设置为 -1。有关接受的变量,请参见下文。

drop

接受一个按数据包评估的表达式,其值确定是否丢弃该数据包。评估为正值会导致丢弃该数据包。评估为负值会导致丢弃它的机会可变,大致与该值的大小成反比。默认值为 0,表示不丢弃。有关接受的变量,请参见下文。

dropamount

接受一个非负整数,该整数会根据其值的大小,以大致成反比的概率来决定是否丢弃数据包。默认值为 0,表示不丢弃任何数据包。此选项保留是为了向后兼容,它等同于将 drop 设置为具有相同绝对值的负数。例如,dropamount=4drop=-4 的效果相同。如果同时指定了 drop 选项,则会忽略此选项。

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

n

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

tb

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

pts

数据包的显示时间戳 (Presentation Timestamp)。

dts

数据包的解码时间戳 (Decoding Timestamp)。

nopts

表示 AV_NOPTS_VALUE 的常量。

startpts

流中出现的第一个非 AV_NOPTS_VALUE 的 PTS。

startdts

流中出现的第一个非 AV_NOPTS_VALUE 的 DTS。

duration
d

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

pos

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

size

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

key

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

state

一个伪随机整数,主要从数据包负载的内容派生而来。

13.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 秒丢弃 1 秒的音频,并对其余音频添加一些随机噪声。

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

13.24 null

此码流过滤器将数据包原封不动地传递。

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

13.26 pgs_frame_merge

将以“显示集结束”段结尾的 PGS 字幕段序列合并到单个数据包中。

某些支持 PGS 字幕的容器(复用器 matroska)需要这样做。

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

13.28 remove_extra

从数据包中删除额外数据 (extradata)。

它接受以下参数

频率

设置要从中删除额外数据的帧类型。

k

仅从非关键帧中删除额外数据。

keyframe

仅从关键帧中删除额外数据。

e, all

从所有帧中删除额外数据。

13.29 setts

在数据包中设置 PTS 和 DTS。

它接受以下参数

ts
pts
dts

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

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

13.30 showinfo

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

13.31 text2movsub

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

另请参阅 mov2textsub 过滤器。

13.32 trace_headers

记录包含编码流标头中所有语法元素的跟踪输出(所有在单个编码块级别之上的内容)。这对于调试底层流问题非常有用。

支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但根据构建,可能仅提供这些中的一部分。

13.33 truehd_core

从 TrueHD 流中提取核心,删除 ATMOS 数据。

13.34 vp9_metadata

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

color_space

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

unknown
bt601
bt709
smpte170
smpte240
bt2020
rgb
color_range

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

tv
pc

13.35 vp9_superframe

将 VP9 不可见(备用参考)帧合并回 VP9 超级帧。这修复了分割/分段 VP9 流的合并,其中备用参考帧与其可见对应帧分离。

13.36 vp9_superframe_split

将 VP9 超级帧拆分为单帧。

13.37 vp9_raw_reorder

给定一个具有正确时间戳但可能顺序错误的 VP9 流,插入额外的“显示现有帧”数据包以纠正顺序。

14 格式选项

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

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

以下是支持的选项列表

avioflags 标志 (输入/输出)

可能的值

direct

减少缓冲。

probesize 整数 (输入)

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

max_probe_packets 整数 (输入)

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

packetsize 整数 (输出)

设置数据包大小。

fflags 标志

设置格式标志。某些标志仅为有限数量的格式实现。

输入文件的可能值

discardcorrupt

丢弃损坏的数据包。

fastseek

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

genpts

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

igndts

如果也设置了 PTS,则忽略 DTS。如果设置了 PTS,则 DTS 值将设置为 NOPTS。当设置了 nofillin 标志时,将忽略此标志。

ignidx

忽略索引。

nobuffer

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

nofillin

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

noparse

禁用 AVParsers,这还需要 +nofillin

sortdts

尝试按 DTS 交错输出数据包。目前,仅适用于带有索引的 AVI。

输出文件的可能值

autobsf

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

bitexact

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

flush_packets

立即写出数据包。

shortest

在最短流的末尾停止复用。可能需要增加 max_interleave_delta 以避免在 EOF 之前刷新较长的流。

seek2any 整数 (输入)

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

analyzeduration 整数 (输入)

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

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

设置解密密钥。

indexmem 整数 (输入)

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

rtbufsize 整数 (输入)

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

fdebug 标志 (输入/输出)

打印特定的调试信息。

可能的值

ts
max_delay 整数 (输入/输出)

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

fpsprobesize 整数 (输入)

设置用于探测 fps 的帧数。

audio_preload 整数 (输出)

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

chunk_duration 整数 (输出)

设置每个块的微秒数。

chunk_size 整数 (输出)

设置每个块的大小(以字节为单位)。

err_detect, f_err_detect 标志 (输入)

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

可能的值

crccheck

验证嵌入的 CRC。

bitstream

检测比特流规范偏差。

buffer

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

explode

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

careful

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

compliant

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

aggressive

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

max_interleave_delta 整数 (输出)

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

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

此字段指定复用队列中第一个数据包和最后一个数据包之间时间戳的最大差异,高于该差异时,libavformat 将输出一个数据包,而不管它是否已为所有流排队了一个数据包。

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

use_wallclock_as_timestamps 整数 (输入)

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

avoid_negative_ts 整数 (输出)

可能的值

make_non_negative

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

make_zero

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

auto (默认)

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

disabled

禁用时间戳移动。

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

skip_initial_bytes 整数 (输入)

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

correct_ts_overflow 整数 (输入)

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

flush_packets 整数 (输出)

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

output_ts_offset 偏移量 (输出)

设置输出时间偏移量。

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

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

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

format_whitelist 列表 (输入)

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

dump_separator 字符串 (输入)

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

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

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

skip_estimate_duration_from_pts 布尔值 (输入)

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

duration_probesize integer (输入)

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

strict, f_strict integer (输入/输出)

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

可能的值

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

14.1 格式流指定符

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

流说明符的确切语义由 avformat_match_stream_specifier() 函数定义,该函数在 libavformat/avformat.h 头文件中声明,并在 (ffmpeg)ffmpeg(1) 手册中的流说明符部分中记录。

15 解复用器

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

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

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

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

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

15.1 aa

Audible Format 2、3 和 4 解复用器。

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

15.2 aac

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

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

15.3 apng

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

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

-ignore_loop bool

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

-max_fps int

最大帧率,以每秒帧数为单位。默认值 0 不施加限制。

-default_fps int

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

15.4 asf

高级系统格式解复用器。

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

-no_resync_search bool

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

15.5 concat

虚拟连接脚本解复用器。

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

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

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

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

15.5.1 语法

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

file path

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

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

ffconcat version 1.0

识别脚本类型和版本。

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

duration dur

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

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

inpoint timestamp

文件的入点。当解复用器打开文件时,它会立即查找指定的时间戳。执行查找操作,以便所有流都可以在入点成功显示。

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

对于每个文件,文件入点之前的数据包的时间戳将小于该文件的计算起始时间戳(如果是第一个文件,则为负数),并且文件的持续时间(如果未由 duration 指令指定)将基于其指定的入点而减少。

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

outpoint timestamp

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

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

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

文件的持续时间(如果未通过 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 是一个唯一的标识符,可能很小且连续。

15.5.2 选项

此解复用器接受以下选项

safe

如果设置为 1,则拒绝不安全的文件路径和指令。如果文件路径不包含协议规范且是相对路径,并且所有组件仅包含可移植字符集中的字符(字母、数字、句点、下划线和连字符),并且组件开头没有句点,则认为该文件路径是安全的。

如果设置为 0,则接受任何文件名。

默认值为 1。

auto_convert

如果设置为 1,则尝试对数据包数据执行自动转换,以使流可以连接。默认值为 1。

目前,唯一的转换是将 h264_mp4toannexb 比特流过滤器添加到 MP4 格式的 H.264 流。如果存在分辨率更改,则此转换是必要的。

segment_time_metadata

如果设置为 1,则每个数据包将包含 lavf.concat.start_timelavf.concat.duration 数据包元数据值,它们是连接输出中各个文件段的开始时间和持续时间,以微秒表示。仅当基于连接文件知道持续时间时,才会设置持续时间元数据。默认值为 0。

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

15.6 dash

HTTP 上的动态自适应流解复用器。

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

15.6.1 选项

此解复用器接受以下选项

cenc_decryption_key

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

15.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 的问题。

15.7.1 背景

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

实际的 DVD 播放器依赖于通过菜单和内部 VM 进行的用户 GUI 交互来驱动解复用的方向。通常,用户要么导航(通过菜单),要么自动重定向到他们选择的 PGC。在此过程和随后的播放过程中,DVD 播放器的内部 VM 还会维护状态并执行可以在播放期间创建跳转到不同扇区的指令。这就是为什么需要 libdvdnav,因为线性读取光盘上的 MPEG-PS 数据块 (VOB) 不足以在许多情况下产生正确的序列。

还有许多其他 DVD 结构(这是一个很长的主题)在这里不再讨论。特别是,NAV 数据包由此解复用器处理以构建准确的计时,但不作为流发出。有关良好的高层理解,请参阅:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures

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

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

pg int

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

preindex bool

启用此选项可以获得准确的章节 (PTT) 标记和持续时间测量,这需要在第二次读取时进行缓慢的读取,以便从 NAV 数据包中索引章节标记时间戳。这对于真实的光驱来说是不理想的额外工作。建议将 DVD 结构的备份存储在硬盘上时使用此选项,速度更快。与 pgcpg 不兼容。默认为 0,false。

trim bool

跳过开头的填充单元(即短于 1 秒的单元)。许多光盘的 PGC 开头都有填充段,通常包含用于控制真实 DVD 播放器缓冲速度的垃圾数据,没有其他材料数据值。不适用于菜单。默认为 1,true。

15.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、PGC 1 解复用语言为 1 的菜单,从 PG 1 开始
    ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
    

15.8 ea

电子艺界多媒体格式解复用器。

此格式由各种电子艺界游戏使用。

15.8.1 选项

merge_alpha bool

通常,VP6 alpha 通道(如果存在)作为辅助视频流返回,通过设置此选项,您可以使解复用器返回一个同时包含 alpha 通道和普通视频的单一视频流。

15.9 imf

可互操作主格式解复用器。

此解复用器呈现 IMF 合成中找到的音频和视频流,如 SMPTE ST 2067-2 中指定。

ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...

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

15.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 的所有上下文。

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

例如,使用叠加滤镜,将无限循环的 GIF 放在另一个视频上

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

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

15.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 在没有新片段的情况下刷新时,加载 m3u8 的最大次数。默认值为 1000。

http_persistent

使用持久 HTTP 连接。仅适用于 HTTP 流。默认启用。

http_multiple

使用多个 HTTP 连接下载 HTTP 片段。对于 HTTP/1.1 服务器,默认启用。

http_seekable

使用 HTTP 部分请求下载 HTTP 片段。0 = 禁用,1 = 启用,-1 = 自动,默认为自动。

seg_format_options

使用由 : 分隔的键值对列表设置媒体片段解复用器的选项。

seg_max_retry

在发生错误时重新加载片段的最大次数,当不希望在网络错误时跳过片段时非常有用。默认值为 0。

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

对应于正在读取的文件名。

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

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

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

bass_range

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

surround_depth

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

surround_delay

设置环绕延迟(毫秒),限制在 5-40 毫秒之间。默认值为 0。

max_size

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

video_stream_expr

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

video_stream

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

video_stream_w

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

video_stream_h

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

video_stream_ptxt

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

15.16 libopenmpt

基于 libopenmpt 的模块解复用器

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

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

它接受以下选项

subsong

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

默认值是让 libopenmpt 选择。

layout

设置声道布局。有效值是 1、2 和 4 声道布局。默认值为 STEREO。

sample_rate

设置 libopenmpt 输出的采样率。范围是 1000 到 INT_MAX。默认值为 48000。

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

15.17.1 选项

此解复用器接受以下选项

enable_drefs

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

use_absolute_path

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

seek_streams_individually

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

ignore_editlist

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

advanced_editlist

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

ignore_chapters

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

use_mfra_for

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

以下选项可用

auto

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

dts

将 mfra 时间戳设置为 DTS

pts

将 mfra 时间戳设置为 PTS

0

不使用 mfra 框设置时间戳

use_tfdt

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

export_all

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

export_xmp

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

activation_bytes

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

audible_fixed_key

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

decryption_key

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

max_stts_delta

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

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

interleaved_read

在解复用器级别交错来自多个轨道的数据包。对于交错不良的文件,这可以防止因不同轨道中数据包之间存在较大间隙而导致的播放问题,因为 MOV/MP4 没有数据包放置要求。但是,这可能会导致在交错非常差的文件上进行过度查找,因为需要在轨道之间查找,因此禁用它可能会防止 I/O 问题,但会牺牲播放效果。

15.17.2 Audible AAX

Audible AAX 文件是加密的 M4B 文件,可以通过指定 4 字节的激活密钥来解密。

ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4

15.18 mpegts

MPEG-2 传输流解复用器。

此解复用器接受以下选项

resync_size

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

skip_unknown_pmt

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

fix_teletext_pts

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

ts_packetsize

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

scan_all_pmts

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

merge_pmt_versions

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

max_packet_size

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

15.19 mpjpeg

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

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

strict_mime_boundary

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

15.20 rawvideo

原始视频解复用器。

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

此解复用器接受以下选项

framerate

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

pixel_format

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

video_size

设置输入视频大小。必须显式指定此值。

例如,要使用 ffplay 读取像素格式为 rgb24、视频大小为 320x240、帧率为每秒 10 张图像的原始视频文件 input.raw,请使用以下命令

ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw

15.21 rcwt

RCWT(带有时间的原始字幕)是 ccextractor 的原生格式,ccextractor 是一种常用的开源工具,用于处理 608/708 隐藏字幕 (CC) 源。有关该格式的更多信息,请参阅 (ffmpeg-formats)rcwtenc

此解复用器实现了截至 2024 年 3 月的规范,该规范自 2014 年 4 月以来一直保持稳定且未更改。

15.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)。

15.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 参考将取自读取脚本时当前时间,并且脚本布局将根据该参考冻结。这意味着如果直接播放脚本,则实际时间将与绝对时间戳匹配,直到声音控制器的时钟精度,但如果用户以某种方式暂停播放或查找,所有时间都会相应移动。

15.23 tedcaptions

用于 TED Talks 的 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

15.24 vapoursynth

Vapoursynth 封装器。

出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制指定输入格式。对于 ff* 命令行工具,请在输入 `yourscript.vpy` 之前添加 `f vapoursynth`。

此解复用器接受以下选项

max_script_size

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

15.25 w64

Sony Wave64 音频解复用器。

此解复用器接受以下选项

max_size

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

15.26 wav

RIFF Wave 音频解复用器。

此解复用器接受以下选项

max_size

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

16 元数据

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

17 协议选项

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

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

以下是支持的选项列表

protocol_whitelist list (输入)

设置允许的协议的逗号分隔列表。“ALL”匹配所有协议。以“-”为前缀的协议将被禁用。默认情况下允许所有协议,但另一个协议使用的协议(嵌套协议)会被限制为每个协议的子集。

18 协议

协议是 FFmpeg 中的配置元素,可以访问需要特定协议的资源。

当您配置 FFmpeg 构建时,默认情况下会启用所有支持的协议。您可以使用配置选项“–list-protocols”列出所有可用的协议。

您可以使用配置选项“–disable-protocols”禁用所有协议,并使用选项“–enable-protocol=PROTOCOL”选择性地启用一个协议,或者可以使用选项“–disable-protocol=PROTOCOL”禁用一个特定协议。

ff* 工具的“-protocols”选项将显示支持的协议列表。

所有协议都接受以下选项:

rw_timeout

等待(网络)读/写操作完成的最大时间,以微秒为单位。

以下是对当前可用协议的描述。

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

routing_key

设置路由密钥。默认值为“amqp”。routing_key 用于“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)。消息将保留在代理的内存中,除非代理内存不足。

18.2 async

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

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

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

18.3 bluray

读取蓝光播放列表。

接受的选项是:

angle

蓝光角度

chapter

起始章节(1...N)

playlist

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

示例

从挂载到 /mnt/bluray 的蓝光光盘读取最长的播放列表

bluray:/mnt/bluray

从挂载到 /mnt/bluray 的蓝光光盘读取播放列表 4 的角度 2,从第 2 章开始

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

18.4 cache

输入流的缓存封装器。

将输入流缓存到临时文件。这为直播流带来了寻址能力。

接受的选项是:

read_ahead_limit

当不支持寻址时,可能预先读取的字节数。范围是 -1 到 INT_MAX。-1 表示无限制。默认值为 65536。

URL 语法为

cache:URL

18.5 concat

物理连接协议。

从多个资源按顺序读取和寻址,就像它们是一个唯一的资源一样。

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

concat:URL1|URL2|...|URLN

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

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

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

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

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

18.7 crypto

AES 加密流读取协议。

接受的选项是:

key

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

iv

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

接受的 URL 格式

crypto:URL
crypto+URL

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

18.9 fd

文件描述符访问协议。

接受的语法是

fd: -fd file_descriptor

如果未指定 fd,则默认情况下,stdout 文件描述符将用于写入,stdin 用于读取。与管道协议不同,fd 协议如果对应于常规文件,则具有寻址支持。fd 协议不支持通过 URL 传递文件描述符以确保安全。

此协议接受以下选项

blocksize

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

fd

设置文件描述符。

18.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 表示自动(对于普通文件可寻址,对于命名管道不可寻址)。

许多解复用器以不同的方式处理可寻址和不可寻址资源,覆盖此设置可能会加快打开某些文件的速度,但会失去一些功能(例如,精确寻址)。

18.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* 工具可能会产生不完整的内容。

18.12 gopher

Gopher 协议。

18.13 gophers

Gophers 协议。

带有 TLS 封装的 Gopher 协议。

18.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 即可。

18.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 方法。将来将替换为自动检测。

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 请求时,应优先考虑此阈值。例如,这对于确保同一连接用于读取大的视频数据包以及中间的小音频数据包很有用。

18.15.1 HTTP Cookies

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

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

ffplay -cookies "nlqptid=nltid=tsn; path=/; domain=somedomain.com;" http://somedomain.com/somestream.m3u8

18.16 Icecast

Icecast 协议(流向 Icecast 服务器)

此协议接受以下选项

ice_genre

设置流派。

ice_name

设置流名称。

ice_description

设置流描述。

ice_url

设置流网站 URL。

ice_public

设置流是否应该是公开的。默认为 0(不公开)。

user_agent

覆盖 User-Agent 标头。如果未指定,将使用“Lavf/<版本>”形式的字符串。

password

设置 Icecast 挂载点密码。

content_type

设置流内容类型。如果与 audio/mpeg 不同,则必须设置此项。

legacy_icecast

这启用对不支持 HTTP PUT 方法但支持 SOURCE 方法的 Icecast 版本 < 2.4.0 的支持。

tls

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

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

18.17 ipfs

星际文件系统 (IPFS) 协议支持。可以通过所谓的网关访问存储在 IPFS 网络上的文件。这些是 http(s) 端点。此协议包装 IPFS 原生协议(ipfs:// 和 ipns://)以发送到此类网关。用户可以(并且应该)托管他们自己的节点,这意味着此协议将使用用户的本地网关来访问 IPFS 网络上的文件。

此协议接受以下选项

gateway

定义要使用的网关。如果未设置,则该协议将首先按顺序尝试查找本地网关:查看 $IPFS_GATEWAY$IPFS_PATH$HOME/.ipfs/

可以使用 2 种方式使用此协议。使用 IPFS

ffplay ipfs://<hash>

或 IPNS 协议(IPNS 是可变的 IPFS)

ffplay ipns://<hash>

18.18 mmst

通过 TCP 的 MMS(Microsoft Media Server)协议。

18.19 mmsh

通过 HTTP 的 MMS(Microsoft Media Server)协议。

所需的语法是

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

18.20 md5

MD5 输出协议。

计算要写入的数据的 MD5 哈希值,并在关闭时将其写入指定的输出,如果没有指定,则写入 stdout。它可以用于测试多路复用器,而无需写入实际文件。

下面是一些示例。

# Write the MD5 hash of the encoded AVI file to the file output.avi.md5.
ffmpeg -i input.flv -f avi -y md5:output.avi.md5

# Write the MD5 hash of the encoded AVI file to stdout.
ffmpeg -i input.flv -f avi -y md5:

请注意,某些格式(通常是 MOV)要求输出协议是可寻址的,因此它们在使用 MD5 输出协议时会失败。

18.21 pipe

UNIX 管道访问协议。

从 UNIX 管道读取和写入。

接受的语法是

pipe:[number]

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

例如,要使用 ffmpeg 从 stdin 读取

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

使用 ffmpeg 写入 stdout

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)要求输出协议是可寻址的,因此它们在使用管道输出协议时会失败。

18.22 prompeg

Pro-MPEG Code of Practice #3 Release 2 FEC 协议。

Pro-MPEG CoP#3 FEC 是一种二维奇偶校验前向纠错机制,用于通过 RTP 发送的 MPEG-2 传输流。

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

所需的语法是

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

对于列 FEC 流,目标 UDP 端口为 port + 2,对于行 FEC 流,目标 UDP 端口为 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

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

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

充当服务器,监听传入的连接。Implies 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 表示空值,后跟一个冒号。对于布尔值,数据必须为 0 或 1,分别表示 FALSE 或 TRUE。同样,对于对象,数据必须为 0 或 1,分别表示结束或开始一个对象。子对象中的数据项可以命名,方法是在类型前加上“N”,并在值之前指定名称(即 NB:myFlag:1)。此选项可以多次使用以构造任意 AMF 序列。

rtmp_enhanced_codecs

指定客户端在增强的 RTMP 流中声明支持的编解码器列表。此选项应设置为以逗号分隔的 fourcc 值列表,例如 hvc1,av01,vp09 表示多个编解码器,或 hvc1 表示只有一个编解码器。指定的列表将出现在“Connect Command Message”的“fourCcLive”属性中。

rtmp_flashver

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

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/

18.25 rtmpe

加密的实时消息协议。

加密的实时消息协议 (RTMPE) 用于在标准加密原语内流式传输多媒体内容,包括 Diffie-Hellman 密钥交换和 HMACSHA256,生成一对 RC4 密钥。

18.26 rtmps

通过安全 SSL 连接的实时消息协议。

实时消息协议 (RTMPS) 用于通过加密连接传输多媒体内容。

18.27 rtmpt

通过 HTTP 隧道传输的实时消息协议。

通过 HTTP 隧道传输的实时消息协议 (RTMPT) 用于在 HTTP 请求中传输多媒体内容,以便穿越防火墙。

18.28 rtmpte

通过 HTTP 隧道传输的加密实时消息协议。

通过 HTTP 隧道传输的加密实时消息协议 (RTMPTE) 用于在 HTTP 请求中传输多媒体内容,以便穿越防火墙。

18.29 rtmpts

通过 HTTPS 隧道传输的实时消息协议。

通过 HTTPS 隧道传输的实时消息协议 (RTMPTS) 用于在 HTTPS 请求中传输多媒体内容,以便穿越防火墙。

18.30 libsmbclient

libsmbclient 允许用户操作 CIFS/SMB 网络资源。

需要以下语法。

smb://[[domain:]user[:password@]]server[/share[/path[/file]]]

此协议接受以下选项。

timeout

设置底层操作使用的套接字 I/O 操作的超时时间(以毫秒为单位)。默认设置为 -1,表示未指定超时时间。

truncate

如果设置为 1,则在写入时截断现有文件。值为 0 则阻止截断。默认值为 1。

工作组

设置用于建立连接的工作组。默认情况下,未指定工作组。

更多信息请参阅:http://www.samba.org/

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

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

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

18.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 设置选项。

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

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

充当服务器,监听传入的连接。Implies 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 动态切换。

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

18.35 sap

会话公告协议 (Session Announcement Protocol,RFC 2974)。 这在技术上不是 libavformat 中的协议处理程序,而是一个复用器和解复用器。 它用于 RTP 流的信令,通过在单独的端口上定期公告流的 SDP 来实现。

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

以及用于在 IPv6 上通过 ffplay 观看

ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]

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

18.36 sctp

流控制传输协议 (Stream Control Transmission Protocol)。

接受的 URL 语法是

sctp://host:port[?options]

该协议接受以下选项

listen

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

max_streams

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

18.37 srt

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

SRT URL 的支持语法是

srt://hostname:port[?options]

options 包含以 &-分隔的 key=val 形式的选项列表。

或者

options srt://hostname:port

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

此协议接受以下选项。

connect_timeout=milliseconds

连接超时;对于 RTT > 1500 毫秒(2 次握手交换)的情况,SRT 无法连接,因为默认连接超时为 3 秒。此选项适用于调用者和会合连接模式。会合模式的连接超时设置为 10 倍(可以用作早期版本连接问题的解决方法)。

ffs=bytes

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

inputbw=bytes/seconds

发送器的标称输入速率,以字节/秒为单位。与 oheadbw 一起使用,当 maxbw 设置为相对 (0) 时,用于计算在发送恢复数据包以及主媒体流时,最大发送速率:inputbw * (100 + oheadbw) / 100。如果 maxbw 设置为相对值 (0) 而未设置 inputbw,则实际输入速率将在库内部计算。默认值为 0。

iptos=tos

IP 服务类型。仅适用于发送者。默认值为 0xB8。

ipttl=ttl

IP 生存时间。仅适用于发送者。默认值为 64。

latency=microseconds

基于时间戳的数据包传递延迟。用于吸收丢失的数据包重传的突发。此标志将 rcvlatencypeerlatency 设置为相同的值。 请注意,在 1.3.0 版本之前,这是唯一设置延迟的标志,但是当侧是发送者时,这实际上等效于设置 peerlatency,当侧是接收者时,等效于设置 rcvlatency,并且不支持双向流发送。

listen_timeout=microseconds

设置套接字监听超时。

maxbw=bytes/seconds

最大发送带宽,以字节/秒为单位。-1 为无限(CSRTCC 限制为 30mbps),0 为相对于输入速率(请参阅 inputbw),>0 为绝对限制值。默认值为 0(相对)。

mode=caller|listener|rendezvous

连接模式。caller 打开客户端连接。listener 启动服务器以侦听传入连接。rendezvous 使用会合连接模式。 默认值为 caller。

mss=bytes

最大段大小,以字节为单位。 用于缓冲分配和使用数据包计数器的速率计算,假设数据包已完全填充。 使用对等体之间的最小 MSS。 在整个互联网中,默认值为 1500。这是 UDP 数据包的最大大小,并且只能减小,除非您有一些不寻常的专用网络设置。 默认值为 1500。

nakreport=1|0

如果设置为 1,则接收器将定期发送 'UMSG_LOSSREPORT' 消息,直到丢失的数据包被重新传输或有意丢弃。 默认值为 1。

oheadbw=percents

超出输入速率的恢复带宽开销,以百分比表示。请参阅 inputbw。默认值为 25%。

passphrase=字符串

HaiCrypt 加密/解密密码字符串,长度为 10 到 79 个字符。密码是发送方和接收方之间的共享密钥。它用于使用 PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。只有当 pbkeylen 非零时才使用。仅当接收到的数据被加密时,才在接收方使用。配置的密码无法恢复(只写)。

enforced_encryption=1|0

如果为 true,则连接双方必须设置相同的密码(包括空密码,即不加密)。如果密码不匹配或只有一方未加密,则连接将被拒绝。默认为 true。

kmrefreshrate=数据包

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

kmpreannounce=数据包

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

snddropdelay=微秒

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

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

payload_size=字节

设置在实时模式下,单次调用发送函数期间传输的数据包的最大声明大小。如果未使用此值,则使用 0(在文件模式下是默认值)。默认值为 -1(自动),通常表示 MPEG-TS;如果要使用 SRT 发送任何不同类型的数据负载,例如,将实时流包装在非常小的帧中,则可以使用更大的最大帧大小,但不能大于 1456 字节。

pkt_size=字节

payload_size’ 的别名。

peerlatency=微秒

由发送方设置的延迟值(如 rcvlatency 中所述),作为接收方的最小值。

pbkeylen=字节

发送方加密密钥长度,以字节为单位。只能设置为 0、16、24 和 32。如果不为 0,则启用发送方加密。在接收方不需要(设置为 0),密钥大小从 HaiCrypt 握手中的发送方获取。默认值为 0。

rcvlatency=微秒

自从数据包发送之时起,到将数据包传递到接收函数中的接收方应用程序之时,应该经过的时间。此时间应该是一个足够大的缓冲时间,以覆盖发送所花费的时间、意外延长的 RTT 时间以及重新传输丢失的 UDP 数据包所需的时间。有效的延迟值将是此选项的值和对等方设置的 peerlatency 值中的最大值。在 1.3.0 版本之前,此选项仅作为 latency 提供。

recv_buffer_size=字节

设置 UDP 接收缓冲区大小,以字节表示。

send_buffer_size=字节

设置 UDP 发送缓冲区大小,以字节表示。

timeout=微秒

设置读取、写入和连接操作的引发错误超时。请注意,SRT 库具有可以单独控制的内部超时,此处设置的值只是对这些超时的上限。

tlpktdrop=1|0

过时数据包丢弃。当在接收方启用时,它会跳过未及时送达的丢失数据包,并在其播放时间到来时将后续数据包传递到应用程序。它还会向发送方发送一个伪 ACK。当在发送方启用并且在接收对等方启用时,发送方会丢弃较旧的、没有机会及时送达的数据包。如果接收方支持,则会在发送方自动启用。

sndbuf=字节

设置发送缓冲区大小,以字节表示。

rcvbuf=字节

设置接收缓冲区大小,以字节表示。

接收缓冲区不得大于 ffs

lossmaxttl=数据包

重新排序容忍度可以增长到的值。当重新排序容忍度 > 0 时,数据包丢失报告将延迟到该数量的数据包到达。每次收到“迟到”数据包时,重新排序容忍度都会增加,但这并非由于重新传输(即,当 UDP 数据包倾向于无序到达时),而是通过最新序列和此数据包的序列之间的差值,并且不超过此选项的值。默认情况下,它是 0,这意味着此机制已关闭,并且一旦在序列中出现“间隙”,始终会立即发送丢失报告。

minversion

对等方所需的最低 SRT 版本。与不满足最低版本要求的对等方的连接将被拒绝。

十六进制版本格式为 0xXXYYZZ,对应于人类可读形式的 x.y.z。

streamid=字符串

一个限制为 512 个字符的字符串,可以在连接之前在套接字上设置。侦听器端可以从 srt_accept 返回的套接字中检索此流 ID,该套接字由设置了该流 ID 的套接字连接。SRT 不强制对此字符串的内容进行任何特殊解释。此选项在 Rendezvous 连接中没有意义;结果可能是简单地一方将覆盖另一方的值,这取决于哪一方会获胜

srt_streamid=字符串

streamid’ 的别名,以避免与 ffmpeg 命令行选项冲突。

smoother=live|file

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

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

18.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 个字节用作主盐。

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

18.40 tee

将输出写入多个协议。各个输出用 | 分隔

tee:file://path/to/local/this.avi|file://path/to/local/that.avi

18.41 tcp

传输控制协议。

TCP URL 的所需语法为

tcp://hostname:port[?options]

options 包含以 &-分隔的 key=val 形式的选项列表。

以下是支持的选项列表。

listen=2|1|0

侦听传入连接。0 禁用侦听,1 启用单客户端模式下的侦听,2 启用多客户端模式下的侦听。默认值为 0。

local_addr=addr

用于 TCP 套接字连接的网络接口的本地 IP 地址。

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

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

18.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 广播。

请注意,在具有广播风暴保护的网络上,广播可能无法正常工作。

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

18.44 unix

Unix 本地套接字

Unix 套接字 URL 的必需语法是

unix://filepath

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

timeout

超时时间,单位为毫秒。

listen

创建处于监听模式的 Unix 套接字。

18.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 Pub-Sub 模式实现向多个客户端的流式传输。服务器端绑定到一个端口并发布数据。客户端连接到服务器(通过 IP 地址/端口)并订阅该流。服务器和客户端的启动顺序通常无关紧要。

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

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

pkt_size

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

19 设备选项

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

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

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

20 输入设备

输入设备是 FFmpeg 中的配置元素,它允许访问来自连接到您的系统的多媒体设备的数据。

当您配置 FFmpeg 构建时,默认情况下会启用所有受支持的输入设备。您可以使用配置选项 “--list-indevs” 列出所有可用的输入设备。

您可以使用配置选项 “--disable-indevs” 禁用所有输入设备,并使用选项 “--enable-indev=INDEV” 选择性地启用输入设备,或者使用选项 “--disable-indev=INDEV” 禁用特定的输入设备。

ff* 工具的 “-devices” 选项将显示受支持的输入设备列表。

以下是当前可用的输入设备的描述。

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

20.1.1 选项

sample_rate

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

channels

设置通道数。默认为 2。

20.2 android_camera

Android 相机输入设备。

此输入设备使用 Android Camera2 NDK API,该 API 在 API 级别 24+ 的设备上可用。android_camera 的可用性在配置期间自动检测。

此设备允许从 Android 设备上集成到 Camera2 NDK API 中的所有相机捕获。

可用的相机在内部枚举,可以使用 camera_index 参数进行选择。输入文件字符串被丢弃。

通常,后置摄像头的索引为 0,而前置摄像头的索引为 1。

20.2.1 选项

video_size

设置视频大小,以字符串形式给出,例如 640x480 或 hd720。如果请求的视频大小不可用或默认情况下,则回退到 Android 报告的第一个可用配置。

framerate

设置视频帧率。如果请求的帧率不可用或默认 (-1),则回退到 Android 报告的第一个可用配置。

camera_index

设置要使用的相机的索引。默认为 0。

input_queue_size

设置要缓冲的最大帧数。默认为 5。

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

不记录相应的媒体类型。这等效于指定空的设备名称或索引。

20.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 流。

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

20.4 bktr

BSD 视频输入设备。已弃用并将删除 - 如果您有兴趣维护它,请联系开发人员。

20.4.1 选项

framerate

设置帧率。

video_size

设置视频帧大小。默认为 vga

标准

可用的值有

pal
ntsc
secam
paln
palm
ntscj

20.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。请注意,所有音频通道都捆绑在一个音频轨道中。

20.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 位模式捕获。

channels

定义要捕获的音频通道数。必须为 ‘2’、‘8’ 或 ‘16’。默认为 ‘2’。

duplex_mode

设置 decklink 设备的双工/配置文件模式。必须为 ‘unset’、‘half’、‘full’、‘one_sub_device_full’、‘one_sub_device_half’、‘two_sub_device_full’、‘four_sub_device_half’ 默认为 ‘unset’。

注意:DeckLink SDK 11.0 已将双工属性替换为配置文件属性。对于 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 使用的顺序略有不同,后者是 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 (布尔值)

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

enable_klv(布尔值)

如果设置为true,则从VANC提取KLV数据并输出KLV数据包。KLV VANC 数据包基于MID和PSC字段连接,并聚合到一个KLV数据包中。默认为false

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

20.6 dshow

Windows DirectShow输入设备。

当FFmpeg使用mingw-w64项目构建时,启用DirectShow支持。目前仅支持音频和视频设备。

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

输入名称应采用以下格式

TYPE=NAME[:TYPE=NAME]

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

20.6.1 选项

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

video_size

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

framerate

设置捕获视频中的帧率。

sample_rate

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

sample_size

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

channels

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

list_devices

如果设置为true,则打印设备列表并退出。

list_options

如果设置为true,则打印所选设备的选项列表并退出。

video_device_number

为具有相同名称的设备设置视频设备编号(从0开始,默认为0)。

audio_device_number

为具有相同名称的设备设置音频设备编号(从0开始,默认为0)。

pixel_format

选择DirectShow使用的像素格式。仅当未设置视频编解码器或将其设置为rawvideo时,才可以设置此项。

audio_buffer_size

以毫秒为单位设置音频设备缓冲区大小(这可能会直接影响延迟,具体取决于设备)。默认为使用音频设备的默认缓冲区大小(通常为500毫秒的某个倍数)。将此值设置得太低可能会降低性能。另请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/dd377582(v=vs.85).aspx

video_pin_name

按名称或备用名称选择要使用的视频捕获引脚。

audio_pin_name

按名称或备用名称选择要使用的音频捕获引脚。

crossbar_video_input_pin_number

为交叉开关设备选择视频输入引脚号。这将路由到交叉开关设备的视频解码器输出引脚。请注意,更改此值可能会影响将来的调用(设置新的默认值),直到系统重新启动。

crossbar_audio_input_pin_number

为交叉开关设备选择音频输入引脚号。这将路由到交叉开关设备的音频解码器输出引脚。请注意,更改此值可能会影响将来的调用(设置新的默认值),直到系统重新启动。

show_video_device_dialog

如果设置为true,则在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动更改视频滤镜属性和配置。请注意,对于交叉开关设备,有时可能需要调整此对话框中的值,以在PAL(25 fps)和NTSC(29.97)输入帧率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描率/帧率,并避免底部出现绿条、扫描线闪烁等。请注意,对于某些设备,更改这些属性也可能会影响将来的调用(设置新的默认值),直到系统重新启动。

show_audio_device_dialog

如果设置为true,则在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动更改音频滤镜属性和配置。

show_video_crossbar_connection_dialog

如果设置为true,则在打开视频设备时,在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动修改交叉开关引脚路由。

show_audio_crossbar_connection_dialog

如果设置为true,则在打开音频设备时,在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动修改交叉开关引脚路由。

show_analog_tv_tuner_dialog

如果设置为true,则在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动修改电视频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为true,则在开始捕获之前,向最终用户弹出一个显示对话框,允许他们手动修改电视音频(如单声道与立体声,语言A、B或C)。

audio_device_load

从文件加载音频捕获滤镜设备,而不是按名称搜索它。如果滤镜支持将其属性序列化,它也可能会加载其他参数。要使用此功能,必须指定音频捕获源,但它可以是任何东西,甚至是伪造的。

audio_device_save

将当前使用的音频捕获滤镜设备及其参数(如果滤镜支持)保存到文件。如果存在同名文件,则会覆盖该文件。

video_device_load

从文件加载视频捕获滤镜设备,而不是按名称搜索它。如果滤镜支持将其属性序列化,它也可能会加载其他参数。要使用此功能,必须指定视频捕获源,但它可以是任何东西,甚至是伪造的。

video_device_save

将当前使用的视频捕获滤镜设备及其参数(如果滤镜支持)保存到文件。如果存在同名文件,则会覆盖该文件。

use_video_device_timestamps

如果设置为false,则视频帧的时间戳将从挂钟时间而不是捕获设备提供的时间戳派生。这允许解决提供不可靠时间戳的设备的问题。

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

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

20.7.1 选项

framerate

设置帧率。默认为25。

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

20.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 值才能将区域移动到该显示器。

20.9 iec61883

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

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

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

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

20.9.1 选项

dvtype

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

dvbuffer

设置传入数据的缓冲区最大大小,以帧为单位。对于 DV,这是一个精确的值。对于 HDV,它不是精确的帧数,因为 HDV 没有固定的帧大小。

dvguid

通过指定其 GUID 来选择捕获设备。捕获将仅从指定的设备执行,并且如果找不到具有给定 GUID 的设备,则捕获将失败。如果同时连接了多个设备,则此选项对于选择输入非常有用。查看 /sys/bus/firewire/devices 以找出 GUID。

20.9.2 示例

  • 抓取并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 抓取并记录 FireWire DV/HDV 设备的输入,如果源是 HDV,则使用 100000 个数据包的数据包缓冲区。
    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

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

20.10.1 选项

channels

设置通道数。默认为 2。

20.11 kmsgrab

KMS 视频输入设备。

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

需要 DRM master 或 CAP_SYS_ADMIN 才能运行。

如果您不明白所有这些意味着什么,您可能不需要它。请查看 x11grab 代替。

20.11.1 选项

device

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

format

帧缓冲区的像素格式。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到此格式,但对于早期版本,则需要提供此格式。默认为 bgr0,这是 Linux 控制台和 Xorg X 服务器使用的最常见格式。

format_modifier

要信号输出帧的格式修饰符。这对于正确导入到某些 API 中是必需的。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到此格式,但在早期版本中需要在需要时显式提供。有关可能的值,请参见 libdrm 文档。

crtc_id

用于定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。

plane_id

用于定义捕获源的 KMS 平面 ID。如果未指定 crtc_idplane_id,则默认为找到的第一个活动平面。

framerate

要捕获的帧率。这与任何页面翻转或帧缓冲区更改都不同步 - 它只是定义了采样帧缓冲区的间隔。以快于帧缓冲区更新速率的速度采样将生成内容相同的独立帧。默认为 30

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

20.12 lavfi

Libavfilter 输入虚拟设备。

此输入设备从 libavfilter 过滤器图的打开的输出焊盘读取数据。

对于每个过滤器图的打开输出,输入设备将创建一个相应的流,该流映射到生成的输出。过滤器图通过选项 graph 指定。

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

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

dumpgraph

将 graph 转储到 stderr。

20.12.2 示例

  • 创建一个彩色视频流并使用 ffplay 播放它
    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 与上一个示例类似,但使用文件名指定 graph 描述,并省略 "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
    

20.13 libcdio

基于 libcdio 的音频 CD 输入设备。

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

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

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

ffmpeg -f libcdio -i /dev/sr0 cd.wav

20.13.1 选项

speed

设置驱动器读取速度。默认值为 0。

速度以 CD-ROM 速度单位指定。速度通过 libcdio 的 cdio_cddap_speed_set 函数设置。在许多 CD-ROM 驱动器上,指定过大的值将导致使用最快的速度。

paranoia_mode

设置偏执恢复模式标志。它接受以下值之一

disable
verify
overlap
neverskip
full

默认值为 ‘disable’。

有关可用恢复模式的更多信息,请参阅 paranoia 项目文档。

20.14 libdc1394

基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。

需要配置选项 --enable-libdc1394

20.14.1 选项

framerate

设置帧率。默认值为 ntsc,对应于 30000/1001 的帧率。

pixel_format

选择像素格式。默认值为 uyvy422

video_size

设置视频大小,以字符串形式给出,例如 640x480hd720。默认值为 qvga

20.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 获取支持的设备列表。

20.15.1 选项

channels

设置捕获音频中的通道数。目前仅支持值 1(单声道)和 2(立体声)。默认为 2

sample_size

设置捕获音频的采样大小(以位为单位)。目前仅支持值 816。默认为 16

sample_rate

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

list_devices

如果设置为 true,则打印设备列表并退出。默认为 false

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

20.16 oss

Open Sound System 输入设备。

提供给输入设备的文件名是表示 OSS 输入设备的设备节点,通常设置为 /dev/dsp

例如,要使用 ffmpeg/dev/dsp 抓取,请使用以下命令

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

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

20.16.1 选项

sample_rate

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

channels

设置通道数。默认为 2。

20.17 pulse

PulseAudio 输入设备。

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

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

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

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

20.17.1 选项

server

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

name

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

stream_name

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

sample_rate

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

channels

指定正在使用的通道数,默认设置为 2(立体声)。

frame_size

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

fragment_size

指定 PulseAudio 中最小缓冲片段的大小(以字节为单位),它将影响音频延迟。默认情况下设置为 50 毫秒的数据量。

wallclock

使用当前时间设置初始 PTS。默认值为 1。

20.17.2 示例

从默认设备录制流

ffmpeg -f pulse -i default /tmp/pulse.wav

20.18 sndio

sndio 输入设备。

要在配置期间启用此输入设备,需要在系统上安装 libsndio。

提供给输入设备的文件名是表示 sndio 输入设备的设备节点,通常设置为 /dev/audio0

例如,要使用 ffmpeg/dev/audio0 抓取,请使用以下命令

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

20.18.1 选项

sample_rate

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

channels

设置通道数。默认为 2。

20.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 Epoch)或单调时钟(起点通常为启动时间,不受 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/

20.19.1 选项

标准

设置标准。必须是支持的标准的名称。要获取支持的标准列表,请使用 list_standards 选项。

频道

设置输入频道号。默认为 -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。

20.20 vfwcap

VfW(Video for Windows)捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围从 0 到 9。您可以使用 "list" 作为文件名来打印驱动程序列表。任何其他文件名都将被解释为设备编号 0。

20.20.1 选项

video_size

设置视频帧大小。

framerate

设置抓取帧率。默认值为 ntsc,对应于帧率 30000/1001

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

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

21 重采样器选项

音频重采样器支持以下命名选项。

可以通过在 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

选择立方

blackman_nuttall

选择 Blackman Nuttall 加窗 sinc

kaiser

选择 Kaiser 加窗 sinc

kaiser_beta

仅对于 swr,设置 Kaiser 窗口 beta 值。必须是 [2, 16] 区间内的双精度浮点值,默认值为 9。

output_sample_bits

仅对于 swr,设置用于抖动的已用输出样本位数。必须是 [0, 64] 区间内的整数,默认值为 0,表示不使用。

22 缩放器选项

视频缩放器支持以下命名选项。

可以通过在 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

拜耳抖动

ed

误差扩散抖动

a_dither

基于加法的算术抖动

x_dither

基于异或的算术抖动(比 a_dither 更随机/更少明显的图案)。

alphablend

设置当输入有 alpha 通道但输出没有时使用的 alpha 混合。默认值为 ‘none’。

uniform_color

混合到均匀的背景颜色上

checkerboard

混合到棋盘格上

none

不混合

23 滤波简介

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 过滤器链生成的输出。

一些过滤器输入参数列表:它们在过滤器名称和等号之后指定,并用冒号相互分隔。

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

24 graph2dot

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

调用命令

graph2dot -h

以了解如何使用 graph2dot

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

例如,命令序列

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

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

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

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

nullsrc,scale=640:360,nullsink

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

25 滤镜图描述

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

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

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

25.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
  • 一个用’:'分隔的混合直接 和长 键=值 对的列表。直接 必须位于 键=值 对之前,并遵循前面点的相同约束顺序。以下 键=值 对可以按任何首选顺序设置。

如果选项值本身是一个项目列表(例如,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]

25.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 来指定要渲染的文本。

26 时间线编辑

某些过滤器支持通用的 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 以查看哪些过滤器具有时间轴支持。

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

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

28 具有多个输入(帧同步)的滤镜选项

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

eof_action

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

repeat

重复最后一帧(默认)。

endall

结束两个流。

pass

直接传递主输入。

shortest

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

repeatlast

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

ts_sync_mode

基于辅助输入时间戳严格同步流的方式;它接受以下值之一

default

来自辅助输入的帧,其时间戳最接近或等于主输入帧的时间戳。

nearest

来自辅助输入的帧,其时间戳与主输入帧的时间戳绝对最接近。

29 音频滤镜

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

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

29.1 aap

使用第二个音频流将仿射投影算法应用于第一个音频流。

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

下面是接受选项的说明。

order

设置滤镜阶数。

projection

设置投影阶数。

mu

设置滤镜 mu。

delta

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

out_mode

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

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号、第二个输入和误差信号估计之间的差异。

n

传递输入信号、第一个输入和误差信号估计之间的差异。

e

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

默认值为 o

precision

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

auto

根据其他滤镜自动选择内部采样格式。

float

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

double

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

29.2 acompressor

压缩器主要用于降低信号的动态范围。尤其是现代音乐大多以高比率压缩以提高整体响度。这样做是为了吸引听众的最大注意力,“丰满”声音并为曲目带来更多“力量”。如果信号压缩过度,之后可能会听起来沉闷或“死板”,或者它可能会开始“泵”(这可能是一种强大的效果,但也可能完全毁掉曲目)。正确的压缩是达到专业声音的关键,也是混音和母带制作的高级艺术。由于其复杂的设置,可能需要很长时间才能对此类效果产生正确的感受。

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

该滤镜接受以下选项

level_in

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

mode

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

threshold

如果流的信号高于此电平,则会影响增益衰减。默认情况下为 0.125。范围介于 0.00097563 和 1 之间。

ratio

设置信号衰减的比率。1:2 表示如果电平高于阈值 4dB,则在衰减后将仅高于 2dB。默认为 2。范围介于 1 和 20 之间。

attack

信号必须高于阈值多长时间才能开始增益衰减,以毫秒为单位。默认为 20。范围介于 0.01 和 2000 之间。

release

信号必须低于阈值多长时间后才会再次减少衰减,以毫秒为单位。默认为 250。范围介于 0.01 和 9000 之间。

makeup

设置处理后信号将放大多少。默认为 1。范围介于 1 和 64 之间。

knee

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

link

选择输入流的所有通道之间的average电平,还是输入流的较响(maximum)通道影响衰减。默认为 average

detection

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

mix

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

29.2.1 命令

此滤镜支持所有上述选项作为命令

29.3 acontrast

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

该滤镜接受以下选项

contrast

设置对比度。默认为 33。允许范围介于 0 和 100 之间。

29.4 acopy

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

29.5 acrossfade

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

该滤镜接受以下选项

nb_samples, ns

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

duration, d

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

overlap, o

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

curve1

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

curve2

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

有关可用曲线类型的描述,请参阅 afade 滤波器的描述。

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

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

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

29.7 acrusher

降低音频位分辨率。

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

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

该滤镜接受以下选项

level_in

设置输入电平。

level_out

设置输出电平。

bits

设置位减少量。

mix

设置混合量。

mode

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

dc

设置直流偏移。

aa

设置抗锯齿。

samples

设置采样减少量。

lfo

启用 LFO。默认情况下禁用。

lforange

设置 LFO 范围。

lforate

设置 LFO 速率。

29.7.1 命令

此滤镜支持所有上述选项作为命令

29.8 acue

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

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

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

29.11 adecorrelate

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

该滤镜接受以下选项

stages

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

seed

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

29.12 adelay

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

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

该滤波器接受以下选项

delays

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

all

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

29.12.1 示例

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

29.13 adenorm

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

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

以下是对接受的参数的描述。

level

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

type

设置添加的噪声类型。

dc

添加直流信号。

ac

添加交流信号。

square

添加方波信号。

脉冲

添加脉冲信号。

默认值为 dc

29.13.1 命令

此滤镜支持所有上述选项作为命令

29.14 aderivative, aintegral

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

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

29.15 adrc

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

下面是接受选项的说明。

转移

设置转移表达式。

表达式可以包含以下常量

ch

当前通道号

sn

当前采样号

nb_channels

通道数量

t

以秒为单位的时间戳

sr

采样率

p

当前频率功率值,以 dB 为单位

f

当前频率,单位为 Hz

默认值为 p

attack

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

release

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

channels

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

29.15.1 命令

此滤镜支持所有上述选项作为命令

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

29.16 adynamicequalizer

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

下面是接受选项的说明。

threshold

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

dfrequency

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

dqfactor

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

tfrequency

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

tqfactor

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

attack

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

release

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

ratio

设置均衡增益被提高的比率。默认值为 1。允许范围为 0 到 30。

makeup

设置均衡增益被提高的补偿偏移量。默认值为 0。允许范围为 0 到 100。

范围

设置允许的最大衰减/提升量。默认值为 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

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

29.16.1 命令

此滤镜支持所有上述选项作为命令

29.17 adynamicsmooth

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

下面是接受选项的说明。

sensitivity

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

basefreq

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

29.17.1 命令

此滤镜支持所有上述选项作为命令

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

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

29.19 aemphasis

音频加重滤波器创建或恢复直接取自黑胶唱片或加重 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)。

29.19.1 命令

此滤镜支持所有上述选项作为命令

29.20 aeval

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

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

它接受以下参数

exprs

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

channel_layout, c

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

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

ch

当前表达式的通道号

n

被评估的样本的编号,从 0 开始

s

采样率

t

被评估的样本的时间,以秒表示

nb_in_channels
nb_out_channels

输入和输出通道的数量

val(CH)

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

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

29.20.1 示例

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

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

频率

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

ceil

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

listen

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

29.21.1 命令

此滤镜支持所有上述选项作为命令

29.22 afade

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

以下是对接受的参数的描述。

type, t

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

start_sample, ss

指定开始应用淡化效果的起始样本编号。默认值为 0。

nb_samples, ns

指定淡化效果必须持续的样本数。在淡入效果结束时,输出音频的音量将与输入音频的音量相同,在淡出过渡结束时,输出音频将为静音。默认值为 44100。

start_time, st

指定淡化效果的开始时间。默认值为 0。该值必须指定为持续时间;有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分。如果设置了此选项,则将使用此选项代替 start_sample

duration, d

指定淡化效果的持续时间。有关接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分。在淡入效果结束时,输出音频的音量将与输入音频的音量相同,在淡出过渡结束时,输出音频将为静音。默认情况下,持续时间由 nb_samples 确定。如果设置了此选项,则将使用此选项代替 nb_samples

curve

设置淡化过渡的曲线。

它接受以下值

tri

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

qsin

选择四分之一正弦波

hsin

选择半个正弦波

esin

选择指数正弦波

log

选择对数

ipar

选择反向抛物线

qua

选择二次方

cub

选择立方

squ

选择平方根

cbr

选择立方根

par

选择抛物线

exp

选择指数

iqsin

选择反向四分之一正弦波

ihsin

选择反向半个正弦波

dese

选择双指数座位

desi

选择双指数 S 形曲线

losi

选择逻辑 S 形曲线

sinc

选择正弦基数函数

isinc

选择反向正弦基数函数

quat

选择四次方

quatr

选择四次根

qsin2

选择平方四分之一正弦波

hsin2

选择平方半个正弦波

nofade

不应用淡化

silence

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

unity

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

29.22.1 命令

此滤镜支持所有上述选项作为命令

29.22.2 示例

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

29.23 afftdn

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

以下是对接受的参数的描述。

noise_reduction, nr

设置降噪量(以 dB 为单位),允许范围为 0.01 到 97。默认值为 12 dB。

noise_floor, nf

设置噪声底限(以 dB 为单位),允许范围为 -80 到 -20。默认值为 -50 dB。

noise_type, nt

设置噪声类型。

它接受以下值

white, w

选择白噪声。

vinyl, v

选择黑胶噪声。

shellac, s

选择虫胶噪声。

custom, c

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

默认值为白噪声。

band_noise, bn

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

residual_floor, rf

设置残余底限(以 dB 为单位),允许范围为 -80 到 -20。默认值为 -38 dB。

track_noise, tn

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

track_residual, tr

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

output_mode, om

设置输出模式。

它接受以下值

input, i

保持输入不变。

output, o

传递过滤掉的噪声。

noise, n

仅传递噪声。

默认值为 output

adaptivity, ad

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

floor_offset, fo

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

noise_link, nl

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

它接受以下值

none

使用未更改的通道的噪声底限。

min

使用所有通道中测量的最小噪声底限。

max

使用所有通道中测量的最大噪声底限。

average

使用所有通道中测量的平均噪声底限。

默认值为 min

band_multiplier, bm

设置频带倍增因子,用于控制频带在频率箱上的扩展程度。允许的范围是 0.25。默认值为 1.25

sample_noise, sn

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

它接受以下值

start, begin

开始采样噪声捕获。

stop, end

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

默认值为 none

gain_smooth, gs

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

29.23.1 命令

此滤波器支持一些上述提到的选项,作为命令

29.23.2 示例

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

29.24 afftfilt

在频域中对采样应用任意表达式。

real

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

imag

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

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

sr

采样率

b

当前频率箱编号

nb

可用频率箱的数量

ch

当前表达式的通道号

chs

通道数量

pts

当前帧 pts

re

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

im

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

real(b, ch)

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

imag(b, ch)

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

win_size

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

win_func

设置窗口函数。

它接受以下值

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

默认值为 hann

overlap

设置窗口重叠。如果设置为 1,则会选择所选窗口函数的建议重叠。默认值为 0.75

29.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)"
    

29.25 afir

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

此滤波器设计用于应用长达 60 秒的 FIR 滤波器。

它可以用作数字分频滤波器、房间均衡、串扰消除、波场合成、听觉化、环境音响、环绕声和空间化的组件。

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

它接受以下参数

dry

设置干增益。这会设置输入增益。

wet

设置湿增益。这会设置最终输出增益。

length

设置脉冲响应滤波器长度。默认值为 1,这意味着将处理整个 IR。

gtype

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

irnorm

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

irlink

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

irgain

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

irfmt

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

maxir

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

response

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

频道

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

size

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

rate

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

minp

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

maxp

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

nbirs

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

ir

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

precision

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

auto

根据其他滤镜自动选择内部采样格式。

float

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

double

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

默认值为 auto。

irload

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

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

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

29.27 afreqshift

对输入音频样本应用频率偏移。

该滤镜接受以下选项

shift

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

level

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

order

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

29.27.1 命令

此滤镜支持所有上述选项作为命令

29.28 afwtdn

使用小波减少输入样本中的宽带噪声。

下面是接受选项的说明。

sigma

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

levels

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

wavet

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

sym2
sym4
rbior68
deb10
sym10
coif5
bl3
percent

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

profile

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

adaptive

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

samples

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

softness

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

29.28.1 命令

此滤镜支持所有上述选项作为命令

29.29 agate

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

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

attack 确定信号在发生任何衰减之前必须低于阈值的时间,而 release 设置信号必须升至阈值以上以再次减少衰减的时间。比所选攻击时间短的信号将保持不变。

level_in

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

mode

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

范围

设置当信号低于阈值时增益衰减的级别。默认值为 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

29.29.1 命令

此滤镜支持所有上述选项作为命令

29.30 aiir

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

它接受以下参数

zeros, z

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

poles, p

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

gains, k

设置通道增益。

dry_gain

设置输入增益。

wet_gain

设置输出增益。

format, f

设置系数格式。

ll

格梯函数

sf

模拟传递函数

tf

数字传递函数

zp

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

pr

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

pd

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

sp

S 平面零点/极点

process, r

设置处理类型。

d

直接处理

s

串行处理

p

并行处理

precision, e

设置滤波精度。

dbl

双精度浮点数(默认)

flt

单精度浮点数

i32

32 位整数

i16

16 位整数

normalize, n

归一化滤波器系数,默认情况下启用。启用它将把直流处的幅度响应归一化为 0dB。

mix

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

response

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

频道

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

size

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

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

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

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

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

29.31 alimiter

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

该滤镜接受以下选项

level_in

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

level_out

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

限幅

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

attack

限幅器将在该时间内(以毫秒为单位)达到其衰减水平。默认值为 5 毫秒。

release

在该时间内(以毫秒为单位)从限幅恢复到衰减 1.0。默认值为 50 毫秒。

ASC

当始终需要增益降低时,ASC 会处理释放到平均降低水平,而不是在释放时间内达到 0 的降低量。

asc_level

选择释放时间受 ASC 影响的程度,0 表示释放时间几乎没有变化,而 1 表示更高的释放时间。

level

自动调整输出信号电平。默认启用。如果启用,则将音频标准化回 0dB。

延迟

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

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

29.32 allpass

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

该滤镜接受以下选项

频率,f

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

宽度类型,t

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

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,w

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

混合,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 位浮点数。

29.32.1 命令

此滤镜支持以下命令

频率,f

更改全通频率。命令的语法是:“frequency

宽度类型,t

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

宽度,w

更改全通宽度。命令的语法是:“width

混合,m

更改全通混合。命令的语法是:“mix

29.33 aloop

循环音频样本。

该滤镜接受以下选项

loop

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

size

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

start

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

时间

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

29.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,这可能不是预期值。

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

如果输入的持续时间不同,则输出将以最短的持续时间停止。

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

29.35 amix

将多个音频输入混合到单个输出中。

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

它接受以下参数

输入

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

duration

如何确定流的结尾。

最长

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

shortest

最短输入的持续时间。

第一个

第一个输入的持续时间。

退出转换

输入流结束时,音量重新标准化的过渡时间(以秒为单位)。默认值为 2 秒。

权重

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

标准化

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

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

29.35.2 命令

此滤镜支持以下命令

权重
标准化

语法与具有相同名称的选项相同。

29.36 amultiply

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

通过这种逐元素乘法,可以创建幅度淡入淡出和幅度调制。

29.37 anequalizer

每个通道的高阶参数多频段均衡器。

它接受以下参数

参数

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

chn

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

f

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

w

设置频段宽度(以赫兹为单位)。

g

设置频段增益(以 dB 为单位)。

t

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

0

巴特沃斯,这是默认值。

1

切比雪夫 I 型。

2

切比雪夫 II 型。

曲线

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

size

设置视频流大小。仅当激活曲线选项时才有用。

mgain

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

fscale

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

颜色

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

29.37.1 示例

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

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

29.38 anlmdn

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

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

该滤镜接受以下选项

强度,s

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

补丁,p

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

搜索,r

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

output, o

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递过滤掉的噪声。

n

仅传递噪声。

默认值为 o

平滑,m

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

29.38.1 命令

此滤镜支持所有上述选项作为命令

29.39 anlmf, anlms

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

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

下面是接受选项的说明。

order

设置滤波器阶数。

mu

设置滤波器 mu。

eps

设置滤波器 eps。

泄漏

设置滤波器泄漏。

out_mode

它接受以下值

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号、第二个输入和误差信号估计之间的差异。

n

传递输入信号、第一个输入和误差信号估计之间的差异。

e

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

默认值为 o

precision

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

auto

根据其他滤镜自动选择内部采样格式。

float

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

double

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

29.39.1 示例

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

29.39.2 命令

此滤波器支持与选项相同的命令,但不包括选项 order

29.40 anull

将音频源原封不动地传递到输出。

29.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_durwhole_dur 选项,则滤波器将无限期地向输入流的末尾添加静音。

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

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

29.42 aphaser

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

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

以下是对接受的参数的描述。

in_gain

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

out_gain

设置输出增益。默认为 0.74

延迟

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

衰减

设置衰减。默认值为 0.4。

speed

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

type

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

它接受以下值

三角形,t
正弦,s

29.43 aphaseshift

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

该滤镜接受以下选项

shift

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

level

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

order

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

29.43.1 命令

此滤镜支持所有上述选项作为命令

29.44 apsnr

测量音频峰值信噪比。

此滤波器采用两个音频流作为输入,并输出第一个音频流。结果以分贝为单位,按通道在任一输入的末尾显示。

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

29.45.1 命令

此滤镜支持所有上述选项作为命令

29.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 时使用。

29.47 aresample

使用 libswresample 库将输入音频重采样到指定的参数。如果没有指定,则滤波器将自动在其输入和输出之间转换。

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

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

29.47.1 示例

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

29.48 areverse

反转音频剪辑。

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

29.48.1 示例

  • 获取剪辑的前 5 秒并反转它。
    atrim=end=5,areverse
    

29.49 arls

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

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

下面是接受选项的说明。

order

设置滤镜阶数。

lambda

设置遗忘因子。

delta

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

out_mode

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

i

传递第一个输入。

d

传递第二个输入。

o

传递期望信号、第二个输入和误差信号估计之间的差异。

n

传递输入信号、第一个输入和误差信号估计之间的差异。

e

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

默认值为 o

precision

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

auto

根据其他滤镜自动选择内部采样格式。

float

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

double

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

29.50 arnndn

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

此滤波器接受以下选项

model, m

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

mix

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

29.50.1 命令

此滤镜支持所有上述选项作为命令

29.51 asdr

测量音频信号失真比。

此滤波器采用两个音频流作为输入,并输出第一个音频流。结果以分贝为单位,按通道在任一输入的末尾显示。

29.52 asetnsamples

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

最后一个输出数据包可能包含不同数量的采样,因为当输入音频发出结束信号时,滤波器将刷新所有剩余的采样。

该滤镜接受以下选项

nb_out_samples, n

设置每个输出音频帧的帧数。此数字是指每个声道的采样数。默认值为 1024。

pad, p

如果设置为 1,滤波器将在最后一个音频帧中填充零,以便最后一个帧包含与前一个帧相同的采样数。默认值为 1。

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

asetnsamples=n=1234:p=0

29.53 asetrate

在不更改 PCM 数据的情况下设置采样率。这将导致速度和音调的变化。

该滤镜接受以下选项

sample_rate, r

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

29.54 ashowinfo

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

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

以下值在输出中显示

n

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

pts

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

pts_time

输入帧的呈现时间戳,以秒为单位。

fmt

采样格式。

chlayout

声道布局。

rate

音频帧的采样率。

nb_samples

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

checksum

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

plane_checksums

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

29.55 asisdr

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

此滤波器采用两个音频流作为输入,并输出第一个音频流。结果以分贝为单位,按通道在任一输入的末尾显示。

29.56 asoftclip

应用音频软削波。

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

此滤波器接受以下选项

type

设置软削波类型。

它接受以下值

hard
tanh
atan
cubic
exp
alg
quintic
sin
erf
threshold

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

output

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

param

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

oversample

设置过采样因子。

29.56.1 命令

此滤镜支持所有上述选项作为命令

29.57 aspectralstats

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

它接受以下选项

win_size

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

win_func

设置窗口函数。

它接受以下值

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

默认值为 hann

overlap

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

measure

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

每个元数据键的列表如下

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

29.58 asr

自动语音识别

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

它接受以下选项

rate

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

hmm

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

dict

设置发音字典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置要使用的语言模型。

logfn

设置日志消息的输出。

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

29.59 astats

显示音频通道的时域统计信息。将计算并显示每个音频通道的统计信息,并在适用情况下给出总体数据。

它接受以下选项

length

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

metadata

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

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

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

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

请阅读以下键的描述。

重置

设置在重置之前计算累积统计信息的帧数。默认情况下禁用。

measure_perchannel

选择每个通道测量的参数。元数据键可以用作标志,默认值为 all,测量所有内容。none 禁用所有每个通道的测量。

measure_overall

选择总体测量的参数。元数据键可以用作标志,默认值为 all,测量所有内容。none 禁用所有总体测量。

以下是测量键的描述

none

无测量

all

所有测量

Bit_depth

音频的总体位深度,即每个样本使用的位数

Crest_factor

峰值电平与 RMS 电平的标准比率(注意:不是以 dB 为单位)

DC_offset

从零的平均幅度偏移

Dynamic_range

以 dB 为单位测量的音频动态范围

Entropy

在整个音频中测量的熵,通常为白噪声测量的熵值接近 1.0

Flat_factor

信号在其峰值电平(即 Min_levelMax_level)处的平坦度(即具有相同值的连续样本)

Max_difference

两个连续样本之间的最大差值

Max_level

最大样本电平

Mean_difference

两个连续样本之间的平均差值,即两个连续样本之间的每个差值的平均值

Min_difference

两个连续样本之间的最小差值

Min_level

最小样本电平

Noise_floor

在短窗口内测量的以 dBFS 为单位的最小局部峰值

Noise_floor_count

信号达到 Noise floor 的次数(不是样本数)

Number_of_Infs

具有无穷大值的样本数

Number_of_NaNs

具有 NaN(非数字)值的样本数

Number_of_denormals

具有次正规值的样本数

Number_of_samples

样本数

Peak_count

信号达到 Min_levelMax_level 的次数(不是样本数)

Abs_Peak_count

从信号中获取的绝对样本达到 Min_levelMax_level 的最大绝对值的次数

Peak_level

以 dBFS 为单位测量的标准峰值电平

RMS_difference

两个连续样本之间的均方根差值

RMS_level

以 dBFS 为单位测量的标准 RMS 电平

RMS_peak
RMS_trough

在短窗口内测量的 RMS 电平的峰值和谷值,以 dBFS 为单位测量。

Zero crossings

波形穿过零电平轴的点数

Zero crossings rate

过零率和音频样本数

29.60 asubboost

增强低音炮频率。

该滤镜接受以下选项

dry

设置干声增益,保留多少原始信号。允许的范围是 0 到 1。默认值为 1.0。

wet

设置湿声增益,保留多少滤波后的信号。允许的范围是 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。

channels

设置要处理的通道。默认值是所有可用通道。

29.60.1 命令

此滤镜支持所有上述选项作为命令

29.61 asubcut

切除低音炮频率。

此滤波器允许设置比高通滤波器更陡峭的滚降,因此能够更多地衰减阻带中的频率成分。

该滤镜接受以下选项

cutoff

设置截止频率(赫兹)。允许的范围是 2 到 200。默认值为 20。

order

设置滤波器阶数。可用值为 3 到 20。默认值为 10。

level

设置输入增益级别。允许范围为 0 到 1。默认值为 1。

29.61.1 命令

此滤镜支持所有上述选项作为命令

29.62 asupercut

切除超高频率。

该滤镜接受以下选项

cutoff

设置截止频率(赫兹)。允许的范围是 20000 到 192000。默认值为 20000。

order

设置滤波器阶数。可用值为 3 到 20。默认值为 10。

level

设置输入增益级别。允许范围为 0 到 1。默认值为 1。

29.62.1 命令

此滤镜支持所有上述选项作为命令

29.63 asuperpass

应用高阶巴特沃斯带通滤波器。

该滤镜接受以下选项

centerf

设置中心频率(赫兹)。允许的范围是 2 到 999999。默认值为 1000。

order

设置滤波器阶数。可用值为 4 到 20。默认值为 4。

qfactor

设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。

level

设置输入增益电平。允许的范围是 0 到 2。默认值为 1。

29.63.1 命令

此滤镜支持所有上述选项作为命令

29.64 asuperstop

应用高阶巴特沃斯带阻滤波器。

该滤镜接受以下选项

centerf

设置中心频率(赫兹)。允许的范围是 2 到 999999。默认值为 1000。

order

设置滤波器阶数。可用值为 4 到 20。默认值为 4。

qfactor

设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。

level

设置输入增益电平。允许的范围是 0 到 2。默认值为 1。

29.64.1 命令

此滤镜支持所有上述选项作为命令

29.65 atempo

调整音频速度。

该滤波器仅接受一个参数,即音频速度。如果未指定,则滤波器将采用标称 1.0 速度。速度必须在 [0.5, 100.0] 范围内。

请注意,大于 2 的速度将跳过一些样本,而不是将它们混合在一起。如果出于任何原因这令人担忧,则始终可以串联多个 atempo 实例以达到所需的输出速度。

29.65.1 示例

  • 将音频速度减慢到 80%
    atempo=0.8
    
  • 将音频速度加快到 300%
    atempo=3
    
  • 通过串联两个 atempo 实例将音频速度加快到 300%
    atempo=sqrt(3),atempo=sqrt(3)
    

29.65.2 命令

此滤镜支持以下命令

tempo

更改滤波器速度缩放因子。该命令的语法为:“tempo

29.66 atilt

将频谱倾斜滤波器应用于音频流。

此滤波器在任何指定的频带上应用任何频谱滚降斜率。

该滤镜接受以下选项

频率

设置倾斜的中心频率(赫兹)。默认值为 10000 赫兹。

斜率

设置倾斜的斜率方向。默认值为 0。允许的范围是 -1 到 1。

width

设置倾斜的宽度。默认值为 1000。允许的范围是 100 到 10000。

order

设置倾斜滤波器的阶数。

level

设置输入音量电平。允许的范围是 0 到 4。默认值为 1。

29.66.1 命令

此滤镜支持所有上述选项作为命令

29.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
    

29.68 axcorrelate

计算两个输入音频流之间的归一化窗口化互相关。

结果样本始终在 -1 和 1 之间(包括 -1 和 1)。如果结果为 1,则表示两个输入样本在该选定片段中高度相关。结果为 0 表示它们根本不相关。如果结果为 -1,则表示两个输入样本异相,这意味着它们会相互抵消。

该滤镜接受以下选项

size

设置计算互相关时所用的片段大小。默认值为 256。允许的范围为 2 到 131072。

algo

设置互相关的算法。可以是 slowfastbest。默认值为 best。快速算法假设任何给定片段的平均值始终为零,因此需要较少的计算。这通常不是真的,但对于典型的音频流是有效的。

29.68.1 示例

  • 计算立体声音频流中通道之间的相关性
    ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
    

29.69 bandpass

应用一个二阶巴特沃斯带通滤波器,其中心频率为 frequency,(3dB 点)带宽为 width。csg 选项选择恒定裙边增益(峰值增益 = Q),而不是默认值:恒定 0dB 峰值增益。滤波器的滚降为每倍频程 6dB(每十年 20dB)。

该滤镜接受以下选项

频率,f

设置滤波器的中心频率。默认值为 3000

csg

如果设置为 1,则为恒定裙边增益。默认为 0。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,w

指定滤波器带宽(以 width_type 单位)。

混合,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.69.1 命令

此滤镜支持以下命令

频率,f

更改带通频率。命令的语法是:“frequency

宽度类型,t

更改带通 width_type。命令的语法是:“width_type

宽度,w

更改带通宽度。命令的语法是:“width

混合,m

更改带通混合。命令的语法是:“mix

29.70 bandreject

应用一个二阶巴特沃斯带阻滤波器,其中心频率为 frequency,(3dB 点)带宽为 width。滤波器的滚降为每倍频程 6dB(每十年 20dB)。

该滤镜接受以下选项

频率,f

设置滤波器的中心频率。默认值为 3000

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,w

指定滤波器带宽(以 width_type 单位)。

混合,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.70.1 命令

此滤镜支持以下命令

频率,f

更改带阻频率。命令的语法是:“frequency

宽度类型,t

更改带阻 width_type。命令的语法是:“width_type

宽度,w

更改带阻宽度。命令的语法是:“width

混合,m

更改带阻混合。命令的语法是:“mix

29.71 bass, lowshelf

使用类似于标准高保真音调控制的双极搁架滤波器来增强或削减音频的低(较低)频率。这也称为搁架均衡 (EQ)。

该滤镜接受以下选项

gain, g

给出 0 Hz 时的增益。其有效范围约为 -20(用于大幅削减)到 +20(用于大幅增强)。使用正增益时,请注意削波。

频率,f

设置滤波器的中心频率,因此可以用来扩展或缩小要增强或削减的频率范围。默认值为 100 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.71.1 命令

此滤镜支持以下命令

频率,f

更改低音频率。命令的语法是:“frequency

宽度类型,t

更改低音 width_type。命令的语法是:“width_type

宽度,w

更改低音宽度。命令的语法是:“width

gain, g

更改低音增益。命令的语法是:“gain

混合,m

更改低音混合。命令的语法是:“mix

29.72 biquad

应用具有给定系数的双二阶 IIR 滤波器。其中 b0b1b2a0a1a2 分别是分子和分母系数。并且 channelsc 指定要过滤的通道,默认情况下,所有可用的通道都会被过滤。

29.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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.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 为单位)。

29.74 channelmap

将输入通道重新映射到新的位置。

它接受以下参数

map

将通道从输入映射到输出。参数是一个以“|”分隔的映射列表,每个映射采用 in_channel-out_channelin_channel 的形式。in_channel 可以是输入通道的名称(例如,FL 表示前左)或其在输入通道布局中的索引。out_channel 是输出通道的名称或其在输出通道布局中的索引。如果未给出 out_channel,则它隐式地是一个索引,从零开始,并且每个映射递增一。不允许混合不同类型的映射,否则将导致解析错误。

channel_layout

输出流的通道布局。如果未指定,则过滤器将根据 out_channel 名称或映射的数量进行猜测。猜测的布局不一定包含映射顺序中的通道。

如果不存在映射,则过滤器将隐式地将输入通道映射到输出通道,保留索引。

29.74.1 示例

  • 例如,假设一个 5.1+downmix 输入 MOV 文件,
    ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
    

    将从输入的 downmix 通道创建一个标记为立体的输出 WAV 文件。

  • 要修复以 AAC 的本机通道顺序错误编码的 5.1 WAV
    ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
    

29.75 channelsplit

将输入音频流的每个声道拆分为单独的输出流。

它接受以下参数

channel_layout

输入流的声道布局。默认为“立体声”。

channels

描述要提取为单独输出流的声道的声道布局,或者使用“all”提取每个输入声道作为单独的流。默认为“all”。

选择输入声道布局中不存在的声道会导致错误。

29.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
    

29.76 chorus

向音频添加合唱效果。

可以使单个声音听起来像合唱,但也可以应用于乐器。

合唱类似于具有短延迟的回声效果,但回声的延迟是恒定的,而合唱的延迟则使用正弦或三角调制进行变化。调制深度定义了调制延迟在延迟之前或之后播放的范围。因此,延迟的声音听起来会更慢或更快,也就是说,延迟的声音会围绕原始声音进行调整,就像合唱中一些人声略微跑调一样。

它接受以下参数

in_gain

设置输入增益。默认为 0.4。

out_gain

设置输出增益。默认为 0.4。

delays

设置延迟。典型的延迟约为 40 毫秒到 60 毫秒。

decays

设置衰减。

速度

设置速度。

深度

设置深度。

29.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
    

29.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

软拐点

设置所有连接处的曲线半径,以分贝为单位。默认为 0.01。

增益

设置要应用于传输函数上所有点的附加增益,以分贝为单位。这允许轻松调整整体增益。默认为 0。

音量

设置每个声道在滤波开始时假定的初始音量,以分贝为单位。这允许用户最初提供一个标称电平,以便例如,在压扩开始工作之前,不会将非常大的增益应用于初始信号电平。对于最初安静的音频,典型值为 -90 分贝。默认为 0。

延迟

设置延迟,以秒为单位。输入音频会立即进行分析,但音频在被馈送到音量调节器之前会被延迟。指定一个大致等于启动/衰减时间的延迟,可以使滤波器有效地以预测模式而不是反应模式运行。默认为 0。

29.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
    

29.78 compensationdelay

补偿延迟线是基于度量的延迟,用于补偿麦克风或扬声器的不同位置。

例如,您使用放置在不同位置的两个麦克风录制了吉他。由于声波的正面在正常条件下具有固定的速度,麦克风的相位可能会有所不同,并且取决于它们的位置和相互位置。当这些麦克风同相(同步)时,可以实现最佳的声音混合。请注意,麦克风之间约 30 厘米的距离会使一个麦克风捕获与另一个麦克风反相的信号。这会使最终的混音听起来很情绪化。此滤波器通过为每个麦克风轨道添加不同的延迟并使它们同步来帮助解决相位问题。

当您将一个轨道作为基准并将其余轨道逐个与其同步时,可以获得最佳结果。请记住,同步/延迟容差也取决于采样率。较高的采样率将提供更高的容差。

该滤波器接受以下参数

毫米

设置毫米距离。这是用于微调的补偿距离。默认为 0。

厘米

设置厘米距离。这是用于收紧距离设置的补偿距离。默认为 0。

m

设置米距离。这是用于硬距离设置的补偿距离。默认为 0。

dry

设置干信号量。未处理(干)信号的量。默认为 0。

wet

设置湿信号量。已处理(湿)信号的量。默认为 1。

温度

设置摄氏温度。这是环境温度。默认为 20。

29.78.1 命令

此滤镜支持所有上述选项作为命令

29.79 crossfeed

应用耳机串音滤波器。

串音是混合立体声音频录音的左右声道的过程。它主要用于减少低频的极端立体声分离。

目的是为听者产生更像扬声器的声音。

该滤镜接受以下选项

强度

设置串音的强度。默认为 0.2。允许范围为 0 到 1。这设置了立体声图像侧面部分的低架滤波器的增益。默认为 -6dB。当强度设置为 1 时,最大允许值为 -30db。

范围

设置声场宽度。默认为 0.5。允许范围为 0 到 1。这设置了低架滤波器的截止频率。默认情况下,截止频率接近 1550 Hz。当范围设置为 1 时,截止频率设置为 2100 Hz。

斜率

设置低架滤波器的曲线斜率。默认为 0.5。允许范围为 0.01 到 1。

level_in

设置输入增益。默认为 0.9。

level_out

设置输出增益。默认值为 1。

块大小

设置用于反向 IIR 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.79.1 命令

此滤镜支持所有上述选项作为命令

29.80 crystalizer

用于音频噪声锐化的简单算法。

此滤波器线性增加每个音频样本之间的差异。

该滤镜接受以下选项

i

设置效果强度(默认值:2.0)。必须在 -10.0 到 0(未更改的声音)到 10.0(最大效果)的范围内。要反转滤波,请使用负值。

c

启用削波。默认情况下已启用。

29.80.1 命令

此滤镜支持所有上述选项作为命令

29.81 dcshift

对音频应用直流偏移。

这对于消除音频中的直流偏移(可能是由于录音链中的硬件问题引起的)很有用。直流偏移的影响是降低了动态余量,从而降低了音量。astats 滤波器可用于确定信号是否具有直流偏移。

shift

设置直流偏移,允许范围为 [-1, 1]。它表示要偏移音频的量。

限幅器增益

可选。它应该有一个远小于 1 的值(例如 0.05 或 0.02),用于防止削波。

29.82 deesser

对音频样本应用去齿音处理。

i

设置触发去齿音的强度。允许范围是 0 到 1。默认值为 0。

m

设置对声音高频部分的衰减量。允许范围是 0 到 1。默认值为 0.5。

f

在去齿音时保留多少原始频率内容。允许范围是 0 到 1。默认值为 0.5。

s

设置输出模式。

它接受以下值

i

保持输入不变。

o

传递过滤掉的齿音。

e

仅传递齿音。

默认值为 o

29.83 dialoguenhance

增强立体声音频中的对话。

此滤波器接受立体声输入并产生环绕 (3.0) 声道输出。新生成的前置中置声道具有在两个立体声声道中原本可用的增强的语音对话。此滤波器输出的前置左声道和前置右声道与立体声输入中可用的一致。

该滤镜接受以下选项

原始

设置在前置中置声道输出中保留的原始中心因子。允许范围是 0 到 1。默认值为 1。

enhance

设置放置在前置中置声道输出中的对话增强因子。允许范围是 0 到 3。默认值为 1。

语音

设置语音检测因子。允许范围是 2 到 32。默认值为 2。

29.83.1 命令

此滤镜支持所有上述选项作为命令

29.84 drmeter

测量音频动态范围。

在动态范围非常大的素材中可以发现 14 及以上的 DR 值。在过渡素材中可以发现 8 到 13 的 DR 值。而任何低于 8 的值都具有非常差的动态范围并且被高度压缩。

该滤镜接受以下选项

length

设置用于将音频分割成等长片段的窗口长度(以秒为单位)。默认值为 3 秒。

29.85 dynaudnorm

动态音频标准化器。

此滤波器对输入音频应用一定量的增益,以使其峰值幅度达到目标电平(例如 0 dBFS)。但是,与更“简单”的标准化算法相比,动态音频标准化器会*动态地*重新调整输入音频的增益因子。这允许对音频的“安静”部分应用额外的增益,同时避免“响亮”部分的失真或削波。换句话说:动态音频标准化器将“均衡”安静和响亮部分的音量,因为每个部分的音量都被调整到相同的目标电平。但是请注意,动态音频标准化器在实现此目标时*不会*应用“动态范围压缩”。它将保留音频文件每个部分*内*的 100% 的动态范围。

帧长, f

设置帧长度(以毫秒为单位)。范围为 10 到 8000 毫秒。默认值为 500 毫秒。动态音频标准化器以小块处理输入音频,这些小块称为帧。这是必需的,因为峰值幅度对于单个样本值没有意义。相反,我们需要确定连续样本值序列的峰值幅度。虽然“标准”标准化器会简单地使用完整文件的峰值幅度,但动态音频标准化器会单独确定每帧的峰值幅度。帧的长度以毫秒为单位指定。默认情况下,动态音频标准化器使用 500 毫秒的帧长度,这已被证明在大多数文件中都能获得良好的结果。请注意,确切的帧长度(以样本数计)将根据各个输入音频文件的采样率自动确定。

高斯大小, g

设置高斯滤波器窗口大小。范围为 3 到 301,必须为奇数。默认值为 31。动态音频标准化器最重要的参数可能是高斯平滑滤波器的窗口大小。滤波器的窗口大小以帧为单位指定,以当前帧为中心。为简单起见,这必须是奇数。因此,默认值 31 会考虑当前帧,以及前 15 帧和后 15 帧。使用更大的窗口会导致更强的平滑效果,从而导致增益变化更小,即增益自适应速度更慢。相反,使用更小的窗口会导致更弱的平滑效果,从而导致增益变化更大,即增益自适应速度更快。换句话说,你增加这个值越多,动态音频标准化器的行为就越像“传统的”标准化滤波器。相反,你减少这个值越多,动态音频标准化器的行为就越像动态范围压缩器。

峰值, p

设置目标峰值。这指定了标准化音频输入允许的最大幅度电平。此滤波器将尝试尽可能接近目标峰值幅度,但同时它也会确保标准化信号永远不会超过峰值幅度。帧的最大局部增益因子由目标峰值幅度直接决定。默认值为 0.95,因此留有 5% 的余量*。不建议高于此值。

最大增益, m

设置最大增益因子。范围为 1.0 到 100.0。默认值为 10.0。动态音频标准化器确定每个输入帧的最大可能(局部)增益因子,即不会导致削波或失真的最大增益因子。最大增益因子由帧的最高幅度样本确定。但是,动态音频标准化器还通过预定的(全局)最大增益因子来限制帧的最大增益因子。这样做是为了避免在“静音”或几乎静音的帧中使用过高的增益因子。默认情况下,最大增益因子为 10.0。对于大多数输入,默认值应该足够,通常不建议增加此值。但是,对于整体音量极低的输入,可能需要允许更高的增益因子。但请注意,动态音频标准化器不会简单地应用“硬”阈值(即,切断高于阈值的值)。相反,将应用“S 型”阈值函数。这样,增益因子将平滑地接近阈值,但永远不会超过该值。

目标 RMS, r

设置目标 RMS 值。范围为 0.0 到 1.0。默认值为 0.0 - 禁用。默认情况下,“动态音频归一化器”执行“峰值”归一化。这意味着每个帧的最大局部增益因子由该帧的最高幅度采样值(仅限)决定。这样,可以在不超出最大信号电平(即不削波)的情况下尽可能地放大采样值。然而,可以选择让“动态音频归一化器”也考虑帧的均方根值,简称为 RMS。在电气工程中,RMS 通常用于确定时变信号的功率。因此,人们认为 RMS 比仅查看信号的峰值幅度更能近似地表示“感知响度”。因此,通过将所有帧调整到恒定的 RMS 值,可以建立统一的“感知响度”。如果指定了目标 RMS 值,则帧的局部增益因子定义为导致该 RMS 值的因子。但是请注意,最大局部增益因子仍然受到帧的最高幅度采样的限制,以防止削波。

耦合, n

启用通道耦合。默认情况下启用。默认情况下,“动态音频归一化器”将以相同的幅度放大所有通道。这意味着将对所有通道应用相同的增益因子,即最大可能的增益因子由“最响”的通道决定。然而,在某些录音中,可能会出现不同通道的音量不均匀的情况,例如,一个通道可能比其他通道“安静”。在这种情况下,可以使用此选项禁用通道耦合。这样,将为每个通道独立确定增益因子,仅取决于各个通道的最高幅度采样。这允许协调不同通道的音量。

校正直流偏置, c

启用直流偏置校正。默认情况下禁用。音频信号(在时域中)是一个采样值序列。在“动态音频归一化器”中,这些采样值以 -1.0 到 1.0 的范围表示,无论原始输入格式如何。通常,音频信号或“波形”应以零点为中心。这意味着,如果我们计算文件中或单个帧中所有采样的平均值,则结果应为 0.0 或至少非常接近该值。然而,如果平均值与 0.0 之间存在显着偏差,无论是正方向还是负方向,则将其称为直流偏置或直流偏移。由于直流偏置显然是不希望的,“动态音频归一化器”提供了可选的直流偏置校正。启用直流偏置校正后,“动态音频归一化器”将确定每个输入帧的平均值或“直流校正”偏移量,并从该帧的所有采样值中减去该值,从而确保这些采样值再次以 0.0 为中心。此外,为了避免帧边界处出现“间隙”,直流校正偏移值将在相邻帧之间平滑插值。

替代边界, b

启用替代边界模式。默认情况下禁用。“动态音频归一化器”会考虑每个帧周围的某个邻域。这包括前面的帧以及后面的帧。然而,对于位于音频文件最开头和最末尾的“边界”帧,并非所有相邻帧都可用。特别是,对于音频文件中的前几个帧,前面的帧是未知的。类似地,对于音频文件中的最后几个帧,后面的帧是未知的。因此,问题出现了:对于“边界”区域中丢失的帧,应该假设哪个增益因子。“动态音频归一化器”实现了两种模式来处理这种情况。默认边界模式假定缺失帧的增益因子恰好为 1.0,从而分别在输入的开头和结尾产生平滑的“淡入”和“淡出”。

压缩, s

设置压缩因子。范围为 0.0 到 30.0。默认值为 0.0。默认情况下,“动态音频归一化器”不应用“传统”压缩。这意味着信号峰值不会被修剪,因此在每个局部邻域内将保留完整的动态范围。然而,在某些情况下,可能需要将“动态音频归一化器”的归一化算法与更“传统”的压缩相结合。为此,“动态音频归一化器”提供了可选的压缩(阈值)功能。如果(且仅当)启用了压缩功能,则在实际归一化过程之前,所有输入帧都将通过软拐点阈值函数进行处理。简单来说,阈值函数将修剪所有幅度超过某个阈值的采样值。然而,“动态音频归一化器”不会简单地应用固定的阈值。相反,将为每个单独的帧调整阈值。通常,较小的参数会导致更强的压缩,反之亦然。不建议使用低于 3.0 的值,因为可能会出现可听失真。

threshold, t

设置目标阈值。这指定了要进行归一化的音频输入的最低允许幅度级别。如果输入帧音量高于此值,则该帧将被归一化。否则,该帧可能根本不会被归一化。默认值设置为 0,这意味着所有输入帧都将被归一化。如果不想放大数字噪声,则此选项最有用。

通道, h

指定要过滤的通道,默认情况下将过滤所有可用通道。

overlap, o

指定帧的重叠。如果设置为 0(默认值),则不进行帧重叠。使用 >0 和 <1 的值将进行不太保守的增益调整,就像当 framelen 选项设置为较小的值时一样,如果 framelen 选项值补偿了非零重叠,则与零重叠情况相比,增益调整在时间上会更平滑。

曲线, v

指定在计算应用于帧的增益时将使用的峰值映射曲线表达式。最大输出帧增益仍将受到此过滤器先前提到的其他选项的限制。

表达式可以包含以下常量

ch

当前通道号

sn

当前采样号

nb_channels

通道数量

t

以秒为单位的时间戳

sr

采样率

p

当前帧峰值

29.85.1 命令

此滤镜支持所有上述选项作为命令

29.86 earwax

使音频在耳机上更容易收听。

此滤波器向 44.1kHz 立体声(即音频 CD 格式)音频添加“提示”,以便在耳机上收听时,立体声图像从您的头部内部(耳机的标准)移动到外部和听众的前面(扬声器的标准)。

从 SoX 移植。

29.87 equalizer

应用双极峰值均衡 (EQ) 滤波器。使用此滤波器,可以增加或减少在选定频率附近和周围的信号电平,而(与带通和带阻滤波器不同)所有其他频率的信号电平保持不变。

为了产生复杂的均衡曲线,可以多次给定此滤波器,每次都有不同的中心频率。

该滤镜接受以下选项

频率,f

设置滤波器的中心频率,单位为 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,w

指定滤波器带宽(以 width_type 单位)。

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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.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
    

29.87.2 命令

此滤镜支持以下命令

频率,f

更改均衡器频率。命令的语法是:“频率

宽度类型,t

更改均衡器宽度类型。命令的语法是:“宽度类型

宽度,w

更改均衡器宽度。命令的语法是:“宽度

gain, g

更改均衡器增益。命令的语法是:“增益

混合,m

更改均衡器混合。命令的语法是:“混合

29.88 extrastereo

线性增加左右声道之间的差异,为回放添加某种“现场”效果。

该滤镜接受以下选项

m

设置差异系数(默认值:2.5)。0.0 表示单声道声音(两个声道的平均值),1.0 表示声音不变,-1.0 表示左右声道互换。

c

启用削波。默认情况下已启用。

29.88.1 命令

此滤镜支持所有上述选项作为命令

29.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

线性频率,对数(以 dB 为单位)增益(默认)

loglin

对数(以 20 Hz 为 0 的倍频程)频率,线性增益

loglog

对数频率,对数增益

dumpfile

设置转储文件,适用于 gnuplot。

dumpscale

设置转储文件的比例。可接受的值与 scale 选项相同。默认值为 linlog。

fft2

使用复数 FFT 启用双声道卷积。这可以显著提高速度。默认情况下禁用。

min_phase

启用最小相位脉冲响应。默认情况下禁用。

29.89.1 示例

  • 在 1000 Hz 处进行低通滤波
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 在 1000 Hz 处使用 gain_entry 进行低通滤波
    firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
    
  • 自定义均衡
    firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
    
  • 使用零相位进行更高延迟以补偿延迟
    firequalizer=delay=0.1:fixed=on:zero_phase=on
    
  • 在左声道上进行低通滤波,在右声道上进行高通滤波
    firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))'
    :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
    

29.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

设置延迟线插值,线性二次。默认值为 线性

29.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

更改右相位。默认情况下启用。

29.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, 关闭

已禁用

1, lle

每个样本的增益调整级别

2, pe

发生峰值扩展的样本

3, cdt

代码检测到定时器活动时的采样

4, tgm

通道之间的目标增益不匹配时的采样

29.93 headphone

应用头部相关传递函数 (HRTF) 以在用户周围创建虚拟扬声器,以便通过耳机进行双耳聆听。 HRIR 通过额外的流提供,每个通道需要一个立体声输入流。

该滤镜接受以下选项

map

设置用于卷积的输入流映射。参数是一个用“|”分隔的通道名称列表,顺序与它们作为过滤器的附加流输入给出时的顺序相同。 这也指定了输入流的数量。输入流的数量必须不小于第一个流中的通道数加一。

增益

设置应用于音频的增益。值以分贝为单位。默认为 0。

type

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认为 freq

lfe

设置 LFE 通道的自定义增益。值以分贝为单位。默认为 0。

size

设置一次处理的帧大小(以采样数计)。默认值为 1024。允许的范围为 1024 到 96000。

hrir

设置 hrir 流的格式。默认值为 stereo。替代值为 multich。如果值设置为 stereo,则附加流的数量应大于或等于第一个输入流中的输入通道数。此外,每个附加流都应具有立体声通道数。如果值设置为 multich,则附加流的数量应恰好为一个。此外,附加流的输入通道数应大于或等于第一个输入流的通道数的两倍。

29.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
    

29.94 highpass

应用一个 3dB 点频率的高通滤波器。该滤波器可以是单极点,也可以是双极点(默认)。该滤波器以每极点每倍频程 6dB(每极点每十倍频程 20dB)的速率滚降。

该滤镜接受以下选项

频率,f

以 Hz 为单位设置频率。默认为 3000。

poles, p

设置极点数。默认值为 2。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.94.1 命令

此滤镜支持以下命令

频率,f

更改高通频率。命令的语法为:“frequency

宽度类型,t

更改高通 width_type。命令的语法为:“width_type

宽度,w

更改高通宽度。命令的语法为:“width

混合,m

更改高通混合。命令的语法为:“mix

29.95 join

将多个输入流合并为一个多通道流。

它接受以下参数

输入

输入流的数量。默认为 2。

channel_layout

所需的输出通道布局。默认为立体声。

map

将输入通道映射到输出通道。参数是一个用“|”分隔的映射列表,每个映射都采用 input_idx.in_channel-out_channel 格式。input_idx 是输入流的从 0 开始的索引。in_channel 可以是输入通道的名称(例如,FL 表示前左),也可以是其在指定输入流中的索引。out_channel 是输出通道的名称。

当未明确指定映射时,滤波器将尝试猜测映射。它首先尝试查找未使用的匹配输入通道,如果失败,则选择第一个未使用的输入通道。

连接 3 个输入(具有正确设置的通道布局)

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT

从 6 个单通道流构建 5.1 输出

ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
out

29.96 ladspa

加载 LADSPA (Linux Audio Developer’s Simple Plugin 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

启用延迟补偿,默认情况下禁用。仅当插件有输入时使用。

29.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 插件(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 系列的多频段 EQ 衰减低频
    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
    

29.96.2 命令

此滤镜支持以下命令

cN

修改第 N 个控制值。

如果指定的值无效,则会忽略该值并保留先前的值。

29.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。

29.98 lowpass

应用一个具有 3dB 点频率的低通滤波器。该滤波器可以是单极或双极(默认)。滤波器以每倍频程每极 6dB(每十倍频程每极 20dB)的速率滚降。

该滤镜接受以下选项

频率,f

以 Hz 为单位设置频率。默认值为 500。

poles, p

设置极点数。默认值为 2。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.98.1 示例

  • 仅对低频效果 (LFE) 声道应用低通滤波,如果不存在 LFE 声道则不执行任何操作。
    lowpass=c=LFE
    

29.98.2 命令

此滤镜支持以下命令

频率,f

更改低通频率。该命令的语法为:“频率

宽度类型,t

更改低通宽度类型。该命令的语法为:“宽度类型

宽度,w

更改低通宽度。该命令的语法为:“宽度

混合,m

更改低通混合。该命令的语法为:“混合

29.99 lv2

加载 LV2 (LADSPA Version 2) 插件。

要启用此滤波器的编译,您需要使用 --enable-lv2 配置 FFmpeg。

plugin, p

指定插件 URI。您可能需要转义“:”。

controls, c

设置由“|”分隔的控件列表,这些控件是零个或多个浮点值,用于确定已加载插件的行为(例如延迟、阈值或增益)。如果 controls 设置为 help,则会打印所有可用的控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅当插件没有输入时使用。

nb_samples, n

设置每个输出帧每个通道的采样数,默认为 1024。仅当插件没有输入时使用。

duration, d

设置源音频的最小持续时间。有关接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的“时间持续时间”部分。请注意,结果持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。如果未指定,或表达的持续时间为负值,则假定音频将永远生成。仅当插件没有输入时使用。

29.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
    

29.99.2 命令

此滤波器支持插件作为命令导出的所有选项。

29.100 mcompand

多频段压缩或扩展音频的动态范围。

输入音频使用 4 阶 Linkwitz-Riley IIR 分成频段。这类似于扬声器的分频,在没有扩展器动作时会产生平坦的频率响应。

它接受以下参数

args

此选项的语法为:attack,decay,[attack,decay..] soft-knee points crossover_frequency [delay [initial_volume [gain]]] | attack,decay ... 有关每个项目的说明,请参阅 compand 滤波器文档。

29.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,从而避免削波噪声。

29.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”选项)。

29.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"

29.102 replaygain

ReplayGain 扫描器滤波器。此滤波器将音频流作为输入,并将其原封不动地输出。在过滤结束时,它会显示 track_gaintrack_peak

该滤波器接受以下导出的只读选项

track_gain

流末尾导出的以 dB 为单位的轨道增益。

track_peak

流末尾导出的轨道峰值。

29.103 resample

转换音频采样格式、采样率和声道布局。不应直接使用。

29.104 rubberband

使用 librubberband 应用时间伸缩和音调移动。

要启用此滤波器的编译,您需要使用 --enable-librubberband 配置 FFmpeg。

该滤镜接受以下选项

tempo

设置速度缩放因子。

pitch

设置音调缩放因子。

transients

设置瞬态检测器。可能的值为

crisp
mixed
smooth
detector

设置检测器。可能的值为

compound
percussive
soft
phase

设置相位。可能的值为

laminar
independent
window

设置处理窗口大小。可能的值为

标准
short
long
smoothing

设置平滑处理。可能的值为

off
on
formant

启用在移动音调时保留共振峰。可能的值为

shifted
preserved
pitchq

设置音调质量。可能的值为

quality
speed
consistency
channels

设置声道。可能的值为

apart
together

29.104.1 命令

此滤镜支持以下命令

tempo

更改滤波器速度缩放因子。该命令的语法为:“tempo

pitch

更改滤波器音调缩放因子。该命令的语法为:“音调

29.105 sidechaincompress

此滤波器的作用类似于普通压缩器,但具有使用第二个输入信号压缩检测到的信号的能力。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流的信号进行处理。经过滤波的信号随后可以在处理的后续阶段使用其他滤波器进行滤波。请参阅 panamerge 滤波器。

该滤镜接受以下选项

level_in

设置输入增益。默认为 1。范围介于 0.015625 和 64 之间。

mode

设置压缩器操作模式。可以是 upwarddownward。默认为 downward

threshold

如果第二个流的信号高于此电平,它将影响第一个流的增益衰减。默认值为 0.125。范围介于 0.00097563 和 1 之间。

ratio

设置信号被衰减的比率。1:2 表示如果电平升高超过阈值 4dB,则衰减后只会高于 2dB。默认值为 2。范围介于 1 和 20 之间。

attack

信号必须高于阈值多长时间才能开始增益衰减,以毫秒为单位。默认为 20。范围介于 0.01 和 2000 之间。

release

信号必须低于阈值多长时间后才会再次减少衰减,以毫秒为单位。默认为 250。范围介于 0.01 和 9000 之间。

makeup

设置处理后信号将放大多少。默认为 1。范围介于 1 和 64 之间。

knee

弯曲阈值周围的尖锐拐点,以更柔和地进入增益衰减。默认为 2.82843。范围介于 1 和 8 之间。

link

选择是使用侧链流的所有通道之间的average平均电平,还是使用侧链流中较响亮的 (maximum) 通道来影响衰减。默认值为 average

detection

peak 的情况下应采用精确信号,还是在 rms 的情况下采用 RMS 信号。默认值为 rms,它主要更平滑。

level_sc

设置侧链增益。默认值为 1。范围介于 0.015625 和 64 之间。

mix

在输出中使用多少压缩信号。默认为 1。范围介于 0 和 1 之间。

29.105.1 命令

此滤镜支持所有上述选项作为命令

29.105.2 示例

  • 使用 2 个音频输入的完整 ffmpeg 示例,第一个输入根据第二个输入的信号进行压缩,然后将压缩后的信号与第二个输入合并
    ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
    

29.106 sidechaingate

侧链门的作用类似于普通(宽带)门,但能够在发送到增益衰减阶段之前过滤检测到的信号。通常,门使用全频信号来检测高于阈值的电平。例如:如果从侧链信号中切掉所有较低的频率,则只有当高频信号不足时,门才会降低音轨的音量。使用此技术,您可以减少自然鼓的共振或消除严重失真吉他中静音击打的“隆隆声”。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流的信号进行处理。

该滤镜接受以下选项

level_in

设置滤波前的输入电平。默认值为 1。允许的范围是 0.015625 到 64。

mode

设置操作模式。可以是 upwarddownward。默认值为 downward。如果设置为 upward 模式,则信号的较高部分将被放大,从而在向上方向扩展动态范围。否则,在 downward 情况下,信号的较低部分将被减少。

范围

设置当信号低于阈值时增益衰减的级别。默认值为 0.06125。允许的范围是 0 到 1。将此值设置为 0 会禁用衰减,然后滤波器表现为扩展器。

threshold

如果信号上升到此级别以上,则增益衰减将被释放。默认值为 0.125。允许的范围是 0 到 1。

ratio

设置信号被衰减的比率。默认值为 2。允许的范围是 1 到 9000。

attack

设置信号必须上升到阈值以上才能停止增益衰减的毫秒数。默认值为 20 毫秒。允许的范围是 0.01 到 9000。

release

设置信号必须降到阈值以下才能再次增加衰减的毫秒数。默认值为 250 毫秒。允许的范围是 0.01 到 9000。

makeup

设置处理后信号的放大倍数。默认值为 1。允许的范围是 1 到 64。

knee

弯曲阈值周围的锐角,以更柔和地进入增益衰减。默认值为 2.828427125。允许的范围是 1 到 8。

detection

选择是使用精确信号进行检测还是使用类似 RMS 的信号。默认值为 rms。可以是 peak 或 rms。

link

选择是使用所有通道之间的平均电平还是较响亮的通道来影响衰减。默认值为 average。可以是 average 或 maximum。

level_sc

设置侧链增益。默认值为 1。范围从 0.015625 到 64。

29.106.1 命令

此滤镜支持所有上述选项作为命令

29.107 silencedetect

检测音频流中的静音。

当检测到输入音频音量小于或等于噪声容差值且持续时间大于或等于最小检测噪声持续时间时,此滤波器会记录一条消息。

打印的时间和持续时间以秒为单位表示。lavfi.silence_startlavfi.silence_start.X 元数据键设置在时间戳等于或超过检测持续时间的第一个帧上,并且它包含静音的第一个帧的时间戳。

lavfi.silence_durationlavfi.silence_duration.Xlavfi.silence_endlavfi.silence_end.X 元数据键设置在静音后的第一个帧上。如果启用了 mono,并且单独评估每个通道,则使用 .X 后缀键,其中 X 对应于通道号。

该滤镜接受以下选项

noise, n

设置噪声容差。可以用 dB(如果指定的值附加了“dB”)或幅度比率指定。默认值为 -60dB 或 0.001。

duration, d

设置通知前的静音持续时间(默认为 2 秒)。有关接受的语法,请参阅 (ffmpeg-utils)ffmpeg-utils(1) 手册中的时间持续时间部分

mono, m

单独处理每个通道,而不是组合处理。默认情况下已禁用。

29.107.1 示例

  • 检测 5 秒的静音,噪声容差为 -50dB
    silencedetect=n=-50dB:d=5
    
  • 使用 ffmpeg 的完整示例,以 0.0001 的噪声容差检测 silence.mp3 中的静音
    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
    

29.108 silenceremove

删除音频开头、中间或结尾处的静音。

该滤镜接受以下选项

start_periods

此值用于指示是否应在音频开头修剪音频。值为零表示不应从开头修剪静音。当指定非零值时,它会修剪音频,直到找到非静音。通常,当从音频开头修剪静音时,start_periods 将为 1,但可以将其增加到更高的值,以修剪所有音频,直到达到特定数量的非静音时段。默认值为 0

start_duration

指定在停止修剪音频之前必须检测到非静音的时间量。通过增加持续时间,可以将噪声突发视为静音并修剪掉。默认值为 0

start_threshold

这表示应将哪个样本值视为静音。对于数字音频,值 0 可能没问题,但对于从模拟录制的音频,您可能希望增加该值以考虑背景噪声。可以用 dB(如果指定的值附加了“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(如果指定的值附加了“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

时间戳

设置每个音频帧输出时间戳的处理模式。

写入

完整的时间戳重写,仅保留第一个输出帧的开始时间。

复制

未丢弃的帧保留与输入音频帧相同的时间戳。

默认值为 write

29.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
    

29.108.2 命令

此过滤器支持一些上述选项作为命令

29.109 sofalizer

SOFAlizer 使用头部相关传递函数 (HRTF) 在用户周围创建虚拟扬声器,以便通过耳机进行双耳收听(支持最多 9 个通道的音频格式)。 HRTF 存储在 SOFA 文件中(有关数据库,请参阅 http://www.sofacoustics.org/)。 SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。

要启用此过滤器的编译,您需要使用 --enable-libmysofa 配置 FFmpeg。

该滤镜接受以下选项

sofa

设置用于渲染的 SOFA 文件。

增益

设置应用于音频的增益。值以分贝为单位。默认为 0。

旋转

设置虚拟扬声器的旋转角度,单位为度。默认为 0。

仰角

设置虚拟扬声器的仰角,单位为度。默认为 0。

半径

设置扬声器与使用近场 HRTF 的听众之间的距离,单位为米。默认为 1。

type

设置处理类型。可以是 timefreqtime 是在时域中处理音频,速度较慢。freq 是在频域中处理音频,速度较快。默认为 freq

扬声器

设置虚拟扬声器的自定义位置。此选项的语法为: <CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都用简短的通道名称描述,后跟方位角和仰角(以度为单位)。每个虚拟扬声器描述都用 “|” 分隔。例如,要覆盖前左和前右通道位置,请使用:’speakers=FL 45 15|FR 345 15’。带有无法识别的通道名称的描述将被忽略。

lfegain

设置 LFE 通道的自定义增益。值以分贝为单位。默认为 0。

帧大小

设置自定义帧大小(以采样数为单位)。默认为 1024。允许的范围为 1024 到 96000。仅当选项 ‘type’ 设置为 freq 时才使用。

标准化

是否应在导入 SOFA 文件时对所有 IR 进行归一化。默认情况下启用。

插值

如果确切位置不匹配,是否应将最近的 IR 与相邻的 IR 进行插值。默认情况下禁用。

最小相位

在加载 SOFA 文件时对所有 IR 进行最小相位处理。默认情况下禁用。

角度步长

设置邻居搜索角度步长。仅当启用 interpolate 选项时才使用。

半径步长

设置邻居搜索半径步长。仅当启用 interpolate 选项时才使用。

29.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"
    

29.110 speechnorm

语音标准化器。

此过滤器根据阈值扩展或压缩音频样本的每个半周期(所有高于或低于零且在两个最近的过零点之间的本地样本集),以便在以下选项控制的条件下,音频达到目标峰值。

该滤镜接受以下选项

峰值, p

设置扩展目标峰值。这指定了标准化音频输入的最高允许绝对幅度级别。默认值为 0.95。允许的范围为 0.0 到 1.0。

扩展, e

设置最大扩展因子。允许的范围为 1.0 到 50.0。默认值为 2.0。此选项控制样本的最大局部半周期扩展。最大扩展将使局部峰值达到目标峰值,但永远不会超过它,并且新峰值和先前峰值之间的比率不会超过此选项值。

压缩, c

设置最大压缩因子。允许的范围为 1.0 到 50.0。默认值为 2.0。此选项控制样本的最大局部半周期压缩。仅当 threshold 选项设置为大于 0.0 的值时才使用此选项,在这种情况下,当局部峰值低于或等于 threshold 设置的值时,属于该峰值半周期的所有样本将按当前压缩因子压缩。

threshold, t

设置阈值。默认值为 0.0。允许的范围为 0.0 到 1.0。此选项指定将压缩哪些半周期样本,将扩展哪些半周期样本。任何局部峰值低于或等于此选项值的半周期样本将按当前压缩因子压缩,否则,如果大于阈值,则它们将按扩展因子扩展,以便它可以达到峰值目标值,但永远不会超过它。

提升, r

设置每个样本半周期的扩展提升量。默认值为 0.001。允许的范围为 0.0 到 1.0。这控制每个新半周期扩展因子增加的速度,直到达到 expansion 值。将此选项设置得太高可能会导致失真。

下降, f

设置每个样本半周期的压缩提升量。默认值为 0.001。允许的范围为 0.0 到 1.0。这控制每个新半周期压缩因子增加的速度,直到达到 compression 值。

通道, h

指定要过滤的通道,默认情况下将过滤所有可用通道。

反转, i

启用反向滤波,默认情况下禁用。这会反转 threshold 选项的解释。启用后,任何局部峰值低于或等于 threshold 选项的半周期样本都将扩展,否则将被压缩。

链接, l

计算应用于每个过滤通道样本的增益时链接通道,默认情况下禁用。禁用时,每个过滤通道的增益计算是独立的,否则,启用此选项时,将使用每个过滤通道所有可能增益的最小值。

均方根, m

设置扩展目标 RMS 值。这指定了标准化音频输入的最高允许 RMS 级别。默认值为 0.0,因此禁用。允许的范围为 0.0 到 1.0。

29.110.1 命令

此滤镜支持所有上述选项作为命令

29.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
    

29.111 stereotools

此过滤器具有一些方便的实用程序来管理立体声信号,用于将 M/S 立体声录音转换为 L/R 信号,同时控制参数或扩展主轨的立体声图像。

该滤镜接受以下选项

level_in

设置两个通道在滤波之前的输入电平。默认为 1。允许的范围为 0.015625 到 64。

level_out

设置两个通道在滤波之后的输出电平。默认为 1。允许的范围为 0.015625 到 64。

balance_in

设置两个通道之间的输入平衡。默认为 0。允许的范围为 -1 到 1。

balance_out

设置两个通道之间的输出平衡。默认为 0。允许的范围为 -1 到 1。

软削波

启用软削波。产生模拟失真,而不是刺耳的数字 0dB 削波。默认禁用。

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。

29.111.1 命令

此滤镜支持所有上述选项作为命令

29.111.2 示例

  • 应用卡拉 OK 效果
    stereotools=mlev=0.015625
    
  • 将 M/S 信号转换为 L/R
    "stereotools=mode=ms>lr"
    

29.112 stereowiden

此滤波器通过抑制两个声道共有的信号,并将左声道的信号延迟到右声道,反之亦然,从而增强立体声效果,扩大立体声效果。

该滤镜接受以下选项

延迟

左声道信号延迟到右声道的时间(以毫秒为单位),反之亦然。默认值为 20 毫秒。

feedback

延迟信号进入右声道的增益量,反之亦然。提供左声道在右输出中的延迟效果,反之亦然,从而产生加宽效果。默认值为 0.3。

crossfeed

将左声道交叉馈送到右声道,并反相。这有助于抑制单声道。如果值为 1,它将取消两个声道共有的所有信号。默认值为 0.3。

drymix

设置原始声道输入信号的电平。默认值为 0.8。

29.112.1 命令

此滤波器支持除了 `delay` 以外的所有上述选项,作为 命令

29.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 频段增益。

29.114 surround

应用音频环绕上混滤波器。

此滤波器允许从音频流生成多声道输出。

该滤镜接受以下选项

chl_out

设置输出声道布局。默认情况下,这是 5.1

有关所需的语法,请参见 (ffmpeg-utils)ffmpeg-utils(1) 手册中的通道布局部分

chl_in

设置输入声道布局。默认情况下,这是 stereo

有关所需的语法,请参见 (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。对于大于 0.0focus 选项值,有助于提高输出质量。默认值为 0.0。只有此范围内的值且没有边缘的值才有效。

angle

设置立体声环绕变换的角度,允许的范围为 0360。默认值为 90

focus

设置立体声环绕变换的焦点,允许的范围为 -11。默认值为 0

fc_in

设置前置中央输入音量。默认情况下,这是 1

fc_out

设置前置中央输出音量。默认情况下,这是 1

fl_in

设置前置左输入音量。默认情况下,这是 1

fl_out

设置前置左输出音量。默认情况下,这是 1

fr_in

设置前置右输入音量。默认情况下,这是 1

fr_out

设置前置右输出音量。默认情况下,这是 1

sl_in

设置侧边左输入音量。默认情况下,这是 1

sl_out

设置侧边左输出音量。默认情况下,这是 1

sr_in

设置侧边右输入音量。默认情况下,这是 1

sr_out

设置侧边右输出音量。默认情况下,这是 1

bl_in

设置后置左输入音量。默认情况下,这是 1

bl_out

设置后置左输出音量。默认情况下,这是 1

br_in

设置后置右输入音量。默认情况下,这是 1

br_out

设置后置右输出音量。默认情况下,这是 1

bc_in

设置后置中央输入音量。默认情况下,这是 1

bc_out

设置后置中央输出音量。默认情况下,这是 1

lfe_in

设置 LFE 输入音量。默认情况下,这是 1

lfe_out

设置 LFE 输出音量。默认情况下,这是 1

allx

设置所有声道在 X 轴上的立体声图像的扩展使用。允许的范围为 -115。默认情况下,此值为负 -1,因此未使用。

ally

设置所有声道在 Y 轴上的立体声图像扩展使用。允许的范围是从 -115。默认值是负数 -1,因此不使用。

fcx, flx, frx, blx, brx, slx, srx, bcx

设置每个声道在 X 轴上的立体声图像扩展使用。允许的范围是从 0.0615。默认值是 0.5

fcy, fly, fry, bly, bry, sly, sry, bcy

设置每个声道在 Y 轴上的立体声图像扩展使用。允许的范围是从 0.0615。默认值是 0.5

win_size

设置窗口大小。允许的范围是从 102465536。默认大小是 4096

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

overlap

设置窗口重叠。如果设置为 1,将选择所选窗口函数的建议重叠值。默认值为 0.5

29.115 tiltshelf

使用类似于标准高保真音调控制的双极搁架滤波器,提升或降低音频的低频,并降低或提升高频。 这也称为搁架均衡 (EQ)。

该滤镜接受以下选项

gain, g

给出 0 Hz 时的增益。其有效范围约为 -20(用于大幅削减)到 +20(用于大幅增强)。使用正增益时,请注意削波。

频率,f

设置滤波器的中心频率,因此可以用于扩展或缩小要提升或降低的频率范围。默认值为 3000 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.115.1 命令

此滤波器支持一些选项作为命令

29.116 treble, highshelf

使用类似于标准高保真音调控制的双极搁架滤波器,提升或降低音频的高音(高频)。这也称为搁架均衡 (EQ)。

该滤镜接受以下选项

gain, g

给出在 ~22 kHz 和奈奎斯特频率中较低的那个频率处的增益。其有用的范围约为 -20(用于大幅降低)到 +20(用于大幅提升)。使用正增益时请注意削波。

频率,f

设置滤波器的中心频率,因此可以用于扩展或缩小要提升或降低的频率范围。默认值为 3000 Hz。

宽度类型,t

设置指定滤波器带宽的方法。

h

赫兹

q

Q 因子

o

倍频程

s

斜率

k

千赫兹

宽度,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 处理的块大小。如果此值设置为足够高的值(高于冲激响应长度,当达到接近零的值时截断),则滤波将变为线性相位,否则如果不够大,它只会产生令人讨厌的伪影。

请注意,设置为非零值时,滤波器延迟将正好是这么多样本。

29.116.1 命令

此滤镜支持以下命令

频率,f

更改高音频率。命令的语法是:“frequency

宽度类型,t

更改高音宽度类型。命令的语法是:“width_type

宽度,w

更改高音宽度。命令的语法是:“width

gain, g

更改高音增益。命令的语法是:“gain

混合,m

更改高音混音。命令的语法是:“mix

29.117 tremolo

正弦波幅度调制。

该滤镜接受以下选项

f

调制频率,单位为赫兹。次谐波范围(20 Hz 或更低)内的调制频率将产生颤音效果。通过指定高于 20 Hz 的调制频率,此滤波器还可以用作环形调制器。范围是 0.1 - 20000.0。默认值为 5.0 Hz。

d

调制深度,以百分比表示。范围是 0.0 - 1.0。默认值为 0.5。

29.118 vibrato

正弦波相位调制。

该滤镜接受以下选项

f

调制频率,单位为赫兹。范围是 0.1 - 20000.0。默认值为 5.0 Hz。

d

调制深度,以百分比表示。范围是 0.0 - 1.0。默认值为 0.5。

29.119 virtualbass

应用音频虚拟低音滤波器。

此滤波器接受立体声输入,并生成带有 LFE (2.1) 通道输出的立体声。新生成的 LFE 通道具有增强的虚拟低音,该低音最初来自两个立体声通道。此滤波器输出前置左声道和前置右声道,与立体声输入中的可用声道相同。

该滤镜接受以下选项

cutoff

设置虚拟低音截止频率。默认值为 250 Hz。允许的范围是从 100 到 500 Hz。

强度

设置虚拟低音强度。允许的范围是从 0.5 到 3。默认值为 3。

29.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 边数据,忽略其内容(默认)。

忽略

忽略 ReplayGain 边数据,但将其保留在帧中。

轨道

如果存在,则优先使用轨道增益。

专辑

如果存在,则优先使用专辑增益。

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。

29.120.1 命令

此滤镜支持以下命令

音量

修改音量表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

29.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
    

29.121 volumedetect

检测输入视频的音量。

该过滤器没有参数。它仅支持 16 位有符号整数采样,因此必要时将转换输入。当输入流到达末尾时,有关音量的统计信息将打印在日志中。

特别是,它将显示平均音量(均方根)、最大音量(按每个样本计算)以及记录的音量值直方图的开头(从最大值到累积的 1/1000 的样本)。

所有音量都以相对于最大 PCM 值的分贝表示。

29.121.1 示例

这是输出的摘录

[Parsed_volumedetect_0  0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0  0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0  0xa23120] histogram_4db: 6
[Parsed_volumedetect_0  0xa23120] histogram_5db: 62
[Parsed_volumedetect_0  0xa23120] histogram_6db: 286
[Parsed_volumedetect_0  0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0  0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0  0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0  0xa23120] histogram_10db: 8409

这意味着

  • 平均平方能量约为 -27 分贝,即 10^-2.7。
  • 最大的样本位于 -4 分贝,或者更准确地说,在 -4 分贝和 -5 分贝之间。
  • 有 6 个样本位于 -4 分贝,62 个位于 -5 分贝,286 个位于 -6 分贝,依此类推。

换句话说,将音量提高 +4 分贝不会导致任何削波,将其提高 +5 分贝会导致 6 个样本削波,依此类推。

30 音频源

以下是当前可用的音频源的说明。

30.1 abuffer

缓冲音频帧,并使它们可用于过滤器链。

此源主要用于编程使用,特别是通过 libavfilter/buffersrc.h 中定义的接口。

它接受以下参数

time_base

将用于提交帧的时间戳的时基。它必须是浮点数或 numerator/denominator 形式。

sample_rate

传入音频缓冲区的采样率。

sample_fmt

传入音频缓冲区的采样格式。可以是采样格式名称,也可以是来自 libavutil/samplefmt.h 中枚举 AVSampleFormat 的相应整数表示形式

channel_layout

传入音频缓冲区的声道布局。可以是来自 libavutil/channel_layout.c 中的 channel_layout_map 的声道布局名称,也可以是来自 libavutil/channel_layout.h 中的 AV_CH_LAYOUT_* 宏的相应整数表示形式

channels

传入音频缓冲区的通道数。如果同时指定了 channelschannel_layout,则它们必须一致。

30.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

30.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

采样率

30.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)"
    

30.3 afdelaysrc

生成分数延迟 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤镜接受以下选项

延迟,d

设置分数延迟。默认为 0。

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的采样数。默认为 1024。

抽头,t

设置输出音频流中的滤波器系数数量。默认值为 0。

channel_layout, c

指定通道布局,可以是表示通道布局的字符串。 channel_layout 的默认值为“stereo”。

30.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:最小相位。默认设置为最小相位滤波器。

30.5 afirsrc

使用频率采样方法生成 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤镜接受以下选项

抽头,t

设置输出音频流中的滤波器系数数量。默认值为 1025。

频率,f

设置从中设置幅度和相位的频率点。这必须是非递减顺序,第一个元素必须为 0,最后一个元素必须为 1。元素以空格分隔。

幅度,m

frequency 设置的每个频率点设置幅度值。值的数量必须与频率点的数量相同。值以空格分隔。

相位,p

frequency 设置的每个频率点设置相位值。值的数量必须与频率点的数量相同。值以空格分隔。

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的采样数。默认为 1024。

窗口函数,w

设置窗口函数。默认为 blackman。

30.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) 手册中的时间持续时间部分

如果未指定,或者表达的持续时间为负,则音频将无限期生成。

30.6.1 示例

  • 将采样率设置为 48000 Hz,并将通道布局设置为 AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更明显的语法执行相同的操作
    anullsrc=r=48000:cl=mono
    

所有参数都需要显式定义。

30.7 flite

使用 libflite 库合成语音。

要启用此滤波器的编译,您需要使用 --enable-libflite 配置 FFmpeg。

请注意,2.0 之前的 flite 库版本不是线程安全的。

该滤镜接受以下选项

list_voices

如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。

nb_samples, n

设置每帧的最大采样数。默认值为 512。

textfile

设置包含要说话的文本的文件名。

text

设置要说话的文本。

语音,v

设置用于语音合成的语音。默认值为 kal。另请参阅 list_voices 选项。

30.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/

30.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。

30.8.1 示例

  • 生成 60 秒的粉色噪声,采样率为 44.1 kHz,幅度为 0.5
    anoisesrc=d=60:c=pink:r=44100:a=0.5
    

30.9 hilbert

生成奇数抽头希尔伯特变换 FIR 系数。

生成的流可以与 afir 滤波器一起使用,将信号相移 90 度。

这在许多矩阵编码方案和用于解析信号生成中。该过程通常被写成乘以 i (或 j),即虚数单位。

该滤镜接受以下选项

sample_rate, s

设置采样率,默认为 44100。

抽头,t

设置 FIR 滤波器的长度,默认为 22051。

nb_samples, n

设置每个帧的样本数。

窗口函数,w

设置生成 FIR 系数时要使用的窗口函数。

30.10 sinc

生成一个 sinc Kaiser 加窗的低通、高通、带通或带阻 FIR 系数。

生成的流可以与 afir 滤波器一起使用,以过滤音频信号。

该滤镜接受以下选项

sample_rate, r

设置采样率,默认为 44100。

nb_samples, n

设置每帧的采样数。默认为 1024。

hp

设置高通频率。默认为 0。

lp

设置低通频率。默认为 0。如果高通频率低于低通频率,且低通频率高于 0,则滤波器将创建带通滤波器系数,否则创建带阻滤波器系数。

phase

设置滤波器相位响应。默认为 50。允许的范围为 0 到 100。

beta

设置 Kaiser 窗口 beta。

att

设置阻带衰减。默认为 120dB,允许范围为 40 到 180 dB。

round

启用舍入,默认禁用。

hptaps

设置高通滤波器的抽头数。

lptaps

设置低通滤波器的抽头数。

30.11 sine

生成一个由幅度为 1/8 的正弦波组成的音频信号。

音频信号是位精确的。

该滤镜接受以下选项

频率,f

设置载波频率。默认为 440 Hz。

蜂鸣因子,b

启用每秒周期性蜂鸣,频率为 蜂鸣因子 倍的载波频率。默认为 0,表示禁用蜂鸣。

sample_rate, r

指定采样率,默认为 44100。

duration, d

指定生成的音频流的持续时间。

samples_per_frame

设置每个输出帧的样本数。

表达式可以包含以下常量

n

输出音频帧的(顺序)编号,从 0 开始。

pts

输出音频帧的 PTS(演示时间戳),以 TB 单位表示。

t

输出音频帧的 PTS,以秒为单位表示。

TB

输出音频帧的时间基准。

默认为 1024

30.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)))'
    

31 音频接收器

以下是对当前可用音频接收器的描述。

31.1 abuffersink

缓冲音频帧,并使其在过滤器链末端可用。

此接收器主要用于编程使用,特别是通过 libavfilter/buffersink.h 中定义的接口或选项系统。

它接受指向 AVABufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给 avfilter_init_filter 进行初始化。

31.2 anullsink

空音频接收器;对输入音频绝对不执行任何操作。它主要用作模板,并用于分析/调试工具。

32 视频滤镜

配置 FFmpeg 构建时,可以使用 --disable-filters 禁用任何现有过滤器。配置输出将显示构建中包含的视频过滤器。

以下是对当前可用视频过滤器的描述。

32.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,则在添加新区域之前,删除在帧上标记的任何现有感兴趣区域。

32.1.1 示例

  • 将帧的中心四分之一标记为感兴趣。
    addroi=iw/4:ih/4:iw/2:ih/2:-1/10
    
  • 将帧左边缘的 100 像素宽的区域标记为非常不感兴趣(以比帧其余部分低得多的质量进行编码)。
    addroi=0:0:100:ih:+1/5
    

32.2 alphaextract

从输入中提取 alpha 分量作为灰度视频。这对于 alphamerge 过滤器尤其有用。

32.3 alphamerge

用第二个输入的灰度值添加或替换主输入的 alpha 分量。这旨在与 alphaextract 一起使用,以允许传输或存储具有 alpha 的帧序列,该格式不支持 alpha 通道。

例如,要从普通的 YUV 编码视频和使用 alphaextract 创建的单独视频中重建完整帧,您可以使用

movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]

32.4 amplify

放大当前像素和同一像素位置的相邻帧的像素之间的差异。

此滤波器接受以下选项

半径

设置帧半径。默认值为 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。

32.4.1 命令

此过滤器支持与同名选项对应的以下命令

factor
threshold
tolerance
low
high
planes

32.5 ass

字幕过滤器相同,只是它不需要 libavcodec 和 libavformat 才能工作。另一方面,它仅限于 ASS(高级字幕)字幕文件。

除了字幕过滤器中的常用选项之外,此过滤器还接受以下选项

shaping

设置整形引擎

可用的值有

auto

默认的 libass 整形引擎,它是最好的可用引擎。

simple

快速的、与字体无关的整形器,只能进行替换

complex

使用 OpenType 进行替换和定位的较慢整形器

默认值为 auto

32.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 将有效地禁用过滤。

32.6.1 命令

此过滤器支持与选项相同的命令,除了选项 s。该命令接受相应选项的相同语法。

32.7 avgblur

应用平均模糊滤镜。

该滤镜接受以下选项

sizeX

设置水平半径大小。

planes

设置要过滤的平面。默认情况下,会过滤所有平面。

sizeY

设置垂直半径大小,如果为零,则与 sizeX 相同。默认值为 0

32.7.1 命令

此过滤器支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.8 backgroundkey

将静态背景转换为透明。

该滤波器接受以下选项

threshold

场景变化检测的阈值。

similarity

与背景的相似度百分比。

blend

设置不相似像素的混合量。

32.8.1 命令

此滤镜支持所有上述选项作为命令

32.9 bbox

计算输入帧亮度平面中非黑色像素的边界框。

此过滤器计算包含所有亮度值大于允许的最小值的像素的边界框。描述边界框的参数打印在过滤器日志中。

该滤波器接受以下选项

min_val

设置最小亮度值。默认值为 16

32.9.1 命令

此滤镜支持所有上述选项作为命令

32.10 bilateral

应用双边滤波器,在保留边缘的同时进行空间平滑。

该滤镜接受以下选项

sigmaS

设置高斯函数的 sigma 值,以计算空间权重。允许的范围为 0 到 512。默认值为 0.1。

sigmaR

设置高斯函数的 sigma 值,以计算范围权重。允许的范围为 0 到 1。默认值为 0.1。

planes

设置要过滤的平面。默认仅为第一个。

32.10.1 命令

此滤镜支持所有上述选项作为命令

32.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。

32.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
    

32.12 bitplanenoise

显示并测量位平面噪声。

该滤镜接受以下选项

bitplane

设置要分析的平面。默认值为 1

filter

从上面设置的 bitplane 中滤除噪点像素。默认情况下禁用。

32.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

32.14 blackframe

检测(几乎)完全黑色的帧。可用于检测章节转换或广告。输出行包含检测到的帧的帧号、黑度百分比、如果已知则为文件中的位置(否则为 -1)以及以秒为单位的时间戳。

为了显示输出行,您需要将日志级别至少设置为 AV_LOG_INFO 值。

此滤镜导出帧元数据 lavfi.blackframe.pblack。该值表示图像中低于阈值的像素百分比。

它接受以下参数

amount

必须低于阈值的像素百分比;默认为 98

threshold, thresh

像素值被视为黑色的阈值;默认为 32

32.15 blend

将两个视频帧混合在一起。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出也会终止。

tblend(时间混合)滤镜从一个单一流中获取两个连续的帧,并输出通过将新帧混合在旧帧之上获得的结果。

下面是接受选项的说明。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

设置特定像素分量的混合模式,或在 all_mode 的情况下设置所有像素分量的混合模式。默认值为 normal

组件模式的可用值有

addition
and
average
bleach
burn
darken
difference
divide
dodge
exclusion
extremity
freeze
geometric
glow
grainextract
grainmerge
hardlight
hardmix
hardoverlay
harmonic
heat
interpolate
lighten
linearlight
multiply
multiply128
negation
normal
or
overlay
phoenix
pinlight
reflect
screen
softdifference
softlight
stain
subtract
vividlight
xor
c0_opacity
c1_opacity
c2_opacity
c3_opacity
all_opacity

设置特定像素分量或 all_opacity 情况下的所有像素分量的混合不透明度。仅与像素分量混合模式结合使用。

c0_expr
c1_expr
c2_expr
c3_expr
all_expr

设置特定像素分量或 all_expr 情况下的所有像素分量的混合表达式。请注意,如果设置了相关的模式选项,则会忽略它们。

表达式可以使用以下变量

N

已过滤帧的序列号,从 0 开始。

X
Y

当前样本的坐标

W
H

当前已过滤平面的宽度和高度

SW
SH

被过滤平面的宽度和高度比例。它是当前平面的尺寸与亮度平面的尺寸之间的比率,例如,对于 yuv420p 帧,亮度平面的值为 1,1,色度平面的值为 0.5,0.5

T

当前帧的时间,以秒为单位表示。

TOP, A

第一个视频帧(顶层)中当前位置的像素分量值。

BOTTOM, B

第二个视频帧(底层)中当前位置的像素分量值。

blend 滤镜还支持 framesync 选项。

32.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
    

32.15.2 命令

此滤镜支持与选项相同的 命令

32.16 blockdetect

确定帧的块状感,而不更改输入帧。

基于 Remco Muijs 和 Ihor Kirenko 的研究:“用于自适应视频处理的无参考块效应度量”。2005 年第 13 届欧洲信号处理会议。

该滤镜接受以下选项

period_min
period_max

设置用于确定像素网格(周期)的最小值和最大值。默认值为 [3,24]。

planes

设置要过滤的平面。默认仅为第一个。

32.16.1 示例

  • 确定第一个平面的块状感,并在 [8,32] 内搜索周期
    blockdetect=period_min=8:period_max=32:planes=1
    

32.17 blurdetect

确定帧的模糊度,而不更改输入帧。

基于 Marziliano、Pina 等人的研究。“无参考感知模糊度量”。允许基于块的缩写。

该滤镜接受以下选项

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过与低阈值选择的“弱”边缘像素的 8 连通性进行连接。

lowhigh 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

半径

定义在边缘像素周围搜索局部最大值的半径。

block_pct

仅确定给定百分比的最重要块的模糊度。

block_width

确定宽度为 block_width 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且无论 block_height 如何,整个图像都将作为一个整体进行处理。

block_height

确定高度为 block_height 的块的模糊度。如果设置为小于 1 的任何值,则不使用块,并且无论 block_width 如何,整个图像都将作为一个整体进行处理。

planes

设置要过滤的平面。默认仅为第一个。

32.17.1 示例

  • 确定 80% 最重要的 32x32 块的模糊度
    blurdetect=block_width=32:block_height=32:block_pct=80
    

32.18 bm3d

使用 Block-Matching 3D 算法对帧进行去噪。

此滤镜接受以下选项。

sigma

设置去噪强度。默认值为 1。允许的范围是 0 到 999.9。去噪算法对 sigma 非常敏感,因此请根据源调整它。

block

设置局部补丁大小。这以 2D 设置尺寸。

bstep

设置处理块的滑动步长。默认值为 4。允许的范围是 1 到 64。较小的值允许处理更多参考块,速度较慢。

group

设置第 3 维相似块的最大数量。默认值为 1。当设置为 1 时,不进行块匹配。较大的值允许单个组中有更多块。允许的范围是 1 到 256。

范围

设置搜索块匹配的半径。默认值为 9。允许的范围是 1 到 INT32_MAX。

mstep

设置块匹配的两个搜索位置之间的步长。默认值为 1。允许的范围是 1 到 64。较小的值速度较慢。

thmse

设置块匹配的均方误差阈值。有效范围为 0 到 INT32_MAX。

hdthr

设置 3D 变换域中硬阈值的阈值参数。较大的值会导致频域中更强的硬阈值滤波。

estim

设置滤波估计模式。可以是 basicfinal。默认值为 basic

ref

如果启用,则滤镜将使用第 2 个流进行块匹配。对于 estim 选项的 basic 值,默认情况下禁用,如果 estim 的值为 final,则始终启用。

planes

设置要过滤的平面。默认情况下为所有可用的平面,但 alpha 除外。

32.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
    

32.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

w, h

输入图像的宽度和高度(以像素为单位)。
ch

cw, ch

输入色度图像的宽度和高度(以像素为单位)。
hsub

vsub

luma_power,lp
chroma_power,cp
alpha_power,ap

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

指定将盒状模糊滤镜应用于相应平面的次数。

luma_power 的默认值为 2。如果未指定,则 chroma_poweralpha_power 默认使用为 luma_power 设置的相应值。

32.19.1 示例

  • 值为 0 将禁用效果。
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • 应用一个亮度、色度和 alpha 半径都设置为 2 的盒状模糊滤镜。
    boxblur=2:1:cr=0:ar=0
    
  • 将亮度半径设置为 2,alpha 和色度半径设置为 0。
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

32.20 bwdif

将亮度半径和色度半径设置为视频尺寸的一部分。

对输入视频进行反交错处理(“bwdif” 代表 “Bob Weaver 反交错滤镜”)。

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

要采用的反交错模式。它接受以下值之一:

0, send_frame

为每个帧输出一个帧。

1, send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入交错视频假定的图像场奇偶性。它接受以下值之一:

0, tff

假定顶场优先。

1, bff

假定底场优先。

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0, all

对所有帧进行反交错处理。

1, interlaced

仅对标记为交错的帧进行反交错处理。

32.21 bwdif_cuda

默认值为 all

它接受以下参数

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

要采用的反交错模式。它接受以下值之一:

0, send_frame

为每个帧输出一个帧。

1, send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入交错视频假定的图像场奇偶性。它接受以下值之一:

0, tff

假定顶场优先。

1, bff

假定底场优先。

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0, all

对所有帧进行反交错处理。

1, interlaced

仅对标记为交错的帧进行反交错处理。

32.22 ccrepack

使用 bwdif 算法对输入视频进行反交错处理,但使用 CUDA 实现,以便它可以作为使用 nvdec 和/或 nvenc 的 GPU 加速管道的一部分工作。

重新打包 CEA-708 字幕边数据

32.23 cas

此滤镜修复了商业编码器中看到的与上游格式错误的 CEA-708 有效负载相关的各种问题,特别是错误的元组数量(目标 FPS 的 cc_count 错误)以及错误的元组顺序(即,CEA-608 元组不在有效负载的第一个条目中)。

该滤镜接受以下选项

强度

对视频流应用对比度自适应锐化滤镜。

planes

设置锐化强度。默认值为 0。

32.23.1 命令

此滤镜支持与选项相同的 命令

32.24 chromahold

设置要过滤的平面。默认值是过滤除 alpha 平面之外的所有平面。

该滤镜接受以下选项

颜色

删除除特定颜色之外的所有颜色的所有颜色信息。

similarity

不会被中性色度替换的颜色。

blend

与上述颜色的相似度百分比。0.01 仅匹配精确的关键颜色,而 1.0 匹配所有颜色。

混合百分比。0.0 使像素完全为灰色,或者根本不为灰色。较高的值会导致更多保留的颜色。

yuv

表示传递的颜色已经是 YUV 而不是 RGB。

32.24.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.25 chromakey

此滤镜支持与选项相同的 命令。该命令接受与相应选项相同的语法。

该滤镜接受以下选项

颜色

YUV 色彩空间颜色/色度键控。

similarity

将被透明度替换的颜色。

与关键颜色的相似度百分比。

blend

0.01 仅匹配精确的关键颜色,而 1.0 匹配所有颜色。

混合百分比。

0.0 使像素完全透明,或者根本不透明。

混合百分比。0.0 使像素完全为灰色,或者根本不为灰色。较高的值会导致更多保留的颜色。

yuv

表示传递的颜色已经是 YUV 而不是 RGB。

32.25.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.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
    

32.26 chromakey_cuda

在静态黑色背景之上覆盖一个绿屏视频。

CUDA 加速的 YUV 色彩空间颜色/色度键控。

32.26.1 示例

  • 此滤镜的工作方式与普通的色度键控滤镜类似,但在 CUDA 帧上运行。有关更多详细信息和参数,请参阅 chromakey
    ./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
    

32.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

差的平方。

32.27.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

32.28 chromashift

默认距离类型为曼哈顿距离。

该滤镜接受以下选项

水平和/或垂直移动色度像素。

cbh

设置水平移动色度蓝色的量。

cbv

设置垂直移动色度蓝色的量。

crh

设置水平移动色度红色的量。

crv

设置垂直移动色度红色的量。

edge

32.28.1 命令

此滤镜支持所有上述选项作为命令

32.29 ciescope

设置边缘模式,可以是 smear(默认)或 warp

该滤镜接受以下选项

显示 CIE 色彩图,并将像素叠加在其上。

system

设置颜色系统。
ntsc, 470m
ebu, 470bg
smpte
240m
apple
widergb
cie1931
rec709, hdtv
uhdtv, rec2020
dcip3

cie

设置 CIE 系统。
xyy
ucs
luv

gamuts

有关可用值,请参阅 system 选项。

size, s

设置色域示波器的大小,默认设置为 512。

intensity, i

设置用于将输入像素值映射到 CIE 色品图的强度。

contrast

设置用于绘制超出活动颜色系统色域的“舌头”颜色的对比度。

corrgamma

校正示波器上显示的伽玛值,默认启用。

showwhite

在 CIE 色品图上显示白点,默认禁用。

gamma

设置输入伽玛值。仅用于 XYZ 输入色彩空间。

fill

使用 CIE 颜色填充。默认启用。

32.30 codecview

可视化某些编解码器导出的信息。

一些编解码器可以通过使用边数据或其他方式,通过帧导出信息。例如,一些基于 MPEG 的编解码器通过编解码器 flags2 选项中的 export_mvs 标志导出运动矢量。

该滤波器接受以下选项

block

使用亮度平面显示块分区结构。

mv

设置要可视化的运动矢量。

mv 的可用标志为

pf

P 帧的前向预测 MV

bf

B 帧的前向预测 MV

bb

B 帧的后向预测 MV

qp

使用色度平面显示量化参数。

mv_type, mvt

设置要可视化的运动矢量类型。包括来自所有帧的 MV,除非由 frame_type 选项指定。

mv_type 的可用标志为

fp

前向预测 MV

bp

后向预测 MV

frame_type, ft

设置要可视化运动矢量的帧类型。

frame_type 的可用标志为

if

帧内编码帧 (I 帧)

pf

预测帧 (P 帧)

bf

双向预测帧 (B 帧)

32.30.1 示例

  • 使用 ffplay 可视化所有帧的前向预测 MV
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 使用 ffplay 可视化 P 帧和 B 帧的多方向 MV
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

32.31 colorbalance

修改输入帧的原色(红色、绿色和蓝色)强度。

该滤镜允许在红色-青色、绿色-洋红色或蓝色-黄色平衡的阴影、中间调或高光区域中调整输入帧。

正调整值将平衡移向原色,负值移向补色。

该滤镜接受以下选项

rs
gs
bs

调整红色、绿色和蓝色阴影(最暗像素)。

rm
gm
bm

调整红色、绿色和蓝色中间调(中等像素)。

rh
gh
bh

调整红色、绿色和蓝色高光(最亮像素)。

选项允许的范围是 [-1.0, 1.0]。默认值为 0

pl

在更改色彩平衡时保持亮度。默认禁用。

32.31.1 示例

  • 向阴影添加红色色偏
    colorbalance=rs=.3
    

32.31.2 命令

此滤镜支持所有上述选项作为命令

32.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。

32.32.1 命令

此滤镜支持所有上述选项作为命令

32.33 colorcorrect

选择性地调整黑色和白色的颜色白平衡。此滤镜在 YUV 色彩空间中运行。

该滤镜接受以下选项

rl

设置红色阴影点。允许范围为 -1.0 到 1.0。默认值为 0。

bl

设置蓝色阴影点。允许范围为 -1.0 到 1.0。默认值为 0。

rh

设置红色高光点。允许范围为 -1.0 到 1.0。默认值为 0。

bh

设置蓝色高光点。允许范围为 -1.0 到 1.0。默认值为 0。

saturation

设置饱和度量。允许范围为 -3.0 到 3.0。默认值为 1。

analyze

如果设置为除 manual 之外的任何值,它将分析每一帧,并使用导出的参数来过滤输出帧。

可能的值为

manual
average
minmax
median

默认值为 manual

32.33.1 命令

此滤镜支持所有上述选项作为命令

32.34 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此滤镜通过添加与同一像素的其他通道相关的值来修改颜色通道。例如,如果要修改的值是红色,则输出值将为

red=red*rr + blue*rb + green*rg + alpha*ra

该滤镜接受以下选项

rr
rg
rb
ra

调整输入红色、绿色、蓝色和 alpha 通道对输出红色通道的贡献。默认情况下,rr1rgrbra0

gr
gg
gb
ga

调整输入红色、绿色、蓝色和 alpha 通道对输出绿色通道的贡献。默认情况下,gg1grgbga0

br
bg
bb
ba

调整输入红色、绿色、蓝色和 alpha 通道对输出蓝色通道的贡献。默认情况下,bb1brbgba0

ar
ag
ab
aa

调整输入红色、绿色、蓝色和 alpha 通道对输出 alpha 通道的贡献。默认情况下,aa1aragab0

选项允许的范围为 [-2.0, 2.0]

pc

设置保留颜色模式。接受的值为

none

禁用颜色保留,这是默认设置。

lum

保留亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的和值。

nrm

保留 RGB 三元组的归一化值。

pwr

保留 RGB 三元组的幂值。

pa

设置更改颜色时保留的颜色量。允许范围为 [0.0, 1.0]。默认值为 0.0,因此禁用。

32.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
    

32.34.2 命令

此滤镜支持所有上述选项作为命令

32.35 colorize

在视频流上叠加纯色。

该滤镜接受以下选项

hue

设置颜色色调。允许范围为 0 到 360。默认值为 0。

saturation

设置颜色饱和度。允许范围为 0 到 1。默认值为 0.5。

lightness

设置颜色亮度。允许范围为 0 到 1。默认值为 0.5。

mix

设置源亮度的混合。默认设置为 1.0。允许范围为 0.0 到 1.0。

32.35.1 命令

此滤镜支持所有上述选项作为命令

32.36 colorkey

RGB 色彩空间颜色键控。此滤镜通过将每个落在关键颜色相似度半径内的像素的 alpha 分量设置为 0 来对 8 位 RGB 格式帧进行操作。相似度半径之外的像素的 alpha 值取决于混合选项的值。

该滤镜接受以下选项

颜色

设置 alpha 将设置为 0 (完全透明) 的颜色。请参阅 ffmpeg-utils 手册中的“Color”部分。默认值为 black

similarity

设置其他颜色也具有完全透明度的关键颜色半径。计算出的距离与关键颜色的 RGB 值与像素颜色之间在 3D 空间中的单位分数距离相关。范围是 0.01 到 1.0。0.01 与精确关键颜色周围非常小的半径内的颜色匹配,而 1.0 与所有颜色匹配。默认值为 0.01

blend

设置如何计算落在相似度半径之外的像素的 alpha 值。0.0 使像素完全透明或完全不透明。较高的值会导致半透明像素,像素颜色与关键颜色越相似,透明度越高。范围是 0.0 到 1.0。默认值为 0.0

32.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
    

32.36.2 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.37 colorhold

删除除特定颜色之外的所有 RGB 颜色的所有颜色信息。

该滤镜接受以下选项

颜色

不会被替换为中性灰色的颜色。

similarity

不会被中性色度替换的颜色。

blend

混合百分比。0.0 使像素完全灰化。较高的值会保留更多的颜色。

32.37.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.38 colorlevels

使用色阶调整视频输入帧。

该滤镜接受以下选项

红色最小值
绿色最小值
蓝色最小值
Alpha 最小值

调整红色、绿色、蓝色和 Alpha 输入黑点。选项的允许范围为 [-1.0, 1.0]。默认值为 0

红色最大值
绿色最大值
蓝色最大值
Alpha 最大值

调整红色、绿色、蓝色和 Alpha 输入白点。选项的允许范围为 [-1.0, 1.0]。默认值为 1

输入色阶用于提亮高光(亮色调)、加深阴影(暗色调)以及更改亮暗色调的平衡。

红色输出最小值
绿色输出最小值
蓝色输出最小值
Alpha 输出最小值

调整红色、绿色、蓝色和 Alpha 输出黑点。选项的允许范围为 [0, 1.0]。默认值为 0

红色输出最大值
绿色输出最大值
蓝色输出最大值
Alpha 输出最大值

调整红色、绿色、蓝色和 Alpha 输出白点。选项的允许范围为 [0, 1.0]。默认值为 1

输出色阶允许手动选择受限的输出色阶范围。

保留

设置保留颜色模式。接受的值为

none

禁用颜色保留,这是默认设置。

lum

保留亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的和值。

nrm

保留 RGB 三元组的归一化值。

pwr

保留 RGB 三元组的幂值。

32.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
    

32.38.2 命令

此滤镜支持所有上述选项作为命令

32.39 colormap

将自定义颜色映射应用于视频流。

此滤镜需要三个输入视频流。第一个流是要被过滤掉的视频流。第二个和第三个视频流指定源颜色到目标颜色映射的颜色块。

该滤镜接受以下选项

色块大小

设置源视频流和目标视频流的色块大小(以像素为单位)。

色块数量

设置源视频流和目标视频流中使用的最大色块数量。默认值为附加视频流中可用的色块数量。允许的最大色块数量为 64

type

设置用于目标颜色的调整。可以是 relativeabsolute。默认值为 absolute

内核

设置用于测量映射颜色之间颜色差异的内核。

接受的值为

绝对差。
weuclidean

默认值为 euclidean

32.40 colormatrix

转换颜色矩阵。

该滤镜接受以下选项

目标

指定源颜色矩阵和目标颜色矩阵。必须同时指定两个值。

接受的值为

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

32.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

空间

指定输出色彩空间。

接受的值为

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

传递特性

指定输出传递特性。

接受的值为

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

原色

指定输出颜色原色。

接受的值为

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

film

电影

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22 荧光粉

范围

指定输出颜色范围。

接受的值为

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(完整)范围

jpeg

JPEG(完整)范围

format

指定输出颜色格式。

接受的值为

yuv420p

YUV 4:2:0 平面 8 位

yuv420p10

YUV 4:2:0 平面 10 位

yuv420p12

YUV 4:2:0 平面 12 位

yuv422p

YUV 4:2:2 平面 8 位

yuv422p10

YUV 4:2:2 平面 10 位

yuv422p12

YUV 4:2:2 平面 12 位

yuv444p

YUV 4:4:4 平面 8 位

yuv444p10

YUV 4:4:4 平面 10 位

yuv444p12

YUV 4:4:4 平面 12 位

快速

执行快速转换,跳过伽玛/原色校正。这将大大减少 CPU 占用,但数学上是不正确的。要获得与 colormatrix 滤镜产生的输出兼容的输出,请使用 fast=1。

抖动

指定抖动模式。

接受的值为

none

无抖动

fsb

Floyd-Steinberg 抖动

白点自适应

白点自适应模式。

接受的值为

bradford

Bradford 白点自适应

vonkries

von Kries 白点自适应

identity

恒等白点自适应(即无白点自适应)

全部输入

一次性覆盖所有输入属性。与 全部 相同的接受值。

输入空间

覆盖输入色彩空间。与 空间 相同的接受值。

输入原色

覆盖输入颜色原色。与 原色 相同的接受值。

输入传递特性

覆盖输入传递特性。与 传递特性 相同的接受值。

输入范围

覆盖输入颜色范围。与 范围 相同的接受值。

此滤镜将传递特性、色彩空间和颜色原色转换为指定的用户值。如果未指定,输出值将设置为基于“全部”属性的默认值。如果也未指定该属性,则滤镜将记录错误。输出颜色范围和格式默认为与输入颜色范围和格式相同的值。输入传递特性、色彩空间、颜色原色和颜色范围应在输入数据上设置。如果缺少任何这些,则滤镜将记录错误,并且不会进行任何转换。

例如,要将输入转换为 SMPTE-240M,请使用以下命令

colorspace=smpte240m

32.42 colorspace_cuda

使用 CUDA 加速实现的色彩空间滤镜。

与软件色彩空间滤镜相比,它在功能上绝不是完整的,并且目前仅支持 jpeg/完整范围和 mpeg/有限范围之间的颜色范围转换。

该滤镜接受以下选项

范围

指定输出颜色范围。

接受的值为

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(完整)范围

jpeg

JPEG(完整)范围

32.43 colortemperature

调整视频中的色温,以模拟环境色温的变化。

该滤镜接受以下选项

色温

以开尔文为单位设置温度。允许范围为 1000 到 40000。默认值为 6500 K。

mix

设置与滤波后输出的混合。允许范围为 0 到 1。默认值为 1。

pl

设置保留亮度的量。允许范围为 0 到 1。默认值为 0。

32.43.1 命令

此滤镜支持与选项相同的 命令

32.44 convolution

应用 3x3、5x5、7x7 或水平/垂直最多 49 个元素的卷积。

该滤镜接受以下选项

0m
1m
2m
3m

为每个平面设置矩阵。矩阵是在 square 模式下由 9、25 或 49 个有符号整数组成的序列,在 row 模式下由 1 到 49 个奇数个有符号整数组成的序列。

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面设置计算值的乘数。如果未设置或为 0,则它将是所有矩阵元素之和的倒数。

0bias
1bias
2bias
3bias

为每个平面设置偏差。此值将添加到乘法结果中。用于使整个图像变亮或变暗。默认值为 0.0。

0模式
1模式
2模式
3模式

为每个平面设置矩阵模式。可以是 squarerowcolumn。默认值为 square

32.44.1 命令

此滤镜支持所有上述选项作为命令

32.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"
    

32.45 convolve

使用第二个流作为脉冲,在频域中应用视频流的 2D 卷积。

该滤镜接受以下选项

planes

设置要处理的平面。

脉冲

设置将处理哪些脉冲视频帧,可以是 firstall。默认值为 all

convolve 滤镜还支持 framesync 选项。

32.46 copy

将输入视频源原封不动地复制到输出。这主要用于测试目的。

32.47 coreimage

使用 Apple 的 CoreImage API 在 OSX 上进行 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 视频源可用于生成直接馈送到滤镜链的输入图像。通过使用它,不需要通过其他视频源或输入视频提供输入图像。

32.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
    

32.48 corr

获取两个输入视频之间的相关性。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它假设两个输入具有相同数量的帧,这些帧将逐一进行比较。

每个分量、平均值、最小值和最大值的相关性将通过日志系统打印。

该滤镜将每帧计算的相关性存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -

32.49 cover_rect

覆盖矩形对象

它接受以下选项

cover

可选的封面图像的文件路径,需要采用 yuv420 格式。

mode

设置覆盖模式。

它接受以下值

cover

使用提供的图像覆盖它

blur

通过内插周围的像素来覆盖它

默认值为 blur

32.49.1 示例

  • 使用 ffmpeg 通过给定视频的提供的图像覆盖矩形对象
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    

32.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

水平和垂直色度子采样值。例如,对于像素格式“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

32.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)
    

32.50.2 命令

此滤镜支持以下命令

w, out_w
h, out_h
x
y

设置输出视频的宽度/高度以及在输入视频中的水平/垂直位置。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.51 cropdetect

自动检测裁剪大小。

它会计算必要的裁剪参数,并通过日志系统打印推荐的参数。根据 mode,检测到的尺寸对应于输入视频的非黑色区域或视频区域。

它接受以下参数

mode

根据 mode,裁剪检测基于周围像素的纯黑色值或运动矢量和边缘像素的组合。

black

检测播放视频周围的黑色像素。要进行精细控制,请使用 limit 选项。

mvedges

通过视频内部的运动矢量并扫描通常形成播放视频边界的边缘像素来检测播放的视频。

限幅

设置更高的黑色值阈值,可以可选地指定从无 (0) 到全部 (8 位格式为 255)。大于设定值的强度值被认为是是非黑色的。默认为 24。您还可以指定一个介于 0.0 和 1.0 之间的值,该值将根据像素格式的位深度进行缩放。

round

宽度/高度应能被整除的值。默认为 16。偏移量会自动调整以使视频居中。使用 2 仅获得偶数维度(4:2:2 视频需要)。当编码到大多数视频编解码器时,16 是最佳选择。

跳过

设置跳过评估的初始帧数。默认为 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

32.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 -
    

32.51.2 命令

此滤镜支持以下命令

限幅

该命令接受相应选项的相同语法。如果指定的表达式无效,则会保留其当前值。

32.52 cue

延迟视频滤波,直到给定的挂钟时间戳。过滤器首先传递 preroll 数量的帧,然后缓冲最多 buffer 数量的帧并等待提示。到达提示后,它会转发缓冲的帧以及随后输入的所有帧。

该过滤器可用于同步多个 ffmpeg 进程的输出,以用于诸如 decklink 之类的实时输出设备。通过将延迟放在过滤链中并预先缓冲帧,该进程可以在到达目标挂钟时间戳后几乎立即将数据传递给输出。

无法保证完美的帧精度,但是结果对于某些用例来说足够好。

cue

以微秒为单位的 UNIX 时间戳表示的提示时间戳。默认为 0。

preroll

要传递的预卷内容时长(以秒为单位)。默认为 0。

buffer

在等待提示之前要缓冲的最大内容时长(以秒为单位)。默认为 0。

32.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 ...

32.53.1 命令

此滤镜支持与选项相同的 命令

32.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
    

32.54 datascope

视频数据分析滤镜。

此滤镜显示部分视频的十六进制像素值。

该滤镜接受以下选项

size, s

设置输出视频大小。

x

设置从何处拾取像素的 X 偏移量。

y

设置从何处拾取像素的 Y 偏移量。

mode

设置范围模式,可以是以下之一

mono

在黑色背景上用白色绘制十六进制像素值。

color

在黑色背景上用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中拾取的颜色背景上绘制十六进制像素值,文本颜色以使其始终可见的方式拾取。

axis

在视频的左侧和顶部绘制行号和列号。

opacity

设置背景不透明度。

format

设置显示数字格式。可以是 hexdec。默认为 hex

components

设置要显示的像素分量。默认情况下,显示所有像素分量。

32.54.1 命令

此滤镜支持与选项相同的命令,但 size 选项除外。

32.55 dblur

应用方向模糊滤镜。

该滤镜接受以下选项

angle

设置方向模糊的角度。默认为 45

半径

设置方向模糊的半径。默认为 5

planes

设置要过滤的平面。默认情况下,会过滤所有平面。

32.55.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.56 dctdnoiz

使用 2D DCT(频域滤波)对帧进行去噪。

此滤镜不是为实时设计的。

该滤镜接受以下选项

sigma, s

设置噪声 sigma 常数。

sigma 定义了一个硬阈值 3 * sigma;低于此阈值的每个 DCT 系数(绝对值)都将被丢弃。

如果需要更高级的滤波,请参阅 expr

默认为 0

overlap

设置每个块的重叠像素数。由于该滤镜速度可能较慢,您可能需要降低此值,代价是降低滤镜效果并可能产生各种伪影。

如果重叠值不允许处理整个输入宽度或高度,则会显示警告,并且相应的边界不会被去噪。

默认值为 blocksize-1,这是最佳设置。

expr, e

设置系数因子表达式。

对于 DCT 块的每个系数,此表达式将被评估为该系数的乘数值。

如果设置此选项,则会忽略 sigma 选项。

可以通过 c 变量访问系数的绝对值。

n

使用位数设置 blocksize1<<n 定义了 blocksize,它是处理块的宽度和高度。

默认值为 3 (8x8),并且可以提高到 4 以获得 16x16 的 blocksize。请注意,更改此设置会对处理速度产生巨大影响。此外,更大的块大小并不一定意味着更好的去噪效果。

32.56.1 示例

应用 sigma4.5 的去噪

dctdnoiz=4.5

使用表达式系统可以实现相同的操作

dctdnoiz=e='gte(c, 4.5*3)'

使用 16x16 的块大小进行剧烈去噪

dctdnoiz=15:n=4

32.57 deband

从输入视频中删除条带伪影。它通过将条带像素替换为参考像素的平均值来工作。

该滤镜接受以下选项

1thr
2thr
3thr
4thr

设置每个平面的条带检测阈值。默认为 0.02。有效范围为 0.00003 到 0.5。如果当前像素和参考像素之间的差异小于阈值,则认为它具有条带。

range, r

条带检测范围(以像素为单位)。默认为 16。如果为正数,则将使用范围 0 到设置值中的随机数。如果为负数,则将使用精确的绝对值。该范围定义了当前像素周围的四个像素的正方形。

direction, d

设置将从中比较四个像素的方向(以弧度为单位)。如果为正数,则将从 0 到设置方向中选择随机方向。如果为负数,则将选择精确的绝对值。例如,方向 0、-PI 或 -2*PI 弧度将仅选择同一行上的像素,而 -PI/2 将仅选择同一列上的像素。

blur, b

如果启用,则将当前像素与所有四个周围像素的平均值进行比较。默认启用。如果禁用,则将当前像素与所有四个周围像素进行比较。仅当与周围像素的所有四个差异都小于阈值时,才认为该像素具有条带。

coupling, c

如果启用,则仅当所有像素分量都具有条带时,才更改当前像素,例如,为所有颜色分量触发条带检测阈值。默认情况下禁用。

32.57.1 命令

此滤镜支持所有上述选项作为命令

32.58 deblock

从输入视频中删除块伪影。

该滤镜接受以下选项

filter

设置滤镜类型,可以是 weakstrong。默认为 strong。这控制应用哪种类型的去块。

block

设置块的大小,允许的范围为 4 到 512。默认为 8

alpha
beta
gamma
delta

设置块检测阈值。允许的范围是 0 到 1。默认值为:alpha0.098,其余为 0.05。使用更高的阈值会提供更高的去块强度。设置 alpha 控制块精确边缘处的阈值检测。其余选项控制边缘附近的阈值检测。每个选项对应下方/上方或左侧/右侧。将任何这些设置为 0 将禁用去块。

planes

设置要过滤的平面。默认情况下是过滤所有可用的平面。

32.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
    

32.58.2 命令

此滤镜支持所有上述选项作为命令

32.59 decimate

以固定间隔删除重复帧。

该滤镜接受以下选项

cycle

设置将删除一个帧的帧数。将其设置为 N 表示每批 N 帧将删除一个帧。默认为 5

dupthresh

设置重复检测的阈值。如果帧的差异度量小于或等于此值,则将其声明为重复。默认为 1.1

scthresh

设置场景更改阈值。默认为 15

blockx
blocky

设置度量计算期间使用的 x 轴和 y 轴块的大小。较大的块可提供更好的噪声抑制,但也使小运动的检测效果更差。必须是 2 的幂。默认为 32

ppsrc

将主输入标记为预处理输入并激活干净的源输入流。这允许使用各种滤镜预处理输入以帮助度量计算,同时保持帧选择无损。当设置为 1 时,第一个流用于预处理输入,第二个流是选择保留帧的干净源。默认为 0

chroma

设置是否在度量计算中考虑色度。默认为 1

mixed

设置输入是否仅部分包含要缩减的内容。默认为 false。如果启用,则视频输出流将采用可变帧率。

32.60 deconvolve

使用第二个流作为脉冲,在频域中应用视频流的 2D 反卷积。

该滤镜接受以下选项

planes

设置要处理的平面。

脉冲

设置将处理哪些脉冲视频帧,可以是 firstall。默认值为 all

噪声

设置进行除法运算时的噪声。默认值为 0.0000001。当宽度和高度不相同且不是 2 的幂,或者卷积之前的流有噪声时很有用。

deconvolve 滤波器还支持 framesync 选项。

32.61 dedot

减少视频中的交叉亮度(点爬)和交叉颜色(彩虹)。

它接受以下选项

m

设置操作模式。可以是 dotcrawl(用于减少交叉亮度)和/或 rainbows(用于减少交叉颜色)的组合。

lt

设置空间亮度阈值。较低的值会增加交叉亮度的减少。

tl

设置时间亮度容差。较高的值会增加交叉亮度的减少。

tc

设置色度时间变化的容差。较高的值会增加交叉颜色的减少。

ct

设置时间色度阈值。较低的值会增加交叉颜色的减少。

32.62 deflate

将紧缩效果应用于视频。

此滤波器通过仅考虑低于像素的值,将像素替换为局部(3x3)平均值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改,默认值为 65535。如果为 0,则平面将保持不变。

32.62.1 命令

此滤镜支持所有上述选项作为命令

32.63 deflicker

消除时间帧亮度变化。

它接受以下选项

size, s

设置帧中的移动平均滤波器大小。默认值为 5。允许的范围是 2 - 129。

mode, m

设置平均模式以平滑时间亮度变化。

可用的值有

am

算术平均值

gm

几何平均值

hm

调和平均值

qm

二次平均值

cm

立方平均值

pm

幂平均值

median

中值

bypass

实际上不修改帧。当只想要元数据时很有用。

32.64 dejudder

消除部分隔行扫描电视电影内容产生的抖动。

例如,抖动可以通过 pullup 滤波器引入。如果原始源是部分电视电影内容,则 pullup,dejudder 的输出将具有可变帧率。可能会更改容器的记录帧率。除了该更改之外,此滤波器不会影响恒定帧率视频。

此滤波器中可用的选项是

cycle

指定抖动重复的窗口长度。

接受任何大于 1 的整数。有用的值是

4

如果原始值是从 24 到 30 fps(电影到 NTSC)进行电视电影转换的。

5

如果原始值是从 25 到 30 fps(PAL 到 NTSC)进行电视电影转换的。

20

如果两者混合使用。

默认值为 ‘4’。

32.65 delogo

通过简单地插值周围的像素来抑制电视台徽标。只需设置一个覆盖徽标的矩形,即可看到它消失(有时会出现更丑陋的东西 - 您的结果可能会有所不同)。

它接受以下参数

x
y

指定徽标的左上角坐标。必须指定它们。

w
h

指定要清除的徽标的宽度和高度。必须指定它们。

show

设置为 1 时,会在屏幕上绘制一个绿色矩形,以简化查找正确的 xywh 参数。默认值为 0。

该矩形绘制在最外侧的像素上,这些像素将被(部分)替换为插值。在每个方向上,此矩形外部的下一个像素的值将用于计算矩形内部的插值像素值。

32.65.1 示例

  • 设置一个矩形,覆盖左上角坐标为 0,0 且大小为 100x77 的区域
    delogo=x=0:y=0:w=100:h=77
    

32.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 滤波器。

32.67 deshake

尝试修复水平和/或垂直偏移的微小变化。此滤波器有助于消除手持摄像机、碰撞三脚架、在车辆上移动等引起的摄像机抖动。

该滤镜接受以下选项

x
y
w
h

指定一个矩形区域,以限制运动矢量的搜索。如果需要,可以将运动矢量的搜索限制在由其左上角、宽度和高度定义的帧的矩形区域内。这些参数的含义与 drawbox 滤波器相同,drawbox 滤波器可用于可视化边界框的位置。

当帧内主体的同时移动可能会被运动矢量搜索误认为是摄像机移动时,这很有用。

如果 xywh 中的任何一个或全部设置为 -1,则使用整个帧。这允许设置后面的选项,而无需指定运动矢量搜索的边界框。

默认值 - 搜索整个帧。

rx
ry

指定 x 和 y 方向上的最大移动范围,范围为 0-64 像素。默认值为 16。

设置垂直移动色度红色的量。

指定如何生成像素以填充帧边缘的空白。可用的值是

blank, 0

在空白位置填充零

original, 1

空白位置的原始图像

clamp, 2

在空白位置挤压边缘值

mirror, 3

空白位置的镜像边缘

默认值为 ‘mirror’。

blocksize

指定用于运动搜索的块大小。范围 4-128 像素,默认值为 8。

contrast

指定块的对比度阈值。将只考虑对比度(最暗和最亮像素之间的差异)大于指定值的块。范围 1-255,默认值为 125。

search

指定搜索策略。可用的值是

exhaustive, 0

设置穷举搜索

less, 1

设置较少穷举的搜索。

默认值为 ‘exhaustive’。

filename

如果设置,则将运动搜索的详细日志写入指定的文件。

32.68 despill

去除前景颜色中由绿幕或蓝幕的反射颜色引起的不必要的污染。

此滤波器接受以下选项

type

设置要使用的除溢类型。

mix

设置将如何生成溢出图。

expand

设置要去除剩余溢出的程度。

红色

控制溢出区域中的红色量。

绿色

控制溢出区域中的绿色量。对于绿幕,应为 -1。

蓝色

控制溢出区域中的蓝色量。对于蓝幕,应为 -1。

brightness

控制溢出区域的亮度,同时保留颜色。

alpha

修改从生成的溢出图得来的 alpha 值。

32.68.1 命令

此滤镜支持所有上述选项作为命令

32.69 detelecine

应用电视电影操作的精确逆运算。它需要使用 pattern 选项指定的预定义模式,该模式必须与传递给电视电影滤波器的模式相同。

此滤波器接受以下选项

first_field
top, t

顶场优先

底, b

底场优先。默认值是 top

模式

一个表示您希望应用的下拉模式的数字字符串。默认值是 23

起始帧

一个数字,表示第一帧相对于电视电影模式的位置。如果流被剪切,则使用此参数。默认值是 0

32.70 dilation

将膨胀效果应用于视频。

此滤镜将像素替换为局部(3x3)最大值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改,默认值为 65535。如果为 0,则平面将保持不变。

坐标

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

标志到局部 3x3 坐标的映射如下

1 2 3 4 5 6 7 8

32.70.1 命令

此滤镜支持所有上述选项作为命令

32.71 displace

按照第二个和第三个输入流的指示,移动像素。

它接受三个输入流并输出一个流,第一个输入是源,第二个和第三个输入是位移图。

第二个输入指定沿 x 轴移动像素的量,而第三个输入指定沿 y 轴移动像素的量。如果其中一个位移图流终止,则将使用该位移图的最后一帧。

请注意,一旦生成,位移图可以重复使用。

下面是接受选项的说明。

设置垂直移动色度红色的量。

设置超出范围的像素的位移行为。

可用的值有

空白

缺失的像素被黑色像素替换。

涂抹

相邻的像素将扩散以替换缺失的像素。

环绕

超出范围的像素被环绕,因此它们指向另一侧的像素。

镜像

超出范围的像素将被镜像像素替换。

默认值为 ‘涂抹’。

32.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
    

32.72 dnn_classify

使用基于边界框的深度神经网络进行分类。

该滤镜接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项现在仅接受 openvino,将添加 tensorflow 后端。

model

设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

输入

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

置信度

设置置信度阈值(默认值:0.5)。

标签

设置标签文件的路径,该文件指定标签 ID 和名称之间的映射。每个标签名称写在一行中,尾随空格和空行将被跳过。第一行是标签 ID 0 的名称,第二行是标签 ID 1 的名称,依此类推。如果未提供标签文件,则标签 ID 将被视为名称。

后端配置

设置要传递到后端的配置

对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置,请使用 tools/python/tf_sess_config.py 获取您的系统的配置。

32.73 dnn_detect

使用深度神经网络进行对象检测。

该滤镜接受以下选项

dnn_backend

指定用于模型加载和执行的 DNN 后端。此选项现在仅接受 openvino,将添加 tensorflow 后端。

model

设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

输入

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

置信度

设置置信度阈值(默认值:0.5)。

标签

设置标签文件的路径,该文件指定标签 ID 和名称之间的映射。每个标签名称写在一行中,尾随空格和空行将被跳过。第一行是标签 ID 0 的名称(通常是“背景”),第二行是标签 ID 1 的名称,依此类推。如果未提供标签文件,则标签 ID 将被视为名称。

后端配置

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:设置)。如果后端不支持异步,则回滚到同步执行。

32.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 后端。要启用此后端,您需要构建并安装用于 C++ 库的 Libtroch。请下载 cxx11 ABI 版本(请参阅 https://pytorch.ac.cn/get-started/locally)并使用 --enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/ 配置 FFmpeg

model

设置模型文件的路径,该文件指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其格式的文件。

输入

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

后端配置

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:设置)。如果后端不支持异步,则回滚到同步执行。

对于 tensorflow 后端,您可以使用 sess_config 选项设置其配置,请使用 tools/python/tf_sess_config.py 获取您的系统的 TensorFlow 后端的配置。

32.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 处理 Y 通道(请参阅 sr 滤镜) 处理 yuv420p(支持平面 YUV 格式)的帧
    ./ffmpeg -i 480p.jpg -vf format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y -y srcnn.jpg
    
  • 使用 espcn.pb 处理 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
    

32.75 drawbox

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框的左上角坐标的表达式。默认值为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认值为 0。

颜色,c

指定要写入的框的颜色。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的“Color”部分。如果使用特殊值 invert,则框边缘颜色与具有反转亮度的视频相同。

厚度,t

设置框边缘厚度的表达式。值为 fill 将创建一个填充的框。默认值为 3

请参阅下面的接受常量列表。

替换

如果输入具有 alpha,则适用。值为 1 时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将框合成到输入上,保持视频的 alpha 不变。

参数 xywh 以及 t 是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直色度子采样值。例如,对于像素格式“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

32.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
    

32.75.2 命令

此过滤器支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.76 drawgraph

使用输入视频元数据绘制图表。

它接受以下参数

m1

设置第一个帧元数据键,从中将使用元数据值来绘制图表。

fg1

设置第一个前景色表达式。

m2

设置第二个帧元数据键,从中将使用元数据值来绘制图表。

fg2

设置第二个前景色表达式。

m3

设置第三个帧元数据键,从中将使用元数据值来绘制图表。

fg3

设置第三个前景色表达式。

m4

设置第四个帧元数据键,从中将使用元数据值来绘制图表。

fg4

设置第四个前景色表达式。

min

设置元数据值的最小值。

max

设置元数据值的最大值。

bg

设置图表背景颜色。默认为白色。

mode

设置图表模式。

模式的可用值为

bar
dot
line

默认为 line

slide

设置滑动模式。

可用的滑动模式值为

frame

当到达右边界时绘制新帧。

replace

用新列替换旧列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单张图片。

默认为 frame

size

设置图表视频的大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分。默认值为 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

32.77 drawgrid

在输入图像上绘制网格。

它接受以下参数

x
y

指定网格交点某些点坐标的表达式(用于配置偏移量)。两者都默认为 0。

宽度,w
高度,h

指定网格单元格的宽度和高度的表达式,如果为 0,则分别解释为输入宽度和高度减去 thickness,因此图像会被框住。默认为 0。

颜色,c

指定网格的颜色。有关此选项的通用语法,请查看 (ffmpeg-utils)手册中的“颜色”部分。如果使用特殊值 invert,则网格颜色与具有反转亮度的视频相同。

厚度,t

设置网格线粗细的表达式。默认值为 1

请参阅下面的接受常量列表。

替换

如果输入具有 alpha,则适用。如果为 1,则绘制的网格的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将网格合成到输入上,保持视频的 alpha 不变。

参数 xywh 以及 t 是包含以下常量的表达式

dar

输入显示宽高比,它与 (w / h) * sar 相同。

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直色度子采样值。例如,对于像素格式“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

32.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]
    

32.77.2 命令

此过滤器支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.78 drawtext

使用 libfreetype 库在视频顶部绘制文本字符串或来自指定文件的文本。

要启用此滤波器的编译,您需要使用 --enable-libfreetype--enable-libharfbuzz 配置 FFmpeg。要启用默认字体回退和 font 选项,您需要使用 --enable-libfontconfig 配置 FFmpeg。要启用 text_shaping 选项,您需要使用 --enable-libfribidi 配置 FFmpeg。

32.78.1 语法

它接受以下参数

box

用于使用背景颜色在文本周围绘制一个框。该值必须为 1(启用)或 0(禁用)。box 的默认值为 0。

boxborderw

设置使用 boxcolor 在框周围绘制的边框的宽度。该值必须使用以下格式之一指定

  • boxborderw=10 将所有边框的宽度设置为 10
  • boxborderw=10|20 将顶部和底部边框的宽度设置为 10,将左侧和右侧边框的宽度设置为 20
  • boxborderw=10|20|30 将顶部边框的宽度设置为 10,将底部边框的宽度设置为 30,将左侧和右侧边框的宽度设置为 20
  • boxborderw=10|20|30|40 将边框宽度设置为 10(顶部)、20(右侧)、30(底部)、40(左侧)

boxborderw 的默认值为“0”。

boxcolor

用于在文本周围绘制框的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

boxcolor 的默认值为“白色”。

line_spacing

设置行间距(以像素为单位)。line_spacing 的默认值为 0。

text_align

设置文本相对于框边界的垂直和水平对齐方式。该值是标志的组合,一个用于垂直对齐(T=顶部,M=中间,B=底部),一个用于水平对齐(L=左侧,C=居中,R=右侧)。请注意,制表符仅支持左水平对齐。

y_align

指定 y 值所引用的内容。可能的值为

  • text 第一行文本的最高字形的顶部放置在 y
  • baseline 第一行文本的基线放置在 y
  • font 第一行文本的基线放置在 y 加上字体指标中定义的上升高度(以像素为单位)

为了向后兼容,y_align 的默认值为“text”。

borderw

设置使用 bordercolor 在文本周围绘制的边框的宽度。borderw 的默认值为 0。

bordercolor

设置用于在文本周围绘制边框的颜色。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“颜色”部分

bordercolor 的默认值为“黑色”。

expansion

选择如何展开 text。可以是 nonestrftime(已弃用)或 normal(默认)。有关详细信息,请参见下面的文本扩展部分。

basetime

设置计数器的起始时间,单位为微秒。仅在已弃用的 strftime 展开模式中应用。要在正常展开模式中模拟,请使用 pts 函数,并将起始时间(以秒为单位)作为第二个参数提供。

fix_bounds

如果为真,则检查并修复文本坐标以避免裁剪。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

fontcolor 的默认值为“黑色”。

fontcolor_expr

text 以相同方式展开的字符串,用于获取动态 fontcolor 值。默认情况下,此选项为空,不进行处理。设置此选项时,它将覆盖 fontcolor 选项。

font

用于绘制文本的字体系列。默认值为 Sans。

fontfile

用于绘制文本的字体文件。必须包含路径。如果禁用 fontconfig 支持,则此参数是强制性的。

alpha

绘制应用 alpha 混合的文本。该值可以是 0.0 到 1.0 之间的数字。表达式也接受相同的变量 x, y。默认值为 1。请参阅 fontcolor_expr

fontsize

用于绘制文本的字体大小。 fontsize 的默认值为 16。

text_shaping

如果设置为 1,则尝试在绘制文本之前对其进行整形(例如,反转从右到左的文本顺序并连接阿拉伯字符)。否则,仅按给定的方式绘制文本。默认值为 1(如果支持)。

ft_load_flags

用于加载字体的标志。

这些标志映射 libfreetype 支持的相应标志,并且是以下值的组合

default
no_scale
no_hinting
render
no_bitmap
vertical_layout
force_autohint
crop_bitmap
pedantic
ignore_global_advance_width
no_recurse
ignore_transform
monochrome
linear_design
no_autohint

默认值为“default”。

有关更多信息,请查阅 FT_LOAD_* libfreetype 标志的文档。

shadowcolor

用于在绘制的文本后绘制阴影的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“Color”部分

shadowcolor 的默认值为“黑色”。

boxw

设置要围绕文本绘制的框的宽度。 boxw 的默认值会自动计算以匹配文本宽度

boxh

设置要围绕文本绘制的框的高度。 boxh 的默认值会自动计算以匹配文本高度

shadowx
shadowy

文本阴影相对于文本位置的 x 和 y 偏移量。它们可以是正值或负值。两者的默认值均为“0”。

start_number

n/frame_num 变量的起始帧号。默认值为“0”。

tabsize

用于呈现制表符的空格数。默认值为 4。

timecode

以“hh:mm:ss[:;.]ff”格式设置初始时间码表示形式。它可以与文本参数一起使用,也可以不使用。timecode_rate 选项必须指定。

timecode_rate, rate, r

设置时间码帧率(仅限时间码)。值将四舍五入为最接近的整数。最小值是“1”。支持帧率 30 和 60 的丢帧时间码。

tc24hmax

如果设置为 1,则时间码选项的输出将在 24 小时后换行。默认值为 0(禁用)。

text

要绘制的文本字符串。文本必须是 UTF-8 编码字符的序列。如果没有使用参数 textfile 指定文件,则此参数是强制性的。

textfile

包含要绘制文本的文本文件。文本必须是 UTF-8 编码字符的序列。

如果未使用参数 text 指定文本字符串,则此参数是强制性的。

如果同时指定了 texttextfile,则会引发错误。

text_source

如果要使用侧数据检测边界框中的文本数据,则应将文本源设置为 side_data_detection_bboxes。

如果设置了文本源,则将忽略 texttextfile,并且仍然使用侧数据检测边界框中的文本数据。因此,如果不确定文本源,请不要使用此参数。

reload

textfile 将在指定的帧间隔重新加载。请务必以原子方式更新 textfile,否则可能会部分读取,甚至失败。范围是 0 到 INT_MAX。默认值为 0。

x
y

指定文本在视频帧内绘制位置的偏移量的表达式。它们相对于输出图像的顶部/左侧边框。

xy 的默认值为“0”。

有关接受的常量和函数的列表,请参见下文。

xy 的参数是包含以下常量和函数的表达式

dar

输入显示纵横比,与 (w / h) * sar 相同

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直色度子采样值。例如,对于像素格式“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

当前数据包的大小(以字节为单位)。

32.78.2 文本扩展

如果 expansion 设置为 strftime,则过滤器会识别提供的文本中 strftime C 函数接受的序列,并相应地展开它们。请查阅 strftime 的文档。此功能已弃用,建议使用 normal 扩展模式,并使用 gmtimelocaltime 扩展函数。

如果 expansion 设置为 none,则文本将按原样打印。

如果 expansion 设置为 normal(这是默认设置),则将使用以下扩展机制。

反斜杠字符 ‘\’,后跟任何字符,始终会扩展为第二个字符。

%{...} 形式的序列会被扩展。大括号之间的文本是函数名,可能后跟以 ‘:’ 分隔的参数。如果参数包含特殊字符或分隔符(‘:’ 或 ‘}’),则应进行转义。

请注意,它们可能还需要在过滤器参数字符串中的 text 选项的值中、在滤镜图描述中的过滤器参数中,以及可能还需要在 shell 中进行转义,总共可能需要四级转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用:

expr, e

表达式求值结果。

它必须接受一个参数,指定要计算的表达式,该表达式接受与 xy 值相同的常量和函数。请注意,并非所有常量都应使用,例如,在计算表达式时文本大小是未知的,因此常量 text_wtext_h 将具有未定义的值。

expr_int_format, eif

计算表达式的值并以格式化的整数输出。

第一个参数是要计算的表达式,与 expr 函数相同。第二个参数指定输出格式。允许的值为 ‘x’、‘X’、‘d’ 和 ‘u’。它们的处理方式与 printf 函数中完全相同。第三个参数是可选的,用于设置输出所占的位数。它可用于从左侧添加零填充。

gmtime

过滤器运行的时间,以 UTC 表示。它可以接受一个参数:strftime C 函数格式字符串。格式字符串已扩展为支持变量 %[1-6]N,它会打印秒的小数部分,可以选择指定位数。

localtime

过滤器运行的时间,以本地时区表示。它可以接受一个参数:strftime C 函数格式字符串。格式字符串已扩展为支持变量 %[1-6]N,它会打印秒的小数部分,可以选择指定位数。

metadata

帧元数据。接受一个或两个参数。

第一个参数是必需的,指定元数据键。

第二个参数是可选的,指定默认值,当找不到元数据键或为空时使用。

可以通过检查运行 ffprobe -show_frames 打印的每个帧部分中以 TAG 开头的条目来识别可用的元数据。

在引导到 drawtext 过滤器的过滤器中生成的字符串元数据也可用。

n, frame_num

帧号,从 0 开始。

pict_type

当前图像类型的单字符描述。

pts

当前帧的时间戳。它可以接受最多三个参数。

第一个参数是时间戳的格式;它默认为 flt,表示以秒为单位的十进制数,精确到微秒;hms 代表格式化的 [-]HH:MM:SS.mmm 时间戳,精确到毫秒。gmtime 代表格式化为 UTC 时间的帧时间戳;localtime 代表格式化为本地时区时间的帧时间戳。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 hms,则可以提供第三个参数 24HH,以 24 小时格式(00-23)呈现格式化时间戳的小时部分。

如果格式设置为 localtimegmtime,则可以提供第三个参数:strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

32.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

32.78.4 示例

  • 使用 FreeSerif 字体绘制“Test Text”,可选参数使用默认值。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 使用大小为 24 的 FreeSerif 字体在 x=100 和 y=50 的位置(从屏幕的左上角开始计算)绘制 “Test Text”,文本为黄色,周围有一个红色框。文本和框的不透明度均为 20%。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
              x=100: y=50: fontsize=24: [email protected]: box=1: [email protected]"
    

    请注意,如果参数列表中没有使用空格,则双引号不是必需的。

  • 在视频帧的中心显示文本
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
    
  • 在随机位置显示文本,每 30 秒切换到新位置
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
    
  • 在视频帧的最后一行中显示从右向左滑动的文本行。假设文件 LONG_LINE 包含单行且没有换行符。
    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
    
  • 显示文件 CREDITS 的内容,使其从帧的底部移入并向上滚动。
    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
    
  • 在输入视频的中心绘制单个绿色字母“g”。字形基线位于屏幕高度的一半位置。
    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
    
  • 每 3 秒显示文本 1 秒钟
    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
    
  • 使用 fontconfig 设置字体。请注意,冒号需要转义。
    drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
    
  • 绘制“Test Text”,其字体大小取决于视频的高度。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(请参阅 strftime C 函数的文档)
    drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
    
  • 显示文本淡入和淡出(出现/消失)
    #!/bin/sh
    DS=1.0 # display start
    DE=10.0 # display end
    FID=1.5 # fade in duration
    FOD=5 # fade out duration
    ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
    
  • 水平对齐多个单独的文本。请注意,max_glyph_afontsize 值包含在 y 偏移量中。
    drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
    drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
    
  • 如果存在特殊的 lavf.image2dec.source_basename 元数据,则将其绘制到每个帧上。否则,绘制字符串“NA”。请注意,image2 解复用器必须具有选项 -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

32.79 edgedetect

检测并绘制边缘。过滤器使用 Canny 边缘检测算法。

该滤镜接受以下选项

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后通过与低阈值选择的“弱”边缘像素的 8 连通性进行连接。

lowhigh 阈值必须在 [0,1] 范围内选择,并且 low 应小于或等于 high

low 的默认值为 20/255high 的默认值为 50/255

mode

定义绘制模式。

wires

在黑色背景上绘制白色/灰色线条。

colormix

混合颜色以创建绘画/卡通效果。

canny

在所有选定平面上应用 Canny 边缘检测器。

默认值为 wires

planes

选择要过滤的平面。默认情况下,将过滤所有可用的平面。

32.79.1 示例

  • 具有自定义滞后阈值的标准边缘检测
    edgedetect=low=0.1:high=0.4
    
  • 没有阈值的绘画效果
    edgedetect=mode=colormix:high=0
    

32.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)。

32.81 entropy

测量视频帧颜色通道直方图中的灰度级熵。

它接受以下参数

mode

可以是 normaldiff。默认值为 normal

diff 模式测量直方图增量值的熵,即相邻直方图值之间的绝对差值。

32.82 epx

应用专为像素艺术设计的 EPX 放大滤镜。

它接受以下选项

n

设置缩放维度:2 表示 2xEPX3 表示 3xEPX。默认值为 3

32.83 eq

设置亮度、对比度、饱和度和近似伽马调整。

该滤镜接受以下选项

contrast

设置对比度表达式。该值必须是范围在 -1000.01000.0 之间的浮点值。默认值为 "1"。

brightness

设置亮度表达式。该值必须是范围在 -1.01.0 之间的浮点值。默认值为 "0"。

saturation

设置饱和度表达式。该值必须是范围在 0.03.0 之间的浮点数。默认值为 "1"。

gamma

设置伽马表达式。该值必须是范围在 0.110.0 之间的浮点数。默认值为 "1"。

gamma_r

设置红色的伽马表达式。该值必须是范围在 0.110.0 之间的浮点数。默认值为 "1"。

gamma_g

设置绿色的伽马表达式。该值必须是范围在 0.110.0 之间的浮点数。默认值为 "1"。

gamma_b

设置蓝色的伽马表达式。该值必须是范围在 0.110.0 之间的浮点数。默认值为 "1"。

gamma_weight

设置伽马权重表达式。它可用于减少高伽马值对明亮图像区域的影响,例如防止它们被过度放大而变成纯白色。该值必须是范围在 0.01.0 之间的浮点数。值为 0.0 会完全关闭伽马校正,而 1.0 则使其保持全强度。默认值为 "1"。

eval

设置何时计算亮度、对比度、饱和度和伽马表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算一次表达式

frame

为每个传入帧计算表达式

默认值为 ‘init’。

表达式接受以下参数

n

输入帧的帧计数,从 0 开始

pos

输入文件中相应数据包的字节位置,如果未指定则为 NAN;已弃用,请勿使用

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

以秒表示的时间戳,如果输入时间戳未知则为 NAN

32.83.1 命令

过滤器支持以下命令

contrast

设置对比度表达式。

brightness

设置亮度表达式。

saturation

设置饱和度表达式。

gamma

设置伽马表达式。

gamma_r

设置 gamma_r 表达式。

gamma_g

设置 gamma_g 表达式。

gamma_b

设置 gamma_b 表达式。

gamma_weight

设置 gamma_weight 表达式。

该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

32.84 erosion

对视频应用腐蚀效果。

此过滤器将像素替换为局部 (3x3) 最小值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改,默认值为 65535。如果为 0,则平面将保持不变。

坐标

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

标志到局部 3x3 坐标的映射如下

1 2 3 4 5 6 7 8

32.84.1 命令

此滤镜支持所有上述选项作为命令

32.85 estdif

对输入视频进行去隔行处理(“estdif”代表“边缘斜率跟踪去隔行过滤器”)。

仅限空间过滤器,使用边缘斜率跟踪算法来插值丢失的线。它接受以下参数

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

frame

0, send_frame

field

1, send_field

默认值为 field

默认值为 send_field

parity

tff

0, tff

bff

1, bff

auto

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

all

0, all

interlaced

1, interlaced

仅对标记为交错的帧进行反交错处理。

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

六点插值。

32.85.1 命令

此滤镜支持与选项相同的 命令

32.86 exposure

调整视频流的曝光。

该滤镜接受以下选项

exposure

设置 EV 中的曝光校正。允许的范围是 -3.0 到 3.0 EV。默认值为 0 EV。

black

设置黑电平校正。允许的范围是 -1.0 到 1.0。默认值为 0。

32.86.1 命令

此滤镜支持与选项相同的 命令

32.87 extractplanes

从输入视频流中提取颜色通道分量到单独的灰度视频流中。

该滤波器接受以下选项

planes

设置要提取的平面。

可用的平面值为

y
u
v
a
r
g
b

选择输入中不可用的平面会导致错误。这意味着您不能同时选择具有 yuv 平面的 rgb 平面。

32.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
    

32.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

指定淡入淡出的颜色。默认值为“黑色”。

32.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
    

32.89 feedback

应用反馈视频过滤器。

此过滤器将裁剪后的输入帧传递到第二个输出。在那里,可以使用其他视频过滤器对其进行过滤。在过滤器从第二个输入接收帧后,该帧会与来自第一个输入的原始帧组合在一起,并传递到第一个输出。

典型用法是仅过滤帧的一部分。

该滤镜接受以下选项

x
y

设置左上角的裁剪位置。

w
h

设置裁剪大小。

32.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]
    

32.90 fftdnoiz

使用 3D FFT(频域滤波)对帧进行去噪。

该滤镜接受以下选项

sigma

设置噪声 sigma 常数。这会设置去噪强度。默认值为 1。允许的范围为 0 到 30。在重叠较少的情况下使用非常高的 sigma 值可能会产生块状伪影。

amount

设置去噪量。默认情况下,会减少所有检测到的噪声。默认值为 1。允许的范围为 0 到 1。

block

设置块大小(以像素为单位),默认值为 32,范围为 8 到 256。

overlap

设置块重叠。默认值为 0.5。允许的范围为 0.2 到 0.8。

method

设置去噪方法。默认值为 wiener,也可以设置为 hard

前一帧

设置用于去噪的前一帧数量。默认设置为 0。

后一帧

设置用于去噪的后一帧数量。默认设置为 0。

planes

设置将要过滤的平面,默认情况下,除 alpha 通道之外的所有可用平面都将进行过滤。

32.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 数组大小。

32.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)))'
    

32.92 field

使用步幅算法从隔行扫描图像中提取单个场,以避免浪费 CPU 时间。输出帧标记为非隔行扫描。

该滤镜接受以下选项

type

指定是提取顶场(如果值为 0top)还是底场(如果值为 1bottom)。

32.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 -

32.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

三向匹配,如果原始三个匹配都被检测为梳状帧,则尝试第四/第五种匹配 (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

色度匹配

设置在匹配比较期间是否包含色度。在大多数情况下,建议保持启用此设置。只有当您的剪辑有严重的色度问题(例如严重的彩虹效应或其他伪影)时,才应将其设置为 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

设置在梳状帧决策中是否考虑色度。只有当您的源有色度问题(彩虹效应等)导致启用色度时梳状帧检测出现问题时,才禁用此项。实际上,使用 chroma=0 通常更可靠,除非源中有仅限色度的梳状情况。

默认值为 0

blockx
blocky

分别设置在梳状帧检测期间使用的窗口的 x 轴和 y 轴大小。这与需要在 combpel 像素中检测为梳状帧的大小区域有关,以声明一个帧为梳状帧。有关更多信息,请参阅 combpel 参数说明。可能的值是任何以 4 开始并上升到 512 的 2 的幂的数字。

默认值为 16

combpel

在帧上的任何 blockyblockx 大小的块内,要使该帧被检测为梳状帧,所需的梳状像素数。cthresh 控制梳状的“可见度”的同时,此设置控制在帧上的任何局部区域(由 blockxblocky 设置定义的窗口)中必须存在的梳状“量”。最小值为 0,最大值为 blocky x blockx(此时永远不会检测到任何帧为梳状帧)。此设置在 TFM/VFM 词汇中称为 MI

默认值为 80

32.94.1 p/c/n/u/b 的含义

32.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 匹配下一帧中相反奇偶性的场

32.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

32.94.2 示例

顶部字段优先电视电影流的简单 IVTC

fieldmatch=order=tff:combmatch=none, decimate

高级 IVTC,仍然梳状帧的后备方法是 yadif

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

32.95 fieldorder

转换输入视频的场序。

它接受以下参数

order

输出场序。有效值是 tff(顶场优先)或 bff(底场优先)。

默认值是 ‘tff’。

该转换通过将图像内容向上或向下移动一行,并用适当的图像内容填充剩余行来完成。此方法与大多数广播场序转换器一致。

如果输入视频未标记为隔行扫描,或者已经标记为所需的输出场序,则此滤镜不会更改传入的视频。

它在转换到或从 PAL DV 素材时非常有用,PAL DV 素材是底场优先的。

例如

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

32.96 fillborders

填充输入视频的边框,而不更改视频流的尺寸。有时视频的四个边缘可能有垃圾,您可能不希望裁剪视频输入以保持大小为某个数字的倍数。

此滤波器接受以下选项

左侧

要从左边框填充的像素数。

右侧

要从右边框填充的像素数。

顶部

要从顶部边框填充的像素数。

底部

要从底部边框填充的像素数。

mode

设置填充模式。

它接受以下值

涂抹

使用最外侧的像素填充像素

镜像

使用镜像填充像素(半采样对称)

fixed

用常量值填充像素

reflect

使用反射填充像素(全采样对称)

环绕

使用环绕填充像素

fade

将像素淡化为常量值

margins

使用靠近边框的加权平均像素填充顶部和底部的像素

默认值为 smear

颜色

设置固定或淡化模式下像素的颜色。默认值为 黑色

32.96.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.97 find_rect

在输入视频中查找矩形对象。

要搜索的对象必须指定为使用 object 选项指定的 gray8 图像。

对于每个可能的匹配项,都会计算一个分数。如果分数达到指定的阈值,则认为找到了该对象。

如果输入视频包含对象的多个实例,则滤镜只会找到其中一个。

找到对象后,会在匹配帧中设置以下元数据条目

lavfi.rect.w

对象的宽度

lavfi.rect.h

对象的高度

lavfi.rect.x

对象的 x 位置

lavfi.rect.y

对象的 y 位置

lavfi.rect.score

找到的对象的匹配分数

它接受以下选项

object

对象图像的文件路径,需要为 gray8 格式。

threshold

检测阈值,表示为 0-1 范围内的十进制数。

阈值 0.01 表示仅精确匹配,阈值 0.99 表示几乎所有内容都匹配。

默认值为 0.5。

mipmaps

mipmap 的数量,默认值为 3。

xmin、ymin、xmax、ymax

指定要搜索的矩形。

discard

丢弃未检测到对象的帧。默认情况下禁用。

32.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
    

32.98 floodfill

用另一个值填充具有相同像素组件值的区域。

它接受以下选项

x

设置像素 x 坐标。

y

设置像素 y 坐标。

s0

设置源 #0 组件值。

s1

设置源 #1 组件值。

s2

设置源 #2 组件值。

s3

设置源 #3 组件值。

d0

设置目标 #0 组件值。

d1

设置目标 #1 组件值。

d2

设置目标 #2 组件值。

d3

设置目标 #3 组件值。

32.99 format

将输入视频转换为指定的像素格式之一。Libavfilter 将尝试选择一个适合作为下一个滤镜的输入的格式。

它接受以下参数

pix_fmts

一个用“|”分隔的像素格式名称列表,例如“pix_fmts=yuv420p|monow|rgb24”。

color_spaces

一个用“|”分隔的颜色空间名称列表,例如“color_spaces=bt709|bt470bg|bt2020nc”。

color_ranges

一个用“|”分隔的颜色范围名称列表,例如“color_spaces=tv|pc”。

32.99.1 示例

  • 将输入视频转换为 yuv420p 格式
    format=pix_fmts=yuv420p
    

    将输入视频转换为列表中任何一种格式

    format=pix_fmts=yuv420p|yuv444p|yuv410p
    

32.100 fps

通过根据需要复制或删除帧,将视频转换为指定的恒定帧率。

它接受以下参数

fps

所需的输出帧率。它接受包含以下常量的表达式

source_fps

输入的帧率

ntsc

30000/1001 的 NTSC 帧率

pal

25.0 的 PAL 帧率

film

24.0 的胶片帧率

ntsc_film

24000/1001 的 NTSC 胶片帧率

默认值为 25

start_time

假设第一个 PTS 应为给定的值(以秒为单位)。这允许在流的开始处进行填充/修剪。默认情况下,不会对第一帧的预期 PTS 作出假设,因此不会进行填充或修剪。例如,如果视频流在音频流之后开始,则可以将其设置为 0,以用第一帧的副本填充开头,或者修剪任何具有负 PTS 的帧。

round

时间戳 (PTS) 四舍五入方法。

可能的值为

zero

向 0 舍入

inf

远离 0 舍入

down

向负无穷大舍入

up

向正无穷大舍入

near

舍入到最近的

默认值为 near

eof_action

读取最后一帧时执行的操作。

可能的值为

round

使用与其他帧相同的时间戳舍入方法。

pass

如果尚未达到输入持续时间,则传递最后一帧。

默认值为 round

或者,这些选项可以指定为平面字符串:fps[:start_time[:round]]。

另请参阅 setpts 滤镜。

32.100.1 示例

  • 为了将 fps 设置为 25 的典型用法
    fps=fps=25
    
  • 将 fps 设置为 24,使用缩写和舍入方法舍入到最近的
    fps=fps=film:round=near
    

32.101 framepack

将两个不同的视频流打包到一个立体视频中,并在受支持的编解码器上设置正确的元数据。两个视图应具有相同的大小和帧率,当较短的视频结束时,处理将停止。请注意,您可以使用 scalefps 滤镜方便地调整视图属性。

它接受以下参数

format

所需的打包格式。支持的值为

sbs

视图彼此相邻(默认)。

tab

视图彼此堆叠。

lines

视图按行打包。

columns

视图按列打包。

frameseq

视图按时间交错。

一些示例

# Convert left and right views into a frame-sequential video
ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT

# Convert views into a side-by-side video with the same output resolution as the input
ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT

32.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 的值启用场景切换检测。此标志默认启用。

32.103 framestep

每 N 帧选择一帧。

此滤镜接受以下选项

step

每隔 step 帧选择一帧。允许的值是大于 0 的正整数。默认值为 1

32.104 freezedetect

检测冻结的视频。

当检测到输入视频在指定时间内内容没有显著变化时,此滤镜会记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差值,并将其与噪声基底进行比较。

打印的时间和持续时间以秒为单位表示。lavfi.freezedetect.freeze_start 元数据键设置在时间戳等于或超过检测持续时间的第一个帧上,并且包含冻结的第一个帧的时间戳。lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end 元数据键设置在冻结后的第一个帧上。

该滤镜接受以下选项

noise, n

设置噪声容限。可以以分贝 (如果指定的数值后附加 "dB") 或以 0 到 1 之间的差值比率指定。默认值为 -60dB 或 0.001。

duration, d

设置冻结持续时间,直到通知(默认值为 2 秒)。

32.105 freezeframes

冻结视频帧。

此滤镜使用第二个输入的帧冻结视频帧。

该滤镜接受以下选项

第一个

设置开始冻结的第一个帧的编号。

last

设置结束冻结的最后一个帧的编号。

替换

设置将用于替换帧的第二个输入的帧的编号。

32.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 是浮点数)和/或字符串。

参数的数量和类型取决于加载的效果。如果未指定效果参数,则会设置默认值。

32.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

32.106.2 命令

此滤镜支持将 filter_params 选项作为 命令

32.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(未启用)。

32.108 fsync

将视频帧与来自文件的外部映射同步。

对于映射文件中给出的每个输入 PTS,它会删除或创建尽可能多的帧,以重新创建映射文件中给出的输出帧序列。

此滤镜对于重新创建 fps 滤镜的帧速率转换的输出帧非常有用,使用 ffmpeg 选项 -stats_mux_pre 记录到映射文件中,并对相应的帧进行进一步处理,例如质量比较。

映射文件的每一行必须包含每个输入帧的三个项目,输入 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 -

32.109 gblur

应用高斯模糊滤镜。

该滤镜接受以下选项

sigma

设置水平西格玛,高斯模糊的标准差。默认值为 0.5

steps

设置高斯近似的步数。默认值为 1

planes

设置要过滤的平面。默认情况下,会过滤所有平面。

sigmaV

设置垂直西格玛,如果为负值,则与 sigma 相同。默认值为 -1

32.109.1 命令

此过滤器支持与选项相同的命令。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.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。

32.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
    

32.111 gradfun

修复因截断为 8 位颜色深度而有时引入到近乎平坦区域中的条带伪影。插值应该出现在条带位置的渐变,并对它们进行抖动。

它仅设计用于播放。请勿在有损压缩之前使用它,因为压缩往往会丢失抖动并恢复条带。

它接受以下参数

强度

滤镜将更改任何一个像素的最大量。 这也是检测近乎平坦区域的阈值。 可接受的值范围为 .51 到 64;默认值为 1.2。超出范围的值将被裁剪到有效范围。

半径

拟合渐变的邻域。较大的半径会产生更平滑的渐变,但也阻止滤镜修改详细区域附近的像素。可接受的值为 8-32;默认值为 16。超出范围的值将被裁剪到有效范围。

或者,可以将选项指定为平面字符串:strength[:radius]

32.111.1 示例

  • 应用强度为 3.5 和半径为 8 的滤镜
    gradfun=3.5:8
    
  • 指定半径,省略强度(将回退到默认值)
    gradfun=radius=8
    

32.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。 这保证了输出视频帧率不会高于此值。

32.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

32.114 greyedge

一种颜色恒常性变体滤镜,它通过灰边算法估计场景照明并相应地校正场景颜色。

请参阅:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

该滤镜接受以下选项

difford

要在场景上应用的微分阶数。必须在 [0,2] 范围内选择,默认值为 1。

minknorm

用于计算闵可夫斯基距离的闵可夫斯基参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 以获取最大值,而不是计算闵可夫斯基距离。

sigma

要在场景上应用的高斯模糊的标准偏差。必须在 [0,1024.0] 范围内选择,默认值为 1。如果 difford 大于 0,则 floor( sigma * break_off_sigma(3) ) 不能等于 0。

32.114.1 示例

  • 灰边
    greyedge=difford=1:minknorm=5:sigma=2
    
  • 最大边缘
    greyedge=difford=1:minknorm=0:sigma=2
    

32.115 guided

应用引导滤波进行边缘保留平滑、去雾等。

该滤镜接受以下选项

半径

设置框半径(以像素为单位)。允许的范围为 1 到 20。默认值为 3。

eps

设置正则化参数(带平方)。允许的范围为 0 到 1。默认值为 0.01。

mode

设置滤镜模式。可以是 basicfast。默认值为 basic

sub

设置 fast 模式的子采样率。范围为 2 到 64。默认值为 4。basic 模式下不发生子采样。

guidance

设置指导模式。可以是 offon。默认值为 off。如果为 off,则需要单个输入。如果为 on,则需要两个具有相同分辨率和像素格式的输入。第二个输入用作指导。

planes

设置要过滤的平面。默认仅为第一个。

32.115.1 命令

此滤镜支持所有上述选项作为命令

32.115.2 示例

  • 使用引导滤波进行边缘保留平滑
    ffmpeg -i in.png -vf guided out.png
    
  • 使用引导滤波进行去雾、结构传递过滤、细节增强。有关指导图像的生成,请参阅论文“引导图像滤波”。 请参阅:http://kaiminghe.com/publications/pami12guidedfilter.pdf
    ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
    

32.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

32.116.1 命令

此滤镜支持使用 interp 选项,详见 命令

32.116.2 工作流程示例

32.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 流的剩余帧。

32.116.2.2 带预览的 Hald CLUT

Hald CLUT 应该是一个 Level*Level*Level 乘以 Level*Level*Level 像素的方形图像。对于给定的 Hald CLUT,FFmpeg 将选择图片左上角开始的最大可能正方形。剩余的填充像素(底部或右侧)将被忽略。此区域可用于添加 Hald CLUT 的预览。

通常,以下生成的 Hald CLUT 将被 haldclut 滤镜支持

ffmpeg -f lavfi -i haldclutsrc=8 -vf "
   pad=iw+320 [padded_clut];
   smptebars=s=320x256, split [a][b];
   [padded_clut][a] overlay=W-320:h, curves=color_negative [main];
   [main][b] overlay=W-320" -frames:v 1 clut.png

它包含原始图像和 CLUT 效果的预览:SMPTE 彩条显示在右上角,下方是经过颜色变化处理的相同彩条。

然后,可以使用以下命令可视化此 Hald CLUT 的效果

ffplay input.mkv -vf "movie=clut.png, [in] haldclut"

32.117 hflip

水平翻转输入视频。

例如,要使用 ffmpeg 水平翻转输入视频

ffmpeg -i in.avi -vf "hflip" out.avi

32.118 histeq

此滤镜在逐帧的基础上应用全局颜色直方图均衡化。

它可用于校正像素强度范围压缩的视频。该滤镜重新分配像素强度,以均衡其在强度范围内的分布。它可以被视为“自动调整对比度滤镜”。此滤镜仅适用于校正退化或捕获不良的源视频。

该滤镜接受以下选项

强度

确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认值为 0.200。

强度

设置可以生成的最大强度,并相应地缩放输出值。强度应根据需要设置,如果需要避免冲淡,则可以限制强度。该值必须是 [0,1] 范围内的浮点数,默认值为 0.210。

抗条带

设置抗条带级别。如果启用,滤镜会随机地少量改变输出像素的亮度,以避免直方图出现条带。可能的值为 noneweakstrong。默认为 none

32.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

components

设置要显示哪些颜色分量。默认值为 7

fgopacity

设置前景不透明度。默认值为 0.7

bgopacity

设置背景不透明度。默认值为 0.5

colors_mode

设置颜色模式。它接受以下值

whiteonblack
blackonwhite
whiteongray
blackongray
coloronblack
coloronwhite
colorongray
blackoncolor
whiteoncolor
grayoncolor

默认值为 whiteonblack

32.119.1 示例

  • 计算并绘制直方图
    ffplay -i input -vf histogram
    

32.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

32.120.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.121 hwdownload

将硬件帧下载到系统内存。

输入必须是硬件帧,输出必须是非硬件格式。并非所有格式都支持输出 - 可能需要在图中紧随其后插入一个额外的 format 滤镜,以使输出为支持的格式。

32.122 hwmap

将硬件帧映射到系统内存或其他设备。

此滤镜有几种不同的操作模式;使用哪种模式取决于输入和输出格式

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并将其传递到输出。如果以后需要原始硬件帧(例如,在将其部分覆盖在其他内容之后),则可以在下一模式中再次使用 hwmap 滤镜来检索它。

  • 普通帧输入,硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射它 - 即返回原始硬件帧。

    否则,必须提供设备。在该设备上为输出创建新的硬件表面,然后将它们映射回输入的软件格式,并将这些帧提供给前面的滤镜。这将像 hwupload 滤镜一样工作,但当输入已经是兼容格式时,可能会避免额外的复制。

  • 硬件帧输入和输出

    必须为输出提供设备,可以直接提供,也可以使用 derive_device 选项。输入和输出设备必须是不同的类型且兼容的 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用同一张显卡)。

    如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。

    否则,将帧映射到输出设备 - 在输出上创建新的硬件帧,这些帧对应于输入上的帧。

接受以下附加参数

mode

设置帧映射模式。可以是以下各项的组合:

read

映射的帧应该是可读的。

写入

映射的帧应该是可写的。

overwrite

映射将始终覆盖整个帧。

在某些情况下,这可能会提高性能,因为不需要加载帧的原始内容。

direct

映射不得涉及任何复制。

在某些情况下,如果无法进行直接映射或它会产生意外属性,则会创建到帧副本的间接映射。设置此标志可确保映射是直接的,如果无法实现,则会失败。

如果未指定,则默认为 read+write

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个新的 type 类型的设备。

reverse

在硬件到硬件的映射中,反向映射 - 在接收器中创建帧并将其映射回源。在某些情况下,可能需要这样做,即需要在一个方向上进行映射,但所使用的设备仅支持相反的方向。

此选项很危险 - 如果对该过滤器的输出有任何其他约束,它可能会以未定义的方式破坏前面的过滤器。请在充分理解其使用含义的情况下再使用它。

32.123 hwupload

将系统内存帧上传到硬件表面。

初始化过滤器时必须提供上传的目标设备。如果使用 ffmpeg,请使用 -filter_hw_device 选项或 derive_device 选项选择适当的设备。输入和输出设备必须是不同的类型且兼容的 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用同一张显卡)。

接受以下附加参数

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备派生一个新的 type 类型的设备。

32.124 hwupload_cuda

将系统内存帧上传到 CUDA 设备。

它接受以下可选参数

device

要使用的 CUDA 设备的编号

32.125 hqx

应用专为像素艺术设计的高质量放大滤镜。此滤镜最初由 Maxim Stepin 创建。

它接受以下选项

n

设置缩放维度:2 表示 hq2x3 表示 hq3x4 表示 hq4x。默认值为 3

32.126 hstack

水平堆叠输入视频。

所有流必须具有相同的像素格式和相同的高度。

请注意,此滤镜比使用 overlaypad 滤镜创建相同输出更快。

该滤波器接受以下选项

输入

设置输入流的数量。默认为 2。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

32.127 hsvhold

将某个 HSV 范围转换为灰度值。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,输出颜色可以更改为灰色,也可以不更改。

该滤镜接受以下选项

hue

设置用于色差计算的色调值。允许的范围是从 -360 到 360。默认值为 0。

sat

设置用于色差计算的饱和度值。允许的范围是从 -1 到 1。默认值为 0。

val

设置用于色差计算的值。允许的范围是从 -1 到 1。默认值为 0。

similarity

设置与关键颜色的相似度百分比。允许的范围是从 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。允许的范围是从 0 到 1。默认值为 0。

0.0 使像素完全为灰色或完全不为灰色。

较高的值会产生更多的灰色像素,并且像素颜色与关键颜色越相似,灰色像素就越高。

32.128 hsvkey

将某个 HSV 范围转换为透明度。

此滤镜测量选项中设置的 HSV 颜色与视频流中测量的颜色之间的色差。根据选项,可以通过添加 alpha 通道将输出颜色更改为透明色。

该滤镜接受以下选项

hue

设置用于色差计算的色调值。允许的范围是从 -360 到 360。默认值为 0。

sat

设置用于色差计算的饱和度值。允许的范围是从 -1 到 1。默认值为 0。

val

设置用于色差计算的值。允许的范围是从 -1 到 1。默认值为 0。

similarity

设置与关键颜色的相似度百分比。允许的范围是从 0 到 1。默认值为 0.01。

0.00001 仅匹配确切的关键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。允许的范围是从 0 到 1。默认值为 0。

混合百分比。

0.0 使像素完全透明,或者根本不透明。

32.129 hue

修改输入的色调和/或饱和度。

它接受以下参数

h

将色调角度指定为度数。它接受表达式,默认为 “0”。

s

在 [-10,10] 范围内指定饱和度。它接受表达式,默认为 “1”。

H

将色调角度指定为弧度。它接受表达式,默认为 “0”。

b

在 [-10,10] 范围内指定亮度。它接受表达式,默认为 “0”。

hH 是互斥的,不能同时指定。

bhHs 选项值是包含以下常量的表达式:

n

输入帧的帧计数,从 0 开始

pts

输入帧的演示时间戳,以时间基单位表示

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

以秒表示的时间戳,如果输入时间戳未知则为 NAN

tb

输入视频的时间基

32.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))"
    

32.129.2 命令

此滤镜支持以下命令

b
s
h
H

修改输入视频的色调和/或饱和度和/或亮度。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.130 huesaturation

对输入视频流应用色调-饱和度-强度调整。

此滤镜在 RGB 色彩空间中运行。

此滤波器接受以下选项

hue

设置要应用的色调偏移(以度为单位)。默认值为 0。允许的范围是从 -180 到 180。

saturation

设置饱和度偏移。默认值为 0。允许的范围是从 -1 到 1。

强度

设置强度偏移。默认值为 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。这些选项用于饱和度和亮度处理。

lightness

设置保持亮度,默认情况下禁用。调整色调可能会改变原始 RGB 三元组的亮度,启用此选项后,亮度将保持相同的值。

32.131 hysteresis

通过连接组件将第一个流扩展到第二个流。这使得构建更强大的边缘蒙版成为可能。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

threshold

设置滤波中使用的阈值。如果像素分量值高于此值,则激活连接组件的滤波算法。默认值为 0。

hysteresis 滤波器也支持 framesync 选项。

32.132 iccdetect

从嵌入的 ICC 配置文件(如果存在)检测色彩空间,并相应地更新帧的标签。

此滤波器接受以下选项

强制

如果为 true,帧的现有色彩空间标签将始终被从 ICC 配置文件中检测到的值覆盖。否则,它们仅在包含 unknown 时才会被赋值。默认情况下启用。

32.133 iccgen

生成 ICC 配置文件并将其附加到帧。

此滤波器接受以下选项

color_primaries
color_trc

配置将为其生成 ICC 配置文件的色彩空间。默认值 auto 从输入帧的元数据推断值,并根据需要默认为 BT.709/sRGB。

有关可能的值的列表,请参阅 setparams 过滤器,但请注意,unknown 对于此过滤器无效。

强制

如果为 true,即使它会覆盖已存在的 ICC 配置文件,也会生成 ICC 配置文件。默认情况下禁用。

32.134 identity

获取两个输入视频之间的同一性得分。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它假设两个输入具有相同数量的帧,这些帧将逐一进行比较。

获得的每个分量、平均、最小和最大同一性得分通过日志系统打印。

该过滤器将每帧计算出的同一性得分存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -

32.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 过滤器作为一种低计算量的方法来清理隔行扫描标志

32.135.1 示例

详细检查视频中前 360 帧的场顺序

ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -

idet 过滤器会将分析元数据添加到每一帧,然后将其丢弃。最后,该过滤器还将打印包含统计信息的最终报告。

32.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

32.136.1 命令

此滤镜支持所有上述选项作为命令

32.137 inflate

将膨胀效果应用于视频。

此过滤器通过仅考虑高于像素的值,将像素替换为局部 (3x3) 平均值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改,默认值为 65535。如果为 0,则平面将保持不变。

32.137.1 命令

此滤镜支持所有上述选项作为命令

32.138 interlace

来自逐行扫描内容的简单隔行扫描过滤器。这会将奇数帧的上(或下)行与偶数帧的下(或上)行交错,从而使帧速率减半并保留图像高度。

   Original        Original             New Frame
   Frame 'j'      Frame 'j+1'             (tff)
  ==========      ===========       ==================
    Line 0  -------------------->    Frame 'j' Line 0
    Line 1          Line 1  ---->   Frame 'j+1' Line 1
    Line 2 --------------------->    Frame 'j' Line 2
    Line 3          Line 3  ---->   Frame 'j+1' Line 3
     ...             ...                   ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on

它接受以下可选参数

scan

这决定了隔行扫描帧是从逐行扫描帧的偶数行(tff - 默认)还是奇数行 (bff) 获取的。

lowpass

垂直低通滤波器,以避免推特隔行扫描并减少莫尔条纹。

0, 关闭

禁用垂直低通滤波器

1, linear

启用线性滤波器(默认)

2, complex

启用复杂滤波器。这将稍微减少推特和莫尔条纹,但可以更好地保留细节和主观锐度印象。

32.139 kerndeint

通过应用 Donald Graft 的自适应内核解交错来解交错输入视频。处理视频的隔行扫描部分以生成逐行扫描帧。

下面是对接受的参数的描述。

thresh

设置阈值,该阈值会影响过滤器在确定是否必须处理像素行时的容差。它必须是范围 [0,255] 内的整数,默认为 10。值为 0 将导致对每个像素应用该过程。

map

如果设置为 1,则将超过阈值的像素绘制为白色。默认值为 0。

order

设置场的顺序。如果设置为 1,则交换场;如果设置为 0,则保持场不变。默认值为 0。

sharp

如果设置为 1,则启用额外锐化。默认值为 0。

twoway

如果设置为 1,则启用双向锐化。默认值为 0。

32.139.1 示例

  • 应用默认值
    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
    
  • 启用额外锐化
    kerndeint=sharp=1
    
  • 将处理后的像素绘制为白色
    kerndeint=map=1
    

32.140 kirsch

将基尔希算子应用于输入视频流。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

scale

设置一个值,该值将与过滤后的结果相乘。

delta

设置一个值,该值将添加到过滤后的结果中。

32.140.1 命令

此滤镜支持所有上述选项作为命令

32.141 lagfun

缓慢更新较暗的像素。

此滤镜使短暂的闪光看起来更长。此滤镜接受以下选项

衰减

设置衰减因子。默认值为 0.95。允许的范围是 0 到 1。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

32.141.1 命令

此滤镜支持所有上述选项作为命令

32.142 lenscorrection

校正径向镜头畸变

此滤镜可用于校正因使用广角镜头而产生的径向畸变,从而重新校正图像。要找到正确的参数,可以使用例如 opencv 中的工具,或者简单地进行试错。要使用 opencv,请使用 opencv 源代码中的校准示例(在 samples/cpp 下),并从结果矩阵中提取 k1 和 k2 系数。

请注意,实际上相同的滤镜在 KDE 项目的开源工具 Krita 和 Digikam 中可用。

暗角滤镜(也可用于补偿镜头误差)相比,此滤镜校正图像的畸变,而 暗角校正亮度分布,因此在某些情况下可能需要同时使用这两个滤镜,但您必须注意顺序,即暗角应该在镜头校正之前还是之后应用。

32.142.1 选项

该滤镜接受以下选项

cx

图像焦点的相对 x 坐标,从而也是畸变的中心。此值的范围是 [0,1],并表示为图像宽度的分数。默认值为 0.5。

cy

图像焦点的相对 y 坐标,从而也是畸变的中心。此值的范围是 [0,1],并表示为图像高度的分数。默认值为 0.5。

k1

二次校正项的系数。此值的范围是 [-1,1]。0 表示不校正。默认值为 0。

k2

双二次校正项的系数。此值的范围是 [-1,1]。0 表示不校正。默认值为 0。

i

设置插值类型。可以是 nearestbilinear。默认值为 nearest

fc

指定未映射像素的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。默认颜色为 black@0

生成校正的公式为

r_src = r_tgt * (1 + k1 * (r_tgt / r_0)^2 + k2 * (r_tgt / r_0)^4)

其中 r_0 是图像对角线的一半,r_srcr_tgt 分别是源图像和目标图像中与焦点的距离。

32.142.2 命令

此滤镜支持所有上述选项作为命令

32.143 lensfun

通过 lensfun 库应用镜头校正 (http://lensfun.sourceforge.net/)。

lensfun 滤镜需要相机制造商、相机型号和镜头型号才能应用镜头校正。该滤镜将加载 lensfun 数据库并查询它,以查找数据库中相应的相机和镜头条目。只要可以使用给定的选项找到这些条目,滤镜就可以对帧执行校正。请注意,不完整的字符串将导致滤镜选择与给定选项的最佳匹配,并且滤镜将输出所选的相机和镜头型号(以“info”级别记录)。您必须提供所需的制造商、相机型号和镜头型号。

要获取可用制造商和型号的列表,请省略 makemodel 选项中的一个或两个。该滤镜会将完整列表以 INFO 级别发送到日志。第一列是制造商,第二列是型号。要获取可用镜头列表,请为制造商和型号设置任意值,并省略 lens_model 选项。该滤镜会将镜头完整列表以 INFO 级别发送到日志。在打印列表后,ffmpeg 工具将退出。

该滤镜接受以下选项

make

相机的制造商(例如,“佳能”)。此选项是必需的。

model

相机的型号(例如,“佳能 EOS 100D”)。此选项是必需的。

lens_model

镜头的型号(例如,“佳能 EF-S 18-55mm f/3.5-5.6 IS STM”)。此选项是必需的。

db_path

镜头数据库文件夹的完整路径。如果未设置,则滤镜将在构建库时尝试从安装路径加载数据库。默认值为未设置。

mode

要应用的校正类型。以下值是有效选项

vignetting

启用修复镜头暗角。

geometry

启用修复镜头几何形状。这是默认值。

subpixel

启用修复色差。

vig_geo

启用修复镜头暗角和镜头几何形状。

vig_subpixel

启用修复镜头暗角和色差。

distortion

启用修复镜头几何形状和色差。

all

启用所有可能的校正。

focal_length

图像/视频的焦距(变焦;视频的焦距应恒定)。例如,一个 18-55mm 镜头的焦距范围为 [18-55],因此在使用该镜头时应选择该范围内的值。默认值为 18。

aperture

图像/视频的光圈(视频的光圈应恒定)。请注意,光圈仅用于暗角校正。默认值为 3.5。

focus_distance

图像/视频的焦点距离(视频的焦点距离应恒定)。请注意,焦点距离仅用于暗角校正,并且只会略微影响暗角校正过程。如果未知,则将其保留为默认值(即 1000)。

scale

转换后应用的缩放因子。校正后,视频不再一定是矩形的。此参数控制结果图像中可见的区域大小。值 0 表示将自动选择一个值,以便输出图像中几乎没有或没有未映射的区域。1.0 表示不进行额外的缩放。较低的值可能会使更多校正后的图像可见,而较高的值可能会避免输出中出现未映射的区域。

target_geometry

输出图像/视频的目标几何形状。以下值是有效选项

rectilinear(默认)
fisheye
panoramic
equirectangular
fisheye_orthographic
fisheye_stereographic
fisheye_equisolid
fisheye_thoby
reverse

应用图像校正的反向操作(不是校正畸变,而是应用畸变)。

interpolation

校正畸变时使用的插值类型。以下值是有效选项

nearest
linear(默认)
lanczos

32.143.1 示例

  • 应用镜头校正,制造商为“佳能”,相机型号为“佳能 EOS 100D”,镜头型号为“佳能 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
    

32.144 lcevc

基于 liblcevc_dec 的低复杂度增强视频编解码器滤镜 (https://github.com/v-novaltd/LCEVCdec)。

32.145 libplacebo

基于 libplacebo 的灵活 GPU 加速处理滤镜 (https://code.videolan.org/videolan/libplacebo)。

32.145.1 选项

此滤镜的选项分为以下几部分

32.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

设置输出帧率。这可以是 Rational 值,例如 60000/1001。如果设置为特殊字符串 none(默认值),则输入时间戳将未经修改地传递到输出。否则,将根据 frame_mixer 选项确定的方式,对输入视频帧进行插值,以将视频重新缩放到指定的目标帧率。

format

设置输出格式覆盖。如果未设置(默认值),则帧将以与各自的输入帧相同的格式输出。否则,将执行格式转换。

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
范围

配置输出帧将以哪种色彩空间传递。默认值 auto 以与输入帧相同的格式输出帧,从而不会发生任何更改。对于任何其他值,将执行转换。

有关可能的值的列表,请参见 setparams 滤镜。

apply_filmgrain

如果源帧中存在电影胶片颗粒(例如 AV1 或 H.274),则应用并从输出中剥离。默认启用。

apply_dolbyvision

如果源帧中存在杜比视界 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 开始。

32.145.1.2 缩放

本节中的选项控制 libplacebo 如何执行放大和(如果需要)缩小。请注意,libplacebo 将始终在内部处理 4:4:4 内容,因此任何亚采样色度格式(如 yuv420p)都必须作为渲染过程的一部分进行上采样和下采样。这意味着即使源分辨率和目标分辨率相同,缩放也可能生效。

upscaler
downscaler

配置用于放大和缩小的滤镜内核。各自的默认值为 spline36mitchell。有关可能值的完整列表,请将 help 传递给这些选项。最重要的值是

none

强制使用内置 GPU 纹理采样(通常为双线性)。速度极快,但质量较差,尤其是在缩小时。

bilinear

双线性插值。通常可以在 GPU 上免费完成,除非这样做会导致混叠。速度快且质量低。

nearest

最近邻插值。锐利但混叠严重。

oversample

在视觉上与最近邻插值相似但试图保留像素宽高比的算法。对于像素艺术来说很好,因为它会导致艺术外观的最小失真。

lanczos

标准 sinc-sinc 插值内核。

spline36

lanczos 的三次样条近似。性能没有差异,但振铃略少。

ewa_lanczos

基于 jinc-sinc 内核的 lanczos 的椭圆加权平均版本。这也通常简称为“Jinc 缩放”。速度慢但质量非常高。

gaussian

高斯内核。具有某些理想的数学特性,但主观上非常模糊。

mitchell

Mitchell 和 Netravali 推荐的具有参数的三次 BC 样条。振铃非常少。

frame_mixer

控制用于时间上混合帧的内核。默认值为 none,它禁用帧混合。有关可能值的完整列表,请将 help 传递给此选项。最重要的值是

none

禁用帧混合,产生与“最近邻”语义等效的结果。

oversample

对输入视频进行过采样,以创建“平滑运动”类型的效果:如果输出帧正好落在两个视频帧之间的过渡处,则会根据相对重叠进行混合。当希望保留原始主观外观时,这是推荐的选项。

mitchell_clamp

更大的滤波器内核,以平滑的方式插值多个帧,旨在尽可能消除振铃和其他伪影。这是在需要最大视觉平滑度的任何地方推荐的选项。

linear

帧之间的线性混合/淡入淡出。特别适用于构建例如幻灯片。

lut_entries

配置缩放器 LUT 的大小,范围从1256。默认值0将选择 libplacebo 的内部默认值,通常为64

antiringing

启用抗振铃(对于非 EWA 滤波器)。该值(介于0.01.0之间)配置抗振铃算法的强度。如果设置得太高,可能会增加混叠。默认情况下禁用。

sigmoid

在上采样期间启用 Sigmoid 压缩。稍微减少振铃。默认情况下启用。

32.145.1.3 去带

Libplacebo 自带一个内置的去带状滤波,擅长抵消许多常见的带状和块状来源。如果需要高质量,强烈建议启用此功能。

deband

启用(快速)去带状算法。默认情况下禁用。

deband_iterations

去带状算法的去带状迭代次数。每次迭代都以逐渐增大的半径(和减小的阈值)执行。推荐值在14的范围内。默认为1

deband_threshold

去带状滤波强度。更高的数值会导致更激进的去带状。默认为4.0

deband_radius

去带状滤波半径。较大的半径更适合缓慢的梯度,而较小的半径更适合陡峭的梯度。默认为16.0

deband_grain

要添加的额外输出颗粒量。有助于隐藏缺陷。默认为6.0

32.145.1.4 颜色调整

一系列主观颜色控制。不是很严格,因此确切的效果会因输入原色和色彩空间而有所不同。

brightness

亮度提升,介于-1.01.0之间。默认为0.0

contrast

对比度增益,介于0.016.0之间。默认为1.0

saturation

饱和度增益,介于0.016.0之间。默认为1.0

hue

色调偏移(以弧度为单位),介于-3.143.14之间。默认为0.0。这将旋转 UV 子向量,对于 RGB 输入,默认为 BT.709 系数。

gamma

伽马调整,介于0.016.0之间。默认为1.0

cones

用于色盲模拟的锥体模型。接受lms的任意组合。以下是一些示例

m

Deuteranomaly / deuteranopia(影响 3%-4% 的人口)

l

Protanomaly / protanopia(影响 1%-2% 的人口)

l+m

单色性(非常罕见)

l+m+s

全色盲(完全丧失白天视觉,极其罕见)

cone-strength

cones指定的锥体的增益因子,介于0.010.0之间。值为1.0表示颜色视觉没有变化。值0.0(默认值)模拟完全丧失这些锥体。大于1.0的值会导致夸大锥体之间的差异,这可能有助于补偿降低的颜色视觉。

32.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会禁用帧直方图测量,而是使用真实峰值亮度进行色调映射。

32.145.1.6 色调映射

当处理宽色域或 HDR 内容之间的不匹配时,本节中的选项控制 libplacebo 如何执行色调映射和色域映射。一般来说,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 被禁用时无效。

32.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

启用时间抖动。默认禁用。

32.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

将完整的自定义着色器指定为原始字符串。

32.145.1.9 调试/性能

本节中的所有选项默认关闭。当试图以牺牲质量为代价来尽可能提高性能时,它们可能会有所帮助。

skip_aa

在缩小比例时禁用抗锯齿。

polar_cutoff

将此绝对值以下的极坐标 (EWA) 缩放器内核截断,介于 0.01.0 之间。

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置 GPU 采样(强制 LUT)。

disable_fbos

强制禁用 FBO,导致几乎所有功能丧失,但提供尽可能快的速度。

32.145.2 命令

此过滤器几乎支持以上所有选项作为命令

32.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
    

32.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 的池化方法。选项有 min, harmonic_meanmean (默认值)。

n_threads

设置初始化 libvmaf 时使用的线程数。默认值:0,不使用线程。

n_subsample

设置要使用的帧子采样间隔。

此滤镜还支持 framesync 选项。

32.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 -
    

32.147 libvmaf_cuda

这是 libvmaf 滤波器的 CUDA 变体。它只接受 CUDA 帧。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装该库后,可以使用以下命令启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf

32.147.1 示例

  • 基本用法,显示使用 scale_cuda 的 CUVID 硬件解码和 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 -
    

32.148 limitdiff

使用第二个和可选的第三个视频流应用有限差异滤波器。

该滤镜接受以下选项

threshold

设置允许视频流之间存在某些差异时要使用的阈值。任何低于或等于此阈值的绝对差值将从第一个视频流中选取像素分量。

elasticity

设置处理视频流时软阈值的弹性。此值与第一个值相乘得到第二个阈值。任何大于或等于第二个阈值的绝对差值将从第二个视频流中选取像素分量。对于介于这两个阈值之间的值,将使用第一个和第二个视频流之间的线性插值。

reference

启用参考(第三个)视频流处理。默认情况下禁用。如果设置,此视频流将用于计算与第一个视频流的绝对差值。

planes

指定将要处理的平面。默认为所有可用的平面。

32.148.1 命令

此过滤器支持以上所有选项作为 命令,除了选项 ‘reference’。

32.149 limiter

将像素分量值限制在指定的范围 [min, max] 内。

该滤镜接受以下选项

min

下限。默认为允许的输入最小值。

max

上限。默认为允许的输入最大值。

planes

指定将要处理的平面。默认为所有可用的平面。

32.149.1 命令

此滤镜支持所有上述选项作为命令

32.150 loop

循环播放视频帧。

该滤镜接受以下选项

loop

设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。

size

设置最大帧数。默认值为 0。

start

设置循环的第一帧。默认值为 0。

时间

设置循环开始时间(以秒为单位)。仅当名为 start 的选项设置为 -1 时使用。

32.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
    

32.151 lut1d

将 1D LUT 应用于输入视频。

该滤镜接受以下选项

file

设置 1D LUT 文件名。

当前支持的格式

cube

Iridas

csp

cineSpace

interp

选择插值模式。

可用的值有

nearest

使用最近定义的点的值。

linear

使用线性插值对值进行插值。

cosine

使用余弦插值对值进行插值。

cubic

使用立方插值对值进行插值。

spline

使用样条插值对值进行插值。

32.151.1 命令

此滤镜支持所有上述选项作为命令

32.152 lut3d

将 3D LUT 应用于输入视频。

该滤镜接受以下选项

file

设置 3D LUT 文件名。

当前支持的格式

3dl

AfterEffects

cube

Iridas

dat

DaVinci

m3d

Pandora

csp

cineSpace

interp

选择插值模式。

可用的值有

nearest

使用最近定义的点的值。

trilinear

使用定义立方体的 8 个点对值进行插值。

tetrahedral

使用四面体对值进行插值。

pyramid

使用金字塔对值进行插值。

prism

使用棱镜对值进行插值。

32.152.1 命令

此滤镜支持使用 interp 选项,详见 命令

32.153 lumakey

将某些亮度值转换为透明度。

该滤镜接受以下选项

threshold

设置将用作透明度基础的亮度。默认值为 0

tolerance

设置要抠出的亮度值范围。默认值为 0.01

softness

设置柔和度范围。默认值为 0。使用此值控制从零到完全透明的逐渐过渡。

32.153.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.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"。

32.154.1 命令

此滤镜支持与选项相同的 命令

32.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'
    

32.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"。

32.155.1 命令

此过滤器支持以上所有选项作为 命令,除了选项 d

32.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)))'
    

32.156 maskedclamp

使用第二个和第三个输入流钳制第一个输入流。

返回第一个流的值,该值介于第二个输入流 - undershoot 和第三个输入流 + overshoot 之间。

此滤波器接受以下选项

undershoot

默认值为 0

overshoot

默认值为 0

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

32.156.1 命令

此滤镜支持所有上述选项作为命令

32.157 maskedmax

使用第二个输入流与第一个输入流之间的绝对差值,以及第三个输入流与第一个输入流之间的绝对差值,将第二个和第三个输入流合并到输出流中。如果第二个绝对差值大于第一个绝对差值,则从第二个输入流中选取值;否则从第三个输入流中选取值。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

32.157.1 命令

此滤镜支持所有上述选项作为命令

32.158 maskedmerge

使用第三个输入流中的每个像素权重,将第一个输入流与第二个输入流合并。

第三个流的像素分量值为0表示第一个流的像素分量保持不变,而最大值(例如,对于8位视频为255)表示第二个流的像素分量保持不变。中间值定义了两个输入流的像素分量之间的合并量。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

32.158.1 命令

此滤镜支持所有上述选项作为命令

32.159 maskedmin

使用第二个输入流与第一个输入流之间的绝对差值,以及第三个输入流与第一个输入流之间的绝对差值,将第二个和第三个输入流合并到输出流中。如果第二个绝对差值小于第一个绝对差值,则从第二个输入流中选取值;否则从第三个输入流中选取值。

此滤波器接受以下选项

planes

设置哪些平面将作为位图处理,未处理的平面将从第一个流复制。默认值为 0xf,所有平面都将被处理。

32.159.1 命令

此滤镜支持所有上述选项作为命令

32.160 maskedthreshold

通过比较两个视频流的绝对差值与固定阈值来选择像素。

如果第一个和第二个视频流的像素分量之间的绝对差值等于或小于用户提供的阈值,则选择第一个视频流的像素分量;否则,选择第二个视频流的像素分量。

此滤波器接受以下选项

threshold

设置从两个输入视频流的绝对差值中选择像素时使用的阈值。

planes

设置哪些平面将作为位图处理,未处理的平面将从第二个流中复制。默认值为 0xf,表示所有平面都将被处理。

mode

设置过滤器操作的模式。可以是 absdiff。默认为 abs

32.160.1 命令

此滤镜支持所有上述选项作为命令

32.161 maskfun

从输入视频创建掩码。

例如,在 tblend 过滤器之后创建运动掩码很有用。

此滤波器接受以下选项

low

设置低阈值。任何小于或等于此值的像素分量都将被设置为 0。

high

设置高阈值。任何高于此值的像素分量都将被设置为当前像素格式允许的最大值。

planes

设置要过滤的平面,默认情况下会过滤所有可用平面。

fill

用此值填充所有帧像素。

总和

设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,则输出帧将完全填充由 fill 选项设置的值。当与 tblend 过滤器结合使用时,通常对场景变化很有用。

32.161.1 命令

此滤镜支持所有上述选项作为命令

32.162 mcdeint

应用运动补偿去隔行处理。

它需要每个帧一个场作为输入,因此必须与 yadif=1/3 或等效项一起使用。

此滤波器接受以下选项

mode

设置去隔行模式。

它接受以下值之一

fast
medium
slow

使用迭代运动估计

extra_slow

类似于“slow”,但使用多个参考帧。

默认值为“fast”。

默认值为 send_field

设置输入视频假设的图像场奇偶性。它必须是以下值之一

0, tff

假设顶场优先

1, bff

假设底场优先

默认值为“bff”。

qp

设置内部编码器使用的每个块的量化参数 (QP)。

较高的值应该会导致更平滑的运动矢量场,但单个矢量可能不太理想。默认值为 1。

32.163 median

从由半径定义的特定矩形中选择中值像素。

此滤波器接受以下选项

半径

设置水平半径大小。默认值为 1。允许的范围是 1 到 127 的整数。

planes

设置要处理的平面。默认为 15,即所有可用平面。

radiusV

设置垂直半径大小。默认值为 0。允许的范围是 0 到 127 的整数。如果为 0,则将从水平 radius 选项中选择值。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

32.163.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.164 mergeplanes

合并来自多个视频流的颜色通道分量。

该过滤器最多接受 4 个输入流,并将选定的输入平面合并到输出视频。

此滤波器接受以下选项

mapping

设置输入到输出平面的映射。默认为 0

映射以位图形式指定。它应该以十六进制数字的形式指定,例如 0xAa[Bb[Cc[Dd]]]。“Aa”描述了输出流第一个平面的映射。“A”设置要使用的输入流的编号(从 0 到 3),“a”设置要使用的相应输入的平面编号(从 0 到 3)。其余的映射类似,“Bb”描述了输出流第二个平面的映射,“Cc”描述了输出流第三个平面的映射,“Dd”描述了输出流第四个平面的映射。

format

设置输出像素格式。默认为 yuva444p

map0s
map1s
map2s
map3s

设置输出第 N 个平面的输入到输出流映射。默认为 0

map0p
map1p
map2p
map3p

设置输出第 N 个平面的输入到输出平面映射。默认为 0

32.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
    

32.165 mestimate

使用块匹配算法估计和导出运动矢量。运动矢量存储在帧边数据中,供其他过滤器使用。

此滤波器接受以下选项

method

指定运动估计方法。接受以下值之一

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强的预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认值为“esa”。

mb_size

宏块大小。默认为 16

search_param

搜索参数。默认为 7

32.166 midequalizer

使用两个视频流应用中间图像均衡效果。

中间图像均衡调整一对图像以使其具有相同的直方图,同时尽可能保持其动态。例如,它对于匹配来自一对立体相机的曝光很有用。

此过滤器有两个输入和一个输出,它们必须具有相同的像素格式,但大小可能不同。过滤器的输出是第一个输入,使用两个输入的中间直方图进行调整。

此滤镜接受以下选项

planes

设置要处理的平面。默认为 15,即所有可用平面。

32.167 minterpolate

使用运动插值将视频转换为指定的帧率。

此滤波器接受以下选项

fps

指定输出帧率。可以使用有理数表示,例如 60000/1001。如果 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.

32.168 mix

将多个视频输入流混合成一个视频流。

下面是接受选项的说明。

输入

输入数量。如果未指定,则默认为 2。

权重

按顺序指定每个输入视频流的权重。每个权重用空格分隔。如果权重的数量小于 frames 的数量,则最后指定的权重将用于所有剩余的未设置权重。

scale

指定比例,如果设置了比例,则将每个权重与像素值相乘的总和乘以比例,以给出最终目标像素值。默认情况下,scale 会自动缩放为权重之和。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

duration

指定如何确定流的结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

32.168.1 命令

此滤镜支持以下命令

权重
scale
planes

语法与具有相同名称的选项相同。

32.169 monochrome

使用自定义颜色滤镜将视频转换为灰度。

下面是接受选项的说明。

cb

设置色度蓝色点。允许的范围是从 -1 到 1。默认值为 0。

cr

设置色度红色点。允许的范围是从 -1 到 1。默认值为 0。

size

设置颜色滤镜大小。允许的范围是从 0.1 到 10。默认值为 1。

high

设置高光强度。允许的范围是从 0 到 1。默认值为 0。

32.169.1 命令

此滤镜支持所有上述选项作为命令

32.170 morpho

此滤镜允许应用主要的形态学灰度变换,使用第二个输入流中设置的任意结构进行腐蚀和膨胀。

腐蚀膨胀滤镜中朴素的实现和速度慢得多的性能不同,当速度至关重要时,应改用 morpho 滤镜。

以下是接受的选项的描述:

mode

设置要应用的形态学变换,可以是:

erode
dilate
open
close
gradient
tophat
blackhat

默认值为 erode

planes

设置要过滤的平面,默认情况下,所有平面(除了 alpha 平面)都会被过滤。

structure

设置将从第二个输入流处理哪个结构视频帧,可以是 firstall。默认值为 all

morpho 滤镜还支持 framesync 选项。

32.170.1 命令

此滤镜支持与选项相同的 命令

32.171 mpdecimate

丢弃与前一帧没有太大差异的帧,以降低帧率。

此滤镜的主要用途是用于超低比特率编码(例如,通过拨号调制解调器进行流式传输),但在理论上,它可用于修复错误地进行了反向电影电视转换的影片。

下面是接受选项的说明。

max

设置可以丢弃的连续帧的最大数量(如果为正值),或丢弃帧之间的最小间隔(如果为负值)。如果值为 0,则会丢弃帧,而不考虑之前按顺序丢弃的帧数。

默认值为 0。

keep

设置在开始丢弃它们之前要忽略的连续相似帧的最大数量。如果值为 0,则会丢弃帧,而不考虑之前按顺序相似的帧数。

默认值为 0。

hi
lo
frac

设置丢弃阈值。

hilo 的值用于 8x8 像素块,表示实际的像素值差异,因此阈值 64 对应于每个像素 1 个单位的差异,或在块上以不同的方式分布。

如果没有 8x8 块的差异超过 hi 的阈值,并且不超过 frac 块(1 表示整个图像)的差异超过 lo 的阈值,则该帧是丢弃的候选帧。

hi 的默认值为 64*12,lo 的默认值为 64*5,frac 的默认值为 0.33。

32.172 msad

获取两个输入视频之间的 MSAD(平均绝对差之和)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它假设两个输入具有相同数量的帧,这些帧将逐一进行比较。

通过日志系统打印获得的每个分量、平均值、最小值和最大值 MSAD。

该滤镜将每帧计算出的 MSAD 存储在帧元数据中。

此滤镜还支持 framesync 选项。

在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

32.173 multiply

将第一个视频流的像素值乘以第二个视频流的像素值。

该滤镜接受以下选项

scale

设置应用于第二个视频流的比例。默认值为 1。允许的范围是从 09

offset

设置应用于第二个视频流的偏移量。默认值为 0.5。允许的范围是从 -11

planes

指定将要处理的输入视频流中的平面。默认情况下,将处理所有平面。

32.173.1 命令

此滤镜支持与选项相同的 命令

32.174 negate

反转(取反)输入视频。

它接受以下选项

components

设置要取反的分量。

分量的可用值为:

y
u
v
a
r
g
b
negate_alpha

值为 1 时,如果存在 alpha 分量,则会对其取反。默认值为 0。

32.174.1 命令

此滤镜支持与选项相同的 命令

32.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,表示自动。

32.176 nnedi

使用神经网络边缘导向插值对视频进行反交错处理。

此滤波器接受以下选项

权重

强制选项,没有二进制文件,滤波器无法工作。目前可以在这里找到该文件:https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

设置要进行反交错处理的帧,默认值为 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

32.176.1 命令

此滤波器支持与选项相同的 命令,不包括 weights 选项。

32.177 noformat

强制 libavfilter 不使用指定的任何像素格式作为下一个滤波器的输入。

它接受以下参数

pix_fmts

一个以“|”分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

32.177.1 示例

  • 强制 libavfilter 使用与 yuv420p 不同的格式作为 vflip 滤波器的输入
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式
    noformat=yuv420p|yuv444p|yuv410p
    

32.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

均匀噪声(否则为高斯噪声)

32.178.1 示例

向输入视频添加时间和均匀噪声

noise=alls=20:allf=t+u

32.179 normalize

标准化 RGB 视频(也称为直方图拉伸、对比度拉伸)。参见:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每个帧的每个通道,滤波器计算输入范围,并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑色到纯白色的全动态范围。

可以在输入范围上使用时间平滑来减少当小的暗或亮物体进入或离开场景时引起的闪烁(亮度快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且像摄像机一样,它可能会导致视频过度曝光或曝光不足一段时间。

R、G、B 通道可以独立标准化,这可能会导致一些颜色偏移,或者可以链接在一起作为单个通道,从而防止颜色偏移。链接的标准化保留色调。独立标准化则不然,因此可以用于去除一些色偏。独立和链接的标准化可以以任何比例组合。

标准化滤波器接受以下选项

blackpt
whitept

定义输出范围的颜色。最小输入值映射到 blackpt。最大输入值映射到 whitept。默认值分别为黑色和白色。为 blackpt 指定白色,为 whitept 指定黑色将给出颜色反转的标准化视频。可以使用灰色阴影来减小动态范围(对比度)。在此处指定饱和颜色可以创建一些有趣的效果。

smoothing

用于时间平滑的先前帧数。使用当前帧和 smoothing 个先前帧上的滚动平均值来平滑每个通道的输入范围。默认值为 0(无时间平滑)。

independence

控制独立(颜色偏移)通道标准化与链接(颜色保留)标准化的比例。0.0 表示完全链接,1.0 表示完全独立。默认为 1.0(完全独立)。

强度

滤波器的整体强度。1.0 表示完全强度。0.0 是相当昂贵的空操作。默认为 1.0(完全强度)。

32.179.1 命令

此滤波器支持与选项相同的 命令,不包括 smoothing 选项。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.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

32.180 null

将视频源原封不动地传递到输出。

32.181 ocr

光学字符识别

此滤镜使用 Tesseract 进行光学字符识别。要启用此滤镜的编译,您需要使用 --enable-libtesseract 配置 FFmpeg。

它接受以下选项

datapath

设置 tesseract 数据的数据路径。默认值是使用安装时设置的路径。

language

设置语言,默认值为 "eng"。

whitelist

设置字符白名单。

blacklist

设置字符黑名单。

该滤镜将识别的文本作为帧元数据 lavfi.ocr.text 导出。该滤镜将识别的单词的置信度作为帧元数据 lavfi.ocr.confidence 导出。

32.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 滤镜;请参阅以下小节。

32.182.1 膨胀

通过使用特定的结构元素来膨胀图像。它对应于 libopencv 函数 cvDilate

它接受以下参数:struct_el|nb_iterations

struct_el 表示一个结构元素,其语法为:colsxrows+anchor_xxanchor_y/shape

colsrows 表示结构元素的列数和行数,anchor_xanchor_y 表示锚点,shape 表示结构元素的形状。shape 必须是 "rect"、"cross"、"ellipse" 或 "custom"。

如果 shape 的值为 "custom",则后面必须跟一个形如 "=filename" 的字符串。具有名称 filename 的文件被假定为表示一个二进制图像,其中每个可打印字符对应一个亮像素。当使用自定义的 shape 时,将忽略 colsrows,而是假定读取文件的列数和行数。

struct_el 的默认值为 "3x3+0x0/rect"。

nb_iterations 指定将变换应用于图像的次数,默认为 1。

一些示例

# Use the default values
ocv=dilate

# Dilate using a structuring element with a 5x5 cross, iterating two times
ocv=filter_name=dilate:filter_params=5x5+2x2/cross|2

# Read the shape from the file diamond.shape, iterating two times.
# The file diamond.shape may contain a pattern of characters like this
#   *
#  ***
# *****
#  ***
#   *
# The specified columns and rows are ignored
# but the anchor point coordinates are not
ocv=dilate:0x0+2x2/custom=diamond.shape|2

32.182.2 腐蚀

通过使用特定的结构元素来腐蚀图像。它对应于 libopencv 函数 cvErode

它接受以下参数:struct_el:nb_iterations,其语法和语义与 dilate 滤镜相同。

32.182.3 平滑

平滑输入视频。

该滤镜接受以下参数:type|param1|param2|param3|param4

type 是要应用的平滑滤镜的类型,必须是以下值之一:"blur"、"blur_no_scale"、"median"、"gaussian" 或 "bilateral"。默认值为 "gaussian"。

param1param2param3param4 的含义取决于平滑类型。param1param2 接受整数正值或 0。param3param4 接受浮点值。

param1 的默认值为 3。其他参数的默认值为 0。

这些参数对应于分配给 libopencv 函数 cvSmooth 的参数。

32.183 oscilloscope

2D 视频示波器。

用于测量空间脉冲、阶跃响应、色度延迟等。

它接受以下参数

x

设置示波器中心 x 位置。

y

设置示波器中心 y 位置。

s

设置示波器大小,相对于帧对角线。

t

设置示波器倾斜/旋转。

o

设置轨迹不透明度。

tx

设置轨迹中心 x 位置。

ty

设置轨迹中心 y 位置。

tw

设置轨迹宽度,相对于帧的宽度。

th

设置轨迹高度,相对于帧的高度。

c

设置要跟踪的组件。默认情况下,它跟踪前三个组件。

g

绘制轨迹网格。默认情况下启用。

st

绘制一些统计信息。默认情况下启用。

sc

绘制示波器。默认情况下启用。

32.183.1 命令

启用此选项后,像“绿色”或“红色”这样的字面颜色将不再有意义。这可以用来将精确的 YUV 值作为十六进制数传递。

如果指定的表达式无效,则保持其当前值。

32.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
    

32.184 overlay

将一个视频覆盖在另一个视频之上。

它接受两个输入并有一个输出。第一个输入是 "main" 视频,第二个输入覆盖在上面。

它接受以下参数

下面是接受选项的说明。

x
y

设置覆盖视频在主视频上的 x 和 y 坐标的表达式。两个表达式的默认值均为 "0"。如果表达式无效,则将其设置为一个巨大的值(这意味着覆盖层将不会显示在输出可见区域内)。

eof_action

请参阅 framesync

eval

设置何时评估 xy 的表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算一次表达式

frame

为每个传入帧计算表达式

默认值为 ‘frame’。

shortest

请参阅 framesync

format

设置输出视频的格式。

它接受以下值

yuv420

强制 YUV 4:2:0 8 位平面输出

yuv420p10

强制 YUV 4:2:0 10 位平面输出

yuv422

强制 YUV 4:2:2 8 位平面输出

yuv422p10

强制 YUV 4:2:2 10 位平面输出

yuv444

强制 YUV 4:4:4 8 位平面输出

yuv444p10

强制 YUV 4:4:4 10 位平面输出

rgb

强制 RGB 8 位打包输出

gbrp

强制 RGB 8 位平面输出

auto

自动选择格式

默认值为 ‘yuv420’。

repeatlast

请参阅 framesync

alpha

设置覆盖视频的 alpha 格式,可以是 straightpremultiplied。默认值为 straight

xy 表达式可以包含以下参数。

main_w, W
main_h, H

主输入宽度和高度。

overlay_w, w
overlay_h, h

覆盖输入宽度和高度。

x
y

xy 计算的值。它们会为每个新帧计算。

输入色度图像的宽度和高度(以像素为单位)。
hsub

输出格式的水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

n

输入帧数,从 0 开始

pos

输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用

t

时间戳,以秒为单位表示。如果输入时间戳未知,则为 NAN。

此滤镜还支持 framesync 选项。

请注意,nt 变量仅在每帧进行评估时可用,并且当 eval 设置为 ‘init’ 时,将评估为 NAN。

请注意,帧是按照时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好将两个输入传递给一个 setpts=PTS-STARTPTS 滤镜,使其在相同的时间戳 0 开始,就像 movie 滤镜的示例一样。

您可以链接更多覆盖层,但您应该测试这种方法的效率。

32.184.1 命令

此滤镜支持以下命令

x
y

修改覆盖输入的 x 和 y。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.184.2 示例

  • 在主视频的右下角 10 像素处绘制覆盖层
    overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

    使用命名选项,上面的示例变为

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
    
  • 使用带有 -filter_complex 选项的 ffmpeg 工具,在输入的左下角插入一个透明 PNG 徽标
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用 ffmpeg 工具插入 2 个不同的透明 PNG 徽标(第二个徽标在右下角)
    ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加一个透明的颜色层;WxH 必须指定覆盖滤镜的主输入大小
    [email protected]:size=WxH [over]; [in][over] overlay [out]
    
  • 使用 ffplay 工具并排播放原始视频和经过滤的版本(此处使用 deshake 滤镜)
    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
    

    上述命令与以下命令相同

    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
    
  • 制作一个从屏幕左上角向右滑动出现的覆盖层,从时间 2 开始
    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
    
  • 通过将两个输入视频并排放置来合成输出
    ffmpeg -i left.avi -i right.avi -filter_complex "
    nullsrc=size=200x100 [background];
    [0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
    [1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
    [background][left]       overlay=shortest=1       [background+left];
    [background+left][right] overlay=shortest=1:x=100 [left+right]
    "
    
  • 通过对某个区域应用 delogo 滤镜来遮罩视频的 10-20 秒
    ffmpeg -i test.avi -codec:v:0 wmv2 -ar 11025 -b:v 9000k
    -vf '[in]split[split_main][split_delogo];[split_delogo]trim=start=360:end=371,delogo=0:0:640:480[delogoed];[split_main][delogoed]overlay=eof_action=pass[out]'
    masked.avi
    
  • 级联多个覆盖层
    nullsrc=s=200x200 [bg];
    testsrc=s=100x100, split=4 [in0][in1][in2][in3];
    [in0] lutrgb=r=0, [bg]   overlay=0:0     [mid0];
    [in1] lutrgb=g=0, [mid0] overlay=100:0   [mid1];
    [in2] lutrgb=b=0, [mid1] overlay=0:100   [mid2];
    [in3] null,       [mid2] overlay=100:100 [out0]
    

32.185 overlay_cuda

将一个视频覆盖在另一个视频之上。

这是 overlay 滤镜的 CUDA 变体。它只接受 CUDA 帧。底层输入像素格式必须匹配。

它接受两个输入并有一个输出。第一个输入是 "main" 视频,第二个输入覆盖在上面。

它接受以下参数

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 选项。

32.186 owdenoise

应用 Overcomplete Wavelet 去噪器。

该滤镜接受以下选项

depth

设置深度。

较大的深度值将更多地对较低频率分量进行去噪,但会减慢滤波速度。

必须是 8-16 范围内的整数,默认值为 8

luma_strength, ls

设置亮度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

chroma_strength, cs

设置色度强度。

必须是 0-1000 范围内的双精度值,默认值为 1.0

32.187 pad

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下参数

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,则将更改它们,以便输入图像位于填充区域的中心。

颜色

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分

color 的默认值为“黑色”。

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

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

32.187.1 示例

  • 使用颜色“紫色”向输入视频添加填充。输出视频大小为 640x480,输入视频的左上角放置在第 0 列,第 40 行
    pad=640:480:0:40:violet
    

    上面的示例等效于以下命令

    pad=width=640:height=480:x=0:y=40:color=violet
    
  • 填充输入以获得尺寸增加 3/2 的输出,并将输入视频放置在填充区域的中心
    pad="3/2*iw:3/2*ih:(ow-iw)/2:(oh-ih)/2"
    
  • 填充输入以获得一个正方形输出,其大小等于输入宽度和高度之间的最大值,并将输入视频放置在填充区域的中心
    pad="max(iw\,ih):ow:(ow-iw)/2:(oh-ih)/2"
    
  • 填充输入以获得 16:9 的最终宽高比
    pad="ih*16/9:ih:(ow-iw)/2:(oh-ih)/2"
    
  • 对于变形视频,为了正确设置输出显示宽高比,必须根据以下关系在表达式中使用 sar
    (ih * X / ih) * sar = output_dar
    X = output_dar / sar
    

    因此,前面的示例需要修改为

    pad="ih*16/9/sar:ih:(ow-iw)/2:(oh-ih)/2"
    
  • 将输出大小加倍,并将输入视频放置在输出填充区域的右下角
    pad="2*iw:2*ih:ow-iw:oh-ih"
    

32.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 日志级别也可见。

32.188.1 示例

  • 使用 ffmpeg 生成给定视频的代表性调色板
    ffmpeg -i input.mkv -vf palettegen palette.png
    

32.189 paletteuse

使用调色板对输入视频流进行下采样。

该滤镜接受两个输入:一个视频流和一个调色板。调色板必须是 256 像素的图像。

它接受以下选项

抖动

选择抖动模式。可用的算法有

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 在苹果电脑公司开发的 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

32.189.1 示例

  • 使用调色板(例如使用 palettegen 生成)来使用 ffmpeg 编码 GIF。
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

32.190 perspective

校正视频透视,使其不再垂直于屏幕录制。

以下是对接受的参数的描述。

x0
y0
x1
y1
x2
y2
x3
y3

设置左上角、右上角、左下角和右下角的坐标表达式。默认值为 0:0:W:0:0:H:W:H,此时透视将保持不变。如果 sense 选项设置为 source,则指定的点将被发送到目标视频的角。如果 sense 选项设置为 destination,则源视频的角将被发送到指定的坐标。

表达式可以使用以下变量

W
H

视频帧的宽度和高度。

输入

输入帧计数。

on

输出帧计数。

interpolation

设置透视校正的插值方式。

它接受以下值

linear
cubic

默认值为“linear”。

sense

设置坐标选项的解释方式。

它接受以下值

0, source

将源视频中给定坐标指定的点发送到目标视频的角。

1, destination

将源视频的角发送到目标视频中给定坐标指定的点。

默认值为“source”。

eval

设置何时计算坐标 x0,y0,...x3,y3 的表达式。

它接受以下值

init

仅在过滤器初始化期间或处理命令时计算一次表达式

frame

为每个传入帧计算表达式

默认值为 ‘init’。

32.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’ 之间进行选择。

32.191.1 命令

此滤镜支持所有上述选项作为命令

32.192 photosensitivity

减少视频中的各种闪烁,以帮助患有癫痫的用户。

它接受以下选项

帧数,f

设置过滤时要使用的帧数。默认值为 30。

threshold, t

设置检测阈值因子。默认值为 1。较低的值更严格。

跳过

设置在采样帧时要跳过的像素数。默认值为 1。允许的范围是 1 到 1024。

bypass

保持帧不变。默认情况下禁用。

32.193 pixdesctest

像素格式描述符测试过滤器,主要用于内部测试。输出视频应等于输入视频。

例如

format=monow, pixdesctest

可用于测试单色白色像素格式描述符定义。

32.194 pixelize

将像素化应用于视频流。

该滤镜接受以下选项

宽度,w
高度,h

设置将用于像素化的块尺寸。默认值为 16

mode, m

设置使用的像素化模式。

可能的值为

avg
min
max

默认值为 avg

平面,p

设置要过滤的平面。默认值是过滤所有平面。

32.194.1 命令

此过滤器支持所有选项作为命令

32.195 pixscope

显示颜色通道的采样值。主要用于检查颜色和色阶。支持的最小分辨率为 640x480。

过滤器接受以下选项

x

设置范围 X 位置,X 轴上的相对偏移。

y

设置范围 Y 位置,Y 轴上的相对偏移。

w

设置范围宽度。

h

设置范围高度。

o

设置窗口不透明度。此窗口还包含有关像素区域的统计信息。

wx

设置窗口 X 位置,X 轴上的相对偏移。

wy

设置窗口 Y 位置,Y 轴上的相对偏移。

32.195.1 命令

此滤镜支持与选项相同的 命令

32.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[|量化器]

使用您指定的常量量化器覆盖输入的量化器表。

量化器

要使用的量化器

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)

32.196.1 示例

  • 应用水平和垂直去块、去振铃和自动亮度/对比度
    pp=hb/vb/dr/al
    
  • 应用默认滤镜,不进行亮度/对比度校正
    pp=de/-al
    
  • 应用默认滤镜和时域降噪器
    pp=default/tmpnoise|1|2|3
    
  • 仅对亮度应用去块,并根据可用的 CPU 时间自动打开或关闭垂直去块
    pp=hb|y/vb|a
    

32.197 pp7

应用后处理滤镜 7。它是 spp 滤镜的变体,类似于 spp = 6,带有 7 点 DCT,其中仅在 IDCT 后使用中心样本。

该滤镜接受以下选项

qp

强制使用常量量化参数。它接受范围为 0 到 63 的整数。如果未设置,滤镜将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用的模式有

hard

设置硬阈值。

soft

设置软阈值(去振铃效果更好,但可能更模糊)。

medium

设置中等阈值(效果良好,默认)。

32.198 premultiply

使用第二个流的第一个平面作为 alpha,对输入视频流应用 alpha 预乘效果。

两个流必须具有相同的尺寸和相同的像素格式。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

32.199 prewitt

对输入视频流应用 prewitt 算子。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

scale

设置一个值,该值将与过滤后的结果相乘。

delta

设置一个值,该值将添加到过滤后的结果中。

32.199.1 命令

此滤镜支持所有上述选项作为命令

32.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
opacity

设置输出颜色的不透明度。允许的范围为 0 到 1。默认值设置为 1。

每个表达式选项都指定用于计算相应像素分量值的查找表的表达式。

表达式可以包含以下常量和函数

w
h

输入宽度和高度。

val

像素分量的输入值。

ymin、umin、vmin、amin

允许的最小分量值。

ymax、umax、vmax、amax

允许的最大分量值。

所有表达式的默认值为 "val"。

32.200.1 命令

此滤镜支持所有上述选项作为命令

32.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'"
    

32.201 psnr

获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。

此滤镜接收两个输入视频,第一个输入被视为“主”源,并按原样传递到输出。第二个输入用作计算 PSNR 的“参考”视频。

为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,这些帧逐一进行比较。

获得的平均 PSNR 通过日志系统打印。

该滤镜存储每个帧的累积 MSE(均方误差),并在处理结束时在所有帧上平均,并应用以下公式获得 PSNR

PSNR = 10*log10(MAX^2/MSE)

其中 MAX 是图像每个分量最大值的平均值。

下面是对接受的参数的描述。

stats_file,f

如果指定,滤镜将使用指定的文件保存每个单独帧的 PSNR。当文件名等于“ - ”时,数据将发送到标准输出。

stats_version

指定要使用的统计文件格式的版本。每个格式的详细信息如下所述。默认值为 1。

stats_add_max

确定是否将最大值输出到统计日志。默认值为 0。需要 stats_version >= 2。如果设置了此项且 stats_version < 2,则滤镜将返回错误。

此滤镜还支持 framesync 选项。

如果选择了 stats_file,则打印的文件包含每个比较帧对的形式为 key:value 的键/值对序列。

如果指定了大于 1 的 stats_version,则标题行先于每个帧对统计列表,其中键值对遵循帧格式,具有以下参数

psnr_log_version

日志文件格式的版本。将与 stats_version 匹配。

fields

日志中包含的每个帧对参数的逗号分隔列表。

下面是对每个显示的每个帧对参数的描述

n

输入帧的顺序号,从 1 开始

mse_avg

比较帧的逐像素平均差异的均方误差,在所有图像分量上平均。

mse_y、mse_u、mse_v、mse_r、mse_g、mse_b、mse_a

比较帧的逐像素平均差异的均方误差,针对由后缀指定的分量。

psnr_y、psnr_u、psnr_v、psnr_r、psnr_g、psnr_b、psnr_a

比较帧的峰值信噪比,针对由后缀指定的分量。

max_avg、max_y、max_u、max_v

每个通道允许的最大值以及所有通道的平均值。

32.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 -
    

32.202 pullup

下拉反转(反向电影电视)滤镜,能够处理混合的硬电影电视、24000/1001 fps 逐行扫描和 30000/1001 fps 逐行扫描内容。

pullup 滤镜旨在利用未来的上下文来做出决策。此滤镜是无状态的,因为它不会锁定要遵循的模式,而是会向前查看后续字段,以识别匹配项并重建逐行扫描帧。

要生成帧速率均匀的内容,请在 pullup 之后插入 fps 滤镜,如果输入帧速率为 29.97fps,则使用 fps=24000/1001,对于 30fps 和(罕见的)电影电视处理的 25fps 输入,则使用 fps=24

该滤镜接受以下选项

jl
jr
jt
jb

这些选项分别设置要忽略的图像左侧、右侧、顶部和底部的“垃圾”量。左侧和右侧的单位为 8 像素,而顶部和底部的单位为 2 行。默认情况下,每一侧为 8 像素。

sb

设置严格中断。将此选项设置为 1 将减少滤镜生成偶尔不匹配帧的机会,但也可能导致在高运动序列期间丢弃过多的帧。相反,将其设置为 -1 将使滤镜更容易匹配字段。这可能有助于处理字段之间存在轻微模糊的视频,但也可能导致输出中出现隔行帧。默认值为 0

mp

设置要使用的指标平面。它接受以下值

l

使用亮度平面。

u

使用色度蓝色平面。

v

使用色度红色平面。

此选项可以设置为使用色度平面而不是默认的亮度平面进行滤波器的计算。这可能会提高在非常干净的源素材上的精度,但更可能会降低精度,尤其是在存在色度噪声(彩虹效应)或任何灰度视频的情况下。将 mp 设置为色度平面的主要目的是减少 CPU 负载,并使拉升功能在慢速机器上实时可用。

为了获得最佳效果(输出文件中没有重复的帧),有必要更改输出帧率。例如,要反向电视电影 NTSC 输入

ffmpeg -i input -vf pullup -r 24000/1001 ...

32.203 qp

更改视频量化参数 (QP)。

该滤波器接受以下选项

qp

设置量化参数的表达式。

该表达式通过 eval API 计算,可以包含以下常量:

known

如果索引不是 129,则为 1,否则为 0。

qp

从 -129 到 128 的顺序索引。

32.203.1 示例

  • 类似这样的方程式
    qp=2+2*sin(PI*qp)
    

32.204 qrencode

使用 libqrencode 库(参见 https://fukuchi.org/works/qrencode/)生成 QR 码,并将其叠加在当前帧的顶部。

要启用此滤波器的编译,您需要使用 --enable-libqrencode 配置 FFmpeg。

QR 码根据提供的文本或文本模式生成。相应的 QR 码会根据指定的选项进行缩放并叠加到视频输出中。

如果未指定文本,则不会叠加 QR 码。

此滤波器接受以下选项

qrcode_width,q
padded_qrcode_width,Q

指定渲染的 QR 码宽度(带和不带填充)的表达式。qrcode_width 表达式可以引用由 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式会针对每个新帧进行计算。

有关详细信息,请参阅 qrencode 表达式 部分。

x
y

指定用于定位带填充的 QR 码左上角的表达式。x 表达式可以引用由 y 表达式设置的值,反之亦然。

默认情况下,xy 设置为 0,这意味着 QR 码放置在输入的左上角。

这些表达式会针对每个新帧进行计算。

有关详细信息,请参阅 qrencode 表达式 部分。

case_sensitive,cs

指示 libqrencode 使用区分大小写的编码。默认情况下启用此功能。可以禁用此功能以减小 QR 编码大小。

level,l

指定 QR 编码的纠错级别。纠错级别越高,编码大小越大,但代码对损坏的鲁棒性也越高。较低级别为 L

它接受以下值

L
M
Q
H
expansion

选择如何展开输入文本。可以是 nonenormal(默认)。有关详细信息,请参阅下面的 qrencode 文本展开 部分。

text
textfile

定义要渲染的文本。如果未指定任何一个,则不编码 QR 码(仅为空的彩色帧)。

如果启用了展开,则将文本视为文本模板,使用 qrencode 展开机制。有关详细信息,请参阅下面的 qrencode 文本展开 部分。

background_color,bc
foreground_color,fc

设置 QR 码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

有关颜色选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分

32.204.1 qrencode 表达式

选项设置的表达式包含以下常量和函数。

dar

输入显示纵横比,与 (w / h) * sar 相同

duration

当前帧的持续时间,以秒为单位

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

main_h, H

输入高度

main_w, W

输入宽度

n

输入帧数,从 0 开始

pict_type

表示图片类型的数字

qr_w,w

编码的 QR 码的宽度

rendered_qr_w,q
rendered_padded_qr_w,Q

渲染的 QR 码的宽度,带或不带填充。

这些参数允许 qQ 表达式相互引用,因此您可以例如指定 q=3/4*Q

rand(min, max)

返回一个介于 minmax 之间的随机数

sar

输入样本宽高比

t

以秒表示的时间戳,如果输入时间戳未知则为 NAN

x
y

绘制文本的 x 和 y 偏移坐标。

这些参数允许 xy 表达式相互引用,因此例如可以指定 y=x/dar

32.204.2 qrencode 文本扩展

如果 expansion 设置为 none,则文本将按原样打印。

如果 expansion 设置为 normal(这是默认设置),则将使用以下扩展机制。

反斜杠字符 ‘\’,后跟任何字符,始终会扩展为第二个字符。

%{...} 形式的序列会被扩展。大括号之间的文本是函数名,可能后跟以 ‘:’ 分隔的参数。如果参数包含特殊字符或分隔符(‘:’ 或 ‘}’),则应进行转义。

请注意,它们可能还需要在过滤器参数字符串中的 text 选项的值中、在滤镜图描述中的过滤器参数中,以及可能还需要在 shell 中进行转义,总共可能需要四级转义;使用带有 textfile 选项的文本文件可以避免这些问题。

以下函数可用:

n, frame_num

返回帧号

pts

返回当前帧的显示时间戳。

最多可以接受两个参数。

第一个参数是时间戳的格式;它默认为 flt,表示以微秒精度表示的十进制秒数;hms 表示格式化的 [-]HH:MM:SS.mmm 时间戳,具有毫秒精度。gmtime 表示格式化为 UTC 时间的帧时间戳;localtime 表示格式化为本地时区时间的帧时间戳。如果格式设置为 hms24hh,则时间将以 24 小时格式(00-23)格式化。

第二个参数是添加到时间戳的偏移量。

如果格式设置为 localtimegmtime,则可以提供第三个参数:strftime C 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS 格式。

expr, e

计算表达式的值并以双精度输出。

它必须采用一个参数,该参数指定要计算的表达式,接受在 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 之间的随机数

32.204.3 示例

  • 生成一个以默认大小编码指定文本的 QR 码,覆盖在输入视频的左上角,具有默认大小
    qrencode=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉色
    qrencode=text=www.ffmpeg.org:[email protected]:fc=blue
    
  • 将 QR 码放置在输入视频的右下角
    qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
    
  • 生成一个宽度为 200 像素且带有填充的 QR 码,使填充后的宽度为 QR 码宽度的 4/3
    qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成一个填充宽度为 200 像素且带有填充的 QR 码,使 QR 码宽度为填充宽度的 3/4
    qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 使 QR 码成为输入视频宽度的一部分
    qrencode=text=www.ffmpeg.org:q=W/5
    
  • 生成一个编码帧号的 QR 码
    qrencode=text=%{n}
    
  • 生成一个编码 GMT 时间戳的 QR 码
    qrencode=text=%{gmtime}
    
  • 生成一个将时间戳表示为浮点数的 QR 码
    qrencode=text=%{pts}
    

32.205 quirc

使用 libquirc 库(参见 https://github.com/dlbeer/quirc/)识别和解码 QR 码,并将识别出的 QR 码位置和有效负载打印为元数据。

要启用此滤波器的编译,您需要使用 --enable-libquirc 配置 FFmpeg。

对于输入视频中找到的每个 QR 码,都会添加一些元数据条目,前缀为 lavfi.quirc.N,其中 N 是与 QR 码关联的索引,从 0 开始。

下面是每个元数据值的描述

lavfi.quirc.count

找到的 QR 码数量,如果没有找到,则不设置

lavfi.quirc.N.corner.M.x
lavfi.quirc.N.coreer.M.y

包含 QR 码的方形的四个角的 x/y 位置,其中 M 是角的索引,从 0 开始

lavfi.quirc.N.payload

QR 码的有效负载

32.206 random

将视频帧从帧的内部缓存刷新到随机顺序。不会丢弃任何帧。灵感来自 frei0r nervous 过滤器。

frames

设置内部缓存的帧数大小,范围为 2512。默认值为 30

seed

为随机数生成器设置种子,必须是包含在 0UINT32_MAX 之间的整数。如果未指定,或者如果显式设置为小于 0,则过滤器将尽最大努力尝试使用良好的随机种子。

32.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

在进一步处理之前对线条进行低通滤波。默认启用。

32.207.1 命令

此滤镜支持所有上述选项作为命令

32.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
    

32.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

32.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'
    

32.209 remap

使用第二个输入视频流 Xmap 和第三个输入视频流 Ymap 重新映射像素。

位置 (X, Y) 处的目的地像素将从源 (x, y) 位置选取,其中 x = Xmap(X, Y) 并且 y = Ymap(X, Y)。如果映射值超出范围,则目的地像素将使用零值。

Xmap 和 Ymap 输入视频流必须具有相同的尺寸。输出视频流将具有 Xmap/Ymap 视频流的尺寸。Xmap 和 Ymap 输入视频流均为 16 位深度,单通道。

format

指定此滤镜输出的像素格式。可以是 colorgray。默认值为 color

fill

指定未映射像素的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分。默认颜色为 black

32.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 类似。

32.211 removelogo

使用图像文件确定哪些像素构成徽标,从而抑制电视台徽标。它通过用相邻像素填充构成徽标的像素来工作。

该滤镜接受以下选项

文件名, f

设置滤镜位图文件,该文件可以是 libavformat 支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度匹配。

提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果徽标使用白色 (255),其余部分使用黑色 (0),则一切都会安全。对于制作滤镜位图,建议截取一张黑色帧(带有可见徽标)的屏幕截图,然后使用阈值滤镜,然后再使用腐蚀滤镜一到两次。

如果需要,可以手动修复小斑点。请记住,如果徽标像素没有被覆盖,则滤镜质量会大大降低。将过多的像素标记为徽标的一部分并不会造成太大损害,但这会增加覆盖图像所需的模糊量,并且会破坏比必要更多的信息,并且额外的像素会降低大型徽标的速度。

32.212 repeatfields

此滤镜使用来自 Video ES 标头的 repeat_field 标志,并根据其值进行硬重复字段。

32.213 反向

反转视频剪辑。

警告:此滤波器需要内存来缓冲整个剪辑,因此建议修剪。

32.213.1 示例

  • 获取剪辑的前 5 秒并反转它。
    trim=end=5,reverse
    

32.214 rgbashift

水平和/或垂直移动 R/G/B/A 像素。

该滤镜接受以下选项

rh

设置红色水平移动量。

rv

设置红色垂直移动量。

gh

设置绿色水平移动量。

gv

设置绿色垂直移动量。

bh

设置蓝色水平移动量。

bv

设置蓝色垂直移动量。

ah

设置 Alpha 水平移动量。

av

设置 Alpha 垂直移动量。

设置垂直移动色度红色的量。

edge

32.214.1 命令

此滤镜支持所有上述选项作为命令

32.215 roberts

将罗伯茨交叉算子应用于输入视频流。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

scale

设置一个值,该值将与过滤后的结果相乘。

delta

设置一个值,该值将添加到过滤后的结果中。

32.215.1 命令

此滤镜支持所有上述选项作为命令

32.216 旋转

按任意角度(以弧度表示)旋转视频。

该滤镜接受以下选项

以下是可选参数的说明。

角度, a

设置一个表达式,表示输入视频顺时针旋转的角度,以弧度数表示。负值将导致逆时针旋转。默认情况下,它设置为“0”。

此表达式将针对每一帧进行求值。

out_w, ow

设置输出宽度表达式,默认值为“iw”。此表达式仅在配置期间求值一次。

out_h, oh

设置输出高度表达式,默认值为“ih”。此表达式仅在配置期间求值一次。

bilinear

如果设置为 1,则启用双线性插值,值为 0 则禁用双线性插值。默认值为 1。

填充颜色, c

设置用于填充旋转图像未覆盖的输出区域的颜色。有关此选项的通用语法,请查看 (ffmpeg-utils)手册中的“颜色”部分。如果选择了特殊值“none”,则不会打印任何背景(例如,如果从不显示背景,则很有用)。

默认值为“黑色”。

角度和输出大小的表达式可以包含以下常量和函数

n

输入帧的序列号,从0开始。在第一帧被滤镜处理之前,它始终为NAN。

t

输入帧的时间(以秒为单位),在配置滤镜时设置为0。在第一帧被滤镜处理之前,它始终为NAN。

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

in_w, iw
in_h, ih

输入视频的宽度和高度

out_w, ow
out_h, oh

输出宽度和高度,即由 widthheight 表达式指定的填充区域的大小

rotw(a)
roth(a)

完全包含按 a 弧度旋转的输入视频所需的最小宽度/高度。

这些仅在计算 out_wout_h 表达式时可用。

32.216.1 示例

  • 将输入顺时针旋转 PI/6 弧度
    rotate=PI/6
    
  • 将输入逆时针旋转 PI/6 弧度
    rotate=-PI/6
    
  • 将输入顺时针旋转 45 度
    rotate=45*PI/180
    
  • 从 PI/3 的角度开始,应用周期为 T 的恒定旋转
    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
    

32.216.2 命令

过滤器支持以下命令

a,角度

设置角度表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.217 sab

应用形状自适应模糊。

该滤镜接受以下选项

luma_radius,lr

设置亮度模糊滤镜强度,必须是 0.1-4.0 范围内的值,默认值为 1.0。值越大,图像越模糊,处理速度越慢。

luma_pre_filter_radius, lpfr

设置亮度预滤镜半径,必须是 0.1-2.0 范围内的值,默认值为 1.0。

luma_strength, ls

设置仍然被视为像素的亮度最大差异,必须是 0.1-100.0 范围内的值,默认值为 1.0。

chroma_radius,cr

设置色度模糊滤镜强度,必须是 -0.9-4.0 范围内的值。值越大,图像越模糊,处理速度越慢。

chroma_pre_filter_radius, cpfr

设置色度预滤镜半径,必须是 -0.9-2.0 范围内的值。

chroma_strength, cs

设置仍然被视为像素的色度最大差异,必须是 -0.9-100.0 范围内的值。

每个色度选项值,如果未明确指定,则设置为相应的亮度选项值。

32.218 缩放

使用 libswscale 库缩放(调整大小)输入视频。

缩放滤镜通过更改输出采样纵横比来强制输出显示纵横比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,则缩放滤镜会将输入转换为请求的格式。

32.218.1 选项

该滤镜接受以下选项,libswscale 缩放器支持的任何选项,以及任何 framesync 选项。

有关缩放器选项的完整列表,请参阅(ffmpeg-scaler)ffmpeg-scaler 手册

宽度,w
高度,h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果 widthw 值为 0,则将输入宽度用于输出。如果 heighth 值为 0,则将输入高度用于输出。

如果只有一个值为 -n 且 n >= 1,则缩放滤镜将使用一个值来保持输入图像的纵横比,该值由另一个指定的尺寸计算得出。之后,它将确保计算出的尺寸可以被 n 整除,并在必要时调整该值。

如果两个值都为 -n 且 n >= 1,则其行为将与两个值都设置为 0(如前所述)相同。

请参阅下文,了解可用于尺寸表达式的常量列表。

eval

指定何时评估 widthheight 表达式。它接受以下值

init

仅在滤镜初始化期间或处理命令时评估表达式一次。

frame

对每个传入的帧评估表达式。

默认值为 ‘init’。

interl

设置隔行扫描模式。它接受以下值

1

强制进行隔行扫描感知缩放。

0

不应用隔行扫描缩放。

-1

根据源帧是否标记为隔行扫描来选择隔行扫描感知缩放。

默认值为 ‘0’。

flags

设置 libswscale 缩放标志。有关值的完整列表,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未明确指定,则滤镜将应用默认标志。

param0, param1

为需要它们的缩放算法设置 libswscale 输入参数。有关完整文档,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果未明确指定,则滤镜将应用空参数。

intent

设置在不同色彩空间之间转换时要使用的 ICC 渲染意图。它接受以下值

perceptual

使用感知引导的色调和色域映射曲线。所用映射的确切细节可能随时更改,不应将其视为稳定。建议在典型的观看设置中最终观看图像/视频内容时使用此意图。

relative_colorimetric

使用尝试查找色度上最不相似的色域内颜色的色度剪切曲线静态地剪切色域外的颜色。此意图执行白点适应和黑点适应。这是默认值。建议在需要尽可能忠实地再现色彩(即使牺牲剪切)的情况下使用此意图。

absolute_colorimetric

硬剪切色域外的颜色,而不尝试进行白点或黑点再现。假设输出显示器已正确校准,此意图将在输出显示器上 1:1 地再现色域内的颜色,就像它们在参考显示器上显示的那样。

saturation

执行饱和度映射 - 即,以非线性方式将输入颜色体积直接拉伸到输出颜色体积上,从而尽可能保留原始信号外观。建议用于信号内容评估时使用此意图,因为它不会导致任何剪切。它大致类似于不执行任何颜色映射,尽管它仍然会考虑主控显示原色和编码 TRC 中的任何差异。

size, s

设置视频大小。有关此选项的语法,请查看(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-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 非恒定亮度系统。

输入范围
输出范围

设置输入/输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制使用特定的输出和编码器值。如果未指定,则范围取决于像素格式。 可能的值

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(8 位亮度时为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(8 位亮度时为 16-235)。

输入色度位置
输出色度位置

设置输入/输出色度采样位置。 如果未指定,则默认使用中心位置的色度。 可能的值

auto, unknown
left
center
topleft
top
bottomleft
bottom
输入原色
输出原色

设置输入/输出 RGB 原色。

这允许覆盖自动检测到的值,并允许强制使用特定的输出和编码器值。 可能的值

auto

自动选择。这是默认值。

bt709
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
ebu3213
输入传输
输出传输

设置输入/输出传输响应曲线 (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

水平和垂直输入色度子采样值。 例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

输出水平色度子采样值
输出垂直色度子采样值

水平和垂直输出色度子采样值。 例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

n

输入帧的(顺序)编号,从 0 开始。仅在 eval=frame 时可用。

t

输入帧的表示时间戳,以秒数表示。仅在 eval=frame 时可用。

pos

帧在输入流中的位置(字节偏移),如果此信息不可用和/或无意义(例如,在合成视频的情况下),则为 NaN。仅在 eval=frame 时可用。已弃用,请勿使用。

参考宽度, rw
参考高度, rh
参考宽高比
参考显示宽高比, rdar
参考帧编号
参考帧时间戳
参考帧位置

与上述相同,但用于第二个参考输入。如果存在这些变量中的任何一个,则此过滤器接受两个输入。

32.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]
    

32.218.3 命令

此滤镜支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

32.219 scale_cuda

使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的方式与 scale 过滤器相同。

该滤镜接受以下选项

w
h

设置输出视频尺寸表达式。默认值为输入尺寸。

允许使用与 scale 滤镜相同的表达式。

插值算法

设置用于缩放的算法

nearest

最近邻

如果输入参数与所需的输出匹配,则默认使用此项。

bilinear

双线性

双三次

双三次

这是默认值。

lanczos

Lanczos

format

控制输出像素格式。默认情况下或如果未指定,则使用输入像素格式。

该过滤器不支持在 YUV 和 RGB 像素格式之间转换。

直通

如果设置为 0,则会处理每一帧,即使不需要转换。此模式对于将过滤器用作下游帧消费者的缓冲区非常有用,该消费者会耗尽有限的解码器帧池。

如果设置为 1,则如果帧与所需的输出参数匹配,则会按原样传递帧。这是默认行为。

param

算法特定的参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

工作方式与相同的 scale 滤镜选项相同。

32.219.1 示例

  • 将输入缩放到 720p,保持宽高比并确保输出为 yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻算法放大到 4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理否则会耗尽解码器帧池的过滤器和编码链非常有用。
    scale_cuda=passthrough=0
    

32.220 scale_npp

使用 NVIDIA Performance Primitives (libnpp) 对 CUDA 视频帧执行缩放和/或像素格式转换。 设置输出宽度和高度的方式与 scale 过滤器相同。

接受以下其他选项

format

输出 CUDA 帧的像素格式。 如果设置为字符串“same”(默认值),则将保留输入格式。 请注意,硬件帧尚不支持自动格式协商和转换

插值算法

用于调整大小的插值算法。 以下之一

nn

最近邻。

linear
cubic
cubic2p_bspline

2 参数三次 (B=1, C=0)

cubic2p_catmullrom

2 参数三次 (B=0, C=1/2)

cubic2p_b05c03

双参数三次 (B=1/2, C=3/10)

super

超采样

lanczos
force_original_aspect_ratio

如果需要保持原始宽高比,则启用减小或增加输出视频宽度或高度。 可能的值

disable

按指定比例缩放视频并禁用此功能。

decrease

如果需要,将自动减小输出视频尺寸。

increase

如果需要,将自动增加输出视频尺寸。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,您可以使用此选项将输出视频限制在该分辨率,同时保留宽高比。例如,设备 A 允许 1280x720 播放,而您的视频是 1920x800。使用此选项(设置为 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 时可用。已弃用,请勿使用。

32.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 时可用。

32.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]
    

32.222 scale_vt

使用 VTPixelTransferSession 缩放并转换颜色参数。

该滤镜接受以下选项

w
h

设置输出视频尺寸表达式。默认值为输入尺寸。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出颜色原色。

color_transfer

设置输出传输特性。

32.223 scharr

将 Scharr 算子应用于输入视频流。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

scale

设置一个值,该值将与过滤后的结果相乘。

delta

设置一个值,该值将添加到过滤后的结果中。

32.223.1 命令

此滤镜支持所有上述选项作为命令

32.224 滚动

以恒定速度水平和/或垂直滚动输入视频。

该滤镜接受以下选项

horizontal, h

设置水平滚动速度。默认值为 0。允许范围为 -1 到 1。负值会改变滚动方向。

vertical, v

设置垂直滚动速度。默认值为 0。允许范围为 -1 到 1。负值会改变滚动方向。

hpos

设置初始水平滚动位置。默认值为 0。允许范围为 0 到 1。

vpos

设置初始垂直滚动位置。默认值为 0。允许范围为 0 到 1。

32.224.1 命令

此滤镜支持以下 命令

horizontal, h

设置水平滚动速度。

vertical, v

设置垂直滚动速度。

32.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。如果只想获取场景变化帧的快照,可以启用它。

32.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],分别用于调整其范围内像素的青色、品红色、黄色和黑色的量。

32.226.1 示例

  • 在每个绿色区域增加 50% 的青色并减少 33% 的黄色,并在蓝色区域增加 27% 的品红色
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用 Photoshop 可选颜色预设
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

32.227 separatefields

separatefields 滤镜接收基于帧的视频输入,并将每个帧拆分为其组件场,从而生成一个新的半高剪辑,其帧速率和帧数是原来的两倍。

此滤镜使用帧中的场优势信息来决定将每对场中的哪个场首先放置在输出中。如果出错,请在 separatefields 滤镜之前使用 setfield 滤镜。

32.228 setdar, setsar

setdar 滤镜设置滤镜输出视频的显示宽高比。

这是通过根据以下公式更改指定的采样(又称像素)宽高比来完成的

DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR

请记住,setdar 滤镜不会修改视频帧的像素尺寸。此外,此滤镜设置的显示宽高比可能会被滤镜链中的后续滤镜更改,例如在缩放的情况下或如果应用了另一个“setdar”或“setsar”滤镜。

setsar 滤镜设置滤镜输出视频的采样(又称像素)宽高比。

请注意,由于此滤镜的应用,输出显示宽高比将根据上述公式更改。

请记住,setsar 滤镜设置的采样宽高比可能会被滤镜链中的后续滤镜更改,例如,如果应用了另一个“setsar”或“setdar”滤镜。

它接受以下参数

r, 比率, dar (仅限setdar), sar (仅限setsar)

设置滤镜使用的宽高比。

该参数可以是浮点数字符串或表达式。如果未指定参数,则假定值为“0”,表示使用相同的输入值。

max

将表示的宽高比简化为有理数时,用于表示分子和分母的最大整数值。默认值为 100

参数 sar 是一个包含以下常量的表达式

w, h

输入宽度和高度。

a

w / h 相同。

sar

输入采样宽高比。

dar

输入显示宽高比。它与 (w / h) * sar 相同。

hsub, vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

32.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
    

32.229 setfield

输出视频帧的强制场。

setfield 滤镜标记输出帧的隔行扫描类型字段。它不会更改输入帧,而仅设置相应的属性,这会影响后续滤镜(例如 fieldorderyadif)如何处理帧。

该滤镜接受以下选项

mode

可用的值有

auto

保持相同的场属性。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为逐行扫描。

32.230 setparams

输出视频帧的强制帧参数。

setparams 滤镜标记输出帧的隔行扫描和颜色范围。它不会更改输入帧,而仅设置相应的属性,这会影响滤镜/编码器如何处理帧。

field_mode

可用的值有

auto

保持相同的场属性(默认)。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为逐行扫描。

范围

可用的值有

auto

保持相同的颜色范围属性(默认)。

unspecified, unknown

将帧标记为未指定的颜色范围。

limited, tv, mpeg

将帧标记为有限范围。

full, pc, jpeg

将帧标记为全范围。

color_primaries

设置颜色原色。可用值为

auto

保持相同的颜色原色属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
color_trc

设置颜色传递。可用值为

auto

保持相同的颜色 trc 属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
linear
log100
log316
iec61966-2-4
bt1361e
iec61966-2-1
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
colorspace

设置色彩空间。可用值为

auto

保持相同的色彩空间属性(默认)。

gbr
bt709
unknown
fcc
bt470bg
smpte170m
smpte240m
ycgco
bt2020nc
bt2020c
smpte2085
chroma-derived-nc
chroma-derived-c
ictcp
chroma_location

设置色度样本位置。可用值为

auto

保持相同的色度位置(默认)。

unspecified, unknown
left
center
topleft
top
bottomleft
bottom

32.231 sharpen_npp

使用 NVIDIA Performance Primitives (libnpp) 执行带边界控制的图像锐化。

接受以下其他选项

border_type

在帧边界处使用的采样类型。以下之一

replicate

复制像素值。

32.232 剪切

对输入视频应用剪切变换。

此滤镜支持以下选项

shx

X 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。

shy

Y 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。

填充颜色, c

设置用于填充变换视频未覆盖的输出区域的颜色。有关此选项的常规语法,请查看 ffmpeg-utils 手册中的“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果背景永远不会显示,则很有用)。

默认值为“黑色”。

interp

设置插值类型。可以是 bilinearnearest。默认为 bilinear

32.232.1 命令

此滤镜支持所有上述选项作为命令

32.233 showinfo

显示包含每个输入视频帧各种信息的行。输入视频不会被修改。

此滤镜支持以下选项

checksum

计算每个平面的校验和。默认情况下启用。

udu_sei_as_ascii

尽可能尝试以 ASCII 字符打印用户数据未注册 SEI,否则以十六进制格式打印。

显示的行包含 key:value 形式的键/值对序列。

以下值在输出中显示

n

输入帧的(顺序)编号,从 0 开始。

pts

输入帧的 Presentation TimeStamp,以时间基准单位数表示。时间基准单位取决于滤镜输入填充。

pts_time

输入帧的 Presentation TimeStamp,以秒数表示。

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]”的形式表示。

32.234 showpalette

显示每个帧的 256 色调色板。此滤镜仅与 pal8 像素格式帧相关。

它接受以下选项

s

设置用于表示一个调色板颜色条目的框的大小。默认为 30(对于 30x30 像素的框)。

32.235 shuffleframes

重新排序和/或复制和/或丢弃视频帧。

它接受以下参数

mapping

设置输入帧的目标索引。这是一个以空格或“|”分隔的索引列表,将输入帧映射到输出帧。索引的数量也设置了每个索引可能具有的最大值。“-1”索引具有特殊含义,即丢弃帧。

第一帧的索引为 0。默认情况下保持输入不变。

32.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
    

32.236 shufflepixels

重新排序视频帧中的像素。

此滤波器接受以下选项

direction, d

设置混洗方向。可以是正向或反向。默认方向为正向。

mode, m

设置混洗模式。可以是水平、垂直或块模式。

宽度,w
高度,h

设置混洗 block_size。在水平混洗模式下,仅使用大小的宽度部分,而在垂直混洗模式下,仅使用大小的高度部分。

种子,s

设置用于混洗像素的随机种子。主要用于设置以能够反转过滤过程以获得原始输入。例如,要反转正向混洗,需要使用相同的参数和完全相同的种子,并将方向设置为反向。

32.237 shuffleplanes

重新排序和/或复制视频平面。

它接受以下参数

map0

用作第一个输出平面的输入平面的索引。

map1

用作第二个输出平面的输入平面的索引。

map2

用作第三个输出平面的输入平面的索引。

map3

用作第四个输出平面的输入平面的索引。

第一个平面的索引为 0。默认情况下保持输入不变。

32.237.1 示例

  • 交换输入的第二个和第三个平面
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

32.238 signalstats

评估各种视觉指标,这些指标有助于确定与模拟视频媒体数字化相关的问题。

默认情况下,滤镜将记录以下元数据值

YMIN

显示输入帧中包含的最小 Y 值。范围为 [0-255]。

YLOW

显示输入帧中 10% 百分位的 Y 值。范围为 [0-255]。

YAVG

显示输入帧内 Y 值的平均值。范围为 [0-255]。

YHIGH

显示输入帧内 Y 值 90% 百分位数的值。范围为 [0-255]。

YMAX

显示输入帧内包含的最大 Y 值。范围为 [0-255]。

UMIN

显示输入帧内包含的最小 U 值。范围为 [0-255]。

ULOW

显示输入帧内 U 值 10% 百分位数的值。范围为 [0-255]。

UAVG

显示输入帧内 U 值的平均值。范围为 [0-255]。

UHIGH

显示输入帧内 U 值 90% 百分位数的值。范围为 [0-255]。

UMAX

显示输入帧内包含的最大 U 值。范围为 [0-255]。

VMIN

显示输入帧内包含的最小 V 值。范围为 [0-255]。

VLOW

显示输入帧内 V 值 10% 百分位数的值。范围为 [0-255]。

VAVG

显示输入帧内 V 值的平均值。范围为 [0-255]。

VHIGH

显示输入帧内 V 值 90% 百分位数的值。范围为 [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 选项的突出显示颜色。默认颜色为黄色。

32.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}
    
    

32.239 签名

计算 MPEG-7 视频签名。该过滤器可以处理多个输入。在这种情况下,可以额外计算输入之间的匹配。该过滤器始终传递第一个输入。每个流的签名可以写入文件。

它接受以下选项

detectmode

启用或禁用匹配过程。

可用的值有

off

禁用匹配计算(默认)。

full

计算整个视频的匹配,并输出整个视频是否匹配,或者只有部分匹配。

fast

仅计算直到找到匹配或视频结束。在某些情况下应该更快。

nb_inputs

设置输入数量。选项值必须是非负整数。默认值为 1。

filename

设置输出写入的路径。如果存在多个输入,则路径必须是原型,即必须包含 %d 或 %0nd(其中 n 是正整数),它将被输入编号替换。如果未指定文件名,则不会写入任何输出。这是默认设置。

format

选择输出格式。

可用的值有

binary

使用指定的二进制表示形式(默认)。

xml

使用指定的 xml 表示形式。

th_d

设置将一个词检测为相似的阈值。选项值必须是大于零的整数。默认值为 9000。

th_dc

设置将所有词检测为相似的阈值。选项值必须是大于零的整数。默认值为 60000。

th_xh

设置将帧检测为相似的阈值。选项值必须是大于零的整数。默认值为 116。

th_di

设置将序列识别为匹配序列的最小帧长度。选项值必须是非负整数值。默认值为 0。

th_it

设置匹配帧必须与所有帧之间的最小关系。选项值必须是介于 0 和 1 之间的双精度值。默认值为 0.5。

32.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 -
    

32.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。

32.240.1 示例

  • 计算 SI/TI 指标并打印摘要
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

32.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 选项,则会设置相应的亮度值。

32.242 sobel

将 Sobel 算子应用于输入视频流。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

scale

设置一个值,该值将与过滤后的结果相乘。

delta

设置一个值,该值将添加到过滤后的结果中。

32.242.1 命令

此滤镜支持所有上述选项作为命令

32.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(未启用)。

32.243.1 命令

此滤镜支持以下命令

quality, level

设置质量级别。可以使用值 max 来设置最大级别,目前为 6

32.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 后端只能加载其格式的文件。

scale_factor

设置 SRCNN 模型的缩放因子。允许的值为 234。默认值为 2。缩放因子对于 SRCNN 模型是必需的,因为它接受使用双三次上采样和适当的缩放因子进行上采样的输入。

要获得完整的功能(例如异步执行),请使用 dnn_processing 滤波器。

32.245 ssim

获取两个输入视频之间的 SSIM(结构相似性度量)。

此过滤器输入两个输入视频,第一个输入被视为“主”源,并保持不变地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。

为了使此滤镜正常工作,两个视频输入必须具有相同的分辨率和像素格式。它还假设两个输入具有相同数量的帧,这些帧逐一进行比较。

过滤器存储每个帧计算的 SSIM。

下面是对接受的参数的描述。

stats_file,f

如果指定,过滤器将使用指定的文件来保存每个单独帧的 SSIM。当文件名等于“-”时,数据将发送到标准输出。

如果选择了 stats_file,则打印的文件包含每个比较帧对的形式为 key:value 的键/值对序列。

下面是每个显示参数的说明

n

输入帧的顺序号,从 1 开始

Y、U、V、R、G、B

由后缀指定的组件的比较帧的 SSIM。

全部

整个帧的比较帧的 SSIM。

dB

与上述相同,但以 dB 表示。

此滤镜还支持 framesync 选项。

32.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 -
    

32.246 stereo3d

在不同的立体图像格式之间进行转换。

过滤器接受以下选项

输入

设置输入的立体图像格式。

输入图像格式的可用值为

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’。

32.246.1 示例

  • 将并排平行输入视频转换为黄/蓝杜波伊斯立体图像
    stereo3d=sbsl:aybd
    
  • 将上下(左眼在上,右眼在下)输入视频转换为并排交叉眼。
    stereo3d=abl:sbsr
    

32.247 streamselect, astreamselect

选择视频或音频流。

该滤镜接受以下选项

输入

设置输入数量。默认为 2。

map

设置要重新映射到输出的输入索引。

32.247.1 命令

streamselectastreamselect 过滤器支持以下命令

map

设置要重新映射到输出的输入索引。

32.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
    

32.248 字幕

使用 libass 库在输入视频顶部绘制字幕。

要启用此过滤器的编译,您需要使用 --enable-libass 配置 FFmpeg。此过滤器还需要使用 libavcodec 和 libavformat 进行构建,以便将传递的字幕文件转换为 ASS (Advanced Substation 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'

32.249 super2xsai

使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入缩放 2 倍并进行平滑处理。

对于放大像素艺术图像而不降低清晰度非常有用。

32.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;已弃用,请勿使用

32.250.1 命令

此滤镜支持所有上述选项作为命令

32.251 swapuv

交换 U 和 V 平面。

32.252 tblend

混合连续的视频帧。

请参阅 blend

32.253 telecine

对视频应用电视电影处理。

此滤波器接受以下选项

first_field
top, t

顶场优先

底, b

底场优先。默认值是 top

模式

一个表示您希望应用的下拉模式的数字字符串。默认值是 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

32.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

32.255 阈值

对视频流应用阈值效果。

此过滤器需要四个视频流来执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后一个,第四个流保存最大值。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

例如,如果第一个流像素的分量值小于来自第二个阈值流的像素分量值的阈值,则会选取第三个流值,否则会选取第四个流像素分量值。

使用颜色源过滤器,可以执行各种类型的阈值处理

32.255.1 命令

此过滤器支持所有选项,如 commands

32.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
    

32.256 缩略图

在给定的连续帧序列中选择最具代表性的帧。

该滤镜接受以下选项

n

设置要分析的帧批次大小;在一组 n 帧中,过滤器将选择其中一帧,然后处理下一批 n 帧,直到结束。默认值为 100

log

设置要显示所选帧统计信息的日志级别。默认值为 info

由于过滤器会跟踪整个帧序列,因此较大的 n 值会导致更高的内存使用率,因此不建议使用较高的值。

32.256.1 示例

  • 每 50 帧提取一张图片
    thumbnail=50
    
  • 使用 ffmpeg 创建缩略图的完整示例
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

32.257 tile

将几个连续的帧平铺在一起。

untile 滤镜可以执行相反的操作。

该滤镜接受以下选项

layout

列数x行数 的形式设置网格大小。范围最大为 UINT_MAX 个单元格。默认值为 6x5

nb_frames

设置在给定区域内渲染的最大帧数。它必须小于或等于 wxh。默认值为 0,表示将使用所有区域。

margin

设置外边框边距,单位为像素。范围为 0 到 1024。默认值为 0

padding

设置内边框厚度(即帧之间的像素数)。有关更高级的填充选项(例如为边缘设置不同的值),请参阅 pad 视频滤镜。范围为 0 到 1024。默认值为 0

颜色

指定未使用区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分color 的默认值为“black”。

overlap

设置将多个连续帧平铺在一起时要重叠的帧数。该值必须介于 0nb_frames - 1 之间。默认值为 0

init_padding

设置在显示第一个输出帧之前初始为空的帧数。这控制着何时获得第一个输出帧。该值必须介于 0nb_frames - 1 之间。默认值为 0

32.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
    

32.258 tiltandshift

应用倾斜和移轴效果。

当你反转时间和空间时会发生什么?

通常,视频由多个帧组成,这些帧表示不同的时间瞬间,并显示在帧所捕获的空间中演变的场景。这个滤镜与这个概念相反,它从倾斜和移轴摄影中获得灵感。

过滤后的帧包含组成序列的整个事件时间线,这是通过将每个帧的像素切片放置到一个帧中获得的。然而,由于没有无限宽度的帧,因此这样做会一直到输入帧的宽度,并且通过为每个后续帧移开一列来重构视频。为了将空间映射到时间,滤镜也会倾斜每个输入帧,以便保留运动。这是通过从每个输入帧中逐步选择不同的列来实现的。

最终结果是一种反向视差,因此远处的物体比前面的物体移动得快得多。这种视频效果的理想条件是当运动很少且背景是静态的,或者当有很多运动和很宽的景深时(例如,在火车上移动时的宽全景)。

该滤波器接受以下参数

tilt

在平移时倾斜视频(默认)。取消设置后,视频将滑动一个静态图像,该图像由每个帧的第一列组成。

start

在开始过滤时要执行的操作(请参见下文)。

end

在过滤结束时要执行的操作(请参见下文)。

hold

在开始过滤之前应该通过多少列。

pad

在过滤结束之前应该插入多少列。

通常,滤镜从第一个帧开始平移和倾斜,并在收到最后一个帧时停止。但是,在开始过滤之前,可能会保留正常的视频,以便效果缓慢地移动到位。同样,最后一个视频帧可能会在最后被重建。或者,也可以仅以黑色开始和结束。

none

过滤立即开始,并在收到最后一个帧时结束。

frame

在处理过程中,第一个帧或最后一个帧保持不变。

black

黑色填充在过滤的开始或结束处。

32.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 的可用值是

low_pass_filter, vlpf

在滤镜中启用线性垂直低通滤波。当从包含高频垂直细节的逐行源创建隔行扫描目标时,需要垂直低通滤波。滤波将减少隔行扫描的“闪烁”和莫尔条纹。

complex_filter, cvlpf

启用复杂的垂直低通滤波。这将稍微减少隔行扫描的“闪烁”和莫尔条纹,但更好地保留细节和主观锐度感。

bypass_il

绕过已经隔行扫描的帧,仅调整帧速率。

垂直低通滤波和绕过已经隔行扫描的帧只能为 mode interleave_topinterleave_bottom 启用。

32.260 tmedian

从几个连续的输入视频帧中选择中间像素。

该滤镜接受以下选项

半径

设置中值滤波器的半径。默认值为 1。允许的范围为 1 到 127。

planes

设置要过滤的平面。默认值为 15,表示处理所有平面。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

32.260.1 命令

此滤镜支持上述所有选项作为命令,但不包括选项 radius

32.261 tmidequalizer

应用时间中途视频均衡效果。

中途视频均衡调整一系列视频帧,使其具有相同的直方图,同时尽可能保持其动态。例如,这对于匹配来自视频帧序列的曝光非常有用。

此滤镜接受以下选项

半径

设置滤波半径。默认值为 5。允许的范围为 1 到 127。

sigma

设置滤波西格玛。默认值为 0.5。这控制着滤波的强度。将此选项设置为 0 实际上不起作用。

planes

设置要处理的平面。默认为 15,即所有可用平面。

32.262 tmix

混合连续的视频帧。

下面是接受选项的说明。

frames

要混合的连续帧数。如果未指定,则默认为 3。

权重

指定每个输入视频帧的权重。每个权重用空格分隔。如果权重数小于 frames 的数量,则最后指定的权重将用于所有其余未设置的权重。

scale

指定比例,如果设置了比例,则将每个权重与像素值相乘的总和乘以比例,以给出最终目标像素值。默认情况下,scale 会自动缩放为权重之和。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

32.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
    

32.262.2 命令

此滤镜支持以下命令

权重
scale
planes

语法与具有相同名称的选项相同。

32.263 tonemap

色调映射来自不同动态范围的颜色。

此滤镜需要单精度浮点数据,因为它需要在(并且可以输出)超出范围的值。需要另一个滤镜(例如 zscale)将生成的帧转换为可用的格式。

实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

32.263.1 选项

此滤镜接受以下选项。

色调映射

设置要使用的色调映射算法。

可能的值为

none

不应用任何色调映射,仅对过亮的像素进行去饱和处理。

剪切

硬裁剪任何超出范围的值。对于范围内的值,使用它可以获得完美的色彩精度,同时会扭曲超出范围的值。

linear

将整个参考色域拉伸到显示器的线性倍数。

gamma

在色调曲线之间拟合对数传递。

reinhard

使用简单的曲线保持整体图像亮度,采用非线性对比度,这会导致细节平坦化和色彩精度降低。

hable

reinhard 更好地保留暗部和亮部细节,但代价是整体略微变暗。当细节保留比色彩和亮度精度更重要时使用它。

mobius

平滑地映射超出范围的值,同时尽可能保留范围内素材的对比度和色彩。当色彩精度比细节保留更重要时使用它。

默认值为 none。

param

调整色调映射算法。

这会影响以下算法

none

忽略。

linear

指定拉伸时使用的比例因子。默认为 1.0。

gamma

指定函数的指数。默认为 1.8。

剪切

指定一个额外的线性系数,在裁剪前乘以信号。默认为 1.0。

reinhard

指定显示峰值处的局部对比度系数。默认为 0.5,这意味着在色域内的值亮度大约是裁剪时的一半。

hable

忽略。

mobius

指定从线性变换到 Möbius 变换的过渡点。低于此点的每个值都保证被 1:1 映射。该值越高,结果越准确,但代价是会丢失亮部细节。默认为 0.3,由于初始斜率陡峭,仍然可以相当准确地保留范围内的色彩。

去饱和

对超出此亮度级别的高光应用去饱和。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变成白色来帮助防止超高光出现不自然的色彩失真。这使得图像感觉更自然,但代价是会减少超出范围的颜色的信息。

默认值 2.0 有些保守,主要只适用于天空或阳光直射的表面。设置为 0.0 将禁用此选项。

仅当输入帧具有受支持的颜色标签时,此选项才有效。

peak

使用此值覆盖信号/标称/参考峰值。当显示元数据中嵌入的峰值信息不可靠或从较低范围映射到较高范围时非常有用。

32.264 tpad

临时填充视频帧。

该滤镜接受以下选项

start

指定输入视频流之前的延迟帧数。默认为 0。

停止

指定输入视频流之后的填充帧数。设置为 -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。

颜色

指定填充区域的颜色。有关此选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分

color 的默认值为“黑色”。

32.265 转置

转置输入视频中的行和列,并可选择翻转它。

它接受以下参数

方向

指定转置方向。

可以采用以下值

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 选项。

数值已弃用,应改为使用符号常量。

直通

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

默认值为 none

例如,要顺时针旋转 90 度并保留纵向布局

transpose=dir=1:passthrough=portrait

上面的命令也可以指定为

transpose=1:portrait

32.266 transpose_npp

转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,该滤镜主要共享相同的选项。

它接受以下参数

方向

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

直通

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

32.267 修剪

修剪输入,使输出包含输入的一个连续子部分。

它接受以下参数

start

指定要保留部分的开始时间,即时间戳为 start 的帧将是输出中的第一帧。

end

指定将要丢弃的第一帧的时间,即时间戳紧靠 end 的帧之前的帧将是输出中的最后一帧。

start_pts

这与 start 相同,不同之处在于此选项以时基单位而不是秒为单位设置开始时间戳。

end_pts

这与 end 相同,不同之处在于此选项以时基单位而不是秒为单位设置结束时间戳。

duration

输出的最大持续时间(以秒为单位)。

起始帧

应传递到输出的第一帧的编号。

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
    

32.268 unpremultiply

使用第二个流的第一平面作为 alpha,对输入视频流应用 alpha 预乘效果。

两个流必须具有相同的尺寸和相同的像素格式。

该滤波器接受以下选项

planes

设置将处理哪些平面,未处理的平面将被复制。默认值为 0xf,所有平面都将被处理。

如果格式有 1 个或 2 个分量,则亮度为位 0。如果格式有 3 个或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 为亮度,位 1 为色度-U,位 2 为色度-V。如果存在,则 alpha 通道始终是最后一位。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

32.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”。

32.269.1 示例

  • 应用强亮度锐化效果
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度和色度参数应用强模糊效果
    unsharp=7:7:-2:7:7:-2
    

32.270 untile

将由平铺图像组成的视频分解为单个图像。

输出视频的帧率是输入视频的帧率乘以平铺数量。

此滤镜与 tile 的作用相反。

该滤镜接受以下选项

layout

设置网格大小(即行数和列数)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频尺寸”部分

32.270.1 示例

  • 从一个由 25 帧垂直堆叠的静态图像文件生成一个 1 秒的视频,就像一个模拟胶片卷
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

32.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。

32.272 v360

在各种格式之间转换 360 度视频。

该滤镜接受以下选项

输入
output

设置输入/输出视频的格式。

可用格式

e
equirect

等距柱状投影。

c3x2
c6x1
c1x6

具有 3x2/6x1/1x6 布局的立方体贴图。

特定于格式的选项

in_pad
out_pad

设置输入/输出立方体贴图的填充比例。值以小数表示。

示例值

0

无填充。

0.01

1% 的面是填充。例如,对于 1920x1280 分辨率,面的大小为 640x640,填充将是每侧 3 个像素。(640 * 0.01 = 6 像素)

默认值为 0。最大值为 0.1

fin_pad
fout_pad

设置输入/输出立方体贴图的固定填充。值以像素为单位。

默认值为 0。如果大于零,它将覆盖其他填充选项。

in_forder
out_forder

设置输入/输出立方体贴图的面顺序。为每个位置选择一个方向。

方向的指定

r

右侧

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

汉默-艾托夫地图投影格式。

sinusoidal

正弦地图投影格式。

fisheye

鱼眼投影。

特定于格式的选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

pannini

潘尼尼投影。

特定于格式的选项

h_fov

设置输出潘尼尼参数。

ih_fov

设置输入潘尼尼参数。

cylindrical

圆柱投影。

特定于格式的选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

perspective

透视投影。(仅限输出)

特定于格式的选项

v_fov

设置透视参数。

tetrahedron

四面体投影。

tsp

截断方锥体投影。

he
hequirect

半等距柱状投影。

equisolid

等立体格式。

特定于格式的选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

og

正交格式。

特定于格式的选项

h_fov
v_fov
d_fov

设置输出水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角视野。值以度为单位。

如果设置了对角视野,它将覆盖水平和垂直视野。

octahedron

八面体投影。

cylindricalea

圆柱等面积投影。

interp

设置插值方法。
注意:更复杂的插值方法需要更多的内存才能运行。

可用方法

near
nearest

最近邻。

line
linear

双线性插值。

lagrange9

拉格朗日 9 插值。

cube
cubic

双三次插值。

lanc
lanczos

兰索斯插值。

sp16
spline16

样条 16 插值。

gauss
gaussian

高斯插值。

mitchell

米切尔插值。

默认值为 line

w
h

设置输出视频分辨率。

默认分辨率取决于格式。

in_stereo
out_stereo

设置输入/输出立体格式。

2d

2D 单声道

sbs

并排

tb

上下

输入和输出格式的默认值为 2d

yaw
pitch
roll

设置输出视频的旋转。值以度为单位。

rorder

设置输出视频的旋转顺序。为每个位置选择一个项目。

y, Y

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

重置输出视频的旋转。布尔值,默认禁用。

32.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
    

32.272.2 命令

此滤镜支持上述选项的子集作为命令

32.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。

32.274 varblur

通过使用第二个视频流来设置模糊半径,应用可变模糊滤镜。第二个流必须具有相同的尺寸。

此滤波器接受以下选项

min_r

设置允许的最小半径。允许的范围是 0 到 254。默认为 0。

max_r

设置允许的最大半径。允许的范围是 1 到 255。默认为 8。

planes

设置要处理的平面。默认情况下,使用所有平面。

varblur 滤镜还支持 framesync 选项。

32.274.1 命令

此滤镜支持上述所有选项作为命令

32.275 vectorscope

在二维图(称为向量示波器)中显示 2 个颜色分量的值。

此滤波器接受以下选项

mode, m

设置向量示波器模式。

它接受以下值

gray
tint

灰度值显示在图上,亮度越高表示在图上位置具有相同分量颜色值的像素越多。这是默认模式。

color

灰度值显示在图上。视频帧中不存在的周围像素值以由选项 xy 设置的 2 个颜色分量的渐变绘制。第三个颜色分量是静态的。

color2

视频帧中存在的实际颜色分量值显示在图上。

color3

与 color2 类似,但在图上相同值 xy 的频率越高,另一个颜色分量的值就越高,默认情况下,当 xy 的值为亮度。

color4

视频帧中存在的实际颜色显示在图上。如果两种不同的颜色映射到图上的相同位置,则选择在图中不存在的具有较高分量值的颜色。

color5

灰度值显示在图上。与 color 类似,但第三个颜色分量是从径向渐变中选择的。

x

设置哪个颜色分量将表示在 X 轴上。默认为 1

y

设置哪个颜色分量将表示在 Y 轴上。默认为 2

intensity, i

设置强度,由模式:gray、color、color3 和 color5 使用,以增加表示图中 (X, Y) 位置频率的颜色分量的亮度。

envelope, e
none

无包络,这是默认值。

instant

瞬时包络,即使是最暗的单个像素也会被清晰地突出显示。

peak

保持图中随时间呈现的最大值和最小值。这样,您仍然可以发现超出范围的值,而无需不断查看向量示波器。

peak+instant

峰值和瞬时包络组合在一起。

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

设置灰度/色调向量示波器模式的颜色色调。默认情况下,这两个选项都为零。这意味着没有色调,输出将保持灰色。

32.276 vidstabdetect

分析视频稳定/去抖动。执行 2 次传递中的第 1 次传递,请参阅 vidstabtransform 以了解第 2 次传递。

此滤镜生成一个文件,其中包含有关后续帧的相对平移和旋转变换信息,然后由 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%。 (默认

32.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
    

32.277 vidstabtransform

视频稳定/去抖动:2 次传递中的第 2 次传递,请参阅 vidstabdetect 以了解第 1 次传递。

读取包含每帧变换信息的文件,并应用/补偿这些变换。与 vidstabdetect 滤镜结合使用,可以用来消除视频抖动。另请参阅 http://public.hronopik.de/vid.stab。 重要的是还要使用 unsharp 滤镜,见下文。

要启用此滤镜的编译,您需要使用 --enable-libvidstab 配置 FFmpeg。

32.277.1 选项

输入

设置用于读取变换信息的文件路径。默认值为 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

disabled

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。

32.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
    

32.278 vflip

垂直翻转输入视频。

例如,要使用 ffmpeg 垂直翻转视频

ffmpeg -i in.avi -vf "vflip" out.avi

32.279 vfrdet

检测可变帧率视频。

此滤镜尝试检测输入是可变帧率还是恒定帧率。

最后,它将输出检测为具有可变 delta pts 的帧数,以及具有恒定 delta pts 的帧数。如果存在具有可变 delta 的帧,则它还将显示遇到的最小、最大和平均 delta。

32.280 vibrance

增强或改变饱和度。

该滤镜接受以下选项

强度

如果为正值,则设置增强强度;如果为负值,则设置改变强度。默认值为 0。允许的范围为 -2 到 2。

rbal

设置红色平衡。默认值为 1。允许的范围为 -10 到 10。

gbal

设置绿色平衡。默认值为 1。允许的范围为 -10 到 10。

bbal

设置蓝色平衡。默认值为 1。允许的范围为 -10 到 10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

alternate

如果 intensity 为负值,并且此项设置为 1,则颜色将发生变化,否则颜色饱和度会降低,更接近灰色。

32.280.1 命令

此滤镜支持所有上述选项作为命令

32.281 vif

获取两个输入视频之间的平均 VIF(视觉信息保真度)。

此滤镜接受两个输入视频。

为了使此滤镜正常工作,两个输入视频必须具有相同的分辨率和像素格式。此外,它假设两个输入具有相同数量的帧,这些帧将逐一进行比较。

获得的平均 VIF 分数将通过日志系统打印。

该滤镜会存储每帧计算的 VIF 分数。

此滤镜还支持 framesync 选项。

在下面的示例中,正在处理的输入文件 main.mpg 与参考文件 ref.mpg 进行比较。

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

32.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’。

抖动

设置抖动以减少圆形条带效应。默认值为 1(启用)。

aspect

设置晕影纵横比。此设置允许您调整晕影的形状。将此值设置为输入的 SAR 将使晕影矩形化,跟随视频的尺寸。

默认值为 1/1

32.282.1 表达式

alphax0y0 表达式可以包含以下参数。

w
h

输入宽度和高度

n

输入帧数,从 0 开始

pts

经过滤的视频帧的 PTS(显示时间戳)时间,以 TB 单位表示,如果未定义则为 NAN

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

经过滤的视频帧的 PTS(显示时间戳),以秒表示,如果未定义则为 NAN

tb

输入视频的时间基

32.282.2 示例

  • 应用简单的强烈晕影效果
    vignette=PI/4
    
  • 制作闪烁的晕影
    vignette='PI/4+random(1)*PI/50':eval=frame
    

32.283 vmafmotion

获取视频的平均 VMAF 运动得分。它是 VMAF 的组件指标之一。

获得的平均运动得分将通过日志系统打印。

该滤镜接受以下选项

stats_file

如果指定,滤镜将使用指定的文件保存每帧相对于前一帧的运动得分。当文件名等于“-”时,数据将发送到标准输出。

示例

ffmpeg -i ref.mpg -vf vmafmotion -f null -

32.284 vstack

垂直堆叠输入视频。

所有流必须具有相同的像素格式和相同的宽度。

请注意,此滤镜比使用 overlaypad 滤镜创建相同输出更快。

该滤镜接受以下选项

输入

设置输入流的数量。默认为 2。

shortest

如果设置为 1,则强制在最短输入终止时终止输出。默认值为 0。

32.285 w3fdif

去隔行输入视频(“w3fdif” 代表 “Weston 3 Field Deinterlacing Filter”)。

基于 Martin Weston 为 BBC R&D 描述的过程,并基于 Jim Easterbrook 为 BBC R&D 编写的去隔行算法实现,Weston 3 场去隔行滤镜使用由 BBC R&D 计算的滤镜系数。

此滤镜使用帧中的场主导信息来决定在输出中将每对场中的哪个场放在首位。如果它出错,请在 w3fdif 滤镜之前使用 setfield 滤镜。

有两组滤镜系数,称为“简单”和“复杂”。通过传递可选参数可以设置使用哪组滤镜系数

filter

设置隔行扫描滤镜系数。接受以下值之一

simple

简单滤镜系数集。

complex

更复杂的滤镜系数集。

默认值为 ‘complex’。

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

frame

0, send_frame

field

1, send_field

默认值为 field

默认值为 send_field

parity

tff

0, tff

bff

1, bff

auto

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

all

去隔行所有帧。

interlaced

1, interlaced

默认值为 ‘all’。

32.285.1 命令

此滤镜支持与选项相同的 命令

32.286 波形

视频波形监视器。

波形监视器绘制颜色分量的强度。默认情况下,仅绘制亮度分量。波形的每一列对应于源视频中的一列像素。

它接受以下选项

mode, m

可以是 row(行)或 column(列)。默认值为 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

默认值为 digital。

bgopacity, b

设置背景不透明度。

tint0,t0
tint1,t1

设置输出的色调。仅在低通滤波器中使用,且当显示不为叠加并且输入像素格式不是 RGB 时使用。

适应模式, fm

设置视频输出帧的采样宽高比。可用于配置波形,使其在某个方向上不会拉伸太多。

none

将采样宽高比设置为 1/1。

size

设置采样宽高比以匹配视频的输入大小。

默认值为 ‘none’。

输入

设置过滤器要从中选择的输入格式。可以是 ‘all’,用于从所有可用格式中选择,也可以是 ‘first’,用于选择第一个可用的格式。默认值为 ‘first’。

32.287 weave, doubleweave

weave 接收基于场的视频输入,并将每个两个连续的场连接成一个单帧,从而生成一个帧率减半、帧计数减半的新双倍高度剪辑。

doubleweave 的工作方式与 weave 相同,但不减少帧率和帧计数。

它接受以下选项

first_field

设置第一个场。可用值包括

top, t

将帧设置为顶场优先。

底, b

将帧设置为底场优先。

32.287.1 示例

  • 使用 selectseparatefields 过滤器隔行扫描视频
    separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
    

32.288 xbr

应用专为像素艺术设计的高质量 xBR 放大滤波器。它遵循一组边缘检测规则,请参见 https://forums.libretro.com/t/xbr-algorithm-tutorial/123

它接受以下选项

n

设置缩放维度:2 表示 2xBR3 表示 3xBR4 表示 4xBR。默认值为 3

32.289 xcorrelate

在第一个和第二个输入视频流之间应用归一化互相关。

第二个输入视频流的尺寸必须小于第一个输入视频流。

该滤镜接受以下选项

planes

设置要处理的平面。

辅助

设置将处理第二个输入视频流中的哪些辅助视频帧,可以是 firstall。默认值为 all

xcorrelate 过滤器还支持 framesync 选项。

32.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) 位置的像素值。

32.290.1 示例

  • 从一个输入视频交叉淡化到另一个输入视频,淡入淡出转场,转场持续时间为 2 秒,起始偏移量为 5 秒
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

32.291 xmedian

从多个输入视频中选取中值像素。

该滤镜接受以下选项

输入

设置输入数量。默认值为 3。允许的范围是 3 到 255。如果输入数量为偶数,则结果将是两个中值的平均值。

planes

设置要过滤的平面。默认值为 15,表示处理所有平面。

percentile

设置中值百分位数。默认值为 0.5。默认值 0.5 将始终选择中值,而 0 将选择最小值,1 将选择最大值。

32.291.1 命令

此滤镜支持以上所有选项作为 命令,不包括选项 inputs

32.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 选项。

32.292.1 示例

  • 对两个 1080p 高清视频 ref_source.yuv 和 test_video.yuv 进行 XPSNR 分析,两者均为 24 帧/秒,颜色格式为 4:2:0,位深度为 8,并输出名为“xpsnr.log”的日志文件
    ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate
    24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
    
  • 对两个 2160p 超高清视频进行 XPSNR 分析,ref_source.yuv 位深度为 8,test_video.yuv 位深度为 10,两者均为 60 帧/秒,颜色格式为 4:2:0,无日志文件输出
    ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate
    60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
    

32.293 xstack

将视频输入堆叠到自定义布局中。

所有流必须具有相同的像素格式。

该滤镜接受以下选项

输入

设置输入流的数量。默认为 2。

layout

指定输入布局。此选项要求用户显式设置所需的布局配置。这将设置每个视频输入在输出中的位置。每个输入用“|”分隔。第一个数字表示列,第二个数字表示行。数字从 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

如果设置为有效颜色,则所有未使用的像素将填充该颜色。默认情况下,填充设置为 none,因此禁用。

32.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
    

    请注意,如果输入大小不同,则可能会出现间隙或重叠。

32.294 yadif

对输入视频进行去隔行处理(“yadif”表示“又一个去隔行滤镜”)。

它接受以下参数

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

要采用的反交错模式。它接受以下值之一:

0, send_frame

为每个帧输出一个帧。

1, send_field

2, send_frame_nospatial

类似于 send_frame,但它会跳过空间隔行检查。

3, send_field_nospatial

类似于 send_field,但它会跳过空间隔行检查。

默认值为 send_frame

默认值为 send_field

parity

为输入交错视频假定的图像场奇偶性。它接受以下值之一:

0, tff

假定顶场优先。

1, bff

假定底场优先。

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0, all

对所有帧进行反交错处理。

1, interlaced

仅对标记为交错的帧进行反交错处理。

32.295 yadif_cuda

使用 yadif 算法对输入视频进行去隔行处理,但该算法在 CUDA 中实现,因此它可以作为使用 nvdec 和/或 nvenc 进行 GPU 加速管道的一部分工作。

它接受以下参数

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

要采用的反交错模式。它接受以下值之一:

0, send_frame

为每个帧输出一个帧。

1, send_field

2, send_frame_nospatial

类似于 send_frame,但它会跳过空间隔行检查。

3, send_field_nospatial

类似于 send_field,但它会跳过空间隔行检查。

默认值为 send_frame

默认值为 send_field

parity

为输入交错视频假定的图像场奇偶性。它接受以下值之一:

0, tff

假定顶场优先。

1, bff

假定底场优先。

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0, all

对所有帧进行反交错处理。

1, interlaced

仅对标记为交错的帧进行反交错处理。

32.296 yaepblur

应用模糊滤镜,同时保留边缘(“yaepblur”表示“另一个边缘保留模糊滤镜”)。该算法在“J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980.” 中进行了描述。

它接受以下参数

半径,r

设置窗口半径。默认值为 3。

平面,p

设置要过滤的平面。默认值仅为第一个平面。

sigma, s

设置模糊强度。默认值为 128。

32.296.1 命令

此滤镜支持与选项相同的 命令

32.297 zoompan

应用缩放和平移效果。

此滤波器接受以下选项

缩放,z

设置缩放表达式。范围为 1-10。默认值为 1。

x
y

设置 x 和 y 表达式。默认值为 0。

d

以帧数为单位设置持续时间表达式。这将设置单个输入图像的效果将持续多少帧。默认值为 90。

s

设置输出图像大小,默认值为 “hd720”。

fps

设置输出帧率,默认值为 “25”。

每个表达式都可以包含以下常量

in_w, iw

输入宽度。

in_h, ih

输入高度。

out_w, ow

输出宽度。

out_h, oh

输出高度。

输入

输入帧计数。

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

显示纵横比

32.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)'
    

32.298 zscale

使用 z.lib 库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg。要启用此滤镜的编译,你需要使用 --enable-libzimg 配置 FFmpeg。

zscale 滤镜通过更改输出采样纵横比,强制输出显示纵横比与输入相同。

如果输入图像格式与下一个滤镜请求的格式不同,则 zscale 滤镜会将输入转换为请求的格式。

32.298.1 选项

此滤镜接受以下选项。

宽度,w
高度,h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果 widthw 值为 0,则将输入宽度用于输出。如果 heighth 值为 0,则将输入高度用于输出。

如果只有一个值是 -n 且 n >= 1,则 zscale 滤镜将使用一个值来保持输入图像的纵横比,该值由另一个指定的尺寸计算得出。之后,它将确保计算出的尺寸可被 n 整除,并在必要时调整该值。

如果两个值都为 -n 且 n >= 1,则其行为将与两个值都设置为 0(如前所述)相同。

请参阅下文,了解可用于尺寸表达式的常量列表。

size, s

设置视频大小。有关此选项的语法,请查看(ffmpeg-utils)手册中的“视频大小”部分

抖动,d

设置抖动类型。

可能的值为

none
有序
随机
误差扩散

默认值为 none。

滤波, f

设置调整大小滤镜类型。

可能的值为

bilinear
双三次
样条16
样条36
lanczos

默认值为双线性。

range, r

设置颜色范围。

可能的值为

输入
有限
full

默认值与输入相同。

原色,p

设置颜色原色。

可能的值为

输入
709
未指定
170米
240米
2020

默认值与输入相同。

传递,t

设置传递特性。

可能的值为

输入
709
未指定
601
linear
2020_10
2020_12
smpte2084
iec61966-2-1
arib-std-b67

默认值与输入相同。

矩阵,m

设置色彩空间矩阵。

可能的值为

输入
709
未指定
470bg
170米
2020_ncl
2020_cl

默认值与输入相同。

rangein, rin

设置输入颜色范围。

可能的值为

输入
有限
full

默认值与输入相同。

primariesin, pin

设置输入颜色原色。

可能的值为

输入
709
未指定
170米
240米
2020

默认值与输入相同。

transferin, tin

设置输入传递特性。

可能的值为

输入
709
未指定
601
linear
2020_10
2020_12

默认值与输入相同。

matrixin, min

设置输入色彩空间矩阵。

可能的值为

输入
709
未指定
470bg
170米
2020_ncl
2020_cl
色度位置,c

设置输出色度位置。

可能的值为

输入
左侧
中心
左上
顶部
左下
底部
chromalin, cin

设置输入色度位置。

可能的值为

输入
左侧
中心
左上
顶部
左下
底部
npl

设置标称峰值亮度。

param_a

缩放滤镜的参数 A。双三次的参数 “b”,以及 lanczos 的滤波器抽头数。

param_b

缩放滤镜的参数 B。双三次的参数 “c”。

wh 选项的值是包含以下常量的表达式

in_w
in_h

输入宽度和高度

iw
ih

这些与 in_win_h 相同。

out_w
out_h

输出(缩放)宽度和高度

ow
oh

这些与 out_wout_h 相同

a

iw / ih 相同

sar

输入样本纵横比

dar

输入显示宽高比。从 (iw / ih) * sar 计算得出。

输入色度图像的宽度和高度(以像素为单位)。
hsub

水平和垂直输入色度子采样值。 例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

输出水平色度子采样值
输出垂直色度子采样值

水平和垂直输出色度子采样值。 例如,对于像素格式“yuv422p”,hsub 为 2,vsub 为 1。

32.298.2 命令

此滤镜支持以下命令

宽度,w
高度,h

设置输出视频尺寸表达式。该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持其当前值。

33 OpenCL 视频滤镜

以下是当前可用的 OpenCL 视频滤镜的描述。

要启用这些滤镜的编译,你需要使用 --enable-opencl 配置 FFmpeg。

运行 OpenCL 滤镜需要初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device opencl[=名称][:设备[,键=值...]]

使用给定的设备参数初始化一个名为 名称 的新硬件设备,类型为 opencl

-filter_hw_device 名称

将名为 名称 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参阅 https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 以下示例选择第二个平台上的第一个设备,并在其上运行具有默认参数的 avgblur_opencl 滤镜。
    -init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
    

由于 OpenCL 滤镜无法访问普通内存中的帧数据,因此所有帧数据都需要在被使用之前上传 (hwupload) 到连接到相应设备的硬件表面,然后再下载 (hwdownload) 回普通内存。请注意,hwupload 会上传到与软件帧布局相同的表面,因此可能需要在之前立即添加一个 format 滤镜,以使输入格式正确,并且 hwdownload 不支持输出上的所有格式 - 可能需要在图中紧接着插入一个额外的 format 滤镜,以使输出格式为支持的格式。

33.1 avgblur_opencl

应用平均模糊滤镜。

该滤镜接受以下选项

sizeX

设置水平半径大小。范围为 [1, 1024],默认值为 1

planes

设置要过滤的平面。默认值为 0xf,即处理所有平面。

sizeY

设置垂直半径大小。范围为 [1, 1024],默认值为 0。如果为零,则将使用 sizeX 值。

33.1.1 示例

  • 应用平均模糊滤镜,水平和垂直大小均为 3,将输出的每个像素设置为输入中以它为中心的 7x7 区域的平均值。对于图像边缘的像素,该区域不会超出图像边界,因此不会在计算中使用超出范围的坐标。
    -i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
    

33.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

w, h

输入图像的宽度和高度(以像素为单位)。
ch

cw, ch

输入色度图像的宽度和高度(以像素为单位)。
hsub

vsub

luma_power,lp
chroma_power,cp
alpha_power,ap

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub 为 2,vsub 为 1。

指定将盒状模糊滤镜应用于相应平面的次数。

luma_power 的默认值为 2。如果未指定,则 chroma_poweralpha_power 默认使用为 luma_power 设置的相应值。

33.2.1 示例

应用盒状模糊滤镜,将输出的每个像素设置为每个平面的盒半径 luma_radiuschroma_radiusalpha_radius 的平均值。该滤镜将对相应的平面应用 luma_powerchroma_poweralpha_power 次。对于图像边缘的像素,半径不会超出图像边界,因此计算中不会使用超出范围的坐标。

  • 应用一个盒状模糊滤镜,亮度、色度和 alpha 半径设置为 2,亮度、色度和 alpha 强度设置为 3。该滤镜将对图像的每个平面运行 3 次,盒半径设置为 2。
    -i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
    -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
    
  • 应用一个盒状模糊滤镜,亮度半径设置为 2,亮度强度为 1,色度半径为 4,色度强度为 5,alpha 半径为 3,alpha 强度为 7。

    对于亮度平面,将运行一次 2x2 的盒半径。

    对于色度平面,将运行 5 次 4x4 的盒半径。

    对于 alpha 平面,将运行 7 次 3x3 的盒半径。

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

33.3 colorkey_opencl

RGB 色彩空间颜色键控。

该滤镜接受以下选项

颜色

YUV 色彩空间颜色/色度键控。

similarity

将被透明度替换的颜色。

与关键颜色的相似度百分比。

blend

0.01 仅匹配精确的关键颜色,而 1.0 匹配所有颜色。

混合百分比。

0.0 使像素完全透明,或者根本不透明。

33.3.1 示例

  • 使输入中所有半绿色的像素透明,并进行少量混合。
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

33.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

33.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
    

33.5 erosion_opencl

对视频应用腐蚀效果。

此过滤器将像素替换为局部 (3x3) 最小值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改。范围是 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

坐标

指定要引用的像素的标志。范围是 [0, 255],默认值为 255,即使用所有八个像素。

标志到以 x 为中心的本地 3x3 坐标区域。

1 2 3

4 x 5

6 7 8

33.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
    

33.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

33.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
    

33.7 dilation_opencl

将膨胀效果应用于视频。

此滤镜将像素替换为局部(3x3)最大值。

它接受以下选项

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大更改。范围是 [0, 65535],默认值为 65535。如果为 0,则平面将保持不变。

坐标

指定要引用的像素的标志。范围是 [0, 255],默认值为 255,即使用所有八个像素。

标志到以 x 为中心的本地 3x3 坐标区域。

1 2 3

4 x 5

6 7 8

33.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
    

33.8 nlmeans_opencl

通过 OpenCL 的非局部均值去噪滤镜,此滤镜接受与 nlmeans 相同的选项。

33.9 overlay_opencl

将一个视频覆盖在另一个视频之上。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入叠加在其上。此滤镜要求所有输入具有相同的内存布局。因此,可能需要进行格式转换。

该滤镜接受以下选项

x

设置叠加视频在主视频上的 x 坐标。默认值为 0

y

设置叠加视频在主视频上的 y 坐标。默认值为 0

33.9.1 示例

  • 将图像 LOGO 叠加到 INPUT 视频的左上角。两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    
  • 输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,如 INPUT 为 yuv420p,LOGO 为 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    

33.10 pad_opencl

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,则将更改它们,以便输入图像位于填充区域的中心。

颜色

指定填充区域的颜色。有关此选项的语法,请查看 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 相同

33.11 prewitt_opencl

将 Prewitt 算子 (https://en.wikipedia.org/wiki/Prewitt_operator) 应用于输入视频流。

该滤波器接受以下选项

planes

设置要过滤的平面。默认值为 0xf,即处理所有平面。

scale

设置将与过滤结果相乘的值。范围是 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果的值。范围是 [-65535, 65535],默认值为 0.0

33.11.1 示例

  • 应用 Prewitt 算子,缩放设置为 2,增量设置为 10。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

33.12 program_opencl

使用 OpenCL 程序过滤视频。

source

OpenCL 程序源文件。

内核

程序中的内核名称。

输入

滤镜的输入数量。默认为 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));
    }
    

33.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

33.14 roberts_opencl

将 Roberts 交叉算子(https://en.wikipedia.org/wiki/Roberts_cross)应用于输入视频流。

该滤波器接受以下选项

planes

设置要过滤的平面。默认值为 0xf,即处理所有平面。

scale

设置将与过滤结果相乘的值。范围是 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果的值。范围是 [-65535, 65535],默认值为 0.0

33.14.1 示例

  • 应用 Roberts 交叉算子,比例设置为 2,增量设置为 10
    -i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

33.15 sobel_opencl

将 Sobel 算子(https://en.wikipedia.org/wiki/Sobel_operator)应用于输入视频流。

该滤波器接受以下选项

planes

设置要过滤的平面。默认值为 0xf,即处理所有平面。

scale

设置将与过滤结果相乘的值。范围是 [0.0, 65535],默认值为 1.0

delta

设置将添加到过滤结果的值。范围是 [-65535, 65535],默认值为 0.0

33.15.1 示例

  • 应用 Sobel 算子,比例设置为 2,增量设置为 10
    -i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

33.16 tonemap_opencl

使用色调映射执行 HDR(PQ/HLG) 到 SDR 的转换。

它接受以下参数

色调映射

指定要使用的色调映射算子。与 tonemap 中的 tonemap 选项相同。

param

调整色调映射算法。与 tonemap 中的 param 选项相同。

去饱和

对超出此亮度级别的高光应用去饱和。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变成白色来帮助防止超高光出现不自然的色彩失真。这使得图像感觉更自然,但代价是会减少超出范围的颜色的信息。

默认值为 0.5,此处的算法与当前 CPU 版本的 tonemap 略有不同。设置为 0.0 会禁用此选项。

threshold

色调映射算法参数针对每个场景进行微调。并使用一个阈值来检测场景是否已更改。如果当前帧平均亮度与当前运行平均值之间的距离超过阈值,我们将重新计算场景平均值和峰值亮度。默认值为 0.2。

format

指定输出像素格式。

当前支持的格式为

p010
nv12
range, r

设置输出颜色范围。

可能的值为

tv/mpeg
pc/jpeg

默认值与输入相同。

原色,p

设置输出颜色原色。

可能的值为

bt709
bt2020

默认值与输入相同。

传递,t

设置输出传输特性。

可能的值为

bt709
bt2020

默认值为 bt709。

矩阵,m

设置输出色彩空间矩阵。

可能的值为

bt709
bt2020

默认值与输入相同。

33.16.1 示例

  • 使用线性算子将 HDR(PQ/HLG) 视频转换为 bt2020 传输特性 p010 格式。
    -i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
    

33.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”。

33.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
    

33.18 xfade_opencl

使用 OpenCL 通过自定义过渡效果交叉淡化两个视频。

它接受以下选项

过渡

设置可能的过渡效果之一。

custom

选择自定义过渡效果,实际过渡描述将从源选项和内核选项中选择。

fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown

默认过渡为淡入淡出。

source

自定义过渡的 OpenCL 程序源文件。

内核

设置要用于程序源文件中自定义过渡的内核名称。

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);
    }
    

34 VAAPI 视频滤镜

VAAPI 视频过滤器通常与 VAAPI 解码器和 VAAPI 编码器一起使用。以下是对 VAAPI 视频过滤器的描述。

要启用这些过滤器的编译,您需要使用 --enable-vaapi 配置 FFmpeg。

要使用 vaapi 过滤器,您需要正确设置 vaapi 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/VAAPI

34.1 overlay_vaapi

将一个视频叠加在另一个视频的顶部。

它接受两个输入并有一个输出。第一个输入是 "main" 视频,第二个输入覆盖在上面。

该滤镜接受以下选项

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 选项。

34.1.1 示例

  • 将图像 LOGO 叠加在输入视频的左上角。此过滤器的两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
    
  • 将图像 LOGO 叠加在输入视频左上角偏移 (200, 100) 的位置。输入的颜色通道具有相同的内存布局,叠加层具有额外的 alpha 平面,例如 INPUT 为 yuv420p,LOGO 为 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
    

34.2 tonemap_vaapi

执行 HDR 到 SDR 或 HDR 到 HDR 的色调映射。它目前仅接受 HDR10 作为输入。

它接受以下参数

format

指定输出像素格式。

对于 HDR 到 SDR 的色调映射,默认值为 nv12,对于 HDR 到 HDR 的色调映射,默认值为 p010。

原色,p

设置输出颜色原色。

对于 HDR 到 SDR 的色调映射,默认值为 bt709,对于 HDR 到 HDR 的色调映射,默认值与输入相同。

传递,t

设置输出传输特性。

对于 HDR 到 SDR 的色调映射,默认值为 bt709,对于 HDR 到 HDR 的色调映射,默认值与输入相同。

矩阵,m

设置输出色彩空间矩阵。

对于 HDR 到 SDR 的色调映射,默认值为 bt709,对于 HDR 到 HDR 的色调映射,默认值与输入相同。

display

设置输出母版显示色域。它由一个以 “|” 分隔的两个值列表给出,两个值之间用空格分隔。它按 G、B、R 的顺序设置显示原色的 x 和 y,然后设置白点的 x 和 y,以及标称的最小和最大显示亮度。

设置此选项时将执行 HDR 到 HDR 的色调映射。

light

设置输出内容光照级别信息。它接受 2 个空格分隔的值,第一个输入是最大光照级别,第二个输入是最大平均光照级别。

对于 HDR 到 SDR 的色调映射,它会被忽略,对于 HDR 到 HDR 的色调映射,它是可选的。

34.2.1 示例

  • 将 HDR(HDR10) 视频转换为 bt2020 传输特性 p010 格式
    tonemap_vaapi=format=p010:t=bt2020-10
    
  • 将 HDR 视频转换为 HDR 视频
    tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000
    

34.3 hstack_vaapi

水平堆叠输入视频。

这是 hstack 过滤器的 VA-API 变体,每个输入流可能具有不同的高度,此过滤器将在保持原始宽高比的同时按比例缩小/放大每个输入流。

它接受以下选项

输入

请参阅 hstack

shortest

请参阅 hstack

height

设置输出的高度。如果设置为 0,此过滤器会将输出的高度设置为第一个输入流的高度。默认值为 0。

34.4 vstack_vaapi

垂直堆叠输入视频。

这是 vstack 过滤器的 VA-API 变体,每个输入流可能具有不同的宽度,此过滤器将在保持原始宽高比的同时按比例缩小/放大每个输入流。

它接受以下选项

输入

请参阅 vstack

shortest

请参阅 vstack

width

设置输出的宽度。如果设置为 0,此过滤器会将输出的宽度设置为第一个输入流的宽度。默认值为 0。

34.5 xstack_vaapi

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 VA-API 变体,每个输入流可能具有不同的大小。此滤镜会将每个输入流缩放至给定的输出大小,或者缩放至第一个输入流的大小。

它接受以下选项

输入

请参阅 xstack

shortest

请参阅 xstack

layout

请参阅 xstack。此外,它允许用户为每个输入流提供输出大小。

xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

请参阅 xstack

grid_tile_size

当设置 grid 时,为每个输入流设置输出大小。如果未设置此选项,则此滤镜默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

fill

请参阅 xstack

34.6 pad_vaapi

将填充添加到输入图像,并将原始输入放置在提供的 xy 坐标处。

它接受以下选项

宽度,w
高度,h

指定添加填充的输出图像大小的表达式。如果 widthheight 的值为 0,则输出使用相应的输入大小。

width 表达式可以引用 height 表达式设置的值,反之亦然。

widthheight 的默认值为 0。

x
y

指定在填充区域内放置输入图像的偏移量,相对于输出图像的顶部/左侧边框。

x 表达式可以引用 y 表达式设置的值,反之亦然。

xy 的默认值为 0。

如果 xy 的计算结果为负数,则将更改它们,以便输入图像位于填充区域的中心。

颜色

指定填充区域的颜色。有关此选项的语法,请查看 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 相同

34.7 drawbox_vaapi

在输入图像上绘制一个彩色框。

它接受以下参数

x
y

指定框的左上角坐标的表达式。默认值为 0。

宽度,w
高度,h

指定框的宽度和高度的表达式;如果为 0,则将其解释为输入宽度和高度。默认值为 0。

颜色,c

指定要绘制的框的颜色。有关此选项的通用语法,请查看 ffmpeg-utils 手册中的“颜色”部分

厚度,t

设置框边缘厚度的表达式。值为 fill 将创建一个填充的框。默认值为 3

请参阅下面的接受常量列表。

替换

当值为 1 时,绘制的框的像素将覆盖视频的颜色和 alpha 像素。默认值为 0,它将框合成到输入视频上。

参数 xywh 以及 t 是包含以下常量的表达式

in_h, ih
in_w, iw

输入宽度和高度。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制的框的宽度和高度。

t

绘制的框的粗细。

34.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
    

35 Vulkan 视频滤镜

以下是对当前可用的 Vulkan 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-vulkan 以及 --enable-libglslang--enable-libshaderc 来配置 FFmpeg。

运行 Vulkan 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device vulkan[=name][:device[,key=value...]]

使用给定的设备参数和 key=value 中的选项,初始化一个名为 namevulkan 类型的新硬件设备。支持以下选项

debug

如果设置为 1,则打开验证层。

linear_images

分配线性图像。不适用于解码。

disable_multiplane

禁用多平面图像。不适用于解码。

-filter_hw_device 名称

将名为 名称 的硬件设备传递给任何滤镜图中的所有滤镜。

有关更多详细信息,请参阅 https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 以下是在第一个设备上运行带有默认参数的 nlmeans_vulkan 滤镜的示例。
    -init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
    

由于 Vulkan 滤镜无法访问普通内存中的帧数据,因此所有帧数据都需要上传 (hwupload) 到连接到适当设备的硬件表面,然后下载 (hwdownload) 回到普通内存。请注意,hwupload 将上传到与软件帧具有相同布局的帧,因此可能需要在之前立即添加 format 滤镜,以使输入进入正确的格式,并且 hwdownload 不支持输出上的所有格式 - 通常需要在图形中紧随其后插入一个额外的 format 滤镜,以使输出采用支持的格式。

35.1 avgblur_vulkan

应用平均模糊滤镜,该滤镜使用 Vulkan 在 GPU 上实现。

该滤镜接受以下选项

sizeX

设置水平半径大小。范围为 [1, 32],默认值为 3

sizeY

设置垂直半径大小。范围为 [1, 32],默认值为 3

planes

设置要过滤的平面。默认值为 0xf,即处理所有平面。

35.2 blend_vulkan

将两个 Vulkan 帧相互混合。

blend 滤镜接受两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出也会终止。

下面是接受选项的说明。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

设置特定像素分量的混合模式,或在 all_mode 的情况下设置所有像素分量的混合模式。默认值为 normal

组件模式的可用值有

normal
multiply

35.3 bwdif_vulkan

使用 bwdif 的去隔行器,即“Bob Weaver 去隔行滤镜”算法,该算法使用 Vulkan 在 GPU 上实现。

它接受以下参数

mode

基于 yadif 的运动自适应反交错处理,使用 w3fdif 和三次插值算法。它接受以下参数:

要采用的反交错模式。它接受以下值之一:

0, send_frame

为每个帧输出一个帧。

1, send_field

为每个场输出一个帧。

默认值为 send_field

parity

为输入交错视频假定的图像场奇偶性。它接受以下值之一:

0, tff

假定顶场优先。

1, bff

假定底场优先。

-1, auto

启用场奇偶性的自动检测。

默认值为 auto。如果交错未知或解码器未导出此信息,则将假定顶场优先。

deint

指定要反交错的帧。接受以下值之一:

0, all

对所有帧进行反交错处理。

1, interlaced

仅对标记为交错的帧进行反交错处理。

35.4 chromaber_vulkan

应用模拟色差的效果。它最适合 RGB 输入,但对 YCbCr 输入也提供类似的效果。

dist_x

水平位移乘数。每个色度像素的位置将从此数量乘以,从图像中心开始。默认为 0

dist_y

类似地,这设置垂直位移乘数。默认为 0

35.5 color_vulkan

创建一个纯色 Vulkan 帧的视频源。用于基准测试或叠加。

它接受以下参数

颜色

要使用的颜色。可以是名称或十六进制值。默认值为 black

size

输出帧的大小。默认值为 1920x1080

rate

输出的帧率。默认值为每秒 60 帧。

duration

视频时长。默认值为 -0.000001

sar

视频信号的宽高比。默认值为 1/1

format

输出 Vulkan 帧的像素格式。默认值为 yuv444p

输出范围

设置输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制使用特定的输出和编码器值。如果未指定,则范围取决于像素格式。 可能的值

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(8 位亮度时为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(8 位亮度时为 16-235)。

35.6 vflip_vulkan

垂直翻转图像。

35.7 hflip_vulkan

水平翻转图像。

35.8 flip_vulkan

沿垂直和水平轴翻转图像。

35.9 gblur_vulkan

在 Vulkan 帧上应用高斯模糊滤镜。

该滤镜接受以下选项

sigma

设置水平西格玛,高斯模糊的标准差。默认值为 0.5

sigmaV

设置垂直西格玛,如果为负值,则与 sigma 相同。默认值为 -1

planes

设置要过滤的平面。默认情况下,会过滤所有平面。

size

设置沿水平轴的内核大小。默认值为 19

sizeV

设置沿垂直轴的内核大小。默认值为 0,这会将值设置为与 size 相同。

35.10 nlmeans_vulkan

使用非局部均值算法对帧进行去噪,该算法使用 Vulkan 在 GPU 上实现。它支持比 nlmeansnlmeans_opencl 更多的像素格式,包括 alpha 通道支持。

此滤镜接受以下选项。

s

设置所有组件的去噪强度。默认值为 1.0。必须在 [1.0, 100.0] 范围内。

p

设置所有平面的补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。

r

设置研究区域大小。默认值为 15。必须是 [0, 99] 范围内的奇数。

t

设置并行性。默认值为 36。必须是 [1, 168] 范围内的数字。较大的值可能会加快处理速度,但会增加 VRAM 消耗。较低的值会降低速度,从而减少 VRAM 使用。仅在具有原子浮点运算的 GPU(RDNA3+,Ampere+)上支持。

s0
s1
s2
s3

设置特定组件的去噪强度。默认值为 1,等于 s。必须是 [1, 100] 范围内的奇数。

p0
p1
p2
p3

设置特定组件的补丁大小。默认值为 7,等于 p。必须是 [0, 99] 范围内的奇数。

35.11 overlay_vulkan

将一个视频覆盖在另一个视频之上。

它需要两个输入,并有一个输出。第一个输入是要叠加第二个输入的“主”视频。此滤镜要求所有输入使用相同的像素格式。因此,可能需要进行格式转换。

该滤镜接受以下选项

x

设置叠加视频在主视频上的 x 坐标。默认值为 0

y

设置叠加视频在主视频上的 y 坐标。默认值为 0

35.12 transpose_vt

转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,该滤镜主要共享相同的选项。

它接受以下参数

方向

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

hflip

水平翻转输入视频。

vflip

垂直翻转输入视频。

直通

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

35.13 transpose_vulkan

转置输入视频中的行和列,并可选择翻转它。有关更深入的示例,请参阅 transpose 视频滤镜,该滤镜主要共享相同的选项。

它接受以下参数

方向

指定转置方向。

可以采用以下值

cclock_flip

逆时针旋转 90 度并垂直翻转。(默认)

clock

顺时针旋转 90 度。

cclock

逆时针旋转 90 度。

clock_flip

顺时针旋转 90 度并垂直翻转。

直通

如果输入几何形状与指定值指定的几何形状匹配,则不应用转置。它接受以下值

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当 height >= width 时)。

landscape

保留横向几何形状(当 width >= height 时)。

36 QSV 视频滤镜

以下是对当前可用的 QSV 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用 --enable-libmfx--enable-libvpl 配置 FFmpeg。

要使用 QSV 滤镜,您需要正确设置 QSV 设备。有关更多信息,请阅读 https://trac.ffmpeg.org/wiki/Hardware/QuickSync

36.1 hstack_qsv

水平堆叠输入视频。

这是 hstack 滤镜的 QSV 变体,每个输入流可能具有不同的高度。此滤镜将缩放每个输入流,同时保持原始宽高比。

它接受以下选项

输入

请参阅 hstack

shortest

请参阅 hstack

height

设置输出的高度。如果设置为 0,此过滤器会将输出的高度设置为第一个输入流的高度。默认值为 0。

36.2 vstack_qsv

垂直堆叠输入视频。

这是 vstack 滤镜的 QSV 变体,每个输入流可能具有不同的宽度。此滤镜将缩放每个输入流,同时保持原始宽高比。

它接受以下选项

输入

请参阅 vstack

shortest

请参阅 vstack

width

设置输出的宽度。如果设置为 0,此过滤器会将输出的宽度设置为第一个输入流的宽度。默认值为 0。

36.3 xstack_qsv

将视频输入堆叠到自定义布局中。

这是 xstack 滤镜的 QSV 变体。

它接受以下选项

输入

请参阅 xstack

shortest

请参阅 xstack

layout

请参阅 xstack。此外,它允许用户为每个输入流提供输出大小。

xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

请参阅 xstack

grid_tile_size

当设置 grid 时,为每个输入流设置输出大小。如果未设置此选项,则此滤镜默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

fill

请参阅 xstack

37 视频源

以下是对当前可用的视频源的描述。

37.1 buffer

缓冲视频帧,并使其可用于滤镜链。

此源主要用于编程使用,特别是通过 libavfilter/buffersrc.h 中定义的接口。

它接受以下参数

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频大小”部分

width

输入视频宽度。

height

输入视频高度。

pix_fmt

一个表示缓冲视频帧的像素格式的字符串。它可以是对应于像素格式的数字,或像素格式名称。

time_base

指定缓冲帧的时间戳假设的时间基准。

frame_rate

指定视频流的预期帧率。

colorspace

一个表示缓冲视频帧的色彩空间的字符串。它可以是对应于色彩空间的数字,或色彩空间名称。

范围

一个表示缓冲视频帧的颜色范围的字符串。它可以是对应于颜色范围的数字,或颜色范围名称。

pixel_aspect, sar

输入视频的采样(像素)宽高比。

hw_frames_ctx

当使用硬件像素格式时,这应该是对描述输入帧的 AVHWFramesContext 的引用。

例如

buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1

将指示源接受大小为 320x240 且格式为 "yuv410p" 的视频帧,假设 1/24 作为时间戳的时间基准和正方形像素(1:1 采样宽高比)。由于名称为 "yuv410p" 的像素格式对应于数字 6(请查看 libavutil/pixfmt.h 中的枚举 AVPixelFormat 定义),因此此示例对应于

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,选项可以指定为扁平字符串,但此语法已弃用。

宽度:高度:像素格式:时间基数.分子:时间基数.分母:像素宽高比.分子:像素宽高比.分母

37.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,则默认情况下,大小将设置为指定初始状态行的宽度,高度设置为 宽度 * PHI。

如果设置了 size,它必须包含指定的图案字符串的宽度,并且指定的图案将居中于较大的行中。

如果未指定文件名或图案字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。

scroll

如果设置为 1,则当输出中的所有行都已填充时,向上滚动输出。如果设置为 0,则在底部行被填充后,新的生成行将覆盖顶部行。默认为 1。

start_full, full

如果设置为 1,则在输出第一帧之前,使用生成的行完全填充输出。这是默认行为,要禁用请将值设置为 0。

stitch

如果设置为 1,则将左侧和右侧行边缘缝合在一起。这是默认行为,要禁用请将值设置为 0。

37.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
    

37.3 coreimagesrc

使用 Apple 的 CoreImage API 在 OSX 上生成的 GPU 视频源。

此视频源是 coreimage 视频过滤器的专门版本。在应用的过滤器链的开头使用核心图像生成器来生成内容。

coreimagesrc 视频源接受以下选项

list_generators

列出所有可用的生成器以及它们各自的选项,以及可能的最小值和最大值以及默认值。

list_generators=true
size, s

指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 320x240

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 帧率_分子/帧率_分母 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为“25”。

sar

设置源视频的采样宽高比。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负,则假定视频将永远生成。

此外,接受 coreimage 视频过滤器的所有选项。完整的过滤器链可用于进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅 coreimage 文档和示例。

37.3.1 示例

  • 使用 CIQRCodeGenerator 为 FFmpeg 主页创建 QR 码,以 Apple 标准 bash shell 的完整且转义的命令行形式给出
    ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

    此示例等效于 coreimage 的 QRCode 示例,而无需 nullsrc 视频源。

37.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 会在必要时将其转换为 8 位格式。

10bit
x2bgr10

如果请求 10 位格式但不可用,则过滤器初始化将失败。

dup_frames

当此选项设置为 true(默认)时,如果桌面未更新,过滤器将复制帧,以便保持大致恒定的目标帧速率。当此选项设置为 false 时,过滤器将等待桌面更新(在这种情况下,帧间间隔可能会有很大差异)。

37.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

37.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) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负,则假定视频将永远生成。

speed

设置渐变旋转的速度。

type, t

设置渐变的类型。可用值包括:

linear
radial
circular
spiral
square

默认类型为 linear

37.5.1 命令

此源支持一些上述选项作为命令

37.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。

37.7 mptestsrc

生成由 MPlayer 测试滤镜生成的各种测试模式。

生成的视频大小是固定的,为 256x256。此源尤其适用于测试编码功能。

此源接受以下选项

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 帧率_分子/帧率_分母 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负,则假定视频将永远生成。

test, t

设置要执行的测试的编号或名称。支持的测试包括:

dc_luma
dc_chroma
freq_luma
freq_chroma
amp_luma
amp_chroma
cbp
mv
ring1
ring2
all
max_frames, m

设置每个测试生成的最大帧数,默认值为 30。

默认值为“all”,它将循环遍历所有测试的列表。

一些示例

mptestsrc=t=dc_luma

将生成“dc_luma”测试模式。

37.8 frei0r_src

提供 frei0r 源。

要启用此滤镜的编译,您需要安装 frei0r 头文件,并使用 --enable-frei0r 配置 FFmpeg。

此源接受以下参数:

size

要生成的视频大小。有关此选项的语法,请查看 (ffmpeg-utils)手册中的“视频大小”部分

framerate

生成的视频的帧率。它可能是 num/den 形式的字符串或帧率缩写。

filter_name

要加载的 frei0r 源的名称。有关 frei0r 以及如何设置参数的更多信息,请阅读视频滤镜文档中的frei0r部分。

filter_params

要传递给 frei0r 源的参数的“|”分隔列表。

例如,要生成大小为 200x200 且帧率为 10 的 frei0r partik0l 源,该源叠加在叠加滤镜的主输入上。

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

37.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 个相邻的存活单元格,则将使其保持存活,如果一个死亡单元格周围有三个存活单元格,则将诞生一个新单元格。

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)手册中的“颜色”部分

37.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
    

37.10 perlin

生成 Perlin 噪声。

Perlin 噪声是一种在空间中具有局部连续性的噪声。这可用于生成在空间和时间上具有连续性的模式,例如,模拟烟雾、流体或地形。

如果通过 octaves 选项指定了多个八度音阶,则会生成 Perlin 噪声作为各个分量的总和,每个分量的频率都加倍。在这种情况下,persistence 选项指定相对于前一个分量的幅度比率。更多的八度音阶分量能够指定生成的噪声中更多的高频细节(例如,由于生成地形中的巨石而产生的小尺寸变化)。

37.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

37.10.2 示例

  • 生成单分量
    perlin
    
  • 使用具有 7 个分量的 Perlin 噪声,每个分量对总幅度的贡献减半
    perlin=octaves=7:persistence=0.5
    
  • 将 Perlin 噪声与 lutyuv 链接以生成黑白效果
    perlin=octaves=3:tscale=0.3,lutyuv=y='if(lt(val\,128)\,255\,0)'
    
  • 沿 y 轴拉伸噪声,并将灰度级别转换为仅红色信号
    perlin=octaves=7:tscale=0.4:yscale=0.3,lutrgb=r=val:b=0:g=0
    

37.11 qrencodesrc

使用 libqrencode 库生成 QR 码(请参阅 https://fukuchi.org/works/qrencode/)。

要启用此源的编译,您需要使用 --enable-libqrencode 配置 FFmpeg。

QR 码从提供的文本或文本模式生成。根据指定的输出大小选项,将相应的 QR 码缩放并放入视频输出中。

如果未指定文本,则不会生成 QR 码,而是返回一个空的彩色输出。

此源接受以下选项

qrcode_width,q
padded_qrcode_width,Q

指定渲染的 QR 码宽度(带和不带填充)的表达式。qrcode_width 表达式可以引用由 padded_qrcode_width 表达式设置的值,反之亦然。默认情况下,padded_qrcode_width 设置为 qrcode_width,这意味着没有填充。

这些表达式仅在初始化源时计算一次。有关详细信息,请参阅 qrencode 表达式 部分。

请注意,源缺少一些常量(例如 xt 或 ¸n),因为它们仅在为每个帧评估表达式而不是在初始化时才有意义。

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 帧率_分子/帧率_分母 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为“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

设置 QR 码和背景颜色。foreground_color 的默认值为“黑色”,background_color 的默认值为“白色”。

有关颜色选项的语法,请查看 ffmpeg-utils 手册中的“颜色”部分

37.11.1 示例

  • 生成使用默认大小编码指定文本的 QR 码
    qrencodesrc=text=www.ffmpeg.org
    
  • 与下面相同,但选择蓝色和粉色
    qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
    
  • 生成一个宽度为 200 像素且带有填充的 QR 码,使填充后的宽度为 QR 码宽度的 4/3
    qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成一个填充宽度为 200 像素且带有填充的 QR 码,使 QR 码宽度为填充宽度的 3/4
    qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 生成一个编码帧号的 QR 码
    qrencodesrc=text=%{n}
    
  • 生成一个编码 GMT 时间戳的 QR 码
    qrencodesrc=text=%{gmtime}
    
  • 生成一个将时间戳表示为浮点数的 QR 码
    qrencodesrc=text=%{pts}
    

37.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

allrgb 源返回大小为 4096x4096 的所有 rgb 颜色帧。

allyuv 源返回大小为 4096x4096 的所有 yuv 颜色帧。

color 源提供均匀着色的输入。

colorchart 源提供颜色检查图表。

colorspectrum 源提供颜色频谱输入。

haldclutsrc 源提供一个标识 Hald CLUT。另请参阅 haldclut 过滤器。

nullsrc 源返回未处理的视频帧。它主要用于分析/调试工具,或作为忽略输入数据的过滤器的源。

pal75bars 源根据 EBU PAL 建议生成颜色条图案,具有 75% 的颜色级别。

pal100bars 源根据 EBU PAL 建议生成颜色条图案,具有 100% 的颜色级别。

rgbtestsrc 源生成一个 RGB 测试图案,用于检测 RGB 与 BGR 问题。您应该看到从上到下依次为红色、绿色和蓝色的条纹。

smptebars 源根据 SMPTE 工程指南 EG 1-1990 生成颜色条图案。

smptehdbars 源根据 SMPTE RP 219-2002 生成颜色条图案。

testsrc 源生成一个测试视频图案,显示颜色图案、滚动渐变和时间戳。这主要用于测试目的。

testsrc2 源与 testsrc 类似,但支持更多像素格式,而不仅仅是 rgb24。这允许将其用作其他测试的输入,而无需进行格式转换。

yuvtestsrc 源生成一个 YUV 测试图案。您应该看到从上到下依次为 y、cb 和 cr 的条纹。

源接受以下参数

level

指定 Hald CLUT 的级别,仅在 haldclutsrc 源中可用。级别为 N 会生成一个 N*N*N x N*N*N 像素的图片,用作 3D 查找表的单位矩阵。每个分量都以 1/(N*N) 比例编码。

颜色,c

指定源的颜色,仅在 color 源中可用。有关此选项的语法,请查看 ffmpeg-utils 手册中“颜色”部分

size, s

指定源视频的大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为 320x240

此选项不适用于 allrgballyuvhaldclutsrc 过滤器。

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 帧率_分子/帧率_分母 的字符串、整数、浮点数或有效的视频帧率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负,则假定视频将永远生成。

由于帧率用作时基,因此所有帧(包括最后一帧)都将具有完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上舍入。

sar

设置源视频的采样宽高比。

alpha

指定背景的 alpha(不透明度),仅在 testsrc2 源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。

decimals, n

设置时间戳中显示的小数位数,仅在 testsrc 源中可用。

显示的时间戳值将对应于原始时间戳值乘以指定值的 10 的幂。默认值为 0。

type

设置颜色频谱的类型,仅在 colorspectrum 源中可用。可以是以下之一

black
white
all
色块大小

设置单个颜色补丁的补丁大小,仅在 colorchart 源中可用。默认值为 64x64

preset

设置颜色检查器颜色预设,仅在 colorchart 源中可用。

可用的值有

reference
skintones

默认值为 reference

37.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
    

37.12.2 命令

color 源支持以下命令

c, color

设置创建的图像的颜色。接受与对应的 color 选项相同的语法。

37.13 openclsrc

使用 OpenCL 程序生成视频。

source

OpenCL 程序源文件。

内核

程序中的内核名称。

size, s

要生成的帧的大小。必须设置此项。

format

用于生成的帧的像素格式。必须设置此项。

rate, r

每秒生成的帧数。默认值为 '25'。

有关程序加载工作方式的详细信息,请参阅 program_opencl 过滤器。

示例程序

  • 通过设置输出图像中像素位置的像素值来生成颜色渐变。(请注意,这适用于所有像素格式,但生成的输出将不相同。)
    __kernel void ramp(__write_only image2d_t dst,
                       unsigned int index)
    {
        int2 loc = (int2)(get_global_id(0), get_global_id(1));
    
        float4 val;
        val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));
    
        write_imagef(dst, loc, val);
    }
    
  • 生成谢尔宾斯基地毯图案,每帧平移一个像素。
    __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);
    }
    

37.14 sierpinski

生成谢尔宾斯基地毯/三角形分形,并随机平移。

此源接受以下选项

size, s

设置帧大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册中的“视频大小”部分。默认值为“640x480”。

rate, r

设置帧速率,以每秒的帧数表示。默认值为“25”。

seed

设置用于随机平移的种子。

跳跃

设置单次平移目标的最大跳跃值。允许的范围是 1 到 10000。

type

设置分形类型,可以是默认的 carpet(地毯)或 triangle(三角形)。

37.15 zoneplate

生成一个波带片测试视频图案。

此源接受以下选项

size, s

设置帧大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册 中 “视频大小” 部分。默认值为 "320x240"。

rate, r

设置帧速率,以每秒的帧数表示。默认值为“25”。

duration, d

设置源视频的持续时间。有关可接受的语法,请参阅 (ffmpeg-utils) ffmpeg-utils(1) 手册中的“时间持续时间”部分

如果未指定,或表示的持续时间为负,则假定视频将永远生成。

sar

设置源视频的采样宽高比。

precision

设置正弦计算查找表的精度(以位为单位)。默认值为 10。允许的范围是 4 到 16。

xo

设置输出信号的水平轴偏移。默认值为 0。

yo

设置输出信号的垂直轴偏移。默认值为 0。

to

设置输出信号的时间轴偏移。默认值为 0。

k0

设置 0 阶常数,添加到信号相位。默认值为 0。

kx

设置 1 阶相位因子乘数,用于水平轴。默认值为 0。

ky

设置 1 阶相位因子乘数,用于垂直轴。默认值为 0。

kt

设置 1 阶相位因子乘数,用于时间轴。默认值为 0。

kxt, kyt, kxy

设置空间轴和时间轴组合的相位因子乘数。默认值为 0。

kx2

设置 2 阶相位因子乘数,用于水平轴。默认值为 0。

ky2

设置 2 阶相位因子乘数,用于垂直轴。默认值为 0。

kt2

设置 2 阶相位因子乘数,用于时间轴。默认值为 0。

ku

设置添加到最终相位以产生信号的色度蓝色分量的常数。默认值为 0。

kv

设置添加到最终相位以产生信号的色度红色分量的常数。默认值为 0。

37.15.1 命令

此源支持一些上述选项作为命令

37.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
    

38 视频接收器

以下是当前可用的视频接收器的描述。

38.1 buffersink

缓冲视频帧,并使其在滤镜图的末尾可用。

此接收器主要用于编程使用,特别是通过 libavfilter/buffersink.h 中定义的接口或选项系统。

它接受指向 AVBufferSinkContext 结构的指针,该结构定义了传入缓冲区的格式,将作为 opaque 参数传递给 avfilter_init_filter 进行初始化。

38.2 nullsink

空视频接收器:对输入视频不做任何处理。它主要用作模板,并用于分析/调试工具。

39 多媒体滤镜

以下是当前可用的多媒体滤镜的描述。

39.1 a3dscope

将输入音频转换为 3D 示波器视频输出。

该滤镜接受以下选项

rate, r

设置帧速率,以每秒的帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册 中 “视频大小” 部分。默认值为 hd720

fov

设置相机视野。默认为 90 度。允许的范围是 40 到 150。

roll

设置相机侧倾。

pitch

设置相机俯仰。

yaw

设置相机偏航。

xzoom

设置相机在 X 轴上的缩放。

yzoom

设置相机在 Y 轴上的缩放。

zzoom

设置相机在 Z 轴上的缩放。

xpos

设置相机在 X 轴上的位置。

ypos

设置相机在 Y 轴上的位置。

zpos

设置相机在 Z 轴上的位置。

length

设置显示的音频波的长度(以帧数为单位)。

39.1.1 命令

过滤器支持上述一些选项作为 命令

39.2 abitscope

将输入音频转换为视频输出,显示音频位示波器。

该滤镜接受以下选项

rate, r

设置帧速率,以每秒的帧数表示。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请查看 (ffmpeg-utils) 手册 中 “视频大小” 部分。默认值为 1024x256

颜色

指定颜色列表,颜色之间用空格或“|”分隔,这些颜色将用于绘制通道。无法识别或丢失的颜色将替换为白色。

mode, m

设置输出模式。可以是 bars(条形)或 trace(轨迹)。默认值为 bars

39.3 adrawgraph

使用输入音频元数据绘制图形。

请参阅 drawgraph

39.4 agraphmonitor

请参阅 graphmonitor

39.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

39.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

启用视频输出。默认启用。

39.6.1 相位检测

该过滤器还会检测立体声流中的异相和单声道序列。当序列持续的时间长于或等于设置的最小值时,它会记录序列的开始、结束和持续时间。

该过滤器接受以下用于检测的选项

phasing

启用单声道和异相检测。默认禁用。

tolerance, t

设置单声道检测的相位容差,以幅度比表示。默认值为 0。允许的范围是 [0, 1]

角度, a

设置异相检测的角度阈值,以度为单位。默认值为 170。允许的范围是 [90, 180]

duration, d

设置单声道或异相持续时间,直到发出通知,以秒为单位。默认值为 2

39.6.2 示例

  • 使用 ffmpeg 检测 1 秒单声道且相位容差为 0.001 的完整示例
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

39.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

镜像两个轴。

39.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]'
    

39.7.2 命令

此滤波器支持上述所有选项作为命令,除了选项 sizerate

39.8 bench, abench

滤波器图的基准测试部分。

该滤镜接受以下选项

action

启动或停止计时器。

可用的值有

start

获取当前时间,将其设置为帧元数据(使用键 lavfi.bench.start_time),并将帧转发到下一个滤波器。

stop

获取当前时间,并从输入帧元数据中提取 lavfi.bench.start_time 元数据以获取时间差。然后打印时间差、平均时间、最大时间和最小时间(分别为 tavgmaxmin)。时间戳以秒为单位表示。

39.8.1 示例

  • 基准测试 selectivecolor 滤波器
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

39.9 concat

连接音频和视频流,将它们一个接一个地连接在一起。

该滤波器适用于同步视频和音频流的片段。所有片段必须具有相同数量的每种类型的流,这也将是输出端的流数量。

该滤镜接受以下选项

n

设置片段数。默认值为 2。

v

设置输出视频流的数量,这也是每个片段中视频流的数量。默认值为 1。

a

设置输出音频流的数量,这也是每个片段中音频流的数量。默认值为 0。

unsafe

激活不安全模式:如果片段具有不同的格式,则不会失败。

该滤波器有 v+a 个输出:首先是 v 个视频输出,然后是 a 个音频输出。

nx(v+a) 个输入:首先是第一个片段的输入,其顺序与输出相同,然后是第二个片段的输入,依此类推。

由于各种原因,包括编解码器帧大小或不严谨的创作,相关的流并不总是具有完全相同的持续时间。因此,相关的同步流(例如,视频及其音轨)应一次连接。concat 滤波器将使用每个片段中最长流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。

为了使此滤波器正常工作,所有片段必须从时间戳 0 开始。

所有对应的流在所有片段中必须具有相同的参数;过滤系统将自动为视频流选择一种通用的像素格式,并为音频流选择一种通用的采样格式、采样率和通道布局,但其他设置(例如分辨率)必须由用户显式转换。

不同的帧率是可接受的,但会导致输出端的可变帧率;请务必配置输出文件以处理它。

39.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]
    

    请注意,如果音频和视频流在第一个文件中没有完全相同的持续时间,则会在拼接处发生不同步。

39.9.2 命令

此滤镜支持以下命令

后一帧

关闭当前片段并步进到下一个片段

39.10 ebur128

EBU R128 扫描仪滤波器。此滤波器接收音频流并分析其响度级别。默认情况下,它以 10Hz 的频率记录一条消息,其中包含瞬时响度(由 M 标识)、短期响度 (S)、综合响度 (I) 和响度范围 (LRA)。

该滤波器只能分析采样格式为双精度浮点数的流。如果需要,输入流将转换为此规范。用户可能需要在该滤波器之后插入 aformat 和/或 aresample 滤波器以获得原始参数。

该滤波器还具有视频输出(请参阅 video 选项),其中包含实时图,用于观察响度的变化。该图形包含上述记录的消息,因此当设置此选项时,除非设置了详细日志记录,否则不会再打印该消息。主图形区域包含短期响度(3 秒的分析),右侧的仪表用于瞬时响度(400 毫秒),但可以选择配置为改为显示短期响度(请参阅 gauge)。

绿色区域标记了以目标响度(默认为 -23LUFS,除非通过 target 修改)为中心的 +/- 1LU 目标范围。

有关响度建议 EBU R128 的更多信息,请访问 http://tech.ebu.ch/loudness

该滤镜接受以下选项

video

激活视频输出。无论是否设置此选项,音频流都保持不变。如果激活,视频流将是第一个输出流。默认值为 0

size

设置视频尺寸。此选项仅适用于视频。有关此选项的语法,请查看 ffmpeg-utils 手册中的“视频尺寸”部分。默认和最小分辨率为 640x480

meter

设置 EBU 刻度表。默认值为 9。常用值是 918,分别对应 EBU 刻度表 +9 和 EBU 刻度表 +18。允许使用此范围内的任何其他整数值。

metadata

设置元数据注入。如果设置为 1,则音频输入将分段为 100 毫秒的输出帧,每个帧都包含元数据中的各种响度信息。所有元数据键都以 lavfi.r128. 为前缀。

默认为 0

framelog

强制帧日志记录级别。

可用的值有

quiet

禁用日志记录

info

信息日志记录级别

verbose

详细日志级别

默认情况下,日志级别设置为 info。如果设置了 videometadata 选项,则会切换到 verbose

peak

设置峰值模式。

可用的模式可以累加(该选项是 flag 类型)。可能的值有:

none

禁用任何峰值模式(默认)。

sample

启用采样峰值模式。

简单的峰值模式,查找较高的采样值。它会为采样峰值记录一条消息(由 SPK 标识)。

true

启用真峰值模式。

如果启用,则在输入流的过采样版本上进行峰值查找,以获得更好的峰值精度。它会为真峰值记录一条消息(由 TPK 标识)和每帧真峰值(由 FTPK 标识)。此模式需要使用 libswresample 构建。

dualmono

将单声道输入文件视为“双单声道”。如果单声道文件打算在立体声系统上播放,其 EBU R128 测量值在感知上是不正确的。如果设置为 true,此选项将补偿此影响。多声道输入文件不受此选项的影响。

panlaw

设置用于测量双单声道文件的特定声像定律。此参数是可选的,默认值为 -3.01dB。

target

设置在可视化中用作相对零点的特定目标电平(以 LUFS 为单位)。此参数是可选的,默认值为 EBU R128 指定的 -23LUFS。但是,在线发布的内容可能更喜欢 -16LUFS 的电平(例如,用于播客或视频平台)。

gauge

设置仪表显示的值。有效值是 momentaryshortterm。默认情况下将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如,现场混音)。

scale

设置响度的显示比例。有效参数是 absolute(以 LUFS 为单位)或相对于目标的 relative(LU)。这只会影响视频输出,而不会影响摘要或连续日志输出。

integrated

测量的综合响度的只读导出值,以 LUFS 为单位。

范围

测量的响度范围的只读导出值,以 LU 为单位。

lra_low

测量的 LRA 低值的只读导出值,以 LUFS 为单位。

lra_high

测量的 LRA 高值的只读导出值,以 LUFS 为单位。

sample_peak

测量的采样峰值的只读导出值,以 dBFS 为单位。

true_peak

测量的真峰值的只读导出值,以 dBFS 为单位。

39.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 -
    

39.11 interleave, ainterleave

临时交错来自多个输入的帧。

interleave 用于视频输入,ainterleave 用于音频。

这些过滤器从多个输入读取帧,并将最早排队的帧发送到输出。

输入流必须具有定义明确、单调递增的帧时间戳值。

为了向输出提交一个帧,这些过滤器需要为每个输入至少排队一个帧,因此如果一个输入尚未终止并且不会接收传入的帧,则它们无法工作。

例如,考虑一个输入是 select 过滤器的情况,该过滤器始终丢弃输入帧。interleave 过滤器将继续从该输入读取,但在输入发送流结束信号之前,它永远无法向输出发送新帧。

此外,根据输入同步,如果一个输入接收到的帧多于其他输入,并且队列已满,则过滤器将丢弃帧。

这些过滤器接受以下选项

nb_inputs,n

设置不同输入的数量,默认为 2。

duration

如何确定流的结尾。

最长

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

第一个

第一个输入的持续时间。

39.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
    

39.12 latency, alatency

测量滤波延迟。

报告前一个滤波器滤波延迟,音频滤波器的音频样本延迟数或视频滤波器的视频帧延迟数。

在输入流结束时,滤波器将报告 filtergraph 中先前运行的滤波器的最小和最大测量延迟。

39.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 时,减少打印模式中的缓冲。

39.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'
    

39.14 perms, aperms

设置输出帧的读/写权限。

这些过滤器主要面向开发人员,用于测试 filtergraph 中以下过滤器的直接路径。

过滤器接受以下选项

mode

选择权限模式。

它接受以下值

none

不执行任何操作。这是默认设置。

ro

将所有输出帧设置为只读。

rw

将所有输出帧设置为直接可写。

toggle

如果帧可写,则将其设置为只读,如果帧只读,则将其设置为可写。

random

随机将每个输出帧设置为只读或可写。

seed

设置 random 模式的种子,必须是包含在 0UINT32_MAX 之间的整数。如果未指定,或者如果显式设置为 -1,则过滤器将尽力使用良好的随机种子。

注意:如果在权限过滤器和后续过滤器之间自动插入了过滤器,则后续过滤器可能无法按预期接收到权限。在 perms/aperms 过滤器之前插入 formataformat 过滤器可以避免此问题。

39.15 realtime, arealtime

减慢过滤速度以大致匹配实时速度。

这些过滤器会暂停过滤一段可变的时间,以使输出速率与输入时间戳匹配。它们类似于 ffmpegre 选项。

它们接受以下选项

限幅

暂停的时间限制。任何长于此值的暂停都将被视为时间戳不连续,并重置计时器。默认值为 2 秒。

speed

处理速度因子。该值必须是大于零的浮点数。大于 1.0 的值将导致比实时更快的处理速度,而较小的值将减慢处理速度。limit 会自动进行相应的调整。默认值为 1.0。

无法实现比没有这些过滤器时更快的处理速度。

39.15.1 命令

这两个过滤器都支持以上所有选项作为命令

39.16 segment, asegment

将单个输入流拆分为多个流。

此过滤器的作用与 concat 过滤器相反。

segment 作用于视频帧,asegment 作用于音频样本。

此滤波器接受以下选项

时间戳

用“|”分隔的输出段的时间戳。第一个段将从输入流的开头开始运行。最后一个段将运行到输入流的结尾

帧数,样本数

分割段的精确帧数/样本数。

在所有情况下,在每个段前添加“+”将使其相对于前一个段。

39.16.1 示例

  • 将输入音频流拆分为三个输出音频流,从输入音频流的开头开始,存储在第一个输出音频流中,然后在第 60 秒开始存储在第二个输出音频流中,最后在输入音频流的第 150 秒后存储在第三个输出音频流中
    asegment=timestamps="60|150"
    

39.17 select, aselect

选择要传递到输出的帧。

此滤波器接受以下选项

expr, 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(演示时间戳),以 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 解复用器可以通过设置入点和出点来仅选择 concat 输入文件的一部分,但是输出数据包可能不完全包含在所选间隔中。通过使用此变量,可以跳过由 concat 解复用器生成的未完全包含在所选间隔中的帧。

这是通过将帧的 pts 与 lavf.concat.start_timelavf.concat.duration 数据包元数据值(也存在于解码的帧中)进行比较来实现的。

如果帧的 pts 至少为 start_time 并且持续时间元数据缺失或帧的 pts 小于 start_time + duration,则 concatdec_select 变量为 -1,否则为 0,如果 start_time 元数据缺失,则为 NaN。

这基本上意味着如果输入帧的 pts 在 concat 解复用器设置的间隔内,则选择该输入帧。

iw (仅限视频)

表示输入视频帧的宽度。

ih (仅限视频)

表示输入视频帧的高度。

view (仅限视频)

多视图视频的视图 ID。

select 表达式的默认值为“1”。

39.17.1 示例

  • 选择输入中的所有帧
    select
    

    上面的示例与

    select=1
    
  • 跳过所有帧
    select=0
    
  • 仅选择 I 帧
    select='eq(pict_type\,I)'
    
  • 每 100 帧选择一帧
    select='not(mod(n\,100))'
    
  • 仅选择包含在 10-20 时间间隔内的帧
    select=between(t\,10\,20)
    
  • 仅选择包含在 10-20 时间间隔内的 I 帧
    select=between(t\,10\,20)*eq(pict_type\,I)
    
  • 选择最小距离为 10 秒的帧
    select='isnan(prev_selected_t)+gte(t-prev_selected_t\,10)'
    
  • 使用 aselect 仅选择样本数 > 100 的音频帧
    aselect='gt(samples_n\,100)'
    
  • 创建第一个场景的马赛克
    ffmpeg -i video.avi -vf select='gt(scene\,0.4)',scale=160:120,tile -frames:v 1 preview.png
    

    scene 与 0.3 到 0.5 之间的值进行比较通常是一个明智的选择。

  • 将偶数帧和奇数帧发送到单独的输出,并将它们组合起来
    select=n=2:e='mod(n, 2)+1' [odd][even]; [odd] pad=h=2*ih [tmp]; [tmp][even] overlay=y=h
    
  • 从一个 ffconcat 文件中选择有用的帧,该文件使用了入点和出点,但源文件并非仅包含帧内帧。
    ffmpeg -copyts -vsync 0 -segment_time_metadata 1 -i input.ffconcat -vf select=concatdec_select -af aselect=concatdec_select output.avi
    

39.18 sendcmd, asendcmd

向滤镜图中的滤镜发送命令。

这些滤镜读取要发送到滤镜图中其他滤镜的命令。

sendcmd 必须插入两个视频滤镜之间,asendcmd 必须插入两个音频滤镜之间,除此之外,它们的行为方式相同。

命令的规范可以在滤镜参数中使用 commands 选项提供,也可以在 filename 选项指定的文件中提供。

这些过滤器接受以下选项

commands, c

设置要读取并发送到其他滤镜的命令。

文件名, f

设置要读取并发送到其他滤镜的命令的文件名。

39.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]

39.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
    

39.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

应用命令后的第一帧的时间,如果没有任何命令则为第一帧的时间。

39.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
    

39.19.2 命令

这两个滤镜都支持以上所有选项作为 命令

39.20 setrange

强制输出视频帧的颜色范围。

setrange 滤镜标记输出帧的颜色范围属性。它不会更改输入帧,而只会设置相应的属性,该属性会影响后续滤镜如何处理该帧。

该滤镜接受以下选项

范围

可用的值有

auto

保留相同的颜色范围属性。

unspecified, unknown

将颜色范围设置为未指定。

limited, tv, mpeg

将颜色范围设置为有限。

full, pc, jpeg

将颜色范围设置为全部。

39.21 settb, asettb

设置要用于输出帧时间戳的时间基。它主要用于测试时间基配置。

它接受以下参数

expr, tb

被评估为输出时间基的表达式。

tb 的值是表示有理数的算术表达式。该表达式可以包含常量 "AVTB"(默认时间基)、"intb"(输入时间基)和 "sr"(采样率,仅限音频)。默认值为 "intb"。

39.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
    

39.22 showcqt

将输入的音频转换为视频输出,使用布朗-帕克特恒定 Q 变换算法,以对数方式表示频率频谱,并直接计算频域系数(但变换本身并非真正的恒定 Q,而是 Q 因子实际上是可变/钳位的),使用从 E0 到 D#10 的音阶。

该滤镜接受以下选项

size, s

指定输出的视频大小。它必须是偶数。有关此选项的语法,请查阅(ffmpeg-utils)手册中的“视频大小”部分。默认值为1920x1080

fps,速率,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

指定变换时间钳位。在低频时,时域和频域的精度之间存在权衡。如果时间钳位较低,则时域中的事件(例如快速低音鼓)的表示更准确;否则,频域中的事件(例如低音吉他)的表示更准确。可接受的范围是[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

39.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)))'
    
  • 自定义 fontcolor 和 fontfile,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
    

39.23 showcwt

使用连续小波变换和莫雷小波将输入音频转换为表示频率频谱的视频输出。

该滤镜接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查阅(ffmpeg-utils)手册中的“视频大小”部分。默认值为640x512

rate, r

设置输出帧率。默认值为 25

scale

设置使用的频率刻度。允许的值为

linear
log
bark
mel
erbs
sqrt
cbrt
qdrt
fm

默认值为linear

iscale

设置使用的强度刻度。允许的值为

linear
log
sqrt
cbrt
qdrt

默认值为log

min

设置输出中将使用的最小频率。默认值为20 Hz。

max

设置输出中将使用的最大频率。默认值为20000 Hz。实际频率上限取决于输入音频的采样率,并且当设置为大于奈奎斯特频率的值时,将强制执行此值。

imin

设置输出中将使用的最小强度。

imax

设置输出中将使用的最大强度。

logb

在将计算的幅度值映射到像素值时,设置亮度强度的对数基数。允许的范围是 01。默认值为 0.0001

deviation

设置频率偏差。小于 1 的值更偏向频率,而大于 1 的值更偏向时间。允许的范围是 010。默认值为 1

pps

设置每秒在一行中输出的像素数。允许的范围是 11024。默认值为 64

mode

设置输出视觉模式。允许的值为

magnitude

显示幅度。

phase

phase

仅显示相位。

magphase

频道

channel

stereo

显示每个立体声差异的唯一颜色。

默认值为 magnitude

slide

设置输出滑动方法。允许的值为

替换
scroll
frame
direction

设置输出滑动方法的方向。允许的值为

lr

方向从左到右。

rl

方向从右到左。

ud

方向从上到下。

du

方向从下到上。

bar

设置条形图显示与显示尺寸的比例。默认值为 0。

旋转

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

39.24 showfreqs

将输入音频转换为表示音频功率谱的视频输出。音频幅度在 Y 轴上,而频率在 X 轴上。

该滤镜接受以下选项

size, s

指定视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“(ffmpeg-utils)视频大小”部分。默认值为 1024x512

rate, r

设置视频速率。默认值为 25

mode

设置显示模式。这设置了如何表示每个频率箱。

它接受以下值

line
bar
dot

默认值为 bar

ascale

设置幅度比例。

它接受以下值

lin

线性缩放。

sqrt

平方根缩放。

cbrt

立方根缩放。

log

对数缩放。

默认值为 log

fscale

设置频率缩放。

它接受以下值

lin

线性缩放。

log

对数缩放。

rlog

反向对数缩放。

默认值为 lin

win_size

设置窗口大小。允许的范围为 16 到 65536。

默认值为 2048

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hanning

overlap

设置窗口重叠。范围在 [0, 1] 内。默认值为 1,这意味着将选择所选窗口函数的最佳重叠。

平均

设置时间平均。将其设置为 0 将显示当前最大峰值。默认值为 1,这意味着禁用时间平均。

颜色

指定用空格或“|”分隔的颜色列表,这些颜色将用于绘制通道频率。无法识别或缺少的颜色将替换为白色。

cmode

设置通道显示模式。

它接受以下值

combined
separate

默认值为 combined

minamp

设置 log 幅度缩放器中使用的最小幅度。

data

设置数据显示模式。

它接受以下值

magnitude
phase
delay

默认值为 magnitude

channels

设置处理音频时要使用的通道。默认情况下,所有通道都会被处理。

39.25 showspatial

将立体声输入音频转换为视频输出,表示两个通道之间的空间关系。

该滤镜接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“(ffmpeg-utils)视频大小”部分。默认值为 512x512

win_size

设置窗口大小。允许的范围是从 102465536。默认大小是 4096

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

rate, r

设置输出帧率。

39.26 showspectrum

将输入音频转换为视频输出,表示音频频谱。

该滤镜接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查阅(ffmpeg-utils)手册中的“视频大小”部分。默认值为640x512

slide

指定频谱应如何沿窗口滑动。

它接受以下值

replace

当样本到达右侧时,它们会从左侧重新开始

scroll

样本从右向左滚动

fullframe

仅当样本到达右侧时才会生成帧

rscroll

样本从左向右滚动

lreplace

当样本到达左侧时,它们会从右侧重新开始

默认值为 replace

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为‘combined’。

颜色

指定显示颜色模式。

它接受以下值

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’。

saturation

设置显示颜色的饱和度修饰符。负值提供替代颜色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

orientation

设置时间与频率轴的方向。可以是 verticalhorizontal。默认值为 vertical

overlap

设置重叠窗口的比例。默认值为 0。当值为 1 时,重叠设置为当前使用的特定窗口函数的推荐大小。

增益

设置用于计算强度颜色值的比例增益。默认值为 1

data

设置要显示的数据。可以是 magnitude (默认) 或 phase,或展开的相位:uphase

旋转

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

start

设置从中显示频谱图的起始频率。默认值为 0

停止

设置显示频谱图的结束频率。默认值为 0

fps

设置上限帧率限制。默认值为 auto,无限制。

legend

绘制时间和频率轴以及图例。默认禁用。

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围为 10 到 200。

限幅

设置输入音频样本音量的上限 (dBFS)。默认值为 0 dBFS。允许的范围为 -100 到 100。

opacity

在使用带有 alpha 分量的像素格式输出时设置不透明度强度。

用法与 showwaves 过滤器非常相似;请参阅该部分中的示例。

39.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]'
    

39.27 showspectrumpic

将输入音频转换为单个视频帧,表示音频频谱。

该滤镜接受以下选项

size, s

指定输出的视频大小。有关此选项的语法,请查看 ffmpeg-utils 手册中的“(ffmpeg-utils)视频大小”部分。默认值为 4096x2048

mode

指定显示模式。

它接受以下值

combined

所有通道都显示在同一行中

separate

所有通道都显示在单独的行中

默认值为‘combined’。

颜色

指定显示颜色模式。

它接受以下值

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’。

saturation

设置显示颜色的饱和度修饰符。负值提供替代颜色方案。0 表示完全没有饱和度。饱和度必须在 [-10.0, 10.0] 范围内。默认值为 1

win_func

设置窗口函数。

它接受以下值

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为 hann

orientation

设置时间与频率轴的方向。可以是 verticalhorizontal。默认值为 vertical

增益

设置用于计算强度颜色值的比例增益。默认值为 1

legend

绘制时间和频率轴以及图例。默认启用。

旋转

设置颜色旋转,必须在 [-1.0, 1.0] 范围内。默认值为 0

start

设置从中显示频谱图的起始频率。默认值为 0

停止

设置显示频谱图的结束频率。默认值为 0

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围为 10 到 200。

限幅

设置输入音频样本音量的上限 (dBFS)。默认值为 0 dBFS。允许的范围为 -100 到 100。

opacity

在使用带有 alpha 分量的像素格式输出时设置不透明度强度。

39.27.1 示例

  • 使用 ffmpeg 在 1024x1024 的图片中提取整个音轨的音频频谱图。
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

39.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

39.29 showwaves

将输入的音频转换为视频输出,表示采样波形。

该滤镜接受以下选项

size, s

指定输出的视频尺寸。关于此选项的语法,请查看 (ffmpeg-utils)手册中的 "Video size" 部分。默认值为 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

39.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]
    

39.30 showwavespic

将输入的音频转换为单个视频帧,表示采样波形。

该滤镜接受以下选项

size, s

指定输出的视频尺寸。关于此选项的语法,请查看 (ffmpeg-utils)手册中的 "Video size" 部分。默认值为 600x240

split_channels

设置是否应单独绘制通道或重叠绘制。默认值为 0。

颜色

设置用 ‘|’ 分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置幅度比例。

可用的值有

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认是线性的。

draw

设置绘制模式。

可用的值有

scale

缩放每个绘制采样的像素值。

full

直接绘制每个采样点。

默认值为 scale

filter

设置滤波模式。

可用的值有

average

为每个绘制的采样使用平均采样值。

peak

为每个绘制的采样使用峰值采样值。

默认值为 average

39.30.1 示例

  • 使用 ffmpeg 在 1024x800 的图片中提取整个音轨的波形的通道分离表示。
    ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
    

39.31 sidedata, asidedata

删除帧边数据,或根据它选择帧。

此滤波器接受以下选项

mode

设置过滤器的操作模式。

可以是以下之一

select

选择每个具有 type 边数据的帧。

delete

删除 type 的边数据。如果未设置 type,则删除帧中的所有边数据。

type

设置所有模式使用的边数据类型。必须为 select 模式设置。有关帧边数据类型的列表,请参阅 libavutil/frame.h 中的 AVFrameSideDataType 枚举。例如,要选择 AV_FRAME_DATA_PANSCAN 边数据,您必须指定 PANSCAN

39.32 spectrumsynth

从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个表示随时间变化的相位。该滤波器将视频中显示的频域转换回音频输出中呈现的时域。

此滤波器主要是为反转处理后的 showspectrum 滤波器输出而创建的,但也可以从其他频谱图合成声音。但在这种情况下,如果相位数据不可用,结果会很差,因为在这些情况下,需要重新创建相位数据,通常只是从随机噪声重新创建。为了获得最佳效果,请使用仅灰色的输出(showspectrum 滤波器中的 channel 颜色模式),并且幅度视频使用 log 比例,相位视频使用 lin 比例。为了生成相位,对于第二个视频,请使用 data 选项。输入视频通常应使用 fullframe 滑动模式,因为这样可以节省解码视频所需的资源。

该滤镜接受以下选项

sample_rate

指定输出音频的采样率,生成频谱的音频的采样率可能不同。

channels

设置输入视频频谱中表示的通道数。

scale

设置生成幅度输入频谱时使用的比例。可以是 linlog。默认为 log

slide

设置生成输入频谱时使用的滑动模式。可以是 replacescrollfullframerscroll。默认为 fullframe

win_func

设置用于重合成的窗口函数。

overlap

设置窗口重叠。范围在 [0, 1] 内。默认值为 1,这意味着将选择所选窗口函数的最佳重叠。

orientation

设置输入视频的方向。可以是 verticalhorizontal。默认为 vertical

39.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
    

39.33 split, asplit

将输入拆分为多个相同的输出。

asplit 处理音频输入,split 处理视频。

该滤波器接受一个参数,该参数指定输出的数量。如果未指定,则默认为 2。

39.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
    

39.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 是可选的。

39.34.1 示例

请查看 tools/zmqsend,了解可用于发送由这些滤镜处理的命令的 zmq 客户端示例。

考虑由 ffplay 生成的以下滤镜图。在此示例中,最后一个 overlay 滤镜具有实例名称。所有其他滤镜将具有默认实例名称。

ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@my=x=100 "

要更改视频左侧的颜色,可以使用以下命令:

echo Parsed_color_0 c yellow | tools/zmqsend

要更改右侧的颜色,可以使用以下命令:

echo Parsed_color_1 c pink | tools/zmqsend

要更改右侧的位置,可以使用以下命令:

echo overlay@my x 150 | tools/zmqsend

40 多媒体源

以下是当前可用的多媒体源的描述。

40.1 amovie

这与 movie 源相同,只是默认情况下它会选择音频流。

40.2 avsynctest

生成音频/视频同步测试。

生成的流会定期显示闪光视频帧并在音频中发出哔哔声。有助于检查 A/V 同步问题。

它接受以下选项

size, s

设置输出视频大小。默认值为 hd720

帧率,fr

设置输出视频帧率。默认值为 30

采样率,sr

设置输出音频采样率。默认值为 44100

幅度,a

设置输出音频哔哔声的振幅。默认值为 0.7

周期,p

设置输出音频哔哔声的周期(以秒为单位)。默认值为 3

延迟,dl

设置输出视频闪光延迟的帧数。默认值为 0

循环,c

启用视频延迟的循环,默认情况下禁用。

duration, d

设置流输出时长。默认情况下,时长不受限制。

fg、bg、ag

设置前景/背景/附加颜色。

40.2.1 命令

此源支持一些上述选项作为命令

40.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”。

请注意,当影片循环时,源时间戳不会更改,因此它会生成非单调递增的时间戳。

不连续性

指定帧之间的时间差,如果超过该时间差,则该点被视为时间戳不连续点,该不连续点通过调整后面的时间戳来消除。

解码线程

指定解码线程数

格式选项

为打开的文件指定格式选项。格式选项可以指定为以‘:’分隔的 key=value 对列表。以下示例演示如何添加 protocol_whitelist 和 protocol_blacklist 选项

ffplay -f lavfi
"movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"

它允许将第二个视频覆盖在滤镜图的主输入之上,如此图所示

input -----------> deltapts0 --> overlay --> output
                                    ^
                                    |
movie --> scale--> deltapts1 -------+

40.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]
    

40.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。

41 外部库

FFmpeg 可以与许多外部库连接,以添加对更多格式的支持。默认情况下不使用它们,必须通过将适当的标志传递给 ./configure 来显式请求使用它们。

41.1 开放媒体联盟 (AOM)

FFmpeg 可以使用 AOM 库进行 AV1 解码和编码。

请访问 http://aomedia.org/,并按照说明安装该库。然后将 --enable-libaom 传递给 configure 以启用它。

41.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 脚本安装此驱动程序。

41.3 AviSynth

FFmpeg 可以读取 AviSynth 脚本作为输入。要启用支持,请在安装 AviSynth+ 提供的头文件后,传递 --enable-avisynth 进行配置。AviSynth+ 可以通过向基于 CMake 的常规构建系统传递 -DHEADERS_ONLY:bool=on,或者使用提供的 GNUmakefile 配置为仅安装头文件。

对于 Windows,支持的 AviSynth 变体是:32 位构建使用 AviSynth 2.6 RC1 或更高版本,32 位和 64 位构建使用 AviSynth+ r1718 或更高版本

对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 变体是 AviSynth+,从 3.5 版本开始。

在 2016 年,AviSynth+ 添加了使用 GCC 构建的支持。但是,由于 Windows 调用约定的特殊性,32 位 GCC 构建的 AviSynth+ 与典型的 32 位构建的 FFmpeg 不兼容。

默认情况下,FFmpeg 假设与 32 位 MSVC 构建的 AviSynth+ 兼容,因为这是最广泛使用和根深蒂固的构建配置。用户可以覆盖此设置,并通过在配置 FFmpeg 时向 --extra-cflags 传递 -DAVSC_WIN32_GCC32 来启用对 32 位 GCC 构建的 AviSynth+ 的支持。

64 位构建的 FFmpeg 不受影响,并且可以使用 MSVC 或 GCC 构建的 AviSynth+,无需任何特殊标志。

AviSynth(+) 是动态加载的。分发者可以使用 --enable-avisynth 构建 FFmpeg,并且二进制文件无论最终用户是否安装了 AviSynth 都可以工作。如果/当最终用户想要使用 AviSynth 脚本时,他们可以安装 AviSynth(+),FFmpeg 将能够找到并使用它来打开脚本。

41.4 Chromaprint

FFmpeg 可以利用 Chromaprint 库来生成音频指纹。传递 --enable-chromaprint 进行配置以启用它。请参阅 https://acoustid.org/chromaprint

41.5 codec2

FFmpeg 可以利用 codec2 库进行 codec2 解码和编码。目前没有原生解码器,因此必须使用 libcodec2 进行解码。

前往 http://freedv.org/,下载“Codec 2 source archive”。使用 CMake 构建和安装。Debian 用户可以改为安装 libcodec2-dev 软件包。安装 libcodec2 后,您可以传递 --enable-libcodec2 进行配置以启用它。

使用 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

41.6 dav1d

FFmpeg 可以利用 dav1d 库进行 AV1 视频解码。

前往 https://code.videolan.org/videolan/dav1d 并按照说明安装该库。然后传递 --enable-libdav1d 进行配置以启用它。

41.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 才能使用它。

41.8 uavs3d

FFmpeg 可以利用 uavs3d 库进行 AVS3-P2/IEEE1857.10 视频解码。

前往 https://github.com/uavs3/uavs3d 并按照说明安装该库。然后传递 --enable-libuavs3d 进行配置以启用它。

41.9 游戏音乐模拟器

FFmpeg 可以利用 Game Music Emu 库读取受支持的视频游戏音乐文件格式的音频。传递 --enable-libgme 进行配置以启用它。请参阅 https://bitbucket.org/mpyne/game-music-emu/overview

41.10 英特尔 QuickSync 视频

FFmpeg 可以使用 Intel QuickSync Video (QSV) 加速多个编解码器的解码和编码。要使用 QSV,FFmpeg 必须链接到 libmfx 调度器,该调度器加载实际的解码库。

该调度器是开源的,可以从 https://github.com/lu-zero/mfx_dispatch.git 下载。FFmpeg 需要使用 --enable-libmfx 选项进行配置,并且 pkg-config 需要能够找到调度器的 .pc 文件。

41.11 Kvazaar

FFmpeg 可以利用 Kvazaar 库进行 HEVC 编码。

前往 https://github.com/ultravideo/kvazaar 并按照说明安装该库。然后传递 --enable-libkvazaar 进行配置以启用它。

41.12 LAME

FFmpeg 可以利用 LAME 库进行 MP3 编码。

前往 http://lame.sourceforge.net/ 并按照说明安装该库。然后传递 --enable-libmp3lame 进行配置以启用它。

41.13 LCEVCdec

FFmpeg 可以利用 liblcevc_dec 库在受支持的比特流上进行 LCEVC 增强层解码。

前往 https://github.com/v-novaltd/LCEVCdec 并按照说明安装该库。然后传递 --enable-liblcevc-dec 进行配置以启用它。

LCEVCdec 基于 BSD-3-Clause-Clear 许可证。

41.14 libilbc

iLBC 是一种窄带语音编解码器,由 Google 作为 WebRTC 项目的一部分免费提供。libilbc 是 iLBC 编解码器的包装友好副本。FFmpeg 可以利用 libilbc 库进行 iLBC 解码和编码。

前往 https://github.com/TimothyGu/libilbc 并按照说明安装该库。然后传递 --enable-libilbc 进行配置以启用它。

41.15 libjxl

JPEG XL 是一种图像格式,旨在在较长的生命周期内完全取代旧的 JPEG。有关更多信息,请参阅 https://jpegxl.info/,有关库源,请参阅 https://github.com/libjxl/libjxl。您可以传递 --enable-libjxl 进行配置以启用 libjxl 包装器。

41.16 libvpx

FFmpeg 可以利用 libvpx 库进行 VP8/VP9 解码和编码。

前往 http://www.webmproject.org/ 并按照说明安装该库。然后传递 --enable-libvpx 进行配置以启用它。

41.17 ModPlug

FFmpeg 可以利用这个源自 Modplug-XMMS 的库来读取 MOD 类型的音乐文件。请参阅 https://github.com/Konstanty/libmodplug。传递 --enable-libmodplug 给 configure 来启用它。

41.18 OpenCORE、VisualOn 和 Fraunhofer 库

从 Google Android 源代码衍生出的 OpenCore、VisualOn 和 Fraunhofer 库为多种音频编解码器提供了编码器。

OpenCORE 和 VisualOn 库采用 Apache License 2.0 许可证(详情请参阅 https://apache.ac.cn/licenses/LICENSE-2.0),该许可证与 LGPL 2.1 版和 GPL 2 版不兼容。您必须通过传递 --enable-version3 给 configure 来将 FFmpeg 的许可证升级到 LGPL 3 版(或者,如果您启用了 GPL 组件,则升级到 GPL 3 版)才能使用它。

Fraunhofer AAC 库的许可证与 GPL 不兼容。因此,对于 GPL 构建,您必须传递 --enable-nonfree 给 configure 才能使用它。据我们所知,它与 LGPL 兼容。

41.18.1 OpenCORE AMR

FFmpeg 可以利用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库。然后传递 --enable-libopencore-amrnb 和/或 --enable-libopencore-amrwb 给 configure 来启用它们。

41.18.2 VisualOn AMR-WB 编码器库

FFmpeg 可以利用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库。然后传递 --enable-libvo-amrwbenc 给 configure 来启用它。

41.18.3 Fraunhofer AAC 库

FFmpeg 可以利用 Fraunhofer AAC 库进行 AAC 解码和编码。

请访问 http://sourceforge.net/projects/opencore-amr/ 并按照说明安装库。然后传递 --enable-libfdk-aac 给 configure 来启用它。

41.18.4 LC3 库

FFmpeg 可以利用 Google LC3 库进行 LC3 解码和编码。

请访问 https://github.com/google/liblc3/ 并按照说明安装库。然后传递 --enable-liblc3 给 configure 来启用它。

41.19 OpenH264

FFmpeg 可以利用 OpenH264 库进行 H.264 解码和编码。

请访问 http://www.openh264.org/ 并按照说明安装库。然后传递 --enable-libopenh264 给 configure 来启用它。

对于解码,此库比 libavcodec 中的内置解码器有更多限制;目前,此库缺乏对 B 帧解码和一些其他主/高级配置文件功能的支持。(它目前仅支持约束基线配置文件和 CABAC。)使用它主要用于测试和利用 Cisco 的专利组合许可 (http://www.openh264.org/BINARY_LICENSE.txt)。

41.20 OpenJPEG

FFmpeg 可以使用 OpenJPEG 库解码/编码 J2K 视频。请访问 http://www.openjpeg.org/ 获取库并按照安装说明进行安装。要在 FFmpeg 中启用 OpenJPEG,请传递 --enable-libopenjpeg./configure

41.21 rav1e

FFmpeg 可以通过其 C 绑定利用 rav1e (Rust AV1 Encoder) 来编码视频。请访问 https://github.com/xiph/rav1e/ 并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请传递 --enable-librav1e./configure

41.22 SVT-AV1

FFmpeg 可以利用 Scalable Video Technology for AV1 库进行 AV1 编码。

请访问 https://gitlab.com/AOMediaCodec/SVT-AV1/ 并按照说明安装库。然后传递 --enable-libsvtav1 给 configure 来启用它。

41.23 TwoLAME

FFmpeg 可以利用 TwoLAME 库进行 MP2 编码。

请访问 http://www.twolame.org/ 并按照说明安装库。然后传递 --enable-libtwolame 给 configure 来启用它。

41.24 VapourSynth

FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请传递 --enable-vapoursynth 给 configure。Vapoursynth 通过 pkg-config 检测。支持 42 或更高版本。请参阅 http://www.vapoursynth.com/

出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制指定输入格式。对于 ff* 命令行工具,请在输入 `yourscript.vpy` 之前添加 `f vapoursynth`。

41.25 x264

FFmpeg 可以利用 x264 库进行 H.264 编码。

请访问 http://www.videolan.org/developers/x264.html 并按照说明安装库。然后传递 --enable-libx264 给 configure 来启用它。

x264 采用 GNU Public License Version 2 或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

41.26 x265

FFmpeg 可以利用 x265 库进行 HEVC 编码。

请访问 http://x265.org/developers.html 并按照说明安装库。然后传递 --enable-libx265 给 configure 来启用它。

x265 采用 GNU Public License Version 2 或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

41.27 xavs

FFmpeg 可以利用 xavs 库进行 AVS 编码。

请访问 http://xavs.sf.net/ 并按照说明安装库。然后传递 --enable-libxavs 给 configure 来启用它。

41.28 xavs2

FFmpeg 可以利用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。

请访问 https://github.com/pkuvcl/xavs2 并按照说明安装库。然后传递 --enable-libxavs2 给 configure 来启用它。

libxavs2 采用 GNU Public License Version 2 或更高版本(详情请参阅 https://gnu.ac.cn/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

41.29 超高速基本视频编码器 (XEVE)

FFmpeg 可以利用 XEVE 库进行 EVC 视频编码。

请访问 https://github.com/mpeg5/xeve 并按照说明安装 XEVE 库。然后传递 --enable-libxeve 给 configure 来启用它。

41.30 超高速基本视频解码器 (XEVD)

FFmpeg 可以利用 XEVD 库进行 EVC 视频解码。

请访问 https://github.com/mpeg5/xevd 并按照说明安装 XEVD 库。然后传递 --enable-libxevd 给 configure 来启用它。

41.31 ZVBI

ZVBI 是一个 VBI 解码库,FFmpeg 可以使用它来解码 DVB 图文电视页面和 DVB 图文电视字幕。

请访问 http://sourceforge.net/projects/zapping/ 并按照说明安装库。然后传递 --enable-libzvbi 给 configure 来启用它。

42 支持的文件格式、编解码器或功能

您可以使用 -formats-codecs 选项来获得详尽的列表。

42.1 文件格式

FFmpeg 通过 libavformat 库支持以下文件格式

名称编码解码备注
3dostrX
4xmX4X Technologies 格式,用于某些游戏中。
8088flex TMVX
AAXXAudible Enhanced Audio 格式,用于有声读物。
AAXAudible 格式 2、3 和 4,用于有声读物。
ACT VoiceX包含 G.729 音频
Adobe FilmstripXX
音频 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。
AVSX多媒体格式,用于游戏 Creature Shock。
Beam Software SIFFX音频和视频格式,用于 Beam Software 的一些游戏中。
Bethesda Softworks VIDX用于 Bethesda Softworks 的一些游戏中。
二进制文本X
BinkX许多游戏使用的多媒体格式。
Bink 音频X某些游戏使用的仅音频多媒体格式。
Bitmap Brothers JVX用于 Z 和 Z95 游戏中。
BRPXArgonaut Games 格式。
蛮力与无知X在游戏《闪电交通:天使之城》中使用。
BFSTMX任天堂 WiiU 上使用的音频格式(基于 BRSTM)。
BRSTMX音频格式,用于 Nintendo Wii。
BW64X广播波形 64 位。
BWFXX
codec2 (原始)XX必须提供 -mode 格式选项才能正确解码。
codec2 (.c2 文件)XX包含带有版本和模式信息的标头,简化播放。
CRI ADXXX在主机视频游戏中使用音频格式。
CRI AIXX
CRI HCAX在主机视频游戏中使用音频格式。
碟形世界 II BMVX
Interplay C93X在 Interplay 的游戏《网络空间》中使用。
Delphine Software International CINXDelphine Software 游戏使用的多媒体格式。
数字语音标准 (DSS)X
CD+GXCD+G 卡拉 OK 光盘使用的视频格式
幻影电影X
Commodore CDXLXAmiga CD 视频格式
核心音频格式XX苹果核心音频格式
CRC 测试格式X
创新语音XX为 Sound Blaster Pro 创建。
CRYO APCXCRYO Interactive Entertainment 的一些游戏使用的音频格式。
D-电影音频XX
豪华画笔动画X
DCSTRX
DFAX此格式用于《超时空战士》游戏
DirectDraw 表面X
DSD 流文件 (DSF)X
DV 视频XX
DXAX此格式用于 Feeble Files 游戏的非 Windows 版本以及为 ScummVM 重打包的不同游戏过场动画。
艺电 cdataX
艺电多媒体X在各种艺电游戏中使用;文件具有 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 原始X
GENHX各种游戏的音频格式。
GIF 动画XX
GXFXX通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播放服务器使用。
HNMX仅支持版本 4,在 Cryo Interactive 的一些游戏中使用
iCEDraw 文件X
ICOXXMicrosoft Windows ICO
id 雷神之锤 II CIN 视频X
id RoQXX在雷神之锤 III、绝地武士 2 和其他电脑游戏中使用。
IEC61937 封装XX
IFFX交换文件格式
IFVX一些旧的闭路电视数字视频录像机使用的格式。
iLBCXX
Interplay MVEX各种 Interplay 电脑游戏中使用的格式。
Iterated Systems ClearVideoX仅 I 帧
IV8XIndigoVision 8000 视频服务器生成的格式。
IVF (On2)XXlibvpx 使用的格式
互联网视频录制X
IRCAMXX
LAFX无限音频格式
LATMXX
LMLM4X由 Linux Media Labs MPEG-4 PCI 板使用
LOASX包含 LATM 多路复用的 AAC 音频
LRCXX
LVFX
LXFXVR 原生流格式,由 Leitch/Harris 的视频服务器使用。
魔灯视频 (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 音频X
运动像素 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 采样转储标准X
MIME 多部分 JPEGX
MSN TCP 网络摄像头X由 MSN Messenger 网络摄像头流使用。
MTVX
MusepackX
Musepack SV8X
材料交换格式 (MXF)XXSMPTE 377M,由 D-电影、广播行业使用。
材料交换格式 (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
原始 ADTS (AAC)XX
原始 AC-3XX
原始 AMR-NBX
原始 AMR-WBX
原始 APACX
原始 aptXXX
原始 aptX HDXX
原始 BonkX
原始中国 AVS 视频XX
原始 DFPWMXX
原始 DiracXX
原始 DNxHDXX
原始 DTSXX
原始 DTS-HDX
原始 E-AC-3XX
原始 EVCXX
原始 FLACXX
原始 GSMX
原始 H.261XX
原始 H.263XX
原始 H.264XX
原始 HEVCXX
原始 Ingenient MJPEGX
原始 MJPEGXX
原始 MLPX
原始 MPEGX
原始 MPEG-1X
原始 MPEG-2X
原始 MPEG-4XX
原始 NULLX
原始视频XX
原始 id RoQX
原始 OBUXX
原始 OSQX
原始 SBCXX
原始 ShortenX
原始 TAKX
原始 TrueHDXX
原始 VC-1XX
原始 PCM A-lawXX
原始 PCM mu-lawXX
原始 PCM 阿基米德 VIDCXX
原始 PCM 有符号 8 位XX
原始 PCM 有符号 16 位大端XX
原始 PCM 有符号 16 位小端XX
原始 PCM 有符号 24 位大端XX
原始 PCM 有符号 24 位小端XX
原始 PCM 有符号 32 位大端XX
原始 PCM 有符号 32 位小端XX
原始 PCM 有符号 64 位大端XX
原始 PCM 有符号 64 位小端XX
原始 PCM 无符号 8 位XX
原始 PCM 无符号 16 位大端XX
原始 PCM 无符号 16 位小端XX
原始 PCM 无符号 24 位大端XX
原始 PCM 无符号 24 位小端XX
原始 PCM 无符号 32 位大端XX
原始 PCM 无符号 32 位小端XX
原始 PCM 16.8 浮点小端X
原始 PCM 24.0 浮点小端X
原始 PCM 浮点 32 位大端XX
原始 PCM 浮点 32 位小端XX
原始 PCM 浮点 64 位大端XX
原始 PCM 浮点 64 位小端XX
RDTX
REDCODE R3DXRED Digital 摄像机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。
RealMediaXX
重定向器X
RedSparkX
Renderware 纹理字典X
Resolume DXVXX仅支持 DXT1(普通质量,无 Alpha)纹理格式的编码。
RF64X
RL2X娱乐软件合作伙伴的一些游戏使用的音频和视频格式。
RPL/ARMovieX
乐高头脑风暴 RSOXX
RSDX
RTMPXX输出通过将流发布到 RTMP 服务器来执行
RTPXX
RTSPXX
采样转储交换X
SAPXX
SBGX
SDNSX
SDPX
SERX
数字图片 SGAX
世嘉 FILM/CPKXX用于许多世嘉土星游戏机游戏。
Silicon Graphics 电影X
Sierra SOLX.sol 文件用于 Sierra Online 游戏。
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 原始 PGS 字幕XX
SVAGXKonami 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
Wing Commander III 电影XOrigin 的 Wing Commander 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 表示该列中的功能(编码/解码)受支持。

42.2 图像格式

FFmpeg 可以读取和写入视频序列中每一帧的图像。支持以下图像格式

名称编码解码备注
.Y.U.VXX每个组件一个原始文件
Alias PIXXXAlias/Wavefront PIX 图像格式
动画 GIFXX
APNGXX动画便携式网络图形
BMPXX微软 BMP 图像
BRender PIXXArgonaut BRender 3D 引擎图像格式。
CRIXCintel RAW
DPXXX数字图片交换
EXRXOpenEXR
FITSXX灵活图像传输系统
HDRXXRadiance HDR RGBE 图像格式
IMGXGEM 光栅图像
JPEGXX不支持渐进式 JPEG。
JPEG 2000XX
JPEG-LSXX
LJPEGX无损 JPEG
Media 100X
MSPX微软画图图像
PAMXXPAM 是一个带有 alpha 支持的 PNM 扩展。
PBMXX便携式位图图像
PCDXPhotoCD
PCXXXPC 画笔
PFMXX便携式浮点图图像
PGMXX便携式灰度图图像
PGMYUVXX在 YUV 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 表示通过外部库提供支持。

42.3 视频编解码器

名称编码解码备注
4X 电影X用于某些电脑游戏。
8088flex TMVX
A64 多色X创建适合在 Commodore 64(多色模式)上播放的视频。
Amazing Studio PAF 视频X
American Laser Games MMX用于诸如 Mad Dog McCree 之类的游戏。
Amuse Graphics 电影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 (音频视频标准) 视频XCreature Shock 游戏使用的视频编码。
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
蛮力与无知X在游戏《闪电交通:天使之城》中使用。
C93 视频XCyberia 游戏中使用的编解码器。
CamStudioXfourcc: CSCD
CD+GX用于 CD+G 卡拉 OK 光盘的视频编解码器
CDXLXAmiga CD 视频编解码器
中国 AVS 视频EXAVS1-P2,JiZhun 配置文件,通过外部库 libxavs 进行编码
Delphine Software International CIN 视频XDelphine Software International 游戏中使用的编解码器。
Discworld 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
DFAXChronomaster 游戏中使用的编解码器。
DiracEX通过原生 vc2 (Dirac Pro) 编码器提供支持
豪华画笔动画X
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 第 1 部分EE通过外部库 libxeve 和 libxevd 提供编码和解码支持
FFmpeg 视频编解码器 #1XX无损编解码器 (fourcc: FFV1)
Flash Screen 视频 v1XXfourcc: FSV1
Flash Screen 视频 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 的游戏《网络空间》中使用。
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 (Motion 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
Nintendo 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)
Sony 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 视频XX
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 ImageX
Windows Media Video 7XX
Windows Media Video 8XX
Windows Media Video 9X未完全工作
Wing Commander III / XanX用于《银河飞将 III》.MVE 文件。
Wing Commander IV / XanX用于《银河飞将 IV》。
Winnov WNV1X
WMV7XX
YAMAHA SMAFXX
Psygnosis YOP 视频X
yuv4XXlibquicktime 无压缩打包 4:2:0
ZeroCodec 无损视频X
ZLIBXXLCL 的一部分,编码器处于实验阶段
Zip 运动块视频XX编码器仅在 PAL8 中工作。

X 表示该列中的功能(编码/解码)受支持。

E 表示通过外部库提供支持。

42.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 Nintendo Gamecube AFCX
ADPCM Nintendo Gamecube DTKX
ADPCM Nintendo THPX
ADPCM PlaystationX
ADPCM QT IMAXX
ADPCM SEGA CRI ADXXX用于 Sega Dreamcast 游戏。
ADPCM Shockwave FlashXX
ADPCM Sound Blaster Pro 2 位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 音频XDelphine Software International 游戏中使用的编解码器。
DFPWMXX
数字语音标准 - 标准播放模式 (DSS SP)X
《碟形世界 II》BMV 音频X
COOKX支持除 5.1 以外的所有版本。
DCA (DTS 协同声学)XX支持的扩展名:XCh、XXCH、X96、XBR、XLL、LBR(部分)
杜比 EX
DPCM 立方根-增量-精确X在少数游戏中使用。
DPCM GremlinX
DPCM id RoQXX在雷神之锤 III、绝地武士 2 和其他电脑游戏中使用。
DPCM Marble WADYX
DPCM InterplayX在各种 Interplay 计算机游戏中使用。
DPCM 平方根-增量-精确X在各种游戏中使用。
DPCM Sierra OnlineX在 Sierra Online 游戏音频文件中使用。
DPCM SolX
DPCM XanX在 Origin 的《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 的 A-pac 音频X
MI-SC4(Micronas SC-4 音频)X
MLP(Meridian 无损压缩)XX在 DVD-Audio 光盘中使用。
Monkey's 音频X
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 律XX
PCM μ 律XX
PCM 阿基米德 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
PCM 有符号 16/20/24 位 MPEG-TS 大端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 比特/秒 编解码器
RealAudio 2.0 (28.8K)XReal 28800 比特/秒 编解码器
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 的无损音频压缩器)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 Audio 1XX
Windows Media Audio 2XX
Windows Media Audio 无损X
Windows Media Audio ProX
Windows Media Audio 语音X
Xbox Media Audio 1X
Xbox Media Audio 2X

X 表示该列中的功能(编码/解码)受支持。

E 表示通过外部库提供支持。

I 表示也提供纯整数版本(确保在没有硬件浮点支持的系统上具有高性能)。

42.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 表示通过外部库提供支持。

42.6 网络协议

名称支持
AMQPE
fileX
FTPX
GopherX
GophersX
HLSX
HTTPX
HTTPSX
IcecastX
MMSHX
MMSTX
pipeX
Pro-MPEG FECX
RTMPX
RTMPEX
RTMPSX
RTMPTX
RTMPTEX
RTMPTSX
RTPX
SAMBAE
SCTPX
SFTPE
TCPX
TLSX
UDPX
ZMQE

X 表示支持该协议。

E 表示通过外部库提供支持。

42.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 表示支持输入/输出。

42.8 时间码

编解码器/格式读取写入
AVIXX
DVXX
GXFXX
MOVXX
MPEG1/2XX
MXFXX

43 另请参阅

ffprobe, ffmpeg, ffplay, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

44 作者

FFmpeg 开发人员。

有关作者的详细信息,请参阅项目的 Git 历史记录(https://git.ffmpeg.org/ffmpeg),例如,在 FFmpeg 源代码目录中输入命令 git log,或者浏览在线存储库 https://git.ffmpeg.org/ffmpeg

特定组件的维护者列在源代码树中的文件 MAINTAINERS 中。

本文档于 2025 年 1 月 21 日 使用 makeinfo 生成。

telepoint.bg 提供托管服务