ffmpeg 文档

目录

1 概要

ffmpeg [全局选项] {[输入文件选项] -i输入网址} ... {[输出文件选项]输出地址} ...

2 说明

ffmpeg是一个通用媒体转换器。它可以读取各种输入 - 包括实时抓取/记录设备 - 过滤并将其转码为多种输出格式。

ffmpeg从选项指定的任意数量的输入“文件”(可以是常规文件、管道、网络流、抓取设备等)读取,并写入 -i任意数量的输出“文件”,这些文件由选项指定一个简单的输出 url。在命令行上找到的任何不能解释为选项的内容都被视为输出 url。

原则上,每个输入或输出 URL 可以包含任意数量的不同类型的流(视频/音频/字幕/附件/数据)。允许的流数量和/或类型可能受到容器格式的限制。选择哪些输入将进入哪些输出的流可以自动完成,也可以使用选项-map(请参阅流选择章节)。

要引用选项中的输入文件,您必须使用它们的索引(从 0 开始)。例如,第一个输入文件是0,第二个输入文件是1,等等。类似地,文件中的流由它们的索引引用。例如2:3指第三个输入文件中的第四个流。另请参阅流说明符一章。

作为一般规则,选项将应用于下一个指定的文件。因此,顺序很重要,您可以在命令行上多次使用相同的选项。然后,每次出现的情况都会应用于下一个输入或输出文件。此规则的例外是全局选项(例如详细级别),应首先指定它。

不要混合输入和输出文件 - 首先指定所有输入文件,然后指定所有输出文件。也不要混合属于不同文件的选项。所有选项仅适用于下一个输入或输出文件,并在文件之间重置。

下面是一些简单的例子。

  • 通过重新编码媒体流,将输入媒体文件转换为不同的格式:
    ffmpeg -i input.avi output.mp4
    
  • 将输出文件的视频比特率设置为 64 kbit/s:
    ffmpeg -i input.avi -b:v 64k -bufsize 64k output.mp4
    
  • 将输出文件的帧速率强制为 24 fps:
    ffmpeg -i input.avi -r 24 output.mp4
    
  • 强制输入文件的帧速率(仅对原始格式有效)为 1 fps,输出文件的帧速率为 24 fps:
    ffmpeg -r 1 -i input.m2v -r 24 output.mp4
    

原始输入文件可能需要格式选项。

3 详细说明

每个输出的转码过程ffmpeg可以用下图描述:

 _______              ______________
|       |            |              |
| input |  demuxer   | encoded data |   decoder
| file  | ---------> | packets      | -----+
|_______|            |______________|      |
                                           v
                                       _________
                                      |         |
                                      | decoded |
                                      | frames  |
                                      |_________|
 ________             ______________       |
|        |           |              |      |
| output | <-------- | encoded data | <----+
| file   |   muxer   | packets      |   encoder
|________|           |______________|


ffmpeg调用 libavformat 库(包含解复用器)来读取输入文件并从中获取包含编码数据的数据包。当有多个输入文件时,ffmpeg尝试通过跟踪任何活动输入流上的最低时间戳来保持它们同步。

然后,编码的数据包被传递到解码器(除非为流选择了流复制,请参阅进一步的描述)。解码器生成未压缩的帧(原始视频/PCM 音频/...),可以通过过滤进一步处理(参见下一节)。过滤后,帧被传递到编码器,编码器对它们进行编码并输出编码后的数据包。最后,这些数据被传递到复用器,复用器将编码后的数据包写入输出文件。

3.1 Filtering

在编码之前,ffmpeg可以使用 libavfilter 库中的过滤器处理原始音频和视频帧。几个链接的过滤器形成一个过滤器图。ffmpeg区分两种类型的过滤图:简单和复杂。

3.1.1 简单的过滤图

简单过滤图是指只有一个输入和输出且类型相同的过滤图。在上图中,它们可以通过简单地在解码和编码之间插入一个附加步骤来表示:

 _________                        ______________
|         |                      |              |
| decoded |                      | encoded data |
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
             \   __________   /
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
                | frames   |
                |__________|

简单的过滤器图配置有每个流-筛选选项(与-vf-af分别为视频和音频的别名)。一个简单的视频过滤图可以如下所示:

 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|

请注意,某些过滤器会更改框架属性,但不会更改框架内容。例如, fps上例中的过滤器更改帧数,但不触及帧内容。另一个例子是setpts过滤器,它只设置时间戳,否则不改变地传递帧。

3.1.2 复杂的过滤图

复杂的过滤器图不能简单地描述为应用于一个流的线性处理链。例如,当图具有多个输入和/或输出时,或者当输出流类型与输入不同时,就会出现这种情况。它们可以用下图表示:

 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|

复杂的过滤图配置为-filter_complex选项。请注意,此选项是全局的,因为复杂的过滤器图本质上不能与单个流或文件明确关联。

-拉夫菲选项相当于-filter_complex

复杂过滤器图的一个简单示例是overlay过滤器,它具有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频之上。它的音频对应部分是amix滤波器。

3.2 Stream copy

流复制是通过copy-编解码器选项。它ffmpeg省略了指定流的解码和编码步骤,因此它只进行解复用和复用。它对于更改容器格式或修改容器级元数据非常有用。在这种情况下,上图将简化为:

 _______              ______________            ________
|       |            |              |          |        |
| input |  demuxer   | encoded data |  muxer   | output |
| file  | ---------> | packets      | -------> | file   |
|_______|            |______________|          |________|

由于没有解码或编码,因此速度非常快并且没有质量损失。然而,由于多种因素,它在某些情况下可能不起作用。应用过滤器显然也是不可能的,因为过滤器适用于未压缩的数据。

4 码流选择

ffmpeg提供-map手动控制每个输出文件中的流选择的选项。用户可以跳过-map并让 ffmpeg 执行自动流选择,如下所述。这些-vn / -an / -sn / -dn选项可用于分别跳过视频、音频、字幕和数据流的包含,无论是手动映射还是自动选择,除了作为复杂过滤图输出的那些流。

4.1 Description

接下来的小节描述了流选择中涉及的各种规则。接下来的示例展示了如何在实践中应用这些规则。

虽然我们已尽一切努力准确反映程序的行为,但 FFmpeg 仍在不断开发中,自撰写本文以来,代码可能已发生更改。

4.1.1 自动码流选择

在特定输出文件没有任何映射选项的情况下,ffmpeg 检查输出格式以检查其中可以包含哪种类型的流,即。视频、音频和/或字幕。对于每种可接受的流类型,ffmpeg 将从所有输入中选择一个可用的流。

它将根据以下标准选择该流:

  • 对于视频,它是具有最高分辨率的流,
  • 对于音频,它是具有最多通道的流,
  • 对于字幕,这是找到的第一个字幕流,但有一个警告。输出格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且只会选择相同类型的字幕流。

在相同类型的多个流速率相等的情况下,选择具有最低索引的流。

数据或附件流不会自动选择,只能使用 来包含-map

4.1.2 手动选择码流

使用时-map,仅用户映射的流包含在该输出文件中,但下面描述的过滤器图输出可能存在例外。

4.1.3 复杂的过滤图

如果存在任何带有未标记 pad 的复杂 filtergraph 输出流,它们将被添加到第一个输出文件中。如果输出格式不支持流类型,这将导致致命错误。在没有地图选项的情况下,包含这些流会导致跳过其类型的自动流选择。如果存在映射选项,除了映射的流之外,还包括这些过滤器图流。

带有标记的 pad 的复杂过滤图输出流必须映射一次且恰好一次。

4.1.4 流处理

流处理与流选择无关,但下述字幕除外。流处理是通过-codec针对特定输出文件中的流的选项来设置的。特别是,编解码器选项由 ffmpeg 在流选择过程之后应用,因此不会影响后者。如果没有-codec为流类型指定选项,ffmpeg 将选择输出文件复用器注册的默认编码器。

字幕存在例外情况。如果为输出文件指定了字幕编码器,则将包含找到的任何类型(文本或图像)的第一个字幕流。ffmpeg 不会验证指定的编码器是否可以转换选定的流,或者转换后的流是否在输出格式中可接受。这通常也适用:当用户手动设置编码器时,流选择过程无法检查编码流是否可以复用到输出文件中。如果不能,ffmpeg 将中止并且所有输出文件将无法处理。

4.2 Examples

以下示例说明了 ffmpeg 流选择方法的行为、怪癖和限制。

他们假设以下三个输入文件。

input file 'A.avi'
      stream 0: video 640x360
      stream 1: audio 2 channels

input file 'B.mp4'
      stream 0: video 1920x1080
      stream 1: audio 2 channels
      stream 2: subtitles (text)
      stream 3: audio 5.1 channels
      stream 4: subtitles (text)

input file 'C.mkv'
      stream 0: video 1280x720
      stream 1: audio 2 channels
      stream 2: subtitles (image)

示例:自动流选择

ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

指定了三个输出文件,前两个没有-map设置任何选项,因此 ffmpeg 会自动为这两个文件选择流。

输出1.mkv是一个 Matroska 容器文件,接受视频、音频和字幕流,因此 ffmpeg 将尝试选择每种类型之一。
对于视频,它将stream 0选择B.mp4,在所有输入视频流中具有最高分辨率。
对于音频,它将stream 3选择B.mp4,因为它拥有最多的通道。
对于字幕,它将stream 2选择B.mp4,这是其中的第一个字幕流阿维病毒B.mp4

输出2.wav仅接受音频流,因此仅stream 3来自B.mp4被选中。

为了输出3.mov,由于-map设置了选项,因此不会发生自动流选择。该-map 1:a选项将从第二个输入选择所有音频流 B.mp4。此输出文件中不会包含其他流。

对于前两个输出,所有包含的流都将被转码。选择的编码器将是每个输出格式注册的默认编码器,它可能与所选输入流的编解码器不匹配。

对于第三个输出,音频流的编解码器选项已设置为copy,因此不会发生或可能发生解码-过滤-编码操作。所选流的数据包应从输入文件传送并在输出文件中复用。

示例:自动字幕选择

ffmpeg -i C.mkv out1.mkv -c:s dvdsub -an out2.mkv

虽然输出1.mkv是一个接受字幕流的 Matroska 容器文件,仅应选择视频和音频流。字幕流为mkv是基于图像的,而 Matroska 复用器的默认字幕编码器是基于文本的,因此字幕的转码操作预计会失败,因此不会选择流。然而,在 输出2.mkv,在命令中指定了字幕编码器,因此除了视频流之外,还选择了字幕流。的存在-an会禁用音频流选择输出2.mkv

示例:未标记的过滤图输出

ffmpeg -i A.avi -i C.mkv -i B.mp4 -filter_complex "overlay" out1.mp4 out2.srt

此处使用该选项设置过滤器图-filter_complex,并由单个视频过滤器组成。该overlay过滤器恰好需要两个视频输入,但没有指定,因此使用前两个可用的视频流,即阿维病毒mkv。过滤器的输出板没有标签,因此被发送到第一个输出文件 输出1.mp4。因此,会跳过视频流的自动选择,这会在B.mp4。具有大多数通道的音频流,即。stream 3B.mp4,自动选择。然而,没有选择字幕流,因为 MP4 格式没有注册默认字幕编码器,并且用户没有指定字幕编码器。

第二个输出文件,输出2.srt,仅接受基于文本的字幕流。因此,即使第一个可用的字幕流属于mkv,它是基于图像的,因此被跳过。选定的流,stream 2B.mp4,是第一个基于文本的字幕流。

示例:带标签的过滤图输出

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -map '[outv]' -an        out1.mp4 \
                                out2.mkv \
       -map '[outv]' -map 1:a:0 out3.mkv

上述命令将失败,因为标记的输出焊盘[outv]已被映射两次。不应处理任何输出文件。

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0[outv];overlay;aresample" \
       -an        out1.mp4 \
                  out2.mkv \
       -map 1:a:0 out3.mkv

上面的命令也会失败,因为色调过滤器输出有一个标签 ,[outv]并且尚未映射到任何地方。

该命令应修改如下,

ffmpeg -i A.avi -i B.mp4 -i C.mkv -filter_complex "[1:v]hue=s=0,split=2[outv1][outv2];overlay;aresample" \
        -map '[outv1]' -an        out1.mp4 \
                                  out2.mkv \
        -map '[outv2]' -map 1:a:0 out3.mkv

视频流来自B.mp4被发送到色调过滤器,其输出使用分割过滤器被克隆一次,并且两个输出都被标记。然后将每个副本映射到第一个和第三个输出文件。

覆盖过滤器需要两个视频输入,使用前两个未使用的视频流。这些是来自的流阿维病毒mkv。覆盖输出未标记,因此它被发送到第一个输出文件输出1.mp4,无论该-map选项是否存在。

aresample 过滤器发送第一个未使用的音频流,即阿维病毒。由于此过滤器输出也未标记,因此它也映射到第一个输出文件。的存在-an 仅抑制音频流的自动或手动流选择,而不抑制从过滤器发送的输出。这两个映射流都应排在映射流之前输出1.mp4

映射到的视频、音频和字幕流out2.mkv完全由自动流选择决定。

输出3.mkv由色调过滤器的克隆视频输出和来自的第一个音频流组成B.mp4

5 个选项

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

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

不带参数的选项是布尔选项,并将相应的值设置为true。可以通过在选项名称前加上“no”前缀将它们设置为 false。例如,使用“-nofoo”会将名称为“foo”的布尔选项设置为 false。

5.1 Stream specifiers

某些选项适用于每个流,例如比特率或编解码器。流说明符用于精确指定给定选项所属的流。

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

流说明符可以匹配多个流,以便该选项应用于所有流。例如,流说明符-b:a 128k匹配所有音频流。

空流说明符匹配所有流。例如,-codec copy 或者-codec: copy将复制所有流而不重新编码。

流说明符的可能形式是:

stream_index

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

stream_type[:additional_stream_specifier]

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

p:program_id[:additional_stream_specifier]

匹配程序中 ID 为program_id的流。如果 使用additional_stream_specifier,则它匹配既属于程序一部分又匹配additional_stream_specifier的

#stream_id or i:stream_id

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

m:key[:value]

将流与具有指定值的元数据标签键相匹配。如果 未给出,则将包含给定标记的流与任何值进行匹配。

u

将流与可用配置相匹配,必须定义编解码器,并且必须提供视频尺寸或音频采样率等基本信息。

请注意,在 中ffmpeg,按元数据匹配仅适用于输入文件。

5.2 Generic options

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

-L

显示许可证。

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

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

arg的可能值为:

long

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

full

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

decoder=decoder_name

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

encoder=encoder_name

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

demuxer=demuxer_name

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

muxer=muxer_name

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

filter=filter_name

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

bsf=bitstream_filter_name

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

protocol=protocol_name

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

-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

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

可选的标志前缀可以包含以下值:

repeat

指示重复的日志输出不应压缩到第一行,并且“Last message returned n times”行将被省略。

level

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

标志也可以单独使用,通过添加 '+'/'-' 前缀来设置/重置单个标志,而不影响其他标志或更改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前缀标志或日志级别当前状态的示例:

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

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

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

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

-hide_banner

禁止打印横幅。

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

-cpuflags flags (global)

允许设置和清除 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 (global)

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

ffmpeg -cpucount 2
-max_alloc bytes

设置 ffmpeg 的 malloc 函数系列在堆上分配块的最大大小限制。使用此选项时请格外小心。如果您不了解这样做的全部后果,请不要使用。默认值为 INT_MAX。

5.3 AVOptions

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

generic

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

private

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

例如,要将 ID3v2.3 标头而不是默认的 ID3v2.4 写入 MP3 文件,请使用id3v2_版本MP3 混合器的私有选项:

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

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

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 的比特率。

注:-无选项语法不能用于布尔 AVOptions,请使用-选项0/-选项1

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

5.4 Main options

-f fmt (input/output)

强制输入或输出文件格式。通常会自动检测输入文件的格式,并根据输出文件的文件扩展名猜测格式,因此在大多数情况下不需要此选项。

-i url (input)

输入文件网址

-y (global)

无需询问即可覆盖输出文件。

-n (global)

不要覆盖输出文件,如果指定的输出文件已存在,则立即退出。

-stream_loop number (input)

设置输入流应循环的次数。Loop 0表示无循环,loop-1表示无限循环。

-recast_media (global)

允许强制使用与解复用器检测或指定的媒体类型不同的媒体类型的解码器。对于解码混合为数据流的媒体数据很有用。

-c[:stream_specifier] codec (input/output,per-stream)
-codec[:stream_specifier] codec (input/output,per-stream)

为一个或多个流选择编码器(当在输出文件之前使用时)或解码器(当在输入文件之前使用时)。codec是解码器/编码器的名称或特殊值copy(仅输出),指示流不被重新编码。

例如

ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

使用 libx264 编码所有视频流并复制所有音频流。

对于每个流,c应用最后一个匹配选项,因此

ffmpeg -i INPUT -map 0 -c copy -c:v:1 libx264 -c:a:137 libvorbis OUTPUT

将复制除第二个视频(将使用 libx264 编码)和第 138 个音频(将使用 libvorbis 编码)之外的所有流。

-t duration (input/output)

当用作输入选项时(在 之前-i),限制从输入文件读取数据的 持续时间。

当用作输出选项时(在输出 url 之前),在其持续时间达到持续时间后停止写入输出。

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

-to 和 -t 是互斥的,并且 -t 具有优先权。

-to position (input/output)

停止在位置处写入输出或读取输入。 位置必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分

-to 和 -t 是互斥的,并且 -t 具有优先权。

-fs limit_size (output)

设置文件大小限制,以字节为单位。超过限制后,不会再写入任何字节块。输出文件的大小略大于请求的文件大小。

-ss position (input/output)

当用作输入选项时(在 之前-i),在此输入文件中查找 位置。请注意,在大多数格式中不可能精确查找,因此ffmpeg将查找位置之前最近的查找点。转码时和-accurate_seek启用(默认),搜索点和位置之间的额外段将被解码并丢弃。当进行流复制时或者当-noaccurate_seek使用后,将被保存。

当用作输出选项时(在输出 url 之前),解码但丢弃输入,直到时间戳到达位置

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

-sseof position (input)

与选项类似-ss,但相对于“文件结尾”。也就是说,负值位于文件的较早位置,0 位于 EOF 处。

-isync input_index (input)

将输入指定为同步源。

这将获取目标输入和参考输入的开始时间之间的差异,并将目标文件的时间戳偏移该差异。两个输入的源时间戳应源自同一时钟源以获得预期结果。如果copyts设置了则start_at_zero也必须设置。如果任一输入没有开始时间戳,则不进行同步调整。

可接受的值是那些引用有效 ffmpeg 输入索引的值。如果同步引用是目标索引本身或-1,则不对目标时间戳进行调整。同步参考本身可能不会与任何其他输入同步。

默认值为-1

-itsoffset offset (input)

设置输入时间偏移。

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

该偏移量将添加到输入文件的时间戳中。指定正偏移量意味着相应的流将延迟offset中指定的持续时间。

-itsscale scale (input,per-stream)

重新调整输入时间戳。比例应该是浮点数。

-timestamp date (output)

设置容器中的记录时间戳。

date必须是日期规范,请参阅(ffmpeg-utils)ffmpeg-utils(1) 手册中的日期部分

-metadata[:metadata_specifier] key=value (output,per-metadata)

设置元数据键/值对。

可以给出可选的metadata_specifier来设置流、章节或节目的元数据。有关详细信息,请参阅-map_metadata 文档。

此选项会覆盖使用-map_metadata. 还可以使用空值删除元数据。

例如,要在输出文件中设置标题:

ffmpeg -i in.avi -metadata title="my title" out.flv

设置第一个音频流的语言:

ffmpeg -i INPUT -metadata:s:a:0 language=eng OUTPUT
-disposition[:stream_specifier] value (output,per-stream)

设置流的处置。

默认情况下,配置是从输入流复制的,除非此选项适用的输出流由复杂的过滤器图提供 - 在这种情况下,默认情况下未设置配置。

value是由“+”或“-”分隔的项目序列。第一项也可以以“+”或“-”为前缀,在这种情况下,此选项会修改默认值。否则(第一项没有前缀)此选项将覆盖默认值。'+' 前缀添加给定的配置,'-' 删除它。也可以通过将其设置为 0 来清除该配置。

如果没有-disposition为输出文件指定选项,当输出文件中有多个该类型的流并且没有该类型的流已标记为默认值时,ffmpeg 将自动在每种类型的第一个流上设置“默认”配置。

-dispositions选项列出了已知的配置。

例如,要将第二个音频流设置为默认流:

ffmpeg -i in.mkv -c copy -disposition:a:1 default out.mkv

要将第二个字幕流设置为默认流并从第一个字幕流中删除默认配置:

ffmpeg -i in.mkv -c copy -disposition:s:0 0 -disposition:s:1 default out.mkv

要添加嵌入的封面/缩略图:

ffmpeg -i in.mp4 -i IMAGE -map 0 -map 1 -c copy -c:v:1 png -disposition:v:1 attached_pic out.mp4

并非所有复用器都支持嵌入缩略图,即使支持,也仅支持少数格式,例如 JPEG 或 PNG。

-program [title=title:][program_num=program_num:]st=stream[:st=stream...] (output)

创建具有指定titleprogram_num 的节目并向其中 添加指定的 流。

-target type (output)

指定目标文件类型(vcdsvcddvddvdv50)。type可以以pal-,ntsc-或 为前缀film-以使用相应的标准。所有格式选项(比特率、编解码器、缓冲区大小)都会自动设置。您只需输入:

ffmpeg -i myfile.avi -target vcd /tmp/vcd.mpg

不过,您可以指定其他选项,只要您知道它们不与标准冲突即可,如下所示:

ffmpeg -i myfile.avi -target vcd -bf 2 /tmp/vcd.mpg

每个目标设置的参数如下。

光盘

pal:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x288 -r 25
-codec:v mpeg1video -g 15 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

ntsc:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 30000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

film:
-f vcd -muxrate 1411200 -muxpreload 0.44 -packetsize 2324
-s 352x240 -r 24000/1001
-codec:v mpeg1video -g 18 -b:v 1150k -maxrate:v 1150k -minrate:v 1150k -bufsize:v 327680
-ar 44100 -ac 2
-codec:a mp2 -b:a 224k

SVCD

pal:
-f svcd -packetsize 2324
-s 480x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

ntsc:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

film:
-f svcd -packetsize 2324
-s 480x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 2040k -maxrate:v 2516k -minrate:v 0 -bufsize:v 1835008 -scan_offset 1
-ar 44100
-codec:a mp2 -b:a 224k

DVD

pal:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x576 -pix_fmt yuv420p -r 25
-codec:v mpeg2video -g 15 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

ntsc:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 30000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

film:
-f dvd -muxrate 10080k -packetsize 2048
-s 720x480 -pix_fmt yuv420p -r 24000/1001
-codec:v mpeg2video -g 18 -b:v 6000k -maxrate:v 9000k -minrate:v 0 -bufsize:v 1835008
-ar 48000
-codec:a ac3 -b:a 448k

DV

pal:
-f dv
-s 720x576 -pix_fmt yuv420p -r 25
-ar 48000 -ac 2

ntsc:
-f dv
-s 720x480 -pix_fmt yuv411p -r 30000/1001
-ar 48000 -ac 2

film:
-f dv
-s 720x480 -pix_fmt yuv411p -r 24000/1001
-ar 48000 -ac 2

除了像素格式集适用于所有三个标准 之外,目标dv50与目标相同。dvyuv422p

上述参数的任何用户设置值都将覆盖目标预设值。在这种情况下,输出可能不符合目标标准。

-dn (input/output)

作为输入选项,阻止文件的所有数据流被过滤或自动选择或映射到任何输出。请参阅-discard 单独禁用流的选项。

作为输出选项,禁用数据记录,即自动选择或映射任何数据流。如需完全手动控制,请参阅-map 选项。

-dframes number (output)

设置要输出的数据帧的数量。这是 的过时别名 -frames:d,您应该使用它。

-frames[:stream_specifier] framecount (output,per-stream)

在帧数帧之后停止写入流。

-q[:stream_specifier] q (output,per-stream)
-qscale[:stream_specifier] q (output,per-stream)

使用固定质量等级 (VBR)。q / qscale的含义取决于编解码器。如果在没有stream_specifier的情况下使用qscale,那么它仅适用于视频流,这是为了保持与以前的行为的兼容性,并且为2个不同的编解码器(音频和视频)指定相同的编解码器特定值通常不是没有stream_specifier时的预期目的用来。

-filter[:stream_specifier] filtergraph (output,per-stream)

创建filtergraph指定的filtergraph并使用它来过滤流。

filtergraph是对应用于流的filtergraph 的描述,并且必须具有与流相同类型的单个输入和单个输出。在过滤器图中,输入与 label 关联in,输出与 label 关联out。有关 filtergraph 语法的更多信息,请参阅 ffmpeg-filters 手册。

如果您想创建具有多个输入和/或输出的过滤器图, 请参阅-filter_complex 选项。

-filter_script[:stream_specifier] filename (output,per-stream)

该选项类似于-筛选,唯一的区别是它的参数是要从中读取过滤器图描述的文件的名称。

-reinit_filter[:stream_specifier] integer (input,per-stream)

此布尔选项确定当输入帧参数在流中更改时是否重新初始化此流所馈送到的过滤器图。默认情况下启用此选项,因为大多数视频和所有音频过滤器无法处理输入帧属性中的偏差。重新初始化后,现有的过滤器状态将丢失,例如n 某些过滤器中可用的帧计数参考。重新初始化时缓冲的所有帧都会丢失。更改触发重新初始化的属性是视频、帧分辨率或像素格式;对于音频、样本格式、采样率、通道数或通道布局。

-filter_threads nb_threads (global)

定义使用多少个线程来处理过滤器管道。每个管道都会生成一个线程池,其中有这么多线程可用于并行处理。默认值是可用 CPU 的数量。

-pre[:stream_specifier] preset_name (output,per-stream)

指定匹配流的预设。

-stats (global)

打印编码进度/统计信息。默认情况下它是打开的,要显式禁用它,您需要指定-nostats

-stats_period time (global)

设置更新编码进度/统计信息的周期。默认值为 0.5 秒。

-progress url (global)

将程序友好的进度信息发送到url

进度信息会在编码过程结束时定期写入。它由“ key = value ”行组成。 仅由字母数字字符组成。进度信息序列的最后一个键始终是“进度”。

更新周期使用 来设置-stats_period

-stdin

启用标准输入交互。除非使用标准输入作为输入,否则默认打开。要显式禁用交互,您需要指定 -nostdin.

禁用标准输入上的交互很有用,例如,如果 ffmpeg 位于后台进程组中。可以实现大致相同的结果,ffmpeg ... < /dev/null但它需要一个外壳。

-debug_ts (global)

打印时间戳信息。默认情况下它是关闭的。此选项主要用于测试和调试目的,并且输出格式可能从一个版本更改为另一个版本,因此不应由可移植脚本使用。

另请参见选项-fdebug ts

-attach filename (output)

将附件添加到输出文件。这受到一些格式的支持,例如用于渲染字幕的字体的 Matroska。附件作为特定类型的流实现,因此此选项将向文件添加新流。然后可以以通常的方式在此流上使用每个流选项。使用此选项创建的附件流将在所有其他流(即使用自动映射创建的附件流)之后创建-map

请注意,对于 Matroska,您还必须设置 mimetype 元数据标记:

ffmpeg -i INPUT -attach DejaVuSans.ttf -metadata:s:2 mimetype=application/x-truetype-font out.mkv

(假设附件流将是输出文件中的第三个)。

-dump_attachment[:stream_specifier] filename (input,per-stream)

将匹配的附件流提取到名为filename的文件中。如果 文件名为filename空,则将使用元数据标记 的值。

例如,将第一个附件提取到名为“out.ttf”的文件中:

ffmpeg -dump_attachment:t:0 out.ttf -i INPUT

要将所有附件提取到由标签确定的文件filename

ffmpeg -dump_attachment:t "" -i INPUT

技术说明 - 附件作为编解码器额外数据实现,因此该选项实际上可用于从任何流中提取额外数据,而不仅仅是附件。

5.5 Video Options

-vframes number (output)

设置要输出的视频帧数。这是 的过时别名 -frames:v,您应该使用它。

-r[:stream_specifier] fps (input/output,per-stream)

设置帧速率(Hz 值、分数或缩写)。

As an input option, ignore any timestamps stored in the file and instead generate timestamps assuming constant frame rate fps. This is not the same as the -framerate option used for some input formats like image2 or v4l2 (it used to be the same in older versions of FFmpeg). If in doubt use -framerate instead of the input option -r.

As an output option:

video encoding

Duplicate or drop frames right before encoding them to achieve constant output frame rate fps.

video streamcopy

Indicate to the muxer that fps is the stream frame rate. No data is dropped or duplicated in this case. This may produce invalid files if fps does not match the actual stream frame rate as determined by packet timestamps. See also the setts bitstream filter.

-fpsmax[:stream_specifier] fps (output,per-stream)

Set maximum frame rate (Hz value, fraction or abbreviation).

Clamps output frame rate when output framerate is auto-set and is higher than this value. Useful in batch processing or when input framerate is wrongly detected as very high. It cannot be set together with -r. It is ignored during streamcopy.

-s[:stream_specifier] size (input/output,per-stream)

Set frame size.

As an input option, this is a shortcut for the video_size private option, recognized by some demuxers for which the frame size is either not stored in the file or is configurable – e.g. raw video or video grabbers.

As an output option, this inserts the scale video filter to the end of the corresponding filtergraph. Please use the scale filter directly to insert it at the beginning or some other place.

The format is ‘wxh’ (default - same as source).

-aspect[:stream_specifier] aspect (output,per-stream)

Set the video display aspect ratio specified by aspect.

aspect can be a floating point number string, or a string of the form num:den, where num and den are the numerator and denominator of the aspect ratio. For example "4:3", "16:9", "1.3333", and "1.7777" are valid argument values.

If used together with -vcodec copy, it will affect the aspect ratio stored at container level, but not the aspect ratio stored in encoded frames, if it exists.

-display_rotation[:stream_specifier] rotation (input,per-stream)

Set video rotation metadata.

rotation is a decimal number specifying the amount in degree by which the video should be rotated counter-clockwise before being displayed.

This option overrides the rotation/display transform metadata stored in the file, if any. When the video is being transcoded (rather than copied) and -autorotate is enabled, the video will be rotated at the filtering stage. Otherwise, the metadata will be written into the output file if the muxer supports it.

If the -display_hflip and/or -display_vflip options are given, they are applied after the rotation specified by this option.

-display_hflip[:stream_specifier] (input,per-stream)

Set whether on display the image should be horizontally flipped.

请参阅该-display_rotation选项了解更多详细信息。

-display_vflip[:stream_specifier] (input,per-stream)

设置显示时图像是否垂直翻转。

请参阅该-display_rotation选项了解更多详细信息。

-vn (input/output)

作为输入选项,阻止文件的所有视频流被过滤或自动选择或映射到任何输出。请参阅-discard 单独禁用流的选项。

作为输出选项,禁用视频录制,即自动选择或映射任何视频流。如需完全手动控制,请参阅-map 选项。

-vcodec codec (output)

设置视频编解码器。这是 的别名-codec:v

-pass[:stream_specifier] n (output,per-stream)

选择通行证编号(1 或 2)。它用于进行两遍视频编码。视频的统计信息在第一遍中记录到日志文件中(另请参见选项 -passlogfile),在第二遍中,该日志文件用于以准确请求的比特率生成视频。在第 1 遍中,您可以停用音频并将输出设置为 null,例如 Windows 和 Unix:

ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL
ffmpeg -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null
-passlogfile[:stream_specifier] prefix (output,per-stream)

将两遍日志文件名前缀设置为prefix,默认文件名前缀为“ffmpeg2pass”。完整的文件名将是 前缀-N.log,其中 N 是特定于输出流的数字

-vf filtergraph (output)

创建filtergraph指定的filtergraph并使用它来过滤流。

这是 的别名-filter:v,请参阅-filter 选项

-autorotate

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

-autoscale

根据第一帧的分辨率自动缩放视频。默认启用,使用-无自动缩放禁用它。当自动缩放被禁用时,过滤器图的所有输出帧可能不具有相同的分辨率,并且对于某些编码器/复用器来说可能不够。因此,除非您确实知道自己在做什么,否则不建议禁用它。禁用自动缩放的风险由您自行承担。

5.6 Advanced Video options

-pix_fmt[:stream_specifier] format (input/output,per-stream)

设置像素格式。用于-pix_fmts显示所有支持的像素格式。如果无法选择所选的像素格式,ffmpeg将打印警告并选择编码器支持的最佳像素格式。如果pix_fmt以 a 为前缀+,则如果无法选择请求的像素格式,ffmpeg 将退出并显示错误,并且将禁用 filtergraph 内的自动转换。如果pix_fmt是 single +,则 ffmpeg 选择与输入(或图形输出)相同的像素格式,并禁用自动转换。

-sws_flags flags (input/output)

设置 libswscale 库的默认标志。scale这些标志由自动插入的过滤器和简单过滤器图表中的过滤器 使用,如果没有在过滤器图表定义中覆盖的话。

有关缩放器选项列表, 请参阅(ffmpeg-scaler)ffmpeg-scaler 手册。

-rc_override[:stream_specifier] override (output,per-stream)

特定间隔的速率控制覆盖,格式为“int,int,int”列表,以斜杠分隔。第两个值是开始帧号和结束帧号,最后一个值是要使用的量化器(如果为正)或品质因数(如果为负)。

-psnr

计算压缩帧的 PSNR。此选项已弃用,请使用 . 将 PSNR 标志传递给编码器-flags +psnr

-vstats

将视频编码统计数据转储到vstats_HHMMSS.log。有关格式说明, 请参阅 vstats 文件格式部分。

-vstats_file file

将视频编码统计信息转储到文件。有关格式说明, 请参阅 vstats 文件格式部分。

-vstats_version file

指定要使用哪个版本的 vstats 格式。默认为2. 有关格式说明, 请参阅 vstats 文件格式部分。

-vtag fourcc/tag (output)

强制视频标签/fourcc。这是 的别名-tag:v

-vbsf bitstream_filter

已弃用 请参阅 -bsf

-force_key_frames[:stream_specifier] time[,time...] (output,per-stream)
-force_key_frames[:stream_specifier] expr:expr (output,per-stream)
-force_key_frames[:stream_specifier] source (output,per-stream)

force_key_frames可以采用以下形式的参数:

time[,time...]

如果参数由时间戳组成,ffmpeg 将根据编码器时基将指定时间舍入到最接近的输出时间戳,并强制在时间戳等于或大于计算时间戳的第一帧处使用关键帧。请注意,如果编码器时基太粗,则可能会在时间戳低于指定时间的帧上强制使用关键帧。默认编码器时基是输出帧速率的倒数,但可以通过其他方式设置-enc_time_base

如果其中一个时间为“ chapters[ de​​lta ]”,则将其扩展为文件中所有章节的开始时间,移位 delta,表示为以秒为单位的时间。此选项可用于确保查找点出现在输出文件中的章节标记或任何其他指定位置。

例如,要在 5 分钟处插入关键帧,加上每章开始前 0.1 秒的关键帧:

-force_key_frames 0:05:00,chapters-0.1
expr:expr

如果参数以 为前缀expr:,则字符串expr 会像表达式一样被解释,并针对每个帧进行计算。如果评估不为零,则强制使用关键帧。

expr中的表达式可以包含以下常量:

n

当前处理的帧数,从0开始

n_forced

强制帧数

prev_forced_n

前一个强制帧的编号,即NAN尚未强制关键帧时

prev_forced_t

上一个强制帧的时间,即NAN尚未强制关键帧时

t

当前处理帧的时间

例如,要强制每 5 秒出现一次关键帧,您可以指定:

-force_key_frames expr:gte(t,n_forced*5)

要在最后一个强制关键帧的时间后 5 秒强制关键帧,从第 13 秒开始:

-force_key_frames expr:if(isnan(prev_forced_t),gte(t,13),gte(t,prev_forced_t+5))
source

如果参数为source,并且当前正在编码的帧在其源中被标记为关键帧,则 ffmpeg 将强制使用关键帧。如果必须删除此特定源帧,请强制下一个可用帧成为关键帧。

请注意,强制使用太多关键帧对于某些编码器的前瞻算法非常有害:使用固定 GOP 选项或类似选项会更有效。

-copyinkf[:stream_specifier] (output,per-stream)

进行流复制时,还复制开头找到的非关键帧。

-init_hw_device type[=name][:device[,key=value...]]

使用给定的设备参数初始化类型为name的新硬件设备。如果未指定名称,它将收到“ type %d”形式的默认名称。

设备和以下参数的含义取决于设备类型:

cuda

device是 CUDA 设备的编号。

可以识别以下选项:

primary_ctx

如果设置为 1,则使用主设备上下文而不是创建新设备上下文。

例子:

-init_hw_device cuda:1

选择系统上的第二个设备。

-init_hw_device cuda:0,primary_ctx=1

选择第一个设备并使用主设备上下文。

dxva2

device是 Direct3D 9 显示适配器的编号。

d3d11va

device是 Direct3D 11 显示适配器的编号。

vaapi

device是 X11 显示名称、DRM 渲染节点或 DirectX 适配器索引。如果未指定,它将尝试打开默认的 X11 显示 ( $DISPLAY ),然后打开第一个 DRM 渲染节点 ( /dev/dri/renderD128 ),或 Windows 上的默认 DirectX 适配器。

vdpau

device是 X11 显示名称。如果未指定,它将尝试打开默认的 X11 显示 ( $DISPLAY )。

qsv

设备在 ' 中选择一个值MFX_IMPL_*'。允许的值为:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4

如果没有指定,'自动_任意' 用来。(请注意,通过创建适合平台的子设备('dxva2' 或者 'd3d11va' 或者 '瓦皮'),然后从中派生出 QSV 设备。)

或者, '子设备类型' 有助于选择适合平台的子设备类型。在 Windows 上d3d11va' 用作默认子设备类型。

例子:

-init_hw_device qsv:hw,child_device_type=d3d11va

选择类型为 ' 的 GPU 子设备d3d11va' 并使用 ' 创建 QSV 设备MFX_IMPL_硬件'。

-init_hw_device qsv:hw,child_device_type=dxva2

选择类型为 ' 的 GPU 子设备dxva2' 并使用 ' 创建 QSV 设备MFX_IMPL_硬件'。

opencl

device选择平台和设备作为platform_index.device_index

还可以使用键值对来过滤设备集,以仅查找与特定平台或设备字符串匹配的设备。

可用作过滤器的字符串有:

platform_profile
platform_version
platform_name
platform_vendor
platform_extensions
device_name
device_vendor
driver_version
device_version
device_profile
device_extensions
device_type

索引和过滤器必须一起唯一地选择一个设备。

例子:

-init_hw_device opencl:0.1

在第一个平台上选择第二个设备。

-init_hw_device opencl:,device_name=Foo9000

选择名称包含字符串Foo9000 的设备。

-init_hw_device opencl:1,device_type=gpu,device_extensions=cl_khr_fp16

选择第二个平台上支持cl_khr_fp16扩展的GPU 设备 。

vulkan

如果device是整数,则它通过系统相关设备列表中的索引来选择设备。如果设备是任何其他字符串,它将选择名称包含该字符串作为子字符串的第一个设备。

可以识别以下选项:

debug

如果设置为 1,则启用验证层(如果已安装)。

linear_images

如果设置为 1,由 hwcontext 分配的图像将是线性的且可本地映射。

instance_extensions

要启用的附加实例扩展的加号分隔列表。

device_extensions

要启用的附加设备扩展的加号分隔列表。

例子:

-init_hw_device vulkan:1

选择系统上的第二个设备。

-init_hw_device vulkan:RADV

选择名称包含字符串RADV的第一个设备。

-init_hw_device vulkan:0,instance_extensions=VK_KHR_wayland_surface+VK_KHR_xcb_surface

选择第一个设备并启用 Wayland 和 XCB 实例扩展。

-init_hw_device type[=name]@source

初始化类型name的新硬件设备,从名称为source的现有设备派生它。

-init_hw_device list

列出此 ffmpeg 版本中支持的所有硬件设备类型。

-filter_hw_device name

将名为name的硬件设备传递给任何过滤器图中的所有过滤器。这可用于设置要使用过滤器上传到的设备hwupload,或要使用过滤器映射到的设备hwmap。其他过滤器在需要硬件设备时也可以使用此参数。请注意,这通常仅当输入尚未在硬件帧中时才需要 - 当输入已在硬件帧中时,过滤器将从它们接收为输入的帧的上下文中导出它们所需的设备。

这是全局设置,因此所有过滤器都将接收相同的设备。

-hwaccel[:stream_specifier] hwaccel (input,per-stream)

使用硬件加速来解码匹配的流。hwaccel的允许值为:

none

不使用任何硬件加速(默认)。

auto

自动选择硬件加速方式。

vdpau

使用 VDPAU(适用于 Unix 的视频解码和演示 API)硬件加速。

dxva2

使用DXVA2(DirectX视频加速)硬件加速。

d3d11va

使用D3D11VA(DirectX视频加速)硬件加速。

vaapi

使用VAAPI(视频加速API)硬件加速。

qsv

使用 Intel QuickSync 视频加速进行视频转码。

与大多数其他值不同,此选项不启用加速解码(每当选择 qsv 解码器时自动使用),而是加速转码,而不将帧复制到系统内存中。

为了使其正常工作,解码器和编码器都必须支持 QSV 加速,并且不得使用任何滤波器。

如果所选的 hwaccel 不可用或所选解码器不支持,则此选项无效。

请注意,大多数加速方法都是用于播放,并且不会比现代 CPU 上的软件解码更快。此外,ffmpeg 通常需要将解码后的帧从 GPU 内存复制到系统内存中,从而导致进一步的性能损失。因此,该选项主要用于测试。

-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)

选择用于硬件加速的设备。

此选项仅在以下情况下才有意义-hwaccel还指定了选项。它可以引用使用创建的现有设备-init_硬件设备 按名称,或者它可以创建一个新设备,就像'-init_硬件设备' type : hwaccel_device 之前被调用。

-hwaccels

列出此 ffmpeg 版本中启用的所有硬件加速组件。实际运行时可用性取决于硬件及其所安装的合适驱动程序。

-fix_sub_duration_heartbeat[:stream_specifier]

将特定的输出视频流设置为心跳流,在收到随机访问数据包时根据该心跳流分割并推送当前正在进行的字幕。

这降低了尚未接收到结束数据包或后续字幕的字幕的延迟。缺点是,这很可能导致字幕事件重复以覆盖整个持续时间,因此在处理字幕事件传递到输出时的延迟不相关的用例时,不应使用此选项。

需要-fix_sub_duration为相关输入字幕流设置,以使其产生任何效果,以及输入字幕流必须直接映射到心跳流所在的同一输出。

5.7 Audio Options

-aframes number (output)

设置要输出的音频帧数。这是 的过时别名 -frames:a,您应该使用它。

-ar[:stream_specifier] freq (input/output,per-stream)

设置音频采样频率。对于输出流,它默认设置为相应输入流的频率。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。

-aq q (output)

设置音频质量(特定于编解码器、VBR)。这是 -q:a 的别名。

-ac[:stream_specifier] channels (input/output,per-stream)

设置音频通道数。对于输出流,它默认设置为输入音频通道的数量。对于输入流,此选项仅对音频抓取设备和原始解复用器有意义,并映射到相应的解复用器选项。

-an (input/output)

作为输入选项,阻止文件的所有音频流被过滤或自动选择或映射到任何输出。请参阅-discard 单独禁用流的选项。

作为输出选项,禁用音频录制,即自动选择或映射任何音频流。如需完全手动控制,请参阅-map 选项。

-acodec codec (input/output)

设置音频编解码器。这是 的别名-codec:a

-sample_fmt[:stream_specifier] sample_fmt (output,per-stream)

设置音频样本格式。用于-sample_fmts获取支持的示例格式的列表。

-af filtergraph (output)

创建filtergraph指定的filtergraph并使用它来过滤流。

这是 的别名-filter:a,请参阅-filter 选项

5.8 Advanced Audio options

-atag fourcc/tag (output)

强制音频标签/fourcc。这是 的别名-tag:a

-absf bitstream_filter

已弃用,请参阅 -bsf

-guess_layout_max channels (input,per-stream)

如果某些输入通道布局未知,则仅尝试猜测它是否最多对应于指定数量的通道。例如,2 指示ffmpeg将 1 个通道识别为单声道,将 2 个通道识别为立体声,但不将 6 个通道识别为 5.1。默认设置是始终尝试猜测。使用 0 禁用所有猜测。

5.9 Subtitle options

-scodec codec (input/output)

设置字幕编解码器。这是 的别名-codec:s

-sn (input/output)

作为输入选项,阻止文件的所有字幕流被过滤或自动选择或映射到任何输出。请参阅-discard 单独禁用流的选项。

作为输出选项,禁用字幕录制,即自动选择或映射任何字幕流。如需完全手动控制,请参阅-map 选项。

-sbsf bitstream_filter

已弃用,请参阅 -bsf

5.10 Advanced Subtitle options

-fix_sub_duration

修复字幕持续时间。对于每个字幕,等待同一流中的下一个数据包并调整第一个数据包的持续时间以避免重叠。这对于某些字幕编解码器(尤其是 DVB 字幕)来说是必要的,因为原始数据包中的持续时间只是粗略估计,并且结尾实际上由空字幕帧标记。必要时未能使用此选项可能会导致持续时间过长或由于非单调时间戳而导致多路复用失败。

请注意,此选项将延迟所有数据的输出,直到解码下一个字幕包:它可能会大量增加内存消耗和延迟。

-canvas_size size

设置用于渲染字幕的画布的大小。

5.11 Advanced options

-map [-]input_file_id[:stream_specifier][?] | [linklabel] (output)

在输出文件中创建一个或多个流。此选项有两种形式用于指定数据源:第一种从某些输入文件中选择一个或多个流(用 指定),第二种从某些复杂的过滤器图(用或 指定) -i中获取输出。-filter_complex-filter_complex_script

在第一种形式中,为来自输入文件的每个流创建一个输出流,索引为input_file_id。如果给出了stream_specifier,则仅使用那些与说明符匹配的流( 有关stream_specifier语法,请参阅流说明符部分)。

流标识符之前的字符-创建“负”映射。它禁用已创建的映射中的匹配流。

流索引后面的尾随?将允许映射是可选的:如果映射不匹配任何流,则映射将被忽略而不是失败。请注意,如果使用无效的输入文件索引,映射仍然会失败;例如,如果地图引用了不存在的输入。

另一种[linklabel]形式将映射复杂过滤器图表的输出(请参阅-filter_complex选项)到输出文件。 linklabel必须对应于图中定义的输出链接标签。

可以多次指定此选项,每次都会向输出文件添加更多流。任何给定的输入流还可以被映射任意多次作为不同输出流的源,例如以便使用不同的编码选项和/或过滤器。流在输出中的创建顺序与-map命令行上给出的选项的顺序相同。

使用此选项会禁用此输出文件的默认映射。

例子:

map everything

将第一个输入文件中的所有流映射到输出

ffmpeg -i INPUT -map 0 output
select specific stream

如果第一个输入文件中有两个音频流,则这些流由0:00:1标识。您可以使用-map它来选择要放置在输出文件中的流。例如:

ffmpeg -i INPUT -map 0:1 out.wav

将映射第二个输入流输入到(单个)输出流输出.wav

create multiple streams

从输入文件中选择索引为 2 的流mov(由标识符0:2指定),以及来自输入的索引为 6 的流b.mov (由标识符1:6指定),并将它们复制到输出文件 输出.mov:

ffmpeg -i a.mov -i b.mov -c copy -map 0:2 -map 1:6 out.mov
create multiple streams 2

要从输入文件中选择所有视频和第三个音频流:

ffmpeg -i INPUT -map 0:v -map 0:a:2 OUTPUT
negative map

要映射除第二个音频之外的所有流,请使用负映射

ffmpeg -i INPUT -map 0 -map -0:a:1 OUTPUT
optional map

要从第一个输入映射视频和音频流,并使用尾随?,如果第一个输入中不存在音频流,则忽略音频映射:

ffmpeg -i INPUT -map 0:v -map 0:a? OUTPUT
map by language

选择英语音频流:

ffmpeg -i INPUT -map 0:m:language:eng OUTPUT
-ignore_unknown

如果尝试复制此类流,则忽略未知类型的输入流而不是失败。

-copy_unknown

允许复制未知类型的输入流,而不是在尝试复制此类流时失败。

-map_channel [input_file_id.stream_specifier.channel_id|-1][?][:output_file_id.stream_specifier]

此选项已弃用并将被删除。可用 盘式过滤器代替。在某些情况下,使用channelsplitchannelmapamerge过滤器的某种组合可能更容易 。

将音频通道从给定输入映射到输出。如果 output_file_id如果不设置stream_specifier,则音频通道将映射到所有音频流上。

使用“-1”代替 input_file_id流说明符channel_id将映射静音通道。

尾随?将允许map_channel是可选的:如果map_channel没有匹配任何通道,则map_channel将被忽略而不是失败。

例如,假设INPUT是立体声音频文件,您可以使用以下命令切换两个音频通道:

ffmpeg -i INPUT -map_channel 0.0.1 -map_channel 0.0.0 OUTPUT

如果您想将第一个通道静音并保留第二个通道:

ffmpeg -i INPUT -map_channel -1 -map_channel 0.0.1 OUTPUT

“-map_channel”选项的顺序指定输出流中通道的顺序。输出通道布局是根据映射的通道数量猜测的(如果有一个“-map_channel”则为单声道,如果有两个则为立体声,等等)。如果输入和输出通道布局不匹配(例如两个“-map_channel”选项和“-ac 6”),则将“-ac”与“-map_channel”组合使用可以更新通道增益级别。

您还可以将输入的每个通道提取到特定的输出;以下命令将INPUT音频流的两个通道(文件 0、流 0)提取到相应的OUTPUT_CH0OUTPUT_CH1输出:

ffmpeg -i INPUT -map_channel 0.0.0 OUTPUT_CH0 -map_channel 0.0.1 OUTPUT_CH1

以下示例将立体声输入的通道拆分为两个单独的流,并将它们放入同一输出文件中:

ffmpeg -i stereo.wav -map 0:0 -map 0:0 -map_channel 0.0.0:0.0 -map_channel 0.0.1:0.1 -y out.ogg

请注意,当前每个输出流只能包含来自单个输入流的通道;例如,您不能使用“-map_channel”来选择不同流中包含的多个输入音频通道(来自相同或不同的文件)并将它们合并到单个输出流中。因此,例如,当前不可能将两个单独的单声道流转换为单个立体声流。然而,将立体声流分成两个单通道单声道流是可能的。

如果您需要此功能,可能的解决方法是使用合并 过滤器。例如,如果您需要合并媒体(此处输入.mkv)将 2 个单声道音频流转换为一个立体声通道音频流(并保留视频流),您可以使用以下命令:

ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv

要从第一个输入映射前两个音频通道,并使用尾随?,如果第一个输入是单声道而不是立体声,则忽略音频通道映射:

ffmpeg -i INPUT -map_channel 0.0.0 -map_channel 0.0.1? OUTPUT
-map_metadata[:metadata_spec_out] infile[:metadata_spec_in] (output,per-metadata)

从infile设置下一个输出文件的元数据信息。请注意,这些是文件索引(从零开始),而不是文件名。可选的metadata_spec_in/out参数指定要复制的元数据。元数据说明符可以具有以下形式:

g

全局元数据,即适用于整个文件的元数据

s[:stream_spec]

每个流的元数据。Stream_spec是一个流说明符,如流说明符一章中所述。在输入元数据说明符中,复制第一个匹配的流。在输出元数据说明符中,所有匹配的流都被复制到。

c:chapter_index

每章元数据。Chapter_index是从零开始的章节索引。

p:program_index

每个程序的元数据。program_index是从零开始的程序索引。

如果省略元数据说明符,则默认为全局。

默认情况下,全局元数据从第一个输入文件复制,每个流和每个章节的元数据与流/章节一起复制。通过创建相关类型的任何映射来禁用这些默认映射。负文件索引可用于创建仅禁用自动复制的虚拟映射。

例如,将元数据从输入文件的第一个流复制到输出文件的全局元数据:

ffmpeg -i in.ogg -map_metadata 0:s:0 out.mp3

要执行相反的操作,即将全局元数据复制到所有音频流:

ffmpeg -i in.mkv -map_metadata:s:a 0:g out.mkv

请注意,在此示例中,simple0也适用,因为默认情况下假定全局元数据。

-map_chapters input_file_index (output)

将索引为input_file_index的输入文件中的章节复制到下一个输出文件。如果未指定章节映射,则从包含至少一个章节的第一个输入文件复制章节。使用负文件索引来禁用任何章节复制。

-benchmark (global)

在编码末尾显示基准测试信息。显示实际的系统和用户使用时间以及最大内存消耗。并非所有系统都支持最大内存消耗,如果不支持,通常会显示为 0。

-benchmark_all (global)

在编码期间显示基准测试信息。显示各个步骤(音频/视频编码/解码)中使用的实际时间、系统时间和用户时间。

-timelimit duration (global)

在 ffmpeg在 CPU 用户时间中 运行持续时间秒后退出。

-dump (global)

将每个输入数据包转储到 stderr。

-hex (global)

转储数据包时,也转储有效负载。

-readrate speed (input)

限制输入读取速度。

它的值是一个浮点正数,表示一秒挂钟时间内应摄取的媒体最大持续时间(以秒为单位)。默认值为零,表示对摄取速度没有强加限制。值1代表实时速度,相当于-re

主要用于模拟捕获设备或实时输入流(例如从文件读取时)。当输入是实际捕获设备或实时流时,不应使用较低的值,因为这可能会导致数据包丢失。

当输出数据包的流速度很重要时(例如实时流媒体),它非常有用。

-re (input)

以本机帧速率读取输入。这相当于设置-readrate 1

-readrate_initial_burst seconds

设置初始读取突发时间(以秒为单位),之后-re/-读取速率 将被强制执行。

-vsync parameter (global)
-fps_mode[:stream_specifier] parameter (output,per-stream)

设置视频同步方法/帧率模式。vsync 应用于所有输出视频流,但可以通过设置 fps_mode 覆盖流。vsync 已弃用,并将在将来删除。

出于兼容性原因,垂直同步的某些值可以指定为数字(在下表的括号中显示)。

passthrough (0)

每个帧及其时间戳从解复用器传递到复用器。

cfr (1)

帧将被复制和丢弃,以准确实现所请求的恒定帧速率。

vfr (2)

帧会连同其时间戳一起通过或丢弃,以防止 2 个帧具有相同的时间戳。

drop

作为直通,但会破坏所有时间戳,使复用器根据帧速率生成新的时间戳。

auto (-1)

根据复用器功能在 CFR 和 VFR 之间进行选择。这是默认方法。

请注意,在此之后,复用器可能会进一步修改时间戳。例如,如果格式选项避免负面的ts 已启用。

使用 -map 您可以选择应从哪个流中获取时间戳。您可以保持视频或音频不变,并将剩余的流同步到未更改的流。

-frame_drop_threshold parameter

丢帧阈值,指定视频帧在丢帧之前可以落后多少。在帧速率单位中,1.0 是一帧。默认值为-1.1。一种可能的用例是在时间戳有噪声的情况下避免帧丢失,或者在时间戳精确的情况下提高帧丢失精度。

-apad parameters (output,per-stream)

填充输出音频流。这与申请相同-af apad。Argument 是一串过滤器参数,组成与过滤器相同apad-shortest必须为此输出设置才能使选项生效。

-copyts

不处理输入时间戳,但保留它们的值而不尝试清理它们。特别是,不要删除初始开始时间偏移值。

请注意,根据垂直同步选项或特定复用器处理(例如,如果格式选项避免负面的ts 启用)即使选择此选项,输出时间戳也可能与输入时间戳不匹配。

-start_at_zero

当与复制品,移动输入时间戳,使它们从零开始。

这意味着使用eg-ss 50将使输出时间戳从50 秒开始,无论输入文件从哪个时间戳开始。

-copytb mode

指定流复制时如何设置编码器时基。 mode是一个整数数值,可以采用以下值之一:

1

使用多路分配器时基。

时基从相应的输入多路分配器复制到输出编码器。有时需要这样做,以避免在复制具有可变帧速率的视频流时出现非单调增加的时间戳。

0

使用解码器时基。

时基从相应的输入解码器复制到输出编码器。

-1

尝试自动做出选择,以生成合理的输出。

默认值为-1。

-enc_time_base[:stream_specifier] timebase (output,per-stream)

设置编码器时基。时基可以采用以下值之一:

0

根据媒体类型分配默认值。

对于视频 - 使用 1/帧速率,对于音频 - 使用 1/采样率。

demux

使用多路分配器中的时基。

filter

使用过滤图中的时基。

a positive number

使用提供的数字作为时基。

该字段可以提供为两个整数的比率(例如 1:24、1:48000)或十进制数(例如 0.04166、2.0833e-5)

默认值为 0。

-bitexact (input/output)

为(解)复用器和(解/编码)编码器启用 bitexact 模式

-shortest (output)

当最短输出流结束时完成编码。

请注意,此选项可能需要缓冲帧,这会引入额外的延迟。该延迟的最大量可以通过该 -shortest_buf_duration选项来控制。

-shortest_buf_duration duration (output)

-shortest当至少一个流是“稀疏”时(即帧之间具有较大间隙 - 这通常是字幕的情况),该选项可能需要缓冲潜在的大量数据 。

此选项控制缓冲帧的最大持续时间(以秒为单位)。较大的值可能允许-shortest选项产生更准确的结果,但会增加内存使用和延迟。

默认值为 10 秒。

-dts_delta_threshold threshold

时间戳不连续增量阈值,以十进制秒数表示。

此选项启用的时间戳不连续性校正仅适用于接受时间戳不连续性(启用该标志AV_FMT_DISCONT)的输入格式,例如 MPEG-TS 和 HLS,并且在使用该选项时自动禁用-copy_ts(除非检测到回绕)。

如果检测到绝对值大于阈值的时间戳不连续性,ffmpeg 将通过将当前 DTS 和 PTS 减少/增加相应的 delta 值来消除不连续性。

默认值为 10。

-dts_error_threshold threshold

时间戳错误增量阈值,以十进制秒数表示。

此选项启用的时间戳校正仅适用于不接受时间戳不连续性的输入格式( AV_FMT_DISCONT未启用该标志)。

如果检测到绝对值大于阈值的时间戳不连续性,ffmpeg将丢弃PTS/DTS时间戳值。

默认值是3600*30(30小时),这是任意选择的并且相当保守。

-muxdelay seconds (output)

设置最大解复用解码延迟。

-muxpreload seconds (output)

设置初始解复用解码延迟。

-streamid output-stream-index:new-value (output)

将新的stream-id值分配给输出流。应在其适用的输出文件名之前指定此选项。对于存在多个输出文件的情况,可以将streamid重新分配为不同的值。

例如,要将输出 mpegts 文件的流 0 PID 设置为 33,将流 1 PID 设置为 36:

ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
-bsf[:stream_specifier] bitstream_filters (output,per-stream)

将比特流过滤器应用于匹配的流。

bitstream_filters是比特流过滤器规范的逗号分隔列表。指定的比特流过滤器按照写入的顺序应用于编码数据包。每个比特流过滤器规范的形式为

filter[=optname0=optval0:optname1=optval1:...]

任何要成为选项值一部分的 ',=:' 字符都需要使用反斜杠进行转义。

使用该-bsfs选项获取比特流过滤器列表。

ffmpeg -i h264.mp4 -c:v copy -bsf:v h264_mp4toannexb -an out.h264
ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt
-tag[:stream_specifier] codec_tag (input/output,per-stream)

强制使用 tag/fourcc 来匹配流。

-timecode hh:mm:ssSEPff

指定写入的时间码。SEP为“:”(非丢包时间码)和“;” (或“.”)表示丢弃。

ffmpeg -i input.mpg -timecode 01:02:03.04 -r 30000/1001 -s ntsc output.mpg
-filter_complex filtergraph (global)

定义一个复杂的滤波器图,即具有任意数量的输入和/或输出的滤波器图。对于简单图(具有相同类型的一个输入和一个输出的图),请参阅-筛选选项。filtergraph是filtergraph的描述,如ffmpeg-filters手册的“Filtergraph语法”部分所述。

输入链接标签必须使用 [file_index:stream_specifier]语法引用输入流(即与-地图 用途)。如果stream_specifier匹配多个流,则将使用第一个流。未标记的输入将连接到匹配类型的第一个未使用的输入流。

输出链接标签引用为-地图。未标记的输出将添加到第一个输出文件中。

请注意,使用此选项可以仅使用 lavfi 源而不使用普通输入文件。

例如,将图像覆盖在视频上

ffmpeg -i video.mkv -i image.png -filter_complex '[0:v][1:v]overlay[out]' -map
'[out]' out.mkv

这里[0:v]指的是第一个输入文件中的第一个视频流,它链接到覆盖过滤器的第一个(主)输入。类似地,第二输入中的第一视频流链接到覆盖的第二(覆盖)输入。

假设每个输入文件中只有一个视频流,我们可以省略输入标签,所以上面等价于

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay[out]' -map
'[out]' out.mkv

此外,我们可以省略输出标签,过滤器图中的单个输出将自动添加到输出文件中,因此我们可以简单地编写

ffmpeg -i video.mkv -i image.png -filter_complex 'overlay' out.mkv

作为一个特殊的例外,您可以使用位图字幕流作为输入:它将转换为与文件中最大视频大小相同的视频,如果不存在视频,则转换为 720x576。请注意,这是一个实验性的临时解决方案。一旦 libavfilter 对字幕有适当的支持,它将被删除。

例如,要在以 MPEG-TS 格式存储的 DVB-T 录制之上硬编码字幕,将字幕延迟 1 秒:

ffmpeg -i input.ts -filter_complex \
  '[#0x2ef] setpts=PTS+1/TB [sub] ; [#0x2d0] [sub] overlay' \
  -sn -map '#0x2dc' output.mkv

(0x2d0、0x2dc 和 0x2ef 分别是视频、音频和字幕流的 MPEG-TS PID;0:0、0:3 和 0:7 也可以工作)

使用lavfi源生成5秒的纯红色视频color

ffmpeg -filter_complex 'color=c=red' -t 5 out.mkv
-filter_complex_threads nb_threads (global)

定义使用多少个线程来处理filter_complex图。与filter_threads类似,但仅用于-filter_complex图表。默认值是可用 CPU 的数量。

-lavfi filtergraph (global)

定义一个复杂的滤波器图,即具有任意数量的输入和/或输出的滤波器图。相当于-filter_complex

-filter_complex_script filename (global)

该选项类似于-filter_complex,唯一的区别是它的参数是要从中读取复杂过滤器图描述的文件的名称。

-accurate_seek (input)

此选项启用或禁用在输入文件中的精确搜索 -SS选项。默认启用,因此转码时查找准确。使用-noaccurate_seek禁用它,这可能很有用,例如在复制某些流并对其他流进行转码时。

-seek_timestamp (input)

此选项启用或禁用在输入文件中按时间戳进行查找 -SS选项。默认情况下它是禁用的。如果启用,则参数-SS option is considered an actual timestamp, and is not offset by the start time of the file. This matters only for files which do not start from timestamp 0, such as transport streams.

-thread_queue_size size (input/output)

For input, this option sets the maximum number of queued packets when reading from the file or device. With low latency / high rate live streams, packets may be discarded if they are not read in a timely manner; setting this value can force ffmpeg to use a separate input thread and read packets as soon as they arrive. By default ffmpeg only does this if multiple inputs are specified.

For output, this option specified the maximum number of packets that may be queued to each muxing thread.

-sdp_file file (global)

Print sdp information for an output stream to file. This allows dumping sdp information when at least one output isn’t an rtp stream. (Requires at least one of the output formats to be rtp).

-discard (input)

Allows discarding specific streams or frames from streams. Any input stream can be fully discarded, using value all whereas selective discarding of frames from a stream occurs at the demuxer and is not supported by all demuxers.

none

Discard no frame.

default

Default, which discards no frames.

noref

Discard all non-reference frames.

bidir

Discard all bidirectional frames.

nokey

Discard all frames excepts keyframes.

all

Discard all frames.

-abort_on flags (global)

Stop and abort on various conditions. The following flags are available:

empty_output

No packets were passed to the muxer, the output is empty.

empty_output_stream

No packets were passed to the muxer in some of the output streams.

-max_error_rate (global)

Set fraction of decoding frame failures across all inputs which when crossed ffmpeg will return exit code 69. Crossing this threshold does not terminate processing. Range is a floating-point number between 0 to 1. Default is 2/3.

-xerror (global)

Stop and exit on error

-max_muxing_queue_size packets (output,per-stream)

When transcoding audio and/or video streams, ffmpeg will not begin writing into the output until it has one packet for each such stream. While waiting for that to happen, packets for other streams are buffered. This option sets the size of this buffer, in packets, for the matching output stream.

The default value of this option should be high enough for most uses, so only touch this option if you are sure that you need it.

-muxing_queue_data_threshold bytes (output,per-stream)

This is a minimum threshold until which the muxing queue size is not taken into account. Defaults to 50 megabytes per stream, and is based on the overall size of packets passed to the muxer.

-auto_conversion_filters (global)

Enable automatically inserting format conversion filters in all filter graphs, including those defined by -vf, -af, -filter_complex and -lavfi. If filter format negotiation requires a conversion, the initialization of the filters will fail. Conversions can still be performed by inserting the relevant conversion filter (scale, aresample) in the graph. On by default, to explicitly disable it you need to specify -noauto_conversion_filters.

-bits_per_raw_sample[:stream_specifier] value (output,per-stream)

将给定输出流中每个原始样本的位数声明为 value。请注意,此选项设置提供给编码器/复用器的信息,它不会更改流以符合此值。设置与流属性不匹配的值可能会导致编码失败或输出文件无效。

-stats_enc_pre[:stream_specifier] path (output,per-stream)
-stats_enc_post[:stream_specifier] path (output,per-stream)
-stats_mux_pre[:stream_specifier] path (output,per-stream)

将有关匹配流的每帧编码信息写入path给定的文件中。

-stats_enc_pre在发送原始视频或音频帧进行编码之前写入有关原始视频或音频帧的信息,而-stats_enc_post当从编码器接收到编码数据包时,写入有关编码数据包的信息。 -stats_mux_pre在数据包即将发送到复用器时写入有关数据包的信息。每个帧或数据包都会在指定文件中生成一行。该行的格式由-stats_enc_pre_fmt/ -stats_enc_post_fmt/-stats_mux_pre_fmt

当多个流的统计数据写入单个文件时,对应于不同流的行将交错。这种交错的精确顺序没有指定,并且不能保证在程序的不同调用之间保持稳定,即使使用相同的选项也是如此。

-stats_enc_pre_fmt[:stream_specifier] format_spec (output,per-stream)
-stats_enc_post_fmt[:stream_specifier] format_spec (output,per-stream)
-stats_mux_pre_fmt[:stream_specifier] format_spec (output,per-stream)

指定用以下命令写入的行的格式-stats_enc_pre/ -stats_enc_post/-stats_mux_pre

format_spec是一个字符串,可能包含{fmt}形式的指令 。format_spec是反斜杠转义的 — 使用 \{、\} 和 \\ 分别将文字 {、} 或 \ 写入输出中。

fmt给出的指令可能是以下之一:

fidx

输出文件的索引。

sidx

文件中输出流的索引。

n

帧数。预编码:到目前为止发送到编码器的帧数。编码后:到目前为止从编码器接收到的数据包数量。复用器:到目前为止,提交给该流复用器的数据包数量。

ni

输入帧号。与该输出帧或数据包相对应的输入帧(即由解码器输出)的索引。-1(如果不可用)。

tb

时基,其中该帧/数据包的时间戳被表示为有理数num/den。请注意,编码器和复用器可能使用不同的时基。

tbi

ptsi的时基,作为有理数num/den当ptsi可用时可用 ,否则为0/1

pts

帧或数据包的表示时间戳(整数)。应乘以时基来计算演示时间。

ptsi

输入帧的呈现时间戳(参见ni),作为整数。应乘以tbi来计算演示时间。当不可用时,打印为 (2^63 - 1 = 9223372036854775807)。

t

帧或数据包的呈现时间,以十进制数表示。等于 pts乘以tb

ti

输入帧的呈现时间(参见ni),以十进制数表示。等于ptsi乘以tbi。不可用时打印为 inf。

dts (packet)

将数据包的时间戳解码为整数。应乘以时基来计算演示时间。

dt (packet)

帧或数据包的解码时间,以十进制数表示。等于 dts乘以tb

sn (frame,audio)

到目前为止发送到编码器的音频样本数。

samp (frame,audio)

帧中的音频样本数。

size (packet)

编码数据包的大小(以字节为单位)。

br (packet)

当前比特率(以每秒位数为单位)。仅后编码。

abr (packet)

到目前为止整个流的平均比特率,以每秒位数为单位,如果此时无法确定,则为 -1。仅后编码。

用数据包标记的指令只能与 -stats_enc_post_fmt-stats_mux_pre_fmt

带有框架标记的指令只能与 -stats_enc_pre_fmt

用音频标记的指令只能与音频流一起使用。

默认格式字符串为:

pre-encoding

{fidx} {sidx} {n} {t}

post-encoding

{fidx} {sidx} {n} {t}

将来,可能会将新项目添加到默认格式字符串的末尾。依赖格式保持完全相同的用户应手动指定。

请注意,写入同一文件的不同流的统计数据可能具有不同的格式。

5.12 Preset files

预设文件包含一系列选项=值对,每行一个,指定一系列选项,这在命令行上指定是很困难的。以井号(“#”)字符开头的行将被忽略并用于提供注释。检查预设FFmpeg 源代码树中的目录作为示例。

预设文件有两种类型:ffpreset 和avpreset 文件。

5.12.1 ffpreset 文件

vpreffpreset 文件用、aprespre和选项指定fpre。该fpre选项采用预设的文件名而不是预设名称作为输入,并且可用于任何类型的编解码器。对于vpreapre、 和 spre选项,预设文件中指定的选项将应用于当前选择的与预设选项类型相同的编解码器。

传递给vpreaprespre preset 选项的参数根据以下规则标识要使用的预设文件:

首先 ffmpeg在目录中搜索名为arg .ffpreset的文件$FFMPEG_DATADIR(如果设置),以及$HOME/.ffmpeg,并在配置时定义的 datadir 中(通常前缀/共享/ffmpeg)或在一个ff预设按照 win32 上的可执行文件的顺序放置文件夹。例如,如果参数是libvpx-1080p,它将搜索文件libvpx-1080p.ffpreset

如果没有找到这样的文件,那么 ffmpeg 将在上述目录中搜索名为 codec_name - arg .ffpreset 的文件,其中codec_name是将应用预设文件选项的编解码器的名称。例如,如果您选择视频编解码器并-vcodec libvpx使用-vpre 1080p,那么它将搜索该文件libvpx-1080p.ffpreset

5.12.2 av预设文件

avpreset 文件是用该pre选项指定的。它们的工作方式与 ffpreset 文件类似,但它们只允许编码器特定的选项。因此, 不能使用指定编码器的 选项=值对。

当指定该pre选项时,ffmpeg将在目录中查找后缀为.avpreset的文件$AVCONV_DATADIR(如果设置),以及 $HOME/.avconv,并在配置时定义的 datadir 中(通常 前缀/共享/ffmpeg), 以该顺序。

首先,ffmpeg在上述目录中搜索名为codec_name - arg .avpreset 的文件,其中codec_name是将应用预设文件选项的编解码器的名称。例如,如果您选择视频编解码器并-vcodec libvpx使用-pre 1080p,那么它将搜索该文件libvpx-1080p.avpreset

如果没有找到这样的文件,那么 ffmpeg 将在同一目录中 搜索名为arg .avpreset的文件 。

5.13 vstats file format

和选项可以生成包含有关所生成-vstats视频-vstats_file输出的统计信息的文件。

-vstats_version选项控制生成文件的格式版本。

版本1格式为:

frame= FRAME q= FRAME_QUALITY PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

版本2格式为:

out= OUT_FILE_INDEX st= OUT_FILE_STREAM_INDEX frame= FRAME_NUMBER q= FRAME_QUALITYf PSNR= PSNR f_size= FRAME_SIZE s_size= STREAM_SIZEkB time= TIMESTAMP br= BITRATEkbits/s avg_br= AVERAGE_BITRATEkbits/s

每个key对应的value说明如下:

avg_br

平均比特率以 Kbits/s 表示

br

比特率以 Kbits/s 表示

frame

编码帧数

out

输出文件索引

PSNR

峰值信噪比

q

框架质量

f_size

编码数据包大小以字节数表示

s_size

流大小以 KiB 表示

st

输出文件流索引

time

数据包的时间

type

图片类型

另请参阅-stats_enc 选项以了解显示编码统计信息的替代方法。

6 示例

6.1 Video and Audio grabbing

如果指定输入格式和设备,那么 ffmpeg 可以直接抓取视频和音频。

ffmpeg -f oss -i /dev/dsp -f video4linux2 -i /dev/video0 /tmp/out.mpg

或者使用 ALSA 音频源(单声道输入,卡 ID 1)而不是 OSS:

ffmpeg -f alsa -ac 1 -i hw:1 -f video4linux2 -i /dev/video0 /tmp/out.mpg

请注意,在使用任何电视观看器(例如 Gerd Knorr 的xawtv)启动 ffmpeg 之前,您必须激活正确的视频源和频道。您还必须使用标准混音器正确设置音频录制级别。

6.2 X11 grabbing

使用 ffmpeg 抓取 X11 显示

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0 /tmp/out.mpg

0.0.0 是 X11 服务器的 display.screen 编号,与 DISPLAY 环境变量相同。

ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg

0.0.0 是 X11 服务器的 display.screen 编号,与 DISPLAY 环境变量相同。10 是抓取的 x 偏移量,20 是 y 偏移量。

6.3 Video and Audio file format conversion

任何支持的文件格式和协议都可以作为 ffmpeg 的输入:

例子:

  • 您可以使用 YUV 文件作为输入:
    ffmpeg -i /tmp/test%d.Y /tmp/out.mpg
    

    它将使用以下文件:

    /tmp/test0.Y, /tmp/test0.U, /tmp/test0.V,
    /tmp/test1.Y, /tmp/test1.U, /tmp/test1.V, etc...
    

    Y 文件使用 U 和 V 文件分辨率的两倍。它们是原始文件,没有标题。它们可以由所有合适的视频解码器生成。您必须使用指定图像的大小-s如果 ffmpeg 无法猜测它,则选项。

  • 您可以从原始 YUV420P 文件输入:
    ffmpeg -i /tmp/test.yuv /tmp/out.avi
    

    test.yuv 是包含原始 YUV 平面数据的文件。每帧由 Y 平面及其后的 U 和 V 平面组成,垂直和水平分辨率均为一半。

  • 您可以输出到原始 YUV420P 文件:
    ffmpeg -i mydivx.avi hugefile.yuv
    
  • 您可以设置多个输入文件和输出文件:
    ffmpeg -i /tmp/a.wav -s 640x480 -i /tmp/a.yuv /tmp/a.mpg
    

    将音频文件a.wav和原始YUV视频文件a.yuv转换为MPEG文件a.mpg。

  • 您还可以同时进行音频和视频转换:
    ffmpeg -i /tmp/a.wav -ar 22050 /tmp/a.mp2
    

    以 22050 Hz 采样率将 a.wav 转换为 MPEG 音频。

  • 您可以同时编码为多种格式并定义从输入流到输出流的映射:
    ffmpeg -i /tmp/a.wav -map 0:a -b:a 64k /tmp/a.mp2 -map 0:a -b:a 128k /tmp/b.mp2
    

    将 a.wav 转换为 64 kbits 的 a.mp2 和 128 kbits 的 b.mp2。'-map file:index' 按照输出流定义的顺序指定每个输出流使用哪个输入流。

  • 您可以对解密的 VOB 进行转码:
    ffmpeg -i snatch_1.vob -f avi -c:v mpeg4 -b:v 800k -g 300 -bf 2 -c:a libmp3lame -b:a 128k snatch.avi
    

    这是一个典型的 DVD 翻录示例;输入是 VOB 文件,输出是包含 MPEG-4 视频和 MP3 音频的 AVI 文件。请注意,在此命令中我们使用 B 帧,因此 MPEG-4 流与 DivX5 兼容,GOP 大小为 300,这意味着对于 29.97fps 输入视频,每 10 秒一个内帧。此外,音频流是 MP3 编码的,因此您需要通过传递--enable-libmp3lame配置来启用 LAME 支持。该映射对于 DVD 转码以获得所需的音频语言特别有用。

    注意:要查看支持的输入格式,请使用ffmpeg -demuxers

  • 您可以从视频中提取图像,或从许多图像创建视频:

    从视频中提取图像:

    ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
    

    这将从视频中每秒提取一个视频帧,并将其输出到名为foo-001.jpeg,foo-002.jpeg等。图像将重新缩放以适应新的宽x高值。

    如果只想提取有限数量的帧,可以将上述命令与-frames:v-t选项结合使用,或者与 -ss 结合使用,从某个时间点开始提取。

    要从许多图像创建视频:

    ffmpeg -f image2 -framerate 12 -i foo-%03d.jpeg -s WxH foo.avi
    

    该语法foo-%03d.jpeg指定使用由三位数字补零组成的十进制数来表示序列号。它与 C printf 函数支持的语法相同,但只有接受普通整数的格式才适用。

    导入图像序列时,-i 还支持通过选择 image2 特定-pattern_type glob选项在内部扩展类似 shell 的通配符模式(通配符)。

    例如,要从与 glob 模式匹配的文件名创建视频 foo-*.jpeg

    ffmpeg -f image2 -pattern_type glob -framerate 12 -i 'foo-*.jpeg' -s WxH foo.avi
    
  • 您可以在输出中放置许多相同类型的流:
    ffmpeg -i test1.avi -i test2.avi -map 1:1 -map 1:0 -map 0:1 -map 0:0 -c copy -y test12.nut
    

    生成的输出文件test12.nut将按相反顺序包含输入文件中的前四个流。

  • 强制 CBR 视频输出:
    ffmpeg -i myfile.avi -b 4000k -minrate 4000k -maxrate 4000k -bufsize 1835k out.m2v
    
  • 四个选项 lmin、lmax、mblmin 和 mblmax 使用“lambda”单位,但您可以使用 QP2LAMBDA 常量轻松从“q”单位转换:
    ffmpeg -i src.ext -lmax 21*QP2LAMBDA dst.ext
    

7 语法

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

7.1 Quoting and escaping

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

  • ''' 和 '\' 是特殊字符(分别用于引用和转义)。除了它们之外,可能还有其他特殊字符,具体取决于使用转义和引用的特定语法。
  • 特殊字符通过在其前面添加 ' 进行转义\'。
  • ' 之间包含的所有字符' 按字面意思包含在已解析的字符串中。引号字符 ''' 本身不能被引用,因此您可能需要关闭引用并转义它。
  • 除非转义或引用,否则前导和尾随空格将从解析的字符串中删除。

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

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

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

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

7.2 Date

可接受的语法是:

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

如果该值为“now”,则需要当前时间。

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

7.3 Time duration

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

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

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

或者

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

S表示秒数,带有可选的小数部分 m。可选的文字后缀 's','多发性硬化症' 或者 '我们' 表示将该值分别解释为秒、毫秒或微秒。

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

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

7.4 Video size

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

可以识别以下缩写:

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

7.5 Video rate

指定视频的帧速率,表示为每秒生成的帧数。它必须是格式为 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

7.6 Ratio

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

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

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

7.7 Color

它可以是如下定义的颜色名称(不区分大小写的匹配)或序列 [0x|#]RRGGBB[AA],可能后跟 @ 和表示 alpha 分量的字符串。

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

字符串 '随机的' 将产生随机颜色。

可以识别以下颜色名称:

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

0xDCDCCDC

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

7.8 Channel Layout

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

各个频道由 ID 标识,如下表所示:

FL

左前

FR

右前方

FC

前中心

LFE

低频

BL

左后侧

BR

右后

FLC

前偏左

FRC

前偏右

BC

后中心

SL

左侧

SR

右侧

TC

顶部中心

TFL

左前上方

TFC

顶部前中心

TFR

右前上方

TBL

左上后侧

TBC

上后中心

TBR

右上后侧

DL

向左缩混

DR

右缩混

WL

左宽

WR

右宽

SDL

环绕直接左

SDR

直接右环绕

LFE2

低频2

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

mono

FC

stereo

FL+FR

2.1

FL+FR+LFE

3.0

FL+FR+FC

3.0(back)

FL+FR+BC

4.0

FL+FR+FC+BC

quad

FL+FR+BL+BR

quad(side)

FL+FR+SL+SR

3.1

FL+FR+FC+LFE

5.0

FL+FR+FC+BL+BR

5.0(side)

FL+FR+FC+SL+SR

4.1

FL+FR+FC+LFE+BC

5.1

FL+FR+FC+LFE+BL+BR

5.1(side)

FL+FR+FC+LFE+SL+SR

6.0

FL+FR+FC+BC+SL+SR

6.0(front)

FL+FR+FLC+FRC+SL+SR

3.1.2

FL+FR+FC+LFE+TFL+TFR

hexagonal

FL+FR+FC+BL+BR+BC

6.1

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

6.1

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

6.1(front)

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

7.0

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

7.0(front)

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

7.1

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

7.1(wide)

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

7.1(wide-side)

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

5.1.2

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

octagonal

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

cube

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

5.1.4

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

7.1.2

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

7.1.4

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

7.2.3

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

9.1.4

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

hexadecagonal

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

downmix

DL+DR

22.2

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

自定义通道布局可以指定为一系列术语,用“+”分隔。每个术语可以是:

  • 单个频道的名称(例如'FL','FR','FC','低频效果”等),每个选项都可以在“@”之后包含自定义名称(例如“FL@左','FR@右','FC@中心','LFE@低频', ETC。)

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

  • 单个频道的名称(例如'FL','FR','FC','低频效果', ETC。)
  • 标准通道布局的名称(例如“单核细胞增多症','立体声','4.0','四边形','5.0', ETC。)
  • 多个通道,以十进制表示,后跟“c”,生成该通道数的默认通道布局(请参阅函数 av_channel_layout_default)。请注意,并非所有通道数都有默认布局。
  • 多个通道(十进制),后跟“C”,产生具有指定通道数的未知通道布局。请注意,并非所有通道布局规范字符串都支持未知通道布局。
  • 通道布局掩码,以“0x”开头的十六进制(请参阅 AV_CH_*中的宏libavutil/channel_layout.h

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

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

8 表达评估

当评估算术表达式时,FFmpeg 使用内部公式评估器,通过libavutil/eval.h 界面。

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

两个表达式expr1expr2可以组合形成另一个表达式“ expr1 ; expr2 ”。 expr1expr2依次计算,新表达式的计算结果为expr2的值。

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

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

可以使用以下功能:

abs(x)

计算x的绝对值。

acos(x)

计算x的反余弦。

asin(x)

计算x的反正弦。

atan(x)

计算x的反正切。

atan2(x, y)

计算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)

返回介于minmax之间的x值。

cos(x)

计算x的余弦。

cosh(x)

计算x的双曲余弦。

eq(x, y)

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

exp(x)

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

floor(expr)

将表达式expr的值向下舍入到最接近的整数。例如,“下限(-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(var)

使用数字var加载内部变量的值 ,该值之前使用 st( var , expr ) 存储。该函数返回加载的值。

lerp(x, y, z)

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

log(x)

计算x的自然对数。

lt(x, y)

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

lte(x, y)

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

max(x, y)

返回xy之间的最大值。

min(x, y)

返回xy之间的最小值。

mod(x, y)

计算x除以y的余数。

not(expr)

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

pow(x, y)

计算x提升y的幂,相当于“( x )^( y )”。

print(t)
print(t, l)

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

打印 t 和日志级别 l

random(x)

返回 0.0 到 1.0 之间的伪随机值。x是用于保存种子/状态的内部变量的索引。

root(expr, max)

查找一个输入值,其参数ld(0)的expr表示的函数在区间 0.. max中为 0 。

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

ld(0)用于表示函数输入值,这意味着给定的表达式将使用表达式可以访问的各种输入值进行多次计算 ld(0)。当表达式计算结果为 0 时,将返回相应的输入值。

round(expr)

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

sgn(x)

计算x的符号。

sin(x)

计算x的正弦。

sinh(x)

计算x的双曲正弦。

sqrt(expr)

计算expr的平方根。这相当于“( expr )^.5”。

squish(x)

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

st(var, expr)

将表达式expr的值存储在内部变量中。var指定存储值的变量号,范围是 0 到 9。函数返回内部变量中存储的值。请注意,变量当前不在表达式之间共享。

tan(x)

计算x的正切。

tanh(x)

计算x的双曲正切。

taylor(expr, x)
taylor(expr, x, id)

给定一个表示函数在 0 处的阶导数的 表达式,计算x处的泰勒级数。ld(id)

当级数不收敛时,结果是不确定的。

ld(id)用于表示expr中的导数阶,这意味着给定的表达式将使用表达式可以访问的各种输入值进行多次计算 ld(id)。如果未指定 id ,则假定为 0。

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

time(0)

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

trunc(expr)

将表达式expr的值朝零舍入到最接近的整数。例如,“trunc(-1​​.5)”为“-1.0”。

while(cond, expr)

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

以下常量可用:

PI

单位圆盘面积,约为 3.14

E

exp(1)(欧拉数),大约 2.718

PHI

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

假设如果表达式具有非零值,则该表达式被视为“真”,请注意:

*工作原理类似于 AND

+工作原理类似于或

例如构造:

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

9 种编解码器选项

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

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

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

支持的选项列表如下:

b integer (encoding,audio,video)

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

ab integer (encoding,audio)

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

bt integer (encoding,video)

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

flags flags (decoding/encoding,audio,video,subtitles)

设置通用标志。

可能的值:

mv4

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

qpel

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

loop

使用环路滤波器。

qscale

使用固定的 qscale。

pass1

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

pass2

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

gray

仅解码/编码灰度。

psnr

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

truncated

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

drop_changed

不要输出参数与流中第一个解码帧不同的帧。丢帧时会返回错误 AVERROR_INPUT_CHANGED。

ildct

使用隔行 DCT。

low_delay

强制低延迟。

global_header

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

bitexact

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

aic

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

ilme

应用隔行运动估计。

cgop

使用封闭的 gop。

output_corrupt

甚至输出可能损坏的帧。

time_base rational number

设置编解码器时基。

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

g integer (encoding,video)

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

ar integer (decoding/encoding,audio)

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

ac integer (decoding/encoding,audio)

设置音频通道数。

cutoff integer (encoding,audio)

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

frame_size integer (encoding,audio)

设置音频帧大小。

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

frame_number integer

设置帧数。

delay integer
qcomp float (encoding,video)

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

qblur float (encoding,video)

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

qmin integer (encoding,video)

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

qmax integer (encoding,video)

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

qdiff integer (encoding,video)

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

bf integer (encoding,video)

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

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

默认值为 0。

b_qfactor float (encoding,video)

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

codec_tag integer
bug flags (decoding,video)

解决方法无法自动检测编码器错误。

可能的值:

autodetect
xvid_ilace

Xvid 交错错误(如果 fourcc==XVIX 则自动检测)

ump4

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

no_padding

填充错误(自动检测)

amv
qpel_chroma
std_qpel

旧标准 qpel(根据 fourcc/版本自动检测)

qpel_chroma2
direct_blocksize

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

edge

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

hpel_chroma
dc_clip
ms

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

trunc

截断帧

strict integer (decoding/encoding,audio,video)

指定如何严格遵守标准。

可能的值:

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

b_qoffset float (encoding,video)

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

err_detect flags (decoding,audio,video)

设置错误检测标志。

可能的值:

crccheck

验证嵌入的 CRC

bitstream

检测比特流规范偏差

buffer

检测不正确的比特流长度

explode

检测到小错误时中止解码

ignore_err

忽略解码错误,并继续解码。如果您想分析视频的内容并因此希望无论如何都可以解码所有内容,这非常有用。如果出现错误,此选项将不会产生令人赏心悦目的视频。

careful

考虑那些违反规范并且在野外未被视为错误的事情

compliant

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

aggressive

考虑一个理智的编码器不应该做的事情作为错误

has_b_frames integer
block_align integer
rc_override_count integer
maxrate integer (encoding,audio,video)

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

minrate integer (encoding,audio,video)

设置最小比特率容限(以位/秒为单位)。在设置 CBR 编码时最有用。否则就没什么用了。

bufsize integer (encoding,audio,video)

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

i_qfactor float (encoding,video)

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

i_qoffset float (encoding,video)

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

dct integer (encoding,video)

设置DCT算法。

可能的值:

auto

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

fastint

快速整数

int

精确整数

mmx
altivec
faan

浮点 AAN DCT

lumi_mask float (encoding,video)

明亮区域的压缩强度比中等区域的压缩强度要大。

tcplx_mask float (encoding,video)

设置时间复杂度掩码。

scplx_mask float (encoding,video)

设置空间复杂性掩蔽。

p_mask float (encoding,video)

设置帧间屏蔽。

dark_mask float (encoding,video)

比中等区域更强烈地压缩黑暗区域。

idct integer (decoding/encoding,video)

选择 IDCT 实施。

可能的值:

auto
int
simple
simplemmx
simpleauto

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

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点 AAN IDCT

slice_count integer
ec flags (decoding,video)

设置错误隐藏策略。

可能的值:

guess_mvs

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

deblock

对损坏的 MB 使用强解块滤波器

favor_inter

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

bits_per_coded_sample integer
aspect rational number (encoding,video)

设置样本纵横比。

sar rational number (encoding,video)

设置样本纵横比。方面的别名。

debug flags (decoding/encoding,audio,video,subtitles)

打印具体的调试信息。

可能的值:

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 (encoding,video)

设置完整的像素比较功能。

可能的值:

sad

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

sse

误差平方和

satd

绝对 Hadamard 变换差值之和

dct

DCT 变换绝对差值之和

psnr

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

bit

块所需的位数

rd

率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

噪声保留平方差和

w53

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

w97

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

dctmax
chroma
subcmp integer (encoding,video)

设置子像素比较功能。

可能的值:

sad

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

sse

误差平方和

satd

绝对 Hadamard 变换差值之和

dct

DCT 变换绝对差值之和

psnr

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

bit

块所需的位数

rd

率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

噪声保留平方差和

w53

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

w97

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

dctmax
chroma
mbcmp integer (encoding,video)

设置宏块比较功能。

可能的值:

sad

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

sse

误差平方和

satd

绝对 Hadamard 变换差值之和

dct

DCT 变换绝对差值之和

psnr

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

bit

块所需的位数

rd

率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

噪声保留平方差和

w53

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

w97

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

dctmax
chroma
ildctcmp integer (encoding,video)

设置隔行DCT比较功能。

可能的值:

sad

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

sse

误差平方和

satd

绝对 Hadamard 变换差值之和

dct

DCT 变换绝对差值之和

psnr

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

bit

块所需的位数

rd

率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

噪声保留平方差和

w53

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

w97

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

dctmax
chroma
dia_size integer (encoding,video)

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

(1024, INT_MAX)

全运动估计(最慢)

(768, 1024]

嗯运动估计

(512, 768]

六角运动估计

(256, 512]

l2s 菱形运动估计

[2,256]

var 菱形运动估计

(-1, 2)

小菱形运动估计

-1

有趣的钻石运动估计

(INT_MIN, -1)

sab钻石运动估计

last_pred integer (encoding,video)

设置前一帧的运动预测变量的数量。

precmp integer (encoding,video)

设置预运动估计比较功能。

可能的值:

sad

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

sse

误差平方和

satd

绝对 Hadamard 变换差值之和

dct

DCT 变换绝对差值之和

psnr

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

bit

块所需的位数

rd

率失真最佳,慢

zero

0

vsad

绝对垂直差之和

vsse

垂直差平方和

nsse

噪声保留平方差和

w53

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

w97

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

dctmax
chroma
pre_dia_size integer (encoding,video)

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

subq integer (encoding,video)

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

me_range integer (encoding,video)

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

global_quality integer (encoding,audio,video)
slice_flags integer
mbd integer (encoding,video)

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

可能的值:

simple

使用 mbcmp(默认)

bits

使用最少的位

rd

使用最佳率失真

rc_init_occupancy integer (encoding,video)

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

flags2 flags (decoding/encoding,audio,video,subtitles)

可能的值:

fast

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

noout

跳过比特流编码。

ignorecrop

忽略来自 sps 的裁剪信息。

local_header

将全局标题放置在每个关键帧上,而不是放在额外数据中。

chunks

帧数据可能被分成多个块。

showall

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

export_mvs

将运动矢量导出到帧侧数据(请参阅 参考资料AV_FRAME_DATA_MOTION_VECTORS)以了解支持它的编解码器。也可以看看文档/示例/export_mvs.c

skip_manual

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

ass_ro_flush_noop

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

icc_profiles

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

export_side_data flags (decoding/encoding,audio,video,subtitles)

可能的值:

mvs

将运动矢量导出到帧侧数据(请参阅 参考资料AV_FRAME_DATA_MOTION_VECTORS)以了解支持它的编解码器。也可以看看文档/示例/export_mvs.c

prft

将编码器生产者参考时间导出到数据包侧数据中(请参阅AV_PKT_DATA_PRFT参考资料)以了解支持它的编解码器。

venc_params

通过帧端数据导出视频编码参数(请参阅 参考资料AV_FRAME_DATA_VIDEO_ENC_PARAMS)以了解支持它的编解码器。目前有 H.264 和 VP9。

film_grain

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

threads integer (decoding/encoding,video)

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

可能的值:

auto, 0

自动选择要设置的线程数

默认值为 '汽车'。

dc integer (encoding,video)

设置intra_dc_ precision。

nssew integer (encoding,video)

设置 nsse 权重。

skip_top integer (decoding,video)

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

skip_bottom integer (decoding,video)

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

profile integer (encoding,audio,video)

设置编码器编解码器配置文件。默认值为 '未知'。编码器特定配置文件记录在相关编码器文档中。

level integer (encoding,audio,video)

设置编码器电平。此级别取决于特定的编解码器,并且可能对应于配置文件级别。它默认设置为 '未知'。

可能的值:

unknown
lowres integer (decoding,audio,video)

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

mblmin integer (encoding,video)

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

mblmax integer (encoding,video)

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

skip_loop_filter integer (decoding,video)
skip_idct integer (decoding,video)
skip_frame integer (decoding,video)

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

跳过循环过滤器跳过帧循环过滤,跳过IDCT 跳帧 IDCT/反量化,跳帧跳过解码。

可能的值:

none

不丢弃任何框架。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

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

nointra

丢弃除 I 帧之外的所有帧。

all

丢弃所有帧。

默认值为 '默认'。

bidir_refine integer (encoding,video)

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

keyint_min integer (encoding,video)

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

refs integer (encoding,video)

设置参考帧以考虑运动补偿。

trellis integer (encoding,audio,video)

设置率失真最佳量化。

mv0_threshold integer (encoding,video)
compression_level integer (encoding,audio,video)
bits_per_raw_sample integer
channel_layout integer (decoding/encoding,audio)

可能的值:

request_channel_layout integer (decoding,audio)

可能的值:

rc_max_vbv_use float (encoding,video)
rc_min_vbv_use float (encoding,video)
color_primaries integer (decoding/encoding,video)

可能的值:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470 BG

smpte170m

SMPTE 170M

smpte240m

SMPTE 240M

film

电影

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

color_trc integer (decoding/encoding,video)

可能的值:

bt709

BT.709

gamma22

BT.470M

gamma28

BT.470 BG

smpte170m

SMPTE 170M

smpte240m

SMPTE 240M

linear

线性

log
log100

日志

log_sqrt
log316

对数平方根

iec61966_2_4
iec61966-2-4

IEC 61966-2-4

bt1361
bt1361e

BT.1361

iec61966_2_1
iec61966-2-1

IEC 61966-2-1

bt2020_10
bt2020_10bit

BT.2020 - 10 位

bt2020_12
bt2020_12bit

BT.2020 - 12 位

smpte2084

SMPTE ST 2084

smpte428
smpte428_1

SMPTE ST 428-1

arib-std-b67

ARIB STD-B67

colorspace integer (decoding/encoding,video)

可能的值:

rgb

RGB

bt709

BT.709

fcc

美国联邦通信委员会

bt470bg

BT.470 BG

smpte170m

SMPTE 170M

smpte240m

SMPTE 240M

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

心电图

color_range integer (decoding/encoding,video)

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

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

chroma_sample_location integer (decoding/encoding,video)

可能的值:

left
center
topleft
top
bottomleft
bottom
log_level_offset integer

设置日志级别偏移量。

slices integer (encoding,video)

并行编码中使用的切片数量。

thread_type flags (decoding/encoding,video)

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

用于 '框架' 将增加每个线程一帧的解码延迟,因此无法提供未来帧的客户端不应使用它。

可能的值:

slice

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

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

frame

一次解码多于一帧。

默认值为 '切片+帧'。

audio_service_type integer (encoding,audio)

设置音频服务类型。

可能的值:

ma

主要音频服务

ef

效果

vi

视障人士

hi

听力障碍

di

对话

co

评论

em

紧急情况

vo

画外音

ka

卡拉OK

request_sample_fmt sample_fmt (decoding,audio)

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

pkt_timebase rational number
sub_charenc encoding (decoding,subtitles)

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

field_order field_order (video)

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

progressive

渐进式视频

tt

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

bb

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

tb

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

bt

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

skip_alpha bool (decoding,video)

设置为 1 以禁用处理 Alpha(透明度)。这就像'灰色的' 中的标志旗帜跳过色度信息而不是 alpha 的选项。默认值为 0。

codec_whitelist list (input)

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

dump_separator string (input)

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

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg
max_pixels integer (decoding/encoding,video)

每个图像的最大像素数。该值可用于避免由于大图像导致的内存不足故障。

apply_cropping bool (decoding,video)

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

10 个解码器

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

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

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

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

11 个视频解码器

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

11.1 av1

AOMedia 视频 1 (AV1) 解码器。

11.1.1 选项

operating_point

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

11.2 rawvideo

原始视频解码器。

该解码器对原始视频流进行解码。

11.2.1 选项

top top_field_first

指定输入视频的假定字段类型。

-1

视频被假定为渐进式(默认)

0

假设底场优先

1

假设顶场优先

11.3 libdav1d

dav1d AV1 解码器。

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

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

11.4 libdavs2

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

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

11.5 libuavs3d

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

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

11.5.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

11.6 QSV Decoders

英特尔 QuickSync 视频解码器系列(VC1、MPEG-2、H.264、HEVC、JPEG/MJPEG、VP8、VP9、AV1)。

11.6.1 常用选项

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

async_depth

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

gpu_copy

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

default
on
off

11.6.2 HEVC 选项

hevc_qsv 的额外选项。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

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

11.7 v210

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

11.7.1 选项

custom_stride

设置 v210 数据的行大小(以字节为单位)。默认值为 0(自动检测)。您可以对无步幅 v210 使用特殊的 -1 值,如 BOXX 文件中所示。

12 个音频解码器

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

12.1 ac3

AC-3 音频解码器。

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

12.1.1 AC-3 解码器选项

-drc_scale value

动态范围比例因子。应用于 AC-3 流的动态范围值的系数。该因子以指数方式应用。默认值为 1。有 3 个值得注意的比例因子范围:

drc_scale == 0

刚果民主共和国禁用。产生全频音频。

0 < drc_scale <= 1

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

drc_scale > 1

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

12.2 flac

FLAC 音频解码器。

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

12.2.1 FLAC 解码器选项

-use_buggy_lpc

lavc FLAC 编码器用于生成具有高 lpc 值(如默认值)的有问题的流。此选项使得可以通过使用 lavc 旧的有缺陷的 lpc 逻辑进行解码来正确解码此类流。

12.3 ffwavesynth

内波合成器。

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

12.4 libcelt

libcelt 解码器包装器。

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

12.5 libgsm

libgsm 解码器包装器。

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

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

12.6 libilbc

libilbc 解码器包装器。

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

12.6.1 选项

libilbc 包装器支持以下选项。

enhance

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

12.7 libopencore-amrnb

libopencore-amrnb 解码器包装器。

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

存在 AMR-NB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-NB。

12.8 libopencore-amrwb

libopencore-amrwb 解码器包装器。

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

存在 AMR-WB 的 FFmpeg 本机解码器,因此用户无需此库即可解码 AMR-WB。

12.9 libopus

libopus 解码器包装器。

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

Opus 存在 FFmpeg 本机解码器,因此用户无需此库即可解码 Opus。

13个字幕解码器

13.1 libaribb24

ARIB STD-B24 字幕解码器。

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

13.1.1 libaribb24 解码器选项

-aribb24-base-path path

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

默认情况下取消设置。

-aribb24-skip-ruby-text boolean

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

默认启用。

13.2 libaribcaption

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

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

需要在配置过程中存在 libaribcaption 标头和库 ( https://github.com/xqq/libaribcaption )。您需要使用 显式配置构建--enable-libaribcaption。如果同时启用libaribb24libaribcaption ,则libaribcaption 解码器优先。

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

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

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

-ass_single_rect boolean

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

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

默认为false

-replace_drcs boolean

指定是否将替换的 DRCS 字符呈现为 Unicode 字符。

默认值为true

-replace_msz_ascii boolean

指定是否用半角字母数字替换 MSZ(中号;半角)全角字母数字。

默认值为true

-replace_msz_japanese boolean

指定是否将某些 MSZ(中号;半角)全角日语特殊字符替换为半角字符。

默认值为true

-replace_msz_glyph boolean

指定是否用半角字形替换 MSZ(中号;半角)字符(如果字体支持)。此选项适用于具有 Adob​​e-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 拉伸或收缩为指定的大小。

13.2.2 libaribcaption解码器使用示例

通过工具显示带有ARIB字幕的MPEG-TS文件ffplay

ffplay -sub_type bitmap MPEG.TS

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

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

13.3 dvbsub

13.3.1 选项

compute_clut
-2

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

-1

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

0

从不计算 CLUT

1

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

dvb_substream

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

13.4 dvdsub

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

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

13.5 libzvbi-teletext

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

13.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_透明未设置,它仅影响开始框和结束框之间的字符,通常是字幕。默认值为 0,如果 txt_透明已设置,否则为 255。

14 个编码器

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

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

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

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

15 个音频编码器

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

15.1 aac

高级音频编码 (AAC) 编码器。

该编码器是默认的 AAC 编码器,本地实现到 FFmpeg 中。

15.1.1 选项

b

设置比特率(以位/秒为单位)。设置此项会自动激活恒定比特率 (CBR) 模式。如果未指定此选项,则将其设置为 128kbps。

q

设置可变比特率 (VBR) 模式的质量。ffmpeg该选项仅在使用命令行工具时有效。对于库界面用户,请使用 全局质量

cutoff

设置截止频率。如果未指定,将允许编码器动态调整截止以提高低比特率的清晰度。

aac_coder

设置AAC编码器的编码方式。可能的值:

twoloop

两种循环搜索(TLS)方法。这是默认方法。

该方法首先根据频带阈值设置量化器,然后尝试通过从所有量化器中添加或减去特定值并稍微调整一些单独的量化器来找到最佳组合。将根据是否调整自身aac_is,aac_msaac_pns 已启用。

anmr

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

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

fast

恒定量化器方法。

使用更便宜的双循环算法版本,不会尝试进行许多巧妙的调整。低比特率(低于 64kbps)时情况更糟,但较高比特率时更好、更快。

aac_ms

设置中/侧编码模式。默认值“auto”将自动使用 M/S 和频段,这将受益于此类编码。可以使用“enable”值对所有频段强制启用,这主要用于调试或使用“disable”禁用。

aac_is

设置强度立体声编码工具的使用。默认情况下,它是启用的,如果有好处的话,它会自动切换相似的立体声频段对的 IS。可以通过将值设置为“disable”来禁用调试。

aac_pns

在解码过程中使用感知噪声替代,用难以察觉的白噪声替换低熵高频段。默认情况下,它是启用的,但可以使用“disable”将其禁用以进行调试。

aac_tns

允许使用跨越高频带的多抽头 FIR 滤波器,以隐藏编码过程中的量化噪声,并由解码器恢复。除了减少高频段中令人不快的伪影之外,这还减少了高频段的熵,并允许中低频段使用更多的比特。默认情况下它是启用的,但可以通过将选项设置为“禁用”来禁用调试。

aac_ltp

允许使用长期预测扩展,通过在整个帧的频带中扩展恒定的谐波峰值,可以提高带宽极低情况下的编码效率,例如语音或钢琴独奏音乐的编码。此选项由 profile:a aac_low 隐含,与 aac_pred 不兼容。结合使用-ar降低采样率。

aac_pred

允许使用更传统的预测方式,其中传输的频谱系数由当前系数减去先前“预测”系数的差值代替。从理论上讲,有时在实践中,这可以提高中低比特率音频的质量。此选项隐含 aac_main 配置文件,并且与 aac_ltp 不兼容。

profile

设置编码配置文件,可能的值:

aac_low

默认的 AAC“低复杂性”配置文件。是最兼容的并且产生良好的质量。

mpeg2_aac_low

相当于-profile:a aac_low -aac_pns 0。PNS 是随 MPEG4 规范一起引入的。

aac_ltp

长期预测配置文件由以下各项启用并将启用aac_ltp 选项。在 MPEG4 中引入。

aac_main

主要类型预测配置文件,由启用并将启用aac_pred 选项。在 MPEG2 中引入。

如果未指定此选项,则将其设置为 'aac_low'。

15.2 ac3 and ac3_fixed

AC-3 音频编码器。

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

ac3编码器使用浮点数学,而ac3_fixed 编码器仅使用定点整数数学。这并不意味着其中一种总是更快,只是其中一种可能更适合特定系统。ac3_fixed编码器不是任何输出格式的默认编解码器,因此必须使用该选项显式指定它 -acodec ac3_fixed才能使用它。

15.2.1 AC-3 元数据

AC-3 元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。有些选项确实会直接影响或影响结果比特流的解码和播放,而其他选项仅用于提供信息。一些选项会将位添加到输出流中,否则这些位可用于音频数据,从而影响输出的质量。这些将在下面的选项列表中相应地用注释表示。

这些参数在几个公开的文档中有详细描述。

15.2.1.1 元数据控制选项

-per_frame_metadata boolean

允许每帧元数据。指定编码器是否应检查每个帧的元数据更改。

0

初始化时设置的元数据值将用于流中的每个帧。(默认)

1

在对每个帧进行编码之前可以更改元数据值。

15.2.1.2 缩混级别

-center_mixlev level

中心混合级别。缩混为立体声时解码器应应用于中央通道的增益量。仅当存在中央通道时,该字段才会写入比特流。该值被指定为比例因子。有 3 个有效值:

0.707

应用-3dB增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用-6dB增益

-surround_mixlev level

环绕声混音级别。缩混为立体声时解码器应应用于环绕声道的增益量。仅当存在一个或多个环绕声道时,该字段才会写入比特流。该值被指定为比例因子。有 3 个有效值:

0.707

应用-3dB增益

0.500

应用 -6dB 增益(默认)

0.000

静音环绕声道

15.2.1.3 音频制作信息

音频制作信息是描述混合环境的可选信息。这些字段要么不写入,要么全部写入比特流。

-mixing_level number

混合级别。指定制作环境中混音掌握时的峰值声压级 (SPL)。有效值为 80 到 111,或 -1 表示未知或未指示。默认值为 -1,但如果音频制作信息写入比特流,则无法使用该值。因此,如果该room_type选项不是默认值,则该mixing_level 选项不能为-1。

-room_type type

房型。描述在工作室或配音阶段的最终混音过程中使用的均衡。一个大房间是一个配音舞台,具有行业标准的X曲线均衡;小房间有平坦的均衡。mixing_level 如果选项和room_type选项都具有默认值, 则该字段不会写入比特流。

0
notindicated

未指定(默认)

1
large

大房间

2
small

小房间

15.2.1.4 其他元数据选项

-copyright boolean

版权指示器。指定该音频是否存在版权。

0
off

不存在版权(默认)

1
on

版权存在

-dialnorm value

对话正常化。指示节目的平均对话电平低于数字 100% 满量程 (0 dBFS) 的程度。该参数确定音频再现期间的电平移动,将对话的平均音量设置为预设电平。目标是匹配节目源之间的音量级别。-31dB 的值将导致在音频再现期间相对于源音量没有音量级别变化。有效值为 -31 到 -1 范围内的整数,默认值为 -31。

-dsur_mode mode

杜比环绕模式。指定立体声信号是否使用 Dolby Surround (Pro Logic)。仅当音频流是立体声时,该字段才会写入比特流。使用此选项并不意味着编码器将实际应用杜比环绕声处理。

0
notindicated

未指定(默认)

1
off

非杜比环绕编码

2
on

杜比环绕编码

-original boolean

原始比特流指示器。指定此音频是否来自原始来源而不是副本。

0
off

非原始来源

1
on

原始来源(默认)

15.2.2 扩展比特流信息

扩展比特流选项是 A/52:2010 标准附件 D 中指定的备用比特流语法的一部分。它分为 2 部分。如果指定了一组中的任何一个参数,则该组中的所有值都将写入比特流。默认值用于已写入但未指定的值。如果写入了混合级别,并且解码器支持备用比特流语法,则 解码器将使用这些值而不是center_mixlev 和选项中指定的值。surround_mixlev

15.2.2.1 扩展比特流信息 - 第 1 部分

-dmix_mode mode

首选立体声缩混模式。允许用户选择 Lt/Rt(杜比环绕声)或 Lo/Ro(正常立体声)作为首选立体声缩混模式。

0
notindicated

未指定(默认)

1
ltrt

Lt/Rt 缩混首选

2
loro

Lo/Ro 缩混首选

-ltrt_cmixlev level

Lt/Rt 中心混合级别。在 Lt/Rt 模式下混音为立体声时,解码器应应用于中央通道的增益量。

1.414

应用 +3dB 增益

1.189

应用 +1.5dB 增益

1.000

应用 0dB 增益

0.841

应用-1.5dB增益

0.707

应用-3.0dB增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用-6.0dB增益

0.000

静音中心通道

-ltrt_surmixlev level

Lt/Rt 环绕声混音电平。在 Lt/Rt 模式下混音为立体声时,解码器应应用于环绕声道的增益量。

0.841

应用-1.5dB增益

0.707

应用-3.0dB增益

0.595

应用-4.5dB增益

0.500

应用 -6.0dB 增益(默认)

0.000

静音环绕声道

-loro_cmixlev level

Lo/Ro 中心混合级别。在 Lo/Ro 模式下混音为立体声时,解码器应应用于中央通道的增益量。

1.414

应用 +3dB 增益

1.189

应用 +1.5dB 增益

1.000

应用 0dB 增益

0.841

应用-1.5dB增益

0.707

应用-3.0dB增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用-6.0dB增益

0.000

静音中心通道

-loro_surmixlev level

Lo/Ro 环绕声混音级别。在 Lo/Ro 模式下混音为立体声时,解码器应应用于环绕声道的增益量。

0.841

应用-1.5dB增益

0.707

应用-3.0dB增益

0.595

应用-4.5dB增益

0.500

应用 -6.0dB 增益(默认)

0.000

静音环绕声道

15.2.2.2 扩展比特流信息 - 第 2 部分

-dsurex_mode mode

杜比环绕 EX 模式。指示流是否使用 Dolby Surround EX(7.1 矩阵化为 5.1)。使用此选项并不意味着编码器将实际应用 Dolby Surround EX 处理。

0
notindicated

未指定(默认)

1
on

杜比环绕 EX 关闭

2
off

杜比环绕 EX 开启

-dheadphone_mode mode

杜比耳机模式。指示流是否使用 Dolby Headphone 编码(多声道矩阵化为 2.0 以与耳机一起使用)。使用此选项并不意味着编码器将实际应用杜比耳机处理。

0
notindicated

未指定(默认)

1
on

杜比耳机关闭

2
off

杜比耳机开启

-ad_conv_type type

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

0
standard

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

1
hdcd

HDCD A/D 转换器

15.2.3 其他 AC-3 编码选项

-stereo_rematrixing boolean

立体声重新矩阵。启用/禁用立体声输入的重新矩阵。这是一项可选的 AC-3 功能,可通过选择性地将左/右通道编码为中/侧来提高质量。默认情况下启用此选项,强烈建议将其保留为启用状态,除非用于测试目的。

cutoff frequency

设置低通截止频率。如果未指定,编码器将选择由各种其他编码参数确定的默认值。

15.2.4 仅浮点 AC-3 编码选项

这些选项仅对浮点编码器有效,对于定点编码器不存在,因为相应的功能未在定点中实现。

-channel_coupling boolean

启用/禁用通道耦合的使用,这是一项可选的 AC-3 功能,可通过将多个通道的高频信息组合到单个通道中来提高质量。每通道高频信息在频域和时域上的发送精度都较低。这允许更多的比特用于较低的频率,同时保留足够的信息来重建高频。默认情况下,浮点编码器启用此选项,并且通常应保留启用状态,除非用于测试目的或提高编码速度。

-1
auto

由编码器选择(默认)

0
off

禁用通道耦合

1
on

启用通道耦合

-cpl_start_band number

耦合起始带。设置通道耦合起始频带,范围为 1 到 15。如果使用高于带宽的值,则会减少到比耦合结束频带小 1。如果使用自动,则起始频带将由编码器根据比特率、采样率和通道布局确定。如果禁用通道耦合,则此选项无效。

-1
auto

由编码器选择(默认)

15.3 flac

FLAC(免费无损音频编解码器)编码器

15.3.1 选项

FFmpeg 的 flac 编码器支持以下选项。

compression_level

设置压缩级别,如果未明确设置,则为许多其他选项选择默认值。有效值为 0 到 12,默认值为 5。

frame_size

设置每个通道样本中的帧大小。

lpc_coeff_precision

设置LPC系数精度,有效值为1到15,默认为15。

lpc_type

设置第一阶段LPC算法

none

未使用LPC

fixed

固定LPC系数

levinson
cholesky
lpc_passes

LPC 分析期间用于 Cholesky 分解的遍数

min_partition_order

最小划分顺序

max_partition_order

最大分区顺序

prediction_order_method
estimation
2level
4level
8level
search

暴力搜索

log
ch_mode

通道模式

auto

为每一帧自动选择模式

indep

通道独立编码

left_side
right_side
mid_side
exact_rice_parameters

选择是精确计算还是近似计算大米参数。如果设置为 1,那么它们将被准确选择,这会稍微减慢代码速度并稍微提高压缩率。

multi_dim_quant

多维量化。如果设置为 1,则在第一阶段之后应用第二阶段 LPC 算法来微调系数。这非常慢并且稍微改善了压缩。

15.4 opus

Opus 编码器。

这是 Opus 格式的原生 FFmpeg 编码器。目前它正在开发中,仅实现编解码器的 CELT 部分。它的质量通常较差,最多相当于 libopus 编码器。

15.4.1 选项

b

设置比特率(以位/秒为单位)。如果未指定,它会使用通道数量和布局来进行良好的猜测。

opus_delay

设置最大延迟(以毫秒为单位)。低于 20 毫秒的延迟将很快降低质量。

15.5 libfdk_aac

libfdk-aac AAC(高级音频编码)编码器包装器。

libfdk-aac 库基于 Android 项目中的 Fraunhofer FDK AAC 代码。

需要在配置过程中存在 libfdk-aac 标头和库。您需要使用 显式配置构建 --enable-libfdk-aac。该库也不兼容 GPL,因此如果允许使用 GPL,则应使用 --enable-gpl --enable-nonfree --enable-libfdk-aac.

该编码器支持 AAC-HE 配置文件。

VBR 编码,通过启用虚拟现实或者标志+qscaleoptions 是实验性的,仅适用于某些参数组合。

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

有关更多信息,请参阅http://sourceforge.net/p/opencore-amr/fdk-aac/上的 fdk-aac 项目 。

15.5.1 选项

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

b

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

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

ar

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

channels

设置音频通道数。

flags +qscale

启用固定质量、VBR(可变比特率)模式。请注意,当虚拟现实值为正。

cutoff

设置截止频率。如果未指定(或显式设置为 0),它将使用库自动计算的值。默认值为 0。

profile

设置音频配置文件。

可以识别以下配置文件:

aac_low

低复杂度 AAC (LC)

aac_he

高效加气混凝土 (HE-AAC)

aac_he_v2

高效 AAC 版本 2 (HE-AACv2)

aac_ld

低延迟 AAC (LD)

aac_eld

增强型低延迟 AAC (ELD)

如果未指定,则设置为 'aac_low'。

以下是 libfdk_aac 编码器的私有选项。

afterburner

如果设置为 1,则启用加力功能;如果设置为 0,则禁用。这会提高质量,但也会提高所需的处理能力。

默认值为 1。

eld_sbr

如果设置为 1,则为 ELD 启用 SBR(频段复制);如果设置为 0,则禁用。

默认值为 0。

eld_v2

如果设置为 1,则为 ELDv2 启用 ELDv2(ELD 立体声信号的 LD-MPS 扩展);如果设置为 0,则禁用。

请注意,当 fdk-aac 版本 (AACENCODER_LIB_VL0.AACENCODER_LIB_VL1.AACENCODER_LIB_VL2) > (4.0.0) 时,该选项可用。

默认值为 0。

signaling

设置 SBR/PS 信令样式。

它可以采用以下值之一:

default

隐式选择信令(默认情况下显式分层,如果禁用全局标头则隐式)

implicit

隐式向后兼容信令

explicit_sbr

显式 SBR、隐式 PS 信令

explicit_hierarchical

显式分层信号

默认值为 '默认'。

latm

如果设置为 1,则输出 LATM/LOAS 封装数据;如果设置为 0,则禁用。

默认值为 0。

header_period

设置 StreamMuxConfig 和 PCE 重复周期(以帧为单位),用于在 LATM/LOAS 传输层内发送带内配置缓冲区。

必须是 16 位非负整数。

默认值为 0。

vbr

设置 VBR 模式,从 1 到 5。1 是最低质量(尽管仍然相当不错),5 是最高质量。值为 0 将禁用 VBR,并启用 CBR(恒定比特率)。

目前只有'aac_low' 配置文件支持 VBR 编码。

VBR 模式 1-5 大致对应于以下平均比特率:

1

32 kbps/通道

2

40 kbps/通道

3

48-56 kbps/通道

4

64 kbps/通道

5

约 80-96 kbps/通道

默认值为 0。

frame_length

设置样本中的音频帧长度。默认值是库的内部默认值。有关支持的值的信息,请参阅库的文档。

15.5.2 示例

  • 用于ffmpeg将 M4A (MP4) 容器中的音频文件转换为 VBR AAC:
    ffmpeg -i input.wav -codec:a libfdk_aac -vbr 3 output.m4a
    
  • 用于ffmpeg使用高效 AAC 配置文件将音频文件转换为 CBR 64k kbps AAC:
    ffmpeg -i input.wav -c:a libfdk_aac -profile:a aac_he -b:a 64k output.m4a
    

15.6 libmp3lame

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

需要在配置过程中存在 libmp3lame 标头和库。您需要使用 显式配置构建 --enable-libmp3lame

请参阅libshine了解定点 MP3 编码器,尽管质量较低。

15.6.1 选项

libmp3lame 包装器支持以下选项。lame括号中列出了等效的选项 。

b (-b)

设置 CBR 或 ABR 的比特率,以位/秒表示。LAMEbitrate以千比特/秒表示。

q (-V)

设置 VBR 的恒定质量设置。ffmpeg该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量

compression_level (-q)

设置算法质量。有效参数是 0-9 范围内的整数,0 表示质量最高但最慢,9 表示最快但质量最差。

cutoff (--lowpass)

设置低通截止频率。如果未指定,编码器会动态调整截止。

reservoir

设置为 1 时启用位存储库的使用。默认值为 1。LAME 默认启用此功能,但可以通过使用来覆盖 ——诺雷斯选项。

joint_stereo (-m j)

使编码器能够使用(逐帧)L/R 立体声或中/侧立体声。默认值为 1。

abr (--abr)

设置为 1 时启用编码器使用 ABR。lame --abr设置目标比特率,虽然这个选项只是告诉FFmpeg使用ABR仍然依赖设置比特率。

copyright (-c)

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

original (-o)

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

15.7 libopencore-amrnb

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

需要在配置过程中存在 libopencore-amrnb 标头和库。您需要使用 显式配置构建 --enable-libopencore-amrnb --enable-version3

这是一个单声道编码器。官方仅支持 8000Hz 采样率,但您可以通过设置覆盖它严格的到 '非官方' 或更低。

15.7.1 选项

b

设置比特率(以每秒位数为单位)。仅支持以下比特率,否则 libavcodec 将四舍五入到最接近的有效比特率。

4750
5150
5900
6700
7400
7950
10200
12200
dtx

设置为 1 时允许间断传输(生成舒适噪音)。默认值为 0(禁用)。

15.8 libopus

libopus Opus 交互式音频编解码器编码器包装器。

需要在配置过程中存在 libopus 标头和库。您需要使用 显式配置构建 --enable-libopus

15.8.1 选项映射

大多数 libopus 选项都是根据opusencopus-tools 中的实用程序建模的。以下是选项映射表,描述了 libopus 包装器支持的选项以及opusenc括号中的等效选项。

b (bitrate)

设置比特率(以位/秒为单位)。FFmpeg 的选项以位/秒表示,而opusencs比特率以千比特/秒为单位。

vbr (vbr, hard-cbr, and cvbr)

设置变码模式。FFmpeg虚拟现实选项具有以下有效参数,opusenc括号中包含等效选项:

off (hard-cbr)

使用恒定比特率编码。

on (vbr)

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

constrained (cvbr)

使用受约束的可变比特率编码。

compression_level (comp)

设置编码算法的复杂度。有效选项是 0-10 范围内的整数。0 提供最快的编码但质量较低,而 10 提供最高的质量但最慢的编码。默认值为 10。

frame_duration (framesize)

设置最大帧大小或帧的持续时间(以毫秒为单位)。该参数必须准确如下:2.5、5、10、20、40、60。较小的帧大小可实现较低的延迟,但在给定比特率下质量较差。大于 20 毫秒的大小仅在相当低的比特率下才有意义。默认值为 20 毫秒。

packet_loss (expect-loss)

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

fec (n/a)

启用带内前向纠错。数据包丢失必须非零才能利用 - FEC“辅助数据”的频率与预期的数据包丢失成正比。默认为禁用。

application (N.A.)

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

voip

有利于提高语音清晰度。

audio

支持忠实于输入(默认)。

lowdelay

通过禁用语音优化模式,仅限制最低延迟模式。

cutoff (N.A.)

设置截止带宽(以 Hz 为单位)。该参数必须是以下之一:4000、6000、8000、12000或20000,分别对应窄带、中带、宽带、超宽带和全带。默认值为 0(禁用截止)。请注意,libopus 强制对比特率 < 15 kbps 进行宽带截止,除非仅限 CELT(应用设置 '低延迟') 模式被使用。

mapping_family (mapping_family)

设置编码器要使用的通道映射系列。默认值 -1 对单声道和立体声输入使用映射系列 0,否则使用映射系列 1。默认情况下还会禁用 libopus 中的环绕声掩蔽和 LFE 带宽优化,并要求输入包含 8 个或更少的通道。

其他值包括 0(表示单声道和立体声)、1(表示具有掩蔽和 LFE 带宽优化的环绕声)以及 255(表示具有未指定通道布局的独立流)。

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

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

15.9 libshine

Shine 定点 MP3 编码器包装。

Shine 是一个定点 MP3 编码器。它在没有 FPU 的平台(例如,armel CPU 以及某些手机和平板电脑)上具有更好的性能。然而,由于它更注重性能而不是质量,因此它在质量方面无法与 LAME 和其他生产级编码器相提并论。此外,根据该项目的主页,该编码器可能不存在错误,因为代码是很久以前编写的,并且该项目已经死亡至少 5 年了。

该编码器仅支持立体声和单声道输入。这也是仅限 CBR 的。

原始项目(最后更新于 2007 年初)位于 http://sourceforge.net/projects/libshine-fxp/我们仅支持https://github.com/savonet/shine上的 Savonet/Liquidsoap 项目更新的分支。

需要在配置过程中存在 libshine 标头和库。您需要使用 显式配置构建 --enable-libshine

另请参见libmp3lame

15.9.1 选项

libshine 包装器支持以下选项。shineenc括号中列出了等效的选项 。

b (-b)

设置 CBR 的比特率,以位/秒表示。shineenc -b选项以千位/秒表示。

15.10 libtwolame

TwoLAME MP2 编码器包装。

需要在配置过程中存在 libtwolame 标头和库。您需要使用 显式配置构建 --enable-libtwolame

15.10.1 选项

libtwolame 包装器支持以下选项。- twolame等效选项遵循 FFmpeg 选项并位于括号内。

b (-b)

设置 CBR 的比特率,以位/秒表示。twolame 选项以千位/秒表示。默认值为 128k。

q (-V)

设置实验性 VBR 支持的质量。最大值范围是-50到50,有用范围是-10到10。值越高,质量越好。ffmpeg该选项仅在使用命令行工具时有效 。对于库界面用户,请使用全局质量

mode (--mode)

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

auto

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

stereo

立体声

joint_stereo

联合立体声

dual_channel

双通道

mono

单核细胞增多症

psymodel (--psyc-mode)

设置用于编码的心理声学模型。参数必须是 -1 到 4 之间的整数(包含 -1 和 4)。价值越高,品质越好。默认值为 3。

energy_levels (--energy)

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

error_protection (--protect)

设置为 1 时启用 CRC 错误保护。默认值为 0(禁用)。

copyright (--copyright)

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

original (--original)

设置为 1 时设置 MPEG 音频原始标志。默认值为 0(禁用)。

15.11 libvo-amrwbenc

VisualOn 自适应多速率宽带编码器。

需要在配置期间存在 libvo-amrwbenc 标头和库。您需要使用 显式配置构建 --enable-libvo-amrwbenc --enable-version3

这是一个单声道编码器。官方仅支持 16000Hz 采样率,但您可以通过设置覆盖它严格的到 '非官方' 或更低。

15.11.1 选项

b

设置比特率(以位/秒为单位)。仅支持以下比特率,否则 libavcodec 将四舍五入到最接近的有效比特率。

6600
8850
12650
14250
15850
18250
19850
23050
23850
dtx

设置为 1 时允许间断传输(生成舒适噪音)。默认值为 0(禁用)。

15.12 libvorbis

libvorbis 编码器包装器。

需要在配置期间存在 libvorbisenc 标头和库。您需要使用 显式配置构建 --enable-libvorbis

15.12.1 选项

libvorbis 包装器支持以下选项。oggenc括号中列出了等效的选项 。

要获得有关 libvorbis 选项的更准确和更广泛的文档,请查阅 libvorbisenc 和oggenc的文档。请参阅http://xiph.org/vorbis/http://wiki.xiph.org/Vorbis-tools和 oggenc(1)。

b (-b)

设置 ABR 的比特率,以位/秒表示。oggenc -b以千比特/秒表示。

q (-q)

设置 VBR 的恒定质量设置。该值应该是 -1.0 到 10.0 范围内的浮点数。价值越高,品质越好。默认值为 '3.0'。

ffmpeg该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量

cutoff (--advanced-encode-option lowpass_frequency=N)

设置截止带宽(以 Hz 为单位),值为 0 禁用截止。oggenc的相关选项以kHz表示。默认值为 '0'(截止已禁用)。

minrate (-m)

设置以位/秒表示的最小比特率。oggenc -m以千比特/秒表示。

maxrate (-M)

设置以位/秒表示的最大比特率。oggenc -M以千比特/秒表示。这仅对 ABR 模式有效。

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

设置脉冲块的本底噪声偏置。该值为 -15.0 到 0.0 之间的浮点数。负偏差指示编码器特别注意编码音频中瞬态的清晰度。更好的瞬态响应的代价是更高的比特率。

15.13 mjpeg

运动 JPEG 编码器。

15.13.1 选项

huffman

设置霍夫曼编码策略。可能的值:

default

使用默认的霍夫曼表。这是默认策略。

optimal

计算并使用最佳霍夫曼表。

15.14 wavpack

WavPack 无损音频编码器。

15.14.1 选项

命令行实用程序的等效选项wavpack列在括号中。

15.14.1.1 共享选项

以下共享选项对此编码器有效。此处仅记录有关此特定编码器的特殊说明。有关选项的一般含义,请参阅编解码器选项一章

frame_size (--blocksize)

对于该编码器,该选项的范围在 128 到 131072 之间。默认值是根据采样率和通道数自动决定的。

完整的违约计算公式请参见 libavcodec/wavpackenc.c

compression_level (-f, -h, -hh, and -x)

15.14.1.2 私有选项

joint_stereo (-j)

设置是否启用联合立体声。有效值为:

on (1)

强制中/侧音频编码。

off (0)

强制左/右音频编码。

auto

让编码器自动决定。

optimize_mono

设置是否启用单声道优化。此选项仅对非单声道流有效。可用值:

on

已启用

off

残疾人

16 个视频编码器

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

16.1 a64_multi, a64_multi5

A64 / Commodore 64 多色字符集编码器。a64_multi5扩展为第五种颜色(colram)。

16.2 Cinepak

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

16.2.1 选项

g integer

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

q:v integer

品质因数。越低越好。比特率越高,比特率越低。下表列出了使用不同值对 akiyo_cif.y4m 进行编码时的比特-q:v-g 100

-q:v 1 1918 kb/s
-q:v 2 1735 kb/s
-q:v 4 1500 kb/s
-q:v 10 1041 kb/s
-q:v 20 826 kb/s
-q:v 40 553 kb/s
-q:v 100 394 kb/s
-q:v 200 312 kb/s
-q:v 400 266 kb/s
-q:v 1000 237 kb/s
max_extra_cb_iterations integer

最大额外的码本重新计算次数,越多越好但越慢。

skip_empty_cb boolean

避免浪费字节,忽略老式 MacOS 解码器。

max_strips integer
min_strips integer

要使用的最小和最大条数。更大的范围有时可以提高质量。更多条带通常质量更好,但成本更高。较少的条带往往会产生更多的关键帧。复古兼容是 1..3。

strip_number_adaptivity integer

帧之间允许改变多少条带数。越高越好但越慢。

16.3 GIF

GIF 图像/动画编码器。

16.3.1 选项

gifflags integer

设置用于 GIF 编码的标志。

offsetting

启用图片偏移。

默认启用。

transdiff

启用帧之间的透明度检测。

默认启用。

gifimage integer

启用每帧编码一个完整的 GIF 图像,而不是动画 GIF。

默认值为0

global_palette integer

如果可行,将调色板写入全局 GIF 标头。

如果禁用,即使提供了全局调色板,每个帧也将始终写入一个调色板。

默认值为1

16.4 Hap

Vidvox Hap 视频编码器。

16.4.1 选项

format integer

指定要编码的 Hap 格式。

hap
hap_alpha
hap_q

默认值为哈普

chunks integer

指定将帧分割成的块数,介于 1 和 64 之间。这允许对大帧进行多线程解码,但可能会牺牲数据速率。编码器可以修改该值以均匀地划分帧。

默认值为1

compressor integer

指定要使用的第二级压缩机。如果设置为没有任何, 将限制为 1,因为分块的未压缩帧没有任何好处。

none
snappy

默认值为活泼的

16.5 jpeg2000

原生 jpeg 2000 编码器默认是有损的,该-q:v 选项可用于设置编码质量。可以使用 来选择无损编码-pred 1

16.5.1 选项

format integer

可以设置为j2kjp2(默认值),从而可以存储非 RGB pix_fmts。

tile_width integer

设置图块宽度。范围为 1 到 1073741824。默认值为 256。

tile_height integer

设置图块高度。范围为 1 到 1073741824。默认值为 256。

pred integer

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

dwt97int (Lossy)
dwt53 (Lossless)

默认为dwt97int

sop boolean

启用此选项可在每个数据包的开头添加 SOP 标记。默认禁用。

eph boolean

启用此选项可在每个数据包标头的末尾添加 EPH 标记。默认禁用。

prog integer

设置编码器要使用的进展顺序。可能的值为:

lrcp
rlcp
rpcl
pcrl
cprl

设置lrcp为默认。

layer_rates string

默认情况下,当不使用此选项时,将使用质量指标进行压缩。此选项允许使用压缩比进行压缩。可以指定每个级别的压缩比。层的压缩比l决定了第一层中包含的总文件大小的比例l

用法示例:

ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k

这会将图像压缩为包含 3 层,其中第一层中包含的数据将被压缩 1000 倍,前两层中包含的数据将被压缩 100 倍,并且在使用所有 3 层时应包含所有数据。

16.6 librav1e

rav1e AV1 编码器包装器。

需要在配置过程中存在 rav1e 标头和库。您需要使用 显式配置构建--enable-librav1e

16.6.1 选项

qmax

设置使用比特率模式时要使用的最大量化器。

qmin

设置使用比特率模式时要使用的最小量化器。

qp

使用量化器模式以给定量化器 (0-255) 进行编码。

speed

选择要编码的速度预设 (0-10)。

tiles

选择要编码的图块数量。

tile-rows

选择要编码的图块行数。

tile-columns

选择要编码的图块列数。

rav1e-params

使用以“:”分隔的=对列表设置 rav1e 选项。请参阅rav1e --help参考资料 中的选项列表。

例如,指定 librav1e 编码选项-rav1e-参数:

ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4

16.7 libaom-av1

libaom AV1 编码器包装器。

需要在配置过程中存在 libaom 标头和库。您需要使用 显式配置构建 --enable-libaom

16.7.1 选项

该包装器支持以下标准 libavcodec 选项:

b

设置比特率目标(以位/秒为单位)。默认情况下,这将使用可变比特率模式。如果最大速率最低利率也设置为相同的值,那么它将使用恒定比特率模式,否则如果crf也已设置,那么它将使用约束质量模式。

g keyint_min

设置关键帧位置。GOP大小设置关键帧之间的最大距离;如果为零,则输出流将仅是内部的。除非最小距离与 GOP 大小相同,否则将忽略最小距离,在这种情况下关键帧将始终以固定间隔出现。默认情况下未设置,因此如果没有此选项,库可以完全自由选择关键帧的放置位置。

qmin qmax

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

minrate maxrate bufsize rc_init_occupancy

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

threads

设置编码时使用的线程数。这可能需要 瓷砖或者行MT选项还可以设置为实际完全使用指定数量的线程。默认为主机支持的硬件线程数。

profile

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

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

cpu-used

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

auto-alt-ref

启用备用参考系的使用。默认为库的内部默认值。

arnr-max-frames (frames)

设置 altref 降噪最大帧数。默认值为-1。

arnr-strength (strength)

设置 altref 降噪滤波器强度。范围为 -1 到 6。默认值为 -1。

aq-mode (aq-mode)

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

none (0)

残疾人。

variance (1)

基于方差。

complexity (2)

基于复杂性。

cyclic (3)

循环刷新。

tune (tune)

设置编码器调谐所用的失真度指标。默认为psnr.

psnr (0)
ssim (1)
lag-in-frames

设置编码器在任一时间出于前瞻目的可以保持飞行的最大帧数。默认为库的内部默认值。

error-resilience

启用错误恢复功能:

default

提高针对整个帧丢失的恢复能力。

默认情况下不启用。

crf

设置恒定质量(无比特率目标)和约束质量(具有最大比特率目标)模式的质量/大小权衡。有效范围为 0 到 63,数字越大表示质量越低且输出大小越小。仅在设置时使用;默认情况下仅使用比特率目标。

static-thresh

设置块的更改阈值,低于该阈值的块将被编码器跳过。以任意单位定义为非负整数,默认为零(不跳过任何块)。

drop-threshold

设置接近速率控制界限时丢弃帧的阈值。定义为目标缓冲区的百分比 - 当速率控制缓冲区低于此百分比时,帧将被丢弃,直到重新填充到阈值以上。默认为零(不丢弃任何帧)。

denoise-noise-level (level)

颗粒合成时要去除的噪声量。如果此选项未设置或设置为 0,则会禁用颗粒合成。

denoise-block-size (pixels)

用于颗粒合成去噪的块大小。如果未设置,AV1 编解码器将使用默认值 32。

undershoot-pct (pct)

设置目标比特率的数据率下冲(最小)百分比。范围为 -1 到 100。默认值为 -1。

overshoot-pct (pct)

设置目标比特率的数据率超调(最大)百分比。范围是 -1 到 1000。默认值为 -1。

minsection-pct (pct)

GOP 比特率与目标比特率的最小变化百分比。如果未设置 minsection-pct,libaomenc 包装器将按如下方式计算它:(minrate * 100 / bitrate)。范围为 -1 到 100。默认值为 -1(未设置)。

maxsection-pct (pct)

GOP 比特率与目标比特率的最大变化百分比。如果未设置 maxsection-pct,libaomenc 包装器将按如下方式计算它:(maxrate * 100 / bitrate)。范围为 -1 到 5000。默认值为 -1(未设置)。

frame-parallel (boolean)

启用帧并行解码功能。默认为 true。

tiles

设置用于对输入视频进行编码的图块数量,如列 x 行。数字越大,编码和解码的并行性就越高,但可能会降低编码效率。默认为输入视频大小所需的最小图块数量(对于 4K 及以下尺寸,此为 1x1(即单个图块))。

tile-columns tile-rows

将图块数量设置为图块行数和列数的 log2。提供与 libvpx/VP9 的兼容性。

row-mt (Requires libaom >= 1.0.0-759-g90a15f4f2)

启用基于行的多线程。默认禁用。

enable-cdef (boolean)

启用约束方向增强过滤器。libaom-av1 编码器默认启用 CDEF。

enable-restoration (boolean)

启用循环恢复过滤器。libaom-av1 的默认值为 true。

enable-global-motion (boolean)

启用全局运动进行块预测。默认为 true。

enable-intrabc (boolean)

启用块复制模式以进行块内预测。此模式对于屏幕内容很有用。默认为 true。

enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)

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

enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)

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

enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)

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

enable-angle-delta (boolean) (Requires libaom >= v2.0.0)

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

enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)

启用从亮度帧内预测预测色度。默认为 true。

enable-filter-intra (boolean) (Requires libaom >= v2.0.0)

启用过滤器帧内预测器。默认为 true。

enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)

启用内部边缘过滤器。默认为 true。

enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)

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

enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)

在帧内预测中启用路径预测器。默认为 true。

enable-palette (boolean) (Requires libaom >= v2.0.0)

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

enable-flip-idtx (boolean) (Requires libaom >= v2.0.0)

启用扩展变换类型,包括 FLIPADST_DCT、DCT_FLIPADST、FLIPADST_FLIPADST、ADST_FLIPADST、FLIPADST_ADST、IDTX、V_DCT、H_DCT、V_ADST、H_ADST、V_FLIPADST、H_FLIPADST。默认为 true。

enable-tx64 (boolean) (Requires libaom >= v2.0.0)

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

reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)

使用减少的变换类型集。默认为 false。

use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)

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

use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)

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

use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)

仅对 INTRA 模式使用默认变换。默认为 false。

enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)

启用时间 mv 预测。默认为 true。

enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)

使用减少的单一和复合参考集。默认为 false。

enable-obmc (boolean) (Requires libaom >= v2.0.0)

启用 obmc。默认为 true。

enable-dual-filter (boolean) (Requires libaom >= v2.0.0)

启用双过滤器。默认为 true。

enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)

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

enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)

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

enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)

启用一侧复合。默认为 true。

enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)

启用间楔复合。默认为 true。

enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)

启用内部楔形复合。默认为 true。

enable-masked-comp (boolean) (Requires libaom >= v2.0.0)

启用蒙版复合。默认为 true。

enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)

启用内部复合。默认为 true。

enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)

启用平滑帧内模式。默认为 true。

aom-params

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

例如,指定 libaom 编码选项-aom-参数:

ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4

16.8 libsvtav1

SVT-AV1 编码器包装。

需要在配置期间存在 SVT-AV1 标头和库。您需要使用 显式配置构建--enable-libsvtav1

16.8.1 选项

profile

设置编码配置文件。

main
high
professional
level

设置工作点水平。例如:“4.0”

hielevel

设置分层预测级别。

3level
4level

这是默认设置。

tier

设置工作点等级。

main

这是默认设置。

high
qmax

设置使用比特率模式时要使用的最大量化器。

qmin

设置使用比特率模式时要使用的最小量化器。

crf

cRF 速率控制模式中使用的恒定速率因子值 (0-63)。

qp

设置 cqp 速率控制模式中使用的量化器 (0-63)。

sc_detection

启用场景变化检测。

la_depth

设置向前查看的帧数 (0-120)。

preset

设置质量与速度的权衡,范围为 0 到 13。值越高速度越快,但质量较低。

tile_rows

设置要使用的图块行数的 log2 (0-6)。

tile_columns

设置要使用的图块列数的 log2 (0-4)。

svtav1-params

使用以“:”分隔的=对列表设置 SVT-AV1 选项。有关可接受参数的列表,请参阅 SVT-AV1 编码器用户指南。

16.9 libjxl

libjxl JPEG XL 编码器包装器。

需要在配置过程中存在 libjxl 标头和库。您需要使用 显式配置构建 --enable-libjxl

16.9.1 选项

libjxl 包装器支持以下选项:

distance

设置目标 Butteraugli 距离。这是一个质量设置:距离越短,质量越高,距离=1.0 大致相当于摄影内容的 libjpeg 质量 90。设置 distance=0.0 会产生真正的无损编码。有效值范围在 0.0 到 15.0 之间,正常值很少超过 5.0。设置 distance=0.1 通常可以使大多数输入保持透明。默认值为 1.0。

effort

设置使用的编码工作。较高的工作量值会产生更一致的质量,并且通常会产生更好的质量/bpp 曲线,但代价是需要更多的 CPU 时间。有效值范围为 1 到 9,默认值为 7。

modular

强制编码器使用模块化模式而不是自动选择。默认情况下使用 VarDCT 进行有损编码,使用 Modular 进行无损编码。VarDCT 在有损编码方面通常优于 Modular,但不支持无损编码。

16.10 libkvazaar

Kvazaar H.265/HEVC 编码器。

需要在配置过程中存在 libkvazaar 标头和库。您需要显式配置构建 --启用libkvazaar

16.10.1 选项

b

设置目标视频比特率(以位/秒为单位)并启用速率控制。

kvazaar-params

将 kvazaar 参数设置为以逗号 (,) 分隔的名称=对列表。有关选项列表,请参阅 kvazaar 文档。

16.11 libopenh264

Cisco libopenh264 H.264/MPEG-4 AVC 编码器包装器。

该编码器需要在配置期间存在 libopenh264 标头和库。您需要使用 显式配置构建--enable-libopenh264。使用 检测该库 pkg-config

有关该库的更多信息,请参阅 http://www.openh264.org

16.11.1 选项

以下 FFmpeg 全局选项会影响 libopenh264 编码器的配置。

b

设置比特率(每秒的位数)。

g

设置 GOP 大小。

maxrate

设置最大比特率(每秒的位数)。

flags +global_header

在比特流中设置全局标头。

slices

设置并行编码中使用的切片数量。默认值为 0。仅在以下情况下使用切片模式被设定为 '固定的'。

loopfilter

启用环路滤波器,如果设置为 1(自动启用)。要禁用,请将值设置为 0。

profile

设置个人资料限制。如果设置为 ' 的值主要的' 启用 CABAC(将SEncParamExt.iEntropyCodingModeFlag标志设置为 1)。

max_nal_size

设置最大 NAL 大小(以字节为单位)。

allow_skip_frames

如果设置为 1,则允许跳帧达到目标比特率。

16.12 libtheora

libtheora Theora 编码器包装器。

需要在配置过程中存在 libtheora 标头和库。您需要使用 显式配置构建 --enable-libtheora

有关 libtheora 项目的更多信息,请参阅 http://www.theora.org/

16.12.1 选项

以下全局选项映射到内部 libtheora 选项,这些选项影响编码流的质量和比特率。

b

设置 CBR(恒定比特率)模式的视频比特率(以位/秒为单位)。如果启用了 VBR(可变比特率)模式,则忽略此选项。

flags

用于通过以下方式启用恒定质量模式 (VBR) 编码 质量尺度标志,并启用pass1pass2 模式。

g

设置 GOP 大小。

global_quality

将全局质量设置为 lambda 单位的整数。

仅当使用 启用 VBR 模式时相关flags +qscale。该值通过除以 来转换为 QP 单位FF_QP2LAMBDA,剪裁在 [0 - 10] 范围内,然后乘以 6.3 以获得本机 libtheora 范围 [0-63] 内的值。较高的值对应于较高的质量。

q

设置为非负值时启用 VBR 模式,并将恒定质量值设置为 QP 单位的双浮点值。

该值被剪裁在 [0-10] 范围内,然后乘以 6.3 以获得本机 libtheora 范围 [0-63] 内的值。

ffmpeg该选项仅在使用命令行工具时有效。对于库界面用户,请使用全局质量

16.12.2 示例

  • 设置最大恒定质量 (VBR) 编码ffmpeg
    ffmpeg -i INPUT -codec:v libtheora -q:v 10 OUTPUT.ogg
    
  • 用于ffmpeg转换 CBR 1000 kbps Theora 视频流:
    ffmpeg -i INPUT -codec:v libtheora -b:v 1000k OUTPUT.ogg
    

16.13 libvpx

通过 libvpx 支持 VP8/VP9 格式。

需要在配置过程中存在 libvpx 标头和库。您需要使用 显式配置构建--enable-libvpx

16.13.1 选项

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

为了减少文档的重复,这里仅记录私有选项和其他一些需要特别注意的选项。有关未记录的通用选项的文档,请参阅 “编解码器选项”一章

要获取有关 libvpx 选项的更多文档,请调用命令 ffmpeg -h encoder=libvpx,ffmpeg -h encoder=libvpx-vp9vpxenc --help。更多信息请参阅 libvpx API 文档。

b (target-bitrate)

设置比特率(以位/秒为单位)。请注意 FFmpeg 的选项以位/秒表示,而vpxencs目标比特率单位为千比特/秒。

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

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

qmax (max-q)

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

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

设置速率控制缓冲区大小(以位为单位)。Notevpxenc的选项以毫秒为单位指定,libvpx 包装器按如下方式转换该值: buf-sz = bufsize * 1000 / bitrate, buf-optimal-sz = bufsize * 1000 / bitrate * 5 / 6.

rc_init_occupancy (buf-initial-sz)

设置解码开始前应加载到 rc 缓冲区的位数。注意vpxenc的选项以毫秒为单位指定,libvpx 包装器按如下方式转换该值: rc_init_occupancy * 1000 / bitrate

undershoot-pct

设置目标比特率的数据率下冲(最小)百分比。

overshoot-pct

设置目标比特率的数据率超调(最大)百分比。

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

设置 GOP 最大比特率(以位/秒为单位)。注意vpxenc的选项指定为目标比特率的百分比,libvpx 包装器按如下方式转换该值:(maxrate * 100 / bitrate)

minrate (minsection-pct)

设置 GOP 最小比特率(以位/秒为单位)。注意vpxenc的选项指定为目标比特率的百分比,libvpx 包装器按如下方式转换该值:(minrate * 100 / bitrate)

minrate, maxrate, b end-usage=cbr

(minrate == maxrate == bitrate)

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

使用最佳质量的截止日期。这个选项名字不好,而且速度很慢,应该避免,因为它可能会提供比好的输出质量更差的输出。

good

使用高质量的截止日期。与使用时,这是速度和质量之间的良好权衡CPU使用选项。

realtime

使用实时质量截止日期。

speed, cpu-used (cpu-used)

设置质量/速度比调节器。较高的值会加快编码速度,但会牺牲质量。

nr (noise-sensitivity)
static-thresh

设置块的更改阈值,低于该阈值的块将被编码器跳过。

slices (token-parts)

请注意 FFmpeg 的切片选项给出分区的总数,而vpxenc's令牌部分给出为 log2(partitions).

max-intra-rate

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

force_key_frames

VPX_EFLAG_FORCE_KF

Alternate reference frame related
auto-alt-ref

启用备用参考系的使用(仅限 2 遍)。大于 1 的值启用多层交替参考帧(仅限 VP9)。

arnr-maxframes

设置 altref 降噪最大帧数。

arnr-type

设置altref降噪滤波器类型:向后、向前、居中。

arnr-strength

设置 altref 降噪滤波器强度。

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

设置帧数以预测帧类型和速率控制。

min-gf-interval

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

error-resilient

启用错误弹性功能。

sharpness integer

以降低 PSNR 为代价来提高清晰度。有效范围为 [0, 7]。

ts-parameters

使用 : 分隔的键=值对列表设置时间可伸缩性配置。例如,要使用以下命令指定时间可伸缩性参数ffmpeg

ffmpeg -i INPUT -c:v libvpx -ts-parameters ts_number_layers=3:\
ts_target_bitrate=250,500,1000:ts_rate_decimator=4,2,1:\
ts_periodicity=4:ts_layer_id=0,2,1,2:ts_layering_mode=3 OUTPUT

下面是对各个参数的简单解释,更多详细信息 struct vpx_codec_enc_cfg请参阅。vpx/vpx_encoder.h

ts_number_layers

时间编码层的数量。

ts_target_bitrate

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

ts_rate_decimator

每个时间层的帧率抽取因子。

ts_periodicity

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

ts_layer_id

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

ts_layering_mode

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

0

metadata内部没有提供时间分层标志,依赖于使用带有以下键的字段传入的标志AVFrame

vp8-flags

设置传递到编码器的标志以指示当前帧的参考方案。有关更多详细信息, 请参阅 中的函数vpx_codec_encodevpx/vpx_encoder.h

temporal_id

显式设置要编码的当前帧的时间 id。

2

两个时间层。0-1...

3

三个时间层。0-2-1-2...;具有单一参考系。

4

与选项“3”相同,除了时间周期内的两个时间第2层帧之间存在依赖性。

VP9-specific options
lossless

启用无损模式。

tile-columns

设置要使用的图块列数。请注意,这给出为 log2(tile_columns)。例如,通过设置来请求 8 个平铺列平铺列选项3。

tile-rows

设置要使用的图块行数。请注意,这给出为log2(tile_rows)。例如,通过设置来请求 4 个平铺行平铺行 选项2。

frame-parallel

启用帧并行解码功能。

aq-mode

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

colorspace color-space

设置输入色彩空间。VP9 比特流支持发送以下颜色空间信号:

rgbsRGB
bt709bt709
unspecifiedunknown
bt470bgbt601
smpte170msmpte170
smpte240msmpte240
bt2020_nclbt2020
row-mt boolean

启用基于行的多线程。

tune-content

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

corpus-complexity

Corpus VBR 模式是标准 VBR 的一种变体,其中复杂性分布中点被传入,而不是针对特定剪辑或块进行计算。

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

enable-tpl boolean

启用时间依赖模型。

ref-frame-config

使用每帧元数据,将结构成员设置vpx_svc_ref_frame_config_tvpx/vp8cx.h精细控制引用方案和帧缓冲区管理。
使用 : 分隔的键=值对列表。例如,

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

指示要更新的缓冲区槽号

rfc_update_last

指示是否更新LAST帧

rfc_update_golden

是否更新GOLDEN帧

rfc_update_alt_ref

指示是否更新ALT_REF帧

rfc_lst_fb_idx

最后帧缓冲区索引

rfc_gld_fb_idx

黄金帧缓冲区索引

rfc_alt_fb_idx

ALT_REF 帧缓冲区索引

rfc_reference_last

指示是否引用LAST帧

rfc_reference_golden

指示是否引用GOLDEN框架

rfc_reference_alt_ref

指示是否引用ALT_REF帧

rfc_reference_duration

表示帧持续时间

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

16.14 libwebp

libwebp WebP 图像编码器包装器

libwebp 是 Google 的 WebP 图像官方编码器。它可以以有损或无损模式进行编码。有损图像本质上是 VP8 帧的包装。无损图像是 Google 开发的独立编解码器。

16.14.1 像素格式

Currently, libwebp only supports YUV420 for lossy and RGB for lossless due to limitations of the format and libwebp. Alpha is supported for either mode. Because of API limitations, if RGB is passed in when encoding lossy or YUV is passed in for encoding lossless, the pixel format will automatically be converted using functions from libwebp. This is not ideal and is done only for convenience.

16.14.2 Options

-lossless boolean

Enables/Disables use of lossless mode. Default is 0.

-compression_level integer

For lossy, this is a quality/speed tradeoff. Higher values give better quality for a given size at the cost of increased encoding time. For lossless, this is a size/speed tradeoff. Higher values give smaller size at the cost of increased encoding time. More specifically, it controls the number of extra algorithms and compression tools used, and varies the combination of these tools. This maps to the method option in libwebp. The valid range is 0 to 6. Default is 4.

-quality float

For lossy encoding, this controls image quality. For lossless encoding, this controls the effort and time spent in compression. Range is 0 to 100. Default is 75.

-preset type

Configuration preset. This does some automatic settings based on the general type of the image.

none

Do not use a preset.

default

Use the encoder default.

picture

Digital picture, like portrait, inner shot

photo

Outdoor photograph, with natural lighting

drawing

Hand or line drawing, with high-contrast details

icon

Small-sized colorful images

text

Text-like

16.15 libx264, libx264rgb

x264 H.264/MPEG-4 AVC encoder wrapper.

This encoder requires the presence of the libx264 headers and library during configuration. You need to explicitly configure the build with --enable-libx264.

libx264 supports an impressive number of features, including 8x8 and 4x4 adaptive spatial transform, adaptive B-frame placement, CAVLC/CABAC entropy coding, interlacing (MBAFF), lossless mode, psy optimizations for detail retention (adaptive quantization, psy-RD, psy-trellis).

Many libx264 encoder options are mapped to FFmpeg global codec options, while unique encoder options are provided through private options. Additionally the x264opts and x264-params private options allows one to pass a list of key=value tuples as accepted by the libx264 x264_param_parse function.

The x264 project website is at http://www.videolan.org/developers/x264.html.

The libx264rgb encoder is the same as libx264, except it accepts packed RGB pixel formats as input instead of YUV.

16.15.1 Supported Pixel Formats

x264 supports 8- to 10-bit color spaces. The exact bit depth is controlled at x264’s configure time.

16.15.2 Options

The following options are supported by the libx264 wrapper. The x264-equivalent options or values are listed in parentheses for easy migration.

为了减少文档的重复,这里仅记录私有选项和其他一些需要特别注意的选项。有关未记录的通用选项的文档,请参阅 “编解码器选项”一章

要获取有关 libx264 选项的更准确和更广泛的文档,请调用该命令x264 --fullhelp或查阅 libx264 文档。

b (bitrate)

设置比特率(以位/秒为单位)。请注意 FFmpeg 的选项以位/秒表示,而x264s比特率单位为千比特/秒。

bf (bframes)
g (keyint)
qmin (qpmin)

最小量化器比例。

qmax (qpmax)

最大量化器比例。

qdiff (qpstep)

量化器尺度之间的最大差异。

qblur (qblur)

量化曲线模糊

qcomp (qcomp)

量化曲线压缩因子

refs (ref)

每个 P 帧可以使用的参考帧数。范围是0-16

level (level)

如果值为正则设置x264_param_t.i_level_idc该值,否则忽略。

该值可以使用AVCodecContextAPI 设置(例如,通过AVCodecContext直接设置该值),并指定为映射到相应级别的整数(例如,值 31 映射到 H.264 级别 IDC“3.1”,如表中所定义x264_levels ) 。当设置为非正值时,它会被忽略。

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

sc_threshold (scenecut)

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

trellis (trellis)

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

nr (nr)
me_range (merange)

运动搜索的最大范围(以像素为单位)。

me_method (me)

设置运动估计方法。按速度降序排列的可能值:

dia (dia)
epzs (dia)

半径为 1 的菱形搜索(最快)。'出口处' 是 ' 的别名直径'。

hex (hex)

半径为 2 的六边形搜索。

umh (umh)

不均匀的多六边形搜索。

esa (esa)

详尽的搜索。

tesa (tesa)

Hadamard 穷举搜索(最慢)。

forced-idr

通常,当强制I帧类型时,编码器可以选择任何类型的I帧。此选项强制它选择 IDR 帧。

subq (subme)

亚像素运动估计方法。

b_strategy (b-adapt)

自适应 B 帧放置决策算法。仅在第一次通过时使用。

keyint_min (min-keyint)

最小 GOP 大小。

coder

设置熵编码器。可能的值:

ac

启用 CABAC。

vlc

启用 CAVLC 并禁用 CABAC。x264它产生与s相同的效果 --无卡巴克选项。

cmp

设置全像素运动估计比较算法。可能的值:

chroma

在运动估计中启用色度。

sad

忽略运动估计中的色度。x264它产生与s相同的效果 --无色度我选项。

threads (threads)

编码线程数。

thread_type

设置多线程技术。可能的值:

slice

基于切片的多线程。x264它产生与s相同的效果 --切片线程选项。

frame

基于帧的多线程。

flags

设置编码标志。它可用于禁用封闭 GOP 并通过将其设置为 来启用开放 GOP -cgop。结果类似于 的x264行为--open-gop选项。

rc_init_occupancy (vbv-init)
preset (preset)

设置编码预设。

tune (tune)

设置编码参数的调整。

profile (profile)

设置个人资料限制。

fastfirstpass

编码第一遍时启用快速设置,设置为1时。设置为0时,与 的效果x264相同 --慢速优先选项。

crf (crf)

设置恒定质量模式的质量。

crf_max (crf-max)

在 CRF 模式下,防止 VBV 降低质量超过此点。

qp (qp)

设置恒定量化率控制方法参数。

aq-mode (aq-mode)

设置 AQ 方法。可能的值:

none (0)

残疾人。

variance (1)

方差 AQ(复杂性掩模)。

autovariance (2)

自方差 AQ(实验)。

aq-strength (aq-strength)

设置 AQ 强度,减少平坦和纹理区域的遮挡和模糊。

psy

x264设置为1时使用心理视觉优化。设置为0时与 的效果相同--无精神选项。

psy-rd (psy-rd)

设置心理视觉优化的强度,采用 psy-rd : psy-trellis格式。

rc-lookahead (rc-lookahead)

设置帧数以预测帧类型和速率控制。

weightb

设置为1时启用B帧的加权预测。设置为0时,与 的效果x264相同--无权重b选项。

weightp (weightp)

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

none (0)

残疾人

simple (1)

仅启用加权参考

smart (2)

启用加权参考和重复项

ssim (ssim)

编码后启用计算和打印 SSIM 统计信息。

intra-refresh (intra-refresh)

当设置为 1 时,启用定期帧内刷新而不是 IDR 帧。

avcintra-class (class)

配置编码器以生成 AVC-Intra。有效值为 50,100 和 200

bluray-compat (bluray-compat)

配置编码器以兼容蓝光标准。它是设置“bluray-compat=1force-cfr=1”的简写。

b-bias (b-bias)

设置对 B 帧使用频率的影响。

b-pyramid (b-pyramid)

设置保留某些 B 帧作为参考的方法。可能的值:

none (none)

残疾人。

strict (strict)

严格的等级金字塔。

normal (normal)

非严格(不兼容蓝光)。

mixed-refs

启用每个分区使用一个引用,而不是设置为 1 时每个宏块使用一个引用。设置为 0 时,与 的效果x264相同--无混合参考选项。

8x8dct

设置为 1 时启用自适应空间变换(高调 8x8 变换)。设置为 0 时与 的效果 x264相同--no-8x8dct选项。

fast-pskip

设置为 1 时,启用 P 帧的早期 SKIP 检测。设置为 0 时,与 的效果x264相同 --无快速 pskip选项。

aud (aud)

设置为 1 时启用访问单元分隔符。

mbtree

设置为 1 时启用使用宏块树速率控制。设置为 0 时与 的效果x264相同 --无mbtree选项。

deblock (deblock)

设置环路滤波器参数,采用alpha : beta形式。

cplxblur (cplxblur)

设置 QP 的波动减少(曲线压缩之前)。

partitions (partitions)

将分区设置为以逗号分隔的列表。列表中可能的值:

p8x8

8x8 P 型框架分区。

p4x4

4x4 P 型框架分区。

b8x8

4x4 B 型框架隔断。

i8x8

8x8 I 框架分区。

i4x4

4x4 I 帧分区。(启用 'p4x4'需要'p8x8' 被启用。启用'i8x8' 需要自适应空间变换(8x8dct 选项)被启用。)

none (none)

不考虑任何分区。

all (all)

考虑每个分区。

direct-pred (direct)

设置直接 MV 预测模式。可能的值:

none (none)

禁用 MV 预测。

spatial (spatial)

启用空间预测。

temporal (temporal)

启用时间预测。

auto (auto)

自动决定。

slice-max-size (slice-max-size)

设置每个片的大小限制(以字节为单位)。如果未指定,但 RTP 负载大小(附注) 被指定,即被使用。

stats (stats)

设置多通道统计数据的文件名。

nal-hrd (nal-hrd)

设置信号 HRD 信息(需要vbv 缓冲区大小要设置)。可能的值:

none (none)

禁用 HRD 信息信号。

vbr (vbr)

可变比特率。

cbr (cbr)

恒定比特率(MP4 容器中不允许)。

x264opts (N.A.)

设置任何 x264 选项,请参阅x264 --fullhelp参考资料 的列表。

参数是由“:”分隔的=对的列表。在使用“:”作为分隔符本身的过滤器psy-rd选项中,请改用“,”。他们很久以前也接受它,但由于某种原因,这没有记录下来。

例如,使用以下命令指定 libx264 编码选项ffmpeg

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

将隐藏式字幕(必须是 ATSC 兼容格式)导入到输出中。只有 mpeg2 和 h264 解码器提供这些。默认值为 1(打开)。

udu_sei boolean

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

mb_info boolean

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

x264-params (N.A.)

使用 :-分隔的 key=value 参数列表覆盖 x264 配置。

该选项的功能与x264选项,但为了与 Libav 分支兼容而重复。

例如,使用以下命令指定 libx264 编码选项ffmpeg

ffmpeg -i INPUT -c:v libx264 -x264-params level=30:bframes=0:weightp=0:\
cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000:analyse=all:me=umh:\
no-fast-pskip=1:subq=6:8x8dct=0:trellis=0 OUTPUT

提供了常见用途的编码 ffpresets,以便它们可以与通用预设系统一起使用(例如,传递选项)。

16.16 libx265

x265 H.265/HEVC 编码器包装器。

该编码器需要在配置期间存在 libx265 标头和库。您需要显式配置构建 --启用-libx265

16.16.1 选项

b

设置目标视频比特率。

bf
g

设置 GOP 大小。

keyint_min

最小 GOP 大小。

refs

每个 P 帧可以使用的参考帧数。范围为1-16

preset

设置 x265 预设。

tune

设置 x265 调谐参数。

profile

设置个人资料限制。

crf

设置恒定质量模式的质量。

qp

设置恒定量化率控制方法参数。

qmin

最小量化器比例。

qmax

最大量化器比例。

qdiff

量化器尺度之间的最大差异。

qblur

量化曲线模糊

qcomp

量化曲线压缩因子

i_qfactor
b_qfactor
forced-idr

通常,当强制I帧类型时,编码器可以选择任何类型的I帧。此选项强制它选择 IDR 帧。

udu_sei boolean

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

x265-params

使用以“:”分隔的=对列表设置 x265 选项。请参阅x265 --help参考资料 中的选项列表。

例如,指定 libx265 编码选项-x265-参数:

ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4

16.17 libxavs2

xavs2 AVS2-P2/IEEE1857.4 编码器包装器。

该编码器需要在配置期间存在 libxavs2 标头和库。您需要显式配置构建 --启用-libxavs2

使用以下标准 libavcodec 选项:

  • /比特率
  • G/组大小
  • 男朋友/最大b帧数

编码器还有自己的特定选项:

16.17.1 选项

lcu_row_threads

设置行的并行线程数从 1 到 8(默认 5)。

initial_qp

将 xavs2 量化参数设置为 1 到 63(默认 34)。这用于设置第一帧的初始 qp。

qp

将 xavs2 量化参数设置为 1 到 63(默认 34)。用于设置恒定 QP 模式下的 qp 值。

max_qp

将速率控制的最大 qp 设置为从 1 到 63(默认为 55)。

min_qp

将速率控制的最小 qp 设置为 1 到 63(默认 20)。

speed_level

将速度级别设置为 0 到 9(默认 0)。越高越好但越慢。

log_level

将日志级别设置为 -1 到 3(默认 0)。-1:无,0:错误,1:警告,2:信息,3:调试。

xavs2-params

使用以“:”分隔的 =对列表设置 xavs2 选项。

例如,指定 libxavs2 编码选项-xavs2-参数:

ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2

16.18 libxvid

Xvid MPEG-4 第 2 部分编码器包装器。

该编码器需要在配置期间存在 libxvidcore 标头和库。您需要使用 显式配置构建 --enable-libxvid --enable-gpl

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

16.18.1 选项

libxvid 包装器支持以下选项。以下一些选项已列出但未记录,并且对应于共享编解码器选项。请参阅“编解码器选项”一章以获取其文档。未列出的其他共享选项对 libxvid 编码器没有影响。

b
g
qmin
qmax
mpeg_quant
threads
bf
b_qfactor
b_qoffset
flags

设置特定的编码标志。可能的值:

mv4

按宏块使用四个运动矢量。

aic

启用高质量 AC 预测。

gray

仅编码灰度。

gmc

启用全局运动补偿 (GMC)。

qpel

启用四分之一像素运动补偿。

cgop

启用封闭式 GOP。

global_header

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

trellis
me_quality

设置运动估计质量级别。按速度降序和质量升序排列的可能值:

0

不使用运动估计(默认)。

1, 2

启用 16x16 块的高级菱形区域搜索和 16x16 块的半像素细化。

3, 4

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

5, 6

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

mbd

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

simple

使用宏块比较函数算法(默认)。

bits

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

rd

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

lumi_aq

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

variance_aq

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

当与亮度_aq,所得质量不会优于单独指定的两个质量中的任何一个。换句话说,产生的质量将是两种效果中最差的一种。

ssim

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

off

禁用显示 SSIM 信息。

avg

编码结束时将平均 SSIM 输出到标准输出。显示平均 SSIM 的格式为:

Average SSIM: %f

对于不熟悉 C 的用户,%f 表示浮点数或小数(例如 0.939232)。

frame

将编码期间的每帧 SSIM 数据和编码结束时的平均 SSIM 数据输出到 stdout。每帧信息的格式为:

       SSIM: avg: %1.3f min: %1.3f max: %1.3f

对于不熟悉 C 的用户,%1.3f 表示一个浮点数,在点后四舍五入到 3 位数字(例如 0.932)。

ssim_acc

设置 SSIM 精度。有效选项是 0-4 范围内的整数,其中 0 给出最准确的结果,4 计算最快。

16.19 MediaFoundation

这为 MediaFoundation 框架中的编码器(音频和视频)提供了包装器。它可以访问软件和硬件编码器。视频编码器可以采用 nv12 或 yuv420p 形式输入(有些编码器支持两者,有些编码器仅支持其中之一 - 实际上,nv12 是更安全的选择,尤其是在硬件编码器中)。

16.20 Microsoft RLE

Microsoft RLE 又名 MSRLE 编码器。仅支持 8 位调色板模式。与Windows 3.1和Windows 95兼容。

16.20.1 选项

g integer

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

16.21 mpeg2

MPEG-2 视频编码器。

16.21.1 选项

profile

选择要编码的 mpeg2 配置文件:

422
high
ss

空间可扩展

snr

信噪比可扩展

main
simple
level

选择要编码的 mpeg2 级别:

high
high1440
main
low
seq_disp_ext integer

指定编码器是否应将sequence_display_extension写入输出。

-1
auto

通过检查要写入的数据是否与默认值或未指定的值不同来自动决定是否写入(这是默认值)。

0
never

永远不要写它。

1
always

总是写它。

video_format integer

指定写入序列显示扩展的 video_format ,指示视频图片的来源。默认为 '未指定', 可 '成分','朋友','NTSC','塞卡姆' 或者 '苹果'。为了获得最大的兼容性,请使用 '成分'。

a53cc boolean

将隐藏式字幕(必须是 ATSC 兼容格式)导入到输出中。默认值为 1(打开)。

16.22 png

PNG 图像编码器。

16.22.1 私有选项

dpi integer

设置像素的物理密度,以每英寸点数为单位,默认未设置

dpm integer

设置像素的物理密度,以每米点数为单位,默认未设置

16.23 ProRes

Apple ProRes 编码器。

FFmpeg 包含 2 个 ProRes 编码器,即 prores-aw 和 prores-ks 编码器。可以通过选项选择所使用的编码器-vcodec

16.23.1 prores-ks 的私有选项

profile integer

选择要编码的 ProRes 配置文件

proxy
lt
standard
hq
4444
4444xq
quant_mat integer

选择量化矩阵。

auto
default
proxy
lt
standard
hq

如果设置为auto,将选择与配置文件匹配的矩阵。如果未设置,将选择 提供最高质量的矩阵(默认) 。

bits_per_mb integer

为编码一个宏块分配多少位。不同的配置文件每个宏块使用 200 到 2400 位,最大值为 8000。

mbs_per_slice integer

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

vendor string

覆盖 4 字节供应商 ID。像apl0这样的自定义供应商 ID会声称该流是由 Apple 编码器生成的。

alpha_bits integer

指定 alpha 分量的位数。可能的值为0、816。使用0禁用 alpha 平面编码。

16.23.2 速度考虑因素

在默认操作模式下,编码器必须遵守帧约束(即不生成尺寸大于请求的帧),同时仍然使输出图像尽可能好。包含大量小细节的帧更难压缩,编码器将花费更多时间为每个切片搜索合适的量化器。

设置更高每MB位数限制会提高速度。

为了获得最快的编码速度,请设置质量尺度参数(4为推荐值)并且不设置大小限制。

16.24 QSV Encoders

英特尔 QuickSync 视频编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)

16.24.1 码率控制方法

码率控制方法选择如下:

  • 什么时候全局质量指定后,将使用基于质量的模式。具体来说,这意味着
    • - CQP - 恒定量化器比例,当质量尺度编解码器标志也被设置(-qscaleffmpeg 选项)。
    • - LA_ICQ - 具有前瞻性的智能恒定质量,当 展望选项也已设置。
    • - ICQ – 智能恒定质量否则。对于 ICQ 模式,全局质量范围为 1 到 51,其中 1 为最佳质量。
  • 否则,使用基于比特率的模式。对于所有这些,您应该至少指定所需的平均比特率选项。
    • - LA - 带前瞻的 VBR,当展望选项已指定。
    • - VCM - 视频会议模式,当氯乙烯选项已设置。
    • - CBR - 恒定比特率,当最大速率被指定并等于平均比特率。
    • - VBR - 可变比特率,当最大速率已指定,但高于平均比特率。
    • - AVBR - 平均VBR模式,当最大速率未指定,两者 avbr_准确度avbr_收敛被设置为非零。此模式适用于 Windows 上的 H264 和 HEVC。

请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。将详细级别设置为详细或更高,以查看 QSV 运行时使用的实际设置。

16.24.2 全局选项->MSDK 选项

其他 libavcodec 全局选项映射到 MSDK 选项,如下所示:

  • g/gop_size->图像大小
  • bf/最大b帧数+1 ->GopRefDist
  • rc_init_ocpancy/rc_initial_buffer_ocpancy-> 初始延迟(KB)
  • 切片->切片数量
  • 参考文献->参考帧数
  • b_strategy/b_frame_strategy->B参考类型
  • cgop/CLOSED_GOP编解码器标志 ->选区选择标志
  • 对于CQP模式,i_qfactor/i_qoffsetb_qfactor/b_qoffset分别设置QPPQPI以及QPPQPB之间的差值。
  • 设置编码员vlc的选项将使 H.264 编码器使用 CAVLC 而不是 CABAC。

16.24.3 常用选项

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

async_depth

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

preset

此选项列出了从非常快(最佳速度)到非常慢(最佳质量)的一系列选择。

veryfast
faster
fast
medium
slow
slower
veryslow
forced_idr

强制 I 帧作为 IDR 帧。

low_power

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

16.24.4 运行时选项

在 qsv 编码过程中可以使用以下选项。

global_quality
i_quant_factor
i_quant_offset
b_quant_factor
b_quant_offset

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

max_frame_size

h264_qsv 和 hevc_qsv 支持。更改此值可重置 qsv 编解码器的 MaxFrameSize 配置。

gop_size

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

int_ref_type
int_ref_cycle_size
int_ref_qp_delta
int_ref_cycle_dist

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

qmax
qmin
max_qp_i
min_qp_i
max_qp_p
min_qp_p
max_qp_b
min_qp_b

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

low_delay_brc

在 h264_qsv、hevc_qsv 和 av1_qsv 中受支持。更改此值可重置 qsv 编解码器的 low_delay_brc 配置。

framerate

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

bit_rate
rc_buffer_size
rc_initial_buffer_occupancy
rc_max_rate

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

pic_timing_sei

h264_qsv 和 hevc_qsv 支持。更改此值可重置 qsv 编解码器的 pic_timing_sei 配置。

16.24.5 H264 选项

这些选项由 h264_qsv 使用

extbrc

扩展比特率控制。

recovery_point_sei

设置此标志以在每个内部刷新周期开始时插入恢复点 SEI 消息。

rdo

启用速率失真优化。

max_frame_size

最大编码帧大小(以字节为单位)。

max_frame_size_i

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

max_frame_size_p

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

max_slice_size

最大编码切片大小(以字节为单位)。

bitrate_limit

切换比特率限制。将比特率修改为 QSV 编码器规定的范围内。关闭此标志可能会导致违反 HRD 一致性。请注意,指定低于 QSV 编码器范围的比特率可能会显着影响质量。如果此选项在非 CQP 模式下生效:如果比特率不在 QSV 编码器规定的范围内,则会将其更改为在该范围内。

mbbrc

设置此标志可以启用宏块级比特率控制,通常可以提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。

low_delay_brc

设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启

adaptive_i

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

adaptive_b

该标志控制帧类型从 B 到 P 的更改。

p_strategy

启用P金字塔:0-默认1-简单2-金字塔(bf需要设置为0)。

b_strategy

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

dblk_idc

此选项禁用解块。其取值范围为0~2。

cavlc

如果设置,则使用 CAVLC;如果未设置,则使用 CABAC 进行编码。

vcm

视频会议模式,请参见码率控制方法。

idr_interval

IDR 帧之间的距离(以 I 帧为单位)。

pic_timing_sei

使用 pic_struct_syntax 元素插入图片时序 SEI。

single_sei_nal_unit

将所有SEI消息放入一个NALU中。

max_dec_frame_buffering

DPB 中缓冲的最大帧数。

look_ahead

使用带有前瞻功能的 VBR 算法。

look_ahead_depth

数字框架中的前瞻性深度。

look_ahead_downsampling

为前瞻分析而保存的帧的缩小因子。

unknown
auto
off
2x
4x
int_ref_type

指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会对 I 帧引起的编码比特流大小产生重大影响。SDK 编码器通过使用帧内 MB 在刷新周期中对每帧的一部分进行编码来实现此目的。none表示不刷新。Vertical表示垂直刷新,以 MB 为单位。Horizo​​ntal表示水平刷新,以 MB 行为单位。slice表示按切片水平刷新,不重叠。对于slice, in_ref_cycle_size 被忽略。要启用帧内刷新,B 帧应设置为 0。

int_ref_cycle_size

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

int_ref_qp_delta

指定插入的帧内 MB 的 QP 差异。如果亮度样本的目标编码位深度为 8,则此范围为 [-51, 51] 范围内的有符号值,并且此范围为 [-63, 63](对于 10 位深度)或 [-75, 75](对于 12 位深度)分别。

int_ref_cycle_dist

帧内刷新周期开始之间的距离(以帧为单位)。

profile
unknown
baseline
main
high
a53cc

使用 A53 隐藏式字幕(如果有)。

aud

插入访问单元分隔符 NAL。

mfmode

多帧模式。

off
auto
repeat_pps

对每一帧重复 pps。

max_qp_i

I 帧的最大视频量化器比例。

min_qp_i

I 帧的最小视频量化器比例。

max_qp_p

P 帧的最大视频量化器比例。

min_qp_p

P 帧的最小视频量化器比例。

max_qp_b

B 帧的最大视频量化器比例。

min_qp_b

B 帧的最小视频量化器比例。

scenario

向编码器提供有关编码会话场景的提示。

unknown
displayremoting
videoconference
archive
livestreaming
cameracapture
videosurveillance
gamestreaming
remotegaming
avbr_accuracy

AVBR 速率控制的精度(单位为百分之十分之一)。

avbr_convergence

AVBR速率控制的收敛(以100帧为单位)

参数avbr_accuracyavbr_convergence用于平均可变比特率控制 (AVBR) 算法。该算法侧重于整体编码质量,同时在avbr_Convergence周期后满足精度范围avbr_accuracy内指定的比特率target_bitrate。此方法不遵循 HRD,并且即时比特率不会受到限制或填充。

skip_frame

使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的用途。

no_skip

跳帧被禁用。

insert_dummy

编码器插入比特流帧,其中所有宏块都被编码为跳过。

insert_nothing

与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳帧仍然在brc中使用。例如,gop仍然包含跳帧,并且跳帧之后的帧尺寸会更大。

brc_only

Skip_frame元数据指示当前帧之前丢失的帧的数量。

16.24.6 HEVC 选项

这些选项由 hevc_qsv 使用

extbrc

扩展比特率控制。

recovery_point_sei

设置此标志以在每个内部刷新周期开始时插入恢复点 SEI 消息。

rdo

启用速率失真优化。

max_frame_size

最大编码帧大小(以字节为单位)。

max_frame_size_i

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

max_frame_size_p

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

max_slice_size

最大编码切片大小(以字节为单位)。

mbbrc

设置此标志可以启用宏块级比特率控制,通常可以提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。

low_delay_brc

设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启

adaptive_i

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

adaptive_b

该标志控制帧类型从 B 到 P 的更改。

p_strategy

启用P金字塔:0-默认1-简单2-金字塔(bf需要设置为0)。

b_strategy

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

dblk_idc

此选项禁用解块。其取值范围为0~2。

idr_interval

IDR 帧之间的距离(以 I 帧为单位)。

begin_only

仅在流的开头输出 IDR 帧。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

:-要在内部会话中加载的十六进制插件 UID 的单独列表。

look_ahead_depth

数帧中的前瞻深度,在启用 extbrc 选项时可用。

profile

设置编码配置文件(scc 需要 libmfx >= 1.32)。

unknown
main
main10
mainsp
rext
scc
tier

设置编码层(只有级别 >= 4 才能支持高层)。该选项仅在指定 level 选项时生效。

main
high
gpb

1:GPB(广义P/B框架)

0:常规P帧。

tile_cols

平铺编码的列数。

tile_rows

平铺编码的行数。

aud

插入访问单元分隔符 NAL。

pic_timing_sei

使用 pic_struct_syntax 元素插入图片时序 SEI。

transform_skip

打开此选项以启用 Transformskip。它在等于或更新于 ICL 的平台上受支持。

int_ref_type

指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会对 I 帧引起的编码比特流大小产生重大影响。SDK 编码器通过使用帧内 MB 在刷新周期中对每帧的一部分进行编码来实现此目的。none表示不刷新。Vertical表示垂直刷新,以 MB 为单位。Horizo​​ntal表示水平刷新,以 MB 行为单位。slice表示按切片水平刷新,不重叠。对于slice, in_ref_cycle_size 被忽略。要启用帧内刷新,B 帧应设置为 0。

int_ref_cycle_size

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

int_ref_qp_delta

指定插入的帧内 MB 的 QP 差异。如果亮度样本的目标编码位深度为 8,则此范围为 [-51, 51] 范围内的有符号值,并且此范围为 [-63, 63](对于 10 位深度)或 [-75, 75](对于 12 位深度)分别。

int_ref_cycle_dist

帧内刷新周期开始之间的距离(以帧为单位)。

max_qp_i

I 帧的最大视频量化器比例。

min_qp_i

I 帧的最小视频量化器比例。

max_qp_p

P 帧的最大视频量化器比例。

min_qp_p

P 帧的最小视频量化器比例。

max_qp_b

B 帧的最大视频量化器比例。

min_qp_b

B 帧的最小视频量化器比例。

scenario

向编码器提供有关编码会话场景的提示。

unknown
displayremoting
videoconference
archive
livestreaming
cameracapture
videosurveillance
gamestreaming
remotegaming
avbr_accuracy

AVBR 速率控制的精度(单位为百分之十分之一)。

avbr_convergence

AVBR速率控制的收敛(以100帧为单位)

参数avbr_accuracyavbr_convergence用于平均可变比特率控制 (AVBR) 算法。该算法侧重于整体编码质量,同时在avbr_Convergence周期后满足精度范围avbr_accuracy内指定的比特率target_bitrate。此方法不遵循 HRD,并且即时比特率不会受到限制或填充。

skip_frame

使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义此元数据的用途。

no_skip

跳帧被禁用。

insert_dummy

编码器插入比特流帧,其中所有宏块都被编码为跳过。

insert_nothing

与 insert_dummy 类似,但编码器不向比特流中插入任何内容。跳帧仍然在brc中使用。例如,gop仍然包含跳帧,并且跳帧之后的帧尺寸会更大。

brc_only

Skip_frame元数据指示当前帧之前丢失的帧的数量。

16.24.7 MPEG2 选项

这些选项由 mpeg2_qsv 使用

profile
unknown
simple
main
high

16.24.8 VP9 选项

这些选项由 vp9_qsv 使用

profile
unknown
profile0
profile1
profile2
profile3
tile_cols

平铺编码的列数(需要 libmfx >= 1.29)。

tile_rows

平铺编码的行数(需要 libmfx >= 1.29)。

16.24.9 AV1 选项

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

profile
unknown
main
tile_cols

平铺编码的列数。

tile_rows

平铺编码的行数。

adaptive_i

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

adaptive_b

该标志控制帧类型从 B 到 P 的更改。

b_strategy

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

extbrc

扩展比特率控制。

look_ahead_depth

数帧中的前瞻深度,在启用 extbrc 选项时可用。

low_delay_brc

设置此标志可打开或关闭 qsv 插件中的 LowDelayBRC 功能,该功能提供更准确的比特率控制,以最大限度地减少逐帧比特流大小的差异。值:-1-默认 0-关闭 1-开启

max_frame_size

设置每个帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值来控制帧大小。在CQP码率控制模式下无效。

16.25 snow

16.25.1 选项

iterative_dia_size

用于迭代运动估计的直径大小

16.26 VAAPI encoders

可通过 VAAPI 访问的硬件编码器的包装器。

这些编码器仅接受 VAAPI 硬件表面中的输入。如果您在软件框架中有输入,请使用上传过滤器将它们上传到 GPU。

使用以下标准 libavcodec 选项:

  • G/组大小
  • 男朋友/最大b帧数
  • 轮廓

    如果未设置,这将根据输入帧的格式和驱动程序支持的配置文件自动确定。

  • 等级
  • /比特率
  • 最大速率/最大速率
  • 缓冲区大小/rc_buffer_size
  • rc_init_占用/rc_initial_buffer_占用
  • 压缩级别

    速度/质量权衡:值越高,速度越快/质量越差。

  • q/全局质量

    尺寸/质量权衡:值越高,质量越小/质量越差。

  • 最小q值
  • 最大q值
  • i_q因子/i_量化因子
  • i_qoffset/i_quant_偏移量
  • b_q因子/b_量化因子
  • b_qoffset/b_quant_offset
  • 切片

所有编码器都支持以下选项:

low_power

某些驱动程序/平台为某些编解码器提供第二个编码器,旨在使用比默认编码器更少的功率;设置此选项将尝试使用该编码器。请注意,它可能支持减少的功能集,因此某些其他选项在此模式下可能不可用。

idr_interval

设置开放 GOP 模式下完全刷新 (IDR) 帧之间的正常帧内帧数。帧内帧仍然是 IRAP,但不包括全局标头,并且可能具有不可解码的前导图片。

b_depth

设置 B 帧参考深度。当设置为 1(默认值)时,所有 B 帧将仅引用 P 或 I 帧。当设置为更大的值时,将出现多层 B 帧,每层中的帧仅引用更高层中的帧。

async_depth

最大处理并行度。增加此值可提高单通道性能。如果驱动程序未实现 vaSyncBuffer 函数,则此选项不起作用。如果使用大量async_depth,请确保分配足够的hw_frames。

max_frame_size

设置每个帧允许的最大大小(以字节为单位)。如果帧大小超过限制,编码器将调整 QP 值来控制帧大小。在CQP码率控制模式下无效。

rc_mode

设置要使用的速率控制模式。给定的驱动程序可能仅支持模式的子集。

可能的模式:

auto

根据驱动程序支持和其他选项自动选择模式。这是默认设置。

CQP

质量稳定。

CBR

恒定比特率。

VBR

可变比特率。

ICQ

智能恒品质。

QVBR

质量定义的可变比特率。

AVBR

平均可变比特率。

每个编码器还有其自己的特定选项:

av1_vaapi

轮廓设置seq_profile的值。 设置seq_tier的值。 等级设置seq_level_idx的值。

tiles

设置用于对输入视频进行编码的图块数量,如列 x 行。(默认为自动,这意味着使用最小的平铺列/行数)。

tile_groups

设置图块组数。所有图块将尽可能均匀地分布到每个图块组中。(默认值为 1)。

h264_vaapi

轮廓设置profile_idcconstraint_set*_flag的值。 等级设置level_idc的值。

coder

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

ac
cabac

使用 CABAC。

vlc
cavlc

使用 CAVLC。

aud

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

sei

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

identifier

包含包含有关编码器信息的 user_data_unregistered消息。

timing

包括图片定时参数(buffering_periodpic_timing消息)。

recovery_point

在适当的情况下包括恢复点(recovery_point消息)。

hevc_vaapi

轮廓等级分别设置general_profile_idcgeneral_level_idc的值 。

aud

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

tier

设置General_tier_flag。如果未明确指定,这可能会影响为流选择的级别。

sei

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

hdr

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

tiles

设置用于对输入视频进行编码的图块数量,如列 x 行。数字越大,编码和解码的并行性就越高,但可能会降低编码效率。

mjpeg_vaapi

仅支持基线 DCT 编码。编码器始终使用标准量化和霍夫曼表 -全局质量缩放标准量化表(范围 1-100)。

对于 YUV,支持 4:2:0、4:2:2 和 4:4:4 子采样模式。还支持 RGB,并将创建 RGB JPEG。

jfif

在每个帧中包含 JFIF 标头(默认情况下不包含)。

huffman

包括标准哈夫曼表(默认情况下打开)。关闭此功能将在每个输出帧中节省几百个字节,但可能会失去与某些不能完全处理 MJPEG 的 JPEG 解码器的兼容性。

mpeg2_vaapi

轮廓等级设置profile_and_level_inspiration的值。

vp8_vaapi

不支持 B 帧。

全局质量设置用于非关键帧的 q_idx (范围 0-127)。

loop_filter_level
loop_filter_sharpness

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

vp9_vaapi

全局质量设置用于 P 帧的 q_idx (范围 0-255)。

loop_filter_level
loop_filter_sharpness

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

支持 B 帧,但输出流始终按编码顺序而不是显示顺序。如果启用 B 帧,则可能需要使用vp9_raw_重新排序 比特流过滤器修改输出流以按正确的顺序显示帧。

只生产普通框架 -vp9_超帧可能需要比特流过滤器来产生可用于所有解码器的流。

16.27 vbn

Vizrt 二进制图像编码器。

广播供应商 Vizrt 使用此格式进行快速纹理流。不支持该格式的高级功能,例如纹理数据的 LZW 压缩或 mipmap 的生成。

16.27.1 选项

format string

设置 VBN 文件使用的纹理压缩。可以是dxt1dxt5raw。默认为dxt5

16.28 vc2

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

16.28.1 选项

b

设置目标视频比特率。通常约为未压缩视频比特率的 1:6(例如,对于 1920x1080 50fps yuv422p10,约为 400Mbps)。较高的值(接近未压缩的比特率)会打开无损压缩模式。

field_order

当隔行扫描输入设置(例如,tt - 顶场优先)时启用场编码。应增加隔行扫描内容的压缩,因为它会分割字段并分别对每个字段进行编码。

wavelet_depth

设置要应用的小波变换总量,介于 1 和 5 之间(默认)。较低的值会降低压缩率和质量。能力较差的解码器可能无法处理以下值小波深度超过3.

wavelet_type

设置变换类型。目前仅实现了5_3 (LeGall) 和9_7 (Deslauriers-Dubuc),其中 9_7 具有更好的压缩效果,因此是默认值。

slice_width
slice_height

设置每个切片的切片大小。值越大,压缩效果越好。为了与其他更有限的解码器兼容使用切片宽度32 和切片高度共 8 个。

tolerance

设置速率控制系统的下冲容差(以百分比为单位)。这是为了防止运行昂贵的搜索。

qm

设置默认情况下或在以下情况下使用的量化矩阵预设小波深度 设置为 5

  • -默认 使用规范中的默认量化矩阵,并使用第五级的值进行扩展。这在保留细节和忽略伪像之间提供了良好的平衡。
  • - flat 使用完全归零的量化矩阵。这会增加 PSNR,但可能会降低感知。用于虚假基准测试。
  • -颜色 减少细节,但尝试以极低的比特率保留颜色。

17 字幕编码器

17.1 dvdsub

此编解码器对 DVD 中使用的位图字幕格式进行编码。通常它们存储在 VOBSUB 文件对 (*.idx + *.sub) 中,也可以在 Matroska 文件中使用。

17.1.1 选项

palette

指定位图使用的全局调色板。

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

even_rows_fix

当设置为 1 时,启用一种解决方法,使所有字幕中的像素行数均匀。这解决了一些玩家在数字为奇数时切断底行的问题。如果需要,解决方法只是添加一个完全透明的行。开销很低,通常每个字幕平均一个字节。

默认情况下,此解决方法处于禁用状态。

18 个比特流过滤器

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

您可以使用configure 选项禁用所有比特流过滤器 --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

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

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

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

设置每张图片中的刻度数,以指示流具有固定的帧速率。忽略如果滴答率也没有设置。

delete_padding

删除填充 OBU。

18.3 chomp

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

18.4 dca_core

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

18.5 dump_extra

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

freq

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

k
keyframe

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

e
all

向所有数据包添加额外数据

如果未指定,则假定 'k'。

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

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

18.6 dv_error_marker

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

color

替换损坏块的颜色

sta

16 位掩码,指定 16 个可能的错误状态值中的哪一个将被彩色块替换。0xFFFE 是默认值,它替换所有非 0 错误状态值。

ok

没有错误,没有隐瞒

err

错误,无隐瞒

res

预订的

notok

错误或隐瞒

notres

不保留

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

具体错误状态码

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

18.7 eac3_core

从 E-AC-3 流中提取核心,丢弃额外的通道。

18.8 extract_extradata

提取带内额外数据。

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

该比特流过滤器检测带内标头并使它们可用作额外数据。

remove

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

18.9 filter_units

从流中删除类型属于或不属于给定集合的单元。

pass_types

删除所有其他内容时要通过的单位类型或单位类型范围的列表。这被指定为以“|”分隔的单位类型值列表或带有“-”的值范围。

remove_types

相同通行证类型,除了给定集合中的单位被删除并且所有其他单位都通过。

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

例如,要从 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

18.10 hapqa_extract

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

texture

指定要保留的纹理。

color
alpha

将 HAPQA 转换为 HAPQ

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

将 HAPQA 转换为 HAPAlphaOnly

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

18.11 h264_metadata

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

aud

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

pass
insert
remove

默认为通过。

sample_aspect_ratio

在 VUI 参数中设置流的样本宽高比。参见 H.264 表 E-1。

overscan_appropriate_flag

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

video_format
video_full_range_flag

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

colour_primaries
transfer_characteristics
matrix_coefficients

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

chroma_sample_loc_type

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

tick_rate

在 VUI 参数中设置刻度率 (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+string形式,其中 UUID 是可能用连字符分隔的十六进制数字,并且字符串可以是任何内容。

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

delete_filler

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

display_orientation

插入、提取或删除显示方向 SEI 消息。有关语法和语义,请参阅 H.264 第 D.1.27 和 D.2.27 节。

pass
insert
remove
extract

默认为通过。

rotate插入模式与和选项结合使用flip。任何预先存在的显示方向消息都将在插入或删除模式下删除。提取模式将显示矩阵作为辅助数据附加到数据包中。

rotate

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

flip

设置显示方向 SEI 翻转。

horizontal
vertical

默认值未设置。

level

在 SPS 中设置级别。请参阅 H.264 第 A.3 节和表 A-1 至 A-5。

参数必须是级别的名称(例如,'4.2'),一个 level_idc 值(例如,'42'), 或特殊名称 '汽车' 指示过滤器应尝试从输入流属性中猜测级别。

18.12 h264_mp4toannexb

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

这是某些流格式所必需的,通常是 MPEG-2 传输流格式(复用器mpegts)。

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

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

mpegts请注意,此过滤器是针对 MPEG-TS(复用器)和原始 H.264(复用器h264)输出格式 自动插入的 。

18.13 h264_redundant_pps

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

18.14 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节)。忽略如果滴答率也没有设置。

crop_left
crop_right
crop_top
crop_bottom

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

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

level

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

参数必须是级别的名称(例如,'5.1'), general_level_idc值(例如,'153' 对于级别 5.1),或特殊名称 '汽车' 指示过滤器应尝试从输入流属性中猜测级别。

18.15 hevc_mp4toannexb

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

这是某些流格式所必需的,通常是 MPEG-2 传输流格式(复用器mpegts)。

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

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

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

18.16 imxdump

修改比特流以适合 MOV 并可由 Final Cut Pro 解码器使用。此过滤器仅适用于 mpeg2video 编解码器,并且 Final Cut Pro 7 和更高版本可能不需要适当的 -标签:v

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

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

18.17 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

18.18 mjpegadump

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

18.19 mov2textsub

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

另请参见text2movsub过滤器。

18.20 mp3decomp

解压缩非标准压缩的 MP3 音频标头。

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

18.22 mpeg4_unpack_bframes

解压 DivX 风格的 B 帧。

DivX 风格的打包 B 帧不是有效的 MPEG-4,只是针对损坏的 Video for Windows 子系统的一种解决方法。它们使用更多的空间,可能会导致轻微的 AV 同步问题,需要更多的 CPU 能力来解码(除非播放器有一些解码的图像队列来补偿每数据包风格的 2,0,2,0 帧),并且如果复制到标准中会造成麻烦像 mp4 或 mpeg-ps/ts 这样的容器,因为 MPEG-4 解码器可能无法解码它们,因为它们不是有效的 MPEG-4。

例如,要使用 修复包含具有 DivX 样式打包 B 帧的 MPEG-4 流的 AVI 文件ffmpeg,您可以使用以下命令:

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

18.23 noise

损坏包装内的物品或只是将其掉落而不会损坏容器。可用于模糊测试或测试错误恢复/隐藏。

参数:

amount

接受一个表达式,其对每个数据包的评估确定该数据包中字节的修改频率。低于 0 的值将导致频率变化。默认值为 0,表示不进行任何修改。但是,如果未指定 amount 或 drop,则 amount 将设置为-1。请参阅下文了解可接受的变量。

drop

接受按数据包计算的表达式,其值确定该数据包是否被丢弃。评估为正值会导致数据包被丢弃。对负值的评估会导致其被丢弃的可能性不同,大致与该值的大小成反比。默认值为 0,这不会导致任何掉落。请参阅下文了解可接受的变量。

dropamount

接受一个非负整数,这会分配一个可变的被丢弃的机会,大致与该值成反比。默认值为 0,这不会导致任何掉落。保留此选项是为了向后兼容,相当于将 drop 设置为具有相同幅度的负值,即dropamount=4与 相同drop=-4。如果还指定了 drop,则忽略。

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

n

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

tb

数据包时间戳的时基。

pts

数据包呈现时间戳。

dts

数据包解码时间戳。

nopts

表示 AV_NOPTS_VALUE 的常量。

startpts

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

startdts

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

duration
d

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

pos

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

size

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

key

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

state

伪随机整数,主要源自数据包有效负载的内容。

18.23.1 示例

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

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

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

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

每 10 秒删除一秒音频,并向其余音频添加一些随机噪音。

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

18.24 null

该比特流过滤器将数据包原封不动地通过。

18.25 pcm_rechunk

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

nb_out_samples, n

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

pad, p

如果设置为 1,过滤器将用静音填充最后一个音频数据包,以便它将包含相同数量的样本(或大致相同数量的样本,请参阅帧率) 和前面的一样。默认值为 1。

frame_rate, r

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

您可以使用以下命令生成众所周知的 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 -

18.26 pgs_frame_merge

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

这是某些支持 PGS 字幕的容器(muxer matroska)所必需的。

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

英国电信 601、英国电信 709、英国电信 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

18.28 remove_extra

从数据包中删除额外数据。

它接受以下参数:

freq

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

k

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

keyframe

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

e, all

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

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

18.30 text2movsub

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

另请参见mov2textsub过滤器。

18.31 trace_headers

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

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

18.32 truehd_core

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

18.33 vp9_metadata

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

color_space

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

unknown
bt601
bt709
smpte170
smpte240
bt2020
rgb
color_range

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

tv
pc

18.34 vp9_superframe

将 VP9 不可见(alt-ref)帧合并回 VP9 超帧。这修复了分割/分段 VP9 流的合并,其中 alt-ref 帧与其可见对应帧分开。

18.35 vp9_superframe_split

将 VP9 超帧拆分为单个帧。

18.36 vp9_raw_reorder

给定具有正确时间戳但可能无序的 VP9 流,请插入额外的 show-existing-frame 数据包以纠正顺序。

19 格式选项

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

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

支持的选项列表如下:

avioflags flags (input/output)

可能的值:

direct

减少缓冲。

probesize integer (input)

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

max_probe_packets integer (input)

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

packetsize integer (output)

设置数据包大小。

fflags flags

设置格式标志。有些是针对有限数量的格式实现的。

输入文件的可能值:

discardcorrupt

丢弃损坏的数据包。

fastseek

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

genpts

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

igndts

如果设置了 PTS,则忽略 DTS。nofillin 凝固后呈惰性。

ignidx

忽略索引。

nobuffer

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

nofillin

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

noparse

禁用 AVParsers,这+nofillin也是需要的。

sortdts

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

输出文件的可能值:

autobsf

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

bitexact

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

flush_packets

立即写出数据包。

shortest

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

seek2any integer (input)

如果设置为 1,则允许在支持时在分路器级别上查找非关键帧。默认值为 0。

analyzeduration integer (input)

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

cryptokey hexadecimal string (input)

设置解密密钥。

indexmem integer (input)

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

rtbufsize integer (input)

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

fdebug flags (input/output)

打印具体的调试信息。

可能的值:

ts
max_delay integer (input/output)

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

fpsprobesize integer (input)

设置用于探测 fps 的帧数。

audio_preload integer (output)

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

chunk_duration integer (output)

为每个块设置微秒。

chunk_size integer (output)

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

err_detect, f_err_detect flags (input)

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

可能的值:

crccheck

验证嵌入的 CRC。

bitstream

检测比特流规范偏差。

buffer

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

explode

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

careful

考虑那些违反规范并且在野外未被视为错误的事情。

compliant

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

aggressive

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

max_interleave_delta integer (output)

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

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

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

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

use_wallclock_as_timestamps integer (input)

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

avoid_negative_ts integer (output)

可能的值:

make_non_negative

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

make_zero

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

auto (default)

在目标格式需要时启用转换。

disabled

禁用时间戳移位。

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

skip_initial_bytes integer (input)

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

correct_ts_overflow integer (input)

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

flush_packets integer (output)

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

output_ts_offset offset (output)

设置输出时间偏移。

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

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

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

format_whitelist list (input)

“,”分隔允许的多路分配器列表。默认情况下,所有内容都是允许的。

dump_separator string (input)

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

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

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

skip_estimate_duration_from_pts bool (input)

使用 PTS 计算时跳过输入持续时间的估计。目前适用于MPEG-PS 和MPEG-TS。

strict, f_strict integer (input/output)

指定如何严格遵守标准。f_strict已弃用,只能通过该ffmpeg工具使用。

可能的值:

very

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

strict

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

normal
unofficial

允许非官方扩展

experimental

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

19.1 Format stream specifiers

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

流说明符的确切语义是由 avformat_match_stream_specifier()libavformat/avformat.h标头并记录在 ffmpeg(1) 手册的 (ffmpeg)Stream 说明符部分中

20 个解复用器

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

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

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

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

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

20.1 aa

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

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

20.2 aac

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

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

20.3 apng

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

This demuxer is used to demux APNG files. All headers, but the PNG signature, up to (but not including) the first fcTL chunk are transmitted as extradata. Frames are then split as being all the chunks between two fcTL ones, or between the last fcTL and IEND chunks.

-ignore_loop bool

Ignore the loop variable in the file if set. Default is enabled.

-max_fps int

Maximum framerate in frames per second. Default of 0 imposes no limit.

-default_fps int

Default framerate in frames per second when none is specified in the file (0 meaning as fast as possible). Default is 15.

20.4 asf

Advanced Systems Format demuxer.

This demuxer is used to demux ASF files and MMS network streams.

-no_resync_search bool

Do not try to resynchronize by looking for a certain optional start code.

20.5 concat

Virtual concatenation script demuxer.

This demuxer reads a list of files and other directives from a text file and demuxes them one after the other, as if all their packets had been muxed together.

The timestamps in the files are adjusted so that the first file starts at 0 and each next file starts where the previous one finishes. Note that it is done globally and may cause gaps if all streams do not have exactly the same length.

All files must have the same streams (same codecs, same time base, etc.).

The duration of each file is used to adjust the timestamps of the next file: if the duration is incorrect (because it was computed using the bit-rate or because the file is truncated, for example), it can cause artifacts. The duration directive can be used to override the duration stored in each file.

20.5.1 Syntax

The script is a text file in extended-ASCII, with one directive per line. Empty lines, leading spaces and lines starting with ’#’ are ignored. The following directive is recognized:

file path

Path to a file to read; special characters and spaces must be escaped with backslash or single quotes.

All subsequent file-related directives apply to that file.

ffconcat version 1.0

Identify the script type and version.

To make FFmpeg recognize the format automatically, this directive must appear exactly as is (no extra space or byte-order-mark) on the very first line of the script.

duration dur

Duration of the file. This information can be specified from the file; specifying it here may be more efficient or help if the information from the file is not available or accurate.

If the duration is set for all files, then it is possible to seek in the whole concatenated video.

inpoint timestamp

In point of the file. When the demuxer opens the file it instantly seeks to the specified timestamp. Seeking is done so that all streams can be presented successfully at In point.

This directive works best with intra frame codecs, because for non-intra frame ones you will usually get extra packets before the actual In point and the decoded content will most likely contain frames before In point too.

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

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

outpoint timestamp

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

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

该指令最适合所有流紧密交错的帧内编解码器和格式。对于非帧内编解码器,您通常会在出点之后获得带有呈现时间戳的附加数据包,因此解码内容很可能也包含出点之后的帧。如果您的流不是紧密交错的,您可能无法在出点之前从所有流中获取所有数据包,并且您可能只能解码出点之前的最早的流。

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

file_packet_metadata key=value

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

file_packet_meta key value

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

option key value

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

stream

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

exact_stream_id id

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

stream_meta key value

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

stream_codec value

流的编解码器。

stream_extradata hex_string

字符串的额外数据,以十六进制编码。

chapter id start end

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

20.5.2 选项

该分路器接受以下选项:

safe

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

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

默认值为 1。

auto_convert

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

目前,唯一的转换是将 h264_mp4toannexb 比特流过滤器添加到 MP4 格式的 H.264 流中。如果分辨率发生变化,这一点尤其必要。

segment_time_metadata

如果设置为 1,则每个数据包将包含lavf.concat.start_timelavf.concat.duration数据包元数据值,它们是串联输出中各个文件段的 start_time 和持续时间(以微秒为单位)。仅当根据 concat 文件已知持续时间元数据时,才会设置持续时间元数据。默认值为 0。

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

20.6 dash

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

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

20.6.1 选项

该分路器接受以下选项:

cenc_decryption_key

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

20.7 ea

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

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

20.7.1 选项

merge_alpha bool

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

20.8 imf

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

该解复用器呈现 IMF 组合中的音频和视频流,如SMPTE ST 2067-2中所指定。

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

如果-assetmaps未指定,解复用器会查找名为的文件 资产映射.xml与 CPL 位于同一目录中。

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

20.10 gif

动画 GIF 解复用器。

它接受以下选项:

min_delay

设置帧之间的最小有效延迟(以百分之几秒为单位)。范围是 0 到 6000。默认值为 2。

max_gif_delay

设置帧之间的最大有效延迟(以百分之一秒为单位)。范围是 0 到 65535。默认值是 65535(近十一分钟),这是规范允许的最大值。

default_delay

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

ignore_loop

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

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

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

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

20.11 hls

HLS 解复用器

Apple HTTP 直播流解复用器。

该解复用器呈现来自所有变体流的所有 AVStream。id字段被设置为比特率变体索引号。通过在 AVStreams 上设置丢弃标志(通过在 ffplay 中按“a”或“v”),调用者可以决定实际接收哪个变体流。流所属变体的总比特率可在名为“variant_bitrate”的元数据键中找到。

它接受以下选项:

live_start_index

开始直播流的分段索引(负值从末尾开始)。

prefer_x_start

如果它在播放列表中,则更喜欢使用 #EXT-X-START 而不是 live_start_index。

allowed_extensions

',' 分隔的允许 hls 访问的文件扩展名列表。

max_reload

尝试重新加载不足列表的最大次数。默认值为 1000。

m3u8_hold_counters

m3u8刷新无新段时加载的最大次数。默认值为 1000。

http_persistent

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

http_multiple

使用多个 HTTP 连接来下载 HTTP 段。默认情况下为 HTTP/1.1 服务器启用。

http_seekable

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

seg_format_options

使用以 分隔的键=值对列表设置媒体片段分路器的选项:

seg_max_retry

发生错误时重新加载段的最大次数,当不需要在网络错误时跳过段时很有用。默认值为 0。

20.12 image2

图像文件解复用器。

该解复用器从由模式指定的图像文件列表中读取。模式的语法和含义由选项pattern_type指定。

该模式可以包含用于自动确定文件中包含的图像的格式的后缀。

序列中所有文件的每个图像的大小、像素格式和格式必须相同。

该分路器接受以下选项:

framerate

设置视频流的帧速率。默认为 25。

loop

如果设置为 1,则循环输入。默认值为 0。

pattern_type

选择用于解释提供的文件名的模式类型。

pattern_type接受以下值之一。

none

禁用模式匹配,因此视频将仅包含指定的图像。如果您不想从多个图像创建序列并且您的文件名可能包含特殊模式字符,则应该使用此选项。

sequence

选择序列模式类型,用于指定按序号索引的文件序列。

序列模式可以包含字符串“%d”或“%0 N d”,它指定表示模式匹配的每个文件名中的序号的字符的位置。如果使用“%d0 N d”形式,则每个文件名中表示数字的字符串都用 0 填充,N是表示该数字的 0 填充数字的总数。可以使用字符串“%%”在模式中指定文字字符“%”。

如果序列模式包含“%d”或“%0 N d”,则该模式指定的文件列表的第一个文件名必须包含start_numberstart_number + start_number_range -1 之间的数字,并且所有后续数字都必须为顺序的。

例如,模式“img-%03d.bmp”将匹配以下形式的文件名序列img-001.bmp,img-002.bmp, ..., img-010.bmp, ETC。; 模式“i%%m%%g-%d.jpg”将匹配以下形式的文件名序列我%m%g-1.jpg, 我%m%g-2.jpg, ...,我%m%g-10.jpg, ETC。

请注意,该模式不一定包含“%d”或“%0 N d”,例如转换单个图像文件 img.jpeg你可以使用命令:

ffmpeg -i img.jpeg img.png
glob

选择全局通配符模式类型。

模式被解释为glob()模式。仅当 libavformat 编译时支持通配符时,此选项才可选。

glob_sequence (deprecated, will be removed)

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

如果您的 libavformat 版本是使用 globbing 支持进行编译的,并且提供的模式至少包含一个 glob 元字符,其中前面有一个 %*?[]{}未转义的“%”,则该模式将被解释为模式glob(),否则将被解释为序列模式。

所有全局特殊字符%*?[]{}必须以“%”为前缀。要转义文字“%”,您应使用“%%”。

例如,该模式foo-%*.jpeg将匹配所有以“foo-”为前缀并以“.jpeg”结尾的文件名,并将 foo-%?%?%?.jpeg匹配所有以“foo-”为前缀、后跟三个字符的序列并以“.jpeg”结尾的文件名”。

This pattern type is deprecated in favor of glob and sequence.

Default value is glob_sequence.

pixel_format

Set the pixel format of the images to read. If not specified the pixel format is guessed from the first image file in the sequence.

start_number

Set the index of the file matched by the image file pattern to start to read from. Default value is 0.

start_number_range

Set the index interval range to check when looking for the first image file in the sequence, starting from start_number. Default value is 5.

ts_from_file

If set to 1, will set frame timestamp to modification time of image file. Note that monotonity of timestamps is not provided: images go in the same order as without this option. Default value is 0. If set to 2, will set frame timestamp to the modification time of the image file in nanosecond precision.

video_size

Set the video size of the images to read. If not specified the video size is guessed from the first image file in the sequence.

export_path_metadata

If set to 1, will add two extra fields to the metadata found in input, making them also available for other filters (see drawtext filter for examples). Default value is 0. The extra fields are described below:

lavf.image2dec.source_path

Corresponds to the full path to the input file being read.

lavf.image2dec.source_basename

Corresponds to the name of the file being read.

20.12.1 Examples

  • Use ffmpeg for creating a video from the images in the file sequence img-001.jpeg, img-002.jpeg, ..., assuming an input frame rate of 10 frames per second:
    ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
    
  • As above, but start by reading from a file with index 100 in the sequence:
    ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
    
  • Read images matching the "*.png" glob pattern , that is all the files terminating with the ".png" suffix:
    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
    

20.13 libgme

The Game Music Emu library is a collection of video game music file emulators.

See https://bitbucket.org/mpyne/game-music-emu/overview for more information.

It accepts the following options:

track_index

Set the index of which track to demux. The demuxer can only export one track. Track indexes start at 0. Default is to pick the first track. Number of tracks is exported as tracks metadata entry.

sample_rate

Set the sampling rate of the exported track. Range is 1000 to 999999. Default is 44100.

max_size (bytes)

The demuxer buffers the entire file into memory. Adjust this value to set the maximum buffer size, which in turn, acts as a ceiling for the size of files that can be read. Default is 50 MiB.

20.14 libmodplug

ModPlug based module demuxer

See https://github.com/Konstanty/libmodplug

It will export one 2-channel 16-bit 44.1 kHz audio stream. Optionally, a pal8 16-color video stream can be exported with or without printed metadata.

It accepts the following options:

noise_reduction

Apply a simple low-pass filter. Can be 1 (on) or 0 (off). Default is 0.

reverb_depth

Set amount of reverb. Range 0-100. Default is 0.

reverb_delay

Set delay in ms, clamped to 40-250 ms. Default is 0.

bass_amount

应用低音扩展,又名 XBass 或 megabass。范围是 0(安静)到 100(大声)。默认值为 0。

bass_range

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

surround_depth

应用杜比定向逻辑环绕声效果。范围是 0(安静)到 100(重)。默认值为 0。

surround_delay

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

max_size

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

video_stream_expr

使用 eval API 评估的字符串,以便为生成的视频流分配颜色。可以使用的变量有x, y, w, h, t, speed, tempo, order,patternrow

video_stream

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

video_stream_w

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

video_stream_h

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

video_stream_ptxt

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

20.15 libopenmpt

基于 libopenmpt 的模块解复用器

请参阅https://lib.openmpt.org/libopenmpt/了解更多信息。

有些文件有多个子歌曲(曲目),可以使用副歌 选项。

它接受以下选项:

subsong

设置子歌曲索引。这可以是“全部”、“自动”或子歌曲的索引。子歌曲索引从 0 开始。默认值为“自动”。

默认值是让libopenmpt选择。

layout

设置通道布局。有效值为 1、2 和 4 通道布局。默认值为立体声。

sample_rate

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

20.16 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

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

对于分段输入,将片段的起始时间戳设置为baseMediaDecodeTimefrom the tfdtbox。默认是启用的,这会优先使用tfdtDTS框来设置。禁止使用earliest_presentation_time包装盒中的产品sidxmfra在任何一种情况下,如果可用且use_mfra_for设置为 pts 或 dts, 则将使用框中的时间戳。

export_all

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

export_xmp

将XMP_框和uuid框的全部内容导出为带有 key 的字符串xmp。请注意,如果export_all设置了此选项而未设置此选项,则XMP_ box 的内容仍会导出,但带有 key 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 问题,但会影响播放。

20.16.2 有声 AAX

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

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

20.17 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 字节。

20.18 mpjpeg

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

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

strict_mime_boundary

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

20.19 rawvideo

原始视频解复用器。

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

该分路器接受以下选项:

framerate

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

pixel_format

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

video_size

设置输入视频大小。该值必须明确指定。

例如读取原始视频文件输入.raw,假设 ffplay像素格式为rgb24、视频大小为320x240、帧速率为每秒 10 个图像,请使用以下命令:

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

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

20.21 tedcaptions

用于TED 演讲的 JSON 标题。

TED 没有提供标题链接,但可以从页面中猜出。文件工具/bookmarklets.htmlFFmpeg 源代码树中包含一个书签来公开它们。

该分路器接受以下选项:

start_time

设置 TED 演讲的开始时间(以毫秒为单位)。默认值为 15000(15 秒)。它用于将字幕与可下载视频同步,因为它们包含 15 秒的介绍。

示例:将字幕转换为大多数玩家都能理解的格式:

ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt

20.22 vapoursynth

Vaporsynth 包装器。

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

该分路器接受以下选项:

max_script_size

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

21 个复用器

复用器是 FFmpeg 中的配置元素,允许将多媒体流写入特定类型的文件。

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

您可以使用configure选项禁用所有复用器 ,并使用选项/ --disable-muxers选择性地启用/禁用单个复用器。 --enable-muxer=MUXER--disable-muxer=MUXER

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

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

21.1 a64

用于 Commodore 64 视频的 A64 复用器。接受单个a64_multia64_multi5编解码器视频流。

21.2 adts

音频数据传输流复用器。它接受单个 AAC 流。

21.2.1 选项

它接受以下选项:

write_id3v2 bool

允许在流的开头写入 ID3v2.4 标签。默认为禁用。

write_apetag bool

允许在流末尾写入 APE 标签。默认为禁用。

write_mpeg2 bool

启用将 ADTS 帧头中的 MPEG 版本位设置为 1,表示 MPEG-2。默认值为 0,表示 MPEG-4。

21.3 aiff

音频交换文件格式复用器。

21.3.1 选项

它接受以下选项:

write_id3v2

设置为 1 时启用 ID3v2 标签写入。默认值为 0(禁用)。

id3v2_version

选择ID3v2版本进行写入。目前仅支持版本 3 和 4(又名 ID3v2.3 和 ID3v2.4)。默认为版本 4。

21.4 alp

用于 HighVoltage Software 的 Lego Racers 游戏音频的复用器。它接受不超过 2 个通道且采样率不超过 44100 Hz 的单个 ADPCM_IMA_ALP 流。

扩展名:tun、pcm

21.4.1 选项

它接受以下选项:

type type

设置文件类型。

tun

将文件类型设置为音乐。采样率必须为 22050 Hz。

pcm

将文件类型设置为 sfx。

auto

根据输出文件扩展名设置文件类型。.pcm结果类型为pcm其他类型tun已设置。(默认)

21.5 asf

高级系统格式复用器。

请注意,Windows Media Audio (wma) 和 Windows Media Video (wmv) 也使用此复用器。

21.5.1 选项

它接受以下选项:

packet_size

设置复用器数据包大小。通过调整此设置,您可以减少数据碎片或复用器开销,具体取决于您的源。默认值为 3200,最小值为 100,最大值为 64k。

21.6 avi

音频视频交错复用器。

21.6.1 选项

它接受以下选项:

reserve_index_space

为文件头中每个流的 OpenDML 主索引保留指定的字节数。默认情况下,如果第一个主索引中没有剩余空间,则附加主索引将嵌入数据包中,并作为索引链链接在一起。此索引结构可能会在某些用例中导致问题,例如第三方软件严格依赖 OpenDML 索引规范或文件查找速度缓慢时。在文件头中保留足够的索引空间可以避免这些问题。

所需的索引空间取决于输出文件的大小,并且应该约为每 GB 16 字节。当省略此选项或将其设置为零时,将猜测必要的索引空间。

write_channel_mask

将通道布局掩码写入音频流标头。

默认情况下启用此选项。禁用通道掩码在特定情况下很有用,例如,将多个音频流合并为一个以与仅支持 AVI 中单个音频流的软件兼容时(请参阅 (ffmpeg-filters)ffmpeg-filters 手册中的“amerge”部分)。

flipped_raw_rgb

如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。

21.7 chromaprint

色谱指纹仪。

该复用器将音频数据提供给 Chromaprint 库,后者为所提供的音频数据生成指纹。请参阅https://acoustid.org/chromaprint

它需要最多 2 个通道的单个签名本机字节序 16 位原始音频流。

21.7.1 选项

silence_threshold

检测静音的阈值。范围从 -1 到 32767,其中 -1 禁用静音检测。静音检测只能与算法的版本 3 一起使用。必须禁用静音检测才能与 AcoustID 服务一起使用。默认值为-1。

algorithm

指纹算法的版本。范围是 0 到 4。版本 3 启用静音检测。默认值为 1。

fp_format

输出指纹的格式为。接受以下选项:

raw

二进制原始指纹

compressed

二进制压缩指纹

base64

Base64 压缩指纹(默认)

21.8 crc

CRC(循环冗余校验)测试格式。

该复用器计算并打印所有输入音频和视频帧的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。

复用器的输出由以下形式的单行组成: CRC=0x CRC,其中CRC是一个用 0 填充的十六进制数,包含所有已解码输入帧的 CRC 的 8 位数字。

另请参见framecrc复用器。

21.8.1 示例

例如计算输入的 CRC,并将其存储在文件中 输出CRC:

ffmpeg -i INPUT -f crc out.crc

您可以使用以下命令将 CRC 打印到 stdout:

ffmpeg -i INPUT -f crc -

ffmpeg您可以通过指定音频和视频编解码器和格式来选择每帧的输出格式。例如,要计算转换为 PCM 无符号 8 位的输入音频和转换为 MPEG-2 视频的输入视频的 CRC,请使用以下命令:

ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -

21.9 dash

基于 HTTP 的动态自适应流 (DASH) 复用器,根据 MPEG-DASH 标准 ISO/IEC 23009-1:2014 创建片段和清单文件。

欲了解更多信息,请参阅:

它为每个流创建 MPD 清单文件和段文件。

段文件名可能包含与 SegmentTemplate 一起使用的预定义标识符,如标准第 5.3.9.4.4 节中定义的那样。可用标识符为“$RepresentationID$”、“$Number$”、“$Bandwidth$”和“$Time$”。除了标准标识符之外,还支持 ffmpeg 特定的“$ext$”标识符。当指定时,ffmpeg 会将文件名中的 $ext$ 替换为 muxing 格式的扩展名,例如 mp4、webm 等,

ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
-b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \
-profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \
-b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 \
-window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash /path/to/out.mpd
seg_duration duration

设置以秒为单位的段长度(可以设置小数值)。当启用 use_template且禁用use_timeline时,该值被视为平均分段持续时间,并且被视为所有其他用例的最小分段持续时间。

frag_duration duration

设置段内片段的长度(以秒为单位)(可以设置小数值)。

frag_type type

设置分片的间隔类型。

window_size size

设置清单中保留的最大段数。

extra_window_size size

设置从磁盘删除之前保留在清单之外的最大段数。

remove_at_exit remove

完成后启用 (1) 或禁用 (0) 删除所有段。

use_template template

启用 (1) 或禁用 (0) 使用 SegmentTemplate 而不是 SegmentList。

use_timeline timeline

Enable (1) or disable (0) use of SegmentTimeline in SegmentTemplate.

single_file single_file

Enable (1) or disable (0) storing all segments in one file, accessed using byte ranges.

single_file_name file_name

DASH-templated name to be used for baseURL. Implies single_file set to "1". In the template, "$ext$" is replaced with the file name extension specific for the segment format.

init_seg_name init_name

DASH-templated name to used for the initialization segment. Default is "init-stream$RepresentationID$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.

media_seg_name segment_name

DASH-templated name to used for the media segments. Default is "chunk-stream$RepresentationID$-$Number%05d$.$ext$". "$ext$" is replaced with the file name extension specific for the segment format.

utc_timing_url utc_url

URL of the page that will return the UTC timestamp in ISO format. Example: "https://time.akamai.com/?iso"

method method

Use the given HTTP method to create output files. Generally set to PUT or POST.

http_user_agent user_agent

Override User-Agent field in HTTP header. Applicable only for HTTP output.

http_persistent http_persistent

Use persistent HTTP connections. Applicable only for HTTP output.

hls_playlist hls_playlist

Generate HLS playlist files as well. The master playlist is generated with the filename hls_master_name. One media playlist file is generated for each stream with filenames media_0.m3u8, media_1.m3u8, etc.

hls_master_name file_name

HLS master playlist name. Default is "master.m3u8".

streaming streaming

Enable (1) or disable (0) chunk streaming mode of output. In chunk streaming mode, each frame will be a moof fragment which forms a chunk.

adaptation_sets adaptation_sets

Assign streams to AdaptationSets. Syntax is "id=x,streams=a,b,c id=y,streams=d,e" with x and y being the IDs of the adaptation sets and a,b,c,d and e are the indices of the mapped streams.

To map all video (or audio) streams to an AdaptationSet, "v" (or "a") can be used as stream identifier instead of IDs.

When no assignment is defined, this defaults to an AdaptationSet for each stream.

可选语法为“id=x,seg_duration=x,frag_duration=x,frag_type=type,descriptor=descriptor_string,streams=a,b,c id=y,seg_duration=y,frag_type=type,streams=d,e”并且依此类推,描述符对于 ISO/IEC 23009-1:2014/Amd.2:2015 定义的方案很有用。例如,-adaptation_sets "id=0,descriptor=<SupplementalProperty schemaIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/> ,流=v”。请注意,描述符字符串应该是自闭合 xml 标记。seg_duration、frag_duration 和 frag_type 覆盖每个适应集的全局选项值。例如, -adaptation_sets "id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a" type_id 将适配集标记为包含流用于参考适应集的技巧模式。例如,-adaptation_sets“id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1”

timeout timeout

设置套接字 I/O 操作的超时。仅适用于 HTTP 输出。

index_correction index_correction

启用 (1) 或禁用 (0) 段索引校正逻辑。仅当启用use_template且禁用 use_timeline时适用 。

启用后,逻辑会监视段索引的流。如果流的段索引值不在预期的实时位置,则逻辑将更正该索引值。

通常,直播用例中需要此逻辑。在长时间运行流媒体期间,网络带宽波动很常见。每次波动都会导致段索引落后于预期的实时位置。

format_options options_list

使用单独的 key=value 参数列表设置容器格式 (mp4/webm) 选项:。包含特殊字符的值:必须进行转义。

global_sidx global_sidx

写入全局 SIDX 原子。仅适用于单文件、mp4 输出、非流模式。

dash_segment_type dash_segment_type

可能的值:

auto

如果设置此标志,则将根据流编解码器选择短划线段文件格式。这是默认模式。

mp4

如果设置此标志,则破折号段文件将采用 ISOBMFF 格式。

webm

如果设置此标志,则破折号段文件将采用 WebM 格式。

ignore_io_errors ignore_io_errors

忽略打开和写入期间的 IO 错误。对于使用网络输出进行长时间运行很有用。

lhls lhls

启用低延迟 HLS(LHLS)。添加带有当前段 URI 的 #EXT-X-PREFETCH 标记。hls.js 玩家正在尝试标准化开放的 LHLS 规范。草案规范可在 https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md 中找到。此选项尝试遵守上述开放规范。它自动启用流媒体hls_playlist选项。这是一个实验性功能。

注意:这不是 Apple 版本的 LHLS。请参阅https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis

ldash ldash

通过限制某些元素的存在和值来启用低延迟 Dash。

master_m3u8_publish_rate master_m3u8_publish_rate

每隔指定数量的分段间隔重复发布主播放列表。

write_prft write_prft

在支持的流上写入生产者参考时间元素。这还可以在底层复用器中写入 prft 框。仅当启用utc_url选项时适用。默认情况下它设置为自动,在这种情况下,复用器将尝试仅在需要它的模式下启用它。

mpd_profile mpd_profile

设置一个或多个清单配置文件。

http_opts http_opts

要传递给底层 HTTP 协议的以 : 分隔的 key=value 选项列表。仅适用于 HTTP 输出。

target_latency target_latency

设置服务的预期目标延迟(以秒为单位)(可以设置小数值)。仅当启用了Streamingwrite_prft选项时才适用。这是客户可以用来测量服务延迟的信息字段。

min_playback_rate min_playback_rate

设置适当的最低播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。

max_playback_rate max_playback_rate

设置适当的最大播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。

update_period update_period

设置动态内容的 mpd 更新周期。单位是第二位。

21.10 fifo

fifo 伪复用器允许通过使用先进先出队列并在单独的线程中运行实际复用器来分离编码和复用器。这与tee复用器结合使用特别有用,可用于将数据发送到具有不同可靠性/写入速度/延迟的多个目的地。

API 用户应该注意,在其 AVFormatContext 中使用的回调函数(interrupt_callback、io_open 和 io_close)必须是线程安全的。

如果队列已满或输出失败,fifo 复用器的行为是可选择的,

  • 可以根据实时或处理流的时间,透明地重新启动输出,并在重试之间设置可配置的延迟。
  • 编码可以在临时故障期间被阻止,或者在 fifo 队列填满的情况下继续透明地丢弃数据包。
fifo_format

指定格式名称。如果无法从输出名称后缀猜测出来,则很有用。

queue_size

指定队列的大小(数据包数量)。默认值为 60。

format_opts

指定底层复用器的格式选项。Muxer 选项可以指定为由“:”分隔的 =值对列表。

drop_pkts_on_overflow bool

如果设置为 1 (true),万一 fifo 队列已满,数据包将被丢弃而不是阻塞编码器。这使得可以在不延迟输入的情况下继续流式传输,但代价是省略部分流。默认情况下,此选项设置为 0(假),因此在这种情况下,编码器将被阻止,直到复用器处理一些数据包并且它们都不会丢失。

attempt_recovery bool

如果发生故障,请尝试恢复输出。这在与网络输出一起使用时特别有用,因为它可以透明地重新启动流式传输。默认情况下,此选项设置为 0 (false)。

max_recovery_attempts

设置连续不成功恢复尝试的最大次数,在此之后输出将永久失败。默认情况下,此选项设置为 0(无限制)。

recovery_wait_time duration

上一次恢复尝试失败后,下一次恢复尝试之前的等待时间。默认值为 5 秒。

recovery_wait_streamtime bool

如果设置为 0 (false),则在等待恢复尝试时使用实际时间(即,将在至少 recovery_wait_time 秒后尝试恢复)。如果设置为 1 (true),则会考虑已处理流的时间(即,将在省略 流的至少recovery_wait_time秒后尝试恢复)。默认情况下,此选项设置为 0 (false)。

recover_any_error bool

如果设置为 1 (true),则无论导致失败的错误类型如何,都将尝试恢复。默认情况下,此选项设置为 0 (false),并且在出现某些(通常是永久性)错误的情况下,即使attempt_recovery设置为 1, 也不会尝试恢复 。

restart_with_keyframe bool

指定从队列溢出或故障恢复后是否等待关键帧。默认情况下,此选项设置为 0 (false)。

timeshift duration

缓冲指定数量的数据包并延迟写入输出。请注意, queue_size必须足够大才能存储时移数据包。输入结束时,fifo 缓冲区会以实时速度刷新。

21.10.1 示例

  • 将某些内容流式传输到 rtmp 服务器,即使在临时故障(网络中断)的情况下也继续以实时速率处理流,并尝试无限期地每秒恢复流式传输。
    ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a
      -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name
    

21.11 flv

Adobe Flash 视频格式混合器。

该复用器接受以下选项:

flvflags flags

可能的值:

aac_seq_header_detect

根据音频流数据放置 AAC 序列头。

no_sequence_end

禁用序列结束标记。

no_metadata

禁用元数据标签。

no_duration_filesize

当元数据中的持续时间和文件大小在流末尾等于零时,禁用它们。(习惯不可寻求的生活流)。

add_keyframe_index

用于方便查找;特别是对于 HTTP 伪流。

21.12 framecrc

每个数据包 CRC(循环冗余校验)测试格式。

该复用器计算并打印每个音频和视频数据包的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。

复用器的输出由每个音频和视频数据包的一行组成,格式如下:

stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC

CRC是一个用 0 填充的 8 位十六进制数,包含数据包的 CRC。

21.12.1 示例

例如计算音频和视频帧的 CRC 输入,转换为原始音视频数据包,并存储在文件中输出CRC:

ffmpeg -i INPUT -f framecrc out.crc

要将信息打印到标准输出,请使用以下命令:

ffmpeg -i INPUT -f framecrc -

使用ffmpeg,您可以在通过指定音频和视频编解码器计算每个数据包的 CRC 之前选择音频和视频帧编码的输出格式。例如,要计算转换为 PCM 无符号 8 位的每个已解码输入音频帧以及转换为 MPEG-2 视频的每个已解码输入视频帧的 CRC,请使用以下命令:

ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -

另请参见crc复用器。

21.13 framehash

每个数据包哈希测试格式。

该复用器计算并打印每个音频和视频数据包的加密哈希值。这可用于逐个数据包的相等性检查,而无需单独对每个数据包进行二进制比较。

默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。

复用器的输出由每个音频和视频数据包的一行组成,格式如下:

stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash

hash是一个十六进制数,表示数据包的计算哈希值。

hash algorithm

使用字符串算法指定的加密哈希函数。支持的值包括MD5murmur3RIPEMD128RIPEMD160RIPEMD256RIPEMD320SHA160SHA224SHA256(默认)SHA512/224SHA512/256SHA384SHA512CRC32adler32

21.13.1 示例

计算音频和视频帧的 SHA-256 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出sha256:

ffmpeg -i INPUT -f framehash out.sha256

要使用 MD5 哈希函数将信息打印到 stdout,请使用以下命令:

ffmpeg -i INPUT -f framehash -hash md5 -

另请参见哈希复用器。

21.14 framemd5

每个数据包的 MD5 测试格式。

这是framehash muxer 的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。

21.14.1 示例

计算音频和视频帧的 MD5 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出.md5:

ffmpeg -i INPUT -f framemd5 out.md5

要将信息打印到标准输出,请使用以下命令:

ffmpeg -i INPUT -f framemd5 -

另请参阅framehashmd5复用器。

21.15 gif

动画 GIF 混合器。

它接受以下选项:

loop

设置循环输出的次数。使用-1for 无循环,0 for 无限循环(默认)。

final_delay

在最后一帧之后强制延迟(以厘秒表示)。每帧结束时都会有延迟,直到下一帧为止。默认值为-1,这是一个特殊值,用于告诉复用器重新使用之前的延迟。如果出现循环,您可能需要自定义此值以标记暂停。

例如,要对循环 10 次的 gif 进行编码,循环之间有 5 秒的延迟:

ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif

注意1:如果你想将帧提取到单独的GIF文件中,你需要强制image2 muxer:

ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"

注2:GIF格式具有非常大的时基:因此两帧之间的延迟不能小于一厘秒。

21.16 hash

哈希测试格式。

该复用器计算并打印所有输入音频和视频帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。

默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。

复用器的输出由以下形式的单行组成: algo = hash,其中algo是表示所使用的哈希函数的短字符串,hash是表示计算的哈希值的十六进制数。

hash algorithm

使用字符串算法指定的加密哈希函数。支持的值包括MD5murmur3RIPEMD128RIPEMD160RIPEMD256RIPEMD320SHA160SHA224SHA256(默认)SHA512/224SHA512/256SHA384SHA512CRC32adler32

21.16.1 示例

计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:

ffmpeg -i INPUT -f hash out.sha256

要将 MD5 哈希打印到 stdout,请使用以下命令:

ffmpeg -i INPUT -f hash -hash md5 -

另请参见framehash muxer。

21.17 hls

Apple HTTP Live Streaming 复用器,根据 HTTP Live Streaming (HLS) 规范对 MPEG-TS 进行分段。

它创建一个播放列表文件和一个或多个片段文件。输出文件名指定播放列表文件名。

默认情况下,复用器为生成的每个段创建一个文件。这些文件与播放列表具有相同的名称,后跟序列号和 .ts 扩展名。

确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。

例如,要使用以下命令转换输入文件ffmpeg

ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8

此示例将生成播放列表,输出.m3u8和段文件: 输出0.ts,输出1.ts,输出2.ts, ETC。

另请参阅分段复用器,它提供了分段器的更通用和灵活的实现,并且可用于执行 HLS 分段。

21.17.1 选项

该复用器支持以下选项:

hls_init_time duration

设置初始目标段长度。默认值为0

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

在第一个 m3u8 列表上经过该时间后,将在下一个关键帧处剪切片段。初始播放列表填满后,ffmpeg将在持续时间等于hls_time

hls_time duration

设置目标段长度。默认值为 2。

持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。该时间过后,将在下一个关键帧处剪切片段。

hls_list_size size

设置播放列表条目的最大数量。如果设置为 0,列表文件将包含所有段。默认值为 5。

hls_delete_threshold size

hls_flags delete_segments 设置删除之前保留在磁盘上的未引用段的数量。增加此值以允许客户端继续下载播放列表中最近引用的片段。默认值为 1,这意味着早于该值的段 hls_list_size+1将被删除。

hls_start_number_source

#EXT-X-MEDIA-SEQUENCE根据指定源开始播放列表序号( )。除非hls_flags single_file设置,否则它还指定片段和字幕文件名的起始序列号的来源。在任何情况下,如果hls_flags append_list 设置并读取的播放列表序列号大于指定的起始序列号,则该值将用作起始值。

它接受以下值:

generic (default)

根据start_number选项值设置起始序列号。

epoch

起始编号为自纪元 (1970-01-01 00:00:00) 以来的秒数

epoch_us

起始编号为自纪元 (1970-01-01 00:00:00) 以来的微秒数

datetime

开始编号将基于当前日期/时间 YYYYmmddHHMMSS。例如20161231235759。

start_number number

hls_start_number_source值为generic#EXT-X-MEDIA-SEQUENCE时,从指定编号开始播放列表序号 ( ) 。(这是默认情况。)除非设置,否则它还会指定片段和字幕文件名的起始序列号。默认值为 0。 hls_flags single_file

hls_allow_cache allowcache

显式设置客户端是否可以 (1) 或不得 (0) 缓存媒体片段。

hls_base_url baseurl

baseurl附加到播放列表中的每个条目。对于生成具有绝对路径的播放列表很有用。

请注意,每个片段的播放列表序列号必须是唯一的,并且不要与可以循环的片段文件名序列号混淆,例如,如果选项已指定。

hls_segment_filename filename

设置段文件名。除非hls_flags single_file设置, 否则文件名将用作带有段号的字符串格式:

ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8

此示例将生成播放列表,输出.m3u8和段文件: 文件000.ts,文件001.ts,文件002.ts, ETC。

文件名可以包含完整路径或相对路径规范,但只有没有任何路径信息的文件名部分才会包含在 m3u8 段列表中。如果指定相对路径,则创建的段文件的路径将相对于当前工作目录。当设置strftime_mkdir时,filename的整个扩展值将被写入m3u8段列表中。

var_stream_map设置两个或多个变体流时, 文件名模式必须包含字符串“%v”,该字符串指定变体流索引在生成的段文件名中的位置。

ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
  -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8

此示例将生成播放列表片段文件集: 文件_0_000.ts,文件_0_001.ts,文件_0_002.ts等以及 文件_1_000.ts,文件_1_001.ts,文件_1_002.ts, ETC。

字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中,但仅出现在其中之一中。(此外,%v 可能会在最后一个子目录或文件名中多次出现。)如果目录名称中存在字符串 %v,则在扩展目录名称模式后将创建子目录。这使得能够在子目录中创建与不同变体流相对应的段。

ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
  -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8

此示例将生成播放列表片段文件集: vs0/file_000.ts,vs0/file_001.ts,vs0/file_002.ts等以及 vs1/file_000.ts,vs1/file_001.ts,vs1/file_002.ts, ETC。

strftime

在文件名上使用 strftime()可以用本地时间扩展段文件名。段号在此模式下也可用,但要使用它,您需要指定 secondary_level_segment_index hls_flag 且 %%d 将作为说明符。

ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8

此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-1455569023.ts,文件-20160215-1455569024.ts等。 注意:在某些系统/环境中,%s说明符不可用。请参阅 strftime()文档。

ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8

此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-0001.ts,文件-20160215-0002.ts, ETC。

strftime_mkdir

与 -strftime_mkdir 一起使用,它将创建在filename中扩展的所有子目录。

ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8

本示例将创建一个目录201560215(如果不存在),然后生成播放列表,输出.m3u8和段文件: 20160215/文件-20160215-1455569023.ts,20160215/文件-20160215-1455569024.ts, ETC。

ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8

此示例将创建一个目录层次结构 2016/02/15(如果其中任何一个不存在),然后生成播放列表,输出.m3u8和段文件: 2016/02/15/文件-20160215-1455569023.ts,2016/02/15/文件-20160215-1455569024.ts, ETC。

hls_segment_options options_list

使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值:必须进行转义。

hls_key_info_file key_info_file

使用key_info_file中的信息进行段加密。key_info_file的第一行指定写入播放列表的密钥 URI。密钥 URL 用于在播放期间访问加密密钥。第二行指定在加密过程中用于获取密钥的密钥文件的路径。密钥文件被读取为二进制格式的 16 个八位字节的单个打包数组。可选的第三行将初始化向量 (IV) 指定为十六进制字符串,用于代替段序列号(默认)进行加密。对key_info_file的更改将导致使用新密钥/IV 进行分段加密,并在播放列表中添加新密钥 URI/IV 的条目(如果hls_flags periodic_rekey已启用)。

关键信息文件格式:

key URI
key file path
IV (optional)

关键 URI 示例:

http://server/file.key
/path/to/file.key
file.key

关键文件路径示例:

file.key
/path/to/file.key

实施例四:

0123456789ABCDEF0123456789ABCDEF

关键信息文件示例:

http://server/file.key
/path/to/file.key
0123456789ABCDEF0123456789ABCDEF

shell 脚本示例:

#!/bin/sh
BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
  -hls_key_info_file file.keyinfo out.m3u8
-hls_enc enc

启用 (1) 或禁用 (0) AES128 加密。启用后,生成的每个片段都会被加密,并且加密密钥将保存为播放列表名称.key。

-hls_enc_key key

用于加密段的 16 字节密钥,默认情况下它是随机生成的。

-hls_enc_key_url keyurl

如果设置,则将在播放列表中的密钥文件名 前面添加keyurl (而不是baseurl) 。

-hls_enc_iv iv

每个段的 16 字节初始化向量,而不是自动生成的向量。

hls_segment_type flags

可能的值:

mpegts

以 MPEG-2 传输流格式输出片段文件。这与所有 HLS 版本兼容。

fmp4

以分段 MP4 格式输出分段文件,类似于 MPEG-DASH。fmp4 文件可以在 HLS 版本 7 及更高版本中使用。

hls_fmp4_init_filename filename

将文件名设置为片段文件头文件,默认文件名是初始化.mp4

使用-strftime 1on filename以本地时间扩展段文件名。

ffmpeg -i in.nut  -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8

这将产生像这样的 init 1602678741_init.mp4

hls_fmp4_init_resend

每次 m3u8 文件刷新后重新发送 init 文件,默认为0

var_stream_map设置两个或多个变体流时, 文件名模式必须包含字符串“%v”,该字符串指定变体流索引在生成的初始化文件名​​中的位置。字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得能够在子目录中创建与不同变体流相对应的初始化文件。

hls_flags flags

可能的值:

single_file

如果设置了此标志,复用器会将所有片段存储在单个 MPEG-TS 文件中,并将使用播放列表中的字节范围。通过这种方式生成的 HLS 播放列表的版本号将为 4。例如:

ffmpeg -i in.nut -hls_flags single_file out.m3u8

将生成播放列表,输出.m3u8,和一个单独的段文件, 输出.ts

delete_segments

从播放列表中删除的片段文件将在一段等于片段持续时间加上播放列表持续时间的时间后被删除。

append_list

将新段追加到旧段列表的末尾,并#EXT-X-ENDLIST从旧段列表中删除 。

round_durations

将播放列表文件段信息中的持续时间信息舍入为整数值,而不是使用浮点。如果没有其他功能需要使用更高的 HLS 版本,那么这将允许 ffmpeg 输出 HLS 版本 2 m3u8。

discont_start

#EXT-X-DISCONTINUITY标签添加到播放列表中第一个片段信息之前。

omit_endlist

不要将EXT-X-ENDLIST标签附加到播放列表的末尾。

periodic_rekey

hls_key_info_file将定期检查指定的文件并检测加密信息的更新。请务必自动替换此文件,包括包含 AES 加密密钥的文件。

independent_segments

Add the #EXT-X-INDEPENDENT-SEGMENTS to playlists that has video segments and when all the segments of that playlist are guaranteed to start with a Key frame.

iframes_only

Add the #EXT-X-I-FRAMES-ONLY to playlists that has video segments and can play only I-frames in the #EXT-X-BYTERANGE mode.

split_by_time

Allow segments to start on frames other than keyframes. This improves behavior on some players when the time between keyframes is inconsistent, but may make things worse on others, and can cause some oddities during seeking. This flag should be used with the hls_time option.

program_date_time

Generate EXT-X-PROGRAM-DATE-TIME tags.

second_level_segment_index

Makes it possible to use segment indexes as %%d in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xd format is available where x is the required width.

second_level_segment_size

Makes it possible to use segment sizes (counted in bytes) as %%s in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xs format is available where x is the required width.

second_level_segment_duration

Makes it possible to use segment duration (calculated in microseconds) as %%t in hls_segment_filename expression besides date/time values when strftime is on. To get fixed width numbers with trailing zeroes, %%0xt format is available where x is the required width.

ffmpeg -i sample.mpeg \
   -f hls -hls_time 3 -hls_list_size 5 \
   -hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \
   -strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8

This will produce segments like this: segment_20170102194334_0003_00122200_0000003000000.ts, segment_20170102194334_0004_00120072_0000003000000.ts etc.

temp_file

Write segment data to filename.tmp and rename to filename only once the segment is complete. A webserver serving up segments can be configured to reject requests to *.tmp to prevent access to in-progress segments before they have been added to the m3u8 playlist. This flag also affects how m3u8 playlist files are created. If this flag is set, all playlist files will written into temporary file and renamed after they are complete, similarly as segments are handled. But playlists with file protocol and with type (hls_playlist_type) other than vod are always written into temporary file regardless of this flag. Master playlist files (master_pl_name), if any, with file protocol, are always written into temporary file regardless of this flag if master_pl_publish_rate value is other than zero.

hls_playlist_type event

Emit #EXT-X-PLAYLIST-TYPE:EVENT in the m3u8 header. Forces hls_list_size to 0; the playlist can only be appended to.

hls_playlist_type vod

Emit #EXT-X-PLAYLIST-TYPE:VOD in the m3u8 header. Forces hls_list_size to 0; the playlist must not change.

method

Use the given HTTP method to create the hls files.

ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8

This example will upload all the mpegts segment files to the HTTP server using the HTTP PUT method, and update the m3u8 files every refresh times using the same method. Note that the HTTP server must support the given method for uploading files.

http_user_agent

Override User-Agent field in HTTP header. Applicable only for HTTP output.

var_stream_map

映射字符串,指定如何将音频、视频和字幕流分组为不同的变体流。变体流组由空格分隔。预期的字符串格式类似于“a:0,v:0 a:1,v:1 ....”。这里a:、v:、s:分别是指定音频、视频、字幕流的按键。允许的值为 0 到 9(仅根据实际用途进行限制)。

当有两个或多个变体流时,输出文件名模式必须包含字符串“%v”,该字符串指定变体流索引在输出媒体播放列表文件名中的位置。字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得可以在子目录中创建变体流。

ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
  http://example.com/live/out_%v.m3u8

此示例创建两个 hls 变体流。第一个变体流将包含比特率 1000k 的视频流和比特率 64k 的音频流,第二变体流将包含比特率 256k 的视频流和比特率 32k 的音频流。这里,将创建两个文件名为 out_0.m3u8 和 out_1.m3u8 的媒体播放列表。如果您想要一些有意义的文本而不是结果名称中的索引,您可以为每个或某些变体指定名称,如下例所示。

ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \
  http://example.com/live/out_%v.m3u8

此示例创建两个 hls 变体流,如上一个示例所示。但在这里,将创建文件名为 out_my_hd.m3u8 和 out_my_sd.m3u8 的两个媒体播放列表。

ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \
  -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \
  http://example.com/live/out_%v.m3u8

此示例创建三个 hls 变体流。第一个变体流将是视频比特率 1000k 的纯视频流,第二个变体流将是比特率 64k 的纯音频流,第三个变体流将是比特率 256k 的纯视频流。这里,将创建文件名为 out_0.m3u8、out_1.m3u8 和 out_2.m3u8 的三个媒体播放列表。

ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
  http://example.com/live/vs_%v/out.m3u8

此示例在子目录中创建变体流。此处,第一个媒体播放列表创建于http://example.com/live/vs_0/out.m3u8第二个位于http://example.com/live/vs_1/out.m3u8

ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k  \
  -map 0:a -map 0:a -map 0:v -map 0:v -f hls \
  -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \
  -master_pl_name master.m3u8 \
  http://example.com/live/out_%v.m3u8

此示例创建两个仅音频和两个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个仅音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到两个仅视频变体流音频组名称为“aud_low”和“aud_high”。

默认情况下,会创建一个包含所有编码流的 hls 变体。

ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \
  -map 0:a -map 0:a -map 0:v -f hls \
  -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \
  -master_pl_name master.m3u8 \
  http://example.com/live/out_%v.m3u8

此示例创建两个仅音频和一个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个纯音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到一个纯视频变体流音频组名称为“aud_low”,并且音频组的默认统计信息为“否”或“是”。

默认情况下,会创建一个包含所有编码流的 hls 变体。

ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \
  -map 0:a -map 0:a -map 0:v -f hls \
  -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \
  -master_pl_name master.m3u8 \
  http://example.com/live/out_%v.m3u8

此示例创建两个仅音频和一个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个纯音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到一个纯视频变体流音频组名称为“aud_low”,音频组的默认状态为 NO 或 YES,一个音频语言名为 ENG,另一种音频语言名为 CHN。

默认情况下,会创建一个包含所有编码流的 hls 变体。

ffmpeg -y -i input_with_subtitle.mkv \
 -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \
 -b:a:0 256k \
 -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \
 -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \
 -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \
 10 -master_pl_publish_rate 10  -hls_flags \
 delete_segments+discont_start+split_by_time ./tmp/video.m3u8

此示例在主播放列表中添加带有 webvtt 字幕组名称“subtitle”的#EXT-X-MEDIA标签。TYPE=SUBTITLES请确保输入文件至少有一个文本字幕流。

cc_stream_map

指定不同隐藏式字幕组及其属性的映射字符串。隐藏式字幕流组由空格分隔。预期的字符串格式类似于“ccgroup:<组名称>,instreamid:<INSTREAM-ID>,语言:<语言代码> ....”。“ccgroup”和“instreamid”是强制属性。“语言”是一个可选属性。通过在字符串中提供相同的“ccgroup”名称,使用此选项配置的隐藏式字幕组将映射到不同的变体流 var_stream_map。如果var_stream_map未设置,则第一个可用的 ccgroupcc_stream_map将映射到输出变体流。下面给出了这两个用例的示例。

ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \
  -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \
  -master_pl_name master.m3u8 \
  http://example.com/live/out.m3u8

此示例在主播放列表中添加#EXT-X-MEDIA标签 with TYPE=CLOSED-CAPTIONS,组名称为“cc”,语言为“en”(英语),INSTREAM-ID 为“CC1”。此外,它还CLOSED-CAPTIONS为输出变体流添加组名称“cc”的属性。

ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
  -a53cc:0 1 -a53cc:1 1\
  -map 0:v -map 0:a -map 0:v -map 0:a -f hls \
  -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \
  -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \
  -master_pl_name master.m3u8 \
  http://example.com/live/out_%v.m3u8

此示例在主播放列表中为 INSTREAM-ID“CC1”和“CC2”添加两个#EXT-X-MEDIA标签。TYPE=CLOSED-CAPTIONS此外,它还 CLOSED-CAPTIONS为两个输出变体流添加组名称“cc”的属性。

master_pl_name

使用给定名称创建 HLS 主播放列表。

ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8

此示例创建名为 master.m3u8 的 HLS 主播放列表,并发布在 http://example.com/live/

master_pl_publish_rate

每隔指定数量的分段间隔重复发布主播放列表。

ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \
-hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8

此示例创建名为 master.m3u8 的 HLS 主播放列表,并每隔 30 段(即每隔 60 秒)重复发布它。

http_persistent

使用持久 HTTP 连接。仅适用于 HTTP 输出。

timeout

设置套接字 I/O 操作的超时。仅适用于 HTTP 输出。

ignore_io_errors

忽略打开、写入和删除期间的 IO 错误。对于使用网络输出进行长时间运行很有用。

headers

设置自定义 HTTP 标头,可以覆盖内置的默认标头。仅适用于 HTTP 输出。

21.18 ico

ICO 文件混合器。

微软的图标文件格式(ICO)有一些需要注意的严格限制:

  • 任何维度的大小不能超过 256 像素
  • 只能存储 BMP 和 PNG 图像
  • 如果使用 BMP 图像,则它必须是以下像素格式之一:
    BMP Bit Depth      FFmpeg Pixel Format
    1bit               pal8
    4bit               pal8
    8bit               pal8
    16bit              rgb555le
    24bit              bgr24
    32bit              bgra
    
  • 如果使用 BMP 图像,则必须使用 BITMAPINFOHEADER DIB 标头
  • 如果使用PNG图像,则必须使用rgba像素格式

21.19 image2

图像文件混合器。

图像文件复用器将视频帧写入图像文件。

输出文件名由模式指定,该模式可用于生成按顺序编号的文件系列。该模式可以包含字符串“%d”或“%0 N d”,该字符串指定表示文件名中编号的字符的位置。如果使用“%0 N d”形式,则表示每个文件名中的数字的字符串将用 0 填充为N 位。可以使用字符串“%%”在模式中指定文字字符“%”。

如果模式包含“%d”或“%0 N d”,则指定的文件列表的第一个文件名将包含数字 1,后面的所有数字将是连续的。

该模式可能包含一个后缀,用于自动确定要写入的图像文件的格式。

例如,模式“img-%03d.bmp”将指定以下形式的文件名序列img-001.bmp,img-002.bmp, ..., img-010.bmp等。模式“img%%-%d.jpg”将指定以下形式的文件名序列img%-1.jpg,img%-2.jpg, ...,img%-10.jpg, ETC。

图像混合器支持 .YUV 图像文件格式。这种格式的特殊之处在于,每个图像帧由三个文件组成,分别对应 YUV420P 分量。要读取或写入此图像文件格式,请指定“.Y”文件的名称。复用器将根据需要自动打开“.U”和“.V”文件。

21.19.1 选项

frame_pts

如果设置为 1,则使用 pkt->pts 中的 pts 扩展文件名。默认值为 0。

start_number

从指定的数字开始序列。默认值为 1。

update

如果设置为 1,文件名将始终被解释为文件名,而不是模式,并且相应的文件将不断被新图像覆盖。默认值为 0。

strftime

如果设置为 1,则使用 中的日期和时间信息扩展文件名 strftime()。默认值为 0。

atomic_writing

将输出写入临时文件,写入完成后该临时文件将重命名为目标文件名。默认为禁用。

protocol_opts options_list

将协议选项设置为以 : 分隔的 key=value 参数列表。包含特殊字符的值:必须进行转义。

21.19.2 示例

以下示例展示了如何用于ffmpeg创建文件序列img-001.jpeg,img-002.jpeg,...,每秒从输入视频中拍摄一张图像:

ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'

请注意ffmpeg,使用 时,如果未使用选项指定格式 -f且输出文件名指定图像文件格式,则自动选择 image2 muxer,因此前面的命令可以写为:

ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'

另请注意,该模式不一定包含“%d”或“%0 N d”,例如创建单个图像文件 img.jpeg从输入视频开始,您可以使用以下命令:

ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg

时间选项允许您使用日期和时间信息扩展文件名。检查该函数的文档strftime()以了解语法。

例如,要从“%Y-%m-%d_%H-%M-%S”模式生成图像文件,可以使用 strftime() 以下命令:ffmpeg

ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"

您可以使用当前帧的 PTS 设置文件名:

ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg

一个更复杂的示例是每秒将桌面内容直接发布到 WebDAV 服务器:

ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg

21.20 matroska

Matroska 容器混合器。

该复用器实现 matroska 和 webm 容器规范。

21.20.1 元数据

该复用器中可识别的元数据设置是:

title

设置为单个曲目提供的标题名称。这将映射到作为附件写入的流的 FileDescription 元素。

language

在 Matroska 语言表单中指定曲目的语言。

语言可以是 3 个字母的书目 ISO-639-2 (ISO 639-2/B) 形式(例如法语的“fre”),也可以是与语言专业的国家/地区代码混合的语言代码(例如“fre- ca”代表加拿大法语)。

stereo_mode

在单个视频轨道中设置两个视图的立体 3D 视频布局。

认可以下值:

mono

视频不是立体声

left_right

两个视图并排排列,左眼视图在左侧

bottom_top

两个视图均按上下方向排列,左眼视图在底部

top_bottom

两个视图均按上下方向排列,左眼视图在顶部

checkerboard_rl

每个视图均以棋盘交错图案排列,左眼视图排在第一位

checkerboard_lr

每个视图均以棋盘交错图案排列,右眼视图排在第一位

row_interleaved_rl

每个视图由基于行的交错构成,右眼视图是第一行

row_interleaved_lr

每个视图由基于行的交错构成,左眼视图是第一行

col_interleaved_rl

两个视图都以基于列的交错方式排列,右眼视图是第一列

col_interleaved_lr

两个视图都以基于列的交错方式排列,左眼视图是第一列

anaglyph_cyan_red

所有帧均采用浮雕格式,可通过红青色滤镜查看

right_left

两个视图并排排列,右眼视图在左侧

anaglyph_green_magenta

所有帧均采用浮雕格式,可通过绿色-洋红色滤镜查看

block_lr

双眼并列,左眼视角优先

block_rl

双眼并列,右眼视角优先

例如,可以使用以下命令行创建 3D WebM 剪辑:

ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm

21.20.2 选项

该复用器支持以下选项:

reserve_index_space

默认情况下,该复用器将用于查找的索引(Matroska 术语中称为提示)写入文件末尾,因为它无法提前知道在文件开头为索引留出多少空间。然而,对于某些用例(例如可以进行搜索但速度较慢的流式传输),将索引放在文件的开头很有用。

如果此选项设置为非零值,则复用器将在文件头中保留给定的空间量,然后在复用完成时尝试在其中写入提示。如果保留空间不足,则不会写入任何 Cues,文件将被最终确定,并且写入预告片将返回错误。大多数用例的安全大小应为每小时 50kB 左右的视频。

请注意,仅当输出可查找时才会写入提示,否则此选项将不起作用。

cues_to_front

如果设置,复用器将在必要时通过移动主数据将索引写入文件的开头。这可以与 Reserve_index_space 结合使用,在这种情况下,只有在最初保留的空间不足时才会移动数据。

如果输出不可查找,则忽略此选项。

default_mode

此选项控制如何设置输出轨道的 FlagDefault。它影响玩家默认播放的曲目。默认模式是 '直通'。

infer

每个具有默认配置的轨道都会设置 FlagDefault。此外,对于每种类型的轨道(音频、视频或字幕),如果不存在具有该类型默认配置的轨道,则该类型的第一个轨道将被标记为默认轨道(如果存在)。这确保了以合理的方式设置默认标志,即使输入源自缺乏默认轨道概念的容器。

infer_no_subs

此模式与 infer 相同,只是如果不存在具有默认配置的字幕轨道,则不会将任何字幕轨道标记为默认。

passthrough

在此模式下,当且仅当在相应流的处置中设置了 AV_DISPOSITION_DEFAULT 标志时,才会设置 FlagDefault。

flipped_raw_rgb

如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。

21.21 md5

MD5测试格式。

这是哈希复用器的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。

21.21.1 示例

计算转换为原始音频和视频的输入的 MD5 哈希值,并将其存储在文件中输出.md5:

ffmpeg -i INPUT -f md5 out.md5

您可以使用以下命令将 MD5 打印到 stdout:

ffmpeg -i INPUT -f md5 -

另请参阅hashframemd5复用器。

21.22 mov, mp4, ismv

MOV/MP4/ISMV(平滑流)复用器。

mov/mp4/ismv 复用器支持分段。+faststart通常,MOV/MP4 文件将所有数据包的所有元数据存储在一个位置(写在文件末尾,可以通过添加到-movflags或使用该工具将其移动到开头以便更好地播放)qt-faststart

分片文件由许多片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入分段文件的优点是,即使写入中断,文件也可解码(而普通 MOV/MP4 如果未正确完成则无法解码),并且在写入很长的文件时需要较少的内存(因为写入普通 MOV /MP4 文件将有关内存中每个数据包的信息存储到文件关闭为止)。缺点是与其他应用程序的兼容性较差。

通过设置定义如何将文件切成片段的选项之一来启用分段: -frag_duration-frag_size-min_frag_duration和。如果指定了多个条件,则当满足指定条件之一时,片段将被剪切。例外情况是,必须满足任何其他条件才能适用。 -movflags +frag_keyframe-movflags +frag_custom-min_frag_duration

21.22.1 选项

frag_duration duration

创建持续时间为微秒的片段。

frag_size size

创建包含最多size字节的有效负载数据的片段。

min_frag_duration duration

不要创建短于持续时间微秒的片段。

movflags flags

设置各种复用开关。可以使用以下标志:

frag_keyframe

在每个视频关键帧处开始一个新片段。

frag_custom

允许调用者通过调用使用av_write_frame(ctx, NULL)到目前为止写入的数据包来写入片段来手动选择何时剪切片段。(这仅对集成 libavformat 的其他应用程序有用,而不是来自ffmpeg.)

empty_moov

直接在文件开头写入初始 moov 原子,而不描述其中的任何样本。通常,mdat/moov 对被写入文件的开头,就像普通的 MOV/MP4 文件一样,仅包含文件的一小部分。设置此选项后,没有初始 mdat 原子,并且 moov 原子仅描述轨道但持续时间为零。

写入 ismv(平滑流)文件时隐式设置此选项。

separate_moof

为每个轨道编写一个单独的 moof(电影片段)原子。通常,所有轨道的数据包都写入 moof 原子中(效率稍高),但设置此选项后,复用器会为每个轨道写入一对 moof/mdat,从而更容易分离轨道。

写入 ismv(平滑流)文件时隐式设置此选项。

skip_sidx

跳过 sidx 原子的写入。当 sidx Atom 导致的比特率开销较高时,此选项可用于不强制使用 sidx Atom 的情况。当启用 global_sidx 标志时,该选项将被忽略。

faststart

运行第二遍,将索引(moov 原子)移动到文件的开头。该操作可能需要一段时间,并且在碎片输出等各种情况下不起作用,因此默认情况下不启用。

rtphint

将 RTP 提示轨道添加到输出文件。

disable_chpl

Disable Nero chapter markers (chpl atom). Normally, both Nero chapters and a QuickTime chapter track are written to the file. With this option set, only the QuickTime chapter track will be written. Nero chapters can cause failures when the file is reprocessed with certain tagging programs, like mp3Tag 2.61a and iTunes 11.3, most likely other versions are affected as well.

omit_tfhd_offset

Do not write any absolute base_data_offset in tfhd atoms. This avoids tying fragments to absolute byte positions in the file/streams.

default_base_moof

Similarly to the omit_tfhd_offset, this flag avoids writing the absolute base_data_offset field in tfhd atoms, but does so by using the new default-base-is-moof flag instead. This flag is new from 14496-12:2012. This may make the fragments easier to parse in certain circumstances (avoiding basing track fragment location calculations on the implicit end of the previous track fragment).

negative_cts_offsets

Enables utilization of version 1 of the CTTS box, in which the CTS offsets can be negative. This enables the initial sample to have DTS/CTS of zero, and reduces the need for edit lists for some cases such as video tracks with B-frames. Additionally, eases conformance with the DASH-IF interoperability guidelines.

This option is implicitly set when writing ismv (Smooth Streaming) files.

moov_size bytes

Reserves space for the moov atom at the beginning of the file instead of placing the moov atom at the end. If the space reserved is insufficient, muxing will fail.

write_tmcd

Specify on to force writing a timecode track, off to disable it and auto to write a timecode track only for mov and mp4 output (default).

write_btrt bool

Force or disable writing bitrate box inside stsd box of a track. The box contains decoding buffer size (in bytes), maximum bitrate and average bitrate for the track. The box will be skipped if none of these values can be computed. Default is -1 or auto, which will write the box only in MP4 mode.

write_prft

Write producer time reference box (PRFT) with a specified time source for the NTP field in the PRFT box. Set value as ‘wallclock’ to specify timesource as wallclock time and ‘pts’ to specify timesource as input packets’ PTS values.

Setting value to ‘pts’ is applicable only for a live encoding use case, where PTS values are set as as wallclock time at the source. For example, an encoding use case with decklink capture source where video_pts and audio_pts are set to ‘abs_wallclock’.

empty_hdlr_name bool

Enable to skip writing the name inside a hdlr box. Default is false.

movie_timescale scale

Set the timescale written in the movie header box (mvhd). Range is 1 to INT_MAX. Default is 1000.

video_track_timescale scale

Set the timescale used for video tracks. Range is 0 to INT_MAX. If set to 0, the timescale is automatically set based on the native stream time base. Default is 0.

21.22.2 Example

Smooth Streaming content can be pushed in real time to a publishing point on IIS with this muxer. Example:

ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)

21.23 mp3

MP3 复用器写入具有以下可选功能的原始 MP3 流:

  • 开头的 ID3v2 元数据标头(默认启用)。支持版本 2.3 和 2.4,id3v2_version私有选项控制使用哪一个(3 或 4)。设置id3v2_version为 0 会完全禁用 ID3v2 标头。

    复用器支持将附加图片(APIC 帧)写入 ID3v2 标头。图片以带有单个数据包的视频流的形式提供给复用器。这些流可以有任意数量,每个流对应一个 APIC 帧。流元数据将标题评论分别标记为 APIC描述图片类型。请参阅 http://id3.org/id3v2.4.0-frames了解允许的图片类型。

    请注意,APIC 帧必须在开始时写入,因此复用器将缓冲音频帧,直到获取所有图片。因此,建议尽快提供图片,以避免过度缓冲。

  • ID3v2 标头(如果存在)之后的 Xing/LAME 帧。默认情况下启用它,但仅当输出可查找时才会写入。write_xing可以使用 private 选项来禁用它。 该帧包含可能对解码器有用的各种信息,例如音频持续时间或编码器延迟。
  • 文件末尾的旧 ID3v1 标记(默认情况下禁用)。它可以通过 private 选项启用write_id3v1,但由于其功能非常有限,因此不建议使用。

例子:

编写一个带有 ID3v2.3 header 和 ID3v1 footer 的 mp3:

ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3

要将图片附加到 mp3 文件,请使用以下命令选择音频和图片流map

ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3

编写一个“干净”的 MP3,没有任何额外的功能:

ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3

21.24 mpegts

MPEG 传输流复用器。

该复用器实施 ISO 13818-1 和 ETSI EN 300 468 的一部分。

mpegts muxer 中可识别的元数据设置为service_providerservice_name。如果未设置,则默认为 service_provider'FFmpeg' 的默认值 service_name是 '服务01'。

21.24.1 选项

复用器选项有:

mpegts_transport_stream_id integer

设置 '传输流ID'。这标识了 DVB 中的转发器。默认为0x0001.

mpegts_original_network_id integer

设置 '原始网络 ID'。这是 DVB 中网络的唯一标识符。它的主要用途是通过路径'来唯一标识服务Original_Network_ID、Transport_Stream_ID'。默认为0x0001.

mpegts_service_id integer

设置 '服务ID',在 DVB 中也称为节目。默认为 0x0001.

mpegts_service_type integer

设置程序'服务类型'。默认为digital_tv. 接受以下选项:

hex_value

0x01介于和之间的任何十六进制值0xff,如 ETSI 300 468 中所定义。

digital_tv

数字电视服务。

digital_radio

数字广播服务。

teletext

图文电视服务。

advanced_codec_digital_radio

高级编解码器数字广播服务。

mpeg2_digital_hdtv

MPEG2 数字高清电视服务。

advanced_codec_digital_sdtv

高级编解码器数字标清电视服务。

advanced_codec_digital_hdtv

高级编解码器数字高清电视服务。

mpegts_pmt_start_pid integer

设置 PMT 的第一个 PID。默认为0x1000,最小值为0x0020,最大值为0x1ffa。该选项在 PMT PID 固定的 m2ts 模式下无效0x0100

mpegts_start_pid integer

设置基本流的第一个 PID。默认为0x0100,最小值为 0x0020,最大值为0x1ffa。此选项在基本流 PID 固定的 m2ts 模式下无效。

mpegts_m2ts_mode boolean

如果设置为 ,则启用 m2ts 模式1。默认值是-1禁用 m2ts 模式。

muxrate integer

设置恒定的复用率。默认为变码率。

pes_payload_size integer

设置最小 PES 数据包负载(以字节为单位)。默认为2930.

mpegts_flags flags

设置 mpegts 标志。接受以下选项:

resend_headers

在写入下一个数据包之前重新发送 PAT/PMT。

latm

对 AAC 使用 LATM 打包。

pat_pmt_at_frames

在每个视频帧重新发送 PAT 和 PMT。

system_b

符合系统 B (DVB),而不是系统 A (ATSC)。

initial_discontinuity

将每个流的初始数据包标记为不连续性。

nit

发出 NIT 表。

omit_rai

禁用随机访问指示符的写入。

mpegts_copyts boolean

如果值设置为 ,则保留原始时间戳1。默认值为-1,这会导致时间戳移位,使其从 0 开始。

omit_video_pes_length boolean

省略视频数据包的 PES 数据包长度。默认值为1(真)。

pcr_period integer

覆盖默认的 PCR 重传时间(以毫秒为单位)。Default -1表示自动确定 PCR 间隔:CBR 流使用 20 ms,VBR 流使用小于 100 ms 的帧持续时间的最高倍数。

pat_period duration

PAT/PMT 表之间的最长时间(以秒为单位)。默认为0.1.

sdt_period duration

SDT 表之间的最长时间(以秒为单位)。默认为0.5.

nit_period duration

NIT 表之间的最长时间(以秒为单位)。默认为0.5.

tables_version integer

设置 PAT、PMT、SDT 和 NIT 版本(默认0,有效值为 0 到 31(含))。此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出AVFormatContext(如果使用 API)或重新启动ffmpeg实例,循环更改 表版本价值:

ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...
ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...

21.24.2 示例

ffmpeg -i file.mpg -c copy \
     -mpegts_original_network_id 0x1122 \
     -mpegts_transport_stream_id 0x3344 \
     -mpegts_service_id 0x5566 \
     -mpegts_pmt_start_pid 0x1500 \
     -mpegts_start_pid 0x150 \
     -metadata service_provider="Some provider" \
     -metadata service_name="Some Channel" \
     out.ts

21.25 mxf, mxf_d10, mxf_opatom

MXF 复用器。

21.25.1 选项

复用器选项有:

store_user_comments bool

设置是否应存储用户评论(如果可用)或从不存储。IRT D-10 不允许用户评论。因此,默认情况下是为 mxf 和 mxf_opatom 编写它们,但不为 mxf_d10 编写它们

21.26 null

空复用器。

该复用器不会生成任何输出文件,它主要用于测试或基准测试目的。

例如,要对解码进行基准测试,ffmpeg您可以使用以下命令:

ffmpeg -benchmark -i INPUT -f null out.null

请注意,上述命令不会读取或写入输出为空 文件,但语法需要指定输出文件ffmpeg

或者,您可以将命令编写为:

ffmpeg -benchmark -i INPUT -f null -

21.27 nut

-syncpoints flags

更改 nut 中同步点的使用:

default use the normal low-overhead seeking aids.
none do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;

不建议使用此选项,因为生成的文件对损坏非常敏感并且无法进行查找。一般来说,同步点的开销可以忽略不计。请注意,-0write_index可用于禁用所有不断增长的数据表,从而允许使用有限的内存复用无限的流,并且没有这些缺点。

timestamped extend the syncpoint with a wallclock field.

none和timestamped标志是实验性的

-write_index bool

最后写索引,默认是写索引。

ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor

21.28 ogg

Ogg 容器混合器。

-page_duration duration

首选页面持续时间(以微秒为单位)。复用器将尝试创建大约持续时间微秒长的页面。这允许用户在查找粒度和容器开销之间进行折衷。默认值为 1 秒。值 0 将填充所有段,使页面尽可能大。在大多数情况下,值为 1 将有效地每页使用 1 个数据包,以额外的容器开销为代价提供较小的查找粒度。

-serial_offset value

用于设置流序列号的序列值。将其设置为不同且足够大的值可确保生成的 ogg 文件可以安全地链接。

21.29 raw muxers

原始复用器接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。除非另有说明,识别的扩展名与复用器名称相同。

21.29.1 交流3

杜比数字 (Dolby Digital),也称为 AC-3、音频。

21.29.2 广告

CRI 中间件 ADX 音频。

当输出可查找并且计数可以存储在 32 位中时,该复用器将在第一个数据包开头附近写出总样本计数。

21.29.3 aptx

aptX(蓝牙音频处理技术)音频。

21.29.4 aptx_hd

aptX HD(蓝牙音频处理技术)音频。

扩展:aptxhd

21.29.5 AVS2

AVS2-P2/IEEE1857.4 视频。

扩展名: avs, avs2

21.29.6 cavsvideo

中国AVS(音频视频标准)视频。

扩展:cavs

21.29.7 编解码器2raw

编解码器 2 音频。

没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f codec2raw

21.29.8数据

数据复用器接受具有任何类型的任何编解码器的单个流。必须使用-mapffmpeg CLI 工具的选项来选择输入流。

没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f data

21.29.9 狄拉克

BBC 狄拉克视频。Dirac Pro 编解码器是一个子集,标准化为 SMPTE VC-2。

扩展名:drc、vc2

21.29.10 dnxhd

狂热的 DNxHD 视频。它被标准化为 SMPTE VC-3。接受 DNxHR 流。

扩展名: dnxhd, dnxhr

2011 年 29 月 21 日

DTS 相干声学 (DCA) 音频。

21.29.12 eac3

杜比数字+ (Dolby Digital Plus),也称为增强型 AC-3 音频。

13 年 21 月 29 日

MPEG-5 基本视频编码 (EVC)/EVC/MPEG-5 第 1 部分 EVC 视频。

扩展:evc

21.29.14 g722

ITU-T G.722 音频。

21.29.15 g723_1

ITU-T G.723.1 音频。

扩展:tco、rco

21.29.16 g726

ITU-T G.726 大端(“左对齐”)音频。

没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726

21.29.17 g726le

ITU-T G.726 小端(“右对齐”)音频。

没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726le

21.29.18 GSM

全球移动通信音频系统。

21.29.19 h261

ITU-T H.261 视频。

2020 年 21 月 29 日 263 分

ITU-T H.263 / H.263-1996、H.263+ / H.263-1998 / H.263 版本 2 视频。

21.29.21 h264

ITU-T H.264 / MPEG-4 第 10 部分 AVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。

扩展名:h264、264

22 年 21 月 29 日

ITU-T H.265 / MPEG-H 第 2 部分 HEVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。

扩展名:hevc、h265、265

21.29.23 m4v

MPEG-4 第 2 部分视频。

21.29.24 mjpeg

运动 JPEG 视频。

扩展名:mjpg、mjpeg

21.29.25 MLP

Meridian Lossless Packing,也称为 Packed PCM、音频。

21.29.26 mp2

MPEG-1 音频第二层音频。

扩展名:mp2、m2a、mpa

21.29.27 mpeg1视频

MPEG-1 第 2 部分视频。

扩展名:mpg、mpeg、m1v

21.29.28 mpeg2视频

ITU-T H.262/MPEG-2 第 2 部分视频。

扩展名:m2v

21.29.29 奥布

AV1 低开销开放比特流单元复用器。时间定界符 OBU 将被插入到流的所有时间单元中。

21.29.30 原始视频

原始未压缩视频。

扩展名:yuv、rgb

31 年 29 月 21 日

蓝牙 SIG 低复杂度子带编解码器音频。

扩展名:sbc、msbc

21.29.32 真高清

杜比 TrueHD 音频。

扩展名:thd

21.29.33 VC1

SMPTE 421M / VC-1 视频。

21.30 segment, stream_segment, ssegment

基本流分段器。

该复用器将流输出到许多持续时间几乎固定的单独文件。输出文件名模式可以以类似于image2 的方式设置,或者通过使用strftime模板(如果时间选项已启用。

stream_segment是复用器的一个变体,用于写入流输出格式,即不需要全局标头,并且建议用于输出(例如,MPEG 传输流段)。 ssegment是 的较短别名stream_segment

每个片段都以所选参考流的关键帧开始,该关键帧通过参考流选项。

请注意,如果您希望对视频文件进行精确分割,则需要使输入关键帧与分段器期望的精确分割时间相对应,否则分段复用器将使用指定开始后下一个找到的关键帧来开始新分段时间。

分段复用器最适合单个恒定帧速率视频。

(可选)它可以通过设置选项segment_list来生成已创建段的列表。列表类型由 segment_list_type选项指定。段列表中的条目文件名默认设置为相应段文件的基名。

另请参阅hls muxer,它为 HLS 分段提供了更具体的实现。

21.30.1 选项

分段复用器支持以下选项:

increment_tc 1|0

如果设置为1,则在每个片段之间增加时间码 如果选择此选项,则输入需要在第一个视频流中具有时间码。默认值为 0

reference_stream specifier

设置引用流,由字符串说明符指定。如果说明符设置为auto,则自动选择引用。否则它必须是指定参考流的流说明符(请参阅 ffmpeg 手册中的“流说明符”一章)。默认值为auto

segment_format format

覆盖内部容器格式,默认情况下通过文件扩展名猜测。

segment_format_options options_list

使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值:必须进行转义。

segment_list name

还生成一个名为name的列表文件。如果未指定,则不会生成列表文件。

segment_list_flags flags

设置影响段列表生成的标志。

目前它支持以下标志:

cache

允许缓存(仅影响 M3U8 列表文件)。

live

允许生成实时友好的文件。

segment_list_size size

更新列表文件,使其包含最多size 的 段。如果为 0,列表文件将包含所有段。默认值为 0。

segment_list_entry_prefix prefix

在每个条目前面添加前缀。对于生成绝对路径很有用。默认情况下不应用前缀。

segment_list_type type

选择列表格式。

认可以下值:

flat

为创建的段生成一个平面列表,每行一个段。

csv, ext

为创建的段生成一个列表,每行一个段,每行匹配格式(逗号分隔值):

segment_filename,segment_start_time,segment_end_time

segment_filename是复用器根据提供的模式生成的输出文件的名称。如果需要,可应用 CSV 转义(根据 RFC4180)。

segment_start_timesegment_end_time指定段的开始和结束时间(以秒为单位)。

后缀为".csv"或 的列表文件".ext"将自动选择此格式。

'分机' 已被弃用,取而代之的是 '数据集'。

ffconcat

为创建的段生成 ffconcat 文件。可以使用 FFmpeg concat demuxer读取生成的文件。

后缀为".ffcat"或 的列表文件".ffconcat"将自动选择此格式。

m3u8

生成扩展的 M3U8 文件,版本 3,符合 http://tools.ietf.org/id/draft-pantos-http-live-streaming

带有后缀的列表文件".m3u8"将自动选择此格式。

如果未指定,则从列表文件名后缀猜测类型。

segment_time time

将分段持续时间设置为time,该值必须是持续时间规范。默认值为“2”。另请参阅 分段次数选项。

请注意,分割可能不准确,除非您在给定时间强制参考流关键帧。请参阅下面的介绍性通知和示例。

min_seg_duration time

将最小分段持续时间设置为time,该值必须是持续时间规范。这可以防止复用器以低于该值的持续时间结束片段。仅对 有效segment_time。默认值为“0”。

segment_atclocktime 1|0

If set to "1" split at regular clock time intervals starting from 00:00 o’clock. The time value specified in segment_time is used for setting the length of the splitting interval.

For example with segment_time set to "900" this makes it possible to create files at 12:00 o’clock, 12:15, 12:30, etc.

Default value is "0".

segment_clocktime_offset duration

Delay the segment splitting times with the specified duration when using segment_atclocktime.

For example with segment_time set to "900" and segment_clocktime_offset set to "300" this makes it possible to create files at 12:05, 12:20, 12:35, etc.

Default value is "0".

segment_clocktime_wrap_duration duration

Force the segmenter to only start a new segment if a packet reaches the muxer within the specified duration after the segmenting clock time. This way you can make the segmenter more resilient to backward local time jumps, such as leap seconds or transition to standard time from daylight savings time.

Default is the maximum possible duration which means starting a new segment regardless of the elapsed time since the last clock time.

segment_time_delta delta

Specify the accuracy time when selecting the start time for a segment, expressed as a duration specification. Default value is "0".

When delta is specified a key-frame will start a new segment if its PTS satisfies the relation:

PTS >= start_time - time_delta

This option is useful when splitting video content, which is always split at GOP boundaries, in case a key frame is found just before the specified split time.

In particular may be used in combination with the ffmpeg option force_key_frames. The key frame times specified by force_key_frames may not be set accurately because of rounding issues, with the consequence that a key frame time may result set just before the specified time. For constant frame rate videos a value of 1/(2*frame_rate) should address the worst case mismatch between the specified time and the time set by force_key_frames.

segment_times times

Specify a list of split points. times contains a list of comma separated duration specifications, in increasing order. See also the segment_time option.

segment_frames frames

Specify a list of split video frame numbers. frames contains a list of comma separated integer numbers, in increasing order.

This option specifies to start a new segment whenever a reference stream key frame is found and the sequential number (starting from 0) of the frame is greater or equal to the next value in the list.

segment_wrap limit

Wrap around segment index once it reaches limit.

segment_start_number number

Set the sequence number of the first segment. Defaults to 0.

strftime 1|0

Use the strftime function to define the name of the new segments to write. If this is selected, the output segment name must contain a strftime function template. Default value is 0.

break_non_keyframes 1|0

如果启用,则允许片段在关键帧以外的帧上开始。当关键帧之间的时间不一致时,这会改善某些玩家的行为,但可能会使其他玩家的情况变得更糟,并且可能会在搜索过程中导致一些奇怪的情况。默认为0.

reset_timestamps 1|0

在每个段的开头重置时间戳,以便每个段将以接近零的时间戳开始。它的目的是简化生成的片段的播放。可能不适用于某些复用器/编解码器组合。0默认 设置为。

initial_offset offset

指定应用于输出数据包时间戳的时间戳偏移。该参数必须是持续时间规范,默认为 0。

write_empty_segments 1|0

如果启用,如果在段通常跨越的时间段内没有数据包,则写入一个空段。否则,该段将被下一个写入的数据包填充。默认为0.

确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。

21.30.2 示例

  • 重新混合文件内容MKV到段列表 out-000.nut,输出-001.nut等,并将生成的段列表写入输出列表:
    ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut
    
  • 分段输入并设置输出分段的输出格式选项:
    ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4
    
  • 根据 segment_times选项指定的分割点对输入文件进行分段:
    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
    
  • 使用ffmpeg 强制关键帧 与片段选项一起强制输入中关键帧位于指定位置的选项分段时间增量考虑到设置关键帧时间时可能进行的舍入操作。
    ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \
    -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
    

    为了在输入文件上强制关键帧,需要进行转码。

  • 通过根据指定的帧编号序列分割输入文件来对输入文件进行分段分段帧选项:
    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
    
  • 转换MKVlibx264 使用和编码器到 TS 段aac
    ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
    
  • 对输入文件进行分段,并创建一个 M3U8 实时播放列表(可用作实时 HLS 源):
    ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \
    -segment_list_flags +live -segment_time 10 out%03d.mkv
    

21.31 smoothstreaming

Smooth Streaming muxer 生成一组适合传统 Web 服务器服务的文件(清单、块)。

window_size

指定清单中保留的片段数量。默认 0(保留全部)。

extra_window_size

指定从磁盘删除之前保留在清单之外的片段数量。默认 5。

lookahead_count

指定先行片段的数量。默认 2。

min_frag_duration

指定最小片段持续时间(以微秒为单位)。默认 5000000。

remove_at_exit

指定完成后是否删除所有片段。默认 0(不删除)。

21.32 streamhash

每个流哈希测试格式。

该复用器基于每个流计算并打印所有输入帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。

默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。

复用器的输出由每个流一行组成,格式为: streamindexstreamtypealgo = hash,其中 streamindex是映射流的索引,streamtype是指示流类型的单个字符,algo是表示流的短字符串使用的哈希函数,哈希是表示计算出的哈希值的十六进制数。

hash algorithm

使用字符串算法指定的加密哈希函数。支持的值包括MD5murmur3RIPEMD128RIPEMD160RIPEMD256RIPEMD320SHA160SHA224SHA256(默认)SHA512/224SHA512/256SHA384SHA512CRC32adler32

21.32.1 示例

计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:

ffmpeg -i INPUT -f streamhash out.sha256

要将 MD5 哈希打印到 stdout,请使用以下命令:

ffmpeg -i INPUT -f streamhash -hash md5 -

另请参阅哈希帧哈希复用器。

21.33 tee

tee 复用器可用于将相同的数据写入多个输出,例如文件或流。例如,它可用于通过网络传输视频并同时将其保存到磁盘。

ffmpeg 它与向命令行工具指定多个输出不同。使用 Tee 复用器,音频和视频数据将仅被编码一次。对于传统的多个输出,会启动多个并行编码操作,这可能是一个非常昂贵的过程。直接使用 libavformat API 时,tee 复用器没有用,因为这样可以将相同的数据包直接提供给多个复用器。

由于 tee muxer 不代表任何特定的输出格式,因此 ffmpeg 无法自动选择输出流。因此,所有用于输出的流都必须使用 指定-map。请参阅下面的示例。

某些编码器可能需要不同的选项,具体取决于输出格式;自动检测不能与 tee muxer 一起使用,因此需要明确指定它们。主要的例子是全局标题旗帜。

从输出在提供给复用器的文件名中指定,并用“|”分隔。如果任何从属名称包含“|” 分隔符、前导空格或尾随空格或任何特殊字符,这些字符必须进行转义(请参阅ffmpeg-utils(1) 手册中的“引用和转义”部分)。

21.33.1 选项

use_fifo bool

如果设置为 1,从机输出将使用fifo 复用器在单独的线程中进行处理。这允许补偿输出的不同速度/延迟/可靠性并设置透明恢复。默认情况下此功能处于关闭状态。

fifo_options

传递给 fifo 伪复用器实例的选项。请参阅先进先出

可以为每个从属设备指定复用器选项,方法是将它们作为 方括号之间用“:”分隔的=值对列表前置。如果选项值包含特殊字符或“:”分隔符,则必须对它们进行转义;请注意,这是第二级转义。

还认可以下特殊选项:

f

指定格式名称。如果无法从输出 URL 猜出,则为必需。

bsfs[/spec]

指定要应用于指定输出的比特流过滤器列表。

通过将流说明符附加到由 分隔的选项,可以指定给定的比特流过滤器适用于哪些流 /spec必须是流说明符(请参阅格式流说明符)。

如果未指定流说明符,则比特流过滤器将应用于输出中的所有流。如果输出包含无法应用比特流过滤器的流,例如应用于h264_mp4toannexb包含音频流的输出,这将导致输出操作失败。

比特流过滤器的选项必须以 的形式指定opt=value

可以指定多个比特流过滤器,用“,”分隔。

use_fifo bool

这允许覆盖单个从属复用器的 tee 复用器 use_fifo 选项。

fifo_options

这允许覆盖单个从属复用器的 tee 复用器 fifo_options。请参阅先进先出

select

选择应映射到从属输出的流,由流说明符指定。如果未指定,则默认为所有映射的流。如果输出格式不接受所有映射流,这将导致输出操作失败。

,您可以使用多个流说明符,以逗号 ( )分隔,例如:a:0,v

onfail

指定输出失败时的行为。可以将其设置为abort(默认)或ignoreabort如果该从站输出出现故障,将导致整个过程失败。ignore将忽略此输出的故障,因此其他输出将继续而不受影响。

21.33.2 示例

  • 对某些内容进行编码,并将其存档在 WebM 文件中,并通过 UDP 将其作为 MPEG-TS 进行流式传输:
    ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
      "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
    
  • 如上所述,但即使输出到本地文件失败(例如本地驱动器已满)也继续流式传输:
    ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a
      "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
    
  • 用于ffmpeg对输入进行编码,并将输出发送到三个不同的目的地。比特流过滤dump_extra器用于按照 MPEG-TS 格式的要求将额外数据信息添加到所有输出视频关键帧数据包中。选择的选项应用于输出.aac为了使其仅包含音频数据包。
    ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac
           -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
    
  • 如上所述,但仅选择a:1音频输出流。请注意,必须执行二级转义,因为“:”是用于分隔选项的特殊字符。
    ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac
           -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
    

21.34 webm_chunk

WebM 实时块复用器。

该复用器将 WebM 标头和块写为单独的文件,可供通过 DASH 支持 WebM Live 流的客户端使用。

21.34.1 选项

该复用器支持以下选项:

chunk_start_index

第一个块的索引(默认为 0)。

header

将写入初始化数据的标头的文件名。

audio_chunk_duration

每个音频块的持续时间(以毫秒为单位)(默认为 5000)。

21.34.2 示例

ffmpeg -f v4l2 -i /dev/video0 \
       -f alsa -i hw:0 \
       -map 0:0 \
       -c:v libvpx-vp9 \
       -s 640x360 -keyint_min 30 -g 30 \
       -f webm_chunk \
       -header webm_live_video_360.hdr \
       -chunk_start_index 1 \
       webm_live_video_360_%d.chk \
       -map 1:0 \
       -c:a libvorbis \
       -b:a 128k \
       -f webm_chunk \
       -header webm_live_audio_128.hdr \
       -chunk_start_index 1 \
       -audio_chunk_duration 1000 \
       webm_live_audio_128_%d.chk

21.35 webm_dash_manifest

WebM DASH 清单混合器。

该复用器实现 WebM DASH Manifest 规范来生成 DASH 清单 XML。它还支持 DASH 直播流的清单生成。

欲了解更多信息,请参阅:

21.35.1 选项

该复用器支持以下选项:

adaptation_sets

该选项具有以下语法:“id=x,streams=a,b,c id=y,streams=d,e”,其中 x 和 y 是适应集的唯一标识符,a、b、c、d 和e是相应音频和视频流的索引。使用此选项可以添加任意数量的适应集。

live

将其设置为 1 以创建直播 DASH 清单。默认值:0。

chunk_start_index

第一个块的起始索引。这将进入 '起始编号' 的属性段模板' 清单中的元素。默认值:0。

chunk_duration_ms

每个块的持续时间(以毫秒为单位)。这将进入 '期间' 的属性段模板' 清单中的元素。默认值:1000。

utc_timing_url

将返回 ISO 格式的 UTC 时间戳的页面的 URL。这将进入 '价值' 的属性UTC时间' 清单中的元素。默认值:无。

time_shift_buffer_depth

保证任何表示可用的最小移位缓冲区时间(以秒为单位)。这将进入 '时移缓冲区深度' 的属性MPD' 元素。默认值:60。

minimum_update_period

清单的最短更新周期(以秒为单位)。这将进入 '最小更新周期' 的属性MPD' 元素。默认值:0。

21.35.2 示例

ffmpeg -f webm_dash_manifest -i video1.webm \
       -f webm_dash_manifest -i video2.webm \
       -f webm_dash_manifest -i audio1.webm \
       -f webm_dash_manifest -i audio2.webm \
       -map 0 -map 1 -map 2 -map 3 \
       -c copy \
       -f webm_dash_manifest \
       -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
       manifest.xml

22 元数据

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

文件格式如下:

  1. 文件由一个标头和许多元数据标记组成,这些元数据标记分为多个部分,每个部分占一行。
  2. 标头是一个 ';FF元数据' 字符串,后跟版本号(现在为 1)。
  3. 元数据标签的形式为 '键=值'
  4. 紧随标题之后的是全局元数据
  5. 在全局元数据之后,可能存在包含每流/每章元数据的部分。
  6. 节以括号中的大写节名称(即 STREAM 或 CHAPTER)开始('[',']') 并以下一部分或文件结尾结束。
  7. 在章节部分的开头可能有一个可选的时基用于开始/结束值。它的形式必须是 '时基 = num / den',其中numden是整数。如果时基丢失,则假定开始/结束时间以纳秒为单位。

    接下来,章节部分必须包含章节开始和结束时间,格式为 '开始=数字','结束=数字',其中num是正整数。

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

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

提取 ffmetadata 文件ffmpeg如下:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE

从 FFMETADATAFILE 文件重新插入已编辑的元数据信息可以通过以下方式完成:

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

23 协议选项

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

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

支持的选项列表如下:

protocol_whitelist list (input)

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

24 协议

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

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

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

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

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

rw_timeout

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

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

24.1 amqp

高级消息队列协议 (AMQP) 版本 0-9-1 是基于代理的发布-订阅通信协议。

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

启动代理后,FFmpeg 客户端可以使用以下命令将数据流式传输到代理:

ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]

其中主机名和端口(默认为 5672)是代理的地址。客户端还可以设置用于身份验证的用户/密码。这两个字段的默认值都是“guest”。代理上的虚拟主机名称可以使用 vhost 设置。默认值为“/”。

多个订阅者可以使用以下命令从代理进行流式传输:

ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]

在 RabbitMQ 中,发布到代理的所有数据都流经特定的交换器,并且每个订阅客户端都有一个分配的队列/缓冲区。当数据包到达交换机时,根据交换机和routing_key字段,它可能会被复制到客户端的队列。

支持以下选项:

exchange

设置在经纪商上使用的交易所。RabbitMQ有几个预定义的交换器:“amq.direct”是默认的交换器,其中发布者和订阅者必须有匹配的routing_key;“amq.fanout”与广播操作相同(即数据被转发到独立于routing_key的fanout交换机上的所有队列);“amq.topic”与“amq.direct”类似,但允许更复杂的模式匹配(请参阅 RabbitMQ 文档)。

routing_key

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

pkt_size

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

connection_timeout

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

delivery_mode mode

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

persistent

交付模式设置为“持久”(2)。这是默认值。消息可能会写入代理的磁盘,具体取决于其设置。

non-persistent

交付模式设置为“非持久”(1)。除非代理面临内存压力,否则消息将保留在代理的内存中。

24.2 async

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

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

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

24.3 bluray

阅读蓝光播放列表。

接受的选项是:

angle

蓝光角度

chapter

开始章节 (1...N)

playlist

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

例子:

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

bluray:/mnt/bluray

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

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

24.4 cache

输入流的缓存包装器。

将输入流缓存到临时文件。它为直播带来了搜索功能。

接受的选项是:

read_ahead_limit

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

网址语法是

cache:URL

24.5 concat

物理级联协议。

按顺序阅读和查找许多资源,就好像它们是独特的资源一样。

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

concat:URL1|URL2|...|URLN

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

例如读取一系列文件split1.mpeg, split2.mpeg,split3.mpeg使用ffplay命令:

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

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

24.6 concatf

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

按顺序阅读和查找许多资源,就好像它们是独特的资源一样。

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

concatf:URL

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

例如读取一系列文件split1.mpeg, split2.mpeg,split3.mpeg在文件中以单独的行列出分割.txt使用ffplay命令:

ffplay concatf:split.txt

在哪里分割.txt包含行:

split1.mpeg
split2.mpeg
split3.mpeg

24.7 crypto

AES 加密的流读取协议。

接受的选项是:

key

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

iv

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

接受的 URL 格式:

crypto:URL
crypto+URL

24.8 data

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

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

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

24.9 fd

文件描述符访问协议。

可接受的语法是:

fd: -fd file_descriptor

如果FD未指定时,默认使用 stdout 文件描述符进行写入,使用 stdin 进行读取。与管道协议不同,fd 协议如果对应的是常规文件,则支持 Seek。为了安全起见,fd 协议不支持通过 URL 传递文件描述符。

该协议接受以下选项:

blocksize

设置 I/O 操作最大块大小(以字节为单位)。默认值为 INT_MAX,这将导致不限制请求的块大小。将此值设置得相当低可以缩短用户终止请求的反应时间,如果数据传输速度较慢,则这一点很有价值。

fd

设置文件描述符。

24.10 file

文件访问协议。

读取或写入文件。

文件 URL 可以采用以下形式:

file:filename

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

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

例如从文件中读取输入.mpeg使用ffmpeg 命令:

ffmpeg -i file:input.mpeg output.mpeg

该协议接受以下选项:

truncate

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

blocksize

设置 I/O 操作最大块大小(以字节为单位)。默认值为 INT_MAX,这将导致不限制请求的块大小。将此值设置得相当低可以缩短用户终止请求的反应时间,这对于慢速介质上的文件很有价值。

follow

如果设置为 1,协议将在文件末尾重试读取,从而允许读取仍在写入的文件。为了终止此操作,您需要使用 rw_timeout 选项,或使用中断回调(对于 API 用户)。

seekable

控制是否在文件上公布可查找性。0 表示不可查找,-1 表示自动(对于普通文件可查找,对于命名管道不可查找)。

许多分路器以不同的方式处理可查找和不可查找的资源,覆盖这一点可能会加快打开某些文件的速度,但代价是丢失一些功能(例如准确查找)。

24.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 匿名密码如果没有设置用户。

ftp-anonymous-password

以匿名用户身份登录时使用的密码。通常应使用电子邮件地址。

ftp-write-seekable

控制编码期间连接的可查找性。如果设置为 1,则资源应该是可查找的,如果设置为 0,则假定资源不可查找。默认值为 0。

注意:协议可以用作输出,但建议不要这样做,除非特别小心(测试、定制服务器配置等)。不同的 FTP 服务器在查找操作期间的行为方式不同。由于服务器限制,ff* 工具可能会生成不完整的内容。

24.12 gopher

地鼠协议。

24.13 gophers

地鼠协议。

采用 TLS 封装的 Gopher 协议。

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

24.15 http

HTTP(超文本传输​​协议)。

该协议接受以下选项:

seekable

控制连接的可查找性。如果设置为 1,则资源应该是可查找的;如果设置为 0,则假定资源不可查找;如果设置为 -1,它将尝试自动检测资源是否可查找。默认值为-1。

chunked_post

如果设置为 1,则对帖子使用分块传输编码,默认值为 1。

content_type

为 POST 消息或侦听模式设置特定的内容类型。

http_proxy

设置 HTTP 代理通过隧道,例如 http://example.com:1234

headers

设置自定义 HTTP 标头,可以覆盖内置的默认标头。该值必须是编码标头的字符串。

multiple_requests

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

post_data

设置自定义 HTTP 发布数据。

referer

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

user_agent

覆盖 User-Agent 标头。如果未指定,协议将使用描述 libavformat 构建的字符串。(“Lavf/<版本>”)

reconnect_at_eof

如果设置,则 eof 被视为错误并导致重新连接,这对于实时/无限流很有用。

reconnect_streamed

如果设置,则即使是流式传输/不可查找的流也将在出现错误时重新连接。

reconnect_on_network_error

如果连接期间出现 TCP/TLS 错误,则会自动重新连接。

reconnect_on_http_error

要重新连接的 HTTP 状态代码的逗号分隔列表。该列表可以包括特定的状态代码(例如“503”)或字符串“4xx”/“5xx”。

reconnect_delay_max

设置放弃重新连接的最大延迟(以秒为单位)

mime_type

导出 MIME 类型。

http_version

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

icy

如果设置为 1,则从服务器请求 ICY (SHOUTcast) 元数据。如果服务器支持此功能,则应用程序必须通过读取元数据来检索元数据icy_metadata_headers冰冷元数据包选项。默认值为 1。

icy_metadata_headers

如果服务器支持 ICY 元数据,则它包含 ICY 特定的 HTTP 回复标头,并以换行符分隔。

icy_metadata_packet

如果服务器支持 ICY 元数据,并且冰冷的设置为 1,这包含服务器发送的最后一个非空元数据包。对中流元数据更新感兴趣的应用程序应该定期对其进行轮询。

cookies

设置要在将来的请求中发送的 cookie。每个 cookie 的格式与 Set-Cookie HTTP 响应字段的值相同。多个 cookie 可以由换行符分隔。

offset

设置初始字节偏移量。

end_offset

尝试将请求限制为此偏移量之前的字节。

method

当用作客户端选项时,它设置请求的 HTTP 方法。

当用作服务器选项时,它设置客户端期望的 HTTP 方法。如果预期的 HTTP 方法与接收到的 HTTP 方法不匹配,客户端将收到错误请求响应。取消设置后,暂时不会检查 HTTP 方法。将来这将被自动检测所取代。

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
send_expect_100

为 POST 发送 Expect: 100-continue 标头。如果设置为 1,它将发送,如果设置为 0,则不会,如果设置为 -1,如果适用,它将尝试发送。默认值为-1。

auth_type

设置HTTP认证类型。没有 Digest 选项,因为此方法需要首先从服务器获取随机数参数,并且不能像 Basic 那样立即使用。

none

自动选择 HTTP 身份验证类型。这是默认设置。

basic

选择 HTTP 基本身份验证。

基本身份验证发送 Base64 编码的字符串,其中包含客户端的用户名和密码。Base64 不是一种加密形式,应被视为与以明文形式发送用户名和密码相同(Base64 是一种可逆编码)。如果需要保护资源,请强烈考虑使用基本身份验证之外的身份验证方案。HTTPS/TLS 应与基本身份验证一起使用。如果没有这些额外的安全增强功能,则不应使用基本身份验证来保护敏感或有价值的信息。

24.15.1 HTTP Cookie

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

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

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

24.16 Icecast

Icecast 协议(流到 Icecast 服务器)

该协议接受以下选项:

ice_genre

设置流类型。

ice_name

设置流名称。

ice_description

设置流描述。

ice_url

设置流网站 URL。

ice_public

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

user_agent

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

password

设置 Icecast 安装点密码。

content_type

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

legacy_icecast

这可以支持 Icecast 版本 < 2.4.0,该版本不支持 HTTP PUT 方法,但支持 SOURCE 方法。

tls

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

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

24.17 ipfs

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

该协议接受以下选项:

gateway

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

可以通过两种方式使用该协议。使用IPFS:

ffplay ipfs://<hash>

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

ffplay ipns://<hash>

24.18 mmst

基于 TCP 的 MMS(Microsoft 媒体服务器)协议。

24.19 mmsh

基于 HTTP 的 MMS(Microsoft 媒体服务器)协议。

所需的语法是:

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

24.20 md5

MD5输出协议。

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

下面是一些例子。

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

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

请注意,某些格式(通常是 MOV)要求输出协议可查找,因此它们将无法使用 MD5 输出协议。

24.21 pipe

UNIX 管道访问协议。

从 UNIX 管道读取和写入。

可接受的语法是:

pipe:[number]

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

例如,使用以下命令从标准输入读取ffmpeg

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

用于写入标准输出ffmpeg

ffmpeg -i test.wav -f avi pipe:1 | cat > test.avi
# ...this is the same as...
ffmpeg -i test.wav -f avi pipe: | cat > test.avi

该协议接受以下选项:

blocksize

设置 I/O 操作最大块大小(以字节为单位)。默认值为 INT_MAX,这将导致不限制请求的块大小。将此值设置得相当低可以缩短用户终止请求的反应时间,如果数据传输速度较慢,则这一点很有价值。

fd

设置文件描述符。

请注意,某些格式(通常是 MOV)要求输出协议可查找,因此它们将因管道输出协议而失败。

24.22 prompeg

Pro-MPEG 实践守则 #3 第 2 版 FEC 协议。

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

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

所需的语法是:

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

目标 UDP 端口用于port + 2列 FEC 流和port + 4行 FEC 流。

该协议接受以下选项:

l=n

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

d=n

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

用法示例:

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

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

24.24 rtmp

实时消息传递协议。

实时消息传送协议 (RTMP) 用于通过 TCP/IP 网络传输多媒体内容。

所需的语法是:

rtmp://[username:password@]server[:port][/app][/instance][/playpath]

接受的参数是:

username

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

password

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

server

RTMP 服务器的地址。

port

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

app

它是要访问的应用程序的名称。通常对应RTMP服务器上应用程序安装的路径(例如/一经请求/,/快闪/直播/, ETC。)。您也可以通过该选项覆盖从 URI 解析的值rtmp_app

playpath

它是参考app中指定的应用程序播放的资源的路径或名称,可以以“mp4:”为前缀。您也可以通过该选项覆盖从 URI 解析的值rtmp_playpath

listen

充当服务器,侦听传入连接。

timeout

等待传入连接的最长时间。表示听。

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

rtmp_app

要在 RTMP 服务器上连接的应用程序的名称。此选项会覆盖 URI 中指定的参数。

rtmp_buffer

设置客户端缓冲时间(以毫秒为单位)。默认值为 3000。

rtmp_conn

额外的任意 AMF 连接参数,从字符串解析,例如B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0. 每个值都以表示类型的单个字符作为前缀,B 表示布尔值,N 表示数字,S 表示字符串,O 表示对象,或 Z 表示 null,后跟一个冒号。对于布尔值,数据必须分别为 0 或 1(表示 FALSE 或 TRUE)。同样,对于对象,数据必须分别为 0 或 1 来结束或开始对象。子对象中的数据项可以通过在类型前加上“N”前缀并在值之前指定名称来命名(即NB:myFlag:1)。该选项可以多次使用来构造任意 AMF 序列。

rtmp_enhanced_codecs

指定客户端在增强型 RTMP 流中通告支持的编解码器列表。此选项应设置为以逗号分隔的 fourcc 值列表,例如hvc1,av01,vp09对于多个编解码器或hvc1仅对于一个编解码器。指定的列表将显示在连接命令消息的“fourCcLive”属性中。

rtmp_flashver

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

rtmp_flush_interval

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

rtmp_live

指定媒体是直播流。无法在直播流中进行恢复或搜索。默认值为any,表示订阅者首先尝试播放播放路径中指定的直播流。如果未找到该名称的直播流,则会播放录制的流。其他可能的值是liverecorded

rtmp_pageurl

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

rtmp_playpath

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

rtmp_subscribe

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

rtmp_swfhash

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

rtmp_swfsize

SWFVerification 所需的解压缩 SWF 文件的大小。

rtmp_swfurl

媒体的 SWF 播放器的 URL。默认情况下不会发送任何值。

rtmp_swfverify

播放器 swf 文件的 URL,自动计算哈希/大小。

rtmp_tcurl

目标流的 URL。默认为 proto://host[:port]/app。

tcp_nodelay=1|0

设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。

备注:目前尚未对写入套接字进行优化,以最大限度地减少系统调用并降低 TCP_NODELAY 的效率/效果。

ffplay例如,要从 RTMP 服务器“myserver”的应用程序“vod” 读取名为“sample”的多媒体资源:

ffplay rtmp://myserver/vod/sample

要发布到受密码保护的服务器,请分别传递播放路径和应用程序名称:

ffmpeg -re -i <input> -f flv -rtmp_playpath some/long/path -rtmp_app long/app/name rtmp://username:password@myserver/

24.25 rtmpe

加密的实时消息传递协议。

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

24.26 rtmps

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

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

24.27 rtmpt

通过 HTTP 建立隧道的实时消息传递协议。

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

24.28 rtmpte

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

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

24.29 rtmpts

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

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

24.30 libsmbclient

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

需要以下语法。

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

该协议接受以下选项。

timeout

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

truncate

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

workgroup

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

欲了解更多信息,请参阅:http://www.samba.org/

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

24.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 变体对应的字符串“rtmp”、“rtmpt”、“rtmpe”、“rtmps”、“rtmpte”、“rtmpts”之一,并且 server 、 port 、 app playpath具有指定相同含义RTMP 原生协议。 options包含以空格分隔的选项列表,其形式为 key = val

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

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

ffmpeg -re -i myfile -f flv rtmp://myserver/live/mystream

要播放相同的流,请使用ffplay

ffplay "rtmp://myserver/live/mystream live=1"

24.33 rtp

实时传输协议。

RTP URL 所需的语法为:rtp://主机名[:端口][? 选项=...]

port指定要使用的 RTP 端口。

支持以下 URL 选项:

ttl=n

设置 TTL(生存时间)值(仅适用于多播)。

rtcpport=n

将远程 RTCP 端口设置为n

localrtpport=n

将本地 RTP 端口设置为n

localrtcpport=n'

将本地 RTCP 端口设置为n

pkt_size=n

将最大数据包大小(以字节为单位)设置为n

buffer_size=size

设置最大 UDP 套接字缓冲区大小(以字节为单位)。

connect=0|1

connect()在 UDP 套接字上 执行 a (如果设置为 1)或不执行(如果设置为 0)。

sources=ip[,ip]

列出允许的源 IP 地址。

block=ip[,ip]

列出不允许(阻止)的源 IP 地址。

write_to_source=0|1

将数据包发送到最新收到的数据包的源地址(如果设置为 1)或默认远程地址(如果设置为 0)。

localport=n

将本地 RTP 端口设置为n

localaddr=addr

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

timeout=n

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

这是一个已弃用的选项。反而,本地rtp端口应该使用。

重要笔记:

  1. 如果rtcp端口未设置 RTCP 端口将设置为 RTP 端口值加 1。
  2. 如果本地rtp端口(本地 RTP 端口)未设置任何可用端口将用于本地 RTP 和 RTCP 端口。
  3. 如果本地rtcp端口(本地 RTCP 端口)未设置,它将设置为本地 RTP 端口值加 1。

24.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选项可以在/命令行上设置,也可以通过s 或 in ffplay在代码中设置。 AVOptionavformat_open_input

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

24.34.2 解复用器

支持以下选项。

initial_pause

如果设置为 1,则不立即开始播放流。默认值为 0。

rtsp_transport

设置 RTSP 传输协议。

它接受以下值:

udp

使用UDP作为底层传输协议。

tcp

使用 TCP(RTSP 控制通道内交织)作为较低层传输协议。

udp_multicast

使用UDP多播作为底层传输协议。

http

使用 HTTP 隧道作为较低层传输协议,这对于传递代理很有用。

https

使用 HTTPs 隧道作为较低层传输协议,这对于传递代理很有用,并且出于安全考虑而广泛使用。

可以指定多个较低层的传输协议,在这种情况下,一次尝试一个(如果一个协议的设置失败,则尝试下一个)。对于复用器,只有 'TCP协议' 和 'UDP协议' 支持选项。

rtsp_flags

设置 RTSP 标志。

接受以下值:

filter_src

仅接受来自协商的对等地址和端口的数据包。

listen

充当服务器,侦听传入连接。

prefer_tcp

如果 TCP 可用作 RTSP RTP 传输,请首先尝试使用 TCP 进行 RTP 传输。

satip_raw

导出原始 MPEG-TS 流而不是解复用。该标志将简单地写出原始流,原始 PAT/PMT/PID 保持不变。

默认值为 '没有任何'。

allowed_media_types

设置从服务器接受的媒体类型。

接受以下标志:

video
audio
data
subtitle

默认情况下它接受所有媒体类型。

min_port

设置最小本地 UDP 端口。默认值为 5000。

max_port

设置最大本地 UDP 端口。默认值为 65000。

listen_timeout

设置建立初始连接的最大超时(以秒为单位)。环境 监听超时> 0 套rtsp_flags到 ''。默认值为 -1,这意味着当 '' 模式已设置。

reorder_queue_size

设置要缓冲的数据包数量,以处理重新排序的数据包。

timeout

设置套接字 TCP I/O 超时(以微秒为单位)。

user_agent

覆盖用户代理标头。如果未指定,则默认为 libavformat 标识符字符串。

buffer_size

设置最大套接字缓冲区大小(以字节为单位)。

当通过 UDP 接收数据时,解复用器会尝试对接收到的数据包重新排序(因为它们可能会乱序到达,或者数据包可能会完全丢失)。可以通过将最大多路分解延迟设置为零(通过max_delayAVFormatContext 字段)来禁用此功能。

当使用 观看多比特率 Real-RTSP 流时,可以使用nnffplay分别选择视频和音频要显示的流,并且可以通过按和即时切换。 -vst -ast va

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

24.35 sap

会话公告协议 (RFC 2974)。从技术上讲,这不是 libavformat 中的协议处理程序,它是一个复用器和解复用器。它用于通过在单独的端口上定期宣布流的 SDP 来发送 RTP 流的信号。

24.35.1 复用器

提供给 muxer 的 SAP URL 的语法是:

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

RTP 数据包将发送到端口port上的目标,如果未指定端口,则发送到端口 5004。 options是一个- 分隔的列表。支持以下选项: &

announce_addr=address

指定用于发送公告的目标 IP 地址。如果省略,则公告将发送到常用的 SAP 公告多播地址 224.2.127.254 (sap.mcast.net),如果目标是 IPv6 地址,则发送到 ff0e::2:7ffe。

announce_port=port

指定发送公告的端口,如果未指定,则默认为 9875。

ttl=ttl

指定公告和 RTP 数据包的生存时间值,默认为 255。

same_port=0|1

如果设置为 1,则在同一端口对上发送所有 RTP 流。如果为零(默认值),则所有流都在唯一端口上发送,每个流上的端口号比前一个大 2。VLC/Live555 要求将其设置为 1,以便能够接收流。用于接收的 libavformat 中的 RTP 堆栈要求所有流都在唯一端口上发送。

示例命令行如下。

要在本地子网上广播流,以便在 VLC 中观看:

ffmpeg -re -i input -f sap sap://224.0.0.255?same_port=1

同样,对于观看ffplay

ffmpeg -re -i input -f sap sap://224.0.0.255

ffplay通过 IPv6 观看:

ffmpeg -re -i input -f sap sap://[ff0e::1:2:3:4]

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

24.36 sctp

流控制传输协议。

接受的 URL 语法是:

sctp://host:port[?options]

该协议接受以下选项:

listen

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

max_streams

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

24.37 srt

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

SRT URL 支持的语法是:

srt://hostname:port[?options]

options包含以 & 分隔的选项列表,其形式为 key = val

或者

options srt://hostname:port

options包含“ -key val ”选项列表。

该协议接受以下选项。

connect_timeout=milliseconds

连接超时; SRT 无法连接 RTT > 1500 毫秒(2 次握手交换),默认连接超时为 3 秒。此选项适用于呼叫者和集合点连接模式。连接超时是为集合模式设置的值的 10 倍(可以用作早期版本此连接问题的解决方法)。

ffs=bytes

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

inputbw=bytes/seconds

发送方标称输入速率,以字节/秒为单位。与一起使用 奥海德, 什么时候最大体重设置为relative(0),计算恢复包随主媒体流发送时的最大发送速率: 输入体重*(100+奥海德) / 100 如果输入体重未设置时最大体重设置为相对 (0),实际输入速率在库内评估。默认值为 0。

iptos=tos

IP 服务类型。仅适用于发件人。默认值为 0xB8。

ipttl=ttl

IP 生存时间。仅适用于发件人。默认值为 64。

latency=microseconds

基于时间戳的数据包传送延迟。用于吸收丢失数据包重传的突发。该标志同时设置重复潜伏期同等潜伏期 为相同的值。请注意,在版本 1.3.0 之前,这是设置延迟的唯一标志,但这实际上等同于设置同等潜伏期,当一方是发送方并且重复潜伏期 当 side 为接收方时,不支持双向流发送。

listen_timeout=microseconds

设置套接字监听超时。

maxbw=bytes/seconds

最大发送带宽,以字节/秒为单位。-1 无限(CSRTCC 限制为 30mbps) 0 相对于输入速率(参见输入体重) >0 绝对极限值 默认值为 0(相对)

mode=caller|listener|rendezvous

连接方式。 呼叫者打开客户端连接。 听众启动服务器来侦听传入的连接。 会合使用 Rendez-Vous 连接模式。默认值为调用者。

mss=bytes

最大段大小,以字节为单位。用于使用数据包计数器进行缓冲区分配和速率计算(假定数据包已填满)。使用对等体之间最小的 MSS。整个互联网默认为 1500。这是 UDP 数据包的最大大小,只能减小,除非您有一些不寻常的专用网络设置。默认值为 1500。

nakreport=1|0

如果设置为 1,接收方将定期发送“UMSG_LOSSREPORT”消息,直到重新传输或故意丢弃丢失的数据包。默认值为 1。

oheadbw=percents

高于输入速率的恢复带宽开销(以百分比为单位)。看输入体重。默认值为 25%。

passphrase=string

HaiCrypt 加密/解密密码字符串,长度从 10 到 79 个字符。密码是发送者和接收者之间共享的秘密。它用于使用 PBKDF2(基于密码的密钥派生函数)生成密钥加密密钥。仅当以下情况时才使用PBKeylen是非零的。仅当接收到的数据被加密时,它才在接收器上使用。配置的密码无法恢复(只写)。

enforced_encryption=1|0

如果为 true,则连接双方必须设置相同的密码(包括空,即不加密)。如果密码不匹配或只有一侧未加密,连接将被拒绝。默认为 true。

kmrefreshrate=packets

加密密钥切换为新密钥后要传输的数据包数量。默认值为-1。-1 表示自动(srt 库中为 0x1000000)。此选项的范围是 0 - 之间的整数INT_MAX

kmpreannounce=packets

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

snddropdelay=microseconds

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

特殊值-1:根本不丢弃发送方的数据包。

payload_size=bytes

设置在实时模式下单次调用发送函数期间传输的数据包的最大声明大小。如果不使用此值(文件模式下的默认值),则使用 0。默认值为-1(自动),通常表示 MPEG-TS;如果您要使用 SRT 发送任何不同类型的有效负载,例如将实时流包装在非常小的帧中,那么您可以使用更大的最大帧大小,但不能大于 1456 字节。

pkt_size=bytes

别名为 '有效负载大小'。

peerlatency=microseconds

延迟值(如中所述重复潜伏期)由发送方设置为接收方的最小值。

pbkeylen=bytes

发送方加密密钥长度(以字节为单位)。只能设置为 0、16、24 和 32。如果不为 0,则启用发送方加密。接收方不需要(设置为 0),密钥大小在 HaiCrypt 握手中从发送方获取。默认值为 0。

rcvlatency=microseconds

从发送数据包的那一刻到将其传递到接收函数中的接收方应用程序的那一刻起应该经过的时间。这个时间应该是一个足够大的缓冲时间,足以覆盖发送所花费的时间、意外延长的RTT时间以及重传丢失的UDP数据包所需的时间。有效延迟值将是该选项值和以下值中的最大值同等潜伏期 由对端设置。在版本 1.3.0 之前,此选项仅可用潜伏

recv_buffer_size=bytes

设置UDP接收缓冲区大小,以字节表示。

send_buffer_size=bytes

设置UDP发送缓冲区大小,以字节为单位表示。

timeout=microseconds

设置读取、写入和连接操作的引发错误超时。请注意,SRT 库具有可以单独控制的内部超时,此处设置的值只是这些超时的上限。

tlpktdrop=1|0

太迟的数据包丢失。当在接收器上启用时,它会跳过尚未及时传送的丢失数据包,并在播放时间到来时将以下数据包传送到应用程序。它还向发送方发送一个假 ACK。当在发送方上启用并在接收对等方上启用时,发送方会丢弃无法及时传送的旧数据包。如果接收方支持,它会在发送方自动启用。

sndbuf=bytes

设置发送缓冲区大小,以字节表示。

rcvbuf=bytes

设置接收缓冲区大小,以字节为单位表示。

接收缓冲区不得大于FFS

lossmaxttl=packets

再订购容差可能增长到的值。当重排序容差 > 0 时,数据包丢失报告将延迟,直到收到该数量的数据包为止。每次“迟来的”数据包到来时,重排序容差都会增加,但这并不是由于重传(即,当 UDP 数据包倾向于乱序),最新序列与该数据包序列之间的差异,并且不超过该选项的值。默认情况下它是0,这意味着该机制被关闭,并且丢失报告总是在序列中遇到“间隙”时立即发送。

minversion

对等方所需的最低 SRT 版本。与不满足最低版本要求的对等方的连接将被拒绝。

十六进制版本格式为 0xXXYYZZ,表示人类可读形式的 xyz。

streamid=string

限制为 512 个字符的字符串,可以在连接之前在套接字上设置。侦听器端将能够从 srt_accept 返回的套接字检索此流 ID,并通过具有该设置流 ID 的套接字连接。SRT 不强制对此字符串的内容进行任何特殊解释。此选项在 Rendezvous 连接中没有意义;结果可能只是一侧会覆盖另一侧的值,而哪一方获胜就看运气了

srt_streamid=string

别名为 '流ID' 以避免与 ffmpeg 命令行选项发生冲突。

smoother=live|file

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

messageapi=1|0

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

Stream API(默认,当此选项为 false 时)。在此模式下,您可以通过一条发送指令发送任意数量的数据,甚至可以使用直接从文件读取的专用函数。内部设施将负责任何速度和拥堵控制。接收时,也可以接收任意数量的数据,未提取的数据将等待下一次调用。Stream 模式下的数据部分之间没有边界。

消息API。在这种模式下,您的单个发送指令恰好传递一个有边界的数据(一条消息)。与 Live 模式相反,该消息可能跨越多个 UDP 数据包,唯一的大小限制是它应作为一个整体放入发送缓冲区中。接收方应使用尽可能大的缓冲区来接收消息,否则消息将不会被放弃。当消息不完整时(未收到所有数据包或存在数据包丢失),它不会被放弃。

transtype=live|file

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

live:设置与实时传输相同的选项。在这种模式下,您应该通过一个发送指令仅发送适合一个 UDP 数据包的数据,并且限制为第一个定义的值有效负载大小(此模式下默认为 1316)。此模式下没有速度控制,只有带宽控制(如果配置),以便不超过开销传输(重传和控制数据包)的带宽。

文件:设置非实时传输的选项。看消息API 进一步解释

linger=seconds

套接字关闭时等待未发送数据的秒数。默认值为-1。-1 表示自动(在实时模式下 0 秒关闭,在文件模式下 180 秒开启)。此选项的范围是 0 - 之间的整数INT_MAX

tsbpd=1|0

如果为 true,则使用基于时间戳的数据包传送模式。默认行为取决于传输类型:在实时模式下启用,在文件模式下禁用。

有关更多信息,请参阅: https: //github.com/Haivision/srt

24.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 个字节用作主盐。

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

24.40 tee

将输出写入多个协议。各个输出由 | 分隔。

tee:file://path/to/local/this.avi|file://path/to/local/that.avi

24.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=microseconds

设置引发错误超时,以微秒表示。

此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则引发错误。

listen_timeout=milliseconds

设置监听超时,以毫秒为单位。

recv_buffer_size=bytes

设置接收缓冲区大小,以字节表示。

send_buffer_size=bytes

设置发送缓冲区大小,以字节表示。

tcp_nodelay=1|0

设置 TCP_NODELAY 以禁用 Nagle 算法。默认值为 0。

备注:目前尚未对写入套接字进行优化,以最大限度地减少系统调用并降低 TCP_NODELAY 的效率/效果。

tcp_mss=bytes

设置传出 TCP 数据包的最大分段大小(以字节为单位)。

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

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

24.42 tls

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

TLS/SSL url 所需的语法是:

tls://hostname:port[?options]

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

ca_file, cafile=filename

包含被视为可信的证书颁发机构 (CA) 根证书的文件。如果链接的 TLS 库包含默认值,则可能不需要指定该默认值即可进行验证,但并非所有库和设置都内置默认值。该文件必须采用 OpenSSL PEM 格式。

tls_verify=1|0

如果启用,请尝试验证我们正在通信的对等点。请注意,如果使用 OpenSSL,当前只能确保对等证书由 CA 数据库中的根证书之一签名,但不能验证该证书是否与我们尝试连接的主机名实际匹配。(对于其他后端,主机名也会经过验证。)

默认情况下禁用此功能,因为在许多情况下它需要调用者提供 CA 数据库。

cert_file, cert=filename

包含在与对等方握手时使用的证书的文件。(当作为服务器在侦听模式下运行时,对等方通常需要这样做,而仅在某些设置中强制要求客户端证书。)

key_file, key=filename

包含证书私钥的文件。

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

要使用以下命令播放来自 TLS/SSL 服务器的流ffplay

ffplay tls://hostname:port

24.43 udp

用户数据报协议。

UDP URL 所需的语法是:

udp://hostname:port[?options]

options包含以 & 分隔的选项列表,其形式为key = val

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

支持的选项列表如下。

buffer_size=size

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

bitrate=bitrate

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

burst_bits=bits

当使用比特率时,它指定数据包突发中的最大位数。

localport=port

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

localaddr=addr

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

pkt_size=size

设置 UDP 数据包的大小(以字节为单位)。

reuse=1|0

明确允许或禁止重用 UDP 套接字。

ttl=ttl

设置生存时间值(仅适用于多播)。

connect=1|0

使用 初始化 UDP 套接字connect()。在这种情况下,稍后无法使用 ff_udp_set_remote_url 更改目标地址。如果开始时不知道目标地址,也可以在 ff_udp_set_remote_url 中指定此选项。这允许找出具有 getsockname 的数据包的源地址,并且如果收到“目标无法到达”,则使写入返回 AVERROR(ECONNREFUSED)。对于接收而言,这具有仅从指定对等地址/端口接收数据包的优点。

sources=address[,address]

只接收从指定地址发送的数据包。在多播的情况下,还订阅仅来自这些地址的多播流量。

block=address[,address]

忽略从指定地址发送的数据包。如果是多播,还要排除多播订阅中的源地址。

fifo_size=units

设置UDP接收循环缓冲区大小,以数据包数量表示,大小为188字节。如果未指定,则默认为 7*4096。

overrun_nonfatal=1|0

在 UDP 接收循环缓冲区溢出的情况下生存。默认值为 0。

timeout=microseconds

设置引发错误超时,以微秒表示。

此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则引发错误。

broadcast=1|0

明确允许或禁止 UDP 广播。

请注意,广播可能无法在具有广播风暴保护的网络上正常工作。

24.43.1 示例

  • 用于ffmpeg通过 UDP 流式传输到远程端点:
    ffmpeg -i input -f format udp://hostname:port
    
  • 用于ffmpeg使用 188 大小的 UDP 数据包通过 UDP 以 mpegts 格式进行流式传输,并使用较大的输入缓冲区:
    ffmpeg -i input -f mpegts udp://hostname:port?pkt_size=188&buffer_size=65535
    
  • 用于ffmpeg通过 UDP 从远程端点接收:
    ffmpeg -i udp://[multicast-address]:port ...
    

24.44 unix

Unix 本地套接字

Unix 套接字 URL 所需的语法是:

unix://filepath

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

timeout

超时(以毫秒为单位)

listen

以侦听模式创建 Unix 套接字。

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

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

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

pkt_size

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

25 设备选项

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

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

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

26 个输入设备

输入设备是 FFmpeg 中的配置元素,可以访问来自连接到系统的多媒体设备的数据。

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

您可以使用配置选项“–disable-indevs”禁用所有输入设备,并使用选项“–enable-indev= INDEV ”有选择地启用输入设备,或者您可以使用选项“–disable”禁用特定输入设备-indev= INDEV ".

ff* 工具的选项“-devices”将显示支持的输入设备列表。

下面是当前可用输入设备的描述。

26.1 alsa

ALSA(高级 Linux 声音架构)输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libasound。

该设备允许从 ALSA 设备捕获。要捕获的设备的名称必须是 ALSA 卡标识符。

ALSA 标识符的语法如下:

hw:CARD[,DEV[,SUBDEV]]

其中DEVSUBDEV组件是可选的。

三个参数(按顺序:CARDDEVSUBDEV)指定卡号或标识符、设备号和子设备号(-1 表示任意)。

要查看系统当前识别的卡列表,请检查文件/proc/asound/cards/proc/asound/设备

例如,要从ffmpeg卡 ID 为 0 的 ALSA 设备进行捕获,您可以运行以下命令:

ffmpeg -f alsa -i hw:0 alsaout.wav

欲了解更多信息,请参阅: http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html

26.1.1 选项

sample_rate

设置采样率(以 Hz 为单位)。默认值为 48000。

channels

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

26.2 android_camera

Android 相机输入设备。

此输入设备使用 Android Camera2 NDK API,该 API 可在 API 级别 24+ 的设备上使用。在配置过程中会自动检测 android_camera 的可用性。

该设备允许从 Android 设备上的所有相机进行捕获,这些相机集成到 Camera2 NDK API 中。

可用的相机在内部枚举,可以使用camera_index参数进行选择。输入文件字符串将被丢弃。

通常后置摄像头的索引为 0,而前置摄像头的索引为 1。

26.2.1 选项

video_size

设置以字符串形式给出的视频大小,例如 640x480 或 hd720。如果请求的视频大小不可用或默认情况下,则回退到 Android 报告的第一个可用配置。

framerate

设置视频帧率。如果请求的帧速率不可用或默认情况下 (-1),则回退到 Android 报告的第一个可用配置。

camera_index

设置要使用的相机的索引。默认值为 0。

input_queue_size

设置要缓冲的最大帧数。默认值为 5。

26.3 avfoundation

AVFoundation 输入设备。

AVFoundation 是 Apple 目前推荐的 OSX >= 10.7 以及 iOS 上的流抓取框架。

输入文件名必须按以下语法给出:

-i "[[VIDEO]:[AUDIO]]"

第一个条目选择视频输入,而后者选择音频输入。流必须由设备名称或设备索引指定,如设备列表所示。或者,可以使用以下索引通过索引来选择视频和/或音频输入设备 -video_device_index <索引> 和/或 -audio_device_index <索引> ,覆盖输入文件名中给出的任何设备名称或索引。

可以通过使用枚举所有可用设备-list_devices true,列出所有设备名称和相应索引。

有两个设备名称别名:

default

选择对应类型的AVFoundation默认设备。

none

不记录相应的媒体类型。这相当于指定一个空的设备名称或索引。

26.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 流。

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

26.4 bktr

BSD 视频输入设备。

26.4.1 选项

framerate

设置帧速率。

video_size

设置视频帧大小。默认为vga.

standard

可用值为:

pal
ntsc
secam
paln
palm
ntscj

26.5 decklink

DeckLink 输入设备为 Blackmagic DeckLink 设备提供捕获功能。

要启用此输入设备,您需要 Blackmagic DeckLink SDK,并且需要使用适当的--extra-cflags 和进行配置--extra-ldflags。在 Windows 上,您需要通过widl.

DeckLink对其支持的格式非常挑剔。输入的像素格式可以设置原始格式。必须根据您的设备确定帧速率和视频大小 -list_formats 1。音频采样率始终为 48 kHz,通道数可以为 2、8 或 16。请注意,所有音频通道都捆绑在一个音轨中。

26.5.1 选项

list_devices

如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用 -sourcesffmpeg 的选项列出可用的输入设备。

list_formats

如果设置为真的,打印支持的格式列表并退出。默认为错误的

format_code <FourCC>

这会将输入视频格式设置为 FourCC 给出的格式。要查看您的设备支持的值,请使用列表格式。请注意,有一个 FourCC‘朋友’也可以用作朋友(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

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

此选项是捕获的 SD PAL VBI 行(特别是行 6 到 22 以及行 318 到 335)的位掩码。第 6 行是掩码中的 LSB。不包含图文电视信息的选定行将被忽略。您可以使用特殊的全部选择所有可能的行的常量,或者 标准跳过第 6、318 和 319 行,这些行并不与所有接收器兼容。

对于 SD 源,ffmpeg 需要使用--enable-libzvbi. 对于高清源,在较旧的(4K 之前)DeckLink 卡型号上,您必须以 10 位模式进行捕捉。

channels

定义要捕获的音频通道数。必须是 '2','8' 或者 '16'。默认为 '2'。

duplex_mode

设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。

注意: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','两个子设备完整','四子设备半'

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'

timecode_format

要包含在帧和视频流元数据中的时间码类型。必须是 '没有任何','rp188vitc','rp188vitc2','rp188ltc','rp188hfr','rp188any','维生素C','维生素C2', 或者 '连续剧'。默认为 '没有任何' (不包含)。

为了正确支持 50/60 fps 时间码,查询的时间码类型的顺序为 'rp188any' 是 HFR、VITC1、VITC2 和 LTC,适用于 >30 fps 的内容。请注意,这与 DeckLink API 使用的顺序略有不同,即 HFR、VITC1、LTC、VITC2。

video_input

设置视频输入源。必须是 '未设置','sdi','高清多媒体接口','光纤_SDI','成分','合成的' 或者 '视频'。默认为 '未设置'。

audio_input

设置音频输入源。必须是 '未设置','嵌入式','aes_ebu','模拟','模拟_xlr','模拟_RCA' 或者 '麦克风'。默认为 '未设置'。

video_pts

设置视频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '视频'。

audio_pts

设置音频数据包时间戳源。必须是 '视频','声音的','参考','挂钟' 或者 '绝对挂钟'。默认为 '声音的'。

draw_bars

如果设置为 '真的',在信号丢失的情况下绘制彩条。默认为 '真的'。

queue_size

设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,传入的帧将被丢弃。默认为 '1073741824'。

audio_depth

设置音频样本位深度。必须是 '16' 或者 '32'。默认为 '16'。

decklink_copyts

如果设置为真的,时间戳按原样转发,而不删除初始偏移量。默认为错误的

timestamp_align

捕获开始时间对齐(以秒为单位)。如果设置为非零,则输入帧将被丢弃,直到系统时间戳与配置值一致。最多可容忍一帧持续时间的对准差异。这对于维护为“N 路”冗余部署的 N 个不同硬件设备之间的输入同步非常有用。在使用此选项之前,应将不同硬件设备的系统时间通过NTP或PTP等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能不会发生。同步可能会出现 1 帧错误,或者在极少数情况下会出现错误 时间戳对齐秒。默认为 '0'。

wait_for_tc (bool)

丢弃帧,直到收到带有时间码的帧。有时,第一个输入帧未接收到串行时间码。如果发生这种情况,存储的流时间码将不准确。如果该选项设置为真的,输入帧将被丢弃,直到接收到带有时间码的帧。必须指定选项timecode_format 。默认为错误的

enable_klv(bool)

如果设置为真的,从VANC中提取KLV数据并输出KLV数据包。KLV VANC 数据包根据 MID 和 PSC 字段进行连接并聚合为一个 KLV 数据包。默认为错误的

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

26.6 dshow

Windows DirectShow 输入设备。

当使用 mingw-w64 项目构建 FFmpeg 时,将启用 DirectShow 支持。目前仅支持音频和视频设备。

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

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

TYPE=NAME[:TYPE=NAME]

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

26.6.1 选项

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

video_size

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

framerate

设置捕获视频的帧速率。

sample_rate

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

sample_size

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

channels

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

list_devices

如果设置为真的,打印设备列表并退出。

list_options

如果设置为真的,打印所选设备的选项列表并退出。

video_device_number

设置同名设备的视频设备号(从0开始,默认为0)。

audio_device_number

设置同名设备的音频设备号(从0开始,默认为0)。

pixel_format

选择 DirectShow 使用的像素格式。仅当视频编解码器未设置或设置为 rawvideo 时才可以设置此选项。

audio_buffer_size

设置音频设备缓冲区大小(以毫秒为单位)(这会直接影响延迟,具体取决于设备)。默认使用音频设备的默认缓冲区大小(通常为 500ms 的倍数)。将此值设置得太低会降低性能。另请参阅 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

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动更改视频滤镜属性和配​​置。请注意,对于交叉开关设备,有时可能需要调整此对话框中的值以在 PAL (25 fps) 和 NTSC (29.97) 输入帧速率、大小、隔行扫描等之间切换。更改这些值可以启用不同的扫描速率/帧速率并避免底部的绿条、闪烁的扫描线等。请注意,对于某些设备,更改这些属性也会影响将来的调用(设置新的默认值),直到系统重新启动为止。

show_audio_device_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动更改音频过滤器属性和配置。

show_video_crossbar_connection_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们在打开视频设备时手动修改交叉开关引脚布线。

show_audio_crossbar_connection_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们在打开音频设备时手动修改交叉开关引脚路由。

show_analog_tv_tuner_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为真的,在捕获开始之前,向最终用户弹出一个显示对话框,允许他们手动修改电视音频(例如单声道与立体声、语言 A、B 或 C)。

audio_device_load

从文件加载音频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定音频捕获源,但它可以是任何东西,甚至是假的。

audio_device_save

将当前使用的音频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。如果存在同名文件,它将被覆盖。

video_device_load

从文件加载视频捕获过滤器设备,而不是按名称搜索它。如果过滤器支持其属性的序列化,它也可能加载其他参数。要使用此功能,必须指定视频捕获源,但它可以是任何东西,甚至是假的。

video_device_save

将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件中。如果存在同名文件,它将被覆盖。

use_video_device_timestamps

如果设置为错误的,视频帧的时间戳将从挂钟导出,而不是捕获设备提供的时间戳。这允许在提供不可靠时间戳的设备周围工作。

26.6.2 示例

  • 打印 DirectShow 支持的设备列表并退出:
    $ ffmpeg -list_devices true -f dshow -i dummy
    
  • 打开视频设备相机
    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开名为Camera的第二个视频设备:
    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备摄像头和音频设备麦克风
    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
    
  • 打印所选设备中支持的选项列表并退出:
    $ ffmpeg -list_options true -f dshow -i video="Camera"
    
  • 指定要按名称或备用名称捕获的引脚名称,指定备用设备名称:
    $ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone"
    
  • 配置交叉开关设备,指定交叉开关引脚,允许用户在启动时调整视频捕获属性:
    $ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0
         -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
    

26.7 fbdev

Linux 帧缓冲区输入设备。

Linux 帧缓冲区是一个独立于图形硬件的抽象层,用于在计算机显示器(通常是控制台)上显示图形。通过文件设备节点来访问,通常 /dev/fb0

有关更多详细信息,请阅读 Linux 源代码树中包含的文件 Documentation/fb/framebuffer.txt。

另请参见http://linux-fbdev.sourceforge.net/和 fbset(1)。

从帧缓冲设备进行记录/dev/fb0ffmpeg

ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi

您可以使用以下命令获取单个屏幕截图图像:

ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg

26.7.1 选项

framerate

设置帧速率。默认值为 25。

26.8 gdigrab

基于 Win32 GDI 的屏幕捕获设备。

该设备允许您捕获 Windows 上的显示区域。

输入文件名有两个选项:

desktop

或者

title=window_title

第一个选项将捕获整个桌面或桌面的固定区域。第二个选项将捕获单个窗口的内容,无论其在屏幕上的位置如何。

例如,要使用以下命令获取整个桌面ffmpeg

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

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

ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg

获取名为“计算器”的窗口的内容

ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg

26.8.1 选项

draw_mouse

指定是否绘制鼠标指针。使用该值0不绘制指针。默认值为1

framerate

设置抓取帧率。默认值为ntsc,对应帧速率为30000/1001

show_region

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

如果用 指定show_region1,则抓取区域将显示在屏幕上。使用此选项,如果仅抓取屏幕的一部分,则很容易知道正在抓取的内容。

请注意,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

设置视频帧大小。默认情况下捕获全屏桌面被选择,或者完整窗口大小,如果标题=窗口标题被选中。

offset_x

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

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

offset_y

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

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

26.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 端口,或“自动”以选择第一个连接的端口。

26.9.1 选项

dvtype

覆盖 DV/HDV 的自动检测。仅当自动检测不起作用或应禁止使用不同的设备类型时才应使用此功能。将 DV 设备视为 HDV(反之亦然)将不起作用并导致未定义的行为。价值汽车,DV高清病毒都支持。

dvbuffer

设置传入数据缓冲区的最大大小(以帧为单位)。对于 DV,这是一个精确值。对于 HDV,它不是帧精确的,因为 HDV 没有固定的帧大小。

dvguid

通过指定其 GUID 选择捕获设备。仅从指定设备执行捕获,如果未找到具有给定 GUID 的设备,则捕获失败。如果同时连接多个设备,这对于选择输入非常有用。查看 /sys/bus/firewire/devices 以查找 GUID。

26.9.2 示例

  • 抓取并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 如果源是 HDV,则使用 100000 个数据包的数据包缓冲区抓取并记录 FireWire DV/HDV 设备的输入。
    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

26.10 jack

JACK输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libjack。

JACK 输入设备创建一个或多个 JACK 可写客户端,每个音频通道一个,名称为client_name :input_N 其中 client_name是应用程序提供的名称,N 是标识通道的数字。每个可写客户端都会将获取的数据发送到FFmpeg输入设备。

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

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

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

下面的示例展示了如何使用 捕获 JACK 可读客户端ffmpeg

# Create a JACK writable client with name "ffmpeg".
$ ffmpeg -f jack -i ffmpeg -y out.wav

# Start the sample jack_metro readable client.
$ jack_metro -b 120 -d 0.2 -f 4000

# List the current JACK clients.
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm

# Connect metro to the ffmpeg writable client.
$ jack_connect metro:120_bpm ffmpeg:input_1

欲了解更多信息,请阅读: http: //jackaudio.org/

26.10.1 选项

channels

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

26.11 kmsgrab

KMS 视频输入设备。

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

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

如果您不明白所有这些意味着什么,您可能不想要这个。看着 x11抢反而。

26.11.1 选项

device

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

format

帧缓冲区的像素格式。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到这一点,但需要为早期版本提供。默认为背景0,这是 Linux 控制台和 Xorg X 服务器最常用的格式。

format_modifier

用于在输出帧上发出信号的格式修饰符。这是正确导入某些 API 所必需的。如果您运行的是 Linux 5.7 或更高版本,则可以自动检测到它,但在早期版本中需要时需要明确提供。有关可能的值,请参阅 libdrm 文档。

crtc_id

用于定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。

plane_id

用于定义捕获源的 KMS 平面 ID。如果两者都没有,则默认为找到的第一个活动平面crtc_id也不飞机编号被指定。

framerate

捕捉的帧速率。这不与任何页面翻转或帧缓冲区更改同步 - 它只是定义帧缓冲区采样的间隔。采样速度快于帧缓冲区更新速率将生成具有相同内容的独立帧。默认为30.

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

26.12 lavfi

Libavfilter 输入虚拟设备。

该输入设备从 libavfilter 滤波器图的开放输出板读取数据。

对于每个filtergraph打开的输出,输入设备将创建一个对应的流,该流映射到生成的输出。过滤图通过选项指定图形

26.12.1 选项

graph

指定用作输入的过滤器图。每个视频打开输出必须用“out N ”形式的唯一字符串进行标记,其中N是从 0 开始的数字,对应于设备生成的映射输入流。第一个未标记的输出会自动分配给“out0”标签,但所有其他输出都需要显式指定。

后缀“+subcc”可以附加到输出标签,以创建一个额外的流,其中隐藏式字幕数据包附加到该输出(实验性的;目前仅适用于 EIA-608 / CEA-708)。subcc 流是在所有普通流之后按照相应流的顺序创建的。例如,如果存在“out19+subcc”、“out7+subcc”直至“out42”,则流#43是流#7的subcc,并且流#44是流#19的subcc。

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

graph_file

设置要读取并发送到其他过滤器的过滤器图表的文件名。filtergraph 的语法与 option graph指定的语法相同。

dumpgraph

将图表转储到 stderr。

26.12.2 示例

  • 创建彩色视频流并使用以下命令进行播放ffplay
    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 如上例,但使用文件名来指定图形描述,并省略“out0”标签:
    ffplay -f lavfi color=c=pink
    
  • 创建三个不同的视频测试过滤源并播放它们:
    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
    
  • 使用 amovie 源从文件中读取音频流并使用以下命令进行播放ffplay
    ffplay -f lavfi "amovie=test.wav"
    
  • 读取音频流和视频流并使用以下命令进行播放 ffplay
    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
    
  • 将解码帧转储到图像并将隐藏式字幕转储到文件(实验):
    ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rawvideo subcc.bin
    

26.13 libcdio

基于 libcdio 的音频 CD 输入设备。

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

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

例如,将ffmpeg整个音频 CD 复制到/dev/sr0,您可以运行命令:

ffmpeg -f libcdio -i /dev/sr0 cd.wav

26.13.1 选项

speed

设置驱动器读取速度。默认值为 0。

该速度是指定CD-ROM 速度单位。速度通过libcdiocdio_cddap_speed_set函数设置。在许多 CD-ROM 驱动器上,指定太大的值将导致使用最快的速度。

paranoia_mode

设置偏执恢复模式标志。它接受以下值之一:

disable
verify
overlap
neverskip
full

默认值为 '禁用'。

有关可用恢复模式的更多信息,请参阅 paranoia 项目文档。

26.14 libdc1394

IIDC1394 输入设备,基于 libdc1394 和 libraw1394。

需要配置选项--enable-libdc1394

26.14.1 选项

framerate

设置帧速率。默认为ntsc,对应帧速率为30000/1001

pixel_format

选择像素格式。默认为uyvy422.

video_size

设置以字符串形式给出的视频大小,例如640x480hd720。默认为qvga.

26.15 openal

OpenAL 输入设备在所有具有有效 OpenAL 1.1 实现的系统上提供音频捕获。

要在配置期间启用此输入设备,您需要在系统上安装 OpenAL 标头和库,并且需要使用--enable-openal.

OpenAL 标头和库应作为 OpenAL 实现的一部分提供,或者作为额外下载(SDK)提供。根据您的安装,您可能需要通过 --extra-cflags和指定其他标志--extra-ldflags,以允许构建系统找到 OpenAL 标头和库。

OpenAL 实现的不完整列表如下:

Creative

官方 Windows 实现,通过受支持的设备和软件回退提供硬件加速。请参阅http://openal.org/

OpenAL Soft

可移植、开源 (LGPL) 软件实施。包括 Windows、Linux、Solaris 和 BSD 操作系统上最常见的声音 API 的后端。请参阅http://kcat.strangesoft.net/openal.html

Apple

OpenAL 是 Core Audio(官方 Mac OS X 音频接口)的一部分。请参阅http://developer.apple.com/technologies/mac/audio-and-video.html

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

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

26.15.1 选项

channels

设置捕获的音频中的通道数。只有价值观 1(单声道)和2目前支持(立体声)。默认为2

sample_size

设置捕获的音频的样本大小(以位为单位)。只有价值观 816目前支持。默认为 16

sample_rate

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

list_devices

如果设置为真的,打印设备列表并退出。默认为错误的

26.15.2 示例

打印 OpenAL 支持的设备列表并退出:

$ ffmpeg -list_devices true -f openal -i dummy out.ogg

从 OpenAL 设备捕获DR-BT101 通过 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。

26.16 oss

打开声音系统输入设备。

提供给输入设备的文件名是代表OSS输入设备的设备节点,通常设置为 /dev/dsp

例如从/dev/dsp使用ffmpeg命令:

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

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

26.16.1 选项

sample_rate

设置采样率(以 Hz 为单位)。默认值为 48000。

channels

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

26.17 pulse

PulseAudio 输入设备。

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

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

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

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

26.17.1 选项

server

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

name

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

stream_name

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

sample_rate

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

channels

指定使用的通道,默认设置为 2(立体声)。

frame_size

此选项不执行任何操作并且已被弃用。

fragment_size

指定 PulseAudio 中最小缓冲片段的大小(以字节为单位),它将影响音频延迟。默认情况下,它设置为 50 毫秒的数据量。

wallclock

使用当前时间设置初始 PTS。默认值为 1。

26.17.2 示例

从默认设备录制流:

ffmpeg -f pulse -i default /tmp/pulse.wav

26.18 sndio

sndio 输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libsndio。

提供给输入设备的文件名是代表sndio输入设备的设备节点,通常设置为 /dev/audio0

例如从/dev/audio0使用ffmpeg命令:

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

26.18.1 选项

sample_rate

设置采样率(以 Hz 为单位)。默认值为 48000。

channels

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

26.19 video4linux2, v4l2

Video4Linux2 输入视频设备。

“v4l2”可以用作“video4linux2”的别名。

如果 FFmpeg 是使用 v4l-utils 支持构建的(通过使用 --enable-libv4l2配置选项),则可以将其与 -use_libv4l2输入设备选项一起使用。

要抓取的设备的名称是文件设备节点,通常 Linux 系统倾向于在设备(例如 USB 网络摄像头)插入系统时自动创建此类节点,并具有此类名称/dev/视频N,其中N是与设备关联的数字。

Video4Linux2 设备通常支持一组有限的 宽度x高度尺寸和帧速率。-list_formats all您可以检查Video4Linux2 设备支持哪些功能。某些设备(例如电视卡)支持一种或多种标准。可以使用 列出所有支持的标准-list_standards all

时间戳的时基是 1 微秒。根据内核版本和配置,时间戳可能源自实时时钟(起源于 Unix Epoch)或单调时钟(起源通常在启动时,不受 NTP 或手动更改时钟的影响)。这 - 时间戳绝对值或者-ts 腹肌选项可用于强制转换为实时时钟。

video4linux2 设备与ffmpeg 和的一些使用示例ffplay

  • 列出 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/

26.19.1 选项

standard

设定标准。必须是支持的标准的名称。要获取支持的标准列表,请使用列表标准 选项。

channel

设置输入通道号。默认为-1,表示使用之前选择的通道。

video_size

设置视频帧大小。参数必须是WIDTH x HEIGHT形式的字符串 或有效的大小缩写。

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。

26.20 vfwcap

VfW(Windows 视频)捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围从 0 到 9。您可以使用“list”作为文件名来打印驱动程序列表。任何其他文件名将被解释为设备号 0。

26.20.1 选项

video_size

设置视频帧大小。

framerate

设置抓取帧率。默认值为ntsc,对应帧速率为30000/1001

26.21 x11grab

X11 视频输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libxcb。在配置过程中会自动检测到它。

该设备允许用户捕获 X11 显示器的某个区域。

作为输入传递的文件名的语法如下:

[hostname]:display_number.screen_number[+x_offset,y_offset]

主机名显示编号screen_number指定要从中抓取的屏幕的 X11 显示名称。主机名可以省略,默认为“localhost”。环境变量 DISPLAY包含默认的显示名称。

x_offsety_offset指定抓取区域相对于 X11 屏幕左上角的偏移量。它们默认为 0。

检查 X11 文档(例如man X)以获取更多详细信息。

使用该xdpyinfo程序获取有关 X11 显示器属性的基本信息(例如 grep 获取“名称”或“尺寸”)。

例如从:0.0使用ffmpeg

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0 out.mpg

抓取位置10,20

ffmpeg -f x11grab -framerate 25 -video_size cif -i :0.0+10,20 out.mpg

26.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_region1,则抓取区域将显示在屏幕上。使用此选项,如果仅抓取屏幕的一部分,则很容易知道正在抓取的内容。

region_border

设置区域边框厚度如果-显示区域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,映射到整个屏幕(根窗口)。

可以使用该程序找到窗口的 ID xwininfo,可能使用选项 -tree 和 -root。

如果稍后放大窗口,则不会记录新区域。当窗口关闭、取消映射(即图标化)或缩小到超出视频大小(默认为初始窗口大小)时,视频结束。

该选项禁用选项跟随鼠标选择区域

video_size

设置视频帧大小。默认为完整桌面或窗口。

grab_x
grab_y

设置抓取区域坐标。它们表示为距 X11 窗口左上角的偏移量,对应于 设备名称中的x_offsety_offset参数。两个选项的默认值都是 0。

27 输出设备

输出设备是 FFmpeg 中的配置元素,可以将多媒体数据写入连接到系统的输出设备。

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

您可以使用配置选项“–disable-outdevs”禁用所有输出设备,并使用选项“–enable-outdev= OUTDEV ”有选择地启用输出设备,或者您可以使用选项“–disable”禁用特定输入设备-outdev= OUTDEV “。

ff* 工具的选项“-devices”将显示已启用的输出设备的列表。

当前可用的输出设备的描述如下。

27.1 alsa

ALSA(高级 Linux 声音架构)输出设备。

27.1.1 示例

  • 在默认 ALSA 设备上播放文件:
    ffmpeg -i INPUT -f alsa default
    
  • 在声卡 1、音频设备 7 上播放文件:
    ffmpeg -i INPUT -f alsa hw:1,7
    

27.2 AudioToolbox

AudioToolbox 输出设备。

允许本机输出到 OSX 上的 CoreAudio 设备。

输出文件名可以为空(或-)以引用默认系统输出设备,也可以为引用设备索引的数字,如使用所示:-list_devices true

或者,可以使用以下索引通过索引选择音频输入设备 -audio_device_index <索引> ,覆盖输入文件名中给出的任何设备名称或索引。

可以通过使用枚举所有可用设备-list_devices true,列出所有设备名称、UID 和相应索引。

27.2.1 选项

AudioToolbox 支持以下选项:

-audio_device_index <INDEX>

通过索引指定音频设备。覆盖输出文件名中给出的任何内容。

27.2.2 示例

  • 打印支持的设备列表并向默认设备输出正弦波:
    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -list_devices true -
    
  • 将正弦波输出到索引为 2 的设备,覆盖任何输出文件名:
    $ ffmpeg -f lavfi -i sine=r=44100 -f audiotoolbox -audio_device_index 2 -
    

27.3 caca

CACA输出设备。

该输出设备允许在 CACA 窗口中显示视频流。每个应用程序只允许有一个 CACA 窗口,因此应用程序中只能拥有该输出设备的一个实例。

要启用此输出设备,您需要使用 来配置 FFmpeg --enable-libcaca。libcaca 是一个输出文本而不是像素的图形库。

有关 libcaca 的更多信息,请查看: http: //caca.zoy.org/wiki/libcaca

27.3.1 选项

window_title

设置 CACA 窗口标题,如果未指定,则默认为为输出设备指定的文件名。

window_size

设置CACA窗口大小,可以是宽x形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小。

driver

设置显示驱动程序。

algorithm

设置抖动算法。抖动是必要的,因为渲染的图片通常具有比可用调色板更多的颜色。可接受的值用 列出-list_dither algorithms

antialias

设置抗锯齿方法。抗锯齿可以平滑渲染图像并避免常见的楼梯效果。可接受的值用 列出-list_dither antialiases

charset

设置渲染文本时要使用哪些字符。可接受的值用 列出-list_dither charsets

color

设置渲染文本时要使用的颜色。可接受的值用 列出-list_dither colors

list_drivers

如果设置为真的,打印可用驱动程序列表并退出。

list_dither

列出与参数相关的可用抖动选项。参数必须是algorithms, antialiases, charsets,之一colors

27.3.2 示例

  • 以下命令显示ffmpeg输出是 CACA 窗口,强制其大小为 80x25:
    ffmpeg -i INPUT -c:v rawvideo -pix_fmt rgb24 -window_size 80x25 -f caca -
    
  • 显示可用驱动程序列表并退出:
    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_drivers true -
    
  • 显示可用抖动颜色列表并退出:
    ffmpeg -i INPUT -pix_fmt rgb24 -f caca -list_dither colors -
    

27.4 decklink

Decklink 输出设备为 Blackmagic DeckLink 设备提供播放功能。

要启用此输出设备,您需要 Blackmagic DeckLink SDK,并且需要使用适当的--extra-cflags 和进行配置--extra-ldflags。在 Windows 上,您需要通过widl.

DeckLink对其支持的格式非常挑剔。像素格式始终为 uyvy422,必须为您的设备确定帧速率、场序和视频大小-list_formats 1。音频采样率始终为 48 kHz。

27.4.1 选项

list_devices

如果设置为真的,打印设备列表并退出。默认为错误的。此选项已弃用,请使用 -sinksffmpeg 的选项列出可用的输出设备。

list_formats

如果设置为真的,打印支持的格式列表并退出。默认为错误的

preroll

预卷视频的时间量(以秒为单位)。默认为0.5

duplex_mode

设置 Decklink 设备双工/配置文件模式。必须是 '未设置','一半','满的','one_sub_device_full','one_sub_device_half','两个子设备完整','四子设备半' 默认为 '未设置'。

注意: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','两个子设备完整','四子设备半'

DeckLink Quad 2 和 DeckLink Duo 2 的有效配置文件模式:'一半','满的'

timing_offset

设置所用输出上的同步锁相时序像素偏移。默认为 '未设置'。

link

设置所用输出上的 SDI 视频链路配置。必须是 '未设置','单身的'链接SDI,'双重的'链接SDI或'四边形'链接SDI。默认为 '未设置'。

sqd

为四链路 SDI 输出启用 Square Division Quad Split 模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置

level_a

在所使用的输出上启用 SMPTE A 级模式。必须是 '未设置','真的' 或者 '错误的'。默认为未设置

vanc_queue_size

设置 VANC 数据的最大输出缓冲区大小(以字节为单位)。如果缓冲达到此值,传出的 VANC 数据将被丢弃。默认为 '1048576'。

27.4.2 示例

  • 列出输出设备:
    ffmpeg -sinks decklink
    
  • 列出支持的格式:
    ffmpeg -i test.avi -f decklink -list_formats 1 'DeckLink Mini Monitor'
    
  • 播放视频片段:
    ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 'DeckLink Mini Monitor'
    
  • 播放非标准帧率或视频尺寸的视频剪辑:
    ffmpeg -i test.avi -f decklink -pix_fmt uyvy422 -s 720x486 -r 24000/1001 'DeckLink Mini Monitor'
    

27.5 fbdev

Linux 帧缓冲区输出设备。

Linux 帧缓冲区是一个独立于图形硬件的抽象层,用于在计算机显示器(通常是控制台)上显示图形。通过文件设备节点来访问,通常 /dev/fb0

欲了解更多详细信息,请阅读文件 文档/fb/framebuffer.txt包含在 Linux 源代码树中。

27.5.1 选项

xoffset
yoffset

设置左上角的 x/y 坐标。默认值为 0。

27.5.2 示例

在帧缓冲设备上播放文件/dev/fb0。所需的像素格式取决于当前的帧缓冲区设置。

ffmpeg -re -i INPUT -c:v rawvideo -pix_fmt bgra -f fbdev /dev/fb0

另请参见http://linux-fbdev.sourceforge.net/和 fbset(1)。

27.6 opengl

OpenGL 输出设备。

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

该输出设备允许渲染到 OpenGL 上下文。上下文可以由应用程序提供或创建默认的 SDL 窗口。

当设备渲染到外部上下文时,应用程序必须实现以下消息的处理程序: AV_DEV_TO_APP_CREATE_WINDOW_BUFFER- 在当前线程上创建 OpenGL 上下文。 AV_DEV_TO_APP_PREPARE_WINDOW_BUFFER- 使 OpenGL 上下文成为当前上下文。 AV_DEV_TO_APP_DISPLAY_WINDOW_BUFFER- 交换缓冲区。 AV_DEV_TO_APP_DESTROY_WINDOW_BUFFER- 销毁 OpenGL 上下文。应用程序还需要通过发送AV_APP_TO_DEV_WINDOW_SIZE消息来通知设备当前的分辨率。

27.6.1 选项

background

设置背景颜色。黑色是默认值。

no_window

设置为非零值时禁用默认 SDL 窗口。应用程序必须提供 OpenGL 上下文以及window_size_cb设置window_swap_buffers_cb时的回调。

window_title

设置 SDL 窗口标题,如果未指定,则默认为为输出设备指定的文件名。被忽略时无窗口已设置。

window_size

设置首选窗口大小,可以是宽度x高度形式的字符串或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。主要用在什么时候无窗口未设置。

27.6.2 示例

使用 OpenGL 渲染在 SDL 窗口上播放文件:

ffmpeg  -i INPUT -f opengl "window title"

27.7 oss

OSS(开放声音系统)输出设备。

27.8 pulse

PulseAudio 输出设备。

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

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

27.8.1 选项

server

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

name

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

stream_name

指定 PulseAudio 在显示活动流时将使用的流名称,默认情况下它设置为指定的输出名称。

device

指定要使用的设备。如果未提供,则使用默认设备。可以使用命令获取输出设备列表pactl list sinks

buffer_size
buffer_duration

控制 PulseAudio 缓冲区的大小和持续时间。小缓冲区可以提供更多控制,但需要更频繁的更新。

缓冲区大小指定大小(以字节为单位) 缓冲区持续时间指定持续时间(以毫秒为单位)。

当提供两个选项时,将使用最高值(使用流参数将持续时间重新计算为字节)。如果它们设置为 0(默认值),设备将使用默认的 PulseAudio 持续时间值。默认情况下,PulseAudio 将缓冲持续时间设置为 2 秒左右。

prebuf

指定预缓冲大小(以字节为单位)。服务器至少在此之前未启动播放预缓冲区缓冲区中有可用字节。默认情况下,此选项初始化为与 缓冲区大小或者缓冲区持续时间(以较大者为准)。

minreq

指定最小请求大小(以字节为单位)。服务器请求不小于最小要求从客户端请求字节,而是等到缓冲区有足够的空闲来一次请求更多字节。建议不要设置此选项,这会将其初始化为服务器认为合理的值。

27.8.2 示例

在默认服务器上的默认设备上播放文件:

ffmpeg  -i INPUT -f pulse "stream name"

27.9 sdl

SDL(简单直接媒体层)输出设备。

“sdl2”可以用作“sdl”的别名。

该输出设备允许在 SDL 窗口中显示视频流。每个应用程序只允许有一个 SDL 窗口,因此应用程序中只能拥有该输出设备的一个实例。

要启用此输出设备,您需要在配置构建时在系统上安装 libsdl。

有关 SDL 的更多信息,请查看: http: //www.libsdl.org/

27.9.1 选项

window_borderless

关闭 SDL 窗口边框。默认值为 0(启用窗口边框)。

window_enable_quit

当提供非零值时启用退出操作(使用窗口按钮或键盘键)。默认值为 1(启用退出操作)。

window_fullscreen

提供非零值时设置全屏模式。默认值为零。

window_size

设置SDL窗口大小,可以是宽度x高度形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小,并根据宽高比缩小。

window_title

设置 SDL 窗口标题,如果未指定,则默认为为输出设备指定的文件名。

window_x
window_y

设置窗口在屏幕上的位置。

27.9.2 交互式命令

设备创建的窗口可以通过以下交互命令进行控制。

q, ESC

立即退出设备。

27.9.3 示例

以下命令显示ffmpeg输出是一个 SDL 窗口,强制其大小为 qcif 格式:

ffmpeg -i INPUT -c:v rawvideo -pix_fmt yuv420p -window_size qcif -f sdl "SDL output"

27.10 sndio

sndio 音频输出设备。

27.11 v4l2

Video4Linux2 输出设备。

27.12 xv

XV(XVideo)输出设备。

该输出设备允许在 X Window 系统窗口中显示视频流。

27.12.1 选项

display_name

指定硬件显示名称,它确定要使用的显示和通信域。

显示名称或 DISPLAY 环境变量可以是格式为主机名[:数字[. 屏幕编号]]。

主机名指定显示器物理连接的主机的名称。number指定该主机上显示服务器的编号。screen_number指定要在该服务器上使用的屏幕。

如果未指定,则默认为 DISPLAY 环境变量的值。

例如,dual-headed:0.1将指定名为“双头”的机器上显示器 0 的屏幕 1。

有关显示名称格式的更多详细信息,请检查 X11 规范。

window_id

当设置为非零值时,设备不会创建新窗口,而是使用提供的window_id的现有窗口。默认情况下,此选项设置为零,并且设备创建自己的窗口。

window_size

设置创建的窗口大小,可以是宽x形式的字符串 或视频大小缩写。如果未指定,则默认为输入视频的大小。设置 window_id时忽略。

window_x
window_y

为创建的窗口设置 X 和 Y 窗口偏移。默认情况下它们都设置为 0。这些值可能会被窗口管理器忽略。设置 window_id时忽略。

window_title

设置窗口标题,如果未指定,则默认为为输出设备指定的文件名。设置 window_id时忽略。

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

27.12.2 示例

  • ffmpeg同时 对视频输入进行解码、显示和编码:
    ffmpeg -i INPUT OUTPUT -f xv display
    
  • 解码输入视频并将其显示到多个X11窗口:
    ffmpeg -i INPUT -f xv normal -vf negate -f xv negated
    

28 个重采样器选项

音频重采样器支持以下命名选项。

可以通过在 FFmpeg 工具中指定 -选项 值来设置选项,选项= aresample 过滤器的 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(1) 手册中的 (ffmpeg-utils) 通道布局部分。

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

选择柴田噪声整形抖动。

low_shibata

选择低柴田噪声整形抖动。

high_shibata

选择高柴田噪声整形抖动。

f_weighted

选择 f 加权噪声整形抖动

modified_e_weighted

选择改进的电子加权噪声整形抖动

improved_e_weighted

选择改进的电子加权噪声整形抖动

resampler

设置重采样引擎。默认值为 swr。

支持的值:

swr

选择本机软件重采样器;过滤器选项 precision 和 cheby 在这种情况下不适用。

soxr

选择 SoX Resampler(如果可用);补偿和滤波器选项 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,选择通带滚降无(切比雪夫)和“无理”比率的更高精度近似。默认值为 0。

async

仅适用于 swr,使用拉伸、挤压、填充和修剪将简单的 1 参数音频同步到时间戳。将其设置为 1 将启用填充和修剪,较大的值表示每秒可以拉伸或压缩数据的最大样本量。默认值为 0,因此不会应用补偿来使样本与音频时间戳匹配。

first_pts

仅对于 swr,假设第一个点应该是这个值。时间单位是1/采样率。这允许在流开始时进行填充/修剪。默认情况下,不会对第一帧的预期点数做出任何假设,因此不会进行填充或修剪。例如,如果音频流在视频流之后开始,则可以将其设置为 0,以便用静音填充开头,或者由于编码器延迟而用负点修剪任何样本。

min_comp

仅对于 swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发数据的拉伸/挤压/填充或修剪,以使其与时间戳匹配。默认情况下,拉伸/挤压/填充和修剪被禁用(最小补偿量= FLT_MAX)。

min_hard_comp

仅对于 swr,设置时间戳和音频数据之间的最小差异(以秒为单位)以触发添加/删除样本以使其与时间戳匹配。该选项实际上是在硬(修剪/填充)和软(挤压/拉伸)补偿之间进行选择的阈值。请注意,默认情况下,通过以下方式禁用所有补偿最小补偿量。默认值为 0.1。

comp_duration

仅对于 swr,设置数据拉伸/压缩以使其与时间戳匹配的持续时间(以秒为单位)。必须是非负双浮点值,默认值为 1.0。

max_soft_comp

仅对于 swr,设置数据拉伸/压缩的最大因子以使其与时间戳匹配。必须是非负双浮点值,默认值为 0。

matrix_encoding

选择矩阵立体声编码。

它接受以下值:

none

选择无

dolby

选择杜比

dplii

选择杜比定向逻辑 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,表示不使用。

29 定标器选项

视频缩放器支持以下命名选项。

可以通过在 FFmpeg 工具中指定 -选项 来设置选项,下面列出了一些仅限 API 的例外情况。对于编程使用,可以在选项中 SwsContext或通过libavutil/opt.hAPI。

sws_flags

设置缩放器标志。这也用于设置缩放算法。只应选择单一算法。默认值为 '双三次'。

它接受以下值:

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 only)

设置源宽度。

srch (API only)

设置源高度。

dstw (API only)

设置目标宽度。

dsth (API only)

设置目标高度。

src_format (API only)

设置源像素格式(必须表示为整数)。

dst_format (API only)

设置目标像素格式(必须表示为整数)。

src_range (boolean)

如果值设置为1,则表示源为全范围。默认值为 0,表示源范围有限。

dst_range (boolean)

如果值设置为1,则启用目标的全范围。默认值为0,启用限制范围。

param0, param1

设置缩放算法参数。指定的值特定于某些缩放算法,而被其他算法忽略。指定的值是浮点数。

sws_dither

设置抖动算法。接受以下值之一。默认值为 '汽车'。

auto

自动选择

none

无抖动

bayer

拜耳抖动

ed

误差扩散抖动

a_dither

算术抖动,基于使用加法

x_dither

算术抖动,基于使用异或(比 a_dither 更随机/不太明显的模式)。

alphablend

设置当输入具有 Alpha 但输出没有时使用的 Alpha 混合。默认值为 '没有任何'。

uniform_color

混合到统一的背景颜色上

checkerboard

混合到棋盘上

none

无混合

30 过滤简介

FFmpeg 中的过滤是通过 libavfilter 库启用的。

在 libavfilter 中,过滤器可以有多个输入和多个输出。为了说明可能发生的事情,我们考虑以下过滤图。

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

该过滤器图将输入流分成两个流,然后通过裁剪过滤器和 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分别位于另一线性链中。线性链的连接点用方括号内的名称来标记。在示例中,分割过滤器生成与标签[main][tmp]关联的两个输出。

发送到split的第二个输出(标记为 [tmp] )的流通过裁剪过滤器进行处理,该过滤器会裁剪掉视频的下半部分,然后垂直翻转。覆盖 过滤器接收分割过滤器的第一个未更改的输出(标记为[main]),并在其下半部分覆盖由Crop,vflip过滤器链生成的输出。

某些过滤器接受输入参数列表:它们在过滤器名称和等号之后指定,并用冒号彼此分隔。

存在没有音频/视频输入的所谓源过滤器和没有音频/视频输出的 接收器过滤器。

31 图形2点

图2点FFmpeg 中包含的程序工具 目录可用于解析过滤器图描述并以点语言发出相应的文本表示。

调用命令:

graph2dot -h

看看如何使用图2点

然后您可以将点描述传递给程序(来自 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参数并添加格式 过滤器以模拟特定的输入文件。

32 过滤图描述

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

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

没有输入焊盘的滤波器称为“源”,没有输出焊盘的滤波器称为“接收器”。

32.1 Filtergraph syntax

过滤器图有一个文本表示,它被 -筛选/-vf/-af-filter_complexffmpeg和 中的选项-vf/-af在 中ffplay,并通过 avfilter_graph_parse_ptr()中定义的函数 libavfilter/avfilter.h

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

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

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

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

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

  • 以“:”分隔的键=值对列表。
  • 以“:”分隔的列表。在这种情况下,假定键是按照声明顺序排列的选项名称。例如,fade过滤器按此顺序声明三个选项 -类型,起始帧nb_帧。那么参数列表in:0:30表示将in中的值 赋给选项类型, 0起始帧30nb_帧
  • 以“:”分隔的混合直接和长键=值 对的列表。直接必须位于键=值对之前,并遵循与前一点相同的约束顺序。可以按任何首选顺序设置 以下 键=值对。

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

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

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

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与输出焊盘相关联。

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

如果输出 pad 未标记,则默认情况下它将链接到过滤器链中下一个过滤器的第一个未标记输入 pad。例如在过滤器链中

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

分割滤波器实例有两个输出板,覆盖滤波器实例有两个输入板。split 的第一个输出焊盘标记为“L1”,overlay 的第一个输入焊盘标记为“L2”,split 的第二个输出焊盘链接到overlay 的第二个输入焊盘,两者均未标记。

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

在完整的滤波器链中,必须连接所有未标记的滤波器输入和输出焊盘。如果所有滤波器链的所有滤波器输入和输出焊盘都已连接,则滤波器图被视为有效。

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

例如,过滤图:

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

可以表示为:

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

[L1][L2] hstack

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

以下是 filtergraph 语法的 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]

32.2 Notes on filtergraph escaping

Filtergraph 描述组合需要几个级别的转义。有关所使用的转义过程的更多信息, 请参阅(ffmpeg-utils) ffmpeg-utils(1) 手册中的“引用和转义”部分。

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

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

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

例如,考虑将以下字符串嵌入到绘图文本过滤器描述中文本价值:

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 命令中编写 filtergraph 描述时需要额外级别的转义,这取决于所采用的 shell 的转义规则。例如,假设 \是特殊的并且需要用另一个转义\,则前面的字符串最终将导致:

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

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

例如,对于drawtext过滤器,您可能更喜欢使用文本文件选项代替文本指定要渲染的文本。

使用该ffmpeg工具时,您可能会考虑使用 (ffmpeg)-filter_script 选项(ffmpeg)-filter_complex_script 选项

33 时间轴编辑

一些过滤器支持通用使能够选项。对于支持时间线编辑的过滤器,可以将此选项设置为在将帧发送到过滤器之前评估的表达式。如果评估不为零,则将启用过滤器,否则帧将原封不动地发送到过滤器图中的下一个过滤器。

该表达式接受以下值:

t

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

n

输入帧的序号,从0开始

pos

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

w
h

输入帧的宽度和高度(如果是视频)

此外,这些过滤器支持使能够可用于重新定义表达式的命令。

与任何其他过滤选项一样,使能够选项遵循相同的规则。

例如,要启用 10 秒到 3 分钟的模糊滤镜 ( smartblur ),以及从 3 秒开始的 曲线滤镜:

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

查看ffmpeg -filters可查看哪些过滤器支持时间轴。

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

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

35 个具有多个输入的滤波器选项(帧同步)

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

eof_action

当辅助输入遇到 EOF 时采取的操作;它接受以下值之一:

repeat

重复最后一帧(默认)。

endall

结束两个流。

pass

传递主输入。

shortest

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

repeatlast

如果设置为 1,则强制过滤器将次流的最后一帧延长到主流的末尾。值为 0 会禁用此行为。默认值为 1。

ts_sync_mode

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

default

来自辅助输入的帧,其时间戳与主输入帧最接近或相等。

nearest

来自辅助输入的帧,其时间戳绝对最接近主输入帧。

36 音频滤波器

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

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

36.1 acompressor

压缩器主要用于减小信号的动态范围。尤其是现代音乐大多采用高比例压缩,以提高整体响度。这样做是为了引起听众的最高关注,“丰富”声音并为曲目带来更多“力量”。如果信号被压缩太多,之后听起来可能会沉闷或“死气沉沉”,或者可能会开始“泵动”(这可能是一个强大的效果,但也可能完全破坏轨道)。正确的压缩是获得专业声音的关键,也是混音和母带处理的高雅艺术。由于其复杂的设置,可能需要很长时间才能获得这种效果的正确感觉。

压缩是通过检测高于所选级别的音量 threshold并将其除以 设定的因子来完成的ratio。因此,如果您将阈值设置为 -12dB,并且信号达到 -6dB,则 2:1 的比率将导致信号达到 -9dB。由于对信号的精确操作会导致波形失真,因此随着时间的推移,波形的减少会趋于平衡。这是通过设置“攻击”和“释放”来完成的。 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输入流的所有通道之间的电平或输入流的 Loutter( maximum) 通道是否影响衰减。默认为average.

detection

在 的情况下应该采用精确信号peak,还是在 的情况下采用 RMS 信号rms。默认是rms最平滑的。

mix

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

36.1.1 命令

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

36.2 acontrast

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

该过滤器接受以下选项:

contrast

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

36.3 acopy

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

36.4 acrossfade

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

该过滤器接受以下选项:

nb_samples, ns

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

duration, d

指定交叉淡入淡出效果的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。默认情况下,持续时间由nb_samples确定。如果设置,则使用此选项而不是nb_samples

overlap, o

第一个流结束应该与第二个流开始重叠。默认启用。

curve1

设置第一个流的淡入淡出过渡曲线。

curve2

设置第二个流的淡入淡出过渡曲线。

有关可用曲线类型的描述,请参阅淡入淡出过滤器描述。

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

36.5 acrossover

将音频流分成几个频段。

该滤波器将音频流分成两个或多个频率范围。将所有流加起来将得到平坦的输出。

该过滤器接受以下选项:

split

设置分频。这些必须是积极的且不断增加的。

order

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

2nd

每倍频程 12 分贝。

4th

每倍频程 24 分贝。

6th

每倍频程 36 分贝。

8th

每八度 48 分贝。

10th

每八度 60 分贝。

12th

每八度 72 分贝。

14th

每倍频程 84 分贝。

16th

每倍频程 96 分贝。

18th

每倍频程 108 分贝。

20th

每倍频程 120 分贝。

默认为第 4 个

level

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

gains

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

precision

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

auto

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

float

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

double

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

默认值为auto

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

36.6 acrusher

降低音频比特分辨率。

该过滤器是具有增强功能的钻头破碎机。位粉碎器用于在声音上减少音频信号采样的位数。这根本不会改变位深度,它只是产生效果。位深度减小的材料听起来更加刺耳和“数字化”。该过滤器甚至能够舍入为连续值而不是离散位深度。此外,它还具有 D/C 偏移,这会导致信号的下半部分和上半部分受到不同的压缩。抗锯齿设置能够产生“更柔和”的破碎声音。

该滤波器的另一个特点是对数模式。此设置将位之间的线性距离切换为对数距离。结果是一个听起来更加“自然”的破碎机,例如,它不会门控低信号。人耳有对数感知,所以这种碾压感要舒服得多。对数粉碎也能够获得抗锯齿效果。

该过滤器接受以下选项:

level_in

设置电平。

level_out

设置水平。

bits

设置位减少。

mix

设定混合量。

mode

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

dc

设置直流电。

aa

设置抗锯齿。

samples

设置样本减少量。

lfo

启用低频振荡器。默认情况下禁用。

lforange

设置 LFO 范围。

lforate

设置 LFO 速率。

36.6.1 命令

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

36.7 acue

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

36.8 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

36.9 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

36.10 adecorrelate

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

该过滤器接受以下选项:

stages

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

seed

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

36.11 adelay

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

延迟通道中的样本充满了寂静。

过滤器接受以下选项:

delays

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

all

对所有剩余通道使用最后设置的延迟。默认情况下是禁用的。如果启用此选项,则会更改选项的delays解释方式。

36.11.1 示例

  • 将第一个通道延迟 1.5 秒,将第三个通道延迟 0.5 秒,并保持第二个通道(以及可能存在的任何其他通道)不变。
    adelay=1500|0|500
    
  • 将第二个通道延迟 500 个样本,将第三个通道延迟 700 个样本,并保持第一个通道(以及可能存在的任何其他通道)不变。
    adelay=0|500S|700S
    
  • 将所有通道延迟相同数量的样本:
    adelay=delays=64S:all=1
    

36.12 adenorm

通过添加极低电平的噪声来纠正音频中的非正常现象。

该过滤器应放置在任何可以产生非正规化的过滤器之前。

下面是接受参数的描述。

level

设置添加噪声的级别(以 dB 为单位)。默认为-351. 允许的范围是从 -451 到 -90。

type

设置添加噪声的类型。

dc

添加直流信号。

ac

添加交流信号。

square

添加方波信号。

pulse

添加脉冲信号。

默认为dc.

36.12.1 命令

该过滤器支持以上所有选项作为命令

36.13 aderivative, aintegral

计算音频流的导数/积分。

依次应用这两个滤波器会产生原始音频。

36.14 adrc

将频谱动态范围控制器滤波器应用于输入音频流。

下面是接受的选项的描述。

transfer

设置传输表达式。

该表达式可以包含以下常量:

ch

当前频道号

sn

当前样本数

nb_channels

通道数

t

以秒表示的时间戳

sr

采样率

p

当前频率功率值,单位 dB

f

当前频率(以 Hz 为单位)

默认值为p

attack

以毫秒为单位设置攻击。默认值为50毫秒。允许的范围为 1 到 1000 毫秒。

release

以毫秒为单位设置释放。默认值为100毫秒。允许的范围为 5 到 2000 毫秒。

channels

设置要过滤的通道,默认情况下all会过滤音频流中的通道。

36.14.1 命令

该过滤器支持以上所有选项作为命令

36.14.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
    

36.15 adynamicequalizer

对输入音频流应用动态均衡。

下面是接受的选项的描述。

threshold

设置用于触发均衡的检测阈值。阈值检测使用检测滤波器。默认值为 0。允许的范围为 0 到 100。

dfrequency

设置用于触发均衡的检测滤波器的检测频率(以 Hz 为单位)。默认值为 1000 Hz。允许的范围在 2 到 1000000 Hz 之间。

dqfactor

设置用于触发均衡的检测滤波器的检测谐振系数。默认值为 1。允许的范围为 0.001 到 1000。

tfrequency

设置均衡滤波器的目标频率。默认值为 1000 Hz。允许的范围在 2 到 1000000 Hz 之间。

tqfactor

设置目标均衡滤波器的目标谐振系数。默认值为 1。允许的范围为 0.001 到 1000。

attack

设置均衡开始之前检测信号必须上升到检测阈值以上的毫秒数。默认值为 20。允许的范围在 1 到 2000 之间。

release

设置均衡结束前检测信号必须降至检测阈值以下的毫秒数。默认值为 200。允许的范围在 1 到 2000 之间。

ratio

设置均衡增益提高的比例。默认值为 1。允许的范围在 0 到 30 之间。

makeup

设置均衡增益提高的补偿偏移。默认值为 0。允许的范围在 0 到 100 之间。

range

设置允许的最大削减/提升量。默认值为 50。允许的范围为 1 到 200。

mode

设置过滤器的操作模式,可以是以下之一:

listen

仅输出隔离检测信号。

cutbelow

将频率降低到检测阈值以下。

cutabove

降低检测阈值以上的频率。

boostbelow

将频率提升到检测阈值以下。

boostabove

将频率提升至检测阈值以上。

默认模式是 '切下'。

dftype

设置检测过滤器的类型,可以是以下之一:

bandpass
lowpass
highpass
peak

默认类型是 '带通'。

tftype

设置目标过滤器的类型,可以是以下之一:

bell
lowshelf
highshelf

默认类型是 ''。

auto

自动从检测过滤器收集阈值。默认情况下是'残疾人'。此选项可用于检测输入音频流的特定时间帧内的阈值,在这种情况下选项值会在运行时更改。

可用值为:

disabled

禁用使用自动收集的阈值。

off

停止选取阈值。

on

开始选取阈值。

adaptive

通过计算滑动窗口熵来自适应选取阈值。

precision

设置处理样品时使用的精度。

auto

根据其他过滤器自动选择内部样本格式。

float

始终使用单浮点精度样本格式。

double

始终使用双浮点精度样本格式。

36.15.1 命令

该过滤器支持以上所有选项作为命令

36.16 adynamicsmooth

对输入音频流应用动态平滑。

下面是接受的选项的描述。

sensitivity

设置对频率波动的敏感度。默认值为 2。允许的范围为 0 到 1e+06。

basefreq

设置平滑的基频。默认值为 22050。允许的范围为 2 到 1e+06。

36.16.1 命令

该过滤器支持以上所有选项作为命令

36.17 aecho

对输入音频应用回声。

回声是声音的反射,当说话或喊叫时,在山脉(有时是大型建筑物)中自然会产生回声;数字回声效果模拟这种行为,通常用于帮助填充单个乐器或人声的声音。原始信号与反射信号之间的时间差为delay,反射信号的响度为decay。多个回声可以有不同的延迟和衰减。

下面是接受参数的描述。

in_gain

设置反射信号的输入增益。默认为0.6.

out_gain

设置反射信号的输出增益。默认为0.3.

delays

设置原始信号和反射信号之间的时间间隔列表(以毫秒为单位),以“|”分隔。每个的允许范围delay(0 - 90000.0]. 默认为1000.

decays

设置以“|”分隔的反射信号响度列表。每个的允许范围decay(0 - 1.0]. 默认为0.5.

36.17.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
    

36.18 aemphasis

音频强调滤波器使用不同的滤波器曲线创建或恢复直接取自 LP 或强调 CD 的材料。例如,要将音乐存储在黑胶唱片上,必须首先通过滤波器改变信号,以消除这种记录介质的缺点。一旦播放材料,就必须应用逆滤波器来恢复频率响应的失真。

该过滤器接受以下选项:

level_in

设置输入增益。

level_out

设置输出增益。

mode

设置过滤模式。用于恢复材质使用reproduction模式,否则使用production模式。默认为reproduction模式。

type

设置过滤器类型。选择介质。可以是以下之一:

col

选择哥伦比亚。

emi

选择 EMI。

bsi

选择 BSI (78RPM)。

riaa

选择美国唱片业协会。

cd

选择光盘 (CD)。

50fm

选择 50μs (FM)。

75fm

选择 75μs (FM)。

50kf

选择 50μs (FM-KF)。

75kf

选择 75μs (FM-KF)。

36.18.1 命令

该过滤器支持以上所有选项作为命令

36.19 aeval

根据指定的表达式修改音频信号。

该滤波器接受一个或多个表达式(每个通道一个),这些表达式被评估并用于修改相应的音频信号。

它接受以下参数:

exprs

为每个单独的通道设置以“|”分隔的表达式列表。如果输入通道的数量大于表达式的数量,则最后指定的表达式将用于剩余的输出通道。

channel_layout, c

设置输出通道布局。如果未指定,则通道布局由表达式的数量指定。如果设置为 '相同的',默认情况下它将使用相同的输入通道布局。

exprs中的每个表达式可以包含以下常量和函数:

ch

当前表达式的通道号

n

评估样本的编号,从0开始

s

采样率

t

评估样本的时间(以秒为单位)

nb_in_channels
nb_out_channels

输入输出通道数

val(CH)

编号为CH的输入通道的值

注意:此过滤器速度很慢。为了更快地处理,您应该使用专用过滤器。

36.19.1 示例

  • 半卷:
    aeval=val(ch)/2:c=same
    
  • 第二通道的反转相位:
    aeval=val(0)|-val(1)
    

36.20 aexciter

激励器用于产生原始信号中不存在的高声音。这是通过创建信号的谐波失真来完成的,这些谐波失真的范围受到限制并添加到原始信号中。激励器提高音频信号的上端,而不是像均衡器那样简单地提高较高频率来产生更“清脆”或“明亮”的声音。

该过滤器接受以下选项:

level_in

在信号处理之前设置输入电平。允许的范围是 0 到 64。默认值为 1。

level_out

设置信号处理后的输出电平。允许的范围是 0 到 64。默认值为 1。

amount

设置添加到原始信号的谐波量。允许的范围是 0 到 64。默认值为 1。

drive

设置新创建的谐波数量。允许的范围是 0.1 到 10。默认值为 8.5。

blend

设置新创建的和声的八度。允许的范围是 -10 到 10。默认值为 0。

freq

设置产生谐波的频率下限(以 Hz 为单位)。允许的范围为 2000 至 12000 Hz。默认值为 7500 赫兹。

ceil

设置产生谐波的频率上限。允许的范围为 9999 至 20000 Hz。如果值低于 10000 Hz,则不施加限制。

listen

将原始信号静音并仅输出添加的谐波。默认情况下是禁用的。

36.20.1 命令

该过滤器支持以上所有选项作为命令

36.21 afade

对输入音频应用淡入/淡出效果。

下面是接受参数的描述。

type, t

指定效果类型,可以是in淡入效果,也 out可以是淡出效果。默认为in.

start_sample, ss

指定开始应用淡入淡出效果的起始样本编号。默认值为 0。

nb_samples, ns

指定淡入淡出效果必须持续的样本数。在淡入效果结束时,输出音频将具有与输入音频相同的音量,在淡出过渡结束时,输出音频将静音。默认值为 44100。

start_time, st

指定淡入淡出效果的开始时间。默认值为 0。该值必须指定为持续时间;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。如果设置,则使用此选项而不是start_sample

duration, d

指定淡入淡出效果的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。在淡入效果结束时,输出音频将具有与输入音频相同的音量,在淡出过渡结束时,输出音频将静音。默认情况下,持续时间由nb_samples确定。如果设置,则使用此选项而不是nb_samples

curve

设置淡入淡出过渡曲线。

它接受以下值:

tri

选择三角形、线性斜率(默认)

qsin

选择正弦波的四分之一

hsin

选择正弦波的一半

esin

选择指数正弦波

log

选择对数

ipar

选择倒抛物线

qua

选择二次

cub

选择立方

squ

选择平方根

cbr

选择立方根

par

选择抛物线

exp

选择指数

iqsin

选择正弦波的反转四分之一

ihsin

选择正弦波的反半部分

dese

选择双指数座位

desi

选择双指数 sigmoid

losi

选择逻辑 sigmoid

sinc

选择正弦基函数

isinc

选择反正弦基函数

quat

选择四次

quatr

选择四次根

qsin2

选择正弦波的四分之一平方

hsin2

选择正弦波的平方一半

nofade

未应用淡入淡出

silence

设置淡入的初始增益或淡出的最终增益。默认值为0.0

unity

设置淡出的初始增益或淡入的最终增益。默认值为1.0

36.21.1 命令

该过滤器支持以上所有选项作为命令

36.21.2 示例

  • 音频前 15 秒淡入淡出:
    afade=t=in:ss=0:d=15
    
  • 淡出 900 秒音频的最后 25 秒:
    afade=t=out:st=875:d=25
    

36.22 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

仅传递噪音。

默认值为输出

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

36.22.1 命令

该过滤器支持上述一些选项作为命令

36.22.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
    

36.23 afftfilt

将任意表达式应用于频域中的样本。

real

为每个单独通道设置频域实数表达式,以“|”分隔。默认为“重新”。如果输入通道的数量大于表达式的数量,则最后指定的表达式将用于剩余的输出通道。

imag

为每个由“|”分隔的单独通道设置频域虚数表达式。默认为“im”。

realimag中的每个表达式都可以包含以下常量和函数:

sr

采样率

b

当前频率档号

nb

可用垃圾箱数量

ch

当前表达式的通道号

chs

通道数

pts

当前帧点数

re

当前通道频率仓的当前实部

im

当前通道频率仓的当前虚部

real(b, ch)

返回位置 ( bin , Channel ) 处频率 bin 的实部值

imag(b, ch)

返回位置 ( bin , Channel ) 处频率 bin 的虚部值

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.

36.23.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)"
    

36.24 afir

应用任意有限脉冲响应滤波器。

该滤波器设计用于应用长 FIR 滤波器,最长可达 60 秒。

它可用作数字分频滤波器、房间均衡、串扰消除、波场合成、可听化、立体混响、立体混响和空间化的组件。

该滤波器使用高于第一个流的流作为 FIR 系数。如果非第一个流拥有单个通道,则它将用于第一个流中的所有输入通道,否则非第一个流中的通道数必须与第一个流中的通道数相同。

它接受以下参数:

dry

设置干增益。这设置输入增益。

wet

设置湿增益。这设置了最终输出增益。

length

设置脉冲响应滤波器长度。默认值为 1,表示处理整个 IR。

gtype

启用应用根据 IR 功率测量的增益。

设置用于自动增益测量的方法。

none

不要应用任何增益。

peak

选择峰值增益,非常保守的做法。这是默认值。

dc

选择直流增益,应用有限。

gn

选择噪声增益方法,这是最流行的一种。

ac

选择交流增益。

rms

选择 RMS 增益。

irgain

设置在滤波之前应用于 IR 系数的增益。允许的范围是 0 到 1。在使用gtype选项应用任何增益之后应用此增益。

irfmt

设置IR码流的格式。可以是monoinput. 默认为input.

maxir

设置允许的最大脉冲响应滤波器持续时间(以秒为单位)。默认值为 30 秒。允许的范围是 0.1 到 60 秒。

response

在附加视频流中显示 IR 频率响应、幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下它是禁用的。

channel

设置显示频率响应的 IR 通道。默认情况下显示第一个频道。仅当启用 响应时才使用此选项。

size

设置视频流大小。仅当启用 响应时才使用此选项。

rate

设置视频流帧速率。仅当启用 响应时才使用此选项。

minp

设置用于卷积的最小分区大小。默认值为8192。允许的范围是从165536。较低的值会减少延迟,但代价是 CPU 使用率较高。

maxp

设置用于卷积的最大分区大小。默认值为8192。允许的范围是从865536。较低的值可能会增加 CPU 使用率。

nbirs

设置可在运行时切换的输入脉冲响应流的数量。允许的范围是从132。默认值为1

ir

设置用于卷积的 IR 流,从0开始,应始终低于nbirs选项提供的值。默认值为0该选项可以在运行时通过命令更改。

precision

设置处理样品时使用的精度。

auto

根据其他过滤器自动选择内部样本格式。

float

始终使用单浮点精度样本格式。

double

始终使用双浮点精度样本格式。

默认值为自动。

irload

设置何时加载 IR 流。可以是initaccess. 第一个在初始化时加载并准备所有 IR,第二个在第一次访问特定 IR 时加载并准备所有 IR。默认为init.

36.24.1 示例

  • 使用单声道 IR 文件作为第二个输入将混响应用于流,使用 ffmpeg 完成命令:
    ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
    
  • 应用给定输入立体声流的真实立体声处理,以及左右声道的两个立体声脉冲响应,脉冲响应文件是名为 l_ir.wav 和 r_ir.wav 的文件:
    "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:gtype=gn:irgain=-5dB,pan=stereo|FL<c0+c2|FR<c1+c3"
    

36.25 aformat

设置输入音频的输出格式约束。该框架将协商最合适的格式以最​​小化转换。

它接受以下参数:

sample_fmts, f

以“|”分隔的请求示例格式列表。

sample_rates, r

以“|”分隔的请求采样率列表。

channel_layouts, cl

以“|”分隔的请求通道布局列表。

有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。

如果省略参数,则允许使用所有值。

强制输出为无符号 8 位或有符号 16 位立体声

aformat=sample_fmts=u8|s16:channel_layouts=stereo

36.26 afreqshift

对输入音频样本应用频移。

该过滤器接受以下选项:

shift

指定频移。允许的范围是 -INT_MAX 到 INT_MAX。默认值为 0.0。

level

设置应用于最终输出的输出增益。允许的范围是从 0.0 到 1.0。默认值为 1.0。

order

设置用于过滤的过滤顺序。允许的范围是 1 到 16。默认值为 8。

36.26.1 命令

该过滤器支持以上所有选项作为命令

36.27 afwtdn

使用小波减少输入样本的宽带噪声。

下面是接受的选项的描述。

sigma

设置噪声西格玛,允许范围为 0 到 1。默认值为 0。此选项控制应用于输入样本的去噪强度。设置此选项的最有用的方法是通过分贝,例如。-45分贝。

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。

36.27.1 命令

该过滤器支持以上所有选项作为命令

36.28 agate

门主要用于减少信号的较低部分。这种信号处理减少了有用信号之间的干扰噪声。

门控是通过检测低于所选级别阈值的音量 并将其除以设置的因子来完成的。本底噪声的底部通过range设置。由于对信号的精确操作会导致波形失真,因此随着时间的推移,波形的减少会趋于平衡。这是通过设置AttackRelease来完成的。

攻击决定了信号必须下降到阈值以下多长时间才会发生任何减少,而释放则设置信号必须上升到阈值以上以再次减少减少的时间。比所选起音时间短的信号将保持不变。

level_in

在过滤之前设置输入电平。默认值为 1。允许的范围为 0.015625 到 64。

mode

设置操作模式。可以是upwarddownward. 默认为downward. 如果设置为upward模式,信号的较高部分将被放大,向上扩展动态范围。否则,在信号较低的情况下downward会减弱。

range

设置信号低于阈值时增益降低的级别。默认值为 0.06125。允许的范围是从 0 到 1。将其设置为 0 将禁用缩减,然后过滤器的行为类似于扩展器。

threshold

如果信号上升到该电平之上,增益降低就会被释放。默认值为 0.125。允许的范围是从 0 到 1。

ratio

设置信号减少的比率。默认值为 2。允许的范围为 1 到 9000。

attack

在增益降低停止之前信号必须上升到阈值以上的毫秒数。默认值为 20 毫秒。允许的范围是 0.01 到 9000。

release

在减少量再次增加之前信号必须降至阈值以下的毫秒数。默认值为 250 毫秒。允许的范围是 0.01 到 9000。

makeup

设置处理后信号的放大量。默认值为 1。允许的范围为 1 到 64。

knee

在阈值周围弯曲尖锐的拐点,以更柔和地进入增益降低。默认值为 2.828427125。允许的范围是 1 到 8。

detection

选择是采用精确信号进行检测还是采用 RMS 等信号进行检测。默认为rms. 可以是peakrms.

link

选择所有通道之间的平均电平或较大声通道是否会影响衰减。默认为average. 可以是averagemaximum.

36.28.1 命令

该过滤器支持以上所有选项作为命令

36.29 aiir

应用任意无限脉冲响应滤波器。

它接受以下参数:

zeros, z

设置 B/分子/零/反射系数。

poles, p

设置 A/分母/极点/梯形系数。

gains, k

设置通道增益。

dry_gain

设置输入增益。

wet_gain

设置输出增益。

format, f

设置系数格式。

ll

格梯函数

sf

模拟传递函数

tf

数字传递函数

zp

Z 平面零点/极点,笛卡尔(默认)

pr

Z 平面零点/极点、极弧度

pd

Z 平面零点/极点、极度

sp

S 平面零点/极点

process, r

设置处理类型。

d

直接加工

s

串行处理

p

并行处理

precision, e

设置过滤精度。

dbl

双精度浮点(默认)

flt

单精度浮点

i32

32 位整数

i16

16 位整数

normalize, n

标准化滤波器系数,默认启用。启用它会将直流幅度响应标准化为 0dB。

mix

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

response

在附加视频流中显示 IR 频率响应、幅度(洋红色)、相位(绿色)和群延迟(黄色)。默认情况下它是禁用的。

channel

设置显示频率响应的 IR 通道。默认情况下显示第一个频道。仅当启用 响应时才使用此选项。

size

设置视频流大小。仅当启用 响应时才使用此选项。

tf和格式中的系数sf以空格分隔并按升序排列。

格式中的系数zp由空格分隔,系数的顺序并不重要。格式中的系数是具有izp虚数单位的复数 。

可以为每个通道提供不同的系数和增益,在这种情况下使用“|” 分离系数或增益。最后提供的系数将用于所有剩余通道。

36.29.1 示例

  • 在 5000Hz 左右应用 2 极椭圆陷波以获得 48000 Hz 采样率:
    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
    
  • 应用三阶模拟归一化巴特沃斯低通滤波器,使用模拟传递函数格式:
    aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
    

36.30 alimiter

限制器防止输入信号上升超过所需阈值。该限制器使用前瞻技术来防止信号失真。这意味着信号处理后有一个小的延迟。请记住,它产生的延迟是您设置的起音时间。

该过滤器接受以下选项:

level_in

设置输入增益。默认值为 1。

level_out

设置输出增益。默认值为 1。

limit

不要让高于此电平的信号通过限制器。默认值为 1。

attack

限制器将在这段时间内达到其衰减水平(以毫秒为单位)。默认值为 5 毫秒。

release

在这毫秒内从限制返回到衰减 1.0。默认值为 50 毫秒。

asc

当始终需要增益降低时,ASC 负责释放到平均降低水平,而不是在释放时间中达到 0 的降低。

asc_level

选择释放时间受 ASC 影响的程度,0 表示释放时间几乎没有变化,而 1 表示释放时间更长。

level

自动电平输出信号。默认启用。如果启用,这会将音频标准化回 0dB。

latency

使用带有攻击参数的前瞻缓冲区集来补偿所引入的延迟。当流达到 EOF 时,还会刷新前瞻缓冲区中的有效音频数据。

根据所选设置,建议在应用此过滤器之前 使用aresample对输入进行 2 倍或 4 倍上采样。

36.31 allpass

应用中心频率(以 Hz 为单位)频率和滤波器宽度宽度 的两极全通滤波器 。全通滤波器改变音频的频率与相位关系,而不改变其频率与幅度关系。

该过滤器接受以下选项:

frequency, f

设置频率(以 Hz 为单位)。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

order, o

设置过滤器阶数,可以是1或2。默认为2。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

36.31.1 命令

该过滤器支持以下命令:

frequency, f

更改全通频率。该命令的语法是:“频率

width_type, t

更改全通 width_type。该命令的语法是:“ width_type

width, w

更改全通宽度。该命令的语法是:“宽度

mix, m

更改全通混合。该命令的语法是:“ mix

36.32 aloop

循环音频样本。

该过滤器接受以下选项:

loop

设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。

size

设置最大样本数。默认值为 0。

start

设置循环的第一个样本。默认值为 0。

time

设置循环开始时间(以秒为单位)。仅当名为start的选项设置为时才使用-1

36.33 amerge

将两个或多个音频流合并为单个多通道流。

该过滤器接受以下选项:

inputs

设置输入数量。默认值为 2。

如果输入的通道布局不相交并因此兼容,则将相应地设置输出的通道布局,并且将根据需要对通道重新排序。如果输入的通道布局不相交,则输出将依次具有第一个输入的所有通道,然后是第二个输入的所有通道,并且输出的通道布局将是与通道总数。

例如,如果第一个输入为 2.1 (FL+FR+LF),第二个输入为 FC+BL+BR,则输出将为 5.1,通道顺序如下:a1、a2、b1、 a3、b2、b3(a1 是第一个输入的第一个通道,b1 是第二个输入的第一个通道)。

另一方面,如果两个输入都是立体声,则输出通道将采用默认顺序:a1、a2、b1、b2,并且通道布局将任意设置为 4.0,这可能是也可能不是预期值。

所有输入必须具有相同的采样率和格式。

如果输入的持续时间不同,输出将以最短的时间停止。

36.33.1 示例

  • 将两个单声道文件合并为立体声流:
    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
    
  • 多重合并假设 1 个视频流和 6 个音频流输入.mkv:
    ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
    

36.34 amix

将多个音频输入混合为一个输出。

请注意,此过滤器仅支持浮动样本(合并平移音频过滤器支持多种格式)。如果amix 输入具有整数样本,则将自动插入aresample以执行到浮点样本的转换。

它接受以下参数:

inputs

输入的数量。如果未指定,则默认为 2。

duration

如何确定流结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一次输入的持续时间。

dropout_transition

输入流结束时音量重新标准化的转换时间(以秒为单位)。默认值为 2 秒。

weights

将每个输入音频流的权重指定为由空格分隔的数字序列。如果与输入数量相比指定的权重较少,则最后一个权重将分配给其余输入。每个输入的默认权重为 1。

normalize

始终缩放输入,而不是仅对样本求和。如果禁用此选项,如果输入在此过滤器过滤之前或之后未标准化,请注意严重削波。默认情况下启用。

36.34.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
    

36.34.2 命令

该过滤器支持以下命令:

weights
normalize

语法与同名选项相同。

36.35 amultiply

将第一音频流与第二音频流相乘并将结果存储在输出音频流中。乘法是通过将第一流中的每个样本与第二流中相同位置的样本相乘来完成的。

通过这种逐元素乘法,可以创建幅度衰减和幅度调制。

36.36 anequalizer

每个通道的高阶参数多频段均衡器。

它接受以下参数:

params

该选项字符串的格式为:“c chn f= cf w= w g= g t= f | ...” 每个均衡器频段由“|”分隔。

chn

设置要应用均衡的通道号。如果输入没有该通道,则该条目将被忽略。

f

设置频段的中心频率。如果输入不具有该频率,则该条目将被忽略。

w

设置带宽(以赫兹为单位)。

g

设置频带增益(以 dB 为单位)。

t

设置频段的滤波器类型,可选,可以是:

0

巴特沃斯,这是默认的。

1

切比雪夫1型。

2

切比雪夫2型。

curves

使用此选项,均衡器的激活频率响应将显示在视频流中。

size

设置视频流大小。仅当激活曲线选项时才有用。

mgain

设置将显示的最大增益。仅当激活曲线选项时才有用。将其设置为合理的值可以显示从彼此太接近的相邻频带导出的增益,因此当两者都激活时会产生更高的增益。

fscale

设置用于绘制视频输出中的频率响应的频率比例。可以是线性或对数。默认为对数。

colors

设置要在视频流中显示的每个通道曲线的颜色。这是由空格或“|”分隔的颜色名称列表。无法识别或缺失的颜色将被白色替换。

36.36.1 示例

  • 使用切比雪夫 1 型滤波器将前 2 个通道的中心频率 200Hz 和宽度 100 Hz 的增益降低 10:
    anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
    

36.36.2 命令

该过滤器支持以下命令:

change

更改现有的过滤器参数。命令的语法为:“ fN |f= freq |w= width |g= Gain

fN为现有过滤器编号,从 0 开始,如果没有可用的过滤器则返回错误。 freq设置新的频率参数。 width设置新的宽度参数(以赫兹为单位)。 增益设置新的增益参数(以 dB 为单位)。

使用 asendcmd 的完整过滤器调用可能如下所示: asendcmd=c='4.0 anequalizer change 0|f=200|w=50|g=1',anequalizer=...

36.37 anlmdn

使用非局部均值算法减少音频样本中的宽带噪声。

通过寻找具有相似上下文的其他样本来调整每个样本。这种上下文相似性是通过比较周围的块大小来定义的 p。在以下区域中搜索补丁r样品周围。

该过滤器接受以下选项:

strength, s

设置去噪强度。允许的范围是 0.00001 到 10000。默认值为 0.00001。

patch, p

设置补丁半径持续时间。允许的范围是 1 到 100 毫秒。默认值为 2 毫秒。

research, r

设置研究半径持续时间。允许的范围为 2 到 300 毫秒。默认值为 6 毫秒。

output, o

设置输出模式。

它接受以下值:

i

传递输入不变。

o

过滤掉通过噪音。

n

仅传递噪音。

默认值为o

smooth, m

设置平滑因子。默认值为11。允许的范围是从11000

36.37.1 命令

该过滤器支持以上所有选项作为命令

36.38 anlmf, anlms

使用第二个音频流将归一化最小均值(平方|第四)算法应用于第一个音频流。

该自适应滤波器用于通过查找与生成误差信号的最小均方相关的滤波器系数来模拟所需的滤波器(所需的第二输入音频流与实际信号(第一输入音频流)之间的差异)。

下面是接受的选项的描述。

order

设置过滤器顺序。

mu

设置过滤器μ。

eps

设置过滤器 eps。

leakage

设置过滤器泄漏量。

out_mode

它接受以下值:

i

通过第一个输入。

d

通过第二个输入。

o

通过所需的第二输入和误差信号估计之间的差异。

n

通过输入、第一输入和误差信号估计之间的差异。

e

通过误差信号估计样本。

默认值为o

36.38.1 示例

  • 该滤波器的许多用途之一是降噪,输入音频使用延迟固定量的相同样本进行过滤,立体声音频的一个例子是:
    asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
    

36.38.2 命令

此过滤器支持与选项相同的命令,但不包括选项order

36.39 anull

将音频源不变地传递到输出。

36.40 apad

用静音填充音频流的末尾。

这可以与ffmpeg -最短将音频流扩展到与视频流相同的长度。

下面是接受的选项的描述。

packet_size

设置静默数据包大小。默认值为 4096。

pad_len

设置添加到末尾的静音样本数。达到该值后,流将终止。该选项与整个长度

whole_len

设置输出音频流中的最小样本总数。如果该值比输入音频长度长,则会在末尾添加静音,直到达到该值。该选项与垫长

pad_dur

指定要添加的静音样本的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。仅当设置为非负值时才使用。

whole_dur

指定输出音频流中的最小总持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。仅当设置为非负值时才使用。如果该值比输入音频长度长,则会在末尾添加静音,直到达到该值。该选项与焊盘_杜尔

如果两者都不是垫长也不整个长度也不焊盘_杜尔 也不整个_dur设置选项后,过滤器将无限期地在输入流的末尾添加静音。

请注意,对于 ffmpeg 4.4 及更早版本,零焊盘_杜尔或者 整个_dur还导致过滤器无限期地添加静音。

36.40.1 示例

  • 在输入末尾添加 1024 个静音样本:
    apad=pad_len=1024
    
  • 确保音频输出至少包含 10000 个样本,如果需要,请用静音填充输入:
    apad=whole_len=10000
    
  • 用于ffmpeg用静音填充音频输入,以便视频流始终是最短的,并且在使用时将被转换到输出文件的末尾最短 选项:
    ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
    

36.41 aphaser

向输入音频添加移相效果。

移相滤波器在频谱中创建一系列波峰和波谷。波峰和波谷的位置经过调制,使其随时间变化,从而产生扫描效果。

下面是接受参数的描述。

in_gain

设置输入增益。默认值为 0.4。

out_gain

设置输出增益。默认值为 0.74

delay

设置延迟(以毫秒为单位)。默认值为 3.0。

decay

设置衰减。默认值为 0.4。

speed

设置调制速度(以 Hz 为单位)。默认值为 0.5。

type

设置调制类型。默认为三角形。

它接受以下值:

triangular, t
sinusoidal, s

36.42 aphaseshift

对输入音频样本应用相移。

该过滤器接受以下选项:

shift

指定相移。允许的范围是从 -1.0 到 1.0。默认值为 0.0。

level

设置应用于最终输出的输出增益。允许的范围是从 0.0 到 1.0。默认值为 1.0。

order

设置用于过滤的过滤顺序。允许的范围是 1 到 16。默认值为 8。

36.42.1 命令

该过滤器支持以上所有选项作为命令

36.43 apsnr

测量音频峰值信噪比。

该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。

36.44 apsyclip

将心理声学剪辑器应用于输入音频流。

该过滤器接受以下选项:

level_in

设置输入增益。默认情况下为 1。范围为 [0.015625 - 64]。

level_out

设置输出增益。默认情况下为 1。范围为 [0.015625 - 64]。

clip

设置剪切起始值。默认值为 0dBFS 或 1。

diff

仅输出差异样本,对于听到引入的失真很有用。默认情况下是禁用的。

adaptive

设置应用的自适应失真的强度。默认值为 0.5。允许的范围是从 0 到 1。

iterations

设置心理声学削波器的迭代次数。允许的范围是 1 到 20。默认值为 10。

level

自动电平输出信号。默认为禁用。如果启用,这会将音频标准化回 0dBFS。

36.44.1 命令

该过滤器支持以上所有选项作为命令

36.45 apulsator

音频脉动器是介于自动平移器和颤音之间的东西。但它也可以产生有趣的立体声效果。Pulsator 基于具有不同波形和移相的 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。默认为赫兹。

bpm

设置节拍数。默认值为 120。允许的范围为 [30 - 300]。仅当计时设置为 bpm 时才使用。

ms

设置女士。默认值为 500。允许的范围为 [10 - 2000]。仅当计时设置为毫秒时才使用。

hz

设置频率(以 Hz 为单位)。默认值为 2。允许的范围为 [0.01 - 100]。仅当计时设置为 Hz 时才使用。

36.46 aresample

使用 libsresample 库将输入音频重新采样为指定参数。如果未指定,则过滤器将自动在其输入和输出之间进行转换。

该过滤器还能够拉伸/压缩音频数据以使其与时间戳匹配,或注入静音/剪切音频以使其与时间戳匹配,或者两者结合或都不做。

该过滤器接受语法 [ sample_rate :] resampler_options,其中sample_rate 表示采样率,resampler_options是=对的列表 ,以“:”分隔。 有关受支持选项的完整列表, 请参阅 ffmpeg-resampler(1) 手册中的 (ffmpeg-resampler)“重采样器选项”部分。

36.46.1 示例

  • 将输入音频重新采样为 44100Hz:
    aresample=44100
    
  • 将样本拉伸/压缩到给定的时间戳,每秒最多补偿 1000 个样本:
    aresample=async=1000
    

36.47 areverse

反转音频剪辑。

警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行修剪。

36.47.1 示例

  • 获取剪辑的前 5 秒并将其反转。
    atrim=end=5,areverse
    

36.48 arls

使用第二个音频流将递归最小二乘算法应用于第一个音频流。

该自适应滤波器用于通过递归查找与生成误差信号的最小加权线性最小二乘成本函数(所需的第二个输入音频流与实际信号、第一个输入之间的差异)相关的滤波器系数来模拟所需的滤波器。音频流)。

下面是接受的选项的描述。

order

设置过滤器顺序。

lambda

设置遗忘因子。

delta

设置系数以初始化内部协方差矩阵。

out_mode

设置滤波器输出样本。它接受以下值:

i

通过第一个输入。

d

通过第二个输入。

o

通过所需的第二输入和误差信号估计之间的差异。

n

通过输入、第一输入和误差信号估计之间的差异。

e

通过误差信号估计样本。

默认值为o

36.49 arnndn

使用循环神经网络减少语音噪声。

该过滤器接受以下选项:

model, m

设置要加载的火车模型文件。此选项始终是必需的。

mix

设置将过滤后的样本混合到最终输出中的量。允许的范围是从 -1 到 1。默认值为 1。负值很特殊,它们设置在最终滤波器输出中保留多少过滤的噪声。将此选项设置为 -1 可听到从输入信号中消除的实际噪声。

36.49.1 命令

该过滤器支持以上所有选项作为命令

36.50 asdr

测量音频信号失真比。

该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。

36.51 asetnsamples

设置每个输出音频帧的样本数。

最后一个输出数据包可能包含不同数量的样本,因为当输入音频信号结束时,过滤器将刷新所有剩余的样本。

该过滤器接受以下选项:

nb_out_samples, n

设置每个输出音频帧的帧数。该数字旨在表示每个通道的样本数。默认值为 1024。

pad, p

如果设置为 1,过滤器将用零填充最后一个音频帧,以便最后一个帧将包含与前一个帧相同数量的样本。默认值为 1。

例如,要将每帧样本数设置为 1234 并禁用最后一帧的填充,请使用:

asetnsamples=n=1234:p=0

36.52 asetrate

设置采样率而不改变 PCM 数据。这将导致速度和音调的变化。

该过滤器接受以下选项:

sample_rate, r

设置输出采样率。默认值为 44100 Hz。

36.53 ashowinfo

显示包含每个输入音频帧的各种信息的行。输入音频未修改。

所示行包含一系列键/值对,其形式为 key : value

输出中显示以下值:

n

输入帧的(连续)编号,从 0 开始。

pts

输入帧的呈现时间戳,以时基单位表示;时基取决于滤波器输入板,通常为 1/ sample_rate

pts_time

输入帧的呈现时间戳(以秒为单位)。

fmt

样本格式。

chlayout

渠道布局。

rate

音频帧的采样率。

nb_samples

帧中的样本数(每个通道)。

checksum

音频数据的 Adler-32 校验和(以十六进制打印)。对于平面音频,数据被视为所有平面都是串联的。

plane_checksums

每个数据平面的 Adler-32 校验和列表。

36.54 asisdr

测量音频缩放不变信号失真比。

该过滤器采用两个音频流作为输入,并输出第一个音频流。结果以任一输入端每通道的 dB 为单位。

36.55 asoftclip

应用音频软剪辑。

软削波是一种失真效应,其中信号幅度沿着平滑曲线饱和,而不是硬削波的陡峭形状。

该过滤器接受以下选项:

type

设置软剪辑的类型。

它接受以下值:

hard
tanh
atan
cubic
exp
alg
quintic
sin
erf
threshold

设置开始剪辑的阈值。默认值为 0dB 或 1。

output

设置应用于输出的增益。默认值为 0dB 或 1。

param

设置控制 sigmoid 函数的附加参数。

oversample

设置过采样因子。

36.55.1 命令

该过滤器支持以上所有选项作为命令

36.56 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

选择要测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有测量。

每个元数据键的列表如下:

mean
variance
centroid
spread
skewness
kurtosis
entropy
flatness
crest
flux
slope
decrease
rolloff

36.57 asr

自动语音识别

该过滤器使用 PocketSphinx 进行语音识别。要启用此过滤器的编译,您需要使用 --enable-pocketsphinx.

它接受以下选项:

rate

设置输入音频的采样率。默认值为16000. 这需要匹配语音模型,否则结果会很差。

hmm

设置包含声学模型文件的字典。

dict

设置发音词典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置要使用的语言模型。

logfn

设置日志消息的输出。

过滤器将识别的语音导出为帧元数据lavfi.asr.text

36.58 astats

显示音频通道的时域统计信息。计算并显示每个音频通道的统计数据,并且在适用的情况下还给出总体数据。

它接受以下选项:

length

短窗口长度(以秒为单位),用于峰值和谷值 RMS 测量。默认值为0.05(50 毫秒)。允许的范围是[0 - 10].

metadata

设置元数据注入。所有元数据键都以 为前缀lavfi.astats.X,其中X是从 1 或 string 开始的通道号Overall。默认为禁用。

每个通道的可用键有: Bit_depth Crest_factor DC_offset Dynamic_range Entropy 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 _率

对于OverallBit_depth DC_offset Entropy Flat_factor Max_difference Max_level Mean_difference Min_level Noise_floor Noise_floor_count Number_of_Infs Number_of_NaNs Number_of_denormals Number_of_samples Peak_count Abs_Peak_count Peak_level RMS_difference RMS_level RMS_peak RMS_trough _

例如,完整的键看起来像lavfi.astats.1.DC_offsetlavfi.astats.Overall.Peak_count

请阅读下面的按键说明。

reset

设置重置之前计算累积统计数据的帧数。默认为禁用。

measure_perchannel

选择每个通道测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有每通道测量。

measure_overall

选择总体测量的参数。元数据键可以用作标志,默认为全部它衡量一切。 没有任何禁用所有总体测量。

测量键的说明如下:

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

信号达到本底噪声的次数(不是样本数)

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

过零率和音频样本数

36.59 asubboost

提高低音炮频率。

该过滤器接受以下选项:

dry

设置干增益,保留多少原始信号。允许的范围是 0 到 1。默认值为 1.0。

wet

设置湿增益,保留多少滤波后的信号。允许的范围是 0 到 1。默认值为 1.0。

boost

设置最大提升系数。允许的范围是 1 到 12。默认值为 2。

decay

设置延迟线衰减增益值。允许的范围是 0 到 1。默认值为 0.0。

feedback

设置延迟线反馈增益值。允许的范围是 0 到 1。默认值为 0.9。

cutoff

设置截止频率(以赫兹为单位)。允许的范围是 50 到 900。默认值为 100。

slope

设置截止频率的斜率量。允许的范围是 0.0001 到 1。默认值为 0.5。

delay

设置延迟。允许的范围是 1 到 100。默认值为 20。

channels

设置要处理的通道。默认值全部可用。

36.59.1 命令

该过滤器支持以上所有选项作为命令

36.60 asubcut

削减低音炮频率。

该滤波器允许设置比高通滤波器更陡峭的自定义滚降,因此能够更多地衰减阻带中的频率内容。

该过滤器接受以下选项:

cutoff

设置截止频率(以赫兹为单位)。允许的范围是 2 到 200。默认值为 20。

order

设置过滤器顺序。可用值为 3 到 20。默认值为 10。

level

设置输入增益电平。允许的范围是 0 到 1。默认值为 1。

36.60.1 命令

该过滤器支持以上所有选项作为命令

36.61 asupercut

削减超频率。

该过滤器接受以下选项:

cutoff

设置截止频率(以赫兹为单位)。允许的范围是 20000 到 192000。默认值为 20000。

order

设置过滤器顺序。可用值为 3 到 20。默认值为 10。

level

设置输入增益电平。允许的范围是 0 到 1。默认值为 1。

36.61.1 命令

该过滤器支持以上所有选项作为命令

36.62 asuperpass

应用高阶巴特沃斯带通滤波器。

该过滤器接受以下选项:

centerf

设置中心频率(以赫兹为单位)。允许的范围是 2 到 999999。默认值为 1000。

order

设置过滤器顺序。可用值为 4 到 20。默认值为 4。

qfactor

设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。

level

设置输入增益电平。允许的范围是 0 到 2。默认值为 1。

36.62.1 命令

该过滤器支持以上所有选项作为命令

36.63 asuperstop

应用高阶巴特沃斯带阻滤波器。

该过滤器接受以下选项:

centerf

设置中心频率(以赫兹为单位)。允许的范围是 2 到 999999。默认值为 1000。

order

设置过滤器顺序。可用值为 4 到 20。默认值为 4。

qfactor

设置 Q 因子。允许的范围是 0.01 到 100。默认值为 1。

level

设置输入增益电平。允许的范围是 0 到 2。默认值为 1。

36.63.1 命令

该过滤器支持以上所有选项作为命令

36.64 atempo

调整音频节奏。

该滤波器仅接受一个参数,即音频速度。如果未指定,则滤波器将采用标称 1.0 速度。速度必须在 [0.5, 100.0] 范围内。

请注意,大于 2 的节奏将跳过一些样本,而不是将它们混合在一起。如果出于任何原因需要考虑,始终可以以菊花链方式连接多个 atempo 实例,以实现所需的产品节奏。

36.64.1 示例

  • 将音频速度减慢至 80%:
    atempo=0.8
    
  • 要将音频速度加快到 300%:
    atempo=3
    
  • 要通过菊花链连接两个 atempo 实例将音频速度加快到 300%:
    atempo=sqrt(3),atempo=sqrt(3)
    

36.64.2 命令

该过滤器支持以下命令:

tempo

更改滤波器速度比例因子。该命令的语法是:“ tempo

36.65 atilt

将频谱倾斜滤波器应用于音频流。

该滤波器在任何指定频带上应用任何频谱滚降斜率。

该过滤器接受以下选项:

freq

设置倾斜的中心频率(以 Hz 为单位)。默认值为 10000 Hz。

slope

设置倾斜的坡度方向。默认值为 0。允许的范围为 -1 到 1。

width

设置倾斜宽度。默认值为 1000。允许的范围为 100 到 10000。

order

设置倾斜滤波器的顺序。

level

设置输入音量级别。允许的范围是 0 到 4。默认值为 1。

36.65.1 命令

该过滤器支持以上所有选项作为命令

36.66 atrim

修剪输入,使输出包含输入的一个连续子部分。

它接受以下参数:

start

要保留的部分的开始时间戳(以秒为单位)。即带有时间戳开始的音频样本将是输出中的第一个样本。

end

指定要删除的第一个音频样本的时间,即紧邻时间戳结尾的音频样本之前的音频样本是输出中的最后一个样本。

start_pts

与start相同,但此选项以样本而不是秒为单位设置开始时间戳。

end_pts

与end相同,但此选项以样本而不是秒为单位设置结束时间戳。

duration

输出的最大持续时间(以秒为单位)。

start_sample

应输出的第一个样本的编号。

end_sample

应删除的第一个样本的数量。

开始,结尾, 和期间表示为持续时间规格;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分

请注意,前两组开始/结束选项和期间 选项查看帧时间戳,而 _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
    

36.67 axcorrelate

计算两个输入音频流之间的归一化窗口互相关。

结果样本始终介于 -1 和 1 之间(包括 -1 和 1)。如果结果为 1,则意味着两个输入样本在所选片段中高度相关。结果 0 意味着它们根本不相关。如果结果为 -1,则意味着两个输入样本异相,这意味着它们相互抵消。

该过滤器接受以下选项:

size

设置计算互相关的段的大小。默认值为 256。允许的范围为 2 到 131072。

algo

设置互相关算法。可以是slowfastbest。默认为best. 快速算法假设任何给定段的平均值始终为零,因此需要进行的计算要少得多。这通常是不正确的,但对于典型的音频流来说是有效的。

36.67.1 示例

  • 计算立体声音频流中通道之间的相关性:
    ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
    

36.68 bandpass

应用具有中心频率频率和(3dB 点)带宽的二极点巴特沃斯带通滤波器。csg选项选择恒定裙边增益(峰值增益 = Q),而不是默认值:恒定 0dB 峰值增益。滤波器以每倍频程 6dB(每十倍频程 20dB)衰减。

该过滤器接受以下选项:

frequency, f

设置滤波器的中心频率。默认为3000.

csg

如果设置为 1,则为恒定裙边增益。默认为 0。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.68.1 命令

该过滤器支持以下命令:

frequency, f

改变带通频率。该命令的语法是:“频率

width_type, t

更改带通宽度_类型。该命令的语法是:“ width_type

width, w

改变带通宽度。该命令的语法是:“宽度

mix, m

改变带通混合。该命令的语法是:“ mix

36.69 bandreject

应用具有中心频率频率和(3dB 点)带宽 宽度 的两极巴特沃斯带阻滤波器。滤波器以每倍频程 6dB(每十倍频程 20dB)衰减。

该过滤器接受以下选项:

frequency, f

设置滤波器的中心频率。默认为3000.

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.69.1 命令

该过滤器支持以下命令:

frequency, f

更改带阻频率。该命令的语法是:“频率

width_type, t

更改带阻宽度_类型。该命令的语法是:“ width_type

width, w

更改带阻宽度。该命令的语法是:“宽度

mix, m

更改带阻混音。该命令的语法是:“ mix

36.70 bass, lowshelf

使用两极搁置滤波器增强或减弱音频的低音(较低)频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。

该过滤器接受以下选项:

gain, g

给出 0 Hz 时的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。

frequency, f

设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为100赫兹。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

确定过滤器的架过渡有多陡。

poles, p

设置极数。默认值为 2。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.70.1 命令

该过滤器支持以下命令:

frequency, f

改变低音频率。该命令的语法是:“频率

width_type, t

更改低音宽度_类型。该命令的语法是:“ width_type

width, w

更改低音宽度。该命令的语法是:“宽度

gain, g

更改低音增益。该命令的语法是:“增益

mix, m

改变低音混音。该命令的语法是:“ mix

36.71 biquad

应用具有给定系数的双二阶 IIR 滤波器。其中b0b1b2a0a1a2 分别是分子和分母系数。和channelsc指定要过滤的通道,默认情况下所有可用的通道都会被过滤。

36.71.1 命令

该过滤器支持以下命令:

a0
a1
a2
b0
b1
b2

更改双二阶参数。该命令的语法是:“ value

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.72 bs2b

Bauer 立体声到双耳转换,可改善立体声音频记录的耳机聆听效果。

要启用此过滤器的编译,您需要使用 --enable-libbs2b.

它接受以下参数:

profile

预定义的横向进给水平。

default

默认级别(fcut=700,feed=50)。

cmoy

Chu Moy 电路(fcut=700,feed=60)。

jmeier

Jan Meier 电路(fcut=650,feed=95)。

fcut

截止频率(以 Hz 为单位)。

feed

进给水平(以赫兹为单位)。

36.73 channelmap

将输入通道重新映射到新位置。

它接受以下参数:

map

将通道从输入映射到输出。参数是一个以“|”分隔的映射列表,每个映射都采用或 in_channel形式。in_channel可以是输入通道的名称(例如 FL 表示左前)或其在输入通道布局中的索引。 out_channel是输出通道的名称或其在输出通道布局中的索引。如果未给出out_channel,则它隐式是一个索引,从零开始,每次映射加一。 in_channel-out_channel

channel_layout

输出流的通道布局。

如果不存在映射,过滤器将隐式地将输入通道映射到输出通道,并保留索引。

36.73.1 示例

  • 例如,假设输入 5.1+ 缩混 MOV 文件,
    ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
    

    将从输入的缩混通道创建一个标记为立体声的输出 WAV 文件。

  • 修复以 AAC 的本机通道顺序错误编码的 5.1 WAV
    ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
    

36.74 channelsplit

将输入音频流中的每个通道拆分为单独的输出流。

它接受以下参数:

channel_layout

输入流的通道布局。默认为“立体声”。

channels

通道布局描述要提取为单独输出流的通道或“全部”以将每个输入通道提取为单独流。默认为“全部”。

选择输入中通道布局中不存在的通道将导致错误。

36.74.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
    

36.75 chorus

为音频添加合唱效果。

可以发出像合唱一样的单一声音,但也可以应用于乐器演奏。

合唱类似于具有短延迟的回声效果,但对于回声,延迟是恒定的,而对于合唱,则使用正弦或三角调制来改变延迟。调制深度定义了延迟之前或之后播放调制延迟的范围。因此,延迟的声音听起来会更慢或更快,即围绕原始声音调整的延迟声音,就像在合唱中一些人声稍微跑调一样。

它接受以下参数:

in_gain

设置输入增益。默认值为 0.4。

out_gain

设置输出增益。默认值为 0.4。

delays

设置延迟。典型的延迟约为 40 毫秒至 60 毫秒。

decays

集合衰减。

speeds

设置速度。

depths

设置深度。

36.75.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
    

36.76 compand

压缩或扩展音频的动态范围。

它接受以下参数:

attacks
decays

每个通道的时间列表(以秒为单位),在该列表中对输入信号的瞬时电平进行平均以确定其音量。攻击是指音量的增加,衰减是指音量的减少。对于大多数情况,起音时间(对音频变大的响应)应短于衰减时间,因为人耳对突然的大声音频比突然的小音频更敏感。攻击的典型值为 0.3 秒,衰减的典型值为 0.8 秒。如果指定的攻击和衰减数量低于通道数,则最后设置的攻击/衰减将用于所有剩余通道。

points

传递函数的点列表,以相对于最大可能信号幅度的 dB 为单位指定。每个关键点列表必须使用以下语法定义:x0/y0|x1/y1|x2/y2|....x0/y0 x1/y1 x2/y2 ....

输入值必须严格按递增顺序排列,但传递函数不必单调上升。该点0/0是假设的,但可能会被覆盖(通过0/out-dBn)。传递函数的典型值为-70/-70|-60/-20|1/0

soft-knee

设置所有关节的曲线半径(以 dB 为单位)。默认为 0.01。

gain

设置要应用于传递函数上所有点的附加增益(以 dB 为单位)。这样可以轻松调整总体增益。默认为 0。

volume

设置滤波开始时每个通道的初始音量(以 dB 为单位)。这允许用户最初提供标称电平,使得例如在压扩开始操作之前不会将非常大的增益应用于初始信号电平。最初安静的音频的典型值为 -90 dB。默认为 0。

delay

设置延迟(以秒为单位)。输入音频会立即进行分析,但音频在馈送到音量调节器之前会被延迟。指定大约等于攻击/衰减时间的延迟允许滤波器在预测模式而不是反应模式下有效运行。默认为 0。

36.76.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
    
  • 2:1 压缩从 -6dB 开始:
    compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
    
  • 2:1 压缩从 -9dB 开始:
    compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
    
  • 2:1 压缩从 -12dB 开始:
    compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
    
  • 2:1 压缩从 -18dB 开始:
    compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
    
  • 3:1 压缩从 -15dB 开始:
    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
    

36.77 compensationdelay

补偿延迟线是一种基于度量的延迟,用于补偿麦克风或扬声器的不同位置。

例如,您使用放置在不同位置的两个麦克风录制了吉他。由于声波前端在正常情况下具有固定速度,因此麦克风的相位可能会有所不同,具体取决于其位置和插入方式。当这些麦克风同相(同步)时,可以实现最佳的混音效果。请注意,麦克风之间的距离约为 30 厘米,使得一个麦克风捕获与另一个麦克风反相的信号。这使得最终的混音听起来喜怒无常。该滤波器通过向每个麦克风轨道添加不同的延迟并使它们同步来帮助解决相位问题。

以一首曲目为基础,将其他曲目一一同步,可以达到最佳效果。请记住,同步/延迟容差也取决于采样率。更高的采样率将提供更大的容差。

该过滤器接受以下参数:

mm

设置毫米距离。这是微调的补偿距离。默认值为 0。

cm

设置厘米距离。这是紧固距离设置的补偿距离。默认值为 0。

m

设置米距离。这是硬距离设置的补偿距离。默认值为 0。

dry

设定干燥量。未处理的(干)信号量。默认值为 0。

wet

设定湿量。处理的(湿)信号量。默认值为 1。

temp

设置温度(以摄氏度为单位)。这是环境温度。默认值为 20。

36.77.1 命令

该过滤器支持以上所有选项作为命令

36.78 crossfeed

应用耳机交叉馈送滤波器。

Crossfeed 是混合立体声音频录制的左右声道的过程。它主要用于减少低频的极端立体声分离。

目的是为听众提供更多类似扬声器的声音。

该过滤器接受以下选项:

strength

设置横向进给的强度。默认值为 0.2。允许的范围是从 0 到 1。这设置了立体图像侧面部分的低架滤波器的增益。默认值为-6dB。当强度设置为 1 时,允许的最大值为 -30db。

range

设置声场宽度。默认值为 0.5。允许的范围是从 0 到 1。这设置低架滤波器的截止频率。默认值在 1550 Hz 附近截止。当范围设置为 1 时,截止频率设置为 2100 Hz。

slope

设置低架过滤器的曲线斜率。默认值为 0.5。允许的范围是 0.01 到 1。

level_in

设置输入增益。默认值为 0.9。

level_out

设置输出增益。默认值为 1。

block_size

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.78.1 命令

该过滤器支持以上所有选项作为命令

36.79 crystalizer

音频噪声锐化的简单算法。

该滤波器线性增加每个音频样本之间的差异。

该过滤器接受以下选项:

i

设置效果强度(默认值:2.0)。范围必须在 -10.0 到 0(未改变的声音)到 10.0(最大效果)之间。要反向过滤,请使用负值。

c

启用剪辑。默认情况下启用。

36.79.1 命令

该过滤器支持以上所有选项作为命令

36.80 dcshift

对音频应用直流变换。

这对于消除音频中的直流偏移(可能是由录音链中的硬件问题引起)非常有用。直流偏移的影响是减少净空和体积。astats滤波器可用于确定信号是否具有 DC 偏移。

shift

设置直流偏移,允许范围为[-1, 1]。它指示音频的偏移量。

limitergain

选修的。它的值应远小于 1(例如 0.05 或 0.02),用于防止削波。

36.81 deesser

对音频样本应用嘶声消除。

i

设置触发消除嘶声的强度。允许的范围是 0 到 1。默认值为 0。

m

设置声音高音部分的闪避量。允许的范围是 0 到 1。默认值为 0.5。

f

消除嘶声时保留多少原始频率内容。允许的范围是 0 到 1。默认值为 0.5。

s

设置输出模式。

它接受以下值:

i

传递输入不变。

o

通过 ess 过滤掉。

e

仅通过ess。

默认值为o

36.82 dialoguenhance

增强立体声音频中的对话。

该滤波器接受立体声输入并产生环绕 (3.0) 声道输出。新制作的前置中置声道增强了原本在两个立体声声道中可用的语音对话。该滤波器输出左前和右前通道,与立体声输入中的可用通道相同。

该过滤器接受以下选项:

original

设置原始中心系数以保持前中置通道输出。允许的范围是 0 到 1。默认值为 1。

enhance

设置对话增强系数以置于前置中置声道输出。允许的范围是 0 到 3。默认值为 1。

voice

设置语音检测系数。允许的范围是 2 到 32。默认值为 2。

36.82.1 命令

该过滤器支持以上所有选项作为命令

36.83 drmeter

测量音频动态范围。

在非常动态的材料中发现 DR 值为 14 或更高。过渡材料中的 DR 为 8 至 13。低于 8 的任何值的动态都很差并且压缩程度很高。

该过滤器接受以下选项:

length

设置窗口长度(以秒为单位),用于将音频分割成相等长度的片段。默认值为 3 秒。

36.84 dynaudnorm

动态音频标准化器。

该滤波器对输入音频应用一定量的增益,以使其峰值达到目标水平(例如0 dBFS)。然而,与更“简单”的归一化算法相比,动态音频归一化器*动态地*重新调整输入音频的增益因子。这允许对音频的“安静”部分应用额外的增益,同时避免失真或削波“大声”部分。换句话说:动态音频标准化器将“均衡”安静和响亮部分的音量,即每个部分的音量都达到相同的目标水平。但请注意,动态音频标准化器*无需*应用“动态范围压缩”即可实现此目标。它将保留音频文件每个部分*内*100% 的动态范围。

framelen, f

设置帧长度(以毫秒为单位)。范围为 10 到 8000 毫秒。默认值为 500 毫秒。动态音频标准化器以小块(称为帧)的形式处理输入音频。这是必需的,因为峰值幅度对于单个样本值没有意义。相反,我们需要确定连续样本值序列的峰值幅度。虽然“标准”标准化器仅使用整个文件的峰值幅度,但动态音频标准化器单独确定每个帧的峰值幅度。帧的长度以毫秒为单位指定。默认情况下,动态音频标准化器使用 500 毫秒的帧长度,已发现这对于大多数文件都可以提供良好的结果。请注意,将根据各个输入音频文件的采样率自动确定确切的帧长度(以样本数为单位)。

gausssize, g

设置高斯滤波器窗口大小。范围从 3 到 301,必须是奇数。默认值为 31。动态音频标准化器最重要的参数可能是 window size高斯平滑滤波器的参数。过滤器的窗口大小以帧为单位指定,以当前帧为中心。为了简单起见,这必须是奇数。因此,默认值 31 会考虑当前帧以及前面的 15 个帧和后面的 15 个帧。使用较大的窗口会产生较强的平滑效果,从而导致较小的增益变化,即较慢的增益适应。相反,使用较小的窗口会导致较弱的平滑效果,从而导致更多的增益变化,即更快的增益适应。换句话说,该值增加得越多,动态音频标准化器的行为就越像“传统”标准化过滤器。相反,该值降低得越多,动态音频标准化器的行为就越像动态范围压缩器。

peak, p

设置目标峰值。这指定了标准化音频输入的最高允许幅度级别。该滤波器将尝试尽可能接近目标峰值幅度,但同时它也确保归一化信号永远不会超过峰值幅度。帧的最大局部增益因子直接由目标峰值幅度决定。默认值为 0.95,因此留有 5%* 的余量。不建议超过该值。

maxgain, m

设置最大增益系数。范围从 1.0 到 100.0。默认值为 10.0。动态音频标准化器确定每个输入帧的最大可能(局部)增益因子,即不会导致削波或失真的最大增益因子。最大增益因子由帧的最高幅度样本确定。然而,动态音频标准化器还通过预定的(全局)最大增益因子来限制帧的最大增益因子。这样做是为了避免“静音”或几乎静音帧中增益因子过多。默认情况下,最大增益因子为 10.0,对于大多数输入来说,默认值应该足够了,通常不建议增加该值。不过,对于总体音量极低的输入,可能有必要允许更高的增益系数。但请注意,动态音频标准化器并不简单地应用“硬”阈值(即截止值高于阈值)。相反,将应用“S形”阈值函数。这样,增益因子将平滑地接近阈值,但永远不会超过该值。

targetrms, r

设置目标 RMS。范围从 0.0 到 1.0。默认值为 0.0 - 禁用。默认情况下,动态音频标准化器执行“峰值”标准化。这意味着每个帧的最大局部增益因子(仅)由帧的最高幅度样本定义。这样,样本可以被尽可能多地放大而不超过最大信号电平,即没有削波。然而,动态音频标准化器也可以选择考虑帧的均方根(缩写为 RMS)。在电气工程中,RMS 通常用于确定时变信号的功率。因此,人们认为 RMS 比仅仅查看信号的峰值幅度更能近似“感知响度”。因此,通过将所有帧调整为恒定的 RMS 值,可以建立统一的“感知响度”。如果指定了目标 RMS 值,则帧的局部增益因子将定义为精确产生该 RMS 值的因子。但请注意,最大局部增益因子仍然受到帧的最高幅度样本的限制,以防止削波。

coupling, n

启用通道耦合。默认情况下启用。默认情况下,动态音频标准化器会将所有通道放大相同的量。这意味着相同的增益因子将应用于所有通道,即最大可能的增益因子由“最大声”的通道确定。然而,在一些录音中,可能会发生不同通道的音量不均匀的情况,例如一个通道可能比其他通道“更安静”。在这种情况下,该选项可用于禁用通道耦合。这样,每个通道的增益因子将独立确定,仅取决于各个通道的最高幅度样本。这样可以协调不同通道的音量。

correctdc, c

启用直流偏置校正。默认情况下是禁用的。音频信号(在时域中)是一系列样本值。在动态音频标准化器中,无论原始输入格式如何,这些样本值都在 -1.0 到 1.0 范围内表示。通常,音频信号或“波形”应以零点为中心。这意味着如果我们计算文件中或单个帧中所有样本的平均值,那么结果应该是 0.0 或至少非常接近该值。然而,如果平均值与 0.0 存在显着偏差(无论是正方向还是负方向),则称为 DC 偏置或 DC 偏移。由于直流偏置显然是不受欢迎的,因此动态音频标准化器提供了可选的直流偏置校正。启用 DC 偏置校正后,动态音频标准化器将确定每个输入帧的平均值或“DC 校正”偏移量,并从所有帧的样本值中减去该值,从而确保这些样本再次以 0.0 为中心。此外,为了避免帧边界处的“间隙”,DC校正偏移值将在相邻帧之间平滑地内插。

altboundary, b

启用替代边界模式。默认情况下是禁用的。动态音频标准化器考虑每个帧周围的某个邻域。这包括前面的帧以及后面的帧。然而,对于位于音频文件的最开始和最后的“边界”帧,并非所有相邻帧都可用。特别是,对于音频文件中的前几帧,前面的帧是未知的。并且,类似地,对于音频文件中的最后几帧,后续帧是未知的。因此,出现了对于“边界”区域中的丢失帧应该假设哪些增益因子的问题。动态音频标准化器实现了两种模式来处理这种情况。默认边界模式假设丢失帧的增益因子恰好为 1.0,从而分别在输入的开头和结尾处产生平滑的“淡入”和“淡出”。

compress, s

设置压缩因子。范围从 0.0 到 30.0。默认值为 0.0。默认情况下,动态音频标准化器不应用“传统”压缩。这意味着信号峰值不会被修剪,因此完整的动态范围将保留在每个局部邻域内。然而,在某些情况下,可能需要将动态音频标准化器的标准化算法与更“传统”的压缩相结合。为此,动态音频标准化器提供了可选的压缩(阈值)功能。如果(且仅当)启用压缩功能,所有输入帧将在实际标准化过程之前由软拐点阈值函数进行处理。简而言之,阈值函数将修剪所有幅度超过某个阈值的样本。然而,动态音频标准化器并不简单地应用固定阈值。相反,将为每个单独的帧调整阈值。一般来说,较小的参数会导致较强的压缩,反之亦然。不建议使用低于 3.0 的值,因为可能会出现声音失真。

threshold, t

设置目标阈值。这指定了将被标准化的音频输入的最低允许幅度水平。如果输入帧音量高于该值,帧将被标准化。否则帧可能根本无法标准化。默认值设置为 0,这意味着所有输入帧都将被标准化。如果不想放大数字噪声,则此选项非常有用。

channels, h

指定要过滤的通道,默认情况下会过滤所有可用的通道。

overlap, o

指定帧的重叠。如果设置为 0(默认),则不会发生帧重叠。使用>0和<1值将进行不太保守的增益调整,例如当framelen选项设置为较小值时,如果framelen选项值针对非零重叠进行补偿,则与零重叠情况相比,增益调整将在时间上更加平滑。

curve, v

指定在计算应用于帧的增益时要使用的峰值映射曲线表达式。最大输出帧增益仍将受到前面提到的该滤波器的其他选项的限制。

该表达式可以包含以下常量:

ch

当前频道号

sn

当前样本数

nb_channels

通道数

t

以秒表示的时间戳

sr

采样率

p

当前帧峰值

36.84.1 命令

该过滤器支持以上所有选项作为命令

36.85 earwax

让耳机更容易聆听音频。

该滤波器将“提示”添加到 44.1kHz 立体声(即音频 CD 格式)音频中,以便在耳机上收听时,立体声图像会从您的头部内部(耳机的标准)移动到听众的外部和前方(扬声器的标准) )。

从 SoX 移植。

36.86 equalizer

应用两极峰值均衡 (EQ) 滤波器。使用此滤波器,可以增加或减少选定频率处及其附近的信号电平,而(与带通和带阻滤波器不同)在所有其他频率处的信号电平保持不变。

为了产生复杂的均衡曲线,可以多次给出该滤波器,每次具有不同的中心频率。

该过滤器接受以下选项:

frequency, f

设置滤波器的中心频率(以 Hz 为单位)。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。

gain, g

设置所需的增益或衰减(以 dB 为单位)。使用正增益时要小心削波。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.86.1 示例

  • 在 1000 Hz 时衰减 10 dB,带宽为 200 Hz:
    equalizer=f=1000:t=h:width=200:g=-10
    
  • 使用 Q 1 在 1000 Hz 处应用 2 dB 增益,并在 100 Hz 处使用 Q 2 衰减 5 dB:
    equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
    

36.86.2 命令

该过滤器支持以下命令:

frequency, f

更改均衡器频率。该命令的语法是:“频率

width_type, t

更改均衡器 width_type。该命令的语法是:“ width_type

width, w

更改均衡器宽度。该命令的语法是:“宽度

gain, g

更改均衡器增益。该命令的语法是:“增益

mix, m

更改均衡器组合。该命令的语法是:“ mix

36.87 extrastereo

线性增加左右声道之间的差异,从而为播放添加某种“现场”效果。

该过滤器接受以下选项:

m

设置差异系数(默认值:2.5)。0.0表示单声道(两个声道的平均值),1.0声音不变,-1.0左右声道交换。

c

启用剪辑。默认情况下启用。

36.87.1 命令

该过滤器支持以上所有选项作为命令

36.88 firequalizer

使用任意频率响应应用 FIR 均衡。

过滤器接受以下选项:

gain

设置增益曲线方程(以 dB 为单位)。表达式可以包含变量:

f

评估频率

sr

采样率

ch

通道号,当禁用多通道评估时设置为 0

chid

通道 id,请参阅 libavutil/channel_layout.h,禁用多通道评估时设置为第一个通道 id

chs

通道数

chlayout

通道布局,参见 libavutil/channel_layout.h

和功能:

gain_interpolate(f)

根据 Gain_entry 对频率 f 插值增益

cubic_interpolate(f)

与gain_interpolate相同,但更平滑

此选项也可作为命令使用。默认为gain_interpolate(f).

gain_entry

设置gain_interpolate函数的增益条目。表达式可以包含函数:

entry(f, g)

将频率 f 处的增益条目存储为值 g

此选项也可作为命令使用。

delay

设置过滤器延迟(以秒为单位)。值越高意味着越准确。默认为0.01.

accuracy

设置滤波器精度(以 Hz 为单位)。值越低意味着越准确。默认为5.

wfunc

设置窗函数。可接受的值为:

rectangular

矩形窗口,当增益曲线已经平滑时有用

hann

汉恩窗(默认)

hamming

汉明窗

blackman

布莱克曼窗

nuttall3

3 项连续一阶导数纳塔尔窗

mnuttall3

最少 3 项不连续 nuttall 窗口

nuttall

4 项连续一阶导数纳塔尔窗

bnuttall

最少 4 项不连续 nuttall (blackman-nuttall) 窗口

bharris

布莱克曼-哈里斯窗

tukey

图基窗

fixed

如果启用,则使用固定数量的音频样本。这提高了大延迟过滤时的速度。默认为禁用。

multi

启用增益多通道评估。默认为禁用。

zero_phase

通过减去时间戳来补偿延迟来启用零相位模式。默认为禁用。

scale

设置增益使用的比例。可接受的值为:

linlin

线性频率、线性增益

linlog

线性频率、对数(以 dB 为单位)增益(默认)

loglin

对数(倍频程,20 Hz 为 0)频率,线性增益

loglog

对数频率、对数增益

dumpfile

设置转储文件,适用于 gnuplot。

dumpscale

设置转储文件的规模。可接受的值与比例选项相同。默认为 linlog。

fft2

使用复杂的 FFT 启用 2 通道卷积。这显着提高了速度。默认为禁用。

min_phase

启用最小相位脉冲响应。默认为禁用。

36.88.1 示例

  • 1000 Hz 时的低通:
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 1000 Hz 时的低通增益,增益输入:
    firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
    
  • 自定义均衡:
    firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
    
  • 具有零相位的更高延迟来补偿延迟:
    firequalizer=delay=0.1:fixed=on:zero_phase=on
    
  • 左声道低通,右声道高通:
    firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))'
    :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
    

36.89 flanger

对音频应用镶边效果。

该过滤器接受以下选项:

delay

设置基本延迟(以毫秒为单位)。范围从 0 到 30。默认值为 0。

depth

设置添加的扫描延迟(以毫秒为单位)。范围从 0 到 10。默认值为 2。

regen

设置再生百分比(延迟信号反馈)。范围从 -95 到 95。默认值为 0。

width

设置延迟信号与原始信号混合的百分比。范围从 0 到 100。默认值为 71。

speed

设置每秒扫描次数 (Hz)。范围从 0.1 到 10。默认值为 0.5。

shape

设置扫频波形,可以是三角波正弦波。默认值为正弦曲线

phase

设置多通道的扫频百分比偏移。范围从 0 到 100。默认值为 25。

interp

设置延迟线插值,线性二次。默认为线性

36.90 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

改变右相。默认情况下启用。

36.91 hdcd

解码高清兼容数字 (HDCD) 数据。嵌入 HDCD 代码的 16 位 PCM 流被扩展为 20 位 PCM 流。

该滤波器支持 HDCD 的峰值扩展和低电平增益调整功能,并检测瞬态滤波器标志。

ffmpeg -i HDCD16.flac -af hdcd OUT24.flac

将过滤器与 wav 一起使用时,请注意 wav 的默认编码是 16 位,因此生成的 20 位流将被截断回 16 位。-acodec pcm_s24le在滤波器之后 使用类似的东西来获得 24 位 PCM 输出。

ffmpeg -i HDCD16.wav -af hdcd OUT16.wav
ffmpeg -i HDCD16.wav -af hdcd -c:a pcm_s24le OUT24.wav

该过滤器接受以下选项:

disable_autoconvert

禁用过滤器图表中的任何自动格式转换或重新采样。

process_stereo

一起处理立体声通道。如果通道间的target_gain不匹配,则认为其无效并使用最后一个有效的target_gain。

cdt_ms

设置代码检测定时器周期(以毫秒为单位)。

force_pe

即使未发出 PE 信号,也始终将峰值扩展到 -3dBFS 以上。

analyze_mode

用纯音替换音频并调整幅度以表示解码过程的某些特定方面。输出文件可以与原始文件一起加载到音频编辑器中以帮助分析。

analyze_mode=pe:force_pe=true可用于查看高于 PE 级别的所有样本。

模式有:

0, off

残疾人

1, lle

每个样本的增益调整级别

2, pe

发生峰值扩展的样品

3, cdt

代码检测计时器处于活动状态的示例

4, tgm

通道间目标增益不匹配的样本

36.92 headphone

应用头部相关传递函数 (HRTF) 在用户周围创建虚拟扬声器,以便通过耳机进行双耳聆听。HRIR 通过附加流提供,每个通道都需要一个立体声输入流。

该过滤器接受以下选项:

map

设置卷积输入流的映射。参数是一个以“|”分隔的通道名称列表,按顺序排列,因为它们作为过滤器的附加流输入给出。这也指定了输入流的数量。输入流的数量必须不小于第一个流中的通道数加一。

gain

设置应用于音频的增益。值以 dB 为单位。默认值为 0。

type

设置处理类型。可以是时间频率time在时域中处理音频,速度很慢。 freq正在频域中处理音频,速度很快。默认为频率

lfe

设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。

size

以一次处理的样本数量设置帧的大小。默认值为1024。允许的范围是从 1024 到 96000。

hrir

设置 hrir 流的格式。默认值为立体声。替代值是multich。如果 value 设置为Stereo,则附加流的数量应大于或等于第一个输入流中的输入通道的数量。此外,每个附加流都应具有立体声通道数。如果值设置为multich,则附加流的数量应该正好是 1。此外,附加流的输入通道数应等于或大于第一输入流的通道数的两倍。

36.92.1 示例

  • 使用 wav 文件作为系数和 amovie 滤波器进行 7.1 缩混的完整示例,每个 amovie 滤波器使用带有 IR 系数的立体声文件作为输入。这些文件给出了虚拟扬声器每个位置的系数:
    ffmpeg -i input.wav
    -filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR"
    output.wav
    
  • 使用 wav 文件作为系数和 amovie 滤波器进行 7.1 缩混的完整示例,但现在采用多声道 hrir格式。
    ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
    output.wav
    

36.93 highpass

应用 3dB 点频率的高通滤波器。滤波器可以是单极,也可以是双极(默认)。滤波器以每极点每倍频程 6dB 的衰减(每极点每十倍频程 20dB)。

该过滤器接受以下选项:

frequency, f

设置频率(以 Hz 为单位)。默认值为 3000。

poles, p

设置极数。默认值为 2。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。仅适用于双极滤波器。默认值为 0.707q,并给出巴特沃斯响应。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.93.1 命令

该过滤器支持以下命令:

frequency, f

更改高通频率。该命令的语法是:“频率

width_type, t

更改高通 width_type。该命令的语法是:“ width_type

width, w

更改高通宽度。该命令的语法是:“宽度

mix, m

更改高通混音。该命令的语法是:“ mix

36.94 join

将多个输入流连接到一个多通道流中。

它接受以下参数:

inputs

输入流的数量。默认为 2。

channel_layout

所需的输出通道布局。它默认为立体声。

map

将通道从输入映射到输出。参数是一个以“|”分隔的映射列表,每个映射都采用以下 形式。input_idx是输入流的从 0 开始的索引。in_channel 可以是输入通道的名称(例如 FL 表示左前)或其在指定输入流中的索引。out_channel是输出通道的名称。 input_idx.in_channel-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

36.95 ladspa

加载 LADSPA(Linux 音频开发人员的简单插件 API)插件。

要启用此过滤器的编译,您需要使用 --enable-ladspa.

file, f

指定要加载的 LADSPA 插件库的名称。如果定义了环境变量LADSPA_PATH,则在 中以冒号分隔列表指定的每个目录中搜索 LADSPA 插件, LADSPA_PATH否则在标准 LADSPA 路径中搜索,顺序如下:HOME/.ladspa/lib/,/usr/local/lib/ladspa/, /usr/lib/ladspa/

plugin, p

指定库中的插件。有些库只包含一个插件,但其他库则包含多个插件。如果未设置,过滤器将列出指定库中的所有可用插件。

controls, c

设置“|” 分隔的控件列表,它们是零个或多个浮点值,确定加载插件的行为(例如延迟、阈值或增益)。需要使用以下语法定义控件:c0= value0 |c1= value1 |c2= value2 |...,其中 valuei是在第 i个控件上设置的值。或者,也可以使用以下语法定义它们: value0 | 值1 | value2 |...,其中 valuei是在第 i个控件上设置的值。如果控制设置为 时help,将打印所有可用控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅在插件输入为零时使用。

nb_samples, n

设置每个输出帧每个通道的样本数,默认值为 1024。仅在插件具有零输入时使用。

duration, d

设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。如果未指定,或者表示的持续时间为负,则音频应该永远生成。仅当插件输入为零时才使用。

latency, l

启用延迟补偿,默认情况下禁用。仅当插件有输入时才使用。

36.95.1 示例

  • 列出 amp(LADSPA 示例插件)库中所有可用的插件:
    ladspa=file=amp
    
  • vcf_notch 列出库中插件的所有可用控件及其有效范围VCF
    ladspa=f=vcf:p=vcf_notch:c=help
    
  • 使用Computer Music Toolkit(CMT)插件库模拟低质量音频设备:
    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
    
  • 使用 TAP 插件(Tom 的音频处理插件)向音频添加混响:
    ladspa=file=tap_reverb:tap_reverb
    
  • 生成白噪声,幅度为 0.2:
    ladspa=file=cmt:noise_source_white:c=c0=.2
    
  • C* Click - Metronome使用 (CAPS) 库中的 插件生成 20 bpm 的点击次数C* Audio Plugin Suite
    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 系列的快速前瞻限制器将音量增加 20dB SWH Plugins
    ladspa=fast_lookahead_limiter_1913:fastLookaheadLimiter:20|0|2
    
  • 使用 Steve Harris 系列中的多频段均衡器衰减低频 SWH Plugins
    ladspa=mbeq_1197:mbeq:-24|-24|-24|0|0|0|0|0|0|0|0|0|0|0|0
    
  • Narrower使用(CAPS) 库减少立体图像C* Audio Plugin Suite
    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
    

36.95.2 命令

该过滤器支持以下命令:

cN

修改第N个控制值。

如果指定的值无效,则会忽略该值并保留前一个值。

36.96 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_TP、 和measured_thresh都必须指定。目标 LRA 不应低于源 LRA,并且积分响度的变化不应导致超过目标 TP 的真实峰值。如果不满足其中任何一个条件,规范化模式将恢复为动态。选项是truefalse。默认为true.

dual_mono

将单声道输入文件视为“双单声道”。如果单声道文件用于在立体声系统上播放,则其 EBU R128 测量在视觉上将是不正确的。如果设置为true,此选项将补偿这种影响。多通道输入文件不受此选项的影响。选项为真或假。默认为 false。

print_format

设置统计数据的打印格式。选项包括摘要、json 或无。默认值为无。

36.97 lowpass

应用 3dB 点频率的低通滤波器。滤波器可以是单极或双极(默认)。滤波器以每极点每倍频程 6dB 的衰减(每极点每十倍频程 20dB)。

该过滤器接受以下选项:

frequency, f

设置频率(以 Hz 为单位)。默认值为 500。

poles, p

设置极数。默认值为 2。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

以 width_type 单位指定滤波器的带宽。仅适用于双极滤波器。默认值为 0.707q,并给出巴特沃斯响应。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.97.1 示例

  • 低通仅 LFE 通道,如果 LFE 不存在,则不执行任何操作:
    lowpass=c=LFE
    

36.97.2 命令

该过滤器支持以下命令:

frequency, f

改变低通频率。该命令的语法是:“频率

width_type, t

更改低通 width_type。该命令的语法是:“ width_type

width, w

更改低通宽度。该命令的语法是:“宽度

mix, m

更改低通混音。该命令的语法是:“ mix

36.98 lv2

加载 LV2(LADSPA 版本 2)插件。

要启用此过滤器的编译,您需要使用 --enable-lv2.

plugin, p

指定插件 URI。您可能需要转义“:”。

controls, c

设置“|” 分隔的控件列表,它们是零个或多个浮点值,确定加载插件的行为(例如延迟、阈值或增益)。如果控制设置为 时help,将打印所有可用控件及其有效范围。

sample_rate, s

指定采样率,默认为 44100。仅在插件输入为零时使用。

nb_samples, n

设置每个输出帧每个通道的样本数,默认值为 1024。仅在插件具有零输入时使用。

duration, d

设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。如果未指定,或者表示的持续时间为负,则音频应该永远生成。仅当插件输入为零时才使用。

36.98.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 的 Bit Crusher 插件:
    lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
    

36.98.2 命令

此过滤器支持插件作为命令导出的所有选项。

36.99 mcompand

多频段 压缩或扩展音频的动态范围。

使用 4 阶 Linkwitz-Riley IIR 将输入音频分为多个频段。这类似于扬声器的分频,并且在没有压缩扩展器作用时导致平坦的频率响应。

它接受以下参数:

args

该选项语法为:attack,decay,[attack,decay..] 软拐点 crossover_Frequency [delay [initial_volume [gain]]] | 攻击、衰减...有关每个项目的说明,请参阅压扩过滤器文档。

36.100 pan

混合具有特定增益级别的通道。该过滤器接受输出通道布局,后跟一组通道定义。

该过滤器还旨在有效地重新映射音频流的通道。

过滤器接受以下形式的参数:“ l | outdef | outdef |...”

l

输出通道布局或通道数量

outdef

输出通道规范,格式为:“ out_name =[ Gain *] in_name [(+-)[ Gain *] in_name ...]”

out_name

要定义的输出通道,通道名称(FL、FR 等)或通道编号(c0、c1 等)

gain

通道的乘法系数,1 保持音量不变

in_name

要使用的输入通道,详细信息请参见out_name;无法混合命名和编号的输入通道

如果通道规范中的“=”被“<”替换,则该规范的增益将被重新归一化,使得总数为1,从而避免削波噪声。

36.100.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”选项)。

36.100.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"

36.101 replaygain

ReplayGain 扫描仪过滤器。该过滤器将音频流作为输入并按原样输出。过滤结束时显示track_gaintrack_peak

该过滤器接受以下导出的只读选项:

track_gain

在流末尾导出轨道增益(以 dB 为单位)。

track_peak

在流末尾导出曲目峰值。

36.102 resample

转换音频采样格式、采样率和通道布局。它并不意味着可以直接使用。

36.103 rubberband

使用 librubberband 应用时间拉伸和变调。

要启用此过滤器的编译,您需要使用 --enable-librubberband.

该过滤器接受以下选项:

tempo

设置速度比例因子。

pitch

设置音高比例因子。

transients

设置瞬态检测器。可能的值为:

crisp
mixed
smooth
detector

设置探测器。可能的值为:

compound
percussive
soft
phase

设置相位。可能的值为:

laminar
independent
window

设置处理窗口大小。可能的值为:

standard
short
long
smoothing

设置平滑。可能的值为:

off
on
formant

变调时启用共振峰保留。可能的值为:

shifted
preserved
pitchq

设置音调质量。可能的值为:

quality
speed
consistency
channels

设置频道。可能的值为:

apart
together

36.103.1 命令

该过滤器支持以下命令:

tempo

更改滤波器速度比例因子。该命令的语法是:“ tempo

pitch

更改滤波器音高比例因子。命令的语法是:“ pitch

36.104 sidechaincompress

该滤波器的作用类似于普通压缩器,但能够使用第二输入信号压缩检测到的信号。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。然后,可以在处理的后期阶段使用其他滤波器对滤波后的信号进行滤波。请参阅平移合并过滤器。

该过滤器接受以下选项:

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侧链流的 Loutter( ) 通道是否影响衰减。默认为average.

detection

在 的情况下应该采用精确信号peak,还是在 的情况下采用 RMS 信号rms。默认是rms主要是更平滑。

level_sc

设置侧链增益。默认值为 1。范围介于 0.015625 和 64 之间。

mix

在输出中使用多少压缩信号。默认值为 1。范围介于 0 和 1 之间。

36.104.1 命令

该过滤器支持以上所有选项作为命令

36.104.2 示例

  • 完整的 ffmpeg 示例采用 2 个音频输入,第一个输入根据第二个输入的信号进行压缩,稍后压缩的信号将与第二个输入合并:
    ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
    

36.105 sidechaingate

侧链门的作用类似于普通(宽带)门,但能够在将检测到的信号发送到增益降低阶段之前对其进行过滤。通常,门使用全范围信号来检测高于阈值的电平。例如:如果您从侧链信号中切除所有较低频率,则仅当没有出现足够的高音时,门才会降低轨道的音量。通过这种技术,您可以减少自然鼓的共鸣或消除严重扭曲的吉他中静音敲击的“隆隆声”。它需要两个输入流并返回一个输出流。第一个输入流将根据第二个流信号进行处理。

该过滤器接受以下选项:

level_in

在过滤之前设置输入电平。默认值为 1。允许的范围为 0.015625 到 64。

mode

设置操作模式。可以是upwarddownward. 默认为downward. 如果设置为upward模式,信号的较高部分将被放大,向上扩展动态范围。否则,在信号较低的情况下downward会减弱。

range

设置信号低于阈值时增益降低的级别。默认值为 0.06125。允许的范围是从 0 到 1。将其设置为 0 将禁用缩减,然后过滤器的行为类似于扩展器。

threshold

如果信号上升到该电平之上,增益降低就会被释放。默认值为 0.125。允许的范围是从 0 到 1。

ratio

设置信号减少的比率。默认值为 2。允许的范围为 1 到 9000。

attack

在增益降低停止之前信号必须上升到阈值以上的毫秒数。默认值为 20 毫秒。允许的范围是 0.01 到 9000。

release

在减少量再次增加之前信号必须降至阈值以下的毫秒数。默认值为 250 毫秒。允许的范围是 0.01 到 9000。

makeup

设置处理后信号的放大量。默认值为 1。允许的范围为 1 到 64。

knee

在阈值周围弯曲尖锐的拐点,以更柔和地进入增益降低。默认值为 2.828427125。允许的范围是 1 到 8。

detection

选择是采用精确信号进行检测还是采用 RMS 等信号进行检测。默认值为 rms。可以是峰值或有效值。

link

选择所有通道之间的平均电平或较大声通道是否会影响衰减。默认为平均。可以是平均值或最大值。

level_sc

设置侧链增益。默认值为 1。范围为 0.015625 到 64。

36.105.1 命令

该过滤器支持以上所有选项作为命令

36.106 silencedetect

检测音频流中的静音。

当此过滤器检测到输入音频音量小于或等于噪声容限值且持续时间大于或等于检测到的最小噪声持续时间时,该过滤器会记录一条消息。

打印的时间和持续时间以秒为单位表示。或 lavfi.silence_startlavfi.silence_start.X数据键设置在时间戳等于或超过检测持续时间的第一帧上,并且它包含静音的第一帧的时间戳。

lavfi.silence_durationlavfi.silence_duration.X 或元数据lavfi.silence_endlavfi.silence_end.X设置在静音后的第一帧上。如果单核细胞增多症启用,每个通道单独评估,.X 使用后缀键,并X对应于通道号。

该过滤器接受以下选项:

noise, n

设置噪声容限。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为 -60dB,或 0.001。

duration, d

设置通知前的静音持续时间(默认为 2 秒)。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

mono, m

单独处理每个通道,而不是组合处理。默认情况下是禁用的。

36.106.1 示例

  • 检测 5 秒静音,噪声容限为 -50dB:
    silencedetect=n=-50dB:d=5
    
  • 检测静音的完整示例,ffmpeg噪声容限为 0.0001沉默.mp3:
    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
    

36.107 silenceremove

消除音频开头、中间或结尾的静音。

该过滤器接受以下选项:

start_periods

该值用于指示是否应在音频开始处修剪音频。值为零表示不应从一开始就修剪静音。当指定非零值时,它会修剪音频,直到找到非静音。通常,当从音频开始处修剪静音时,start_periods将为1但可以将其增加到更高的值,以将所有音频修剪到特定数量的非静音周期。默认值为0

start_duration

指定在停止修剪音频之前必须检测到非静音的时间长度。通过增加持续时间,突发的噪音可以被视为静音并被修剪掉。默认值为0

start_threshold

这表明什么样本值应被视为静音。对于数字音频, 的值0可能没问题,但对于从模拟录制的音频,您可能希望增加该值以考虑背景噪声。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为0

start_silence

指定在开始时修剪后将保留的最大静音持续时间。默认值为 0,相当于修剪所有检测为静音的样本。

start_mode

指定多通道音频开始时静音结束的检测模式。可以是任何一个全部。默认为任何。使用any 时,任何通道中被检测为非静音的任何样本都将在音频流开始时触发静音结束修剪。对于all,只有当每个通道的每个样本都被检测为非静音时,才会在音频流开始时触发静音结束修剪,限制使用。

stop_periods

设置从音频末尾开始修剪静音的计数。当指定正值时,它会在找到指定的静音时间段后修剪音频。要从文件中间删除静音,请将stop_periods指定 为负数。然后,该值被视为正值,并用于指示效果应按照 stop_periods指定的方式重新启动处理,使其适合消除音频中间的静音时段。默认值为0

stop_duration

指定在不再复制音频之前必须存在的静音持续时间。通过指定更长的持续时间,可以在音频中保留所需的静音。默认值为0

stop_threshold

这与开始阈值但用于修剪音频末尾的静音。可以以 dB(如果“dB”附加到指定值)或幅度比为单位指定。默认值为0

stop_silence

指定修剪后将保留的最大静音持续时间。默认值为 0,相当于修剪所有检测为静音的样本。

stop_mode

指定多通道音频开始后静音开始的检测模式。可以是任何一个全部。默认为全部。对于任何,来自任何通道的任何被检测为静音的样本都将在音频流开始后触发静音修剪的开始,使用有限。对于all,只有当每个通道的每个样本都被检测为静音时,才会在音频流开始后触发静音修剪的开始。

detection

设置如何检测静音。

avg

移动窗口中样本绝对值的平均值。

rms

移动窗口中样本绝对值的均方根。

peak

移动窗口中样本绝对值的最大值。

median

移动窗口中样本绝对值的中位数。

ptp

移动窗口中样本的最大峰值与最小峰值差异的绝对值。

dev

移动窗口中样本值的标准偏差。

默认值为rms

window

设置用于计算用于检测静音的样本数量的窗口大小的持续时间(以秒为单位)。使用0将有效禁用任何窗口,并且每个通道仅使用单个样本进行静音检测。在这种情况下,可能还需要设置开始沉默和/或 停止沉默到非零值也开始持续时间和/或 停止持续时间为非零值。默认值为0.02。允许的范围是从010

timestamp

设置每个音频帧输出时间戳的处理方式。

write

完整时间戳重写,仅保留第一个输出帧的开始时间。

copy

未丢弃的帧保留与输入音频帧相同的时间戳。

默认值为write

36.107.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
    

36.107.2 命令

该过滤器支持上述一些选项作为命令

36.108 sofalizer

SOFAlizer 使用头部相关传输函数 (HRTF) 在用户周围创建虚拟扬声器,以便通过耳机进行双耳聆听(支持最多 9 个通道的音频格式)。HRTF 存储在 SOFA 文件中(有关数据库,请参阅http://www.sofacoustics.org/ )。SOFAlizer 由奥地利科学院声学研究所 (ARI) 开发。

要启用此过滤器的编译,您需要使用 --enable-libmysofa.

该过滤器接受以下选项:

sofa

设置用于渲染的 SOFA 文件。

gain

设置应用于音频的增益。值以 dB 为单位。默认值为 0。

rotation

设置虚拟扬声器的旋转角度(以度为单位)。默认值为 0。

elevation

设置虚拟扬声器的高度(以度为单位)。默认值为 0。

radius

使用近场 HRTF 设置扬声器和听众之间的距离(以米为单位)。默认值为 1。

type

设置处理类型。可以是时间频率time在时域中处理音频,速度很慢。 freq正在频域中处理音频,速度很快。默认为频率

speakers

设置虚拟扬声器的自定义位置。此选项的语法为:<CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。每个虚拟扬声器都用简短的通道名称进行描述,后跟方位角和仰角(以度为单位)。每个虚拟扬声器描述均以“|”分隔。例如,要覆盖左前和右前声道位置,请使用:“speakers=FL 45 15|FR 345 15”。具有无法识别的通道名称的描述将被忽略。

lfegain

设置 LFE 通道的自定义增益。值以 dB 为单位。默认值为 0。

framesize

以样本数量设置自定义框架大小。默认值为 1024。允许的范围是从 1024 到 96000。仅在选项 ' 时使用类型' 设置为频率

normalize

导入 SOFA 文件时是否应将所有 IR 标准化。默认情况下启用。

interpolate

如果确切位置不匹配,是否应将最近的 IR 与相邻 IR 进行插值。默认情况下是禁用的。

minphase

加载 SOFA 文件时对所有 IR 进行 Minphase。默认情况下是禁用的。

anglestep

设置邻居搜索角度步长。仅当启用选项插值时才使用。

radstep

设置邻居搜索半径步长。仅当启用选项插值时才使用。

36.108.1 示例

  • 使用 ClubFritz6 沙发文件:
    sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
    
  • 使用 ClubFritz12 沙发锉刀,半径较大,旋转较小:
    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"
    

36.109 speechnorm

语音规范化器。

该滤波器根据阈值扩展或压缩音频样本的每个半周期(全部高于或全部低于零以及两个最近的过零之间的本地样本集),因此音频在以下选项控制的条件下达到目标峰值。

该过滤器接受以下选项:

peak, p

设置扩展目标峰值。这指定了标准化音频输入允许的最高绝对幅度电平。默认值为 0.95。允许的范围是从 0.0 到 1.0。

expansion, e

设置最大扩展系数。允许的范围是从 1.0 到 50.0。默认值为 2.0。该选项控制样本扩展的最大局部半周期。最大扩展将使得局部峰值达到目标峰值但永远不会超过它,并且新峰值与先前峰值之间的比率不超过该选项值。

compression, c

设置最大压缩系数。允许的范围是从 1.0 到 50.0。默认值为 2.0。此选项控制样本压缩的最大局部半周期。仅当以下情况时才使用此选项临界点选项设置为大于 0.0 的值,然后在这种情况下,当局部峰值低于或与设置的值相同时临界点属于该峰值半周期的所有样本都将按当前压缩因子进行压缩。

threshold, t

设置阈值。默认值为 0.0。允许的范围是从 0.0 到 1.0。该选项指定样本的哪些半周期将被压缩,哪些将被扩展。任何局部峰值低于或等于该选项值的半周期样本将按当前压缩因子进行压缩,否则,如果大于阈值,则将使用扩展因子进行扩展,使其达到峰值目标值但不会超过它。

raise, r

设置样本每半周期的扩展提升量。默认值为 0.001。允许的范围是从 0.0 到 1.0。这控制每个新半周期增加扩展因子的速度,直到达到扩张价值。将此选项设置得太高可能会导致失真。

fall, f

设置样本每半周期的压缩提升量。默认值为 0.001。允许的范围是从 0.0 到 1.0。这控制每个新半周期压缩因子提高的速度,直到达到压缩价值。

channels, h

指定要过滤的通道,默认情况下会过滤所有可用的通道。

invert, i

启用反向过滤,默认情况下禁用。这颠倒了解释临界点 选项。当启用样本的任何半周期时,其局部峰值低于或等于 临界点选项将被扩展,否则它将被压缩。

link, l

计算应用于每个滤波通道样本的增益时链接通道默认处于禁用状态。禁用时,每个滤波通道增益计算是独立的,否则,当启用此选项时,将使用每个滤波通道的所有可能增益的最小值。

rms, m

设置扩展目标 RMS 值。这指定了标准化音频输入允许的最高 RMS 电平。默认值为 0.0,因此禁用。允许的范围是从 0.0 到 1.0。

36.109.1 命令

该过滤器支持以上所有选项作为命令

36.109.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
    

36.110 stereotools

该滤波器有一些方便的实用程序来管理立体声信号,用于将 M/S 立体声录音转换为 L/R 信号,同时控制参数或传播主轨道的立体声图像。

该过滤器接受以下选项:

level_in

在过滤两个通道之前设置输入电平。默认值为 1。允许的范围为 0.015625 到 64。

level_out

设置两个通道滤波后的输出电平。默认值为 1。允许的范围为 0.015625 到 64。

balance_in

设置两个通道之间的输入平衡。默认值为 0。允许的范围为 -1 到 1。

balance_out

设置两个通道之间的输出平衡。默认值为 0。允许的范围为 -1 到 1。

softclip

启用软剪辑。导致模拟失真而不是严酷的数字 0dB 削波。默认禁用。

mutel

将左声道静音。默认禁用。

muter

将右通道静音。默认禁用。

phasel

改变左声道的相位。默认禁用。

phaser

改变右通道的相位。默认禁用。

mode

设置立体声模式。可用值为:

lr>lr

从左/右到左/右,这是默认值。

lr>ms

左/右到中/侧。

ms>lr

中/侧到左/右。

lr>ll

左/右到左/左。

lr>rr

左/右到右/右。

lr>l+r

左/右到左+右。

lr>rl

左/右到右/左。

ms>ll

中/侧到左/左。

ms>rr

中/侧到右/右。

ms>rl

中/侧到右/左。

lr>l-r

左/右到左 - 右。

slev

设置侧面信号的电平。默认值为 1。允许的范围为 0.015625 到 64。

sbal

设置侧面信号的平衡。默认值为 0。允许的范围为 -1 到 1。

mlev

设置中间信号的电平。默认值为 1。允许的范围为 0.015625 到 64。

mpan

设置中间信号声像。默认值为 0。允许的范围为 -1 到 1。

base

在单声道和反向通道之间设置立体声基础。默认值为 0。允许的范围为 -1 到 1。

delay

设置延迟(以毫秒为单位)从右通道向左延迟多少时间,反之亦然。默认值为 0。允许的范围为 -20 到 20。

sclevel

设置 S/C 电平。默认值为 1。允许的范围为 1 到 100。

phase

设置立体声相位(以度为单位)。默认值为 0。允许的范围为 0 到 360。

bmode_in, bmode_out

设置balance_in/balance_out选项的平衡模式。

可以是以下之一:

balance

经典平衡模式。一次衰减一个通道。增益提高到 1。

amplitude

与上面的经典模式类似,但增益提高到 2。

power

功率分布均匀,范围从-6dB 到+6dB。

36.110.1 命令

该过滤器支持以上所有选项作为命令

36.110.2 示例

  • 应用类似卡拉 OK 的效果:
    stereotools=mlev=0.015625
    
  • 将 M/S 信号转换为 L/R:
    "stereotools=mode=ms>lr"
    

36.111 stereowiden

该滤波器通过抑制两个通道共有的信号以及将左信号延迟到右信号(反之亦然)来增强立体声效果,从而扩大立体声效果。

该过滤器接受以下选项:

delay

左信号到右信号的延迟时间(以毫秒为单位),反之亦然。默认值为 20 毫秒。

feedback

延迟信号的增益量变为右,反之亦然。在右输出中提供左信号的延迟效果,反之亦然,从而提供加宽效果。默认值为 0.3。

crossfeed

左向右交叉馈送,相位反相。这有助于抑制单声道。如果该值为 1,它将取消两个通道共有的所有信号。默认值为 0.3。

drymix

设置原始通道的输入信号电平。默认值为 0.8。

36.111.1 命令

该过滤器支持除命令delay之外的所有上述选项。

36.112 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频段增益。

36.113 surround

应用音频环绕声上混滤波器。

该过滤器允许从音频流产生多通道输出。

该过滤器接受以下选项:

chl_out

设置输出通道布局。默认情况下,这是5.1

有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。

chl_in

设置输入通道布局。默认情况下,这是立体声

有关所需语法, 请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 通道布局部分。

level_in

设置输入音量级别。默认情况下,这是1

level_out

设置输出音量级别。默认情况下,这是1

lfe

如果输出通道布局有 LFE 通道输出,则启用它。默认情况下,此功能已启用。

lfe_low

设置 LFE 低截止频率。默认情况下,该频率为128 Hz。

lfe_high

设置 LFE 高截止频率。默认情况下,该频率为256 Hz。

lfe_mode

设置 LFE 模式,可以是addsub。默认是添加。在添加模式下,LFE 通道从输入音频创建并添加到输出。在模式下,LFE 通道是根据输入音频创建的并添加到输出,但所有非 LFE 输出通道也会从输出 LFE 通道中减去。

smooth

设置时间平滑度强度,用于在立体声变换时及时改变因子。允许的范围是从0.01.0当焦点选项值大于0.0时,可用于提高输出质量。默认值为0.0。只有在此范围内并且没有边缘的值才有效。

angle

设置立体环绕变换的角度,允许的范围是0360。默认值为90

focus

设置立体声环绕变换的焦点,允许的范围是-11。默认值为0

fc_in

设置前中置输入音量。默认情况下,这是1

fc_out

设置前中置输出音量。默认情况下,这是1

fl_in

设置左前输入音量。默认情况下,这是1

fl_out

设置左前输出音量。默认情况下,这是1

fr_in

设置右前输入音量。默认情况下,这是1

fr_out

设置右前输出音量。默认情况下,这是1

sl_in

设置左侧输入音量。默认情况下,这是1

sl_out

设置左侧输出音量。默认情况下,这是1

sr_in

设置右侧输入音量。默认情况下,这是1

sr_out

设置右侧输出音量。默认情况下,这是1

bl_in

调回左输入音量。默认情况下,这是1

bl_out

调回左输出音量。默认情况下,这是1

br_in

调回右输入音量。默认情况下,这是1

br_out

重新设置右输出音量。默认情况下,这是1

bc_in

调回中心输入音量。默认情况下,这是1

bc_out

调回中心输出音量。默认情况下,这是1

lfe_in

设置 LFE 输入音量。默认情况下,这是1

lfe_out

设置 LFE 输出音量。默认情况下,这是1

allx

设置所有通道的立体图像在 X 轴上的传播使用情况。允许的范围是从-115。默认情况下,该值为负-1,因此未使用。

ally

设置所有通道的立体图像在 Y 轴上的传播使用情况。允许的范围是从-115。默认情况下,该值为负-1,因此未使用。

fcx, flx, frx, blx, brx, slx, srx, bcx

设置每个通道的立体图像在 X 轴上的传播使用情况。允许的范围是从0.0615。默认情况下该值为0.5

fcy, fly, fry, bly, bry, sly, sry, bcy

设置每个通道的立体图像在 Y 轴上的传播使用情况。允许的范围是从0.0615。默认情况下该值为0.5

win_size

设置窗口大小。允许的范围是从102465536。默认大小为4096

win_func

设置窗函数。

它接受以下值:

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认为hann.

overlap

设置窗口重叠。如果设置为 1,将选择所选窗函数的推荐重叠。默认为0.5.

36.114 tiltshelf

使用两极搁架滤波器增强或降低音频的较低频率,并降低或增强音频的较高频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。

该过滤器接受以下选项:

gain, g

给出 0 Hz 时的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。

frequency, f

设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为3000赫兹。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

确定过滤器的架过渡有多陡。

poles, p

设置极数。默认值为 2。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.114.1 命令

该过滤器支持一些选项作为命令

36.115 treble, highshelf

使用两极倾斜滤波器来增强或降低音频的高音(较高)频率,其响应类似于标准高保真音响的音调控制。这也称为搁置均衡 (EQ)。

该过滤器接受以下选项:

gain, g

给出 ~22 kHz 和奈奎斯特频率中较低者的增益。其有用范围约为 -20(大幅削减)到 +20(大幅提升)。使用正增益时要小心削波。

frequency, f

设置滤波器的中心频率,因此可用于扩展或减小要提升或削减的频率范围。默认值为3000赫兹。

width_type, t

设置方法来指定滤波器的带宽。

h

赫兹

q

Q 因子

o

八度

s

k

千赫

width, w

确定过滤器的架过渡有多陡。

poles, p

设置极数。默认值为 2。

mix, m

在输出中使用多少过滤信号。默认值为 1。范围介于 0 和 1 之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用的通道。

normalize, n

归一化双二阶系数,默认情况下禁用。启用它会将直流幅度响应标准化为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕滤波器选择自动样本格式。

s16

始终使用带符号的 16 位。

s32

始终使用有符号的 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果该值设置为足够高的值(高于达到接近零值时截断的脉冲响应长度),滤波将变成线性相位,否则如果不够大,它将产生令人讨厌的伪影。

请注意,当设置为非零值时,滤波器延迟将恰好是这么多样本。

36.115.1 命令

该过滤器支持以下命令:

frequency, f

改变高音频率。该命令的语法是:“频率

width_type, t

更改高音宽度_类型。该命令的语法是:“ width_type

width, w

更改高音宽度。该命令的语法是:“宽度

gain, g

改变高音增益。该命令的语法是:“增益

mix, m

改变高音混合。该命令的语法是:“ mix

36.116 tremolo

正弦幅度调制。

该过滤器接受以下选项:

f

调制频率(以赫兹为单位)。分谐波范围内的调制频率(20 Hz 或更低)将产生颤音效果。通过指定高于 20 Hz 的调制频率,该滤波器还可用作环形调制器。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。

36.117 vibrato

正弦相位调制。

该过滤器接受以下选项:

f

调制频率(以赫兹为单位)。范围为 0.1 - 20000.0。默认值为 5.0 Hz。

d

以百分比表示的调制深度。范围为 0.0 - 1.0。默认值为 0.5。

36.118 virtualbass

应用音频虚拟低音滤波器。

该滤波器接受立体声输入并产生具有 LFE (2.1) 通道输出的立体声。新制作的 LFE 通道增强了最初从两个立体声通道获得的虚拟低音。该滤波器输出左前和右前通道,与立体声输入中可用的一样不变。

该过滤器接受以下选项:

cutoff

设置虚拟低音截止频率。默认值为 250 Hz。允许的范围为 100 至 500 Hz。

strength

设置虚拟低音强度。允许的范围是 0.5 到 3。默认值为 3。

36.119 volume

调节输入音频音量。

它接受以下参数:

volume

设置音频音量表达式。

输出值被剪裁为最大值。

输出音频音量由以下关系给出:

output_volume = volume * input_volume

音量的默认值为“1.0”。

precision

该参数代表数学精度。

它决定允许哪些输入样本格式,这会影响体积缩放的精度。

fixed

8位定点;这将输入样本格式限制为 U8、S16 和 S32。

float

32位浮点;这将输入样本格式限制为 FLT。(默认)

double

64位浮点;这将输入样本格式限制为 DBL。

replaygain

选择在输入帧中遇到 ReplayGain 辅助数据时的行为。

drop

删除 ReplayGain 侧数据,忽略其内容(默认)。

ignore

忽略 ReplayGain 辅助数据,但将其保留在帧中。

track

首选轨道增益(如果有)。

album

更喜欢专辑增益(如果有)。

replaygain_preamp

适用于所选重放增益的预放大增益(以 dB 为单位)。

replaygain_preamp的默认值为0.0。

replaygain_noclip

通过限制所应用的增益来防止削波。

replaygain_noclip的默认值为1。

eval

计算体积表达式时设置。

它接受以下值:

once

仅在过滤器初始化期间或当 '体积'命令已发送

frame

评估每个传入帧的表达式

默认值为 '一次'。

体积表达式可以包含以下参数。

n

帧编号(从零开始)

nb_channels

通道数

nb_consumed_samples

过滤器消耗的样本数

nb_samples

当前帧中的样本数

pos

文件中的原始帧位置;已弃用,请勿使用

pts

框架PTS

sample_rate

采样率

startpts

流开始时的 PTS

startt

流开始时间

t

帧时间

tb

时间戳时基

volume

最后设定的音量值

请注意,当评估被设定为 '一次' 只有 sample_ratetb变量可用,所有其他变量将计算为NAN。

36.119.1 命令

该过滤器支持以下命令:

volume

修改体积表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

36.119.2 示例

  • 将输入音量减半:
    volume=volume=0.5
    volume=volume=1/2
    volume=volume=-6.0206dB
    

    在上面的所有示例中,命名键为体积可以省略,例如:

    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
    

36.120 volumedetect

检测输入视频的音量。

过滤器没有参数。它仅支持 16 位有符号整数样本,因此输入将在需要时进行转换。当到达输入流末尾时,有关音量的统计信息将打印在日志中。

特别是,它将显示平均体积(均方根)、最大体积(基于每个样本)以及已注册体积值的直方图的开头(从最大值到样本的累积 1/1000) )。

所有音量均以相对于最大 PCM 值的分贝为单位。

36.120.1 示例

以下是输出的摘录:

[Parsed_volumedetect_0  0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0  0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0  0xa23120] histogram_4db: 6
[Parsed_volumedetect_0  0xa23120] histogram_5db: 62
[Parsed_volumedetect_0  0xa23120] histogram_6db: 286
[Parsed_volumedetect_0  0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0  0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0  0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0  0xa23120] histogram_10db: 8409

代表着:

  • 均方能量约为-27 dB,或10^-2.7。
  • 最大样本位于 -4 dB,或更准确地说在 -4 dB 和 -5 dB 之间。
  • -4 dB 处有 6 个样本,-5 dB 处有 62 个样本,-6 dB 处有 286 个样本,等等。

换句话说,将音量提高 +4 dB 不会导致任何削波,将音量提高 +5 dB 会导致 6 个样本发生削波,依此类推。

37 音频源

以下是当前可用音频源的描述。

37.1 abuffer

缓冲音频帧,并使它们可供过滤器链使用。

该源主要用于编程用途,特别是通过中定义的接口libavfilter/buffersrc.h

它接受以下参数:

time_base

将用于提交帧的时间戳的时基。它必须是浮点数或分子/分母形式。

sample_rate

传入音频缓冲区的采样率。

sample_fmt

传入音频缓冲区的样本格式。示例格式名称或其对应的整数表示形式,来自枚举 AVSampleFormatlibavutil/samplefmt.h

channel_layout

传入音频缓冲区的通道布局。来自channel_layout_map的通道布局名称 libavutil/channel_layout.c或其对应的 AV_CH_LAYOUT_* 宏中的整数表示libavutil/channel_layout.h

channels

传入音频缓冲区的通道数。如果同时指定了 channelschannel_layout ,那么它们必须保持一致。

37.1.1 示例

abuffer=sample_rate=44100:sample_fmt=s16p:channel_layout=stereo

将指示源接受 44100Hz 的平面 16 位签名立体声。由于名称为“s16p”的示例格式对应于数字 6,而“立体声”通道布局对应于值 0x3,因此这相当于:

abuffer=sample_rate=44100:sample_fmt=6:channel_layout=0x3

37.2 aevalsrc

生成由表达式指定的音频信号。

该源在输入中接受一个或多个表达式(每个通道一个),这些表达式被评估并用于生成相应的音频信号。

该来源接受以下选项:

exprs

为每个单独的通道设置以“|”分隔的表达式列表。如果 频道布局未指定选项,所选通道布局取决于提供的表达式的数量。否则,最后指定的表达式将应用于剩余的输出通道。

channel_layout, c

设置通道布局。指定布局中的通道数必须等于指定表达式的数量。

duration, d

设置源音频的最短持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终在完整帧的末尾被剪切。

如果未指定,或者表示的持续时间为负,则音频应该永远生成。

nb_samples, n

设置每个输出帧每个通道的样本数,默认为 1024。

sample_rate, s

指定采样率,默认为44100。

exprs中的每个表达式可以包含以下常量:

n

评估样本的编号,从0开始

t

评估样本的时间,以秒为单位,从0开始

s

采样率

37.2.1 示例

  • 产生静音:
    aevalsrc=0
    
  • 生成频率为 440 Hz 的 sin 信号,将采样率设置为 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)"
    

37.3 afdelaysrc

生成分数延迟 FIR 系数。

生成的流可以与afir滤波器一起使用来过滤音频信号。

该过滤器接受以下选项:

delay, d

设置分数延迟。默认值为 0。

sample_rate, r

设置采样率,默认为44100。

nb_samples, n

设置每帧的样本数。默认值为 1024。

taps, t

设置输出音频流中滤波器系数的数量。默认值为 0。

channel_layout, c

指定通道布局,可以是表示通道布局的字符串。Channel_layout的默认值为“stereo”。

37.4 afireqsrc

生成 FIR 均衡器系数。

生成的流可以与afir滤波器一起使用来过滤音频信号。

该过滤器接受以下选项:

preset, p

设置均衡器预设。默认预设为flat.

可用的预设有:

custom
flat
acoustic
bass
beats
classic
clear
deep bass
dubstep
electronic
hard-style
hip-hop
jazz
metal
movie
pop
r&b
rock
vocal booster
gains, g

为每个频段设置自定义增益。仅当预设选项设置为 时才使用custom。增益由空格分隔,每个增益以 dBFS 为单位设置。默认为0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.

bands, b

从设置自定义均衡器增益的位置设置自定义频段。这必须严格按递增顺序排列。仅当预设选项设置为 时才使用custom。频段由空格分隔,每个频段代表频率(以 Hz 为单位)。默认为25 40 63 100 160 250 400 630 1000 1600 2500 4000 6300 10000 16000 24000.

taps, t

设置输出音频流中的滤波器系数数量。默认值为4096

sample_rate, r

设置输出音频流的采样率,默认为44100

nb_samples, n

设置输出音频流中每帧的样本数。默认为1024.

interp, i

设置 FIR 均衡器系数的插值方法。可以是linearcubic.

phase, h

设置 FIR 滤波器的相位类型。可以是linearmin: 最小相位。默认为最小相位滤波器。

37.5 afirsrc

使用频率采样方法生成 FIR 系数。

生成的流可以与afir滤波器一起使用来过滤音频信号。

该过滤器接受以下选项:

taps, t

设置输出音频流中的滤波器系数数量。默认值为 1025。

frequency, f

从设置幅度和相位的位置设置频率点。必须按非降序排列,第一个元素必须为 0,最后一个元素必须为 1。元素之间用空格分隔。

magnitude, m

为每个频率点设置幅度值频率。值的数量必须与频点的数量相同。值由空格分隔。

phase, p

为每个频率点设置相位值频率。值的数量必须与频点的数量相同。值由空格分隔。

sample_rate, r

设置采样率,默认为44100。

nb_samples, n

设置每帧的样本数。默认值为 1024。

win_func, w

设置窗函数。默认是黑人。

37.6 anullsrc

空音频源,返回未处理的音频帧。它主要用作模板并用于分析/调试工具,或者作为忽略输入数据的过滤器的源(例如 sox 合成器过滤器)。

该来源接受以下选项:

channel_layout, cl

指定通道布局,可以是表示通道布局的整数或字符串。Channel_layout的默认值为 “stereo”。

检查channel_layout_map定义 libavutil/channel_layout.c用于字符串和通道布局值之间的映射。

sample_rate, r

指定采样率,默认为 44100。

nb_samples, n

设置每个请求帧的样本数。

duration, d

设置源音频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

如果未指定,或者表示的持续时间为负,则音频应该永远生成。

37.6.1 示例

  • 将采样率设置为 48000 Hz,并将通道布局设置为 AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更明显的语法执行相同的操作:
    anullsrc=r=48000:cl=mono
    

所有参数都需要明确定义。

37.7 flite

使用 libflite 库合成语音。

要启用此过滤器的编译,您需要使用 --enable-libflite.

请注意,2.0 之前的 flite 库版本不是线程安全的。

该过滤器接受以下选项:

list_voices

如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。

nb_samples, n

设置每帧的最大样本数。默认值为 512。

textfile

设置包含要讲话的文本的文件名。

text

设置要说话的文本。

voice, v

设置用于语音合成的声音。默认值为 kal。另请参阅list_voices选项。

37.7.1 示例

  • 从文件中读取语音.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
    
  • 制作播放flite使用设备说出指定的文本lavfi
    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
    

有关 libflite 的更多信息,请查看: http://www.festvox.org/flite/

37.8 anoisesrc

生成噪声音频信号。

该过滤器接受以下选项:

sample_rate, r

指定采样率。默认值为 48000 Hz。

amplitude, a

指定生成的音频流的幅度 (0.0 - 1.0)。默认值为 1.0。

duration, d

指定生成的音频流的持续时间。不指定此选项会导致噪声无限长度。

color, colour, c

指定噪声的颜色。可用的噪声颜色有白色、粉色、棕色、蓝色、紫色和天鹅绒。默认颜色为白色。

seed, s

指定用于为 PRNG 提供种子的值。

nb_samples, n

设置每个输出帧的样本数,默认为 1024。

density

设置丝绒噪声生成器的密度 (0.0 - 1.0),默认值为 0.05。

37.8.1 示例

  • 生成 60 秒的粉红噪声,采样率为 44.1 kHz,幅度为 0.5:
    anoisesrc=d=60:c=pink:r=44100:a=0.5
    

37.9 hilbert

生成奇抽头希尔伯特变换 FIR 系数。

生成的流可与afir滤波器一起使用,将信号相移 90 度。

这用于许多矩阵编码方案和分析信号生成。该过程通常写为乘以虚数单位 i(或 j)。

该过滤器接受以下选项:

sample_rate, s

设置采样率,默认为44100。

taps, t

设置FIR滤波器的长度,默认为22051。

nb_samples, n

设置每帧的样本数。

win_func, w

设置生成 FIR 系数时要使用的窗函数。

37.10 sinc

生成 sinc 凯撒窗低通、高通、带通或带阻 FIR 系数。

生成的流可以与afir滤波器一起使用来过滤音频信号。

该过滤器接受以下选项:

sample_rate, r

设置采样率,默认为44100。

nb_samples, n

设置每帧的样本数。默认值为 1024。

hp

设置高通频率。默认值为 0。

lp

设置低通频率。默认值为 0。如果高通频率低于低通频率且低通频率高于 0,则滤波器将创建带通滤波器系数,否则创建带阻滤波器系数。

phase

设置滤波器相位响应。默认值为 50。允许的范围为 0 到 100。

beta

设置 Kaiser 窗口测试版。

att

设置阻带衰减。默认值为 120dB,允许范围为 40 至 180dB。

round

启用舍入,默认情况下禁用。

hptaps

设置高通滤波器的抽头数。

lptaps

设置低通滤波器的抽头数。

37.11 sine

生成由幅度为 1/8 的正弦波组成的音频信号。

音频信号是位精确的。

该过滤器接受以下选项:

frequency, f

设置载波频率。默认值为 440 赫兹。

beep_factor, b

每秒启用一次周期性蜂鸣声,频率为beep_factor乘以载波频率。默认值为 0,表示禁用蜂鸣声。

sample_rate, r

指定采样率,默认为 44100。

duration, d

指定生成的音频流的持续时间。

samples_per_frame

设置每个输出帧的样本数。

该表达式可以包含以下常量:

n

输出音频帧的(连续)编号,从 0 开始。

pts

输出音频帧的 PTS(演示时间戳),以TB为单位表示。

t

输出音频帧的 PTS,以秒为单位表示。

TB

输出音频帧的时基。

默认为1024.

37.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
    
  • 生成遵循 NTSC 模式的 1 kHz 正弦波1602,1601,1602,1601,1602
    sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
    

38 个音频接收器

以下是当前可用的音频接收器的描述。

38.1 abuffersink

缓冲音频帧,并使它们可用于过滤器链的末端。

该接收器主要用于编程使用,特别是通过中定义的接口libavfilter/buffersink.h 或选项系统。

它接受指向 AVABufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给avfilter_init_filter初始化。

38.2 anullsink

空音频接收器;对输入音频绝对不做任何事情。它主要用作模板并用于分析/调试工具。

39 视频滤镜

配置 FFmpeg 构建时,您可以使用 禁用任何现有过滤器--disable-filters。配置输出将显示您的构建中包含的视频过滤器。

以下是当前可用的视频过滤器的描述。

39.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,则在添加新区域之前删除框架上标记的任何现有感兴趣区域。

39.1.1 示例

  • 将框架的中心四分之一标记为有趣。
    addroi=iw/4:ih/4:iw/2:ih/2:-1/10
    
  • 将帧左边缘的 100 像素宽区域标记为非常无趣(以比帧其余部分低得多的质量进行编码)。
    addroi=0:0:100:ih:+1/5
    

39.2 alphaextract

从输入中提取 alpha 分量作为灰度视频。这对于alphamerge过滤器特别有用。

39.3 alphamerge

使用第二个输入的灰度值添加或替换主输入的 Alpha 分量。它旨在与alphaextract一起使用, 以允许以不支持 alpha 通道的格式传输或存储具有 alpha 的帧序列。

例如,要从普通 YUV 编码视频和使用alphaextract创建的单独视频重建完整帧,您可以使用:

movie=in_alpha.mkv [alpha]; [in][alpha] alphamerge [out]

39.4 amplify

放大当前像素与相邻帧中相同像素位置的像素之间的差异。

该过滤器接受以下选项:

radius

设置框架半径。默认值为 2。允许的范围为 1 到 63。例如半径 3 将指示过滤器计算 7 帧的平均值。

factor

设置因子以放大差异。默认值为 2。允许的范围为 0 到 65535。

threshold

设置差异放大的阈值。任何大于或等于该值的差异都不会改变源像素。默认值为 10。允许的范围为 0 到 65535。

tolerance

设置差异放大的容差。任何低于该值的差异都不会改变源像素。默认值为 0。允许的范围为 0 到 65535。

low

设置更改源像素的下限。默认值为 65535。允许的范围为 0 到 65535。此选项控制将减少源像素值的最大可能值。

high

设置更改源像素的上限。默认值为 65535。允许的范围为 0 到 65535。此选项控制将增加源像素值的最大可能值。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

39.4.1 命令

该过滤器支持以下与同名选项相对应的 命令:

factor
threshold
tolerance
low
high
planes

39.5 ass

与字幕过滤器相同,只是它不需要 libavcodec 和 libavformat 才能工作。另一方面,它仅限于 ASS(高级变电站 Alpha)字幕文件。

除了字幕过滤器中的常见选项之外,此过滤器还接受以下选项:

shaping

设置整形引擎

可用值为:

auto

默认的 libass 整形引擎,这是最好的可用引擎。

simple

快速、与字体无关的整形器,只能进行替换

complex

使用 OpenType 进行替换和定位的较慢整形器

默认为auto.

39.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

为第 1 平面、第 2 平面或第 3 平面设置 sigma。默认值为 32767。有效范围为 0 到 32767。此选项控制由大小定义的半径内每个像素的权重。默认值意味着每个像素具有相同的权重。将此选项设置为 0 可有效禁用过滤。

39.6.1 命令

此过滤器支持与选项相同的命令(除了 option )s。该命令接受与相应选项相同的语法。

39.7 avgblur

应用平均模糊滤镜。

该过滤器接受以下选项:

sizeX

设置水平半径大小。

planes

设置要过滤的平面。默认情况下,所有平面都会被过滤。

sizeY

设置垂直半径大小,如果为零,则与 相同sizeX。默认为0.

39.7.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.8 backgroundkey

将静态背景变成透明背景。

过滤器接受以下选项:

threshold

场景变化检测的阈值。

similarity

与背景的相似度百分比。

blend

设置不相似像素的混合量。

39.8.1 命令

该过滤器支持以上所有选项作为命令

39.9 bbox

计算输入帧亮度平面中非黑色像素的边界框。

此过滤器计算包含亮度值大于最小允许值的所有像素的边界框。描述边界框的参数打印在过滤器日志上。

过滤器接受以下选项:

min_val

设置最小亮度值。默认为16.

39.9.1 命令

该过滤器支持以上所有选项作为命令

39.10 bilateral

应用双边滤波器,空间平滑,同时保留边缘。

该过滤器接受以下选项:

sigmaS

设置高斯函数的 sigma 来计算空间权重。允许的范围是 0 到 512。默认值为 0.1。

sigmaR

设置高斯函数的 sigma 来计算范围权重。允许的范围是 0 到 1。默认值为 0.1。

planes

设置要过滤的平面。默认仅是第一个。

39.10.1 命令

该过滤器支持以上所有选项作为命令

39.11 bilateral_cuda

CUDA 加速双边滤波器,一种边缘保留滤波器。由于使用了 GPU 加速,该过滤器在数学上是准确的。为了获得最佳输出质量,请使用一对一色度子采样,即 yuv444p 格式。

该过滤器接受以下选项:

sigmaS

设置高斯函数的sigma来计算空间权重,也称为sigma空间。允许的范围是 0.1 到 512。默认值为 0.1。

sigmaR

设置高斯函数的sigma来计算颜色范围权重,也称为sigma颜色。允许的范围是 0.1 到 512。默认值为 0.1。

window_size

设置双边函数的窗口大小以确定要循环的邻居数量。如果输入的数字是偶数,则自动添加 1。允许的范围是 1 到 255。默认值为 1。

39.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
    

39.12 bitplanenoise

显示并测量位平面噪声。

该过滤器接受以下选项:

bitplane

设置要分析的平面。默认为1.

filter

从上面的集合中过滤掉噪声像素bitplane。默认为禁用。

39.13 blackdetect

检测(几乎)全黑的视频间隔。对于检测章节过渡、广告或无效录音非常有用。

过滤器将其检测分析输出到日志和帧元数据。如果找到至少具有指定的最小持续时间的黑色段,则会将包含开始和结束时间戳以及持续时间的行打印到级别为日志的日志中info。此外,debug每帧打印一条带有级别的日志行,显示为该帧检测到的黑色量。

该过滤器还将元数据附加到带有 key 的黑色片段的第一帧lavfi.black_start以及带有 key 的黑色片段结束后的第一帧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

39.14 blackframe

检测(几乎)全黑的帧。对于检测章节过渡或广告很有用。输出行包含检测到的帧的帧号、黑度百分比、文件中的位置(如果已知或 -1)以及时间戳(以秒为单位)。

为了显示输出行,您需要将日志级别至少设置为 AV_LOG_INFO 值。

该过滤器导出帧元数据lavfi.blackframe.pblack。该值表示图片中低于阈值的像素的百分比。

它接受以下参数:

amount

必须低于阈值的像素百分比;它默认为 98.

threshold, thresh

阈值,低于该阈值的像素值被视为黑色;它默认为 32.

39.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过滤器还支持帧同步选项。

39.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
    

39.15.2 命令

该过滤器支持与选项相同的命令

39.16 blockdetect

在不改变输入帧的情况下确定帧的块度。

基于 Remco Muijs 和 Ihor Kirenko:“用于自适应视频处理的无参考块伪影测量。” 2005年第13届欧洲信号处理会议。

该过滤器接受以下选项:

period_min
period_max

设置用于确定像素网格(周期)的最小值和最大值。默认值为 [3,24]。

planes

设置要过滤的平面。默认仅是第一个。

39.16.1 示例

  • 确定第一个平面的块效应并搜索 [8,32] 内的周期:
    blockdetect=period_min=8:period_max=32:planes=1
    

39.17 blurdetect

在不改变输入帧的情况下确定帧的模糊度。

基于 Marziliano、Pina 等人。“无参考感知模糊度量。” 允许基于块的缩写。

该过滤器接受以下选项:

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后将其通过8-连通性与低阈值选择的“弱”边缘像素连接。

阈值和阈值必须在 [0,1] 范围内选择,并且low应小于或等于high

的默认值为,20/255高的默认 值为50/255

radius

定义在边缘像素周围搜索局部最大值的半径。

block_pct

仅确定最重要块的模糊度(以百分比给出)。

block_width

确定宽度为block_width的块的模糊度。如果设置为小于 1 的任何值,则不使用任何块,并且无论block_height是多少,整个图像都会被处理为一幅图像。

block_height

确定高度为block_height的块的模糊度。如果设置为小于 1 的任何值,则不使用任何块,并且无论block_width是多少,整个图像都会被处理为一个图像。

planes

设置要过滤的平面。默认仅是第一个。

39.17.1 示例

  • 确定 80% 最重要的 32x32 块的模糊:
    blurdetect=block_width=32:block_height=32:block_pct=80
    

39.18 bm3d

使用块匹配 3D 算法对帧进行去噪。

该过滤器接受以下选项。

sigma

设置去噪强度。默认值为 1。允许的范围为 0 到 999.9。去噪算法对sigma非常敏感,所以根据来源进行调整。

block

设置局部补丁大小。这将设置二维尺寸。

bstep

设置处理块的滑动步长。默认值为 4。允许的范围为 1 到 64。较小的值允许处理更多参考块,但速度较慢。

group

设置第三维相似块的最大数量。默认值为 1。设置为 1 时,不进行块匹配。较大的值允许单个组中包含更多块。允许的范围是 1 到 256。

range

设置搜索块匹配的半径。默认值为 9。允许的范围为 1 到 INT32_MAX。

mstep

设置两个搜索位置之间的步长以进行块匹配。默认值为 1。允许的范围为 1 到 64。越小速度越慢。

thmse

设置块匹配的均方误差阈值。有效范围是 0 到 INT32_MAX。

hdthr

设置 3D 变换域中硬阈值的阈值参数。值越大,频域中的硬阈值滤波就越强。

estim

设置过滤估计模式。可以是basicfinal. 默认为basic.

ref

如果启用,过滤器将使用第二个流进行块匹配。默认情况下,估计basic选项的值为禁用,如果估计选项的值为 ,则始终启用。 final

planes

设置要过滤的平面。默认值是除 alpha 之外的所有可用值。

39.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
    

39.19 boxblur

对输入视频应用 boxblur 算法。

它接受以下参数:

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

下面是接受的选项的描述。

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

设置用于模糊相应输入平面的框半径表达式(以像素为单位)。

半径值必须是非负数,并且不得大于min(w,h)/2亮度和 alpha 平面以及min(cw,ch)/2色度平面的表达式的值。

默认值亮度半径是“2”。如果没有指定, 色度半径阿尔法半径默认为设置的相应值亮度半径

表达式可以包含以下常量:

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像的宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为2,vsub为1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定将 boxblur 滤镜应用到相应平面的次数。

默认值亮度功率是2。如果没有指定, 色度功率阿尔法功率默认为设置的相应值亮度功率

值为 0 将禁用该效果。

39.19.1 示例

  • 应用 boxblur 滤镜,并将亮度、色度和 alpha 半径设置为 2:
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • 将亮度半径设置为 2,将 alpha 和色度半径设置为 0:
    boxblur=2:1:cr=0:ar=0
    
  • 将亮度和色度半径设置为视频尺寸的一小部分:
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

39.20 bwdif

对输入视频进行去隔行处理(“bwdif”代表“Bob Weaver 去隔行过滤器”)。

基于 yadif 的运动自适应去隔行,使用 w3fdif 和三次插值算法。它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

0, send_frame

每帧输出一帧。

1, send_field

每个字段输出一帧。

默认值为send_field

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

0, tff

假设顶部字段是第一个。

1, bff

假设底部字段是第一个。

-1, auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

39.21 bwdif_cuda

使用bwdif算法对输入视频进行去隔行,但在 CUDA 中实现,以便它可以作为带有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分。

它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

0, send_frame

每帧输出一帧。

1, send_field

每个字段输出一帧。

默认值为send_field

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

0, tff

假设顶部字段是第一个。

1, bff

假设底部字段是第一个。

-1, auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

39.22 ccrepack

重新打包 CEA-708 隐藏式字幕辅助数据

此过滤器修复了与上游格式错误的 CEA-708 有效负载相关的商业编码器中出现的各种问题,特别是元组数量不正确(目标 FPS 的 cc_count 错误)以及元组排序不正确(即 CEA-608 元组不在第一个条目中)在有效负载中)。

39.23 cas

将对比度自适应锐化滤镜应用于视频流。

该过滤器接受以下选项:

strength

设置锐化强度。默认值为 0。

planes

设置要过滤的平面。默认值是过滤除 alpha 平面之外的所有平面。

39.23.1 命令

该过滤器支持与选项相同的命令

39.24 chromahold

删除除特定颜色之外的所有颜色的所有颜色信息。

该过滤器接受以下选项:

color

不会被中性色度取代的颜色。

similarity

与上述颜色的相似度百分比。0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。

blend

混合百分比。0.0 使像素要么完全灰色,要么根本不灰色。值越高,颜色保留得越多。

yuv

表示传递的颜色已经是 YUV 而不是 RGB。

启用此功能后,“绿色”或“红色”等文字颜色不再有意义。这可用于将精确的 YUV 值作为十六进制数传递。

39.24.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.25 chromakey

YUV 色彩空间颜色/色度键控。

该过滤器接受以下选项:

color

将替换为透明度的颜色。

similarity

与主色的相似度百分比。

0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。

blend

混合百分比。

0.0 使像素完全透明或根本不透明。

值越高,像素就越透明,透明度越高,像素颜色与关键颜色越相似。

yuv

表示传递的颜色已经是 YUV 而不是 RGB。

启用此功能后,“绿色”或“红色”等文字颜色不再有意义。这可用于将精确的 YUV 值作为十六进制数传递。

39.25.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.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
    

39.26 chromakey_cuda

CUDA 加速 YUV 色彩空间颜色/色度键控。

该过滤器的工作原理与普通色键过滤器类似,但在 CUDA 帧上运行。有关更多详细信息和参数,请参阅chromakey

39.26.1 示例

  • 使输入视频中的所有绿色像素透明,并将其用作另一个视频的叠加层:
    ./ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -i input_green.mp4  \
        -hwaccel cuda -hwaccel_output_format cuda -i base_video.mp4 \
        -init_hw_device cuda \
        -filter_complex \
        " \
            [0:v]chromakey_cuda=0x25302D:0.1:0.12:1[overlay_video]; \
            [1:v]scale_cuda=format=yuv420p[base]; \
            [base][overlay_video]overlay_cuda" \
        -an -sn -c:v h264_nvenc -cq 20 output.mp4
    
  • 处理两个软件源,显式上传帧:
    ./ffmpeg -init_hw_device cuda=cuda -filter_hw_device cuda \
        -f lavfi -i color=size=800x600:color=white,format=yuv420p \
        -f lavfi -i yuvtestsrc=size=200x200,format=yuv420p \
        -filter_complex \
        " \
            [0]hwupload[under]; \
            [1]hwupload,chromakey_cuda=green:0.1:0.12[over]; \
            [under][over]overlay_cuda" \
        -c:v hevc_nvenc -cq 18 -preset slow output.mp4
    

39.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

差值的平方。

默认距离类型为曼哈顿。

39.27.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

39.28 chromashift

水平和/或垂直移动色度像素。

该过滤器接受以下选项:

cbh

设置水平移动色度蓝色的量。

cbv

设置垂直移动色度蓝色的量。

crh

设置水平移动色度红色的量。

crv

设置垂直移动色度红色的量。

edge

设置边缘模式,可以是smear、 default 或warp

39.28.1 命令

该过滤器支持以上所有选项作为命令

39.29 ciescope

显示上面覆盖有像素的 CIE 颜色图。

该过滤器接受以下选项:

system

设置颜色系统。

ntsc, 470m
ebu, 470bg
smpte
240m
apple
widergb
cie1931
rec709, hdtv
uhdtv, rec2020
dcip3
cie

设置CIE系统。

xyy
ucs
luv
gamuts

设置要绘制的色域。

请参阅system选项了解可用值。

size, s

设置ciescope大小,默认设置为512。

intensity, i

设置用于将输入像素值映射到 CIE 图的强度。

contrast

设置用于绘制超出活动颜色系统色域的舌头颜色的对比度。

corrgamma

示波器上显示正确的伽玛值,默认启用。

showwhite

在 CIE 图上显示白点,默认禁用。

gamma

设置输入伽玛。仅与 XYZ 输入色彩空间一起使用。

fill

使用 CIE 颜色填充。默认情况下启用。

39.30 codecview

可视化某些编解码器导出的信息。

某些编解码器可以使用辅助数据或其他方式通过帧导出信息。例如,一些基于 MPEG 的编解码器通过 编解码器中的export_mvs标志导出运动向量标志2选项。

过滤器接受以下选项:

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 帧)

39.30.1 示例

  • 使用以下方法可视化所有帧的前向预测 MV ffplay
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 使用以下方法可视化 P 帧和 B 帧的多方向 MV ffplay
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

39.31 colorbalance

修改输入帧的原色(红色、绿色和蓝色)的强度。

该滤镜允许在阴影、中间色调或高光区域中调整输入帧,以实现红青色、绿洋红色或蓝黄色平衡。

正调整值将平衡移向原色,负值将平衡移向补色。

该过滤器接受以下选项:

rs
gs
bs

调整红色、绿色和蓝色阴影(最暗的像素)。

rm
gm
bm

调整红色、绿色和蓝色中间色调(中等像素)。

rh
gh
bh

调整红色、绿色和蓝色高光(最亮的像素)。

允许的选项范围是[-1.0, 1.0]. 默认值是0.

pl

更改色彩平衡时保持亮度。默认为禁用。

39.31.1 示例

  • 向阴影添加红色偏色:
    colorbalance=rs=.3
    

39.31.2 命令

该过滤器支持以上所有选项作为命令

39.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

rc设置每个, gm,选项值的权重by。默认值为 0.0。允许的范围是从 0.0 到 1.0。如果所有权重均为 0.0,则禁用过滤。

pl

设置保留亮度的量。默认值为 0.0。允许的范围是从 0.0 到 1.0。

39.32.1 命令

该过滤器支持以上所有选项作为命令

39.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

39.33.1 命令

该过滤器支持以上所有选项作为命令

39.34 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此滤镜通过添加与相同像素的其他通道关联的值来修改颜色通道。例如,如果要修改的值为红色,则输出值为:

red=red*rr + blue*rb + green*rg + alpha*ra

该过滤器接受以下选项:

rr
rg
rb
ra

调整输入红色、绿色、蓝色和 Alpha 通道对输出红色通道的贡献。默认值适用1rr0rg rbra

gr
gg
gb
ga

调整输入红色、绿色、蓝色和 Alpha 通道对输出绿色通道的贡献。默认值适用1gggrgbga0

br
bg
bb
ba

调整输入红色、绿色、蓝色和 Alpha 通道对输出蓝色通道的贡献。默认1值为bb0br 、bgba_

ar
ag
ab
aa

调整输入红色、绿色、蓝色和 Alpha 通道对输出 Alpha 通道的贡献。默认1值为aa0ar 、agab_

允许的选项范围是[-2.0, 2.0].

pc

设置保留颜色模式。可接受的值为:

none

禁用颜色保留,这是默认设置。

lum

保持亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的总和值。

nrm

保留 RGB 三元组的标准化值。

pwr

保留 RGB 三元组的功率值。

pa

设置更改颜色时的保留颜色量。允许的范围是从[0.0, 1.0]. 默认为0.0,因此被禁用。

39.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
    

39.34.2 命令

该过滤器支持以上所有选项作为命令

39.35 colorize

在视频流上叠加纯色。

该过滤器接受以下选项:

hue

设置色调。允许的范围是 0 到 360。默认值为 0。

saturation

设置颜色饱和度。允许的范围是 0 到 1。默认值为 0.5。

lightness

设置颜色亮度。允许的范围是 0 到 1。默认值为 0.5。

mix

设置源亮度的混合。默认设置为 1.0。允许的范围是从 0.0 到 1.0。

39.35.1 命令

该过滤器支持以上所有选项作为命令

39.36 colorkey

RGB 色彩空间颜色键控。此过滤器通过将关键颜色相似半径内的每个像素的 alpha 分量设置为 0,对 8 位 RGB 格式帧进行操作。相似半径之外的像素的 alpha 值取决于混合选项的值。

该过滤器接受以下选项:

color

设置将 alpha 设置为 0(完全透明度)的颜色。请参阅ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认为black.

similarity

设置从关键颜色开始的半径,在此范围内其他颜色也具有完全透明度。计算出的距离与 3D 空间中关键颜色的 RGB 值和像素颜色之间的单位分数距离相关。范围为 0.01 至 1.0。0.01 匹配精确关键颜色周围很小的半径内,而 1.0 匹配所有内容。默认为0.01.

blend

设置如何计算位于相似性半径之外的像素的 Alpha 值。0.0 使像素完全透明或完全不透明。值越高,像素就越透明,像素颜色与关键颜色越相似,透明度就越高。范围是 0.0 到 1.0。默认为0.0.

39.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
    

39.36.2 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.37 colorhold

删除除特定一种颜色之外的所有 RGB 颜色的所有颜色信息。

该过滤器接受以下选项:

color

不会被中性灰色取代的颜色。

similarity

与上述颜色的相似度百分比。0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。

blend

混合百分比。0.0 使像素完全变灰。值越高,颜色保留得越多。

39.37.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.38 colorlevels

使用级别调整视频输入帧。

该过滤器接受以下选项:

rimin
gimin
bimin
aimin

调整红、绿、蓝和 alpha 输入黑点。允许的选项范围是[-1.0, 1.0]. 默认值是0.

rimax
gimax
bimax
aimax

调整红、绿、蓝和 alpha 输入白点。允许的选项范围是[-1.0, 1.0]. 默认值是1.

输入级别用于使高光变亮(亮色调)、使阴影变暗(暗色调)、改变亮色调和暗色调的平衡。

romin
gomin
bomin
aomin

调整红、绿、蓝和 Alpha 输出黑点。允许的选项范围是[0, 1.0]. 默认值是0.

romax
gomax
bomax
aomax

调整红、绿、蓝和 alpha 输出白点。允许的选项范围是[0, 1.0]. 默认值是1.

输出电平允许手动选择受限的输出电平范围。

preserve

设置保留颜色模式。可接受的值为:

none

禁用颜色保留,这是默认设置。

lum

保持亮度。

max

保留 RGB 三元组的最大值。

avg

保留 RGB 三元组的平均值。

sum

保留 RGB 三元组的总和值。

nrm

保留 RGB 三元组的标准化值。

pwr

保留 RGB 三元组的功率值。

39.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
    

39.38.2 命令

该过滤器支持以上所有选项作为命令

39.39 colormap

将自定义颜色贴图应用于视频流。

该过滤器需要三个输入视频流。第一个流是要被过滤掉的视频流。第二和第三视频流指定源颜色到目标颜色映射的色块。

该过滤器接受以下选项:

patch_size

设置源和目标视频流补丁大小(以像素为单位)。

nb_patches

设置源视频流和目标视频流中使用的补丁的最大数量。默认值是附加视频流中可用的补丁数。允许的最大补丁数是64

type

设置用于目标颜色的调整。可以是relativeabsolute. 默认值为absolute.

kernel

设置用于测量映射颜色之间的颜色差异的内核。

可接受的值为:

euclidean
weuclidean

默认为euclidean.

39.40 colormatrix

转换颜色矩阵。

该过滤器接受以下选项:

src
dst

指定源和目标颜色矩阵。必须指定这两个值。

可接受的值为:

bt709

BT.709

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

39.41 colorspace

转换色彩空间、传输特性或原色。输入视频需要具有均匀的尺寸。

该过滤器接受以下选项:

all

一次指定所有颜色属性。

可接受的值为:

bt470m

BT.470M

bt470bg

BT.470BG

bt601-6-525

BT.601-6525

bt601-6-625

BT.601-6625

bt709

BT.709

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

space

指定输出色彩空间。

可接受的值为:

bt709

BT.709

fcc

美国联邦通信委员会

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

ycgco

钇钴钴

bt2020ncl

BT.2020 非恒定亮度

trc

指定输出传输特性。

可接受的值为:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG

gamma22

恒定伽玛值为 2.2

gamma28

恒定伽玛值为 2.8

smpte170m

SMPTE-170M、BT.601-6 625 或 BT.601-6 525

smpte240m

SMPTE-240M

srgb

彩色RGB

iec61966-2-1

IEC61966-2-1

iec61966-2-4

IEC61966-2-4

xvycc

xvycc

bt2020-10

BT.2020 适用于 10 位内容

bt2020-12

12 位内容的 BT.2020

primaries

指定输出原色。

可接受的值为:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

film

电影

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22 荧光粉

range

指定输出颜色范围。

可接受的值为:

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(全)系列

jpeg

JPEG(全)范围

format

指定输出颜色格式。

可接受的值为:

yuv420p

YUV 4:2:0 平面 8 位

yuv420p10

YUV 4:2:0 平面 10 位

yuv420p12

YUV 4:2:0 平面 12 位

yuv422p

YUV 4:2:2 平面 8 位

yuv422p10

YUV 4:2:2 平面 10 位

yuv422p12

YUV 4:2:2 平面 12 位

yuv444p

YUV 4:4:4 平面 8 位

yuv444p10

YUV 4:4:4 平面 10 位

yuv444p12

YUV 4:4:4 平面 12 位

fast

进行快速转换,跳过伽玛/主校正。这将显着减少 CPU 占用,但在数学上是不正确的。要获得与颜色矩阵过滤器生成的输出兼容的输出,请使用 fast=1。

dither

指定抖动模式。

可接受的值为:

none

无抖动

fsb

弗洛伊德-斯坦伯格抖动

wpadapt

白点适应模式。

可接受的值为:

bradford

布拉德福德白点适应

vonkries

von Kries 白点适应

identity

身份白点适应(即无白点适应)

iall

一次覆盖所有输入属性。与所有人相同的接受值。

ispace

覆盖输入色彩空间。与space相同的可接受值。

iprimaries

覆盖输入原色。与初选相同的可接受值。

itrc

覆盖输入传输特性。与trc相同的接受值。

irange

覆盖输入颜色范围。与range相同的接受值。

该过滤器将传输特性、色彩空间和原色转换为指定的用户值。如果未指定,输出值将设置为基于“all”属性的默认值。如果也未指定该属性,过滤器将记录错误。输出颜色范围和格式默认与输入颜色范围和格式的值相同。应在输入数据上设置输入传输特性、色彩空间、原色和色彩范围。如果缺少其中任何一个,过滤器将记录错误并且不会发生转换。

例如,要将输入转换为 SMPTE-240M,请使用以下命令:

colorspace=smpte240m

39.42 colorspace_cuda

CUDA 加速了色彩空间过滤器的实现。

与软件色彩空间过滤器相比,它的功能绝不是完整的,并且目前仅支持 jpeg/full 和 mpeg/limited range 之间的色彩范围转换。

该过滤器接受以下选项:

range

指定输出颜色范围。

可接受的值为:

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(全)系列

jpeg

JPEG(全)范围

39.43 colortemperature

调整视频中的色温以模拟环境色温的变化。

该过滤器接受以下选项:

temperature

设置开尔文温度。允许的范围为 1000 到 40000。默认值为 6500 K。

mix

设置与过滤输出的混合。允许的范围是 0 到 1。默认值为 1。

pl

设置保留亮度的量。允许的范围是 0 到 1。默认值为 0。

39.43.1 命令

该过滤器支持与选项相同的命令

39.44 convolution

应用 3x3、5x5、7x7 或水平/垂直最多 49 个元素的卷积。

该过滤器接受以下选项:

0m
1m
2m
3m

为每个平面设置矩阵。矩阵在方阵模式下是 9、25 或 49 个有符号整数的序列,在行模式下是 1 到 49 个奇数个有符号整数的序列

0rdiv
1rdiv
2rdiv
3rdiv

为每个平面的计算值设置乘数。如果未设置或为 0,则它将是所有矩阵元素的总和。

0bias
1bias
2bias
3bias

为每个平面设置偏置。该值被添加到乘法的结果中。对于使整体图像更亮或更暗很有用。默认值为 0.0。

0mode
1mode
2mode
3mode

为每个平面设置矩阵模式。可以是正方形。默认为正方形

39.44.1 命令

该过滤器支持以上所有选项作为命令

39.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"
    

39.45 convolve

使用第二个流作为脉冲在频域中应用视频流的 2D 卷积。

该过滤器接受以下选项:

planes

设置要处理的平面。

impulse

设置将处理哪些脉冲视频帧,可以是firstall。默认为全部

convolve过滤器还支持帧同步选项。

39.46 copy

将输入视频源原样复制到输出。这主要用于测试目的。

39.47 coreimage

在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上进行视频过滤。

硬件加速基于 OpenGL 上下文。通常,这意味着它是由视频硬件处理的。然而,存在基于软件的 OpenGL 实现,这意味着无法保证硬件处理。这取决于各自的 OSX。

Apple 提供了许多滤镜和图像生成器,并且具有多种选项。过滤器必须通过其名称及其选项来引用。

coreimage 过滤器接受以下选项:

list_filters

列出所有可用的过滤器和生成器及其所有各自的选项以及可能的最小值和最大值以及默认值。

list_filters=true
filter

按各自的名称和选项指定所有过滤器。使用list_filters确定所有有效的过滤器名称和选项。数字选项由浮点值指定,并自动限制在其各自的值范围内。矢量和颜色选项必须由空格分隔的浮点值列表指定。必须进行字符转义。特殊选项名称default可用于使用过滤器的默认选项。

需要指定一个default或至少一个过滤器选项。所有省略的选项都使用其默认值。过滤字符串的语法如下:

filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]
output_rect

指定一个矩形,将过滤器链的输出复制到输入图像中。它由空格分隔的浮点值列表给出:

output_rect=x\ y\ width\ height

如果未给出,则输出矩形等于输入图像的尺寸。输出矩形会在输入图像的边界处自动裁剪。负值对于每个组件都有效。

output_rect=25\ 25\ 100\ 100

多个过滤器可以链接起来进行连续处理,无需 GPU-HOST 传输,从而可以快速处理复杂的过滤器链。目前,仅支持具有 0 个(生成器)或恰好 1 个(过滤器)输入图像和 1 个输出图像的过滤器。此外,过渡滤波器还不能按预期使用。

一些过滤器根据各自的过滤器内核生成带有附加填充的输出图像。填充会自动删除,以确保过滤器输出的大小与输入图像的大小相同。

对于图像生成器,输出图像的大小分别由滤波器链的前一个输出图像或整个滤波器链的输入图像确定。生成器不使用该图像的像素信息来生成其输出。然而,生成的输出被混合到该图像上,导致输出图像部分或完全覆盖。

coreimagesrc视频源可用于生成直接馈送到过滤器链中的输入图像通过使用它,不需要通过另一个视频源或输入视频提供输入图像。

39.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
    

39.48 corr

获取两个输入视频之间的相关性。

该过滤器采用两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

通过日志系统打印获得的每个组件的平均值、最小和最大相关性。

过滤器将计算出的每帧的相关性存储在帧元数据中。

该过滤器还支持帧同步选项。

在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg

ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -

39.49 cover_rect

覆盖一个长方形物体

它接受以下选项:

cover

可选封面图像的文件路径需要为 yuv420。

mode

设置覆盖模式。

它接受以下值:

cover

用提供的图像覆盖它

blur

通过插入周围像素来覆盖它

默认值是模糊

39.49.1 示例

  • 使用给定视频提供的图像覆盖矩形对象ffmpeg
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    

39.50 crop

将输入视频裁剪为给定尺寸。

它接受以下参数:

w, out_w

输出视频的宽度。它默认为iw. 该表达式仅在过滤器配置期间或当 'w' 或者 '输出' 命令已发送。

h, out_h

输出视频的高度。它默认为ih. 该表达式仅在过滤器配置期间或当 'H' 或者 '输出_h' 命令已发送。

x

输入视频中输出视频左边缘的水平位置。它默认为(in_w-out_w)/2. 该表达式是按帧计算的。

y

输入视频中输出视频顶部边缘的垂直位置。它默认为(in_h-out_h)/2. 该表达式是按帧计算的。

keep_aspect

如果设置为 1,将通过更改输出样本宽高比强制输出显示宽高比与输入相同。默认为 0。

exact

启用精确裁剪。如果启用,二次采样视频将按照指定的精确宽度/高度/x/y 进行裁剪,并且不会四舍五入到最接近的较小值。默认为 0。

out_w 、out_hxy参数是包含以下常量的表达式

x
y

xy的计算值。针对每个新帧对它们进行评估。

in_w
in_h

输入的宽度和高度。

iw
ih

它们与in_win_h相同。

out_w
out_h

输出(裁剪后的)宽度和高度。

ow
oh

它们与out_wout_h相同。

a

与iw / ih相同

sar

输入样本长宽比

dar

输入显示宽高比,与 ( iw / ih ) * sar相同

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

n

输入帧的编号,从0开始。

pos

输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用

t

以秒表示的时间戳。如果输入时间戳未知,则为 NAN。

out_w的表达式可能取决于out_h的值, out_h的表达式可能取决于out_w,但它们不能取决于xy,因为xy在out_wout_h之后计算。

x和y参数指定输出(非裁剪)区域左上角位置的表达式它们针对每一帧进行评估。如果评估值无效,则近似为最接近的有效值。

x的表达式可能取决于y ,并且y的表达式可能取决于x

39.50.1 示例

  • 位置 (12,34) 处尺寸为 100x100 的裁剪区域。
    crop=100:100:12:34
    

    使用命名选项,上面的示例变为:

    crop=w=100:h=100:x=12:y=34
    
  • 裁剪尺寸为 100x100 的中央输入区域:
    crop=100:100
    
  • 将中央输入区域裁剪为输入视频的 2/3 大小:
    crop=2/3*in_w:2/3*in_h
    
  • 裁剪输入视频中心方块:
    crop=out_w=in_h
    crop=in_h
    
  • 界定矩形,左上角位于位置 100:100,右下角对应于输入图像的右下角。
    crop=in_w-100:in_h-100:100:100
    
  • 从左边框和右边框裁剪 10 个像素,从上边框和下边框裁剪 20 个像素
    crop=in_w-2*10:in_h-2*20
    
  • 仅保留输入图像的右下四分之一:
    crop=in_w/2:in_h/2:in_w/2:in_h/2
    
  • 获得希腊和谐的作物高度:
    crop=in_w:1/PHI*in_w
    
  • 应用颤抖效果:
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(n/7)
    
  • 根据时间戳应用不稳定的相机效果:
    crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(t*10):(in_h-out_h)/2 +((in_h-out_h)/2)*sin(t*13)
    
  • 根据 y 的值设置 x:
    crop=in_w/2:in_h/2:y:10+10*sin(n/10)
    

39.50.2 命令

该过滤器支持以下命令:

w, out_w
h, out_h
x
y

设置输出视频的宽度/高度以及输入视频中的水平/垂直位置。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.51 cropdetect

自动检测裁剪尺寸。

它计算必要的裁剪参数并通过记录系统打印推荐参数。根据mode ,检测到的尺寸对应于输入视频的非黑色或视频区域。

它接受以下参数:

mode

根据模式的不同,裁剪检测基于周围像素的单纯黑色值或运动矢量和边缘像素的组合。

black

检测正在播放的视频周围的黑色像素。为了进行精细控制,请使用选项limit

mvedges

通过视频内的运动矢量检测正在播放的视频,并扫描通常形成正在播放视频的边界的边缘像素。

limit

设置更高的黑色值阈值,可以选择从无 (0) 到全部指定(对于基于 8 位的格式为 255)。大于设定值的强度值被认为是非黑色。默认为 24​​。您还可以指定 0.0 到 1.0 之间的值,该值将根据像素格式的位深度进行缩放。

round

宽度/高度可被整除的值。默认为 16。偏移量会自动调整以使视频居中。使用 2 仅获得偶数尺寸(4:2:2 视频所需)。编码大多数视频编解码器时,16 是最佳选择。

skip

设置跳过评估的初始帧数。默认值为 2。范围为 0 到 INT_MAX。

reset_count, reset

设置计数器,确定多少帧后cropDetect将重置先前检测到的最大视频区域并重新开始检测当前最佳裁剪区域。默认值为 0。

当频道徽标扭曲视频区域时,这会很有用。0 表示“永不重置”,并返回播放期间遇到的最大区域。

mv_threshold

将像素单位的运动设置为运动检测的阈值。默认为 8。

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后将其通过8-连通性与低阈值选择的“弱”边缘像素连接。

阈值和阈值必须在 [0,1] 范围内选择,并且low应小于或等于high

的默认值为,5/255高的默认 值为15/255

39.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 -
    

39.51.2 命令

该过滤器支持以下命令:

limit

该命令接受与相应选项相同的语法。如果指定的表达式无效,则将其保留为当前值。

39.52 cue

延迟视频过滤直到给定的时钟时间戳。过滤器首先通过预卷帧数,那么它最多缓冲 缓冲帧数并等待提示。到达提示后,它会转发缓冲的帧以及输入中的任何后续帧。

该过滤器可用于同步 Decklink 等实时输出设备的多个 ffmpeg 进程的输出。通过将延迟放入过滤链和预缓冲帧中,该过程可以在达到目标时钟时间戳后几乎立即将数据传递到输出。

无法保证完美的帧精度,但结果对于某些用例来说已经足够好了。

cue

以 UNIX 时间戳(以微秒为单位)表示的提示时间戳。默认值为 0。

preroll

作为预卷传递的内容的持续时间(以秒为单位)。默认值为 0。

buffer

等待提示之前缓冲内容的最大持续时间(以秒为单位)。默认值为 0。

39.53 curves

使用曲线应用颜色调整。

此滤镜类似于 Adob​​e Photoshop 和 GIMP 曲线工具。每个分量(红色、绿色和蓝色)的值由使用平滑曲线相互连接的N 个关键点定义。x 轴表示输入帧的像素值,y 轴表示要为输出帧设置的新像素值。

默认情况下,分量曲线由两个点(0;0)(1;1)定义。这会创建一条直线,其中每个原始像素值都“调整”为其自己的值,这意味着图像不会发生变化。

过滤器允许您重新定义这两点并添加更多点。将定义一条新曲线以平滑地通过所有这些新坐标。新定义的点需要在x轴上严格递增,并且它们的 xy值必须在[0;1]区间内。曲线是通过使用自然或单调三次样条插值形成的,具体取决于interp选项(默认值:natural)。样natural 条曲线通常会产生更平滑的曲线,而单调 ( pchip) 样条曲线则保证指定点之间的过渡是单调的。如果计算的曲线碰巧超出向量空间,则这些值将被相应地剪裁。

该过滤器接受以下选项:

preset

选择可用的颜色预设之一。除了以下选项之外,还可以使用此选项r,G,参数; 在这种情况下,后面的选项优先于预设值。可用的预设有:

none
color_negative
cross_process
darker
increase_contrast
lighter
linear_contrast
medium_contrast
negative
strong_contrast
vintage

默认为none.

master, m

设置主关键点。这些点将定义第二遍映射。它有时被称为“亮度”或“值”映射。它可以与 r,G,或者全部因为它的作用就像一个后处理 LUT。

red, r

设置红色组件的关键点。

green, g

设置绿色组件的关键点。

blue, b

设置蓝色分量的关键点。

all

设置所有组件(不包括主组件)的关键点。可以与其他关键点组件选项一起使用。在这种情况下,未设置的组件将回退到此 全部环境。

psfile

.acv指定要从中导入设置的 Photoshop 曲线文件 ( )。

plot

将曲线的 Gnuplot 脚本保存在指定文件中。

interp

指定插值的类型。可用的算法有:

natural

使用两次连续可导的分段三次多项式的自然三次样条。

pchip

使用分段三次 Hermite 插值多项式 (PCHIP) 的单调三次样条。

为了避免一些filtergraph语法冲突,每个关键点列表需要使用以下语法定义:x0/y0 x1/y1 x2/y2 ...

39.53.1 命令

该过滤器支持与选项相同的命令

39.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'
    

    这里我们获得每个组件的以下坐标:

    red

    (0;0.11) (0.42;0.51) (1;0.95)

    green

    (0;0) (0.50;0.48) (1;1)

    blue

    (0;0.22) (0.49;0.44) (1;0.80)

  • 前面的示例也可以通过相关的内置预设来实现:
    curves=preset=vintage
    
  • 或者简单地:
    curves=vintage
    
  • 使用 Photoshop 预设并重新定义绿色分量的点:
    curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
    
  • cross_process使用ffmpeg 和检查轮廓曲线gnuplot
    ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
    gnuplot -p /tmp/curves.plt
    

39.54 datascope

视频数据分析过滤器。

此过滤器显示视频部分的十六进制像素值。

该过滤器接受以下选项:

size, s

设置输出视频大小。

x

设置距拾取像素位置的 x 偏移量。

y

设置距拾取像素位置的 y 偏移量。

mode

设置范围模式,可以是以下之一:

mono

在黑色背景上绘制白色的十六进制像素值。

color

在黑色背景上使用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中选取的颜色背景上绘制十六进制像素值,以这种方式选取文本颜色,使其始终可见。

axis

在视频的左侧和顶部绘制行数和列数。

opacity

设置背景不透明度。

format

设置显示数字格式。可以是hex,或者dec。默认为hex.

components

设置要显示的像素组件。默认情况下,显示所有像素组件。

39.54.1 命令

该过滤器支持与选项相同的命令,但不包括size选项。

39.55 dblur

应用定向模糊滤镜。

该过滤器接受以下选项:

angle

设置方向模糊的角度。默认为45.

radius

设置方向模糊的半径。默认为5.

planes

设置要过滤的平面。默认情况下,所有平面都会被过滤。

39.55.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.56 dctdnoiz

使用 2D DCT(频域滤波)对帧进行去噪。

该过滤器不是为实时设计的。

该过滤器接受以下选项:

sigma, s

设置噪声西格玛常数。

西格玛定义了硬阈值3 * sigma;每个低于该阈值的 DCT 系数(绝对值)都会被丢弃。

如果您需要更高级的过滤,请参阅表达式

默认为0.

overlap

设置每个块的重叠像素数。由于过滤器可能很慢,因此您可能希望降低该值,但代价是过滤器效率较低,并且存在各种伪影的风险。

如果重叠值不允许处理整个输入宽度或高度,则会显示警告,并且不会对相应的边框进行降噪。

默认值为blocksize -1,这是最好的设置。

expr, e

设置系数因子表达式。

对于 DCT 块的每个系数,该表达式将被计算为该系数的乘数值。

如果设置了此选项,则西格玛选项将被忽略。

系数的绝对值可以通过c 变量访问。

n

使用位数设置块大小。定义 blocksize,即已处理块的宽度和高度。 1<<n

默认值为3 (8x8),对于 16x16 的块大小可以提高到4 。请注意,更改此设置会对处理速度产生巨大影响。此外,较大的块大小并不一定意味着更好的去噪。

39.56.1 示例

应用降噪西格玛4.5

dctdnoiz=4.5

使用表达式系统可以实现相同的操作:

dctdnoiz=e='gte(c, 4.5*3)'

使用块大小的剧烈降噪16x16

dctdnoiz=15:n=4

39.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

如果启用,当且仅当所有像素分量都带状时,当前像素才会更改,例如,为所有颜色分量触发带状检测阈值。默认为禁用。

39.57.1​​ 命令

该过滤器支持以上所有选项作为命令

39.58 deblock

从输入视频中去除块效应。

该过滤器接受以下选项:

filter

设置过滤器类型,可以是。默认很强。这控制应用何种类型的解块。

block

设置块的大小,允许的范围是 4 到 512。默认为8

alpha
beta
gamma
delta

设置阻塞检测阈值。允许的范围是 0 到 1。默认值是:alpha0.098,其余为0.05 。使用较高的阈值可提供更强的去块效应强度。设置alpha控制块精确边缘的阈值检测。其余选项控制边缘附近的阈值检测。每一个用于下/上或左/右。将其中任何一个设置为0都会禁用去块效应。

planes

设置要过滤的平面。默认是过滤所有可用的平面。

39.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
    

39.58.2 命令

该过滤器支持以上所有选项作为命令

39.59 decimate

定期删除重复的帧。

该过滤器接受以下选项:

cycle

设置将删除一帧的帧数。将其设置为 N意味着每批N帧中的一帧将被丢弃。默认为5.

dupthresh

设置重复检测的阈值。如果帧的差异度量小于或等于该值,则将其声明为重复。默认为1.1

scthresh

设置场景变化阈值。默认为15.

blockx
blocky

设置度量计算期间使用的 x 轴和 y 轴块的大小。较大的块可以更好地抑制噪声,但对小运动的检测也较差。必须是二的幂。默认为32.

ppsrc

将主输入标记为预处理输入并激活干净的源输入流。这允许使用各种过滤器对输入进行预处理,以帮助度量计算,同时保持帧选择无损。当设置为 时 1,第一个流用于预处理输入,第二个流是从中选择保留帧的干净源。默认为 0.

chroma

设置在度量计算中是否考虑色度。默认为 1.

mixed

设置输入是否仅部分包含要抽取的内容。默认为false. 如果启用,视频输出流将以可变帧速率进行。

39.60 deconvolve

使用第二个流作为脉冲在频域中应用视频流的 2D 反卷积。

该过滤器接受以下选项:

planes

设置要处理的平面。

impulse

设置将处理哪些脉冲视频帧,可以是firstall。默认为全部

noise

进行除法运算时设置噪音。默认值为0.0000001。当宽度和高度不同并且不是 2 的幂或者卷积之前的流有噪声时很有用。

deconvolve过滤器还支持帧同步选项。

39.61 dedot

减少视频中的交叉亮度(点爬行)和交叉颜色(彩虹)。

它接受以下选项:

m

设置操作模式。可以是用于减少交叉亮度的 点爬行和/或用于减少交叉颜色的 彩虹的组合。

lt

设置空间亮度阈值。较低的值会增加交叉亮度的减少。

tl

设置时间亮度的容差。较高的值会增加交叉亮度的减少。

tc

设置色度时间变化的容差。较高的值会增加串色的减少。

ct

设置时间色度阈值。较低的值会增加串色的减少。

39.62 deflate

对视频应用放气效果。

该滤波器仅考虑低于像素的值,用局部 (3x3) 平均值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。

39.62.1 命令

该过滤器支持以上所有选项作为命令

39.63 deflicker

消除时间帧亮度变化。

它接受以下选项:

size, s

设置帧中的移动平均过滤器大小。默认值为 5。允许的范围为 2 - 129。

mode, m

设置平均模式以平滑时间亮度变化。

可用值为:

am

算术平均值

gm

几何平均数

hm

调和平均值

qm

二次均值

cm

三次平均值

pm

功率平均值

median

中位数

bypass

实际上不要修改框架。当只需要元数据时很有用。

39.64 dejudder

消除部分隔行电视电影内容产生的抖动。

例如,可以通过上拉滤波器引入抖动。如果原始源是部分电视电影内容,则输出pullup,dejudder 将具有可变的帧速率。可能会更改容器的记录帧速率。除了这一变化之外,此过滤器不会影响恒定帧速率视频。

此过滤器中可用的选项是:

cycle

指定重复抖动的窗口长度。

接受任何大于 1 的整数。有用的值有:

4

如果原件以 24 fps 到 30 fps 进行电视传送(电影到 NTSC)。

5

如果原件以 25 至 30 fps(PAL 至 NTSC)进行电视传送。

20

如果两者混合。

默认为 '4'。

39.65 delogo

通过周围像素的简单插值来抑制电视台徽标。只需设置一个矩形覆盖徽标并观察它消失(有时会出现更丑陋的东西 - 您的里程可能会有所不同)。

它接受以下参数:

x
y

指定徽标的左上角坐标。必须指定它们。

w
h

指定要清除的徽标的宽度和高度。必须指定它们。

show

当设置为 1 时,屏幕上会绘制一个绿色矩形,以简化查找正确的xywh参数的过程。默认值为 0。

矩形绘制在最外面的像素上,该像素将(部分)替换为插值。每个方向上紧邻该矩形外部的下一个像素的值将用于计算矩形内部的插值像素值。

39.65.1 示例

  • 设置一个覆盖左上角坐标为 0,0、大小为 100x77 的矩形:
    delogo=x=0:y=0:w=100:h=77
    

39.66 derain

通过应用基于卷积神经网络的去雨方法去除输入图像/视频中的雨。支持型号:

存储库中提供了训练和模型生成脚本:https://github.com/XueweiMeng/derain_filter.git

该过滤器接受以下选项:

filter_type

指定要使用的过滤器。该选项接受以下值:

derain

过滤器除水。要进行去雨过滤,您需要使用去雨模型。

dehaze

除雾过滤器。要进行去雾过滤,需要使用去雾模型。

默认值为 '德兰'。

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。该选项接受以下值:

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg --enable-libtensorflow

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow 只能加载其格式的文件。

要获得完整功能(例如异步执行),请使用dnn_processing过滤器。

39.67 deshake

尝试修复水平和/或垂直移动的微小变化。该滤镜有助于消除因手持相机、碰撞三脚架、在车辆上移动等而导致的相机抖动。

该过滤器接受以下选项:

x
y
w
h

指定一个矩形区域来限制运动矢量的搜索。如果需要,运动矢量的搜索可以限制在由其左上角、宽度和高度定义的帧的矩形区域内。这些参数与drawbox过滤器具有相同的含义,可用于可视化边界框的位置。

当运动矢量搜索可能将帧内对象的同时运动与相机运动混淆时,这非常有用。

如果xywh中的任何一个或全部设置为 -1,则使用全帧。这允许设置后面的选项,而无需指定运动矢量搜索的边界框。

默认 - 搜索整个框架。

rx
ry

指定 x 和 y 方向的最大移动范围,范围为 0-64 像素。默认 16。

edge

指定如何生成像素来填充帧边缘的空白。可用值为:

blank, 0

在空白处补零

original, 1

空白位置的原始图像

clamp, 2

空白位置的挤出边缘值

mirror, 3

空白位置的镜像边缘

默认值为 '镜子'。

blocksize

指定用于运动搜索的块大小。范围 4-128 像素,默认 8。

contrast

指定块的对比度阈值。仅考虑具有超过指定对比度(最暗和最亮像素之间的差异)的块。范围 1-255,默认 125。

search

指定搜索策略。可用值为:

exhaustive, 0

设置穷举搜索

less, 1

设置不太详尽的搜索。

默认值为 '详尽的'。

filename

如果设置,则运动搜索的详细日志将写入指定文件。

39.68 despill

消除由绿屏或蓝屏的反射颜色引起的不必要的前景色污染。

该过滤器接受以下选项:

type

设置要使用的防溢出类型。

mix

设置如何生成溢出图。

expand

设置清除剩余溢出物的量。

red

控制溢出区域的红色量。

green

控制溢出区域的绿色量。绿屏应为 -1。

blue

控制溢出区域的蓝色量。蓝屏时应为 -1。

brightness

控制溢出区域的亮度,保留颜色。

alpha

修改生成的溢出贴图中的 alpha。

39.68.1 命令

该过滤器支持以上所有选项作为命令

39.69 detelecine

应用电视电影操作的精确逆操作。它需要使用模式选项指定的预定义模式,该模式必须与传递到电视电影过滤器的模式相同。

该过滤器接受以下选项:

first_field
top, t

顶场优先

bottom, b

底部字段优先 默认值为top

pattern

一串数字,代表您希望应用的下拉模式。默认值为23

start_frame

表示第一帧相对于电视电影模式的位置的数字。如果流被切断,则将使用此功能。默认值为0

39.70 dilation

对视频应用膨胀效果。

此过滤器用局部 (3x3) 最大值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。

coordinates

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

标记为本地 3x3 坐标图,如下所示:

1 2 3 4 5 6 7 8

39.70.1 命令

该过滤器支持以上所有选项作为命令

39.71 displace

替换第二个和第三个输入流所指示的像素。

它接受三个输入流并输出一个流,第一个输入是源,第二和第三输入是位移图。

第二个输入指定沿 x 轴移动像素的量,而第三个输入指定沿 y 轴移动像素的量。如果其中一个置换图流终止,则将使用该置换图的最后一帧。

请注意,一旦生成,位移贴图就可以反复重复使用。

下面是接受的选项的描述。

edge

设置超出范围的像素的置换行为。

可用值为:

blank

缺失的像素被黑色像素替换。

smear

相邻像素将展开以替换丢失的像素。

wrap

超出范围的像素将被包裹,以便它们指向另一侧的像素。

mirror

超出范围的像素将被镜像像素替换。

默认为 '涂抹'。

39.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
    

39.72 dnn_classify

使用基于边界框的深度神经网络进行分类。

该过滤器接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。此选项现在仅接受 openvino,将添加 TensorFlow 后端。

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件的路径,指定标签 ID 和名称之间的映射。每个标签名称写在一行中,跳过尾部空格和空行。第一行是 id 0 的标签名称,第二行是 id 1 的标签名称,以此类推。如果不提供标签文件,则以标签 id 视为名称。

backend_configs

设置要传递到后端的配置

对于tensorflow后端,您可以使用以下命令设置其配置会话配置选项,请使用tools/python/tf_sess_config.py 获取您系统的配置。

39.73 dnn_detect

使用深度神经网络进行对象检测。

该过滤器接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。此选项现在仅接受 openvino,将添加 TensorFlow 后端。

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件的路径,指定标签 ID 和名称之间的映射。每个标签名称写在一行中,跳过尾部空格和空行。第一行是标签 id 0 的名称(通常是“背景”),第二行是标签 id 1 的名称,以此类推。如果未提供标签文件,则将标签 id 视为名称。

backend_configs

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。

39.74 dnn_processing

使用深度神经网络进行图像处理。它与另一个过滤器一起工作,将帧的像素格式转换为 dnn 网络所需的格式。

该过滤器接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。该选项接受以下值:

tensorflow

TensorFlow 后端。要启用此后端,您需要安装 TensorFlow for C 库(请参阅 https://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg --enable-libtensorflow

openvino

OpenVINO 后端。要启用此后端,您需要构建并安装 OpenVINO for C 库(请参阅 https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用 --enable-libopenvino(–extra-cflags=- I... –extra-ldflags=-L... 如果头文件和库未安装到系统路径中,则可能需要)

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 后端只能加载其格式的文件。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

backend_configs

设置要传递到后端的配置。要使用异步执行,请设置 async(默认值:set)。如果后端不支持异步,则回滚到同步执行。

对于tensorflow后端,您可以使用以下命令设置其配置会话配置选项,请使用tools/python/tf_sess_config.py获取您系统的TensorFlow后端配置。

39.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(参见sr过滤器)处理 Y 通道,用于具有 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(请参阅sr过滤器)处理 Y 通道,这会更改帧大小,对于格式 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
    

39.75 drawbox

在输入图像上绘制一个彩色框。

它接受以下参数:

x
y

指定框左上角坐标的表达式。默认为 0。

width, w
height, h

指定框的宽度和高度的表达式;如果为 0,则它们被解释为输入宽度和高度。默认为 0。

color, c

指定要写入的框的颜色。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果使用特殊值invert,则框边缘颜色与具有反转亮度的视频相同。

thickness, t

设置框边缘厚度的表达式。值fill将创建一个填充框。默认值为3

请参阅下面的可接受常量列表。

replace

如果输入具有 Alpha,则适用。使用 value 时1,绘制框的像素将覆盖视频的颜色和 Alpha 像素。默认值为0,它将框合成到输入上,使视频的 Alpha 保持不变。

xywht的参数是包含以下常量的表达式:

dar

输入显示宽高比,与 ( w / h ) * sar相同。

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

in_h, ih
in_w, iw

输入的宽度和高度。

sar

输入样本的长宽比。

x
y

绘制框的 x 和 y 偏移坐标。

w
h

绘制框的宽度和高度。

box_source

如果要在边数据的检测bboxes中使用box数据,可以将box source设置为side_data_detection_bboxes。

如果设置了box_source ,则xy宽度高度将被忽略,并且仍然使用框数据来检测侧面数据的框。因此,如果您不确定盒子来源,请不要使用此参数。

t

拉制盒子的厚度。

这些常量允许xywht表达式相互引用,因此您可以指定y=x/daror h=w/dar

39.75.1 示例

  • 在输入图像的边缘绘制一个黑框:
    drawbox
    
  • 绘制一个颜色为红色且不透明度为 50% 的方框:
    drawbox=10:20:200:60:red@0.5
    

    前面的示例可以指定为:

    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
    
  • 用粉红色填充盒子:
    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=fill
    
  • 绘制 2 像素红色 2.40:1 蒙版:
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

39.75.2 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.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 手册中的 (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

39.77 drawgrid

在输入图像上绘制网格。

它接受以下参数:

x
y

指定网格交点某个点坐标的表达式(用于配置偏移)。两者都默认为 0。

width, w
height, h

指定网格单元宽度和高度的表达式,如果为 0,则它们分别解释为输入宽度和高度,减去thickness,因此图像会被框起来。默认为 0。

color, c

指定网格的颜色。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果使用特殊值invert,网格颜色与亮度反转的视频相同。

thickness, t

设置网格线粗细的表达式。默认值为1

请参阅下面的可接受常量列表。

replace

如果输入具有 Alpha,则适用。绘制网格的像素1将覆盖视频的颜色和 Alpha 像素。默认值为0,它将网格合成到输入上,使视频的 Alpha 保持不变。

xywht的参数是包含以下常量的表达式:

dar

输入显示宽高比,与 ( w / h ) * sar相同。

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

in_h, ih
in_w, iw

输入网格单元的宽度和高度。

sar

输入样本的长宽比。

x
y

网格交叉点的 x 和 y 坐标(用于配置偏移)。

w
h

绘制单元格的宽度和高度。

t

绘制单元格的厚度。

这些常量允许xywht表达式相互引用,因此您可以指定y=x/daror h=w/dar

39.77.1 示例

  • 绘制一个网格,单元格大小为 100x100 像素,厚度为 2 像素,颜色为红色,不透明度为 50%:
    drawgrid=width=100:height=100:thickness=2:color=red@0.5
    
  • 绘制一个白色的 3x3 网格,不透明度为 50%:
    drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
    

39.77.2 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.78 drawtext

使用 libfreetype 库在视频顶部绘制文本字符串或指定文件中的文本。

To enable compilation of this filter, you need to configure FFmpeg with --enable-libfreetype and --enable-libharfbuzz. To enable default font fallback and the font option you need to configure FFmpeg with --enable-libfontconfig. To enable the text_shaping option, you need to configure FFmpeg with --enable-libfribidi.

39.78.1 Syntax

It accepts the following parameters:

box

Used to draw a box around text using the background color. The value must be either 1 (enable) or 0 (disable). The default value of box is 0.

boxborderw

Set the width of the border to be drawn around the box using boxcolor. The value must be specified using one of the following formats:

  • boxborderw=10 set the width of all the borders to 10
  • boxborderw=10|20 set the width of the top and bottom borders to 10 and the width of the left and right borders to 20
  • boxborderw=10|20|30 set the width of the top border to 10, the width of the bottom border to 30 and the width of the left and right borders to 20
  • boxborderw=10|20|30|40 set the borders width to 10 (top), 20 (right), 30 (bottom), 40 (left)

The default value of boxborderw is "0".

boxcolor

The color to be used for drawing box around text. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.

The default value of boxcolor is "white".

line_spacing

Set the line spacing in pixels. The default value of line_spacing is 0.

text_align

Set the vertical and horizontal alignment of the text with respect to the box boundaries. The value is combination of flags, one for the vertical alignment (T=top, M=middle, B=bottom) and one for the horizontal alignment (L=left, C=center, R=right). Please note that tab characters are only supported with the left horizontal alignment.

y_align

Specify what the y value is referred to. Possible values are:

  • text the top of the highest glyph of the first text line is placed at y
  • baseline the baseline of the first text line is placed at y
  • font the baseline of the first text line is placed at y plus the ascent (in pixels) defined in the font metrics

The default value of y_align is "text" for backward compatibility.

borderw

Set the width of the border to be drawn around the text using bordercolor. The default value of borderw is 0.

bordercolor

Set the color to be used for drawing border around text. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.

The default value of bordercolor is "black".

expansion

选择文本的扩展方式。可以是none, strftime(已弃用)或normal(默认)。有关详细信息,请参阅 下面的文本扩展部分。

basetime

设置计数的开始时间。值以微秒为单位。仅适用于已弃用的strftime扩展模式。要在正常扩展模式下进行模拟,请使用该pts函数,并提供开始时间(以秒为单位)作为第二个参数。

fix_bounds

如果为 true,请检查并修复文本坐标以避免剪切。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

字体颜色的默认值为“黑色”。

fontcolor_expr

以与文本相同的方式扩展的字符串以获得动态 字体颜色值。默认情况下,此选项具有空值并且不被处理。设置此选项后,它将覆盖fontcolor选项。

font

用于绘制文本的字体系列。默认情况下为 Sans。

fontfile

用于绘制文本的字体文件。必须包含路径。如果禁用 fontconfig 支持,则此参数是必需的。

alpha

应用 Alpha 混合绘制文本。该值可以是 0.0 到 1.0 之间的数字。该表达式也接受相同的变量x、y。默认值为 1。请参阅fontcolor_expr

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

默认值为“默认”。

有关更多信息,请参阅 FT_LOAD_* libfreetype 标志的文档。

shadowcolor

用于在绘制的文本后面绘制阴影的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

阴影颜色的默认值为“黑色”。

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

如果要在侧数据的检测bbox中使用文本数据,则应将文本源设置为side_data_detection_bboxes。

如果设置了文本源,则文本文本文件将被忽略,并且在辅助数据的检测框中仍然使用文本数据。因此,如果您不确定文本来源,请不要使用此参数。

reload

文本文件将以指定的帧间隔重新加载。确保以原子方式更新文本文件,否则可能会读取部分内容,甚至失败。范围是 0 到 INT_MAX。默认值为 0。

x
y

指定在视频帧内绘制文本的偏移量的表达式。它们相对于输出图像的上/左边框。

xy的默认值为“0”。

请参阅下面的可接受的常量和函数列表。

xy的参数是包含以下常量和函数的表达式:

dar

输入显示宽高比,等于 ( w / h ) * sar

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

line_h, lh

每个文本行的高度

main_h, h, H

输入高度

main_w, w, W

输入宽度

max_glyph_a, ascent

对于所有渲染的字形,从基线到用于放置字形轮廓点的最高/上网格坐标的最大距离。由于网格的 Y 轴向上的方向,它是一个正值。

max_glyph_d, descent

对于所有渲染的字形,从基线到用于放置字形轮廓点的最低网格坐标的最大距离。由于网格的方向(Y 轴向上),这是一个负值。

max_glyph_h

最大字形高度,即渲染文本中包含的所有字形的最大高度,相当于ascent -escent 。

max_glyph_w

最大字形宽度,即渲染文本中包含的所有字形的最大宽度

font_a

字体规格中定义的上升大小

font_d

字体规格中定义的下降尺寸

top_a

第一个文本行字形的最大上升部分

bottom_d

最后一个文本行字形的最大下降部分

n

输入帧的编号,从0开始

rand(min, max)

返回最小值最大值之间的随机数

sar

输入样本的长宽比。

t

时间戳以秒表示,如果输入时间戳未知,则为 NAN

text_h, th

渲染文本的高度

text_w, tw

渲染文本的宽度

x
y

绘制文本的 x 和 y 偏移坐标。

这些参数允许xy表达式相互引用,因此您可以指定y=x/dar.

pict_type

当前帧图片类型的单字符描述。

pkt_pos

当前数据包在输入文件或流中的位置(以字节为单位,从输入开始算起)。值 -1 表示此信息不可用。

duration

当前数据包的持续时间(以秒为单位)。

pkt_size

当前数据包的大小(以字节为单位)。

39.78.2 文本扩展

如果扩张设置为 时strftime,过滤器会strftime识别所提供文本中 C 函数接受的序列并相应地扩展它们。检查 的文档 strftime。此功能已弃用,有利于normal 使用gmtimelocaltime扩展函数进行扩展。

如果扩张设置为 时none,文本将逐字打印。

如果扩张设置为normal(这是默认值),则使用以下扩展机制。

反斜杠字符 '\' 后跟任何字符,始终扩展到第二个字符。

形式的序列%{...}被扩展。大括号之间的文本是函数名称,后面可能是用“:”分隔的参数。如果参数包含特殊字符或分隔符(“:”或“}”),则应对它们进行转义。

请注意,它们可能还必须作为值进行转义文本 过滤器参数字符串中的选项以及过滤器图描述中的过滤器参数,也可能适用于 shell,最多可构成四个级别的转义;使用文本文件文本文件选项可以避免这些问题。

可以使用以下功能:

expr, e

表达式求值结果。

它必须采用一个参数来指定要计算的表达式,该表达式接受与xy值相同的常量和函数。请注意,并非所有常量都应使用,例如,在计算表达式时不知道文本大小,因此常量text_wtext_h将具有未定义的值。

expr_int_format, eif

计算表达式的值并将其输出为格式化整数。

第一个参数是要计算的表达式,就像expr函数一样。第二个参数指定输出格式。允许的值为 'X','X','d' 和 ''。它们的处理方式与函数中完全相同 printf。第三个参数是可选的,用于设置输出所占据的位置数。它可用于从左侧添加零填充。

gmtime

过滤器运行的时间,以 UTC 表示。它可以接受一个参数:strftimeC 函数格式字符串。格式字符串经过扩展以支持变量%[1-6]N ,该变量以可选指定的位数打印秒的小数部分。

localtime

过滤器运行的时间,以本地时区表示。它可以接受一个参数:strftimeC 函数格式字符串。格式字符串经过扩展以支持变量%[1-6]N ,该变量以可选指定的位数打印秒的小数部分。

metadata

框架元数据。采用一两个参数。

第一个参数是强制性的,指定元数据键。

第二个参数是可选的,指定默认值,当元数据键未找到或为空时使用。

可以通过检查运行打印的每个帧部分中包含的以 TAG 开头的条目来识别可用的元数据ffprobe -show_frames

通向绘图文本过滤器的过滤器中生成的字符串元数据也可用。

n, frame_num

帧编号,从0开始。

pict_type

当前图片类型的一个字符描述。

pts

当前帧的时间戳。它最多可能需要三个参数。

第一个参数是时间戳的格式;它默认为flt 十进制数秒,精度为微秒;hms代表格式化的[-]HH:MM:SS.mmm时间戳,精度为毫秒。 gmtime代表帧的时间戳,格式为UTC时间; localtime代表帧的时间戳,格式为本地时区时间。

第二个参数是添加到时间戳的偏移量。

如果格式设置为,则可以提供 hms第三个参数,以 24 小时格式 (00-23) 呈现格式化时间戳的小时部分。24HH

如果格式设置为localtimegmtime,则可以提供第三个参数:strftimeC 函数格式字符串。默认情况下,将使用 YYYY-MM-DD HH:MM:SS格式。

39.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
  • α
  • 字体大小
  • 字体颜色
  • 盒子颜色
  • 边框颜色
  • 阴影颜色
  • 盒子
  • 盒子
  • 盒子
  • 盒子边框
  • 行间距
  • 文本对齐
  • 影子x
  • 阴暗的
  • 边界

39.78.4 示例

  • 使用 FreeSerif 字体绘制“测试文本”,使用可选参数的默认值。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 在位置 x=100 和 y=50(从屏幕左上角开始计算)处使用大小为 24 的 FreeSerif 字体绘制“测试文本”,文本为黄色,周围有红色框。文本和框的不透明度均为 20%。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
              x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
    

    请注意,如果参数列表中未使用空格,则不需要双引号。

  • 在视频帧的中心显示文本:
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
    
  • 在随机位置显示文本,每 30 秒切换到一个新位置:
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
    
  • 在视频帧的最后一行中显示从右向左滑动的文本行。文件LONG_LINE假定包含没有换行符的单行。
    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
    
  • 显示文件内容学分离开框架底部并向上滚动。
    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
    
  • 在输入视频的中心绘制一个绿色字母“g”。字形基线放置在半个屏幕高度。
    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
    
  • 每 3 秒显示文本 1 秒:
    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
    
  • 使用 fontconfig 设置字体。请注意,冒号需要转义。
    drawtext='fontfile=Linux Libertine O-40\:style=Semibold:text=FFmpeg'
    
  • 根据视频的高度绘制字体大小的“测试文本”。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(请参阅 strftimeC 函数的文档):
    drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
    
  • 显示文本淡入和淡出(出现/消失):
    #!/bin/sh
    DS=1.0 # display start
    DE=10.0 # display end
    FID=1.5 # fade in duration
    FOD=5 # fade out duration
    ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
    
  • 水平对齐多个单独的文本。注意最大字形_a字体大小值包含在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 解复用器必须有选项-导出路径元数据 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

39.79 edgedetect

检测并绘制边缘。该过滤器使用 Canny 边缘检测算法。

该过滤器接受以下选项:

low
high

设置 Canny 阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,然后将其通过8-连通性与低阈值选择的“弱”边缘像素连接。

阈值和阈值必须在 [0,1] 范围内选择,并且low应小于或等于high

的默认值为,20/255高的默认 值为50/255

mode

定义绘图模式。

wires

在黑色背景上绘制白色/灰色电线。

colormix

混合颜色以创建绘画/卡通效果。

canny

在所有选定的平面上应用 Canny 边缘检测器。

默认值为wires

planes

选择用于过滤的平面。默认情况下,所有可用平面都会被过滤。

39.79.1 示例

  • 标准边缘检测以及滞后阈值的自定义值:
    edgedetect=low=0.1:high=0.4
    
  • 没有阈值处理的绘画效果:
    edgedetect=mode=colormix:high=0
    

39.80 elbg

使用 ELBG(增强型 LBG)算法应用色调分离效果。

对于每个输入图像,滤波器将在给定码本长度(即不同输出颜色的数量)的情况下计算从输入到输出的最佳映射。

该过滤器接受以下选项。

codebook_length, l

设置码本长度。该值必须是正整数,表示不同输出颜色的数量。默认值为 256。

nb_steps, n

设置用于计算最佳映射的最大迭代次数。值越高,结果越好,但计算时间越长。默认值为 1。

seed, s

设置随机种子,必须是 0 到 UINT32_MAX 之间的整数。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。

pal8

设置 pal8 输出像素格式。此选项不适用于大于 256 的码本长度。默认值处于禁用状态。

use_alpha

在量化计算中包含 alpha 值。允许创建具有多个 alpha 平滑混合的调色板输出图像(例如 PNG8)。

39.81 entropy

测量视频帧颜色通道直方图中的灰度熵。

它接受以下参数:

mode

可以是正常的差异的。默认为正常

diff模式测量直方图增量值的熵,即相邻直方图值之间的绝对差异。

39.82 epx

应用专为像素艺术设计的 EPX 放大滤镜。

它接受以下选项:

n

设置缩放尺寸:2for 2xEPX, 3for 3xEPX。默认为3.

39.83 eq

设置亮度、对比度、饱和度和近似伽玛调整。

该过滤器接受以下选项:

contrast

设置对比度表达式。-1000.0该值必须是范围为 的浮点值 1000.0。默认值为“1”。

brightness

设置亮度表达式。-1.0该值必须是范围为 的浮点值1.0。默认值为“0”。

saturation

设置饱和度表达式。0.0该值必须是范围为 的浮点数3.0。默认值为“1”。

gamma

设置伽马表达式。0.1该值必须是范围为 的浮点数 10.0。默认值为“1”。

gamma_r

设置红色的伽马表达式。0.1该值必须是范围为 的浮点数10.0。默认值为“1”。

gamma_g

设置绿色的伽马表达式。0.1该值必须是范围为 的浮点数 10.0。默认值为“1”。

gamma_b

设置蓝色的伽马表达式。0.1该值必须是范围为 的浮点数 10.0。默认值为“1”。

gamma_weight

设置伽马权重表达式。它可用于减少高伽马值对明亮图像区域的影响,例如防止它们被过度放大而只是纯白色。0.0该值必须是范围为 的浮点数1.0。值将0.0伽玛校正一路调低,同时1.0保持其全部强度。默认值为“1”。

eval

在评估亮度、对比度、饱和度和伽马表达式的表达式时设置。

它接受以下值:

init

仅在过滤器初始化期间或处理命令时对表达式求值一次

frame

评估每个传入帧的表达式

默认值为 '在里面'。

这些表达式接受以下参数:

n

输入帧的帧数从0开始

pos

输入文件中相应数据包的字节位置,如果未指定则为 NAN;已弃用,请勿使用

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

时间戳以秒表示,如果输入时间戳未知,则为 NAN

39.83.1 命令

过滤器支持以下命令:

contrast

设置对比度表达式。

brightness

设置亮度表达式。

saturation

设置饱和度表达式。

gamma

设置伽马表达式。

gamma_r

设置 gamma_r 表达式。

gamma_g

设置 gamma_g 表达式。

gamma_b

设置 gamma_b 表达式。

gamma_weight

设置 gamma_weight 表达式。

该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.84 erosion

对视频应用腐蚀效果。

此过滤器用局部 (3x3) 最小值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。

coordinates

指定要引用的像素的标志。默认值为 255,即使用所有八个像素。

标记为本地 3x3 坐标图,如下所示:

1 2 3 4 5 6 7 8

39.84.1 命令

该过滤器支持以上所有选项作为命令

39.85 estdif

对输入视频进行去隔行处理(“estdif”代表“边缘倾斜跟踪去隔行过滤器”)。

仅空间滤波器,使用边缘坡度跟踪算法来插入缺失的线。它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

frame

每帧输出一帧。

field

每个字段输出一帧。

默认值为field

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

tff

假设顶部字段是第一个。

bff

假设底部字段是第一个。

auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

all

对所有帧进行去隔行处理。

interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

rslope

指定边缘坡度追踪的搜索半径。默认值为 1。允许的范围为 1 到 15。

redge

指定最佳边缘匹配的搜索半径。默认值为 2。允许的范围为 0 到 15。

ecost

指定边缘匹配的边缘成本。默认值为 2。允许的范围为 0 到 50。

mcost

指定边缘匹配的中间成本。默认值为 1。允许的范围为 0 到 50。

dcost

指定边缘匹配的距离成本。默认值为 1。允许的范围为 0 到 50。

interp

指定使用的插值。默认为 4 点插值。它接受以下值之一:

2p

两点插值。

4p

四点插值。

6p

六点插值。

39.85.1 命令

该过滤器支持与选项相同的命令

39.86 exposure

调整视频流的曝光度。

该过滤器接受以下选项:

exposure

在 EV 中设置曝光校正。允许范围为 -3.0 至 3.0 EV 默认值为 0 EV。

black

设置黑电平校正。允许的范围是从 -1.0 到 1.0。默认值为 0。

39.86.1 命令

该过滤器支持与选项相同的命令

39.87 extractplanes

将输入视频流中的颜色通道分量提取到单独的灰度视频流中。

过滤器接受以下选项:

planes

设置要提取的平面。

平面的可用值为:

y
u
v
a
r
g
b

选择输入中不可用的平面将导致错误。这意味着您不能同时 选择r, g,b平面和y, u,平面。v

39.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
    

39.88 fade

对输入视频应用淡入/淡出效果。

它接受以下参数:

type, t

效果类型可以是“in”(淡入)或“out”(淡出效果)。默认为in.

start_frame, s

指定开始应用淡入淡出效果的帧数。默认值为 0。

nb_frames, n

淡入淡出效果持续的帧数。淡入效果结束时,输出视频将具有与输入视频相同的强度。在淡出过渡结束时,输出视频将填充所选内容颜色。默认值为 25。

alpha

如果设置为 1,则仅淡出 Alpha 通道(如果输入上存在)。默认值为 0。

start_time, st

指定开始应用淡入淡出效果的帧的时间戳(以秒为单位)。如果同时指定了 start_frame 和 start_time,则淡入淡出将从最后一个开始。默认值为 0。

duration, d

淡入淡出效果必须持续的秒数。在淡入效果结束时,输出视频将具有与输入视频相同的强度,在淡出过渡结束时,输出视频将填充所选内容颜色。如果同时指定了duration 和nb_frames,则使用duration。默认值为 0(默认使用 nb_frames)。

color, c

指定淡入淡出的颜色。默认为“黑色”。

39.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
    

39.89 feedback

应用反馈视频过滤器。

该过滤器将裁剪后的输入帧传递到第二个输出。从那里可以使用其他视频过滤器对其进行过滤。过滤器接收到来自第二个输入的帧后,该帧会合并到来自第一个输入的原始帧之上,并传递到第一个输出。

典型用法是仅过滤帧的一部分。

该过滤器接受以下选项:

x
y

设置左上角的裁剪位置。

w
h

设置裁剪尺寸。

39.89.1 示例

  • 使用 gblur 滤镜仅模糊视频帧大小 100x100 的左上角矩形部分。
    [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
    
  • 使用抽屉式滤镜在大小为 100x100 的视频帧的左上部分绘制黑框。
    [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]drawbox=x=0:y=0:w=100:h=100:t=100[blurin]
    
  • 使用像素化滤镜对大小为 100x100 的视频帧的矩形部分进行像素化。
    [in][blurin]feedback=x=320:y=240:w=100:h=100[out][blurout];[blurout]pixelize[blurin]
    

39.90 fftdnoiz

使用 3D FFT(频域滤波)对帧进行去噪。

该过滤器接受以下选项:

sigma

设置噪声西格玛常数。这设置了去噪强度。默认值为 1。允许的范围为 0 到 30。使用非常高的西格玛和低重叠可能会产生块效应。

amount

设置去噪量。默认情况下,所有检测到的噪音都会减少。默认值为 1。允许的范围为 0 到 1。

block

设置块的大小(以像素为单位),默认为 32,可以是 8 到 256。

overlap

设置块重叠。默认值为 0.5。允许的范围是 0.2 到 0.8。

method

设置去噪方法。默认是wiener,也可以hard

prev

设置用于降噪的先前帧数。默认设置为 0。

next

设置用于去噪的下一帧的数量。默认设置为 0。

planes

设置将被过滤的平面,默认情况下除 alpha 之外所有可用的过滤。

39.91 fftfilt

将任意表达式应用于频域中的样本

dc_Y

调整图像亮度平面的dc值(增益)。0过滤器接受范围为的整数值1000。默认值设置为0

dc_U

调整图像第一色度平面的dc值(增益)。0过滤器接受范围为的整数值1000。默认值设置为0

dc_V

调整图像第二色度平面的dc值(增益)。0过滤器接受范围为的整数值1000。默认值设置为0

weight_Y

设置亮度平面的频域权重​​表达式。

weight_U

设置第一个色度平面的频域权重​​表达式。

weight_V

设置第二色度平面的频域权重​​表达式。

eval

计算表达式时设置。

它接受以下值:

init

在过滤器初始化期间仅对表达式求值一次。

frame

评估每个传入帧的表达式。

默认值为 '在里面'。

过滤器接受以下变量:

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

N

输入帧的编号,从0开始。

WS
HS

用于水平和垂直处理的 FFT 阵列的大小。

39.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)))'
    

39.92 field

使用步幅算法从隔行扫描图像中提取单个字段,以避免浪费 CPU 时间。输出帧被标记为非隔行扫描。

该过滤器接受以下选项:

type

指定是提取顶部字段(如果值为0top)还是底部字段(如果值为1bottom)。

39.93 fieldhint

通过复制提示文件提供的周围帧的顶部和底部字段来创建新帧。

hint

设置包含提示的文件:绝对/相对帧号。

剪辑中的每一帧必须有一行。每行必须包含两个以逗号分隔的数字,可以选择后跟-+。文件每行提供的数字不能超出 [N-1,N+1],其中 N 是absolute模式的当前帧编号,也不能超出relative模式的 [-1, 1] 范围。第一个数字告诉我们从哪一帧拾取顶场,第二个数字告诉我们从哪一帧拾取底场。

如果可选地后跟+输出帧将被标记为隔行,否则如果后跟-输出帧将被标记为逐行,否则它将被标记为与输入帧相同。如果可选地跟随t输出帧,则将仅使用顶场,或者在这种情况下,b将仅使用底场。如果行以#或开头,;则跳过该行。

mode

可以是 itemabsoluterelativepattern。默认为absolute. 该pattern模式与模式相同relative,除了在文件的最后一个条目处(如果需要处理的帧数多于hint文件回溯开始时的帧数)。

hint模式文件的前几行示例relative

0,0 - # first frame
1,0 - # second frame, use third's frame top field and second's frame bottom field
1,0 - # third frame, use fourth's frame top field and third's frame bottom field
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -

39.94 fieldmatch

用于逆电视电影的场匹配滤波器。它旨在从电视电影流中重建逐行帧。该滤波器不会丢弃重复的帧,因此要实现完整的逆电视电影,需要在滤波器图中 fieldmatch跟随抽取滤波器,例如抽取滤波器。

场匹配和抽取的分离主要是由于可以在两者之间插入去隔行滤波器回退的可能性。如果源混合了电视电影和真实隔行扫描内容, fieldmatch将无法匹配隔行扫描部分的字段。但这些剩余的精梳帧将被标记为隔行扫描,因此可以在抽取之前通过稍后的滤波器(例如yadif)去隔行扫描。

除了各种配置选项之外,fieldmatch还可以采用可选的第二个流,通过PPSRC选项。如果启用,帧重建将基于第二个流中的字段和帧。这允许对第一个输入进行预处理,以帮助过滤器的各种算法,同时保持输出无损(假设字段匹配正确)。通常,现场感知降噪器或亮度/对比度调整会有所帮助。

请注意,此过滤器使用与 TIVTC/TFM(AviSynth 项目)和 VIVTC/VFM(VapourSynth 项目)相同的算法。后者是基于 TFM 的轻型克隆fieldmatch。虽然语义和用法非常接近,但某些行为和选项名称可能有所不同。

抽取滤波器当前仅适用于恒定帧速率输入。如果您的输入混合了电视电影 (30fps) 和具有较低帧速率(如 24fps)的渐进式内容,请使用以下过滤器链来生成必要的 CFR 流:dejudder,fps=30000/1001,fieldmatch,decimate

该过滤器接受以下选项:

order

指定输入流的假定字段顺序。可用值为:

auto

自动检测奇偶校验(使用 FFmpeg 的内部奇偶校验值)。

bff

假设底场优先。

tff

假设顶场优先。

请注意,有时建议不要信任流宣布的奇偶校验。

默认值为自动

mode

设置要使用的匹配模式或策略。个人电脑模式是最安全的,因为它不会在可能的情况下冒因重复帧而产生抖动的风险,但如果存在错误的编辑或混合字段,当实际存在良好匹配时,它最终会输出梳理帧。另一方面,pcn_ub模式在产生抖动方面风险最大,但如果有的话,几乎总能找到一个好的框架。其他值都介于两者之间个人电脑pcn_ub相对于在编辑错误、孤立字段、混合字段等的部分中寻找良好的匹配,冒着抖动和创建重复帧的风险。

有关 p/c/n/u/b 的更多详细信息,请参阅p/c/n/u/b 含义部分。

可用值为:

pc

2路匹配(p/c)

pc_n

2 路匹配,如果仍然梳理则尝试第 3 次匹配 (p/c + n)

pc_u

2 路匹配,如果仍然梳理 (p/c + u),则尝试第 3 个匹配(相同顺序)

pc_n_ub

2 路匹配,如果仍然梳理,则尝试第 3 个匹配,如果仍然梳理,则尝试第 4/5 个匹配 (p/c + n + u/b)

pcn

3 路匹配 (p/c/n)

pcn_ub

3 路匹配,如果所有 3 个原始匹配都被检测为已梳理 (p/c/n + u/b),则尝试第 4/5 个匹配

末尾的括号表示将用于该模式的匹配假设命令= tff(并且场地自动顶部)。

在速度方面个人电脑模式是迄今为止最快的pcn_ub是最慢的。

默认值为pc_n

ppsrc

将主输入流标记为预处理输入,并启用辅助输入流作为从中选取字段的干净源。更多详情请参见过滤器介绍。它类似于剪辑2VFM/TFM 的功能。

默认值为0(禁用)。

field

设置要匹配的字段。建议将其设置为与以下相同的值 命令除非您在该设置下遇到匹配失败的情况。在某些情况下,更改用于匹配的字段可能会对匹配性能产生很大影响。可用值为:

auto

自动(与命令)。

bottom

从下场开始比赛。

top

从顶场开始比赛。

默认值为自动

mchroma

设置匹配比较期间是否包含色度。在大多数情况下,建议启用此功能。0 仅当您的剪辑存在严重色度问题(例如严重彩虹现象或其他伪像)时,才应将其设置为该值。将其设置为0也可用于加快速度,但会牺牲一定的准确性。

默认值为1

y0
y1

这些定义了一个排除带,排除了之间的线y0y1不被包含在现场匹配决策中。排除带可用于忽略字幕、徽标或其他可能干扰匹配的事物。y0设置起始扫描线和 y1设置结束线;之间的所有线y0y1(包括y0y1)将被忽略。环境 y0y1为相同的值将禁用该功能。 y0y1默认为0.

scthresh

将场景变化检测阈值设置为亮度平面上最大变化的百分比。良好的值在该[8.0, 14.0]范围内。场景变化检测仅在以下情况下相关梳子比赛= SC . 范围为 sthresh[0.0, 100.0]

默认值为12.0

combmatch

什么时候战斗不是nonefieldmatch在决定使用哪个比赛作为最终比赛时会考虑比赛的梳理分数。可用值为:

none

没有基于梳理分数的最终匹配。

sc

仅当检测到场景变化时才使用组合分数。

full

始终使用梳理乐谱。

默认为sc

combdbg

强制fieldmatch计算某些匹配的梳理指标并打印它们。此设置称为麦克风输出在 TFM/VFM 词汇中。可用值为:

none

没有强制计算。

pcn

强制 p/c/n 计算。

pcnub

强制 p/c/n/u/b 计算。

默认值为none

cthresh

这是用于梳理帧检测的区域梳理阈值。这本质上控制了必须检测到的“强”或“可见”梳理的程度。较大的值意味着梳理必须更明显,较小的值意味着梳理可能不那么明显或强烈,但仍然可以检测到。有效设置是从 -1(每个像素都将被检测为梳理)到255(没有像素将被检测为梳理)。这基本上是像素差值。一个好的范围是[8, 12].

默认值为9

chroma

设置在精梳帧决策中是否考虑色度。仅当您的源存在色度问题(彩虹等)并导致启用色度的梳理帧检测出现问题时才禁用此功能。实际上,使用色度= 0通常更可靠,除了源中仅存在色度组合的情况。

默认值为0

blockx
blocky

分别设置梳帧检测时使用的窗口的x轴和y轴大小。这与所在区域的大小有关 康佩尔需要将像素检测为已梳理的,才能声明已梳理的帧。请参阅康佩尔参数说明以获取更多信息。可能的值是从 4 开始到 512 的 2 的幂的任何数字。

默认值为16

combpel

任何内部的梳理像素数块状的经过 块xsize 帧上要检测的帧的块大小。尽管阈值控制梳理必须有多“可见”,此设置控制在任何局部区域(由定义的窗口)中必须有“多少”梳理。块x块状的设置)在框架上。最小值为0,最大值为blocky x blockx(此时将不会检测到已梳理的任何帧)。此设置称为心肌梗塞在 TFM/VFM 词汇中。

默认值为80

39.94.1 p/c/n/u/b 含义

39.94.1.1 p/c/n

我们假设以下电视电影流:

Top fields:     1 2 2 3 4
Bottom fields:  1 2 3 4 4

这些数字对应于字段相关的逐行扫描帧。这里,前两帧是逐行的,第三帧和第四帧是梳理的,依此类推。

fieldmatch配置为从底部运行匹配时(场地=底部)这就是输入流的转换方式:

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

作为字段匹配的结果,我们可以看到一些帧被重复。要执行完整的逆电视电影,在此操作后需要依赖抽取滤波器。例如,参见抽取滤波器。

现在从顶部字段匹配相同的操作(场地=顶部) 看起来像这样:

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匹配下一帧中相反奇偶校验的字段

39.94.1.2u/b

u和b匹配有点特殊,因为它们从相反的奇偶校验标志进行匹配在以下示例中,我们假设当前正在匹配第二帧(顶部:2,底部:2)。根据匹配情况,每个匹配字段的上方和下方都会放置一个“x”。

与底部匹配(场地=底部):

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

与顶部匹配 (场地=顶部):

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

39.94.2 示例

顶场优先电视电影流的简单 IVTC:

fieldmatch=order=tff:combmatch=none, decimate

高级 IVTC,对于静止梳理帧可 回退到yadif :

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

39.95 fieldorder

转换输入视频的场序。

它接受以下参数:

order

输出字段顺序。有效值为tff(顶场优先)或bff (底场优先)。

默认值为 '特夫'。

转换是通过将图片内容向上或向下移动一行,并用适当的图片内容填充剩余行来完成的。此方法与大多数广播场序转换器一致。

如果输入视频未标记为隔行扫描,或者已标记为具有所需的输出场顺序,则此过滤器不会更改传入视频。

当转换为 PAL DV 素材或从 PAL DV 素材(底场优先)转换时,此功能非常有用。

例如:

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

39.96 fifo, afifo

缓冲输入图像并在请求时发送它们。

它主要在由 libavfilter 框架自动插入时有用。

它不带参数。

39.97 fillborders

填充输入视频的边框,而不更改视频流尺寸。有时,视频的四个边缘可能有垃圾,您可能不希望裁剪视频输入以保持某个数字的大小倍数。

该过滤器接受以下选项:

left

从左边框开始填充的像素数。

right

从右边框开始填充的像素数。

top

从顶部边框填充的像素数。

bottom

从底部边框填充的像素数。

mode

设置填充模式。

它接受以下值:

smear

使用最外层像素填充像素

mirror

使用镜像填充像素(半样本对称)

fixed

用常数值填充像素

reflect

使用反射填充像素(整个样本对称)

wrap

使用环绕填充像素

fade

将像素淡入恒定值

margins

用边界附近的加权平均像素填充顶部和底部的像素

默认为涂抹

color

设置固定或淡入淡出模式下像素的颜色。默认为黑色

39.97.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.98 find_rect

在输入视频中找到一个矩形物体。

要搜索的对象必须指定为用指定的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

丢弃未检测到对象的帧。默认为禁用。

39.98.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
    

39.99 floodfill

具有相同像素分量值和另一个值的淹没区域。

它接受以下选项:

x

设置像素 x 坐标。

y

设置像素 y 坐标。

s0

设置源 #0 组件值。

s1

设置源 #1 组件值。

s2

设置源 #2 组件值。

s3

设置源 #3 组件值。

d0

设置目标#0 组件值。

d1

设置目标#1 组件值。

d2

设置目标#2 组件值。

d3

设置目标#3 组件值。

39.100 format

将输入视频转换为指定的像素格式之一。Libavfilter 将尝试选择一个适合作为下一个过滤器的输入。

它接受以下参数:

pix_fmts

以“|”分隔的像素格式名称列表,例如“pix_fmts=yuv420p|monow|rgb24”。

39.100.1 示例

  • 将输入视频转换为yuv420p格式
    format=pix_fmts=yuv420p
    

    将输入视频转换为列表中的任何格式

    format=pix_fmts=yuv420p|yuv444p|yuv410p
    

39.101 fps

根据需要复制或丢弃帧,将视频转换为指定的恒定帧速率。

它接受以下参数:

fps

所需的输出帧速率。它接受包含以下常量的表达式:

source_fps

输入的帧速率

ntsc

NTSC 帧速率30000/1001

pal

PAL 帧速率25.0

film

影片帧率24.0

ntsc_film

NTSC-电影帧率24000/1001

默认为25.

start_time

假设第一个 PTS 应该是给定值(以秒为单位)。这允许在流开始时进行填充/修剪。默认情况下,不会对第一帧的预期 PTS 做出任何假设,因此不会进行填充或修剪。例如,如果视频流在音频流之后开始,则可以将其设置为 0,以便用第一帧的重复项填充开头,或者修剪具有负 PTS 的任何帧。

round

时间戳(PTS)舍入方法。

可能的值为:

zero

向 0 舍入

inf

从 0 开始舍入

down

向无穷大舍入

up

向+无穷大舍入

near

四舍五入到最接近的

默认为near.

eof_action

读取最后一帧时执行的操作。

可能的值为:

round

使用与其他帧相同的时间戳舍入方法。

pass

如果尚未达到输入持续时间,则传递最后一帧。

默认为round.

或者,可以将选项指定为平面字符串: fps [: start_time [: round ]]。

另请参阅setpts过滤器。

39.101.1 示例

  • 将 fps 设置为 25 的典型用法:
    fps=fps=25
    
  • 将 fps 设置为 24,使用缩写和舍入方法舍入到最接近的值:
    fps=fps=film:round=near
    

39.102 framepack

将两个不同的视频流打包成立体视频,在支持的编解码器上设置适当的元数据。两个视图应具有相同的大小和帧速率,并且当较短的视频结束时处理将停止。请注意,您可以使用比例fps过滤器方便地调整视图属性。

它接受以下参数:

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

39.103 framerate

通过从源帧插入新的视频输出帧来更改帧速率。

此过滤器的设计不能正确处理交错媒体。如果您希望更改隔行扫描媒体的帧速率,则需要在此过滤器之前进行去隔行扫描,并在此过滤器之后重新隔行扫描。

下面是接受的选项的描述。

fps

指定每秒输出帧数。该选项也可以单独指定为一个值。默认为50.

interp_start

指定输出帧将创建为两个帧的线性插值的范围的起点。范围是[ 0- 255],默认是15

interp_end

指定输出帧将创建为两个帧的线性插值的范围的末尾。范围是[ 0- 255],默认是240

scene

指定检测到场景变化的级别为 0 到 100 之间的值,以指示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是新场景。默认为8.2.

flags

指定影响过滤过程的标志。

标志的可用值为:

scene_change_detect, scd

使用选项scene的值启用场景变化检测。默认情况下启用此标志。

39.104 framestep

每第 N 帧选择一帧。

该过滤器接受以下选项:

step

在每帧之后选择帧step。允许的值为大于 0 的正整数。默认值为1

39.105 freezedetect

检测冻结的视频。

当此过滤器检测到输入视频在指定持续时间内内容没有重大变化时,会记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差,并将其与本底噪声进行比较。

打印的时间和持续时间以秒为单位表示。元 lavfi.freezedetect.freeze_start数据密钥设置在时间戳等于或超过检测持续时间的第一帧上,并且包含冻结第一帧的时间戳。和 lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end数据键在冻结后的第一帧上设置。

该过滤器接受以下选项:

noise, n

设置噪声容限。可以以 dB 为单位指定(如果“dB”附加到指定值)或指定为 0 和 1 之间的差值比。默认值为 -60dB 或 0.001。

duration, d

设置通知前的冻结持续时间(默认为 2 秒)。

39.106 freezeframes

冻结视频帧。

该过滤器使用第二个输入的帧冻结视频帧。

该过滤器接受以下选项:

first

设置开始冻结的第一帧的编号。

last

设置结束冻结的最后一帧的编号。

replace

设置将使用第二个输入的帧数,而不是替换的帧。

39.107 frei0r

对输入视频应用 frei0r 效果。

要启用此过滤器的编译,您需要安装 frei0r 标头并使用--enable-frei0r.

它接受以下参数:

filter_name

要加载的 frei0r 效果的名称。如果定义了环境变量 FREI0R_PATH,则在 中以冒号分隔的列表指定的每个目录中搜索 frei0r 效果FREI0R_PATH。否则,将按以下顺序搜索标准 frei0r 路径: HOME/.frei0r-1/lib/,/usr/local/lib/frei0r-1/, /usr/lib/frei0r-1/

filter_params

要传递给 frei0r 效果的以“|”分隔的参数列表。

frei0r 效果参数可以是布尔值(其值为“y”或“n”)、双精度值、颜色(指定为 R / G / B,其中RGB是 0.0 到 0.0 之间的浮点数1.0(含)或 ffmpeg-utils 手册中 (ffmpeg-utils)“颜色”部分中指定的颜色描述、位置(指定为X / Y,其中 XY是浮点数)和/或细绳。

参数的数量和类型取决于加载的效果。如果未指定效果参数,则设置默认值。

39.107.1 示例

  • 应用扭曲0r效果,设置前两个双参数:
    frei0r=filter_name=distort0r:filter_params=0.5|0.01
    
  • 应用色距效果,将颜色作为第一个参数:
    frei0r=colordistance:0.2/0.3/0.4
    frei0r=colordistance:violet
    frei0r=colordistance:0x112233
    
  • 应用透视效果,指定左上角和右上角图像位置:
    frei0r=perspective:0.2/0.2|0.8/0.2
    

欲了解更多信息,请参阅 http://frei0r.dyne.org

39.107.2 命令

该过滤器支持过滤器参数选项作为命令

39.108 fspp

应用快速而简单的后处理。它是spp的更快版本。

它将 (I)DCT 分成水平/垂直通道。与简单的后处理滤波器不同,其中一个滤波器是每个块执行一次,而不是每个像素执行一次。这允许更高的速度。

该过滤器接受以下选项:

quality

设定质量。该选项定义平均的级别数。它接受 4-5 范围内的整数。默认值为4

qp

强制使用恒定的量化参数。它接受 0-63 范围内的整数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

strength

设置过滤强度。它接受 -15 到 32 范围内的整数。较低的值意味着更多细节,但也有更多伪像,而较高的值使图像更平滑,但也更模糊。默认值为0− PSNR 最佳值。

use_bframe_qp

如果设置为 ,则启用 B 帧中的 QP 的使用1。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认为 0(未启用)。

39.109 gblur

应用高斯模糊滤镜。

该过滤器接受以下选项:

sigma

设置水平西格玛,高斯模糊的标准差。默认为0.5.

steps

设置高斯近似的步数。默认为1.

planes

设置要过滤的平面。默认情况下,所有平面都会被过滤。

sigmaV

设置垂直西格玛,如果为负,则与 相同sigma。默认为-1.

39.109.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.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_expr,cb_表达式, 或者cr_表达式 指定选项后,过滤器将自动选择 YCbCr 色彩空间。如果其中之一红色表达式,绿色表达式, 或者 蓝色表达式指定选项后,它将选择 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。

39.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)'
    
  • 创建与输入大小相同的径向渐变(另请参阅晕影滤镜):
    geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
    

39.111 gradfun

修复有时因截断至 8 位颜色深度而引入近平坦区域的条带伪影。在条带所在的位置插入渐变,并对它们进行抖动处理。

它专为播放而设计。不要在有损压缩之前使用它,因为压缩往往会丢失抖动并恢复频带。

它接受以下参数:

strength

滤镜改变任一像素的最大量。这也是检测近平坦区域的阈值。可接受的值范围为 0.51 至 64;默认值为 1.2。超出范围的值将被限制在有效范围内。

radius

要拟合梯度的邻域。较大的半径可以实现更平滑的渐变,但也会阻止滤镜修改详细区域附近的像素。可接受的值为 8-32;默认值为 16。超出范围的值将被剪裁到有效范围。

或者,可以将选项指定为扁平字符串: strength [: radius ]

39.111.1 示例

  • 3.5应用强度和半径为 的过滤器8
    gradfun=3.5:8
    
  • 指定半径,省略强度(将回退到默认值):
    gradfun=radius=8
    

39.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_delta

显示当前帧与上一帧之间的 pts 增量。

time

显示当前过滤的帧时间。

time_delta

显示当前帧与上一帧之间的时间增量。

timebase

显示过滤器链接的时基。

format

显示过滤器链接使用的格式。

size

如果过滤器链接使用音频,则显示视频大小或音频通道数。

rate

如果过滤器链接使用音频,则显示视频帧速率或采样率。

eof

显示链路输出状态。

sample_count_in

显示从过滤器中获取的样本数。

sample_count_out

显示从过滤器给出的样本数。

sample_count_delta

显示上述两个值之间的样本数量增量。

disabled

显示时间线过滤器状态。

rate, r

设置输出流的视频速率上限,默认值为25。这保证了输出视频帧率不会高于该值。

39.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

39.114 greyedge

颜色恒定变化滤波器,通过灰度边缘算法估计场景照明并相应地校正场景颜色。

请参阅:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

该过滤器接受以下选项:

difford

应用于场景的微分顺序。必须在 [0,2] 范围内选择,默认值为 1。

minknorm

用于计算 Minkowski 距离的 Minkowski 参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 以获得最大值而不是计算 Minkowski 距离。

sigma

应用于场景的高斯模糊的标准偏差。必须在 [0,1024.0] 范围内选择,默认值 = 1。如果difford大于 0 ,则 Floor( sigma * break_off_sigma(3) ) 不能等于 0 。

39.114.1 示例

  • 灰边:
    greyedge=difford=1:minknorm=5:sigma=2
    
  • 最大边缘:
    greyedge=difford=1:minknorm=0:sigma=2
    

39.115 guided

应用引导滤镜进行边缘保留平滑、去雾等。

该过滤器接受以下选项:

radius

设置框半径(以像素为单位)。允许的范围是 1 到 20。默认值为 3。

eps

设置正则化参数(带平方)。允许的范围是 0 到 1。默认值为 0.01。

mode

设置过滤模式。可以是basicfast. 默认为basic.

sub

设置fast模式的子采样率。范围是 2 到 64。默认值为 4。basic模式下不会发生子采样。

guidance

设置引导模式。可以是offon. 默认为off. 如果off,则需要单个输入。如果on,则需要相同分辨率和像素格式的两个输入。第二个输入用作指导。

planes

设置要过滤的平面。默认仅是第一个。

39.115.1 命令

该过滤器支持以上所有选项作为命令

39.115.2 示例

  • 使用引导滤波器进行边缘保护平滑:
    ffmpeg -i in.png -vf guided out.png
    
  • 去雾、结构转移过滤、引导过滤器细节增强。关于引导图像的生成,请参考论文“Guided Image Filtering”。参见: http: //kaiminghe.com/publications/pami12guidedfilter.pdf
    ffmpeg -i in.png -i guidance.png -filter_complex guided=guidance=on out.png
    

39.116 haldclut

将 Hald CLUT 应用于视频流。

第一个输入是要处理的视频流,第二个输入是 Hald CLUT。Hald CLUT 输入可以是简单的图片或完整的视频流。

该过滤器接受以下选项:

clut

设置将从第二个输入流处理哪些 CLUT 视频帧,可以是firstall。默认为全部

shortest

当最短输入终止时强制终止。默认为0.

repeatlast

流结束后继续应用最后一个 CLUT。0到达 CLUT 的最后一帧后禁用过滤器的值 。默认为1.

haldclut还具有与lut3d相同的插值选项(两个滤波器共享相同的内部结构)。

该过滤器还支持帧同步选项。

有关 Hald CLUT 的更多信息可以在 Eskil Steenberg(Hald CLUT 作者)的网站上找到:http://www.quelsolaar.com/technology/clut.html

39.116.1 命令

该过滤器支持interp选项作为命令

39.116.2 工作流程示例

39.116.2.1 暂停 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 流的最新图片将应用于该mandelbrot流的其余帧。

39.116.2.2 通过预览暂停 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"

39.117 hflip

水平翻转输入视频。

例如,要水平翻转输入视频ffmpeg

ffmpeg -i in.avi -vf "hflip" out.avi

39.118 histeq

该过滤器在每帧的基础上应用全局颜色直方图均衡。

它可用于校正具有压缩像素强度范围的视频。滤波器重新分配像素强度,以均衡其在强度范围内的分布。它可以被视为“自动调节对比度滤镜”。此过滤器仅适用于纠正质量下降或捕获质量不佳的源视频。

该过滤器接受以下选项:

strength

确定要应用的均衡量。随着强度的降低,像素强度的分布越来越接近输入帧的分布。该值必须是 [0,1] 范围内的浮点数,默认为 0.200。

intensity

设置可以生成的最大强度并适当缩放输出值。应根据需要设置强度,然后根据需要限制强度以避免洗掉。该值必须是 [0,1] 范围内的浮点数,默认为 0.210。

antibanding

设置抗条带级别。如果启用,过滤器将随机少量改变输出像素的亮度,以避免直方图出现条带。可能的值为none,weakstrong。它默认为none.

39.119 histogram

计算并绘制输入视频的颜色分布直方图。

计算出的直方图是图像中颜色分量分布的表示。

标准直方图显示图像中颜色分量的分布。显示每个颜色分量的颜色图表。显示当前帧中 Y、U、V、A 或 R、G、B 分量的分布(具体取决于输入格式)。每个图表下方都显示了颜色分量比例尺。

该过滤器接受以下选项:

level_height

设置水平高度。默认值为200。允许的范围是 [50, 2048]。

scale_height

设置色阶的高度。默认值为12。允许的范围是 [0, 40]。

display_mode

设置显示模式。它接受以下值:

stack

每个颜色分量图都放置在彼此下方。

parade

每个颜色分量图并排放置。

overlay

提供的信息与 中的信息相同parade,只是表示颜色分量的图形直接相互叠加。

默认为stack.

levels_mode

设置模式。可以是linear, 或logarithmic。默认为linear.

components

设置要显示的颜色组件。默认为7.

fgopacity

设置前景不透明度。默认为0.7.

bgopacity

设置背景不透明度。默认为0.5.

colors_mode

设置颜色模式。它接受以下值:

whiteonblack
blackonwhite
whiteongray
blackongray
coloronblack
coloronwhite
colorongray
blackoncolor
whiteoncolor
grayoncolor

默认为whiteonblack.

39.119.1 示例

  • 计算并绘制直方图:
    ffplay -i input -vf histogram
    

39.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

39.120.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.121 hwdownload

将硬件帧下载到系统内存。

输入必须是硬件帧,输出必须是非硬件格式。输出并不支持所有格式 - 可能需要插入额外的格式格式紧随图表中的过滤器以获得支持格式的输出。

39.122 hwmap

将硬件帧映射到系统内存或另一个设备。

该过滤器有几种不同的操作模式;使用哪一种取决于输入和输出格式:

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并将它们传递到输出。如果以后需要原始硬件框架(例如,在其部分上覆盖其他东西之后),则硬件地图可以在下一个模式中再次使用过滤器来检索它。

  • 普通帧输入、硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射 - 即返回原始硬件帧。

    否则,必须提供设备。在该设备上为输出创建新的硬件表面,然后将它们映射回输入处的软件格式,并将这些帧提供给前面的过滤器。这将像 上传过滤器,但当输入已经采用兼容格式时,可能能够避免额外的副本。

  • 硬件帧输入输出

    必须直接或通过提供一个设备来提供输出 派生设备选项。输入和输出设备必须是不同类型并且兼容 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。

    如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。

    否则,将帧映射到输出设备 - 在输出上创建与输入上的帧相对应的新硬件帧。

接受以下附加参数:

mode

设置帧映射模式。一些组合:

read

映射的帧应该是可读的。

write

映射的帧应该是可写的。

overwrite

映射将始终覆盖整个帧。

在某些情况下,这可能会提高性能,因为不需要加载帧的原始内容。

direct

映射不得涉及任何复制。

在某些情况下,会创建到帧副本的间接映射,其中直接映射是不可能的,或者它会具有意外的属性。设置此标志可确保映射是直接的,如果不可能,则会失败。

如果未指定,则 默认为读+写。

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备 派生类型为 type 的新设备。

reverse

在硬件到硬件映射中,反向映射 - 在接收器中创建帧并将它们映射回源。在需要沿一个方向进行映射但所使用的设备仅支持相反方向的某些情况下,这可能是必要的。

此选项很危险 - 如果该过滤器的输出存在任何其他约束,它可能会以未定义的方式破坏前面的过滤器。在未完全理解其使用含义之前请勿使用它。

39.123 hwupload

将系统内存帧上传到硬件表面。

初始化过滤器时必须提供要上传的设备。如果使用 ffmpeg,请选择适当的设备-filter_hw_device 选项或与派生设备选项。输入和输出设备必须是不同类型并且兼容 - 其确切含义取决于系统,但通常这意味着它们必须引用相同的底层硬件上下文(例如,引用相同的显卡)。

接受以下附加参数:

derive_device type

不是使用初始化时提供的设备,而是从输入帧所在的设备 派生类型为 type 的新设备。

39.124 hwupload_cuda

将系统内存帧上传到 CUDA 设备。

它接受以下可选参数:

device

要使用的 CUDA 设备的编号

39.125 hqx

应用专为像素艺术设计的高质量放大滤镜。该滤波器最初由 Maxim Stepin 创建。

它接受以下选项:

n

设置缩放尺寸:2for hq2x3for hq3x4for hq4x。默认为3.

39.126 hstack

水平堆叠输入视频。

所有流必须具有相同的像素格式和相同的高度。

请注意,此过滤器比使用覆盖填充过滤器创建相同的输出更快。

过滤器接受以下选项:

inputs

设置输入流的数量。默认值为 2。

shortest

如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。

39.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 使像素要么完全灰色,要么根本不灰色。

值越高,灰色像素越多,灰色像素越高,像素颜色与关键颜色越相似。

39.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 使像素完全透明或根本不透明。

值越高,像素就越透明,透明度越高,像素颜色与关键颜色越相似。

39.129 hue

修改输入的色调和/或饱和度。

它接受以下参数:

h

将色调角指定为度数。它接受一个表达式,默认为“0”。

s

在 [-10,10] 范围内指定饱和度。它接受一个表达式并默认为“1”。

H

将色调角指定为弧度数。它接受一个表达式,默认为“0”。

b

指定 [-10,10] 范围内的亮度。它接受一个表达式并默认为“0”。

HH是互斥的,不能同时指定。

,H,Hs选项值是包含以下常量的表达式:

n

输入帧的帧数从0开始

pts

以时基单位表示的输入帧的呈现时间戳

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

时间戳以秒表示,如果输入时间戳未知,则为 NAN

tb

输入视频的时基

39.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))"
    

39.129.2 命令

该过滤器支持以下命令:

b
s
h
H

修改输入视频的色调和/或饱和度和/或亮度。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.130 huesaturation

对输入视频流应用色调-饱和度-强度调整。

该滤镜在 RGB 色彩空间中运行。

该过滤器接受以下选项:

hue

设置要应用的色调偏移度数。默认值为 0。允许的范围为 -180 到 180。

saturation

设置饱和度偏移。默认值为 0。允许的范围为 -1 到 1。

intensity

设置强度偏移。默认值为 0。允许的范围为 -1 到 1。

colors

设置要调整的原色和补色。通过提供一个或多个值来设置此选项。这可以一次选择多种颜色。默认情况下选择所有颜色。

r

调整红色。

y

调整黄色。

g

调整果岭。

c

调整青色。

b

调整布鲁斯。

m

调整洋红色。

a

调整所有颜色。

strength

设置过滤强度。允许的范围是 0 到 100。默认值为 1。

rw, gw, bw

设置每个 RGB 分量的权重。允许的范围为 0 到 1。默认设置为 0.333、0.334、0.333。这些选项用于饱和度和无光处理。

lightness

设置保留亮度,默认情况下禁用。调整色调可以改变原始 RGB 三元组的亮度,启用此选项后,亮度将保持相同的值。

39.131 hysteresis

通过连接组件将第一个流增长为第二个流。这使得构建更稳健的边缘掩模成为可能。

该过滤器接受以下选项:

planes

设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。

threshold

设置过滤时使用的阈值。如果像素分量值高于该值,则激活连接分量的过滤算法。默认值为 0。

hysteresis过滤器还支持帧同步选项。

39.132 iccdetect

从嵌入的 ICC 配置文件(如果存在)中检测色彩空间,并相应地更新帧的标签。

该过滤器接受以下选项:

force

如果为 true,则帧的现有色彩空间标签将始终被从 ICC 配置文件检测到的值覆盖。否则,仅当它们包含unknown. 默认启用。

39.133 iccgen

生成 ICC 配置文件并将其附加到框架上。

该过滤器接受以下选项:

color_primaries
color_trc

配置为其生成 ICC 配置文件的色彩空间。默认值auto从输入帧的元数据推断值,默认为 BT.709/sRGB(视情况而定)。

请参阅setparams过滤器以获取可能值的列表,但请注意,这些 unknown值对此过滤器无效。

force

如果为 true,即使会覆盖现有的 ICC 配置文件,也会生成 ICC 配置文件。默认禁用。

39.134 identity

获取两个输入视频之间的同一性得分。

该过滤器采用两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

通过日志系统打印获得的每个组件的平均、最小和最大身份分数。

过滤器将计算出的每帧的身份分数存储在帧元数据中。

该过滤器还支持帧同步选项。

在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg

ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -

39.135 idet

检测视频隔行扫描类型。

该过滤器尝试检测输入帧是隔行扫描、逐行扫描、顶场优先还是底场优先。它还将尝试检测相邻帧之间重复的场(电视电影的标志)。

单帧检测在对每帧进行分类时仅考虑直接相邻的帧。多帧检测结合了先前帧的分类历史。

过滤器将记录这些元数据值:

single.current_frame

使用单帧检测检测当前帧的类型。以下之一:“tff”(顶场优先)、“bff”(底场优先)、“渐进式”或“未确定”

single.tff

使用单帧检测检测为顶场优先的累积帧数。

multiple.tff

使用多帧检测检测为顶场优先的累积帧数。

single.bff

使用单帧检测检测为底场优先的累积帧数。

multiple.current_frame

使用多帧检测检测当前帧的类型。以下之一:“tff”(顶场优先)、“bff”(底场优先)、“渐进式”或“未确定”

multiple.bff

使用多帧检测检测为底场优先的累积帧数。

single.progressive

使用单帧检测检测为逐行扫描的累积帧数。

multiple.progressive

使用多帧检测检测为逐行扫描的累积帧数。

single.undetermined

使用单帧检测无法分类的累积帧数。

multiple.undetermined

使用多帧检测无法分类的累积帧数。

repeated.current_frame

当前帧中的哪个字段是从上一帧开始重复的。“两者都不是”、“顶部”或“底部”之一。

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 过滤器作为一种低计算方法来清理交错标志

39.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

交换亮度/色度/阿尔法字段。交换偶数行和奇数行。默认值为0

39.136.1 命令

该过滤器支持以上所有选项作为命令

39.137 inflate

对视频应用充气效果。

该过滤器仅考虑高于像素的值,用局部 (3x3) 平均值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认为65535。如果为0,平面将保持不变。

39.137.1 命令

该过滤器支持以上所有选项作为命令

39.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

垂直低通滤波器可避免 Twitter 交错并减少莫尔图案。

0, off

禁用垂直低通滤波器

1, linear

启用线性滤波器(默认)

2, complex

启用复杂过滤器。这将稍微减少抖动和莫尔条纹,但更好地保留细节和主观锐度印象。

39.139 kerndeint

通过应用 Donald Graft 的自适应内核去隔行来对输入视频进行去隔行。处理视频的交错部分以生成逐行帧。

接受的参数的描述如下。

thresh

设置在确定是否必须处理像素线时影响滤波器容差的阈值。它必须是 [0,255] 范围内的整数,默认为 10。值为 0 将导致对每个像素应用该过程。

map

如果设置为 1,则将超过阈值的像素绘制为白色。默认值为 0。

order

设置字段顺序。如果设置为 1,则交换字段;如果设置为 0,则保留字段。默认值为 0。

sharp

如果设置为 1,则启用额外锐化。默认值为 0。

twoway

如果设置为 1,则启用双向锐化。默认值为 0。

39.139.1 示例

  • 应用默认值:
    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
    
  • 启用额外锐化:
    kerndeint=sharp=1
    
  • 将处理后的像素绘制为白色:
    kerndeint=map=1
    

39.140 kirsch

将 Kirsch 算子应用于输入视频流。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.140.1 命令

该过滤器支持以上所有选项作为命令

39.141 lagfun

慢慢更新较暗的像素。

该滤光片使短闪光显得更长。该过滤器接受以下选项:

decay

设置衰减因子。默认值为 0.95。允许的范围是从 0 到 1。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

39.141.1 命令

该过滤器支持以上所有选项作为命令

39.142 lenscorrection

校正径向镜头畸变

该滤镜可用于校正因使用广角镜头而导致的径向畸变,从而重新校正图像。要找到正确的参数,可以使用可用的工具,例如作为 opencv 一部分的工具或简单的试错法。要使用 opencv,请使用 opencv 源中的校准样本(在样本/cpp 下),并从结果矩阵中提取 k1 和 k2 系数。

请注意,KDE 项目的开源工具 Krita 和 Digikam 中实际上提供了相同的过滤器。

与也可用于补偿镜头误差的晕影滤镜相比,此滤镜可校正图像的失真,而晕影滤镜可校正亮度分布,因此在某些情况下您可能需要同时使用这两个滤镜,但您可能会遇到以下情况:照顾顺序,即是否应在镜头校正之前或之后应用渐晕。

39.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 手册中的 (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分别是距源图像和目标图像中焦点的距离。

39.142.2 命令

该过滤器支持以上所有选项作为命令

39.143 lensfun

通过lensfun 库(http://lensfun.sourceforge.net/)应用镜头校正。

滤镜lensfun需要相机制造商、相机型号和镜头型号才能应用镜头校正。该过滤器将加载lensfun数据库并对其进行查询以在数据库中查找相应的相机和镜头条目。只要可以使用给定选项找到这些条目,过滤器就可以对帧执行校正。请注意,不完整的字符串将导致过滤器选择与给定选项的最佳匹配,并且过滤器将输出所选的相机和镜头型号(以级别“信息”记录)。您必须根据需要提供品牌、相机型号和镜头型号。

要获取可用品牌和型号的列表,请省略makemodel选项中的一个或全部。过滤器会将完整列表发送到 level 的日志INFO。第一列是品牌,第二列是型号。要获取可用镜头的列表,请设置品牌和型号的任意值并忽略该 lens_model选项。过滤器将在日志中发送 level 的完整镜头列表 INFO。打印列表后 ffmpeg 工具将退出。

该过滤器接受以下选项:

make

相机的品牌(例如“Canon”)。此选项是必需的。

model

相机的型号(例如“Canon EOS 100D”)。此选项是必需的。

lens_model

镜头型号(例如“Canon EF-S 18-55mm f/3.5-5.6 IS STM”)。此选项是必需的。

db_path

镜头数据库文件夹的完整路径。如果未设置,过滤器将在构建库时尝试从安装路径加载数据库。默认值未设置。

mode

要应用的更正类型。以下值是有效选项:

vignetting

启用固定镜头渐晕。

geometry

启用固定镜头几何形状。这是默认设置。

subpixel

能够修复色差。

vig_geo

能够修复镜头渐晕和镜头几何形状。

vig_subpixel

能够修复镜头渐晕和色差。

distortion

能够修复镜头几何形状和色差。

all

启用所有可能的更正。

focal_length

图像/视频的焦距(缩放;视频的预期常数)。例如,18-55mm镜头的焦距范围为[18-55],因此在使用该镜头时应选择该范围内的值。默认 18。

aperture

图像/视频的光圈(视频的预期常数)。请注意,光圈仅用于暗角校正。默认 3.5。

focus_distance

图像/视频的焦距(视频的预期常数)。请注意,焦距仅用于渐晕,并且仅轻微影响渐晕校正过程。如果未知,请将其保留为默认值(即 1000)。

scale

转换后应用的比例因子。校正后视频不再一定是矩形的。此参数控制结果图像的可见程度。值 0 表示将自动选择一个值,使得输出图像中几乎没有或没有未映射区域。1.0 表示不进行额外的缩放。较低的值可能会导致更多的校正图像可见,而较高的值可能会避免输出中出现未映射的区域。

target_geometry

输出图像/视频的目标几何形状。以下值是有效选项:

rectilinear (default)
fisheye
panoramic
equirectangular
fisheye_orthographic
fisheye_stereographic
fisheye_equisolid
fisheye_thoby
reverse

应用图像校正的相反操作(而不是校正失真,而是应用它)。

interpolation

校正失真时使用的插值类型。以下值是有效选项:

nearest
linear (default)
lanczos

39.143.1 示例

  • 使用品牌为“Canon”、相机型号为“Canon EOS 100D”、镜头型号为“Canon EF-S 18-55mm f/3.5-5.6 IS STM”、焦距为“18”、光圈为“8.0”的镜头校正。
    ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8 -c:v h264 -b:v 8000k output.mov
    
  • 与之前一样应用,但仅适用于视频的前 5 秒。
    ffmpeg -i input.mov -vf lensfun=make=Canon:model="Canon EOS 100D":lens_model="Canon EF-S 18-55mm f/3.5-5.6 IS STM":focal_length=18:aperture=8:enable='lte(t\,5)' -c:v h264 -b:v 8000k output.mov
    

39.144 libplacebo

基于 libplacebo ( https://code.videolan.org/videolan/libplacebo ) 的灵活 GPU 加速处理过滤器。

39.144.1 选项

此过滤器的选项分为以下部分:

39.144.1.1 输出模式

这些选项控制整体输出模式。默认情况下,libplacebo 将尝试尽可能保留源色度和大小,但它将应用源帧中存在的任何嵌入胶片颗粒、杜比视界元数据或变形 SAR。

inputs

设置输入数量。这可以与变量一起使用idx,以允许在输出帧内放置/混合多个输入。这有效地启用了类似于hstackoverlay等 的功能。

w
h

设置输出视频尺寸表达式。默认值为iwih

允许使用与比例过滤器相同的表达式。

crop_x
crop_y

设置输入裁剪x/y表达式,默认值为(iw-cw)/2(ih-ch)/2

crop_w
crop_h

设置输入裁剪宽度/高度表达式,默认值为iwih

pos_x
pos_y

设置输出放置x/y表达式,默认值为(ow-pw)/2(oh-ph)/2

pos_w
pos_h

设置输出放置宽度/高度表达式,默认值为owoh

fps

设置输出帧速率。这可以是理性的,例如60000/1001。如果设置为特殊字符串none(默认值),输入时间戳将不加修改地传递到输出。否则,将根据需要对输入视频帧进行插值,以将视频重新缩放到指定的目标帧速率,其方式由帧混合器选项。

format

设置输出格式覆盖。如果未设置(默认),帧将以与相应输入帧相同的格式输出。否则,将进行格式转换。

force_original_aspect_ratio
force_divisible_by

与相同的比例过滤器选项的工作方式相同。

normalize_sar

如果启用,输出帧的像素长宽比将始终为 1:1。这将根据需要引入额外的填充/裁剪。如果禁用(默认),则任何宽高比不匹配(包括来自变形视频源的宽高比不匹配)都会转发到输出像素宽高比。

pad_crop_ratio

指定当输入宽高比与输出宽高比不匹配时填充和裁剪之间的 比率(介于0.0和之间)1.0规范化_sar已生效。默认值0.0始终用黑色边框填充内容,而值1.0始终裁剪掉部分内容。中间值是可能的,从而导致两种方法的混合。

fillcolor

设置用于填充输出图像未覆盖的输出区域的颜色,例如由于规范化_sar。有关此选项的一般语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认为black.

corner_rounding

渲染带有圆角的框架。该值以浮点形式给出,范围从 0.01.0,指示舍入的相对程度(从完全方形到完全圆形)。换句话说,它给出的是半径除以较小边长的一半。默认为0.0.

extra_opts

传递额外的 libplacebo 内部配置选项。这些可以指定为由“:”分隔的=对的列表。以下示例展示了如何配置自定义过滤器内核(“EWA LanczosSharp”)并使用它来将输入图像分辨率加倍:

-vf "libplacebo=w=iw*2:h=ih*2:extra_opts='upscaler=custom\:upscaler_preset=ewa_lanczos\:upscaler_blur=0.9812505644269356'"
colorspace
color_primaries
color_trc
range

配置输出帧将传送的色彩空间。auto输出帧的默认值与输入帧的格式相同,不会发生任何变化。对于任何其他值,将执行转换。

请参阅setparams过滤器以获取可能值的列表。

apply_filmgrain

如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则应用胶片颗粒,并将其从输出中剥离。默认启用。

apply_dolbyvision

Apply Dolby Vision RPU metadata if present in source frames, and strip it from the output. Enabled by default. Note that Dolby Vision will always output BT.2020+PQ, overriding the usual input frame metadata. These will also be picked as the values of auto for the respective frame output options.

In addition to the expression constants documented for the scale filter, the crop_w, crop_h, crop_x, crop_y, pos_w, pos_h, pos_x and pos_y options can also contain the following constants:

in_idx, idx

The (0-based) numeric index of the currently active input stream.

crop_w, cw
crop_h, ch

The computed values of crop_w and crop_h.

pos_w, pw
pos_h, ph

The computed values of pos_w and pos_h.

in_t, t

The input frame timestamp, in seconds. NAN if input timestamp is unknown.

out_t, ot

The input frame timestamp, in seconds. NAN if input timestamp is unknown.

n

The input frame number, starting with 0.

39.144.1.2 Scaling

The options in this section control how libplacebo performs upscaling and (if necessary) downscaling. Note that libplacebo will always internally operate on 4:4:4 content, so any sub-sampled chroma formats such as yuv420p will necessarily be upsampled and downsampled as part of the rendering process. That means scaling might be in effect even if the source and destination resolution are the same.

upscaler
downscaler

Configure the filter kernel used for upscaling and downscaling. The respective defaults are spline36 and mitchell. For a full list of possible values, pass help to these options. The most important values are:

none

Forces the use of built-in GPU texture sampling (typically bilinear). Extremely fast but poor quality, especially when downscaling.

bilinear

Bilinear interpolation. Can generally be done for free on GPUs, except when doing so would lead to aliasing. Fast and low quality.

nearest

Nearest-neighbour interpolation. Sharp but highly aliasing.

oversample

Algorithm that looks visually similar to nearest-neighbour interpolation but tries to preserve pixel aspect ratio. Good for pixel art, since it results in minimal distortion of the artistic appearance.

lanczos

Standard sinc-sinc interpolation kernel.

spline36

Cubic spline approximation of lanczos. No difference in performance, but has very slightly less ringing.

ewa_lanczos

Elliptically weighted average version of lanczos, based on a jinc-sinc kernel. This is also popularly referred to as just "Jinc scaling". Slow but very high quality.

gaussian

Gaussian kernel. Has certain ideal mathematical properties, but subjectively very blurry.

mitchell

Cubic BC spline with parameters recommended by Mitchell and Netravali. Very little ringing.

frame_mixer

Controls the kernel used for mixing frames temporally. The default value is none, which disables frame mixing. For a full list of possible values, pass help to this option. The most important values are:

none

Disables frame mixing, giving a result equivalent to "nearest neighbour" semantics.

oversample

对输入视频进行过采样以创建“平滑运动”类型的效果:如果输出帧恰好落在两个视频帧之间的过渡上,则会根据相对重叠进行混合。当需要保留原始主观外观时,这是推荐的选项。

mitchell_clamp

更大的滤波器内核,以尽可能消除振铃和其他伪影的方式平滑地插入多个帧。当需要最大视觉平滑度时,推荐使用此选项。

linear

帧之间的线性混合/淡入淡出。对于构建例如幻灯片尤其有用。

lut_entries

配置缩放器 LUT 的大小,范围从1256。默认值0将选择 libplacebo 的内部默认值,通常是 64

antiringing

启用防振铃(对于非 EWA 滤波器)。该值(在0.0和 之间1.0)配置抗振铃算法的强度。如果设置得太高,可能会增加锯齿。默认禁用。

sigmoid

在升级过程中启用 S 形压缩。稍微减少振铃。默认启用。

39.144.1.3 解带

Libplacebo 附带一个内置的去带滤波器,能够很好地抵消许多常见的带和阻塞源。每当需要质量时,强烈建议打开此功能。

deband

启用(快速)解带算法。默认禁用。

deband_iterations

去带算法的去带迭代次数。每次迭代都以逐渐增加的半径(和减小的阈值)执行。推荐值的范围为14。默认为1.

deband_threshold

去带滤波器强度。数字越高,解带就越激进。默认为4.0.

deband_radius

去频带滤波器半径。较大的半径适合缓慢的梯度,而较小的半径适合陡峭的梯度。默认为16.0.

deband_grain

要添加的额外产出谷物的数量。有助于隐藏瑕疵。默认为 6.0.

39.144.1.4 颜色调整

主观色彩控制的集合。不是很严格,因此确切的效果会根据输入原色和色彩空间的不同而有所不同。

brightness

亮度提升,介于-1.0和之间1.0。默认为0.0.

contrast

对比度增益,在0.0和之间16.0。默认为1.0.

saturation

饱和增益,在0.0和之间16.0。默认为1.0.

hue

以弧度为单位的色调变化,介于-3.14和 之间3.14。默认为 0.0. 这将旋转 UV 子向量,默认为 RGB 输入的 BT.709 系数。

gamma

伽玛调整,在0.0和之间16.0。默认为1.0.

cones

用于色盲模拟的锥体模型。l接受,m和的任意组合 s。这里有些例子:

m

绿色弱视/绿色盲(影响 3%-4% 的人口)

l

红色弱视/红色盲(影响 1%-2% 的人口)

l+m

单色性(非常罕见)

l+m+s

全色盲(白天视力完全丧失,极为罕见)

cone-strength

锥体的增益系数由cones0.0和 之间指定10.0。值1.0不会导致色觉发生变化。值0.0(默认值)模拟这些视锥细胞的完全丢失。上述值1.0会夸大视锥细胞之间的差异,这可能有助于补偿色觉的下降。

39.144.1.5 峰值检测

为了帮助处理仅具有静态 HDR10 元数据(或没有任何标记)的源,libplacebo 使用其自己的内部帧分析计算着色器来分析源帧并实时调整色调映射函数。如果这太慢,或者需要精确再现的帧完美结果,建议关闭此功能。

peak_detect

启用 HDR 峰值检测。忽略静态 MaxCLL/MaxFALL 值,有利于从输入进行动态检测。请注意,检测到的值不会写回输出帧,它们仅指导内部色调映射过程。默认启用。

smoothing_period

峰值检测平滑周期,介于0.0和之间1000.0。较高的值会导致峰值检测对输入变化的响应能力降低。默认为100.0.

minimum_peak

检测到的峰值的下限(相对于 SDR 白色),介于0.0 和之间100.0。默认为1.0.

scene_threshold_low
scene_threshold_high

场景变化检测的下限和上限阈值。0.0以和之间的对数刻度表示100.0。分别默认为5.510.0。将任一值设置为负值都会禁用此功能。

percentile

使用帧亮度直方图的哪个百分位作为色调映射的源峰值。默认为99.995,一个相当保守的值。将其设置为100.0禁用帧直方图测量,而是使用真实峰值亮度进行色调映射。

39.144.1.6 色调映射

本节中的选项控制 libplacebo 在处理广色域或 HDR 内容之间的不匹配时如何执行色调映射和色域映射。一般来说,libplacebo 依靠准确的源标记和掌握显示色域信息来产生最佳结果。

gamut_mode

如何处理因色度色域映射而可能出现的色域外颜色。

clip

什么也不做,只需将超出范围的颜色剪辑到 RGB 体积即可。质量低但速度极快。

perceptual

对色域体积进行感知上的软剪辑颜色。这是默认设置。

relative

相对比色硬剪辑。与软膝类似,perceptual但没有软膝。

saturation

饱和度映射,将原色直接映射到 RGB 空间中的原色。不推荐,除非需要明亮、饱和的显示的人造计算机图形。

absolute

绝对比色硬夹。不执行白点调整。

desaturate

Hard-desaturates out-of-gamut colors towards white, while preserving the luminance. Has a tendency to distort the visual appearance of bright objects.

darken

Linearly reduces content brightness to preserves saturated details, followed by clipping the remaining out-of-gamut colors.

warn

Highlight out-of-gamut pixels (by inverting/marking them).

linear

Linearly reduces chromaticity of the entire image to make it fit within the target color volume. Be careful when using this on BT.2020 sources without proper mastering metadata, as doing so will lead to excessive desaturation.

tonemapping

Tone-mapping algorithm to use. Available values are:

auto

Automatic selection based on internal heuristics. This is the default.

clip

Performs no tone-mapping, just clips out-of-range colors. Retains perfect color accuracy for in-range colors but completely destroys out-of-range information. Does not perform any black point adaptation. Not configurable.

st2094-40

EETF from SMPTE ST 2094-40 Annex B, which applies the Bezier curves from HDR10+ dynamic metadata based on Bezier curves to perform tone-mapping. The OOTF used is adjusted based on the ratio between the targeted and actual display peak luminances.

st2094-10

EETF from SMPTE ST 2094-10 Annex B.2, which takes into account the input signal average luminance in addition to the maximum/minimum. The configurable contrast parameter influences the slope of the linear output segment, defaulting to 1.0 for no increase/decrease in contrast. Note that this does not currently include the subjective gain/offset/gamma controls defined in Annex B.3.

bt.2390

EETF from the ITU-R Report BT.2390, a hermite spline roll-off with linear segment. The knee point offset is configurable. Note that this parameter defaults to 1.0, rather than the value of 0.5 from the ITU-R spec.

bt.2446a

EETF from ITU-R Report BT.2446, method A. Designed for well-mastered HDR sources. Can be used for both forward and inverse tone mapping. Not configurable.

spline

Simple spline consisting of two polynomials, joined by a single pivot point. The parameter gives the pivot point (in PQ space), defaulting to 0.30. Can be used for both forward and inverse tone mapping.

reinhard

Simple non-linear, global tone mapping algorithm. The parameter specifies the local contrast coefficient at the display peak. Essentially, a parameter of 0.5 implies that the reference white will be about half as bright as when clipping. Defaults to 0.5, which results in the simplest formulation of this function.

mobius

莱因哈德色调映射算法的推广,支持黑色附近的附加线性斜率。色调映射参数指示线性部分和非线性部分之间的权衡。本质上,对于给定的参数x ,低于x的每个颜色值都将被线性映射,而更高的值将被非线性色调映射。接近的值1.0使该曲线的行为类似于clip,而接近的值0.0使该曲线的行为类似于reinhard。默认值为0.3,它在色度精度和保留色域外细节之间提供了良好的平衡。

hable

受柯达使用的类似色调映射算法的启发,John Hable 开发了用于《神秘海域 2》的分段电影色调映射算法。因其在具有 HDR 渲染功能的视频游戏中的使用而广受欢迎。很好地保留了黑暗和明亮的细节,但缺点是平均亮度变化相当大。这有点类似于 reinhard参数0.24

gamma

拟合伽马(幂)函数以在源色彩空间和目标色彩空间之间传输,有效地产生连接两个大致线性部分的感知硬拐点。这可以相当准确地保留所有尺度的细节,但可能会导致图像外观柔和或暗淡。该参数用作截止点,默认为0.5

linear

在 PQ 空间中将输入范围线性拉伸到输出范围。这将准确地保留所有细节,但会导致平均亮度显着不同。除了常规色调映射之外,还可用于逆色调映射。该参数可用作附加线性增益系数(默认为1.0)。

tonemapping_param

对于可调色调映射函数,此参数可用于微调曲线行为。请参阅 的文档tonemapping。的默认值0.0被曲线的首选默认设置替换。

inverse_tonemapping

如果启用,此过滤器还将尝试拉伸 SDR 信号以填充 HDR 输出颜色量。默认禁用。

tonemapping_lut_size

色调映射 LUT 的大小,介于2和之间1024。默认为 256. 请注意,与 结合时该数字是平方的 peak_detect

contrast_recovery

对比恢复强度。如果设置为以上的值0.0,源图像将被分为高频和低频分量,并且高频图像的一部分被添加回色调映射输出。对于某些 HDR 源,可能会导致过多的振铃伪像,但可以改善色调映射后图像中残留的主观清晰度和细节。默认为0.30.

contrast_smoothness

对比恢复低通内核大小。默认为3.5. 增加或减少此值将极大地影响视觉外观。contrast_recovery禁用 时无效。

39.144.1.7 抖动

默认情况下,libplacebo 会在必要时进行抖动,其中包括渲染为低于 16 位精度的任何整数格式。建议始终将其保留为打开状态,因为不这样做可能会导致输出中出现可见的条带,即使debanding启用了过滤器也是如此。如果需要最大性能,请使用ordered_fixed抖动而不是禁用抖动。

dithering

使用抖动方法。接受以下值:

none

完全禁用抖动。可能会导致可见的条带。

blue

使用伪蓝噪声进行抖动。这是默认设置。

ordered

可调有序抖动模式。

ordered_fixed

更快的有序抖动,固定大小为6. 无纹理。

white

用白噪声进行抖动。无纹理。

dither_lut_size

抖动 LUT 大小,作为1和之间的 log base2 8。默认为 6,对应于 LUT 大小64x64

dither_temporal

启用临时抖动。默认禁用。

39.144.1.8 自定义着色器

libplacebo 支持许多基于 mpv .hook GLSL 语法的自定义着色器。可以在这里找到此类着色器的集合: https ://github.com/mpv-player/mpv/wiki/User-Scripts#user-shaders

mpv 着色器格式的完整描述超出了本节的范围,但可以在此处找到摘要: https ://mpv.io/manual/master/#options-glsl-shader

custom_shader_path

指定要在运行时加载的自定义着色器文件的路径。

custom_shader_bin

将完整的自定义着色器指定为原始字符串。

39.144.1.9 调试/性能

本节中的所有选项均默认关闭。当试图以牺牲质量为代价来获得最大性能时,它们可能会有所帮助。

skip_aa

缩小尺寸时禁用抗锯齿功能。

polar_cutoff

截断极坐标 (EWA) 缩放器内核,使其低于此绝对量级(介于 0.0和之间) 1.0

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置 GPU 采样(强制 LUT)。

disable_fbos

强制禁用 FBO,导致几乎所有功能丢失,但提供最大可能的速度。

39.144.2 命令

该过滤器支持几乎所有上述选项作为命令

39.144.3 示例

  • 标准色域 BT.709 输出的色调映射输入:
    libplacebo=colorspace=bt709:color_primaries=bt709:color_trc=bt709:range=tv
    
  • 重新缩放输入以适应标准 1080p,并具有高质量缩放:
    libplacebo=w=1920:h=1080:force_original_aspect_ratio=decrease:normalize_sar=true:upscaler=ewa_lanczos:downscaler=ewa_lanczos
    
  • 将低 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
    

39.145 libvmaf

计算一对参考/失真输入视频的 VMAF(视频多方法评估融合)分数。

第一个输入是失真视频,第二个输入是参考视频。

获得的VMAF分数通过日志系统打印。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用它: ./configure --enable-libvmaf

该过滤器有以下选项:

model

一个“|” vmaf 模型的分隔列表。每个模型都可以配置许多参数。默认值:"version=vmaf_v0.6.1"

feature

一个“|” 分隔的功能列表。每个功能都可以配置多个参数。

log_path

设置用于存储日志文件的文件路径。

log_fmt

设置日志文件的格式(xml、json、csv 或 sub)。

n_threads

设置初始化 libvmaf 时要使用的线程数。默认值:0,无线程。

n_subsample

设置要使用的帧子采样间隔。

该过滤器还支持帧同步选项。

39.145.1 示例

  • 在下面的示例中,视频失真扭曲.mpg与参考文件进行比较参考.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 -
    

39.146 libvmaf_cuda

这是libvmaf过滤器的 CUDA 变体。它只接受 CUDA 帧。

它需要 Netflix 的 vmaf 库 (libvmaf) 作为先决条件。安装库后,可以使用以下命令启用它: ./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf

39.146.1 示例

  • 显示 CUVID 硬件解码和使用scale_cuda进行 CUDA 缩放的基本用法:
    ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
        -filter_complex "
            [0:v]scale_cuda=format=yuv420p[ref]; \
            [1:v]scale_cuda=format=yuv420p[dis]; \
            [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
        " \
        -f null -
    

39.147 limitdiff

使用第二个和可选的第三个视频流应用有限差分滤波器。

该过滤器接受以下选项:

threshold

设置允许视频流之间存在某些差异时使用的阈值。任何低于或精确于该阈值的绝对差值将从第一视频流中选取像素分量。

elasticity

设置处理视频流时软阈值的弹性。该值与第一个值相乘设置第二个阈值。任何大于或精确于第二阈值的绝对差值将从第二视频流中选取像素分量。对于这两个阈值之间的值,将使用第一和第二视频流之间的线性插值。

reference

启用参考(第三)视频流处理。默认情况下是禁用的。如果设置,该视频流将用于计算与第一个视频流的绝对差。

planes

指定将处理哪些平面。默认为所有可用。

39.147.1 命令

该过滤器支持以上所有选项作为命令,除了选项 '参考'。

39.148 limiter

将像素分量值限制在指定范围 [min, max] 内。

该过滤器接受以下选项:

min

下限。默认为输入允许的最低值。

max

上限。默认为输入允许的最高值。

planes

指定将处理哪些平面。默认为所有可用。

39.148.1 命令

该过滤器支持以上所有选项作为命令

39.149 loop

循环视频帧。

该过滤器接受以下选项:

loop

设置循环次数。将此值设置为 -1 将导致无限循环。默认值为 0。

size

设置最大尺寸(以帧数为单位)。默认值为 0。

start

设置循环的第一帧。默认值为 0。

time

设置循环开始时间(以秒为单位)。仅当名为start的选项设置为时才使用-1

39.149.1 示例

  • 无限循环单个第一帧:
    loop=loop=-1:size=1:start=0
    
  • 循环单个第一帧 10 次:
    loop=loop=10:size=1:start=0
    
  • 循环 10 个前帧 5 次:
    loop=loop=5:size=10:start=0
    

39.150 lut1d

将 1D LUT 应用于输入视频。

该过滤器接受以下选项:

file

设置 1D LUT 文件名。

目前支持的格式:

cube

伊里达斯

csp

电影空间

interp

选择插值模式。

可用值为:

nearest

使用最近定义点的值。

linear

使用线性插值来插值。

cosine

使用余弦插值来插值。

cubic

使用三次插值法对值进行插值。

spline

使用样条插值来插值。

39.150.1 命令

该过滤器支持以上所有选项作为命令

39.151 lut3d

将 3D LUT 应用于输入视频。

该过滤器接受以下选项:

file

设置 3D LUT 文件名。

目前支持的格式:

3dl

后遗症

cube

伊里达斯

dat

达芬奇

m3d

潘多拉

csp

电影空间

interp

选择插值模式。

可用值为:

nearest

使用最近定义点的值。

trilinear

使用定义立方体的 8 个点插入值。

tetrahedral

使用四面体插值。

pyramid

使用金字塔插值。

prism

使用棱镜插值。

39.151.1 命令

该过滤器支持interp选项作为命令

39.152 lumakey

将某些亮度值转换为透明度。

该过滤器接受以下选项:

threshold

设置将用作透明度基础的亮度。默认值为0

tolerance

设置要抠出的亮度值的范围。默认值为0.01

softness

设置柔和度范围。默认值为0。使用它来控制从零到完全透明度的逐渐过渡。

39.152.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.153 lut, lutrgb, lutyuv

计算用于将每个像素分量输入值绑定到输出值的查找表,并将其应用于输入视频。

lutyuv将查找表应用于 YUV 输入视频,lutrgb 将查找表应用于 RGB 输入视频。

这些过滤器接受以下参数:

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三像素分量表达式

c3

设置第四个像素分量表达式,对应alpha分量

r

设置红色分量表达式

g

设置绿色分量表达式

b

设置蓝色分量表达式

a

α分量表达式

y

设置Y/luma分量表达式

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”。

39.153.1 命令

该过滤器支持与选项相同的命令

39.153.2 示例

  • 否定输入视频:
    lutrgb="r=maxval+minval-val:g=maxval+minval-val:b=maxval+minval-val"
    lutyuv="y=maxval+minval-val:u=maxval+minval-val:v=maxval+minval-val"
    

    上面的内容等同于:

    lutrgb="r=negval:g=negval:b=negval"
    lutyuv="y=negval:u=negval:v=negval"
    
  • 负亮度:
    lutyuv=y=negval
    
  • 删除色度分量,将视频变成灰度图像:
    lutyuv="u=128:v=128"
    
  • 应用亮度燃烧效果:
    lutyuv="y=2*val"
    
  • 去除绿色和蓝色成分:
    lutrgb="g=0:b=0"
    
  • 在输入上设置恒定的 alpha 通道值:
    format=rgba,lutrgb=a="maxval-minval/2"
    
  • 将亮度伽玛校正 0.5 倍:
    lutyuv=y=gammaval(0.5)
    
  • 丢弃亮度的最低有效位:
    lutyuv=y='bitand(val, 128+64+32)'
    
  • 类似彩色效果:
    lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
    

39.154 lut2, tlut2

lut2过滤器接受两个输入流并输出一个流。

(time lut2)过滤tlut2器从一个流中获取两个连续的帧。

该过滤器接受以下参数:

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三像素分量表达式

c3

设置第四个像素分量表达式,对应alpha分量

d

设置输出位深度,仅适用于lut2过滤器。默认值为 0,这意味着从第一个输入格式自动选取位深度。

lut2过滤器还支持帧同步选项。

它们中的每一个都指定用于计算相应像素分量值的查找表的表达式。

与每个c*选项关联的确切组件取决于输入中的格式。

表达式可以包含以下常量:

w
h

输入的宽度和高度。

x

像素分量的第一个输入值。

y

像素分量的第二个输入值。

bdx

第一个输入视频位深度。

bdy

第二个输入视频位深度。

所有表达式默认为“x”。

39.154.1 命令

该过滤器支持除 option 之外的所有上述选项作为命令d

39.154.2 示例

  • 突出显示两个 RGB 视频流之间的差异:
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,0,pow(2,bdx)-1)'
    
  • 突出显示两个 YUV 视频流之间的差异:
    lut2='ifnot(x-y,0,pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1):ifnot(x-y,pow(2,bdx-1),pow(2,bdx)-1)'
    
  • 显示两个视频流之间的最大差异:
    lut2='if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1))):if(lt(x,y),0,if(gt(x,y),pow(2,bdx)-1,pow(2,bdx-1)))'
    

39.155 maskedclamp

使用第二输入和第三输入流钳位第一输入流。

返回第一个流的值,该值介于第二个输入流 -undershoot和第三个输入流 +之间overshoot

该过滤器接受以下选项:

undershoot

默认值为0

overshoot

默认值为0

planes

设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。

39.155.1 命令

该过滤器支持以上所有选项作为命令

39.156 maskedmax

使用第二输入流和第一输入流之间的绝对差以及第三输入流和第一输入流之间的绝对差将第二和第三输入流合并为输出流。如果第二个绝对差大于第一个,则选取的值将来自第二个输入流,否则来自第三个输入流。

该过滤器接受以下选项:

planes

设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。

39.156.1 命令

该过滤器支持以上所有选项作为命令

39.157 maskedmerge

使用第三输入流中的每像素权重将第一输入流与第二输入流合并。

第三个流像素分量中的值 0 意味着来自第一个流的像素分量原封不动地返回,而最大值(例如,8 位视频为 255)意味着来自第二个流的像素分量原封不动地返回。中间值定义两个输入流的像素分量之间的合并量。

该过滤器接受以下选项:

planes

设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。

39.157.1 命令

该过滤器支持以上所有选项作为命令

39.158 maskedmin

使用第二输入流和第一输入流之间的绝对差以及第三输入流和第一输入流之间的绝对差将第二和第三输入流合并为输出流。如果第二个绝对差小于第一个绝对差,则选取的值将来自第二个输入流,否则来自第三个输入流。

该过滤器接受以下选项:

planes

设置哪些平面将被处理为位图,未处理的平面将从第一个流复制。默认值 0xf,将处理所有平面。

39.158.1 命令

该过滤器支持以上所有选项作为命令

39.159 maskedthreshold

选择比较具有固定阈值的两个视频流的绝对差的像素。

如果第一和第二视频流的像素分量之间的绝对差等于或低于用户提供的阈值,则拾取来自第一视频流的像素分量,否则拾取来自第二视频流的像素分量。

该过滤器接受以下选项:

threshold

设置从两个输入视频流的绝对差中选取像素时使用的阈值。

planes

设置哪些平面将被处理为位图,未处理的平面将从第二个流复制。默认值 0xf,将处理所有平面。

mode

设置过滤器操作模式。可以是absdiff. 默认为abs.

39.159.1 命令

该过滤器支持以上所有选项作为命令

39.160 maskfun

从输入视频创建蒙版。

例如,在过滤器之后创建运动蒙版很有用tblend

该过滤器接受以下选项:

low

设置低阈值。任何低于或精确于此值的像素分量将被设置为 0。

high

设置高门槛。任何高于此值的像素分量将被设置为当前像素格式允许的最大值。

planes

设置要过滤的平面,默认情况下会过滤所有可用的平面。

fill

用该值填充所有帧像素。

sum

设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,则输出帧将完全填充由填充选项设置的值。与滤镜结合使用时,通常可用于场景变化tblend

39.160.1 命令

该过滤器支持以上所有选项作为命令

39.161 mcdeint

应用运动补偿去隔行。

它每帧需要一个字段作为输入,因此必须与 yadif=1/3 或等效项一起使用。

该过滤器接受以下选项:

mode

设置去隔行模式。

它接受以下值之一:

fast
medium
slow

使用迭代运动估计

extra_slow

喜欢 '慢的',但使用多个参考系。

默认值为 '快速地'。

parity

设置输入视频假定的图片场奇偶校验。它必须是以下值之一:

0, tff

假设顶场优先

1, bff

假设底场优先

默认值为 '最好的朋友'。

qp

设置内部编码器使用的每块量化参数 (QP)。

较高的值应会导致更平滑的运动矢量场,但各个矢量的最优性较差。默认值为 1。

39.162 median

从半径定义的某个矩形中选取中值像素。

该过滤器接受以下选项:

radius

设置水平半径大小。默认值为1。允许的范围是 1 到 127 之间的整数。

planes

设置要处理的平面。默认值为15,即所有可用平面。

radiusV

设置垂直半径大小。默认值为0。允许的范围是 0 到 127 之间的整数。如果是 0,将从水平radius选项中选取值。

percentile

设置中位数百分位数。默认值为0.5。默认值0.5将始终选择中值,而0将选择最小值和1最大值。

39.162.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.163 mergeplanes

合并来自多个视频流的颜色通道组件。

该过滤器最多接受 4 个输入流,并将选定的输入平面合并到输出视频。

该过滤器接受以下选项:

mapping

设置输入到输出平面的映射。默认为0.

映射被指定为位图。应将其指定为 0xAa[Bb[Cc[Dd]]] 形式的十六进制数。“Aa”描述输出流的第一个平面的映射。'A' 设置要使用的输入流的编号(从 0 到 3),'a' 设置要使用的相应输入的平面编号(从 0 到 3)。其余映射类似,“Bb”描述输出流第二平面的映射,“Cc”描述输出流第三平面的映射,“Dd”描述输出流第四平面的映射。

format

设置输出像素格式。默认为yuva444p.

map0s
map1s
map2s
map3s

设置输出第 N 个平面的输入到输出流映射。默认为0.

map0p
map1p
map2p
map3p

设置输出第 N 个平面的输入到输出平面的映射。默认为0.

39.163.1 示例

  • 将三个相同宽度和高度的灰色视频流合并为单个视频流:
    [a0][a1][a2]mergeplanes=0x001020:yuv444p
    
  • 将第一个 yuv444p 流和第二个灰色视频流合并为 yuva444p 视频流:
    [a0][a1]mergeplanes=0x00010210:yuva444p
    
  • 在 yuva444p 流中交换 Y 和 A 平面:
    format=yuva444p,mergeplanes=0x03010200:yuva444p
    
  • 交换 yuv420p 流中的 U 和 V 平面:
    format=yuv420p,mergeplanes=0x000201:yuv420p
    
  • 将 rgb24 剪辑投射到 yuv444p:
    format=rgb24,mergeplanes=0x000102:yuv444p
    

39.164 mestimate

使用块匹配算法估计和导出运动矢量。运动矢量存储在帧侧数据中以供其他滤波器使用。

该过滤器接受以下选项:

method

指定运动估计方法。接受以下值之一:

esa

详尽的搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

钻石搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强的预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认值为 '欧空局'。

mb_size

宏块大小。默认16

search_param

搜索参数。默认7

39.165 midequalizer

使用两个视频流应用中途图像均衡效果。

Midway 图像均衡调整一对图像以具有相同的直方图,同时尽可能保持其动态。它对于匹配一对立体相机的曝光等很有用。

该滤波器有两个输入和一个输出,它们必须具有相同的像素格式,但可以具有不同的大小。滤波器的输出首先根据两个输入的中间直方图进行调整。

该过滤器接受以下选项:

planes

设置要处理的平面。默认值为15,即所有可用平面。

39.166 minterpolate

使用运动插值将视频转换为指定的帧速率。

该过滤器接受以下选项:

fps

指定输出帧速率。这可以是理性的,例如60000/1001如果fps低于源 fps,则会丢帧。默认60

mi_mode

运动插补模式。接受以下值:

dup

复制上一帧或下一帧以插入新帧。

blend

混合源帧。插值帧是前一帧和下一帧的平均值。

mci

运动补偿插值。选择该模式时,以下选项有效:

mc_mode

运动补偿模式。接受以下值:

obmc

重叠块运动补偿。

aobmc

自适应重叠块运动补偿。根据相邻运动矢量的可靠性自适应地控制窗口加权系数,以减少过度平滑。

默认模式是 'OBMC'。

me_mode

运动估计模式。接受以下值:

bidir

双向运动估计。在向前和向后方向上估计每个源帧的运动矢量。

bilat

双边运动估计。直接估计内插帧的运动矢量。

默认模式是 '比拉特'。

me

用于运动估计的算法。接受以下值:

esa

详尽的搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

钻石搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强的预测区域搜索算法。

umh

不均匀多六边形搜索算法。

默认算法是'出口处'。

mb_size

宏块大小。默认16

search_param

运动估计搜索参数。默认32

vsbmc

启用可变大小块运动补偿。运动估计在对象边界处应用较小的块尺寸,以使它们不那么模糊。默认为0(禁用)。

scd

场景变化检测方法。场景变化导致运动矢量处于随机方向。场景变化检测用重复帧替换插值帧。其他模式可能不需要。接受以下值:

none

禁用场景变化检测。

fdiff

帧差。比较相应的像素值,如果满足scd_threshold,则检测到场景变化。

默认方法是'差异'。

scd_threshold

场景变化检测阈值。默认为10..

39.167 mix

将多个视频输入流混合为一个视频流。

下面是接受的选项的描述。

inputs

输入的数量。如果未指定,则默认为 2。

weights

将每个输入视频流的权重指定为序列。每个权重均由空格分隔。如果权重数量小于帧数,则最后指定的权重将用于所有剩余的未设置权重。

scale

指定比例,如果设置了,它将乘以每个权重的总和乘以像素值,得到最终的目标像素值。默认情况下,比例自动缩放为权重之和。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

duration

指定如何确定流结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一次输入的持续时间。

39.167.1 命令

该过滤器支持以下命令:

weights
scale
planes

语法与同名选项相同。

39.168 monochrome

使用自定义滤色器将视频转换为灰色。

下面是接受的选项的描述。

cb

设置色度蓝点。允许的范围是 -1 到 1。默认值为 0。

cr

设置色度红点。允许的范围是 -1 到 1。默认值为 0。

size

设置滤色片尺寸。允许的范围是 0.1 到 10。默认值为 1。

high

设置高光强度。允许的范围是 0 到 1。默认值为 0。

39.168.1 命令

该过滤器支持以上所有选项作为命令

39.169 morpho

该过滤器允许应用主要形态灰度变换、侵蚀和膨胀第二输入流中设置的任意结构。

与腐蚀膨胀过滤器中简单的实现和慢得多的性能不同,当速度至关重要时,morpho应该使用过滤器。

接受选项的描述如下,

mode

设置要应用的形态变换,可以是:

erode
dilate
open
close
gradient
tophat
blackhat

默认为erode.

planes

设置要过滤的平面,默认情况下,除 alpha 之外的所有平面都会被过滤。

structure

设置将从第二个输入流处理哪个结构的视频帧,可以是firstall。默认为全部

morpho过滤器还支持帧同步选项。

39.169.1 命令

该过滤器支持与选项相同的命令

39.170 mpdecimate

丢弃与前一帧差别不大的帧,以降低帧速率。

该过滤器的主要用途是用于极低比特率编码(例如通过拨号调制解调器进行流传输),但理论上它可以用于修复错误地反向电视传送的电影。

下面是接受的选项的描述。

max

设置可以丢弃的最大连续帧数(如果为正),或丢弃帧之间的最小间隔(如果为负)。如果该值为 0,则无论先前连续丢弃的帧的数量如何,该帧都会被丢弃。

默认值为 0。

keep

设置在开始丢弃之前要忽略的连续相似帧的最大数量。如果该值为 0,则丢弃该帧,而不管先前连续相似的帧的数量。

默认值为 0。

hi
lo
frac

设置下降阈值。

你好用于 8x8 像素块并表示实际像素值差异,因此阈值 64 对应于每个像素的 1 个差异单位,或者相同的差异以不同的方式分布在块上。

如果没有 8x8 块的差异超过阈值,则该帧是丢弃的候选帧你好,如果不超过压裂块(1 表示整个图像)的差异超过阈值

默认值你好为 64*12,默认值为为 64*5,默认值为压裂是0.33。

39.171 msad

获取两个输入视频之间的 MSAD(绝对差平均和)。

该过滤器采用两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

通过记录系统打印获得的每个组件的平均值、最小和最大 MSAD。

过滤器将计算出的每帧的 MSAD 存储在帧元数据中。

该过滤器还支持帧同步选项。

在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

39.172 multiply

将第一视频流像素值与第二视频流像素值相乘。

该过滤器接受以下选项:

scale

设置应用于第二个视频流的比例。默认情况下是1. 允许的范围是从09

offset

设置应用于第二个视频流的偏移量。默认情况下是0.5. 允许的范围是从-11

planes

指定要处理的输入视频流中的平面。默认情况下,所有平面都会被处理。

39.172.1 命令

该过滤器支持与选项相同的命令

39.173 negate

否定(反转)输入视频。

它接受以下选项:

components

将组件设置为否定。

组件的可用值为:

y
u
v
a
r
g
b
negate_alpha

当值为 1 时,它会否定 alpha 分量(如果存在)。默认值为 0。

39.173.1 命令

该过滤器支持与选项相同的命令

39.174 nlmeans

使用非局部均值算法对帧进行去噪。

通过寻找具有相似上下文的其他像素来调整每个像素。这种上下文相似性是通过比较周围的块大小来定义的 pXp。在以下区域中搜索补丁rXr 像素周围。

请注意,研究区域定义了补丁的中心,这意味着某些补丁将由该研究区域之外的像素组成。

该过滤器接受以下选项。

s

设置去噪强度。默认值为 1.0。必须在 [1.0, 30.0] 范围内。

p

设置补丁大小。默认值为 7。必须是 [0, 99] 范围内的奇数。

pc

与...一样p但对于色度平面。

默认值为0,表示自动。

r

设定研究规模。默认值为 15。必须是 [0, 99] 范围内的奇数。

rc

与...一样r但对于色度平面。

默认值为0,表示自动。

39.175 nnedi

使用神经网络边缘定向插值对视频进行去隔行处理。

该过滤器接受以下选项:

weights

强制选项,没有二进制文件过滤器无法工作。当前文件可以在这里找到:https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

deint

设置去隔行的帧,默认为all。可以是allinterlaced.

field

设置操作模式。

可以是以下之一:

af

使用帧标志,两个字段。

a

使用帧标志,单字段。

t

仅使用顶部字段。

b

仅使用底部字段。

tf

使用这两个字段,从顶部开始。

bf

使用两个字段,从底部开始。

planes

设置要处理的平面,默认情况下过滤处理所有帧。

nsize

设置每个像素周围局部邻域的大小,供预测神经网络使用。

可以是以下之一:

s8x6
s16x6
s32x6
s48x6
s8x4
s16x4
s32x4
nns

设置预测神经网络中的神经元数量。可以是以下之一:

n16
n32
n64
n128
n256
qual

控制混合在一起以计算最终输出值的不同神经网络预测的数量。可以是fast,默认或 slow

etype

设置在预测器中使用哪一组权重。可以是以下之一:

a, abs

训练权重以最小化绝对误差

s, mse

训练权重以最小化平方误差

pscrn

控制是否使用预筛选器神经网络来决定哪些像素应由预测器神经网络处理以及哪些像素可以通过简单的三次插值处理。预筛选器经过训练,知道三次插值对于像素是否足够,或者是否应该由预测器 nn 进行预测。预筛选器 nn 的计算复杂度远低于预测器 nn 的计算复杂度。由于大多数像素可以通过三次插值处理,因此使用预筛选器通常会导致处理速度更快。预筛选器非常准确,因此使用它和不使用它之间的差异几乎总是不易察觉。

可以是以下之一:

none
original
new
new2
new3

默认为new.

39.175.1 命令

该过滤器支持与选项相同的命令,但不包括权重选项。

39.176 noformat

强制 libavfilter 不使用任何指定的像素格式作为下一个过滤器的输入。

它接受以下参数:

pix_fmts

以“|”分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

39.176.1 示例

  • 强制 libavfilter 使用不同于yuv420p 的格式作为 vflip 过滤器的输入:
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式:
    noformat=yuv420p|yuv444p|yuv410p
    

39.177 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

均匀噪声(否则为高斯噪声)

39.177.1 示例

向输入视频添加时间和均匀噪声:

noise=alls=20:allf=t+u

39.178 normalize

标准化 RGB 视频(又名直方图拉伸、对比度拉伸)。请参阅:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每帧的每个通道,滤波器计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认为从纯黑到纯白的全动态范围。

可以在输入范围上使用时间平滑,以减少小暗或亮物体进入或离开场景时引起的闪烁(亮度的快速变化)。这类似于摄像机上的自动曝光(自动增益控制),并且与摄像机一样,它可能会导致视频出现一段时间的曝光过度或曝光不足。

R、G、B 通道可以独立标准化,这可能会导致一些色偏,或者作为单个通道链接在一起,这可以防止色偏。链接标准化保留了色调。独立标准化则不然,因此它可以用来消除一些色偏。独立标准化和链接标准化可以以任意比例组合。

标准化过滤器接受以下选项:

blackpt
whitept

定义输出范围的颜色。最小输入值映射到blackpt。最大输入值映射到whitept。默认值分别为黑色和白色。指定 blackpt为白色,为whitept指定黑色将得到颜色反转的标准化视频。灰色阴影可用于降低动态范围(对比度)。在这里指定饱和颜色可以创建一些有趣的效果。

smoothing

用于时间平滑的先前帧的数量。使用当前帧的滚动平均值和平滑先前帧来平滑每个通道的输入范围。默认值为 0(无时间平滑)。

independence

控制独立(色移)通道归一化与链接(颜色保留)归一化的比率。0.0是完全链接的,1.0是完全独立的。默认为 1.0(完全独立)。

strength

过滤器的整体强度。1.0是全力。0.0 是一个相当昂贵的无操作。默认为 1.0(全强度)。

39.178.1 命令

该过滤器支持与选项相同的命令,但不包括平滑选项。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.178.2 示例

拉伸视频对比度以使用完整的动态范围,无需时间平滑;根据源内容可能会闪烁:

normalize=blackpt=black:whitept=white:smoothing=0

如上所述,但具有 50 帧时间平滑;应减少闪烁,具体取决于源内容:

normalize=blackpt=black:whitept=white:smoothing=50

如上所述,但具有保留色调的链接通道归一化:

normalize=blackpt=black:whitept=white:smoothing=50:independence=0

如上所述,但强度减半:

normalize=blackpt=black:whitept=white:smoothing=50:independence=0:strength=0.5

将最暗的输入颜色映射为红色,将最亮的输入颜色映射为青色:

normalize=blackpt=red:whitept=cyan

39.179 null

将视频源不变地传递到输出。

39.180 ocr

光学字符识别

该过滤器使用 Tesseract 进行光学字符识别。要启用此过滤器的编译,您需要使用 --enable-libtesseract.

它接受以下选项:

datapath

将数据路径设置为超立方体数据。默认是使用安装时设置的任何内容。

language

设置语言,默认为“eng”。

whitelist

设置字符白名单。

blacklist

设置字符黑名单。

过滤器将识别的文本导出为帧元数据lavfi.ocr.text。过滤器将已识别单词的置信度导出为帧元数据lavfi.ocr.confidence

39.181 ocv

使用 libopencv 应用视频转换。

要启用此过滤器,请安装 libopencv 库和标头并使用--enable-libopencv.

它接受以下参数:

filter_name

要应用的 libopencv 过滤器的名称。

filter_params

要传递给 libopencv 过滤器的参数。如果未指定,则采用默认值。

有关更准确的信息,请参阅官方 libopencv 文档: http://docs.opencv.org/master/modules/imgproc/doc/filtering.html

支持多个 libopencv 过滤器;请参阅以下小节。

39.181.1 扩张

使用特定的结构元素放大图像。它对应于libopencv函数cvDilate

它接受参数:struct_el | nb_迭代

struct_el表示结构元素,语法为 cols x rows + anchor_x xanchor_y / shape

colsrows表示结构元素的列数和行数,anchor_xanchor_y表示锚点,并塑造结构元素的形状。形状 必须是“矩形”、“十字形”、“椭圆形”或“自定义”。

如果shape的值为“custom”,则其后必须跟有“= filename ”形式的字符串。假定名为filename 的文件 表示二进制图像,每个可打印字符对应于一个亮像素。当使用自定义 形状时,将忽略 行,而是假定读取文件的数量或列和行。

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

39.181.2 侵蚀

使用特定的结构元素侵蚀图像。它对应于libopencv函数cvErode

它接受参数:struct_el : nb_iterations,具有与dilate过滤器相同的语法和语义。

39.181.3 平滑

平滑输入视频。

该过滤器采用以下参数: type | 参数1 | 参数2 | 参数3 | 参数4

type是要应用的平滑滤波器的类型,并且必须是以下值之一:“blur”、“blur_no_scale”、“median”、“gaussian”或“bilingual”。默认值为“高斯”。

param1param2param3param4的含义 取决于 smooth 类型。param1param2接受整数正值或 0。param3param4 接受浮点值。

param1的默认值为3。其他参数的默认值为 0。

这些参数对应于分配给 libopencv 函数的参数cvSmooth

39.182 oscilloscope

2D 视频示波器。

可用于测量空间脉冲、阶跃响应、色度延迟等。

它接受以下参数:

x

设置范围中心 x 位置。

y

设置范围中心 y 位置。

s

设置范围大小,相对于帧对角线。

t

设置示波器倾斜/旋转。

o

设置轨迹不透明度。

tx

设置轨迹中心 x 位置。

ty

设置轨迹中心 y 位置。

tw

设置相对于帧宽度的迹线宽度。

th

设置相对于框架高度的迹线高度。

c

设置要跟踪的组件。默认情况下,它跟踪前三个组件。

g

绘制跟踪网格。默认情况下启用。

st

绘制一些统计数据。默认情况下启用。

sc

画出范围。默认情况下启用。

39.182.1 命令

该过滤器支持与选项相同的命令。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.182.2 示例

  • 检查视频帧的完整第一行。
    oscilloscope=x=0.5:y=0:s=1
    
  • 检查视频帧的最后一行。
    oscilloscope=x=0.5:y=1:s=1
    
  • 检查高度为 1080 的视频帧的完整第 5 行。
    oscilloscope=x=0.5:y=5/1080:s=1
    
  • 检查视频帧的最后一列。
    oscilloscope=x=1:y=0.5:s=1:t=1
    

39.183 overlay

将一个视频叠加在另一个视频之上。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。

它接受以下参数:

下面是接受的选项的描述。

x
y

设置主视频上叠加视频的 x 和 y 坐标的表达式。两个表达式的默认值为“0”。如果表达式无效,则会将其设置为一个巨大的值(意味着叠加层不会显示在输出可见区域内)。

eof_action

请参阅帧同步

eval

设置当表达式为X, 和y被评估。

它接受以下值:

init

仅在过滤器初始化期间或处理命令时对表达式求值一次

frame

评估每个传入帧的表达式

默认值为 '框架'。

shortest

请参阅帧同步

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

请参阅帧同步

alpha

设置叠加视频的alpha格式,可以是直接的,也 可以是预乘的。默认是直的

X, 和y表达式可以包含以下参数。

main_w, W
main_h, H

主要输入宽度和高度。

overlay_w, w
overlay_h, h

覆盖输入宽度和高度。

x
y

xy的计算值。针对每个新帧对它们进行评估。

hsub
vsub

输出格式的水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2, vsub为 1。

n

输入帧的编号,从0开始

pos

输入帧在文件中的位置,如果未知则为 NAN;已弃用,请勿使用

t

时间戳,以秒为单位。如果输入时间戳未知,则为 NAN。

该过滤器还支持帧同步选项。

请注意,nt变量仅在每帧进行评估时才可用,并且在以下情况下将评估为 NAN:评估被设定为 '在里面'。

请注意,帧是按时间戳顺序从每个输入视频中获取的,因此,如果它们的初始时间戳不同,最好将两个输入通过 setpts=PTS- STARTPTS过滤器传递,以使它们以相同的零时间戳开始,就像电影过滤器的例子一样。

您可以将更多覆盖链接在一起,但您应该测试这种方法的效率。

39.183.1 命令

该过滤器支持以下命令:

x
y

修改覆盖输入的 x 和 y。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.183.2 示例

  • 在距主视频右下角 10 像素处绘制叠加层:
    overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

    使用命名选项,上面的例子变成:

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
    
  • ffmpeg使用带有以下选项的工具在输入的左下角插入透明的 PNG 徽标-filter_complex
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用以下工具插入 2 个不同的透明 PNG 徽标(第二个徽标位于右下角)ffmpeg
    ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加透明颜色层;WxH 必须指定覆盖过滤器的主输入的大小:
    color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
    
  • ffplay使用该工具 并排播放原始视频和过滤版本(此处带有防抖滤镜) :
    ffplay input.avi -vf 'split[a][b]; [a]pad=iw*2:ih[src]; [b]deshake[filt]; [src][filt]overlay=w'
    

    上面的命令与以下命令相同:

    ffplay input.avi -vf 'split[b], pad=iw*2[src], [b]deshake, [src]overlay=w'
    
  • 从时间 2 开始,制作一个从左到右顶部出现的滑动覆盖层:
    overlay=x='if(gte(t,2), -w+(t-2)*20, NAN)':y=0
    
  • 通过将两个输入视频并排放置来组成输出:
    ffmpeg -i left.avi -i right.avi -filter_complex "
    nullsrc=size=200x100 [background];
    [0:v] setpts=PTS-STARTPTS, scale=100x100 [left];
    [1:v] setpts=PTS-STARTPTS, scale=100x100 [right];
    [background][left]       overlay=shortest=1       [background+left];
    [background+left][right] overlay=shortest=1:x=100 [left+right]
    "
    
  • 通过将 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]
    

39.184 overlay_cuda

将一个视频叠加在另一个视频之上。

这是覆盖过滤器的 CUDA 变体。它只接受 CUDA 帧。底层输入像素格式必须匹配。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。

它接受以下参数:

x
y

设置主视频上叠加视频的 x 和 y 坐标表达式。

它们可以包含以下参数:

main_w, W
main_h, H

主要输入宽度和高度。

overlay_w, w
overlay_h, h

覆盖输入宽度和高度。

x
y

xy的计算值。针对每个新帧对它们进行评估。

n

主输入帧的序数索引,从 0 开始。

pos

主输入帧在文件中的字节偏移位置,如果未知则为 NAN。已弃用,请勿使用。

t

主输入帧的时间戳,以秒表示,如果未知则为 NAN。

两个表达式的默认值为“0”。

eval

设置当表达式为Xy被评估。

它接受以下值:

init

在过滤器初始化期间或处理命令时对表达式求值一次。

frame

评估每个传入帧的表达式

默认值为框架

eof_action

请参阅帧同步

shortest

请参阅帧同步

repeatlast

请参阅帧同步

该过滤器还支持帧同步选项。

39.185 owdenoise

应用过完备小波降噪器。

该过滤器接受以下选项:

depth

设置深度。

深度值越大,低频分量的去噪就越多,但会减慢滤波速度。

必须是 8-16 范围内的 int,默认为8

luma_strength, ls

设置亮度强度。

必须是 0-1000 范围内的双精度值,默认值为1.0

chroma_strength, cs

设置色度强度。

必须是 0-1000 范围内的双精度值,默认值为1.0

39.186 pad

向输入图像添加填充,并将原始输入放置在提供的xy坐标处。

它接受以下参数:

width, w
height, h

指定添加了填充的输出图像尺寸的表达式。如果宽度高度的值为0,则相应的输入尺寸将用于输出。

宽度表达式可以引用高度表达式设置的值 ,反之亦然

宽度高度的默认值为0。

x
y

指定将输入图像放置在填充区域内相对于输出图像的上/左边框的偏移量。

x表达式可以引用y表达式设置的值 ,反之亦然。

xy的默认值为0。

如果xy的计算结果为负数,它们将被更改,以便输入图像位于填充区域的中心。

color

指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

颜色的默认值为“黑色”。

eval

指定何时计算 widthheightxy表达式。

它接受以下值:

init

仅在过滤器初始化期间或处理命令时对表达式求值一次。

frame

评估每个传入帧的表达式。

默认值为 '在里面'。

aspect

填充到宽高比而不是分辨率。

widthheightxy选项的值 是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

它们与in_win_h相同。

out_w
out_h

输出宽度和高度(填充区域的大小),由宽度高度表达式指定。

ow
oh

它们与out_wout_h相同。

x
y

x 和 y 偏移量由xy表达式指定 ,如果尚未指定,则为 NAN。

a

与iw / ih相同

sar

输入样本长宽比

dar

输入显示宽高比,与 ( iw / ih ) * sar相同

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

39.186.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"
    

39.187 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),您可以使用它来评估调色板的颜色量化程度。此信息在信息日志记录级别也可见 。

39.187.1 示例

  • 使用以下命令生成给定视频的代表性调色板ffmpeg
    ffmpeg -i input.mkv -vf palettegen palette.png
    

39.188 paletteuse

使用调色板对输入视频流进行下采样。

该过滤器需要两个输入:一个视频流和一个调色板。调色板必须是 256 像素图像。

它接受以下选项:

dither

选择抖动模式。可用的算法有:

bayer

有序 8x8 拜耳抖动(确定性)

heckbert

Paul Heckbert 在 1982 年定义的抖动(简单误差扩散)。注意:这种抖动有时被认为是“错误的”,并作为参考包含在内。

floyd_steinberg

Floyd 和 Steingberg 抖动(误差扩散)

sierra2

Frankie Sierra 抖动 v2(误差扩散)

sierra2_4a

Frankie Sierra 抖动 v2“Lite”(误差扩散)

sierra3

Frankie Sierra 抖动 v3(误差扩散)

burkes

伯克抖动(误差扩散)

atkinson

Apple Computer 的 Bill Atkinson 提出的阿特金森抖动(误差扩散)

none

禁用抖动。

默认为sierra2_4a

bayer_scale

当选择拜耳抖动时,此选项定义图案的比例(剖面线图案的可见程度)。较低的值意味着图案更明显,条带更少,而较高的值意味着图案更不可见,但条带更多。

该选项必须是 [0,5] 范围内的整数值。默认值为2

diff_mode

如果设置,则定义要处理的区域

rectangle

只有变化的矩形才会被重新处理。这类似于 GIF 裁剪/偏移压缩机制。如果仅图像的一部分发生变化,并且具有限制误差扩散范围等用例,则此选项对于提高速度很有用抖动到限制移动场景的矩形(如果场景变化不大,它会产生更具确定性的输出,从而减少移动噪声并获得更好的 GIF 压缩)。

默认为

new

为每个输出帧采用新的调色板。

alpha_threshold

设置透明度的 Alpha 阈值。高于此阈值的 Alpha 值将被视为完全不透明,低于此阈值的值将被视为完全透明。

该选项必须是 [0,255] 范围内的整数值。默认值为128

39.188.1 示例

  • 使用调色板(例如使用Palettegen生成)对 GIF 进行编码ffmpeg
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

39.189 perspective

未垂直于屏幕录制的视频的正确视角。

下面是接受参数的描述。

x0
y0
x1
y1
x2
y2
x3
y3

设置左上角、右上角、左下角、右下角的坐标表达式。默认值是0:0:W:0:0:H:W:H视角保持不变的值。如果该sense选项设置为source,则指定的点将被发送到目的地的角点。如果该sense选项设置为destination,则源的角点将被发送到指定的坐标。

表达式可以使用以下变量:

W
H

视频帧的宽度和高度。

in

输入帧数。

on

输出帧数。

interpolation

设置透视校正的插值。

它接受以下值:

linear
cubic

默认值为 '线性'。

sense

设置坐标选项的解释。

它接受以下值:

0, source

将给定坐标指定的源中的点发送到目标的角点。

1, destination

将源的角发送到给定坐标指定的目标中的点。

默认值为 '来源'。

eval

设置坐标表达式x0,y0,...x3,y3被评估。

它接受以下值:

init

仅在过滤器初始化期间或处理命令时对表达式求值一次

frame

评估每个传入帧的表达式

默认值为 '在里面'。

39.190 phase

将隔行扫描视频延迟一场时间,以便改变场序。

预期用途是修复以与胶片到视频传输相反的场序捕获的 PAL 影片。

下面是接受参数的描述。

mode

设置相位模式。

它接受以下值:

t

捕获场顺序从上到下,传输从下到上。滤波器将延迟底部场。

b

捕获字段顺序为底部优先,传输顶部优先。过滤器将延迟顶场。

p

使用相同的场序进行捕获和传输。这种模式的存在只是为了其他选项的文档参考,但如果你真的选择它,过滤器将忠实地什么都不做。

a

捕获字段顺序由字段标志自动确定,传输相反。过滤器选择 't' 和 '' 使用字段标志逐帧模式。如果没有可用的字段信息,那么这就像''。

u

捕捉未知或变化,转移相反。过滤器选择 't' 和 '”通过分析图像并选择在场之间产生最佳匹配的替代方案,逐帧进行。

T

捕获顶部优先,传输未知或变化。过滤器选择 't' 和 'p'使用图像分析。

B

从底部开始捕获,传输未知或变化。过滤器选择 '' 和 'p'使用图像分析。

A

捕获由字段标志确定,传输未知或变化。过滤器选择 't','' 和 'p' 使用字段标志和图像分析。如果没有可用的字段信息,那么这就像'U'。这是默认模式。

U

捕获和转移均未知或变化。过滤器选择 't','' 和 'p' 仅使用图像分析。

39.190.1 命令

该过滤器支持以上所有选项作为命令

39.191 photosensitivity

减少视频中的各种闪烁,从而帮助患有癫痫症的用户。

它接受以下选项:

frames, f

设置过滤时使用的帧数。默认值为 30。

threshold, t

设置检测阈值因子。默认值为 1。越低越严格。

skip

设置采样帧时要跳过的像素数。默认值为 1。允许的范围为 1 到 1024。

bypass

保持框架不变。默认为禁用。

39.192 pixdesctest

像素格式描述符测试过滤器,主要用于内部测试。输出视频应等于输入视频。

例如:

format=monow, pixdesctest

可用于测试单色像素格式描述符定义。

39.193 pixelize

将像素化应用于视频流。

该过滤器接受以下选项:

width, w
height, h

设置将用于像素化的块尺寸。默认值为16

mode, m

设置所使用的像素化模式。

可能的值为:

avg
min
max

默认值为avg

planes, p

设置要过滤的平面。默认是过滤所有平面。

39.193.1 命令

该过滤器支持所有选项作为命令

39.194 pixscope

显示颜色通道的样本值。主要用于检查颜色和级别。支持的最低分辨率为 640x480。

过滤器接受以下选项:

x

设置示波器 X 位置、X 轴上的相对偏移量。

y

设置示波器 Y 位置、Y 轴上的相对偏移量。

w

设置范围宽度。

h

设置范围高度。

o

设置窗口的不透明度。该窗口还保存有关像素区域的统计信息。

wx

设置窗口 X 位置、X 轴相对偏移。

wy

设置窗口 Y 位置、Y 轴相对偏移。

39.194.1 命令

该过滤器支持与选项相同的命令

39.195 pp

使用 libpostproc 启用指定的后处理子过滤器链。该库应通过 GPL 版本自动选择 ( --enable-gpl)。子过滤器必须用“/”分隔,并且可以通过在前面添加“-”来禁用。每个子过滤器和一些选项都有一个可以互换使用的短名称和长名称,即 dr/dering 是相同的。

过滤器接受以下选项:

subfilters

设置后处理子过滤器字符串。

所有子过滤器共享通用选项来确定其范围:

a/autoq

遵守此子过滤器的质量命令。

c/chrom

也进行色度过滤(默认)。

y/nochrom

仅进行亮度过滤(无色度)。

n/noluma

仅进行色度过滤(无亮度)。

这些选项可以附加在子过滤器名称之后,并用“|”分隔。

可用的子过滤器有:

hb/hdeblock[|difference[|flatness]]

水平去块效应滤波器

difference

差异因子,值越高意味着去块效应越多(默认值:32)。

flatness

平坦度阈值,较低的值意味着更多的去块效应(默认值:39)。

vb/vdeblock[|difference[|flatness]]

垂直去块效应滤波器

difference

差异因子,值越高意味着去块效应越多(默认值:32)。

flatness

平坦度阈值,较低的值意味着更多的去块效应(默认值:39)。

ha/hadeblock[|difference[|flatness]]

精确的水平去块效应滤波器

difference

差异因子,值越高意味着去块效应越多(默认值:32)。

flatness

平坦度阈值,较低的值意味着更多的去块效应(默认值:39)。

va/vadeblock[|difference[|flatness]]

精确的垂直去块效应滤波器

difference

差异因子,值越高意味着去块效应越多(默认值:32)。

flatness

平坦度阈值,较低的值意味着更多的去块效应(默认值:39)。

水平和垂直去块效应滤波器共享差异和平坦度值,因此您无法设置不同的水平和垂直阈值。

h1/x1hdeblock

实验性水平去块效应滤波器

v1/x1vdeblock

实验性垂直去块效应滤波器

dr/dering

除振铃过滤器

tn/tmpnoise[|threshold1[|threshold2[|threshold3]]], temporal noise reducer
threshold1

更大 -> 更强的过滤

threshold2

更大 -> 更强的过滤

threshold3

更大 -> 更强的过滤

al/autolevels[:f/fullyrange], automatic brightness / contrast correction
f/fullyrange

将亮度拉伸至0-255.

lb/linblenddeint

线性混合去隔行滤波器,通过使用滤波器过滤所有行来对给定块进行去隔行(1 2 1)

li/linipoldeint

线性插值去隔行滤波器,通过每隔一行线性插值来对给定块进行去隔行。

ci/cubicipoldeint

三次插值去隔行滤波器通过对每隔一行进行三次插值来对给定块进行去隔行。

md/mediandeint

中值去隔行滤波器,通过对每隔一行应用中值滤波器来对给定块进行去隔行。

fd/ffmpegdeint

FFmpeg 去隔行过滤器,通过使用过滤器过滤每隔一行来对给定块进行去隔行(-1 4 2 4 -1)

l5/lowpass5

垂直应用的 FIR 低通去隔行滤波器,通过使用滤波器过滤所有行来对给定块进行去隔行(-1 2 6 2 -1)

fq/forceQuant[|quantizer]

使用您指定的常量量化器覆盖输入中的量化器表。

quantizer

使用的量化器

de/default

默认 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)

39.195.1 示例

  • 应用水平和垂直去块效应、去振铃和自动亮度/对比度:
    pp=hb/vb/dr/al
    
  • 应用默认滤镜而不进行亮度/对比度校正:
    pp=de/-al
    
  • 应用默认滤波器和时间降噪器:
    pp=default/tmpnoise|1|2|3
    
  • 仅对亮度应用去块效应,并根据可用的 CPU 时间自动打开或关闭垂直去块效应:
    pp=hb|y/vb|a
    

39.196 pp7

应用后处理滤波器 7。它是spp滤波器的变体,类似于具有 7 点 DCT 的 spp = 6,其中在 IDCT 后仅使用中心样本。

该过滤器接受以下选项:

qp

强制使用恒定的量化参数。它接受 0 到 63 范围内的整数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式有:

hard

设置硬阈值。

soft

设置软阈值(更好的去振铃效果,但可能更模糊)。

medium

设置中等阈值(良好结果,默认)。

39.197 premultiply

使用第二个流的第一个平面作为 Alpha 将 Alpha 预乘效果应用于输入视频流。

两个流必须具有相同的尺寸和相同的像素格式。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

39.198 prewitt

将 prewitt 运算符应用于输入视频流。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.198.1 命令

该过滤器支持以上所有选项作为命令

39.199 pseudocolor

使用伪彩色更改视频中的帧颜色。

该过滤器接受以下选项:

c0

设置像素第一分量表达式

c1

设置像素第二分量表达式

c2

设置像素第三分量表达式

c3

设置像素第四分量表达式,对应alpha分量

index, i

设置用作更改颜色基础的组件

preset, p

选择内置 LUT 之一。默认设置为无。

可用的 LUT:

magma
inferno
plasma
viridis
turbo
cividis
range1
range2
shadows
highlights
solar
nominal
preferred
total
spectral
cool
heat
fiery
blues
green
helix
opacity

设置输出颜色的不透明度。允许的范围为 0 到 1。默认值设置为 1。

每个表达式选项指定用于计算相应像素分量值的查找表的表达式。

表达式可以包含以下常量和函数:

w
h

输入的宽度和高度。

val

像素分量的输入值。

ymin, umin, vmin, amin

允许的最小元件值。

ymax, umax, vmax, amax

最大允许组件值。

所有表达式默认为“val”。

39.199.1 命令

该过滤器支持以上所有选项作为命令

39.199.2 示例

  • 将过高的亮度值更改为渐变:
    pseudocolor="'if(between(val,ymax,amax),lerp(ymin,ymax,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(umax,umin,(val-ymax)/(amax-ymax)),-1):if(between(val,ymax,amax),lerp(vmin,vmax,(val-ymax)/(amax-ymax)),-1):-1'"
    

39.200 psnr

获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。

该过滤器接受两个输入视频作为输入,第一个输入被视为“主要”源,并且原封不动地传递到输出。第二个输入用作计算 PSNR 的“参考”视频。

两个视频输入必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

获得的平均PSNR通过日志系统打印出来。

滤波器存储每帧的累积 MSE(均方误差),并在处理结束时对所有帧进行平均,并应用以下公式获得 PSNR:

PSNR = 10*log10(MAX^2/MSE)

其中 MAX 是图像每个分量最大值的平均值。

接受的参数的描述如下。

stats_file, f

如果指定,过滤器将使用指定的文件来保存每个单独帧的 PSNR。当文件名等于“-”时,数据将发送到标准输出。

stats_version

指定要使用哪个版本的统计文件格式。每种格式的详细信息如下。默认值为 1。

stats_add_max

确定是否将最大值输出到统计日志中。默认值为 0。需要 stats_version >= 2。如果设置了此值并且 stats_version < 2,过滤器将返回错误。

该过滤器还支持帧同步选项。

如果选择stats_file ,则打印的文件包含一系列键/值对,其形式为key : value对于每个比较的帧对。

如果指定的stats_version大于 1,则标题行位于每帧对统计信息列表之前,键值对遵循帧格式,并具有以下参数:

psnr_log_version

日志文件格式的版本。将匹配stats_version

fields

日志中包含的每帧对参数的逗号分隔列表。

每个显示的每帧对参数的描述如下:

n

输入帧的序号,从1开始

mse_avg

均方误差 比较帧的逐像素平均差异,对所有图像组件进行平均。

mse_y, mse_u, mse_v, mse_r, mse_g, mse_b, mse_a

均方误差后缀指定的组件的比较帧的逐像素平均差异。

psnr_y, psnr_u, psnr_v, psnr_r, psnr_g, psnr_b, psnr_a

后缀指定的组件的比较帧的峰值信噪比。

max_avg, max_y, max_u, max_v

每个通道的最大允许值以及所有通道的平均值。

39.200.1 示例

  • 例如:
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] psnr="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件进行比较ref_movie.mpg。每个单独帧的 PSNR 存储在统计日志

  • 另一个使用不同容器的示例:
    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 -
    

39.201 pullup

下拉反转(逆电视电影)滤波器,能够处理混合硬电视电影、24000/1001 fps 逐行扫描和 30000/1001 fps 逐行扫描内容。

上拉过滤器旨在利用未来的上下文来做出决策。该过滤器是无状态的,因为它不锁定要遵循的模式,而是期待以下字段以识别匹配并重建渐进帧。

要生成具有均匀帧速率的内容,请在上拉后插入 fps 过滤器,fps=24000/1001如果输入帧速率为 29.97fps, 则使用fps=2430fps 和(罕见的)电视电影 25fps 输入。

该过滤器接受以下选项:

jl
jr
jt
jb

这些选项分别设置图像左侧、右侧、顶部和底部要忽略的“垃圾”数量。左右以8像素为单位,上下以2行为单位。默认值为每边 8 个像素。

sb

设置严格的休息时间。将此选项设置为 1 将减少滤波器生成偶尔不匹配帧的机会,但也可能导致在高速运动序列期间丢弃过多的帧。相反,将其设置为-1将使过滤器匹配字段更容易。这可能有助于处理场之间有轻微模糊的视频,但也可能导致输出中出现隔行帧。默认值为0

mp

设置要使用的公制平面。它接受以下值:

l

使用亮度平面。

u

使用色度蓝色平面。

v

使用色度红平面。

该选项可以设置为使用色度平面而不是默认的亮度平面来进行滤波器的计算。这可能会提高非常干净的源材料的准确性,但更有可能会降低准确性,特别是在存在色度噪声(彩虹效应)或任何灰度视频的情况下。设置的主要目的议员色度平面的目的是减少 CPU 负载并使上拉可以在慢速机器上实时使用。

为了获得最佳结果(输出文件中没有重复的帧),有必要更改输出帧速率。例如,要反转电视电影 NTSC 输入:

ffmpeg -i input -vf pullup -r 24000/1001 ...

39.202 qp

更改视频量化参数 (QP)。

过滤器接受以下选项:

qp

设置量化参数的表达式。

该表达式通过 eval API 进行计算,并且可以包含以下常量:

known

如果索引不是 129,则为 1,否则为 0。

qp

从-129到128开始的顺序索引。

39.202.1 示例

  • 一些等式:
    qp=2+2*sin(PI*qp)
    

39.203 random

将视频帧从内部帧缓存刷新为随机顺序。没有帧被丢弃。受到frei0r神经过滤器的启发。

frames

设置内部缓存的帧数大小,范围为2512。默认为30.

seed

0为随机数生成器设置种子,必须是和之间的整数 UINT32_MAX。如果未指定,或者明确设置为小于0,过滤器将尽力使用良好的随机种子。

39.204 readeia608

从视频帧的顶行读取隐藏式字幕 (EIA-608) 信息。

lavfi.readeia608.X.cc此过滤器添加和 的帧元数据lavfi.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

进一步处理之前的低通线。默认启用。

39.204.1 命令

该过滤器支持以上所有选项作为命令

39.204.2 示例

  • 输出包含演示时间和已识别的 EIA-608 字幕数据的前两行的 csv。
    ffprobe -f lavfi -i movie=captioned_video.mov,readeia608 -show_entries frame=pts_time:frame_tags=lavfi.readeia608.0.cc,lavfi.readeia608.1.cc -of csv
    

39.205 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

39.205.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'
    

39.206 remap

使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。

位置 (X, Y) 处的目标像素将从源 (x, y) 位置拾取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则像素的零值将用于目标像素。

Xmap 和 Ymap 输入视频流的尺寸必须相同。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap 和 Ymap 输入视频流为 16 位深度、单通道。

format

指定此过滤器输出的像素格式。可以是colorgray. 默认为color.

fill

指定未映射像素的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认颜色是black.

39.207 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类似。

39.208 removelogo

抑制电视台徽标,使用图像文件来确定哪些像素包含徽标。它的工作原理是用相邻像素填充构成徽标的像素。

该过滤器接受以下选项:

filename, f

设置滤镜位图文件,可以是libavformat支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流的宽度和高度相匹配。

所提供的位图图像中值为零的像素不被视为徽标的一部分,非零像素被视为徽标的一部分。如果徽标使用白色 (255),其余部分使用黑色 (0),那么您将是安全的。为了制作滤镜位图,建议对徽标可见的黑框进行屏幕截图,然后使用阈值滤镜,然后使用侵蚀滤镜一次或两次。

如果需要,可以手动修复小斑点。请记住,如果徽标像素未被覆盖,过滤器质量将会大大降低。将太多像素标记为徽标的一部分不会造成太大伤害,但会增加覆盖图像所需的模糊量,并会破坏比必要的更多信息,并且额外的像素会减慢大型徽标的速度。

39.209 repeatfields

此过滤器使用视频 ES 标头中的重复字段标志和基于其值的硬重复字段。

39.210 reverse

反转视频剪辑。

警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行修剪。

39.210.1 示例

  • 获取剪辑的前 5 秒并将其反转。
    trim=end=5,reverse
    

39.211 rgbashift

水平和/或垂直移动 R/G/B/A 像素。

该过滤器接受以下选项:

rh

设置水平移动红色的量。

rv

设置垂直移动红色的量。

gh

设置水平移动绿色的量。

gv

设置垂直移动绿色的量。

bh

设置水平移动蓝色的量。

bv

设置垂直移动蓝色的量。

ah

设置水平移动 alpha 的量。

av

设置垂直移动 alpha 的量。

edge

设置边缘模式,可以是smear、 default 或warp

39.211.1 命令

该过滤器支持以上所有选项作为命令

39.212 roberts

将罗伯茨交叉运算符应用于输入视频流。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.212.1 命令

该过滤器支持以上所有选项作为命令

39.213 rotate

将视频旋转任意角度(以弧度表示)。

该过滤器接受以下选项:

下面是可选参数的描述。

angle, a

设置顺时针旋转输入视频的角度表达式,以弧度数表示。负值将导致逆时针旋转。默认情况下它设置为“0”。

该表达式针对每一帧进行计算。

out_w, ow

设置输出宽度表达式,默认值为“iw”。该表达式在配置期间仅计算一次。

out_h, oh

设置输出高度表达式,默认值为“ih”。该表达式在配置期间仅计算一次。

bilinear

如果设置为 1,则启用双线性插值;如果设置为 0,则禁用双线性插值。默认值为 1。

fillcolor, c

设置用于填充旋转图像未覆盖的输出区域的颜色。有关此选项的一般语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果从不显示背景,则很有用)。

默认值为“黑色”。

角度和输出尺寸的表达式可以包含以下常量和函数:

n

输入帧的序号,从0开始。在第一帧被过滤之前始终为NAN。

t

输入帧的时间(以秒为单位),配置过滤器时将其设置为 0。在第一帧被过滤之前它总是NAN。

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

in_w, iw
in_h, ih

输入视频的宽度和高度

out_w, ow
out_h, oh

输出宽度和高度,即由宽度高度表达式 指定的填充区域的大小

rotw(a)
roth(a)

完全包含旋转弧度的输入视频所需的最小宽度/高度

这些仅在计算时可用输出输出_h表达式。

39.213.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
    

39.213.2 命令

过滤器支持以下命令:

a, angle

设置角度表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.214 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 范围内的值。

如果未明确指定,每个色度选项值都会设置为相应的亮度选项值。

39.215 scale

使用 libswscale 库缩放(调整大小)输入视频。

比例过滤器通过更改输出样本宽高比,强制输出显示宽高比与输入相同。

如果输入图像格式与下一个过滤器请求的格式不同,则缩放过滤器会将输入转换为请求的格式。

39.215.1 选项

该过滤器接受以下选项,或 libswscale 缩放器支持的任何选项。

有关缩放器选项的完整列表, 请参阅(ffmpeg-scaler)ffmpeg-scaler 手册。

width, w
height, h

设置输出视频尺寸表达式。默认值是输入尺寸。

如果宽度w值为 0,则输入宽度用于输出。如果heighth值为 0,则输入高度将用于输出。

如果其中一个且只有一个值是 -n 并且 n >= 1,则缩放过滤器将使用一个值来维持输入图像的纵横比(根据其他指定维度计算)。然而,之后它将确保计算出的尺寸可被 n 整除,并在必要时调整该值。

如果两个值都是 -n 并且 n >= 1,则行为将与前面详述的两个值都设置为 0 相同。

请参阅下面的维度表达式中可接受的常量列表。

eval

指定何时计算宽度高度表达式。它接受以下值:

init

仅在过滤器初始化期间或处理命令时对表达式求值一次。

frame

评估每个传入帧的表达式。

默认值为 '在里面'。

interl

设置隔行扫描模式。它接受以下值:

1

强制隔行感知缩放。

0

不要应用隔行缩放。

-1

根据源帧是否标记为隔行扫描来选择隔行扫描感知缩放。

默认值为 '0'。

flags

设置 libswscale 缩放标志。请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册以获取完整的值列表。如果没有明确指定,过滤器将应用默认标志。

param0, param1

为需要它们的缩放算法设置 libswscale 输入参数。有关完整文档,请参阅 (ffmpeg-scaler)ffmpeg-scaler 手册。如果没有明确指定,过滤器将应用空参数。

size, s

设置视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

in_color_matrix
out_color_matrix

设置输入/输出 YCbCr 色彩空间类型。

这允许覆盖自动检测到的值,并允许强制将特定值用于输出和编码器。

如果未指定,颜色空间类型取决于像素格式。

可能的值:

auto

自动选择。

bt709

格式符合国际电信联盟 (ITU) 建议 BT.709。

fcc

设置符合美国联邦通信委员会 (FCC) 联邦法规 (CFR) Title 47 (2003) 73.682 (a) 的色彩空间。

bt601
bt470
smpte170m

设置色彩空间符合:

  • 国际电联无线电通信部门(ITU-R)建议书 BT.601
  • ITU-R 建议书。BT.470-6 (1998) 系统 B、B1 和 G
  • 电影电视工程师协会 (SMPTE) ST 170:2004
smpte240m

设置符合 SMPTE ST 240:1999 的色彩空间。

bt2020

设置符合 ITU-R BT.2020 非恒定亮度系统的色彩空间。

in_range
out_range

设置输入/输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制将特定值用于输出和编码器。如果未指定,则范围取决于像素格式。可能的值:

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(8 位亮度时为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(8 位亮度时为 16-235)。

force_original_aspect_ratio

如有必要,启用减小或增加输出视频宽度或高度以保持原始宽高比。可能的值:

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,您可以使用它来限制输出视频,同时保留宽高比。例如,设备 A 允许播放 1280x720,而您的视频为 1920x800。使用此选项(将其设置为减小)并向命令行指定 1280x720 将使输出变为 1280x533。

请注意,这与指定 -1 是不同的w 或者H,您仍然需要指定输出分辨率才能使该选项起作用。

force_divisible_by

确保与以下命令一起使用时,输出尺寸(宽度和高度)均可被给定整数整除力原始纵横比-n这与在中使用类似wH选项。

该选项遵循设置的值力原始纵横比,相应地增加或减少分辨率。视频的长宽比可能会略有修改。

如果您需要使视频适合或超过定义的分辨率,则此选项会很方便力原始纵横比但编码器对宽度或高度的可分性也有限制。

的价值观wH选项是包含以下常量的表达式:

in_w
in_h

输入的宽度和高度

iw
ih

它们与in_win_h相同。

out_w
out_h

输出(缩放)宽度和高度

ow
oh

这些与out_wout_h相同

a

与iw / ih相同

sar

输入样本长宽比

dar

输入显示宽高比。计算自(iw / ih) * sar.

hsub
vsub

水平和垂直输入色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

ohsub
ovsub

水平和垂直输出色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

n

输入帧的(连续)编号,从 0 开始。仅适用于eval=frame

t

输入帧的呈现时间戳,以秒数表示。仅适用于eval=frame.

pos

输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于eval=frame. 已弃用,请勿使用。

39.215.2 示例

  • 将输入视频缩放至 200x100 的大小
    scale=w=200:h=100
    

    这相当于:

    scale=200:100
    

    或者:

    scale=200x100
    
  • 指定输出大小的大小缩写:
    scale=qcif
    

    也可以写成:

    scale=size=qcif
    
  • 将输入缩放至 2 倍:
    scale=w=2*iw:h=2*ih
    
  • 上面的内容等同于:
    scale=2*in_w:2*in_h
    
  • 使用强制隔行缩放将输入缩放至 2 倍:
    scale=2*iw:2*ih:interl=1
    
  • 将输入缩放到一半大小:
    scale=w=iw/2:h=ih/2
    
  • 增加宽度,并将高度设置为相同大小:
    scale=3/2*iw:ow
    
  • 寻求希腊和谐:
    scale=iw:1/PHI*iw
    scale=ih*PHI:ih
    
  • 增加高度,并将宽度设置为高度的 3/2:
    scale=w=3/2*oh:h=3/5*ih
    
  • 增加大小,使大小成为色度子样本值的倍数:
    scale="trunc(3/2*iw/hsub)*hsub:trunc(3/2*ih/vsub)*vsub"
    
  • 将宽度增加到最大 500 像素,并保持与输入相同的宽高比:
    scale=w='min(500\, iw*3/2):h=-1'
    
  • 通过组合scale和setsar使像素成为正方形:
    scale='trunc(ih*dar):ih',setsar=1/1
    
  • 通过组合scale和setsar使像素成为正方形,确保生成的分辨率均匀(某些编解码器需要):
    scale='trunc(ih*dar/2)*2:trunc(ih/2)*2',setsar=1/1
    

39.215.3 命令

该过滤器支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.216 scale_cuda

使用加速的 CUDA 内核缩放(调整大小)和转换(像素格式)输入视频。设置输出宽度和高度的工作方式与缩放过滤器相同。

该过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值是输入尺寸。

允许使用与比例过滤器相同的表达式。

interp_algo

设置用于缩放的算法:

nearest

最近邻居

如果输入参数与所需输出匹配,则默认使用。

bilinear

双线性

bicubic

双三次

这是默认设置。

lanczos

兰佐斯

format

控制输出像素格式。默认情况下,或者如果未指定,则使用输入像素格式。

该滤镜不支持 YUV 和 RGB 像素格式之间的转换。

passthrough

如果设置为 0,即使不需要转换,也会处理每个帧。此模式可用于将过滤器用作耗尽有限解码器帧池的下游帧消费者的缓冲区。

如果设置为 1,如果帧与所需的输出参数匹配,则帧将按原样传递。这是默认行为。

param

算法特定的参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

与相同的比例过滤器选项的工作方式相同。

39.216.1 示例

  • 将输入缩放至 720p,保持宽高比并确保输出为 yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻算法升级至 4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不进行任何转换或缩放,而是将所有输入帧复制到新分配的帧中。这对于处理过滤器和编码链非常有用,否则会耗尽解码器帧池。
    scale_cuda=passthrough=0
    

39.217 scale_npp

使用 NVIDIA 性能基元 (libnpp) 对 CUDA 视频帧执行缩放和/或像素格式转换。设置输出宽度和高度的工作方式与缩放过滤器相同。

接受以下附加选项:

format

输出 CUDA 帧的像素格式。如果设置为字符串“same”(默认),则将保留输入格式。请注意,硬件帧尚不支持自动格式协商和转换

interp_algo

用于调整大小的插值算法。以下之一:

nn

最近的邻居。

linear
cubic
cubic2p_bspline

2 参数三次 (B=1, C=0)

cubic2p_catmullrom

2 参数三次 (B=0, C=1/2)

cubic2p_b05c03

2 参数三次 (B=1/2, C=3/10)

super

超级采样

lanczos
force_original_aspect_ratio

如有必要,启用减小或增加输出视频宽度或高度以保持原始宽高比。可能的值:

disable

按指定缩放视频并禁用此功能。

decrease

如果需要,输出视频尺寸将自动减小。

increase

如果需要,输出视频尺寸将自动增加。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,您可以使用它来限制输出视频,同时保留宽高比。例如,设备 A 允许播放 1280x720,而您的视频为 1920x800。使用此选项(将其设置为减小)并向命令行指定 1280x720 将使输出变为 1280x533。

请注意,这与指定 -1 是不同的w 或者H,您仍然需要指定输出分辨率才能使该选项起作用。

force_divisible_by

确保与以下命令一起使用时,输出尺寸(宽度和高度)均可被给定整数整除力原始纵横比-n这与在中使用类似wH选项。

该选项遵循设置的值力原始纵横比,相应地增加或减少分辨率。视频的长宽比可能会略有修改。

如果您需要使视频适合或超过定义的分辨率,则此选项会很方便力原始纵横比但编码器对宽度或高度的可分性也有限制。

eval

指定何时计算宽度高度表达式。它接受以下值:

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. 已弃用,请勿使用。

39.218 scale2ref

根据参考视频缩放(调整大小)输入视频。

请参阅比例过滤器以了解可用选项,scale2ref 支持相同的功能,但使用参考视频而不是主输入作为基础。scale2ref 还支持以下附加常量wH选项:

main_w
main_h

主输入视频的宽度和高度

main_a

与main_w / main_h相同

main_sar

主输入视频的样本宽高比

main_dar, mdar

主输入视频的显示宽高比。计算自 (main_w / main_h) * main_sar.

main_hsub
main_vsub

主输入视频的水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub 为 1。

main_n

主输入帧的(连续)编号,从 0 开始。仅适用于eval=frame

main_t

主输入帧的呈现时间戳,以秒数表示。仅适用于eval=frame.

main_pos

主输入流中帧的位置(字节偏移量),如果此信息不可用和/或无意义(例如在合成视频的情况下),则为 NaN。仅适用于eval=frame.

39.218.1 示例

  • 在叠加之前缩放字幕流 (b) 以匹配主视频 (a) 的大小
    'scale2ref[b][a];[a][b]overlay'
    
  • 将徽标缩放至视频高度的 1/10,同时保留其显示纵横比。
    [logo-in][video-in]scale2ref=w=oh*mdar:h=ih/10[logo-out][video-out]
    

39.218.2 命令

该过滤器支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

39.219 scale2ref_npp

使用 NVIDIA 性能基元 (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.

39.219.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]
    

39.220 scale_vt

使用 VTPixelTransferSession 缩放和转换颜色参数。

该过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值是输入尺寸。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出原色。

color_transfer

设置输出传输特性。

39.221 scharr

将 scharr 运算符应用于输入视频流。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.221.1 命令

该过滤器支持以上所有选项作为命令

39.222 scroll

以恒定速度水平和/或垂直滚动​​输入视频。

该过滤器接受以下选项:

horizontal, h

设置水平滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会更改滚动方向。

vertical, v

设置垂直滚动速度。默认值为 0。允许的范围为 -1 到 1。负值会更改滚动方向。

hpos

设置初始水平滚动位置。默认值为 0。允许的范围为 0 到 1。

vpos

设置初始垂直滚动位置。默认值为 0。允许的范围为 0 到 1。

39.222.1 命令

该过滤器支持以下命令

horizontal, h

设置水平滚动速度。

vertical, v

设置垂直滚动速度。

39.223 scdet

检测视频场景变化。

该过滤器使用帧之间的 mafd 设置帧元数据、场景分数,并将帧转发到下一个过滤器,以便他们可以使用这些元数据来检测场景更改或其他。

此外,当该过滤器检测到场景变化时,它会记录一条消息并设置帧元数据临界点

lavfi.scd.mafd元数据键是使用 mafd 为每一帧设置的。

lavfi.scd.score元数据键设置有每帧的场景变化分数,以检测场景变化。

lavfi.scd.time元数据键设置为当前过滤的帧时间,检测场景变化临界点

该过滤器接受以下选项:

threshold, t

将场景变化检测阈值设置为最大变化的百分比。良好的值在该[8.0, 14.0]范围内。范围为临界点[0., 100.]

默认值为10.

sc_pass, s

设置标志以将场景更改帧传递到下一个过滤器。默认值是0 如果您只想获取场景变化帧的快照,可以启用它。

39.224 selectivecolor

将青色、品红色、黄色和黑色 (CMYK) 调整为特定的颜色范围(例如“红色”、“黄色”、“绿色”、“青色”...)。调整范围由颜色的“纯度”(即它的饱和度)定义。

此滤镜类似于 Adob​​e Photoshop 的选择性颜色工具。

该过滤器接受以下选项:

correction_method

选择色彩校正方法。

可用值为:

absolute

指定的调整“按原样”应用(添加/减去原始像素分量值)。

relative

指定的调整是相对于原始组件值的。

默认为absolute.

reds

红色像素的调整(红色分量最大的像素)

yellows

黄色像素的调整(蓝色分量最小的像素)

greens

绿色像素的调整(绿色分量最大的像素)

cyans

青色像素的调整(红色分量最小的像素)

blues

蓝色像素的调整(蓝色分量最大的像素)

magentas

洋红色像素的调整(绿色分量最小的像素)

whites

白色像素的调整(所有分量都大于 128 的像素)

neutrals

除纯黑和纯白之外的所有像素的调整

blacks

黑色像素的调整(所有分量都小于 128 的像素)

psfile

.asv指定要从中导入设置的 Photoshop 选择性颜色文件 ( )。

所有调整设置(红人,黄色, ...) 接受 [-1,1] 范围内最多 4 个空格分隔的浮点调整值,分别调整其范围内像素的青色、品红色、黄色和黑色量。

39.224.1 示例

  • 在每个绿色区域中将青色增加 50%,将黄色减少 33%,在蓝色区域中将洋红色增加 27%:
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用 Photoshop 选择性颜色预设:
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

39.225 separatefields

separatefields采用基于帧的视频输入,并将每个帧分割为其组件字段,生成一个新的半高剪辑,其帧速率和帧数都是两倍。

该过滤器使用帧中的场主导信息来决定每对场中的哪一个首先放置在输出中。如果出现错误,请在过滤器之前使用setfieldseparatefields过滤器。

39.226 setdar, setsar

过滤setdar器设置过滤器输出视频的显示宽高比。

这是通过根据以下等式更改指定的样本(也称为像素)长宽比来完成的:

DAR = HORIZONTAL_RESOLUTION / VERTICAL_RESOLUTION * SAR

请记住,setdar过滤器不会修改视频帧的像素尺寸。此外,由该过滤器设置的显示纵横比可能会被过滤器链中的后续过滤器更改,例如在缩放的情况下或者如果应用另一个“setdar”或“setsar”过滤器。

过滤setsar器设置过滤器输出视频的样本(也称为像素)长宽比。

请注意,由于应用此过滤器,输出显示宽高比将根据上面的等式发生变化。

请记住,setsar 过滤器设置的样本纵横比可能会被过滤器链中后面的过滤器更改,例如,如果应用另一个“setsar”或“setdar”过滤器。

它接受以下参数:

r, ratio, dar (setdar only), sar (setsar only)

设置滤镜使用的纵横比。

参数可以是浮点数字符串,也可以是表达式。如果未指定该参数,则假定值“0”,这意味着使用相同的输入值。

max

设置将表示的纵横比简化为有理数时用于表示分子和分母的最大整数值。默认值为100

参数sar是一个包含以下常量的表达式:

w, h

输入的宽度和高度。

a

与w / h相同。

sar

输入样本的长宽比。

dar

输入显示宽高比。它与 ( w / h ) * sar相同。

hsub, vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

39.226.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
    

39.227 setfield

输出视频帧的力场。

过滤setfield器标记输出帧的交错类型字段。fieldorder它不会更改输入帧,而只会设置相应的属性,这会影响后续过滤器(例如或)处理该帧的方式yadif

该过滤器接受以下选项:

mode

可用值为:

auto

保持相同的字段属性。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为渐进式。

39.228 setparams

输出视频帧的强制帧参数。

过滤setparams器标记输出帧的交错和颜色范围。它不会更改输入帧,而只会设置相应的属性,这会影响过滤器/编码器处理帧的方式。

field_mode

可用值为:

auto

保持相同的字段属性(默认)。

bff

将帧标记为底场优先。

tff

将帧标记为顶场优先。

prog

将帧标记为渐进式。

range

可用值为:

auto

保持相同的颜色范围属性(默认)。

unspecified, unknown

将框架标记为未指定的颜色范围。

limited, tv, mpeg

将框架标记为有限范围。

full, pc, jpeg

将帧标记为全范围。

color_primaries

设置原色。可用值为:

auto

保持相同的原色属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
color_trc

设置颜色传输。可用值为:

auto

保持相同的颜色 trc 属性(默认)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
linear
log100
log316
iec61966-2-4
bt1361e
iec61966-2-1
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
colorspace

设置色彩空间。可用值为:

auto

保持相同的色彩空间属性(默认)。

gbr
bt709
unknown
fcc
bt470bg
smpte170m
smpte240m
ycgco
bt2020nc
bt2020c
smpte2085
chroma-derived-nc
chroma-derived-c
ictcp

39.229 sharpen_npp

使用 NVIDIA 性能基元 (libnpp) 通过边界控制执行图像锐化。

接受以下附加选项:

border_type

广告框边框所使用的采样类型。以下之一:

replicate

复制像素值。

39.230 shear

对输入视频应用剪切变换。

该过滤器支持以下选项:

shx

X 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。

shy

Y 方向的剪切因子。默认值为 0。允许的范围为 -2 到 2。

fillcolor, c

设置用于填充未被转换视频覆盖的输出区域的颜色。有关此选项的一般语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。如果选择特殊值“none”,则不打印背景(例如,如果从不显示背景,则很有用)。

默认值为“黑色”。

interp

设置插值类型。可以是bilinearnearest. 默认为bilinear.

39.230.1 命令

该过滤器支持以上所有选项作为命令

39.231 showinfo

显示包含每个输入视频帧的各种信息的行。输入视频未修改。

该过滤器支持以下选项:

checksum

计算每个平面的校验和。默认启用。

所示行包含一系列键/值对,其形式为 key : value

输出中显示以下值:

n

输入帧的(连续)编号,从 0 开始。

pts

输入帧的呈现时间戳,表示为多个时基单位。时基单位取决于滤波器输入垫。

pts_time

输入帧的呈现时间戳,以秒数表示。

fmt

像素格式名称。

sar

输入帧的样本宽高比,以 num / den的形式表示。

s

输入框的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

i

隔行扫描模式的类型(“P”表示“逐行”,“T”表示顶场优先,“B”表示底场优先)。

iskey

如果该帧是关键帧,则为 1,否则为 0。

type

输入帧的图片类型(“I”表示 I 帧,“P”表示 P 帧,“B”表示 B 帧,“?”表示未知类型)。AVPictureType另请参阅枚举和av_get_picture_type_char中定义的函数 的文档libavutil/avutil.h

checksum

输入帧的所有平面的 Adler-32 校验和(以十六进制打印)。

plane_checksum

输入帧每个平面的 Adler-32 校验和(以十六进制打印),以“[ c0 c1 c2 c3 ]”的形式表示。

mean

输入帧的每个平面中像素的平均值,以“[mean0mean1mean2mean3 ] ”的形式表示

stdev

输入帧的每个平面中像素值的标准偏差,以“[ stdev0 stdev1 stdev2 stdev3 ]”的形式表示。

39.232 showpalette

显示每帧的 256 种颜色调色板。此过滤器仅与pal8像素格式帧相关 。

它接受以下选项:

s

设置用于表示一种调色板颜色条目的框的大小。默认值为 30(对于30x30像素框)。

39.233 shuffleframes

重新排序和/或复制和/或丢弃视频帧。

它接受以下参数:

mapping

设置输入帧的目标索引。这是空格或“|” 将输入帧映射到输出帧的分隔索引列表。索引数还设置每个索引可以具有的最大值。'-1'索引有特殊含义,那就是丢帧。

第一帧的索引为 0。默认情况下保持输入不变。

39.233.1 示例

  • 交换输入的每三帧的第二帧和第三帧:
    ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
    
  • 交换输入的每 10 帧中的第 10 帧和第 1 帧:
    ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
    

39.234 shufflepixels

对视频帧中的像素重新排序。

该过滤器接受以下选项:

direction, d

设置随机播放方向。可以是正向或反向。默认方向是向前。

mode, m

设置随机播放模式。可以是水平、垂直或块模式。

width, w
height, h

设置随机播放块大小。在水平随机播放模式的情况下,仅使用尺寸的宽度部分,而在垂直随机播放模式的情况下,仅使用尺寸的高度部分。

seed, s

设置与洗牌像素一起使用的随机种子。主要用于设置能够反向过滤过程以获得原始输入。例如,要反向正向洗牌,您需要使用相同的参数和完全相同的种子并将方向设置为反向。

39.235 shuffleplanes

重新排序和/或复制视频平面。

它接受以下参数:

map0

用作第一个输出平面的输入平面的索引。

map1

用作第二个输出平面的输入平面的索引。

map2

用作第三输出平面的输入平面的索引。

map3

用作第四个输出平面的输入平面的索引。

第一个平面的索引为 0。默认情况下保持输入不变。

39.235.1 示例

  • 交换输入的第二个和第三个平面:
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

39.236 signalstats

评估各种视觉指标,帮助确定与模拟视频媒体数字化相关的问题。

默认情况下,过滤器将记录这些元数据值:

YMIN

显示输入帧中包含的最小 Y 值。表示范围为[0-255]。

YLOW

显示输入帧内 10% 百分位处的 Y 值。表示范围为[0-255]。

YAVG

显示输入帧内的平均 Y 值。表示范围为[0-255]。

YHIGH

显示输入帧内 90% 百分位处的 Y 值。表示范围为[0-255]。

YMAX

显示输入帧中包含的最大 Y 值。表示范围为[0-255]。

UMIN

显示输入帧中包含的最小 U 值。表示范围为[0-255]。

ULOW

显示输入帧内 10% 百分位处的 U 值。表示范围为[0-255]。

UAVG

显示输入帧内的平均 U 值。表示范围为[0-255]。

UHIGH

显示输入帧内 90% 百分位处的 U 值。表示范围为[0-255]。

UMAX

显示输入帧中包含的最大 U 值。表示范围为[0-255]。

VMIN

显示输入帧中包含的最小 V 值。表示范围为[0-255]。

VLOW

显示输入帧内 10% 百分位处的 V 值。表示范围为[0-255]。

VAVG

显示输入帧内的平均 V 值。表示范围为[0-255]。

VHIGH

显示输入帧内 90% 百分位处的 V 值。表示范围为[0-255]。

VMAX

显示输入帧中包含的最大 V 值。表示范围为[0-255]。

SATMIN

显示输入帧中包含的最小饱和度值。表示范围为[0-~181.02]。

SATLOW

显示输入帧内 10% 百分位处的饱和度值。表示范围为[0-~181.02]。

SATAVG

显示输入帧内的平均饱和度值。表示范围为[0-~181.02]。

SATHIGH

显示输入帧内 90% 百分位处的饱和度值。表示范围为[0-~181.02]。

SATMAX

显示输入帧中包含的最大饱和度值。表示范围为[0-~181.02]。

HUEMED

显示输入帧内色调的中值。表示范围为[0-360]。

HUEAVG

显示输入帧内色调的平均值。表示范围为[0-360]。

YDIF

显示当前帧中Y平面的所有值与上一输入帧的对应值之间的样本值差的平均值。表示范围为[0-255]。

UDIF

显示当前帧中U平面的所有值与上一输入帧的对应值之间的样本值差的平均值。表示范围为[0-255]。

VDIF

显示当前帧中V平面的所有值与上一输入帧的对应值之间的样本值差的平均值。表示范围为[0-255]。

YBITDEPTH

显示当前帧中Y平面的位深度。以[0-16]范围表示。

UBITDEPTH

显示当前帧中U平面的位深度。以[0-16]范围表示。

VBITDEPTH

显示当前帧中V平面的位深度。以[0-16]范围表示。

该过滤器接受以下选项:

stat
out

统计数据指定图像分析的附加形式。 出去输出视频并突出显示指定类型的像素。

两个选项都接受以下值:

tout

识别时间异常值像素。时间异常值是与同一场的相邻像素不同的像素。时间异常值的示例包括视频丢失、磁头堵塞或磁带跟踪问题的结果。

vrep

识别垂直线重复。垂直线重复包括帧内相似的像素行。在原生数字视频中,垂直线重复很常见,但这种模式在从模拟源数字化的视频中并不常见。当它出现在由模拟源数字化产生的视频中时,它可能表明来自压差补偿器的隐藏。

brng

识别超出合法广播范围的像素。

color, c

设置突出显示颜色出去选项。默认颜色为黄色。

39.236.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}
    
    

39.237 signature

计算 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。

39.237.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 -
    

39.238 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 建议书。P.910 (07/22) 最新版本:https://www.itu.int/rec/T-REC-P.910-202207-I/en

它接受以下选项:

print_summary

如果设置为 1,摘要统计信息将打印到控制台。默认 0。

39.238.1 示例

  • 要计算 SI/TI 指标并打印摘要:
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

39.239 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] 范围内的浮点数,指定用于模糊图像的高斯滤波器的方差(如果较大则更慢)。默认值为亮度半径

chroma_strength, cs

设置色度强度。该选项值必须是配置模糊的 [-1.0,1.0] 范围内的浮点数。[0.0,1.0] 中包含的值将使图像模糊,而 [-1.0,0.0] 中包含的值将使图像锐化。默认值为亮度强度

chroma_threshold, ct

设置用作系数的色度阈值来确定像素是否应该模糊。选项值必须是 [-30,30] 范围内的整数。值 0 将过滤所有图像,包含在 [0,30] 中的值将过滤平坦区域,包含在 [-30,0] 中的值将过滤边缘。默认值为亮度阈值

如果未显式设置色度选项,则设置相应的亮度值。

39.240 sobel

将索贝尔算子应用于输入视频流。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.240.1 命令

该过滤器支持以上所有选项作为命令

39.241 spp

应用一个简单的后处理过滤器,以多次压缩和解压缩图像(或者 - 在质量水平6- 所有)移动并平均结果。

该过滤器接受以下选项:

quality

设定质量。该选项定义平均的级别数。它接受 0-6 范围内的整数。如果设置为0,过滤器将不起作用。的值6意味着更高的质量。该值每增加一个,速度就会下降约 2 倍。默认值为 3

qp

强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

mode

设置阈值模式。可用模式有:

hard

设置硬阈值(默认)。

soft

设置软阈值(更好的去振铃效果,但可能更模糊)。

use_bframe_qp

如果设置为 ,则启用 B 帧中的 QP 的使用1。使用此选项可能会导致闪烁,因为 B 帧通常具有较大的 QP。默认为 0(未启用)。

39.241.1 命令

该过滤器支持以下命令:

quality, level

设定质量水平。该值max可用于设置当前的最大级别6

39.242 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://www.tensorflow.org/install/lang_c)并使用以下命令配置 FFmpeg --enable-libtensorflow

model

设置模型文件的路径,指定网络架构及其参数。请注意,不同的后端使用不同的文件格式。TensorFlow、OpenVINO 后端只能加载其格式的文件。

scale_factor

设置 SRCNN 模型的比例因子。允许的值为234。默认值为2。比例因子对于 SRCNN 模型是必要的,因为它接受使用具有适当比例因子的双三次放大的输入。

要获得完整功能(例如异步执行),请使用dnn_processing过滤器。

39.243 ssim

获取两个输入视频之间的 SSIM(结构相似度度量)。

该过滤器接受两个输入视频作为输入,第一个输入被视为“主要”源,并且原封不动地传递到输出。第二个输入用作计算 SSIM 的“参考”视频。

两个视频输入必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

过滤器存储计算出的每帧的SSIM。

接受的参数的描述如下。

stats_file, f

如果指定,过滤器将使用命名文件来保存每个单独帧的 SSIM。当文件名等于“-”时,数据将发送到标准输出。

如果选择stats_file ,则打印的文件包含一系列键/值对,其形式为key : value对于每个比较的帧对。

每个显示参数的说明如下:

n

输入帧的序号,从1开始

Y, U, V, R, G, B

后缀指定的组件的比较帧的 SSIM。

All

整个帧的比较帧的 SSIM。

dB

与上面相同,但以 dB 表示。

该过滤器还支持帧同步选项。

39.243.1 示例

  • 例如:
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] ssim="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件进行比较ref_movie.mpg。每个单独帧的SSIM存储在统计日志

  • 同时使用 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 -
    

39.244 stereo3d

在不同的立体图像格式之间进行转换。

过滤器接受以下选项:

in

设置输入的立体图像格式。

输入图像格式的可用值为:

sbsl

并排平行(左眼向左,右眼向右)

sbsr

并排斗眼(右眼向左,左眼向右)

sbs2l

并排平行,半宽分辨率(左眼向左,右眼向右)

sbs2r

并排十字眼,半宽分辨率(左眼右眼,右眼左眼)

abl
tbl

上-下(左眼在上,右眼在下)

abr
tbr

上-下(右眼在上,左眼在下)

ab2l
tb2l

半高分辨率的上-下(左眼在上,右眼在下)

ab2r
tb2r

半高分辨率的上下(右眼在上,左眼在下)

al

交替帧(左眼第一,右眼第二)

ar

交替帧(右眼第一,左眼第二)

irl

交错行(左眼从顶行开始,右眼从下一行开始)

irr

交错行(右眼从顶行开始,左眼从下一行开始)

icl

交错列,左眼优先

icr

交错列,右眼优先

默认值为 'sbsl'。

out

设置输出的立体图像格式。

sbsl

并排平行(左眼向左,右眼向右)

sbsr

并排斗眼(右眼向左,左眼向右)

sbs2l

并排平行,半宽分辨率(左眼向左,右眼向右)

sbs2r

并排十字眼,半宽分辨率(左眼右眼,右眼左眼)

abl
tbl

上-下(左眼在上,右眼在下)

abr
tbr

上-下(右眼在上,左眼在下)

ab2l
tb2l

半高分辨率的上-下(左眼在上,右眼在下)

ab2r
tb2r

半高分辨率的上下(右眼在上,左眼在下)

al

交替帧(左眼第一,右眼第二)

ar

交替帧(右眼第一,左眼第二)

irl

交错行(左眼从顶行开始,右眼从下一行开始)

irr

交错行(右眼从顶行开始,左眼从下一行开始)

arbg

立体红/蓝灰色(左眼红色滤光片,右眼蓝色滤光片)

argg

立体红/绿灰色(左眼红色滤光片,右眼绿色滤光片)

arcg

立体红/青灰色(左眼上有红色滤光片,右眼上有青色滤光片)

arch

立体红/青色半色(左眼上有红色滤光片,右眼上有青色滤光片)

arcc

立体红/青色(左眼上有红色滤镜,右眼上有青色滤镜)

arcd

使用 Dubois 最小二乘投影优化浮雕红/青色(左眼上的红色滤光片,右眼上的青色滤光片)

agmg

浮雕绿色/洋红色灰色(左眼上有绿色滤光片,右眼上有洋红色滤光片)

agmh

浮雕绿色/洋红色半色(左眼上有绿色滤光片,右眼上有洋红色滤光片)

agmc

浮雕绿色/洋红色(左眼上有绿色滤光片,右眼上有洋红色滤光片)

agmd

使用 Dubois 的最小二乘投影优化浮雕绿色/洋红色颜色(左眼上的绿色滤光片,右眼上的洋红色滤光片)

aybg

浮雕黄色/蓝灰色(左眼上有黄色滤光片,右眼上有蓝色滤光片)

aybh

浮雕黄/蓝半色(左眼为黄色滤光片,右眼为蓝色滤光片)

aybc

浮雕黄色/蓝色(左眼上有黄色滤光片,右眼上有蓝色滤光片)

aybd

使用 Dubois 最小二乘投影优化浮雕黄色/蓝色(左眼上的黄色滤光片,右眼上的蓝色滤光片)

ml

单声道输出(仅限左眼)

mr

单声道输出(仅右眼)

chl

棋盘格,左眼优先

chr

棋盘格,右眼优先

icl

交错列,左眼优先

icr

交错列,右眼优先

hdmi

HDMI帧包

默认值为 '弧线'。

39.244.1 示例

  • 将输入视频从并排并行转换为浮雕黄色/蓝色杜布瓦:
    stereo3d=sbsl:aybd
    
  • 将输入视频从上到下(左眼在上,右眼在下)转换为并排十字眼。
    stereo3d=abl:sbsr
    

39.245 streamselect, astreamselect

选择视频或音频流。

该过滤器接受以下选项:

inputs

设置输入数量。默认值为 2。

map

设置输入索引以重新映射到输出。

39.245.1 命令

andstreamselect过滤astreamselect器支持以下命令:

map

设置输入索引以重新映射到输出。

39.245.2 示例

  • 选择第一个流的前 5 秒和第二个流的其余时间:
    sendcmd='5.0 streamselect map 1',streamselect=inputs=2:map=0
    
  • 与上面相同,但对于音频:
    asendcmd='5.0 astreamselect map 1',astreamselect=inputs=2:map=0
    

39.246 subtitles

使用 libass 库在输入视频上绘制字幕。

要启用此过滤器的编译,您需要使用 --enable-libass. 此过滤器还需要使用 libavcodec 和 libavformat 进行构建,以将传递的字幕文件转换为 ASS(高级变电站 Alpha)字幕格式。

该过滤器接受以下选项:

filename, f

设置要读取的字幕文件的文件名。必须指定它。

original_size

指定原始视频(即组成 ASS 文件的视频)的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。由于 ASS 宽高比算法设计错误,如果宽高比发生更改,则必须正确缩放字体。

fontsdir

设置包含过滤器可以使用的字体的目录路径。除了字体提供商使用的任何字体之外,还将使用这些字体。

alpha

处理 alpha 通道,默认情况下 alpha 通道不受影响。

charenc

设置字幕输入字符编码。subtitles仅过滤。仅当不是 UTF-8 时才有用。

stream_index, si

设置字幕流索引。subtitles仅过滤。

force_style

覆盖字幕的默认样式或脚本信息参数。它接受包含 ASS 样式格式对的字符串,KEY=VALUE并用“,”分隔。

wrap_unicode

根据 Unicode 换行算法换行。可用性至少需要 libass 版本 0.17.0(或 LIBASS_VERSION 0x01600010),并且libass 必须是使用 libunibreak 构建的。

除本机 ASS 外,该选项默认启用。

如果未指定第一个键,则假定第一个值指定文件名

例如,渲染文件子.srt在输入视频之上,使用以下命令:

subtitles=sub.srt

这相当于:

subtitles=filename=sub.srt

从文件渲染默认字幕流视频.mkv, 使用:

subtitles=video.mkv

要从该文件渲染第二个字幕流,请使用:

subtitles=video.mkv:si=1

使字幕流来自子.srt呈现 80% 透明蓝色 DejaVu Serif,使用:

subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'

39.247 super2xsai

使用 Super2xSaI(缩放和插值)像素艺术缩放算法将输入缩放 2 倍并平滑。

对于放大像素艺术图像而不降低清晰度很有用。

39.248 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;已弃用,请勿使用

39.248.1 命令

该过滤器支持以上所有选项作为命令

39.249 swapuv

交换 U 和 V 平面。

39.250 tblend

混合连续的视频帧。

参见混合

39.251 telecine

对视频应用电视电影处理。

该过滤器接受以下选项:

first_field
top, t

顶场优先

bottom, b

底部字段优先 默认值为top

pattern

一串数字,代表您希望应用的下拉模式。默认值为23

Some typical patterns:

NTSC output (30i):
27.5p: 32222
24p: 23 (classic)
24p: 2332 (preferred)
20p: 33
18p: 334
16p: 3444

PAL output (25i):
27.5p: 12222
24p: 222222222223 ("Euro pulldown")
16.67p: 33
16p: 33333334

39.252 thistogram

计算并绘制输入视频随时间变化的颜色分布直方图。

与仅显示特定时间单个输入帧的直方图的直方图视频过滤器不同,该过滤器还显示由width选项定义的过去帧数的直方图。

计算出的直方图是图像中颜色分量分布的表示。

该过滤器接受以下选项:

width, w

设置单色分量输出的宽度。默认值为0。意味着宽度的值0将从输入视频中选取。这也设置了要保留的传递直方图的数量。允许的范围是 [0, 8192]。

display_mode, d

设置显示模式。它接受以下值:

stack

每个颜色分量图都放置在彼此下方。

parade

每个颜色分量图并排放置。

overlay

提供的信息与 中的信息相同parade,只是表示颜色分量的图形直接相互叠加。

默认为stack.

levels_mode, m

设置模式。可以是linear, 或logarithmic。默认为linear.

components, c

设置要显示的颜色组件。默认为7.

bgopacity, b

设置背景不透明度。默认为0.9.

envelope, e

显示信封。默认为禁用。

ecolor, ec

设置信封颜色。默认为gold.

slide

设置幻灯片模式。

幻灯片的可用值为:

frame

当到达右边界时绘制新框架。

replace

用新列替换旧列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单张图片。

默认为replace.

39.253 threshold

对视频流应用阈值效应。

该滤波器需要四个视频流来执行阈值处理。第一个流是我们正在过滤的流。第二个流保存阈值,第三个流保存最小值,最后第四个流保存最大值。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

例如,如果第一流像素的分量值小于第二阈值流的像素分量的阈值,则将选取第三流值,否则将选取第四流像素分量值。

使用颜色源过滤器可以执行各种类型的阈值处理:

39.253.1 命令

该过滤器支持所有选项作为命令

39.253.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
    

39.254 thumbnail

在给定的连续帧序列中选择最具代表性的帧。

该过滤器接受以下选项:

n

设置要分析的帧批量大小;在一组n帧中,过滤器将选择其中一个,然后处理下一批n帧,直到结束。默认为100.

log

设置日志级别以显示选取的帧统计信息。默认为info.

由于过滤器跟踪整个帧序列,较大的n 值将导致较高的内存使用量,因此不建议使用较高的值。

39.254.1 示例

  • 每50帧提取一张图片:
    thumbnail=50
    
  • 使用以下命令创建缩略图的完整示例ffmpeg
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

39.255 tile

将几个连续的帧平铺在一起。

直到过滤器可以做相反事情。

该过滤器接受以下选项:

layout

在表格中设置网格大小COLUMNSxROWS。范围最多为 UINT_MAX 个单元。默认为6x5.

nb_frames

设置在给定区域中渲染的最大帧数。它必须小于或等于w x h。默认值为0,表示将使用所有区域。

margin

设置外边框边距(以像素为单位)。范围是 0 到 1024。默认值为0

padding

设置内边框粗细(即帧之间的像素数)。有关更高级的填充选项(例如具有不同的边缘值),请参阅填充视频过滤器。范围是 0 到 1024。默认值为0

color

指定未使用区域的颜色。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分颜色的默认值为“黑色”。

overlap

设置将多个连续帧平铺在一起时要重叠的帧数。该值必须介于0nb_frames - 1之间。默认为0.

init_padding

在显示第一个输出帧之前,将帧数设置为最初为空。这控制获得第一个输出帧的时间。该值必须介于0nb_frames - 1之间。默认为0.

39.255.1 示例

  • 生成所有关键帧的 8x8 PNG 图块(-skip_frame nokey)在电影中:
    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

    -垂直同步0有必要防止ffmpeg重复每个输出帧以适应最初检测到的帧速率。

  • 使用混合平面和命名选项 5在帧区域中显示图片3x27帧之间有像素,初始边距像素:2
    tile=3x2:nb_frames=5:padding=7:margin=2
    

39.256 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

指定影响过滤过程的标志。

标志的可用值为:

low_pass_filter, vlpf

在滤波器中启用线性垂直低通滤波。从包含高频垂直细节的逐行扫描源创建隔行扫描目标时,需要垂直低通滤波。过滤将减少交错“叽叽喳喳”和莫尔图案。

complex_filter, cvlpf

启用复杂的垂直低通滤波。这将稍微减少交错“叽叽喳喳”和莫尔图案的减少,但更好地保留细节和主观锐度印象。

bypass_il

绕过已经隔行扫描的帧,仅调整帧速率。

只能启用垂直低通滤波和绕过已经隔行扫描的帧模式 interleave_topinterleave_bottom

39.257 tmedian

从几个连续的输入视频帧中选取中值像素。

该过滤器接受以下选项:

radius

设置中值滤波器的半径。默认值为 1。允许的范围为 1 到 127。

planes

设置要过滤的平面。默认值为15,处理所有平面。

percentile

设置中位数百分位数。默认值为0.5。默认值0.5将始终选择中值,而0将选择最小值和1最大值。

39.257.1 命令

该过滤器支持所有上述选项作为命令,不包括选项radius

39.258 tmidequalizer

应用临时中途视频均衡效果。

Midway 视频均衡调整视频帧序列以具有相同的直方图,同时尽可能保持其动态。它对于匹配视频帧序列的曝光等很有用。

该过滤器接受以下选项:

radius

设置过滤半径。默认为5. 允许的范围是 1 到 127。

sigma

设置过滤西格玛。默认为0.5. 这控制过滤的强度。将此选项设置为 0 实际上不会执行任何操作。

planes

设置要处理的平面。默认值为15,即所有可用平面。

39.259 tmix

混合连续的视频帧。

下面是接受的选项的描述。

frames

要混合的连续帧的数量。如果未指定,则默认为 3。

weights

指定每个输入视频帧的权重。每个权重均由空格分隔。如果权重数量小于帧数,则最后指定的权重将用于所有剩余的未设置权重。

scale

指定比例,如果设置了,它将乘以每个权重的总和乘以像素值,得到最终的目标像素值。默认情况下,比例自动缩放为权重之和。

planes

设置要过滤的平面。默认为全部。允许的范围是 0 到 15。

39.259.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
    

39.259.2 命令

该过滤器支持以下命令:

weights
scale
planes

语法与同名选项相同。

39.260 tonemap

来自不同动态范围的色调图颜色。

该过滤器需要单精度浮点数据,因为它需要对超出范围的值进行操作(并且可以输出)。需要 另一个过滤器(例如 zscale )将结果帧转换为可用格式。

实现的色调映射算法仅适用于线性光,因此输入数据应事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

39.260.1 选项

该过滤器接受以下选项。

tonemap

设置要使用的色调映射算法。

可能的值为:

none

不应用任何色调贴图,仅对过亮像素进行去饱和处理。

clip

硬剪辑任何超出范围的值。使用它可以实现范围内值的完美色彩精度,同时扭曲超出范围的值。

linear

将整个参考色域拉伸至显示的线性倍数。

gamma

拟合色调曲线之间的对数传递。

reinhard

通过简单的曲线和非线性对比度来保持整体图像亮度,这会导致细节扁平化并降低颜色精度。

hable

比莱因哈德更好地保留黑暗和明亮的细节,但代价是稍微使所有东西变暗。当保留细节比颜色和亮度精度更重要时使用它。

mobius

平滑地映射超出范围的值,同时尽可能保留范围内材料的对比度和颜色。当色彩准确性比保留细节更重要时使用它。

默认为无。

param

调整色调映射算法。

这会影响以下算法:

none

被忽略了。

linear

指定拉伸时使用的比例因子。默认为 1.0。

gamma

指定函数的指数。默认为 1.8。

clip

指定一个额外的线性系数,在限幅之前乘以信号。默认为 1.0。

reinhard

指定显示峰值处的局部对比度系数。默认为 0.5,这意味着色域内值的亮度约为裁剪时的一半。

hable

被忽略了。

mobius

指定从线性变换到莫比乌斯变换的过渡点。低于该点的每个值都保证按 1:1 映射。值越高,结果越准确,但代价是丢失明亮的细节。默认为 0.3,由于初始斜率陡峭,仍然相当准确地保留范围内的颜色。

desat

对超过此亮度级别的高光应用去饱和度。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变成白色来帮助防止超级高光的颜色不自然地过曝。这使得图像感觉更自然,但代价是减少有关超出范围颜色的信息。

默认值 2.0 有点保守,主要适用于天空或阳光直射的表面。设置为 0.0 会禁用此选项。

仅当输入帧具有受支持的颜色标签时,此选项才有效。

peak

使用该值覆盖信号/标称/参考峰值。当显示元数据中嵌入的峰值信息不可靠或色调从较低范围映射到较高范围时非常有用。

39.261 tpad

暂时填充视频帧。

该过滤器接受以下选项:

start

指定输入视频流之前的延迟帧数。默认值为 0。

stop

指定输入视频流后的填充帧数。设置为 -1 以无限期填充。默认值为 0。

start_mode

设置添加到流开头的帧类型。可以是添加克隆。随着添加纯色框架的添加。克隆帧是第一帧的克隆默认是添加

stop_mode

设置添加到流末尾的帧类型。可以是添加克隆。随着添加纯色框架的添加。克隆帧是最后帧的克隆。默认是添加

start_duration, stop_duration

指定启动/停止延迟的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。这些选项覆盖startstop。默认值为 0。

color

指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

颜色的默认值为“黑色”。

39.262 transpose

在输入视频中调换行和列,并可选择翻转它。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

0, 4, cclock_flip

逆时针旋转90度并垂直翻转(默认),即:

L.R     L.l
. . ->  . .
l.r     R.r
1, 5, clock

顺时针旋转90度,即:

L.R     l.L
. . ->  . .
l.r     r.R
2, 6, cclock

逆时针旋转90度,即:

L.R     R.r
. . ->  . .
l.r     L.l
3, 7, clock_flip

顺时针旋转90度,垂直翻转,即:

L.R     r.R
. . ->  . .
l.r     l.L

对于 4-7 之间的值,仅当输入视频几何图形为纵向而不是横向时才会进行转置。这些值已被弃用,passthrough应使用该选项。

数值已被弃用,应放弃使用符号常量。

passthrough

如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:

none

始终应用转置。

portrait

保留纵向几何形状(当height >= width时)。

landscape

保留景观几何形状(当width >= height时)。

默认值为none

例如,顺时针旋转 90 度并保留纵向布局:

transpose=dir=1:passthrough=portrait

上面的命令也可以指定为:

transpose=1:portrait

39.263 transpose_npp

在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

passthrough

如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当height >= width时)。

landscape

保留景观几何形状(当width >= height时)。

39.264 trim

修剪输入,使输出包含输入的一个连续子部分。

它接受以下参数:

start

指定保留部分的开始时间,即具有时间戳开始的帧将是输出中的第一帧。

end

指定将被丢弃的第一帧的时间,即紧邻时间戳结束的帧之前的帧将是输出中的最后一帧。

start_pts

这与start相同,只不过此选项以时基单位而不是秒设置开始时间戳。

end_pts

这与end相同,只不过此选项以时基单位而不是秒设置结束时间戳。

duration

输出的最大持续时间(以秒为单位)。

start_frame

应传递到输出的第一帧的编号。

end_frame

应丢弃的第一帧的编号。

开始,结尾, 和期间表示为持续时间规格;请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

请注意,前两组开始/结束选项和期间 选项查看帧时间戳,而 _frame 变体只是对通过过滤器的帧进行计数。另请注意,此过滤器不会修改时间戳。如果您希望输出时间戳从零开始,请在修剪过滤器之后插入 setpts 过滤器。

如果设置了多个开始或结束选项,则此过滤器会尝试贪婪并保留至少与指定约束之一匹配的所有帧。要仅保留一次匹配所有约束的部分,请链接多个修剪过滤器。

默认设置是保留所有输入。因此可以仅设置最终值以保留指定时间之前的所有内容。

例子:

  • 删除除第二分钟输入之外的所有内容:
    ffmpeg -i INPUT -vf trim=60:120
    
  • 只保留第一秒:
    ffmpeg -i INPUT -vf trim=duration=1
    

39.265 unpremultiply

使用第二个流的第一个平面作为 Alpha 将 Alpha 预乘效果应用于输入视频流。

两个流必须具有相同的尺寸和相同的像素格式。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值 0xf,将处理所有平面。

如果格式有 1 或 2 个分量,则亮度为位 0。如果格​​式有 3 或 4 个分量:对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 RGB 格式,位 0 为绿色,位 1 为蓝色,位 2 为红色;对于 YUV 格式,位 0 是亮度,位 1 是色度-U,位 2 是色度-V。如果存在,Alpha 通道始终是最后一位。

inplace

不需要第二个输入进行处理,而是使用输入流中的 alpha 平面。

39.266 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”。

39.266.1 示例

  • 应用强亮度锐化效果:
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度和色度参数应用强烈模糊:
    unsharp=7:7:-2:7:7:-2
    

39.267 untile

将由平铺图像组成的视频分解为单独的图像。

输出视频的帧速率是输入视频的帧速率乘以图块数量。

这个过滤器的作用与tile相反。

该过滤器接受以下选项:

layout

设置网格大小(即行数和列数)。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

39.267.1 示例

  • 从由 25 个垂直堆叠的帧组成的静态图像文件生成 1 秒的视频,就像模拟胶片卷轴一样:
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

39.268 uspp

应用超慢/简单的后处理过滤器,以多次压缩和解压缩图像(或者 - 在质量水平8- 所有)移动并平均结果。

这与 spp 行为的不同之处在于,uspp 实际上使用 libavcodec Snow 对每种情况进行编码和解码,而 spp 使用类似于 MJPEG 的简化帧内 8x8 DCT。

此过滤器仅在 ffmpeg 4.4 或更早版本中可用。

该过滤器接受以下选项:

quality

设定质量。该选项定义平均的级别数。它接受 0-8 范围内的整数。如果设置为0,过滤器将不起作用。的值8意味着更高的质量。该值每增加一个,速度就会下降约 2 倍。默认值为 3

qp

强制使用恒定的量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

codec

使用指定的编解码器而不是雪。

39.269 v360

在各种格式之间转换 360 度视频。

该过滤器接受以下选项:

input
output

设置输入/输出视频的格式。

可用格式:

e
equirect

等距矩形投影。

c3x2
c6x1
c1x6

具有 3x2/6x1/1x6 布局的立方体贴图。

格式特定选项:

in_pad
out_pad

设置输入/输出立方体贴图的填充比例。数值以小数表示。

示例值:

0

无填充。

0.01

脸部的 1% 是填充物。例如,分辨率为 1920x1280 时,面部尺寸为 640x640,每边填充为 3 个像素。(640 * 0.01 = 6 像素)

默认值为'0'。最大值为'0.1'

fin_pad
fout_pad

为输入/输出立方体贴图设置固定填充。值以像素为单位。

默认值为'0'。如果大于零,它将覆盖其他填充选项。

in_forder
out_forder

设置输入/输出立方体贴图的面顺序。为每个位置选择一个方向。

方向指定:

r

正确的

l

左边

u

向上

d

向下

f

向前

b

后退

默认值为'鲁德FB'

in_frot
out_frot

设置输入/输出立方体贴图的面旋转。为每个位置选择一个角度。

角度的指定:

0

顺时针0度

1

顺时针90度

2

顺时针180度

3

顺时针270度

默认值为'000000'

eac

等角立方体贴图。

flat
gnomonic
rectilinear

常规视频。

格式特定选项:

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

dfisheye

双鱼眼。

格式特定选项:

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

barrel
fb
barrelsplit

Facebook 的 360 度格式。

sg

立体格式。

格式特定选项:

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

mercator

墨卡托格式。

ball

球型,向后产生明显的变形。

hammer

Hammer-Aitoff 地图投影格式。

sinusoidal

正弦地图投影格式。

fisheye

鱼眼投影。

格式特定选项:

h_fov
v_fov
d_fov

设置输出水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

ih_fov
iv_fov
id_fov

设置输入水平/垂直/对角线视野。以度为单位的值。

如果设置了对角视野,它将覆盖水平和垂直视野。

pannini

潘尼尼投影。

格式特定选项:

h_fov

设置输出 pannini 参数。

ih_fov

设置输入 pannini 参数。

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

Spline16 插值。

gauss
gaussian

高斯插值。

mitchell

米切尔插值法。

默认值为'线'

w
h

设置输出视频分辨率。

默认分辨率取决于格式。

in_stereo
out_stereo

设置输入/输出立体声格式。

2d

2D 单声道

sbs

并排

tb

顶部 底部

默认值为'2d'用于输入和输出格式。

yaw
pitch
roll

设置输出视频的旋转。以度为单位的值。

rorder

设置输出视频的旋转顺序。为每个位置选择一项。

y, Y

偏航

p, P

沥青

r, R

默认值为'ypr'

h_flip
v_flip
d_flip

水平翻转(左右交换)/垂直(上下交换)/深度翻转(前后交换)。布尔值。

ih_flip
iv_flip

设置输入视频是否水平/垂直翻转。布尔值。

in_trans

设置输入视频是否转置。布尔值,默认禁用。

out_trans

设置输出视频是否需要转置。布尔值,默认禁用。

h_offset
v_offset

设置输出水平/垂直离轴偏移。默认设置为 0。允许的范围为 -1 到 1。

alpha_mask

通过将所有未映射的像素标记为完全透明,在 alpha 平面中构建遮罩。布尔值,默认禁用。

reset_rot

重置输出视频的旋转。布尔值,默认禁用。

39.269.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
    

39.269.2 命令

该过滤器支持上述选项的子集作为命令

39.270 vaguedenoiser

应用基于小波的降噪器。

它使用 Cohen-Daubechies-Feauveau 9/7 将视频输入中的每一帧变换到小波域中。然后它对获得的系数应用一些过滤。之后它进行逆小波变换。由于小波特性,它应该提供良好的平滑结果,并减少噪声,而不会模糊图片特征。

该过滤器接受以下选项:

threshold

过滤强度。越高,视频的过滤程度就越高。在视频看起来过度过滤之前,硬阈值可以使用比软阈值更高的阈值。默认值为 2。

method

过滤器将使用的过滤方法。

它接受以下值:

hard

所有低于阈值的值都将归零。

soft

所有低于阈值的值都将归零。上述所有值都将减少阈值。

garrote

缩放或取消系数 - 介于(更多)软阈值和(更少)硬阈值之间。

默认为绞刑。

nsteps

小波分解图像的次数。图片的分解不能超出特定点(通常,640x480 帧为 8 - 即 2^9 = 512 > 480)。有效值为 1 到 32 之间的整数。默认值为 6。

percent

部分完全去噪(有限系数缩小),从0到100。默认值为85。

planes

要处理的平面列表。默认情况下,所有平面都会被处理。

type

过滤器将使用的阈值类型。

它接受以下值:

universal

所有分解使用的阈值相同。

bayes

使用的阈值还取决于每个分解系数。

默认是通用的。

39.271 varblur

通过使用第二个视频流设置模糊半径来应用可变模糊滤镜。第二个流必须具有相同的尺寸。

该过滤器接受以下选项:

min_r

设置最小允许半径。允许的范围是 0 到 254。默认值为 0。

max_r

设置最大允许半径。允许的范围是 1 到 255。默认值为 8。

planes

设置要处理的平面。默认情况下,全部使用。

varblur过滤器还支持帧同步选项。

39.271.1 命令

该过滤器支持以上所有选项作为命令

39.272 vectorscope

在二维图中显示 2 个颜色分量值(称为矢量示波器)。

该过滤器接受以下选项:

mode, m

设置矢量示波器模式。

它接受以下值:

gray
tint

灰度值显示在图形上,亮度越高意味着图形中位置上具有相同分量颜色值的像素越多。这是默认模式。

color

灰度值显示在图表上。x视频帧中不存在的周围像素值以由选项和设置的 2 个颜色分量的渐变绘制y。第三个颜色分量是静态的。

color2

视频帧中存在的实际颜色分量值显示在图表上。

color3

与 color2 类似,但相同值的频率较高,x并且y 在图表上会增加另一个颜色分量的值,即x和的默认值的亮度y

color4

视频帧中存在的实际颜色显示在图表上。如果两种不同的颜色映射到图表上的相同位置,则选择图表中不存在的组件值较高的颜色。

color5

灰度值显示在图表上。与从径向渐变中选取的第三个颜色分量类似,color但具有从径向渐变中选取的第三个颜色分量。

x

设置 X 轴上表示的颜色分量。默认为1.

y

设置 Y 轴上表示的颜色分量。默认为2.

intensity, i

设置强度,由模式使用:灰色、颜色、颜色3和颜色5,用于增加代表图中(X,Y)位置频率的颜色分量的亮度。

envelope, e
none

没有信封,这是默认的。

instant

即时包络,即使是最暗的单个像素也会清晰突出。

peak

保存图表中随时间变化的最大值和最小值。这样,您仍然可以发现超出范围的值,而无需不断查看矢量示波器。

peak+instant

峰值和瞬时包络结合在一起。

graticule, g

设置绘制何种类型的经纬网。

none
green
color
invert
opacity, o

设置网格不透明度。

flags, f

设置标线标志。

white

绘制白点的标线。

black

绘制黑点的刻度。

name

绘制色点简称。

bgopacity, b

设置背景不透明度。

lthreshold, l

为未在 X 或 Y 轴上表示的颜色分量设置低阈值。低于该值的值将被忽略。默认值为 0。请注意,该值乘以一个像素组件可以具有的实际最大可能值。因此,对于 8 位输入和 0.1 的低阈值,实际阈值是 0.1 * 255 = 25。

hthreshold, h

为未在 X 或 Y 轴上表示的颜色分量设置高阈值。高于此值的值将被忽略。默认值为 1。请注意,该值乘以一个像素组件可以具有的实际最大可能值。因此,对于 8 位输入和高阈值 0.9,实际阈值是 0.9 * 255 = 230。

colorspace, c

设置绘制经纬网时使用哪种颜色空间。

auto
601
709

默认为自动。

tint0, t0
tint1, t1

设置灰色/色调矢量模式的色调。默认情况下,两个选项均为零。这意味着没有色调,输出将保持灰色。

39.273 vidstabdetect

分析视频稳定/防抖。执行第 1 步(共 2 步),请参阅 vidstabtransform了解第 2 步。

此过滤器生成一个文件,其中包含有关后续帧的相对平移和旋转变换信息,然后由vidstabtransform过滤器使用。

要启用此过滤器的编译,您需要使用 --enable-libvidstab.

该过滤器接受以下选项:

result

设置用于写入转换信息的文件的路径。默认值为转换.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. (默认

39.273.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
    

39.274 vidstabtransform

视频稳定/防抖:第 2 阶段(共 2 阶段),请参阅vidstabDetect了解第 1 阶段。

读取包含每个帧的变换信息的文件并应用/补偿它们。与vidstabDetect 过滤器一起使用,可以对视频进行去抖动处理。另请参阅 http://public.hronopik.de/vid.stab。使用锐化滤镜也很重要,请参见下文。

要启用此过滤器的编译,您需要使用 --enable-libvidstab.

39.274.1 选项

input

设置用于读取转换的文件的路径。默认值为 转换.trf

smoothing

设置用于对摄像机运动进行低通滤波的帧数(值*2 + 1)。默认值为 10。

例如,数字 10 表示使用 21 帧(过去 10 帧,未来 10 帧)来平滑视频中的运动。值越大,视频越流畅,但会限制摄像机的加速度(平移/倾斜运动)。0 是模拟静态相机的特殊情况。

optalgo

设置相机路径优化算法。

接受的值为:

gauss

相机运动的高斯内核低通滤波器(默认)

avg

平均变换

maxshift

设置平移帧的最大像素数。默认值为-1,表示没有限制。

maxangle

设置旋转框架的最大角度(以弧度为单位)(度*PI/180)。默认值为-1,表示没有限制。

crop

指定如何处理由于移动补偿而可能可见的边框。

可用值为:

keep

保留前一帧的图像信息(默认)

black

将边框填充为黑色

invert

如果设置为 1,则进行反转变换。默认值为 0。

relative

如果设置为 1,则将变换视为相对于前一帧;如果设置为 0,则将变换视为绝对。默认值为 0。

zoom

设置缩放百分比。正值将导致放大效果,负值将导致缩小效果。默认值为 0(无缩放)。

optzoom

设置最佳缩放以避免边框。

接受的值为:

0

残疾人

1

确定最佳静态缩放值(只有非常强烈的移动才会导致可见边框)(默认)

2

确定最佳自适应缩放值(没有边框可见),请参阅变焦速度

请注意,缩放时给出的值将添加到此处计算的值中。

zoomspeed

设置每帧最大缩放百分比(启用时 光学变焦设置为 2)。范围为 0 到 5,默认值为 0.25。

interpol

指定插值类型。

可用值为:

no

无插值

linear

仅线性 水平

bilinear

双向线性(默认)

bicubic

两个方向的三次方(慢速)

tripod

如果设置为 1,则启用虚拟三脚架模式,相当于 relative=0:smoothing=0。默认值为 0。

还可以使用vidstabdetecttripod的选项。

debug

如果设置为 1,则增加日志详细程度。此外,检测到的全局运动也会写入临时文件全局运动.trf。默认值为 0。

39.274.2 示例

  • 用于ffmpeg具有默认值的典型稳定:
    ffmpeg -i inp.mpeg -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 inp_stabilized.mpeg
    

    请注意始终推荐 使用锐化滤镜。

  • 放大一点并从给定文件加载变换数据:
    vidstabtransform=zoom=5:input="mytransforms.trf"
    
  • 使视频更加流畅:
    vidstabtransform=smoothing=30
    

39.275 vflip

垂直翻转输入视频。

例如,要垂直翻转视频ffmpeg

ffmpeg -i in.avi -vf "vflip" out.avi

39.276 vfrdet

检测可变帧率视频。

该过滤器尝试检测输入是可变的还是恒定的帧速率。

最后,它将输出检测为具有可变增量点和具有恒定增量点的帧数。如果存在具有可变增量的帧,那么它还会显示遇到的最小、最大和平均增量。

39.277 vibrance

提高或改变饱和度。

该过滤器接受以下选项:

intensity

如果为正值,则设置增强强度;如果为负值,则设置改变强度。默认值为 0。允许的范围为 -2 到 2。

rbal

设置红色平衡。默认值为 1。允许的范围为 -10 到 10。

gbal

设置绿色平衡。默认值为 1。允许的范围为 -10 到 10。

bbal

设置蓝色平衡。默认值为 1。允许的范围为 -10 到 10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

alternate

如果intensity为负并且设置为 1,颜色将会改变,否则颜色的饱和度会降低,更趋向于灰色。

39.277.1 命令

该过滤器支持以上所有选项作为命令

39.278 vif

获取两个输入视频之间的平均 VIF(视觉信息保真度)。

该过滤器采用两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,此过滤器才能正常工作。它还假设两个输入具有相同数量的帧,并进行一一比较。

获得的平均 VIF 分数通过日志系统打印。

过滤器存储计算出的每帧的 VIF 分数。

该过滤器还支持帧同步选项。

在下面的示例中,输入文件主.mpg正在处理的文件与参考文件进行比较参考.mpg

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

39.279 vignette

产生或逆转自然渐晕效果。

该过滤器接受以下选项:

angle, a

将镜头角度表达式设置为弧度数。

该值被限制在[0,PI/2]范围内。

默认值:"PI/5"

x0
y0

设置中心坐标表达式。分别"w/2""h/2" 默认。

mode

设置前进/后退模式。

可用模式有:

forward

距中心点的距离越大,图像变得越暗。

backward

距中心点的距离越大,图像变得越亮。尽管没有自动检测来提取镜头,但这可用于反转晕影效果角度和其他设置(尚未)。它还可以用来创建燃烧效果。

默认值为 '向前'。

eval

设置表达式的求值模式 (角度,x0,y0)。

它接受以下值:

init

在过滤器初始化期间仅对表达式求值一次。

frame

评估每个传入帧的表达式。这比'慢得多在里面' 模式,因为它需要重新计算所有缩放器,但它允许高级动态表达式。

默认值为 '在里面'。

dither

设置抖动以减少圆形条纹效果。默认为1 (启用)。

aspect

设置小插图方面。此设置允许调整晕影的形状。将此值设置为输入的 SAR 将根据视频的尺寸生成矩形渐晕。

默认为1/1.

39.279.1 表达式

α,x0y0表达式可以包含以下参数。

w
h

输入宽度和高度

n

输入帧的编号,从0开始

pts

过滤后的视频帧的 PTS(呈现时间戳)时间,以 TB为单位表示,如果未定义则为 NAN

r

输入视频的帧率,如果输入帧率未知则为 NAN

t

过滤后的视频帧的 PTS(呈现时间戳),以秒表示,如果未定义则为 NAN

tb

输入视频的时基

39.279.2 示例

  • 应用简单的强渐晕效果:
    vignette=PI/4
    
  • 制作闪烁的渐晕:
    vignette='PI/4+random(1)*PI/50':eval=frame
    

39.280 vmafmotion

获取视频的平均 VMAF 运动得分。它是 VMAF 的组件指标之一。

获得的平均运动分数通过日志系统打印出来。

该过滤器接受以下选项:

stats_file

如果指定,过滤器将使用指定的文件来保存每帧相对于前一帧的运动分数。当文件名等于“-”时,数据将发送到标准输出。

例子:

ffmpeg -i ref.mpg -vf vmafmotion -f null -

39.281 vstack

垂直堆叠输入视频。

所有流必须具有相同的像素格式和相同的宽度。

请注意,此过滤器比使用覆盖填充过滤器创建相同的输出更快。

该过滤器接受以下选项:

inputs

设置输入流的数量。默认值为 2。

shortest

如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。

39.282 w3fdif

对输入视频进行去隔行处理(“w3fdif”代表“Weston 3 Field Deinterlacing Filter”)。

Weston 3 场去隔行滤波器基于 Martin Weston 为 BBC R&D 描述的流程,并基于 Jim Easterbrook 为 BBC R&D 编写的去隔行算法实现,使用 BBC R&D 计算的滤波器系数。

该过滤器使用帧中的场主导信息来决定将每对场中的哪一个场放在输出中的第一位。如果出现错误,请在过滤器之前使用setfieldw3fdif过滤器。

有两组滤波器系数,所谓“简单”和“复杂”。使用哪一组滤波器系数可以通过传递可选参数来设置:

filter

设置隔行滤波器系数。接受以下值之一:

simple

简单的滤波器系数设置。

complex

更复杂的滤波器系数集。

默认值为 '复杂的'。

mode

采用的隔行扫描模式。它接受以下值之一:

frame

每帧输出一帧。

field

每个字段输出一帧。

默认值为field

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

tff

假设顶部字段是第一个。

bff

假设底部字段是第一个。

auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

all

对所有帧进行去隔行,

interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为 '全部'。

39.282.1 命令

该过滤器支持与选项相同的命令

39.283 waveform

视频波形监视器。

波形监视器绘制颜色分量强度。默认情况下仅亮度。波形的每一列对应于源视频中的一列像素。

它接受以下选项:

mode, m

可以是row, 或column。默认为column. 在行模式下,左侧图表代表颜色分量值 0,右侧代表值 = 255。在列模式下,顶部代表颜色分量值 = 0,底部代表值 = 255。

intensity, i

设置强度。较小的值有助于找出有多少相同亮度的值分布在输入行/列中。默认值为0.04。允许的范围是 [0, 1]。

mirror, r

设置镜像模式。0表示未镜像,1表示镜像。在镜像模式下,较高的值将显示在模式的左侧row和模式的顶部column。默认为 1(镜像)。

display, d

设置显示模式。它接受以下值:

overlay

提供的信息与 中的信息相同parade,只是表示颜色分量的图形直接相互叠加。

这种显示模式可以更容易地发现应该相同的颜色分量的重叠区域中的相对差异或相似之处,例如中性白色、灰色或黑色。

stack

在 模式 中并排显示颜色分量的单独图表 row,或者在 模式 中显示一个在另一个下方的图表column

parade

在 模式 中并排显示颜色分量的单独图表 column,或者在 模式 中显示一个在另一个下方的图表row

使用此显示模式,通过比较每个波形的顶部和底部图形的轮廓,可以轻松发现图像的高光和阴影中的色偏。由于白色、灰色和黑色的特征是完全相同数量的红色、绿色和蓝色,因此图片的中性区域应显示宽度/高度大致相等的三个波形。如果不是,通过对三个波形进行电平调整即可轻松进行校正。

默认为stack.

components, c

设置要显示的颜色分量。默认值为 1,这意味着如果输入采用 RGB 色彩空间,则仅包含亮度或红色分量。例如,如果设置为 7,它将显示所有 3 个(如果)可用的颜色分量。

envelope, e
none

没有信封,这是默认的。

instant

即使数值很小,图表中呈现的即时包络线、最小值和最大值也很容易看到step

peak

保存图表中随时间显示的最小值和最大值。这样您仍然可以发现超出范围的值,而无需不断查看波形。

peak+instant

峰值和瞬时包络结合在一起。

filter, f
lowpass

没有过滤,这是默认的。

flat

亮度和色度结合在一起。

aflat

与上面类似,但显示蓝色和红色色度之间的差异。

xflat

与上面类似,但使用不同的颜色。

yflat

与上面类似,但颜色又不同。

chroma

仅显示色度。

color

在波形上显示实际颜色值。

acolor

与上面类似,但亮度显示色度值的频率。

graticule, g

设置要显示的经纬网。

none

不显示刻度。

green

显示绿色标线,显示合法的广播范围。

orange

显示橙色标线,显示合法的广播范围。

invert

显示反转标线,显示合法的广播范围。

opacity, o

设置网格不透明度。

flags, fl

设置标线标志。

numbers

在线条上方画出数字。默认启用。

dots

画点而不是线。

scale, s

设置用于显示刻度的比例。

digital
millivolts
ire

默认为数字。

bgopacity, b

设置背景不透明度。

tint0, t0
tint1, t1

设置输出色调。仅与低通滤波器一起使用,并且当显示未叠加并且输入像素格式不是 RGB 时。

fitmode, fm

设置视频输出帧的样本宽高比。可用于配置波形,使其不会在某一方向上拉伸太多。

none

将样本长宽比设置为 1/1。

size

设置样本宽高比以匹配视频的输入大小

默认为 '没有任何'。

input

设置过滤器的输入格式以供选择。可 '全部',用于从所有可用格式中进行选择,或 '第一的',用于选择第一个可用格式。默认为 '第一的'。

39.284 weave, doubleweave

weave采用基于场的视频输入,并将每两个连续场连接成单帧,从而生成一个新的双高度剪辑,帧速率和帧数减半。

doubleweave工作原理与此相同weave,但帧速率和帧数不会减半。

它接受以下选项:

first_field

设置第一个字段。可用值为:

top, t

将帧设置为顶场优先。

bottom, b

将帧设置为底场优先。

39.284.1 示例

  • 使用selectseparatefields过滤器隔行扫描视频:
    separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
    

39.285 xbr

应用专为像素艺术设计的 xBR 高品质放大滤镜。它遵循一组边缘检测规则,请参阅 https://forums.libretro.com/t/xbr-algorithm-tutorial/123

它接受以下选项:

n

设置缩放尺寸:2for 2xBR3for 3xBR4for 4xBR。默认为3.

39.286 xcorrelate

在第一和第二输入视频流之间应用归一化互相关。

第二输入视频流尺寸必须低于第一输入视频流。

该过滤器接受以下选项:

planes

设置要处理的平面。

secondary

设置将从第二个输入视频流中处理哪些辅助视频帧,可以是firstall。默认为全部

xcorrelate过滤器还支持帧同步选项。

39.287 xfade

将交叉淡入淡出从一个输入视频流应用到另一输入视频流。交叉淡入淡出应用指定的持续时间。

两个输入必须是恒定的帧速率,并且具有相同的分辨率、像素格式、帧速率和时基。

该过滤器接受以下选项:

transition

设置可用的过渡效果之一:

custom
fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown
circlecrop
rectcrop
distance
fadeblack
fadewhite
radial
smoothleft
smoothright
smoothup
smoothdown
circleopen
circleclose
vertopen
vertclose
horzopen
horzclose
dissolve
pixelize
diagtl
diagtr
diagbl
diagbr
hlslice
hrslice
vuslice
vdslice
hblur
fadegrays
wipetl
wipetr
wipebl
wipebr
squeezeh
squeezev
zoomin
fadefast
fadeslow
hlwind
hrwind
vuwind
vdwind
coverleft
coverright
coverup
coverdown
revealleft
revealright
revealup
revealdown

默认过渡效果是淡入淡出。

duration

设置淡入淡出持续时间(以秒为单位)。范围是 0 到 60 秒。默认持续时间为 1 秒。

offset

设置相对于第一个输入流的淡入淡出开始时间(以秒为单位)。默认偏移量为 0。

expr

设置自定义过渡效果的表达式。

表达式可以使用以下变量和函数:

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

P

过渡效果的进度。

PLANE

目前正在加工平面。

A

返回当前位置和平面处第一个输入的值。

B

返回当前位置和平面的第二个输入的值。

a0(x, y)
a1(x, y)
a2(x, y)
a3(x, y)

返回第一个输入的第一/第二/第三/第四分量的 位置 ( x , y )处的像素值。

b0(x, y)
b1(x, y)
b2(x, y)
b3(x, y)

返回第二个输入的第一/第二/第三/第四分量的 位置 ( x , y )处的像素值。

39.287.1 示例

  • 从一个输入视频到另一输入视频的交叉淡入淡出,淡入淡出过渡,过渡持续时间为 2 秒,偏移量为 5 秒:
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

39.288 xmedian

从多个输入视频中选取中值像素。

该过滤器接受以下选项:

inputs

设置输入数量。默认值为 3。允许的范围为 3 到 255。如果输入数量为偶数,则结果将为两个中值之间的平均值。

planes

设置要过滤的平面。默认值为15,处理所有平面。

percentile

设置中位数百分位数。默认值为0.5。默认值0.5将始终选择中值,而0将选择最小值和1最大值。

39.288.1 命令

该过滤器支持所有上述选项作为命令,不包括选项inputs

39.289 xstack

将视频输入堆叠到自定义布局中。

所有流必须具有相同的像素格式。

该过滤器接受以下选项:

inputs

设置输入流的数量。默认值为 2。

layout

指定输入的布局。此选项需要用户明确设置所需的布局配置。这设置输出中每个视频输入的位置。每个输入由“|”分隔。第一个数字代表列,第二个数字代表行。数字从 0 开始,并用“_”分隔。(可选)可以使用 wX 和 hX,其中 X 是从中获取宽度或高度的视频输入。当用“+”分隔时可以使用多个值。在这种情况下,值会被加在一起。

请注意,如果输入的大小不同,则可能会出现间隙,因为并非所有输出视频帧都会被填充。同样,如果视频的位置没有为相邻视频的全帧留出足够的空间,则视频可能会相互重叠。

对于 2 个输入,设置默认布局0_0|w0_0(相当于 )。grid=2x1在所有其他情况下,布局或网格必须由用户设置。一次可以指定grid或之一。layout指定两者都会导致错误。

grid

指定固定大小的输入网格。此选项用于创建输入流的固定大小网格。在表格中设置网格大小COLUMNSxROWS。必须有ROWS * COLUMNS 输入流,它们将被排列为具有ROWS行和 COLUMNS列的网格。使用此选项时,行中的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。

如果grid设置,则inputs选项将被忽略并隐式设置为ROWS * COLUMNS

对于 2 个输入,设置默认网格2x1(相当于 )。layout=0_0|w0_0在所有其他情况下,布局或网格必须由用户设置。一次可以指定grid或之一。layout指定两者都会导致错误。

shortest

如果设置为 1,则在最短输入终止时强制输出终止。默认值为 0。

fill

如果设置为有效颜色,所有未使用的像素将用该颜色填充。默认情况下填充设置为无,因此它被禁用。

39.289.1 示例

  • 将 4 个输入显示到 2x2 网格中。

    布局:

    input1(0, 0)  | input3(w0, 0)
    input2(0, h0) | input4(w0, h0)
    
    xstack=inputs=4:layout=0_0|0_h0|w0_0|w0_h0
    

    请注意,如果输入的大小不同,则可能会出现间隙或重叠。

  • 将 4 个输入显示到 1x4 网格中。

    布局:

    input1(0, 0)
    input2(0, h0)
    input3(0, h0+h1)
    input4(0, h0+h1+h2)
    
    xstack=inputs=4:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2
    

    请注意,如果输入的宽度不同,则会出现未使用的空间。

  • 将 9 个输入显示到 3x3 网格中。

    布局:

    input1(0, 0)       | input4(w0, 0)      | input7(w0+w3, 0)
    input2(0, h0)      | input5(w0, h0)     | input8(w0+w3, h0)
    input3(0, h0+h1)   | input6(w0, h0+h1)  | input9(w0+w3, h0+h1)
    
    xstack=inputs=9:layout=0_0|0_h0|0_h0+h1|w0_0|w0_h0|w0_h0+h1|w0+w3_0|w0+w3_h0|w0+w3_h0+h1
    

    请注意,如果输入的大小不同,则可能会出现间隙或重叠。

  • 将 16 个输入显示到 4x4 网格中。

    布局:

    input1(0, 0)       | input5(w0, 0)       | input9 (w0+w4, 0)       | input13(w0+w4+w8, 0)
    input2(0, h0)      | input6(w0, h0)      | input10(w0+w4, h0)      | input14(w0+w4+w8, h0)
    input3(0, h0+h1)   | input7(w0, h0+h1)   | input11(w0+w4, h0+h1)   | input15(w0+w4+w8, h0+h1)
    input4(0, h0+h1+h2)| input8(w0, h0+h1+h2)| input12(w0+w4, h0+h1+h2)| input16(w0+w4+w8, h0+h1+h2)
    
    xstack=inputs=16:layout=0_0|0_h0|0_h0+h1|0_h0+h1+h2|w0_0|w0_h0|w0_h0+h1|w0_h0+h1+h2|w0+w4_0|
    w0+w4_h0|w0+w4_h0+h1|w0+w4_h0+h1+h2|w0+w4+w8_0|w0+w4+w8_h0|w0+w4+w8_h0+h1|w0+w4+w8_h0+h1+h2
    

    请注意,如果输入的大小不同,则可能会出现间隙或重叠。

39.290 yadif

对输入视频进行去隔行处理(“yadif”的意思是“另一个去隔行过滤器”)。

它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

0, send_frame

每帧输出一帧。

1, send_field

每个字段输出一帧。

2, send_frame_nospatial

与 类似send_frame,但它跳过空间交错检查。

3, send_field_nospatial

与 类似send_field,但它跳过空间交错检查。

默认值为send_frame

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

0, tff

假设顶部字段是第一个。

1, bff

假设底部字段是第一个。

-1, auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

39.291 yadif_cuda

使用yadif算法对输入视频进行去隔行,但在 CUDA 中实现,以便它可以作为带有 nvdec 和/或 nvenc 的 GPU 加速管道的一部分。

它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

0, send_frame

每帧输出一帧。

1, send_field

每个字段输出一帧。

2, send_frame_nospatial

与 类似send_frame,但它跳过空间交错检查。

3, send_field_nospatial

与 类似send_field,但它跳过空间交错检查。

默认值为send_frame

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

0, tff

假设顶部字段是第一个。

1, bff

假设底部字段是第一个。

-1, auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

39.292 yaepblur

应用模糊滤镜,同时保留边缘(“yaepblur”的意思是“另一个保留边缘的模糊滤镜”)。该算法在“JS Lee,使用本地统计数字图像增强和噪声过滤,IEEE Trans.Pattern Anal.Mach.Intell.PAMI-2,1980”中进行了描述。

它接受以下参数:

radius, r

设置窗口半径。默认值为 3。

planes, p

设置要过滤的平面。默认仅是第一个平面。

sigma, s

设置模糊强度。默认值为 128。

39.292.1 命令

该过滤器支持与选项相同的命令

39.293 zoompan

应用缩放和平移效果。

该过滤器接受以下选项:

zoom, z

设置缩放表达式。范围为 1-10。默认值为 1。

x
y

设置 x 和 y 表达式。默认值为 0。

d

设置持续时间表达式(以帧数为单位)。这设置了单个输入图像的效果将持续多少帧。默认值为 90。

s

设置输出图像尺寸,默认为“hd720”。

fps

设置输出帧率,默认为“25”。

每个表达式可以包含以下常量:

in_w, iw

输入宽度。

in_h, ih

输入高度。

out_w, ow

输出宽度。

out_h, oh

输出高度。

in

输入帧数。

on

输出帧数。

in_time, it

输入时间戳以秒表示。如果输入时间戳未知,则为 NAN。

out_time, time, ot

输出时间戳以秒表示。

x
y

最后根据当前输入帧的“x”和“y”表达式计算出“x”和“y”位置。

px
py

前一个输入帧的最后一个输出帧的“x”和“y”,或者当尚不存在此类帧(第一个输入帧)时为 0。

zoom

最后根据当前输入帧的“z”表达式计算的缩放。

pzoom

前一个输入帧的最后一个输出帧的最后计算的缩放。

duration

当前输入帧的输出帧数。根据每个输入帧的“d”表达式计算。

pduration

为前一个输入帧创建的输出帧数

a

有理数:输入宽度/输入高度

sar

样本纵横比

dar

显示纵横比

39.293.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)'
    

39.294 zscale

使用 z.lib 库缩放(调整大小)输入视频: https://github.com/sekrit-twc/zimg。要启用此过滤器的编译,您需要使用--enable-libzimg.

zscale 过滤器通过更改输出样本宽高比,强制输出显示宽高比与输入相同。

如果输入图像格式与下一个过滤器请求的格式不同,则 zscale 过滤器会将输入转换为请求的格式。

39.294.1 选项

该过滤器接受以下选项。

width, w
height, h

设置输出视频尺寸表达式。默认值是输入尺寸。

如果宽度w值为 0,则输入宽度用于输出。如果heighth值为 0,则输入高度将用于输出。

如果其中一个且只有一个值为 -n,且 n >= 1,则 zscale 过滤器将使用一个值来维持输入图像的纵横比,该纵横比是根据其他指定尺寸计算得出的。然而,之后它将确保计算出的尺寸可被 n 整除,并在必要时调整该值。

如果两个值都是 -n 并且 n >= 1,则行为将与前面详述的两个值都设置为 0 相同。

请参阅下面的维度表达式中可接受的常量列表。

size, s

设置视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

dither, d

设置抖动类型。

可能的值为:

none
ordered
random
error_diffusion

默认为无。

filter, f

设置调整大小过滤器类型。

可能的值为:

point
bilinear
bicubic
spline16
spline36
lanczos

默认为双线性。

range, r

设置颜色范围。

可能的值为:

input
limited
full

默认与输入相同。

primaries, p

设置原色。

可能的值为:

input
709
unspecified
170m
240m
2020

默认与输入相同。

transfer, t

设置传输特性。

可能的值为:

input
709
unspecified
601
linear
2020_10
2020_12
smpte2084
iec61966-2-1
arib-std-b67

默认与输入相同。

matrix, m

设置色彩空间矩阵。

可能的值是:

input
709
unspecified
470bg
170m
2020_ncl
2020_cl

默认与输入相同。

rangein, rin

设置输入颜色范围。

可能的值为:

input
limited
full

默认与输入相同。

primariesin, pin

设置输入原色。

可能的值为:

input
709
unspecified
170m
240m
2020

默认与输入相同。

transferin, tin

设置输入传输特性。

可能的值为:

input
709
unspecified
601
linear
2020_10
2020_12

默认与输入相同。

matrixin, min

设置输入色彩空间矩阵。

可能的值是:

input
709
unspecified
470bg
170m
2020_ncl
2020_cl
chromal, c

设置输出色度位置。

可能的值为:

input
left
center
topleft
top
bottomleft
bottom
chromalin, cin

设置输入色度位置。

可能的值为:

input
left
center
topleft
top
bottomleft
bottom
npl

设置标称峰值亮度。

param_a

用于缩放滤波器的参数 A。参数“b”表示双三次,滤波器抽头数表示 lanczos。

param_b

用于缩放滤波器的参数 B。参数“c”代表双三次。

的价值观wH选项是包含以下常量的表达式:

in_w
in_h

输入的宽度和高度

iw
ih

它们与in_win_h相同。

out_w
out_h

输出(缩放)宽度和高度

ow
oh

这些与out_wout_h相同

a

与iw / ih相同

sar

输入样本长宽比

dar

输入显示宽高比。计算自(iw / ih) * sar.

hsub
vsub

水平和垂直输入色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

ohsub
ovsub

水平和垂直输出色度子样本值。例如,对于像素格式“yuv422p”,hsub为 2,vsub为 1。

39.294.2 命令

该过滤器支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保留为当前值。

40 个 OpenCL 视频过滤器

以下是当前可用的 OpenCL 视频过滤器的描述。

要启用这些过滤器的编译,您需要使用 --enable-opencl.

运行 OpenCL 过滤器需要您初始化硬件设备并将该设备传递给任何过滤器图中的所有过滤器。

-init_hw_device opencl[=name][:device[,key=value...]]

使用给定的设备参数 初始化一个名为name的opencl类型的新硬件设备。

-filter_hw_device name

将名为name的硬件设备传递给任何过滤器图中的所有过滤器。

有关更多详细信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 在第二个平台上选择第一个设备并使用默认参数运行 avgblur_opencl 过滤器的示例。
    -init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
    

由于 OpenCL 过滤器无法访问普通内存中的帧数据,因此所有帧数据在使用之前都需要上传( hwupload )到连接到适当设备的硬件表面,然后下载( hwdownload)回普通内存。请注意,hwupload将上传到与软件框架具有相同布局的表面,因此可能需要在将输入转换为正确格式之前立即添加格式过滤器,并且hwdownload不支持输出上的所有格式 - 它可能有必要在图表中紧随其后 插入附加格式过滤器以获得支持格式的输出。

40.1 avgblur_opencl

应用平均模糊滤镜。

该过滤器接受以下选项:

sizeX

设置水平半径大小。范围为[1, 1024],默认值为1

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

sizeY

设置垂直半径大小。范围为[1, 1024],默认值为0。如果为零,sizeX则将使用该值。

40.1.1 示例

  • 应用水平和垂直尺寸为 3 的平均模糊滤波器,将输出的每个像素设置为输入中以其为中心的 7x7 区域的平均值。对于图像边缘的像素,该区域不会超出图像边界,因此在计算中不使用超出范围的坐标。
    -i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
    

40.2 boxblur_opencl

对输入视频应用 boxblur 算法。

它接受以下参数:

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

下面是接受的选项的描述。

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

设置用于模糊相应输入平面的框半径表达式(以像素为单位)。

半径值必须是非负数,并且不得大于min(w,h)/2亮度和 alpha 平面以及min(cw,ch)/2色度平面的表达式的值。

默认值亮度半径是“2”。如果没有指定, 色度半径阿尔法半径默认为设置的相应值亮度半径

表达式可以包含以下常量:

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像的宽度和高度(以像素为单位)。

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式“yuv422p”,hsub为2,vsub为1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定将 boxblur 滤镜应用到相应平面的次数。

默认值亮度功率是2。如果没有指定, 色度功率阿尔法功率默认为设置的相应值亮度功率

值为 0 将禁用该效果。

40.2.1 示例

应用 boxblur 过滤器,将输出的每个像素分别设置为每个平面的 box-radiuses luma_radiuschroma_radiusalpha_radius的平均值。滤波器会将luma_powerchroma_poweralpha_power时间应用到相应的平面上。对于图像边缘的像素,半径不会超出图像边界,因此计算中不使用超出范围的坐标。

  • 应用 boxblur 滤镜,将亮度、色度和 alpha 半径设置为 2,并将亮度、色度和 alpha 幂设置为 3。对于图像的每个平面,滤镜将运行 3 次,盒子半径设置为 2。
    -i INPUT -vf "hwupload, boxblur_opencl=luma_radius=2:luma_power=3, hwdownload" OUTPUT
    -i INPUT -vf "hwupload, boxblur_opencl=2:3, hwdownload" OUTPUT
    
  • 应用 boxblur 滤镜,将亮度半径设置为 2,将 luma_power 设置为 1,将 chroma_radius 设置为 4,将 chroma_power 设置为 5,将 alpha_radius 设置为 3,将 alpha_power 设置为 7。

    对于亮度平面,2x2 的盒子半径将运行一次。

    对于色度平面,4x4 盒子半径将运行 5 次。

    对于 alpha 平面,3x3 的盒子半径将运行 7 次。

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

40.3 colorkey_opencl

RGB 色彩空间颜色键控。

该过滤器接受以下选项:

color

将替换为透明度的颜色。

similarity

与主色的相似度百分比。

0.01 仅匹配确切的关键颜色,而 1.0 匹配所有内容。

blend

混合百分比。

0.0 使像素完全透明或根本不透明。

值越高,像素就越透明,透明度越高,像素颜色与关键颜色越相似。

40.3.1 示例

  • 通过一些轻微的混合使输入中的每个半绿色像素透明:
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

40.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

40.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
    

40.5 erosion_opencl

对视频应用腐蚀效果。

此过滤器用局部 (3x3) 最小值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化。范围为[0, 65535],默认值为65535。如果0,平面将保持不变。

coordinates

指定要引用的像素的标志。范围为[0, 255],默认值为255,即使用所有八个像素。

以 为中心的局部 3x3 坐标区域的标志x

1 2 3

4×5

6 7 8

40.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
    

40.6 deshake_opencl

基于特征点的视频稳定滤波器。

该过滤器接受以下选项:

tripod

通过防止相机从原始帧发生任何移动来模拟三脚架。默认为0.

debug

是否应在处理后的输出和控制台中显示附加调试信息。

请注意,为了查看控制台调试输出,您还需要传递-v verbose给 ffmpeg。

仅 RGB 输入支持输出视频中的视点匹配。

默认为0.

adaptive_crop

是否在边界处进行一点点裁剪以减少镜像像素的数量。

默认为1.

refine_features

是否应在子像素级别细化特征点。

可以关闭此功能,以牺牲精度为代价稍微提高性能。

默认为1.

smooth_strength

0.0应用于从到 的相机路径的平滑强度1.0

1.0是最大平滑强度,小于该值会导致平滑程度降低。

0.0使滤波器在每帧的基础上自适应地选择平滑强度。

默认为0.0.

smooth_window_multiplier

控制平滑窗口的大小(缓冲以确定运动信息的帧数)。

平滑窗口的大小是通过将视频的帧速率乘以该数字来确定的。

可接受的值范围从0.110.0

较大的值会增加可用于确定如何平滑相机路径的运动数据量,从而可能提高平滑度,但也会增加延迟和内存使用量。

默认为2.0.

40.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
    

40.7 dilation_opencl

对视频应用膨胀效果。

此过滤器用局部 (3x3) 最大值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化。范围为[0, 65535],默认值为65535。如果0,平面将保持不变。

coordinates

指定要引用的像素的标志。范围为[0, 255],默认值为255,即使用所有八个像素。

以 为中心的局部 3x3 坐标区域的标志x

1 2 3

4×5

6 7 8

40.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
    

40.8 nlmeans_opencl

通过 OpenCL 的非局部均值降噪滤波器,该滤波器接受与nlmeans相同的选项。

40.9 overlay_opencl

将一个视频叠加在另一个视频之上。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。该过滤器要求所有输入具有相同的内存布局。因此,可能需要进行格式转换。

该过滤器接受以下选项:

x

设置叠加视频在主视频上的 x 坐标。默认值为0

y

设置叠加视频在主视频上的 y 坐标。默认值为0

40.9.1 示例

  • 在输入视频的左上角叠加图像 LOGO。两个输入均为 yuv420p 格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    
  • 输入具有相同的颜色通道内存布局,覆盖层具有额外的 alpha 平面,例如 INPUT 是 yuv420p,LOGO 是 yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    

40.10 pad_opencl

向输入图像添加填充,并将原始输入放置在提供的xy坐标处。

它接受以下选项:

width, w
height, h

指定添加了填充的输出图像尺寸的表达式。如果宽度高度的值为0,则相应的输入尺寸将用于输出。

宽度表达式可以引用高度表达式设置的值 ,反之亦然

宽度高度的默认值为0。

x
y

指定将输入图像放置在填充区域内相对于输出图像的上/左边框的偏移量。

x表达式可以引用y表达式设置的值 ,反之亦然。

xy的默认值为0。

如果xy的计算结果为负数,它们将被更改,以便输入图像位于填充区域的中心。

color

指定填充区域的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

aspect

填充到一个方面而不是分辨率。

widthheightxy选项的值 是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

它们与in_win_h相同。

out_w
out_h

输出宽度和高度(填充区域的大小),由宽度高度表达式指定。

ow
oh

它们与out_wout_h相同。

x
y

x 和 y 偏移量由xy表达式指定 ,如果尚未指定,则为 NAN。

a

与iw / ih相同

sar

输入样本长宽比

dar

输入显示宽高比,与 ( iw / ih ) * sar相同

40.11 prewitt_opencl

将 Prewitt 运算符 ( https://en.wikipedia.org/wiki/Prewitt_operator ) 应用到输入视频流。

过滤器接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置将与过滤结果相乘的值。范围为[0.0, 65535],默认值为1.0

delta

设置将添加到过滤结果的值。范围为[-65535, 65535],默认值为0.0

40.11.1 示例

  • 应用 Prewitt 运算符,将比例设置为 2,将增量设置为 10。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

40.12 program_opencl

使用 OpenCL 程序过滤视频。

source

OpenCL 程序源文件。

kernel

程序中的内核名称。

inputs

过滤器的输入数量。默认为 1。

size, s

输出帧的大小。默认与第一个输入相同。

program_opencl过滤器还支持帧同步选项。

程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都会作为单独的 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));
    }
    

40.13 remap_opencl

使用第二个:Xmap 和第三个:Ymap 输入视频流重新映射像素。

位置 (X, Y) 处的目标像素将从源 (x, y) 位置拾取,其中 x = Xmap(X, Y) 且 y = Ymap(X, Y)。如果映射值超出范围,则像素的零值将用于目标像素。

Xmap 和 Ymap 输入视频流的尺寸必须相同。输出视频流将具有 Xmap/Ymap 视频流尺寸。Xmap和Ymap输入视频流是32位浮点像素格式,单通道。

interp

指定用于像素重新映射的插值。允许的值为nearlinear。默认值为linear

fill

指定未映射像素的颜色。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分。默认颜色是black.

40.14 roberts_opencl

将 Roberts 交叉运算符 ( https://en.wikipedia.org/wiki/Roberts_cross ) 应用到输入视频流。

过滤器接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置将与过滤结果相乘的值。范围为[0.0, 65535],默认值为1.0

delta

设置将添加到过滤结果的值。范围为[-65535, 65535],默认值为0.0

40.14.1 示例

  • 应用 Roberts 交叉运算符,比例设置为 2,增量设置为 10
    -i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

40.15 sobel_opencl

将 Sobel 运算符 ( https://en.wikipedia.org/wiki/Sobel_operator ) 应用到输入视频流。

过滤器接受以下选项:

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

scale

设置将与过滤结果相乘的值。范围为[0.0, 65535],默认值为1.0

delta

设置将添加到过滤结果的值。范围为[-65535, 65535],默认值为0.0

40.15.1 示例

  • 应用 sobel 算子,比例设置为 2,增量设置为 10
    -i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

40.16 tonemap_opencl

使用色调映射执行 HDR(PQ/HLG) 到 SDR 转换。

它接受以下参数:

tonemap

指定要使用的色调映射运算符。与tonemap中的tonemap 选项相同。

param

调整色调映射算法。与tonemap中的参数选项相同。

desat

对超过此亮度级别的高光应用去饱和度。参数越高,保留的颜色信息就越多。此设置通过(平滑地)变成白色来帮助防止超级高光的颜色不自然地过曝。这使得图像感觉更自然,但代价是减少有关超出范围颜色的信息。

默认值是0.5,这里的算法和目前的cpu版本tonemap有点不同。设置为 0.0 会禁用此选项。

threshold

色调映射算法参数根据每个场景进行微调。并且使用阈值来检测场景是否发生变化。如果当前帧平均亮度与当前运行平均值之间的距离超过阈值,我们将重新计算场景平均值和峰值亮度。默认值为 0.2。

format

指定输出像素格式。

目前支持的格式有:

p010
nv12
range, r

设置输出颜色范围。

可能的值为:

tv/mpeg
pc/jpeg

默认与输入相同。

primaries, p

设置输出原色。

可能的值为:

bt709
bt2020

默认与输入相同。

transfer, t

设置输出传输特性。

可能的值为:

bt709
bt2020

默认为 bt709。

matrix, m

设置输出色彩空间矩阵。

可能的值是:

bt709
bt2020

默认与输入相同。

40.16.1 示例

  • 使用线性算子将 HDR(PQ/HLG) 视频转换为 bt2020-transfer-characteristic p010 格式。
    -i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
    

40.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”。

40.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
    

40.18 xfade_opencl

使用 OpenCL 使用自定义过渡效果交叉淡入淡出两个视频。

它接受以下选项:

transition

设置一种可能的过渡效果。

custom

选择自定义过渡效果,实际的过渡描述将从源和内核选项中选取。

fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown

默认过渡是淡入淡出。

source

用于自定义转换的 OpenCL 程序源文件。

kernel

设置用于从程序源文件进行自定义转换的内核名称。

duration

设置视频过渡的持续时间。

offset

设置相对于第一个视频的过渡开始时间。

程序源文件必须包含具有给定名称的内核函数,该函数将为输出的每个平面运行一次。平面上的每次运行都会作为单独的 2D 全局 NDRange 排队,并为每个要生成的像素提供一个工作项。因此,每个工作项的全局 ID 偏移量是目标图像中像素的坐标。

内核函数需要采用以下参数:

  • 目标图像,__write_only image2d_t

    该图像将成为输出;内核应该写所有的内容。

  • 第一个源图像,__read_only image2d_t。第二个源图像,__read_only image2d_t

    这些是每个输入上的最新图像。内核可以读取它们以生成输出,但无法写入它们。

  • 过渡进度,浮动。该值始终介于 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);
    }
    

41 VAAPI 视频滤镜

VAAPI视频滤镜通常与VAAPI解码器和VAAPI编码器一起使用。以下是 VAAPI 视频滤镜的说明。

要启用这些过滤器的编译,您需要使用 --enable-vaapi.

要使用 vaapi 过滤器,您需要正确设置 vaapi 设备。欲了解更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/VAAPI

41.1 overlay_vaapi

将一个视频叠加在另一个视频之上。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。

该过滤器接受以下选项:

x
y

设置主视频上叠加视频的 x 和 y 坐标表达式。

两个表达式的默认值为“0”。

w
h

设置主视频上叠加视频的宽度和高度的表达式。

“w”的默认值为“overlay_iw”,“h”的默认值为“overlay_ih*w/overlay_iw”。

表达式可以包含以下参数:

main_w, W
main_h, H

主要输入宽度和高度。

overlay_iw
overlay_ih

覆盖输入宽度和高度。

overlay_w, w
overlay_h, h

叠加输出宽度和高度。

overlay_x, x
overlay_y, y

覆盖层在主层内部的位置

alpha

设置叠加视频的透明度。允许的范围是 0.0 到 1.0。价值越高意味着透明度越低。默认值为1.0

eof_action

请参阅帧同步

shortest

请参阅帧同步

repeatlast

请参阅帧同步

该过滤器还支持帧同步选项。

41.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
    
  • 在距离 INPUT 视频左上角偏移 (200, 100) 处叠加图像 LOGO。输入的颜色通道具有相同的内存布局,覆盖层具有额外的 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
    

41.2 tonemap_vaapi

通过色调映射执行 HDR(高动态范围)到 SDR(标准动态范围)的转换。它将 HDR10 内容的动态范围映射到 SDR 内容。目前它仅接受 HDR10 作为输入。

它接受以下参数:

format

指定输出像素格式。

目前支持的格式有:

p010
nv12

默认为 nv12。

primaries, p

设置输出原色。

默认与输入相同。

transfer, t

设置输出传输特性。

默认为 bt709。

matrix, m

设置输出色彩空间矩阵。

默认与输入相同。

41.2.1 示例

  • 将 HDR(HDR10) 视频转换为 bt2020-transfer-characteristic p010 格式
    tonemap_vaapi=format=p010:t=bt2020-10
    

41.3 hstack_vaapi

水平堆叠输入视频。

这是hstack过滤器的 VA-API 变体,每个输入流可能有不同的高度,该过滤器将缩小/放大每个输入流,同时保持原始方面。

它接受以下选项:

inputs

请参阅hstack

shortest

请参阅hstack

height

设置输出高度。如果设置为 0,此过滤器会将输出高度设置为第一个输入流的高度。默认值为 0。

41.4 vstack_vaapi

垂直堆叠输入视频。

这是vstack过滤器的 VA-API 变体,每个输入流可能具有不同的宽度,该过滤器将缩小/放大每个输入流,同时保持原始方面。

它接受以下选项:

inputs

请参阅vstack

shortest

请参阅vstack

width

设置输出的宽度。如果设置为 0,此过滤器会将输出宽度设置为第一个输入流的宽度。默认值为 0。

41.5 xstack_vaapi

将视频输入堆叠到自定义布局中。

这是xstack过滤器的 VA-API 变体,每个输入流可能有不同的大小,该过滤器会将每个输入流缩小/放大到给定的输出大小,或第一个输入流的大小。

它接受以下选项:

inputs

请参阅xstack

shortest

请参阅xstack

layout

请参阅xstack。此外,这允许用户为每个输入流提供输出大小。

xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

请参阅xstack

grid_tile_size

设置每个输入流的输出大小网格已设置。如果未设置此选项,则此过滤器将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

fill

请参阅xstack

42 Vulkan 视频滤镜

以下是当前可用的 Vulkan 视频过滤器的描述。

--enable-vulkan要启用这些过滤器的编译,您需要使用和--enable-libglslang或来配置 FFmpeg --enable-libshaderc

运行 Vulkan 过滤器需要您初始化硬件设备并将该设备传递给任何过滤器图中的所有过滤器。

-init_hw_device vulkan[=name][:device[,key=value...]]

使用key=value中给定的设备参数和选项初始化一个名为name的vulkan类型的新硬件设备。支持以下选项:

debug

如果设置为 1,则打开验证层。

linear_images

分配线性图像。不适用于解码。

disable_multiplane

禁用多平面图像。不适用于解码。

-filter_hw_device name

将名为name的硬件设备传递给任何过滤器图中的所有过滤器。

有关更多详细信息,请参阅https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 选择第一个设备并使用默认参数运行 nlmeans_vulkan 过滤器的示例。
    -init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
    

由于 Vulkan 过滤器无法访问普通内存中的帧数据,因此所有帧数据在使用之前都需要上传(hwupload)到连接到相应设备的硬件表面,然后下载(hwdownload)回普通内存。请注意,hwupload将上传到与软件框架具有相同布局的框架,因此可能需要在将输入转换为正确格式之前立即添加格式过滤器,并且hwdownload不支持输出上的所有格式 - 它是通常需要在图表中紧随其后 插入附加格式过滤器以获得支持格式的输出。

42.1 avgblur_vulkan

应用平均模糊滤镜,使用 Vulkan 在 GPU 上实现。

该过滤器接受以下选项:

sizeX

设置水平半径大小。范围为[1, 32],默认值为3

sizeY

设置垂直半径大小。范围为[1, 32],默认值为3

planes

设置要过滤的平面。默认值为0xf,处理所有平面。

42.2 blend_vulkan

将两个 Vulkan 框架相互混合。

blend过滤器采用两个输入流并输出一个流,第一个输入是“顶层”,第二个输入是“底层”。默认情况下,当最长的输入终止时,输出终止。

下面是接受的选项的描述。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

在all_mode的情况下,为特定像素组件或所有像素组件设置混合模式。默认值为normal

组件模式的可用值为:

normal
multiply

42.3 bwdif_vulkan

使用bwdif的去隔行器,即“Bob Weaver 去隔行过滤器”算法,使用 Vulkan 在 GPU 上实现。

它接受以下参数:

mode

采用的隔行扫描模式。它接受以下值之一:

0, send_frame

每帧输出一帧。

1, send_field

每个字段输出一帧。

默认值为send_field

parity

针对输入隔行扫描视频假设的图像场奇偶校验。它接受以下值之一:

0, tff

假设顶部字段是第一个。

1, bff

假设底部字段是第一个。

-1, auto

启用字段奇偶校验的自动检测。

默认值为auto。如果隔行扫描未知或解码器不导出此信息,则将假定顶场优先。

deint

指定要取消隔行扫描的帧。接受以下值之一:

0, all

对所有帧进行去隔行处理。

1, interlaced

仅对标记为隔行的去隔行帧进行处理。

默认值为all

42.4 chromaber_vulkan

应用模拟色差的效果。最适合 RGB 输入,但也可提供与 YCbCr 输入类似的效果。

dist_x

水平位移乘数。从图像中心开始,每个色度像素的位置都将乘以该数量。默认为0.

dist_y

类似地,这设置了垂直位移乘数。默认为0.

42.5 color_vulkan

创建纯色 Vulkan 帧的视频源。对于基准测试或叠加很有用。

它接受以下参数:

color

要使用的颜色。名称或十六进制值。默认值为black

size

输出帧的大小。默认值为1920x1080

rate

输出的帧速率。默认值为60每秒帧数。

duration

视频时长。默认值为-0.000001

sar

视频信号的宽高比。默认值为1/1

format

输出 Vulkan 帧的像素格式。默认值为yuv444p

out_range

设置输出 YCbCr 采样范围。

这允许覆盖自动检测到的值,并允许强制将特定值用于输出和编码器。如果未指定,则范围取决于像素格式。可能的值:

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(8 位亮度时为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(8 位亮度时为 16-235)。

42.6 vflip_vulkan

垂直翻转图像。

42.7 hflip_vulkan

水平翻转图像。

42.8 flip_vulkan

沿垂直轴和水平轴翻转图像。

42.9 gblur_vulkan

在 Vulkan 帧上应用高斯模糊滤镜。

该过滤器接受以下选项:

sigma

设置水平西格玛,高斯模糊的标准差。默认为0.5.

sigmaV

设置垂直西格玛,如果为负,则与 相同sigma。默认为-1.

planes

设置要过滤的平面。默认情况下,所有平面都会被过滤。

size

沿水平轴设置内核大小。默认为19.

sizeV

沿垂直轴设置内核大小。默认值为,它设置为使用与size0相同的值。

42.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] 范围内的奇数。

42.11 overlay_vulkan

将一个视频叠加在另一个视频之上。

它需要两个输入并有一个输出。第一个输入是“主”视频,第二个输入覆盖在其上。该过滤器要求所有输入使用相同的像素格式。因此,可能需要进行格式转换。

该过滤器接受以下选项:

x

设置叠加视频在主视频上的 x 坐标。默认值为0

y

设置叠加视频在主视频上的 y 坐标。默认值为0

42.12 transpose_vt

在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

hflip

水平翻转输入视频。

vflip

垂直翻转输入视频。

passthrough

如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当height >= width时)。

landscape

保留景观几何形状(当width >= height时)。

42.13 transpose_vulkan

在输入视频中调换行和列,并可选择翻转它。有关更深入的示例,请参阅转置视频过滤器,它共享大部分相同的选项。

它接受以下参数:

dir

指定转置方向。

可以采用以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

passthrough

如果输入几何图形与指定值指定的几何图形匹配,则不应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何形状(当height >= width时)。

landscape

保留景观几何形状(当width >= height时)。

43 QSV 视频滤波器

以下是当前可用的 QSV 视频滤镜的说明。

--enable-libmfx要启用这些过滤器的编译,您需要使用或配置 FFmpeg --enable-libvpl

要使用 QSV 滤波器,您需要正确设置 QSV 设备。欲了解更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/QuickSync

43.1 hstack_qsv

水平堆叠输入视频。

这是hstack过滤器的 QSV 变体,每个输入流可能有不同的高度,该过滤器将缩小/放大每个输入流,同时保持原始方面。

它接受以下选项:

inputs

请参阅hstack

shortest

请参阅hstack

height

设置输出高度。如果设置为 0,此过滤器会将输出高度设置为第一个输入流的高度。默认值为 0。

43.2 vstack_qsv

垂直堆叠输入视频。

这是vstack过滤器的 QSV 变体,每个输入流可能具有不同的宽度,该过滤器将缩小/放大每个输入流,同时保持原始方面。

它接受以下选项:

inputs

请参阅vstack

shortest

请参阅vstack

width

设置输出的宽度。如果设置为 0,此过滤器会将输出宽度设置为第一个输入流的宽度。默认值为 0。

43.3 xstack_qsv

将视频输入堆叠到自定义布局中。

这是xstack过滤器的 QSV 变体。

它接受以下选项:

inputs

请参阅xstack

shortest

请参阅xstack

layout

请参阅xstack。此外,这允许用户为每个输入流提供输出大小。

xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

请参阅xstack

grid_tile_size

设置每个输入流的输出大小网格已设置。如果未设置此选项,则此过滤器将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

fill

请参阅xstack

44 个视频源

以下是当前可用视频源的描述。

44.1 buffer

缓冲视频帧,并使它们可供过滤器链使用。

该源主要用于编程用途,特别是通过中定义的接口libavfilter/buffersrc.h

它接受以下参数:

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

width

输入视频宽度。

height

输入视频高度。

pix_fmt

表示缓冲视频帧的像素格式的字符串。可以是像素格式对应的数字,也可以是像素格式名称。

time_base

指定缓冲帧的时间戳所采用的时基。

frame_rate

指定视频流的预期帧速率。

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(请检查枚举 AVPixelFormat 定义)libavutil/pixfmt.h),本例对应:

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,可以将选项指定为平面字符串,但不推荐使用此语法:

宽度高度pix_fmttime_base.numtime_base.denpixel_aspect.numpixel_aspect.den

44.2 cellauto

创建由基本元胞自动机生成的模式。

元胞自动机的初始状态可以通过以下方式定义 文件名图案选项。如果未指定此类选项,则会随机创建初始状态。

在每个新帧,视频中的新行都会填充下一代元胞自动机的结果。整个框架被填充时的行为由滚动选项。

该来源接受以下选项:

filename, f

从指定文件中读取初始元胞自动机状态,即起始行。在文件中,每个非空白字符都被视为活动单元格,换行符将终止该行,并且文件中的其他字符将被忽略。

pattern, p

从指定的字符串中读取初始元胞自动机状态,即起始行。

字符串中的每个非空白字符都被视为活动单元格,换行符将终止该行,并且字符串中的其他字符将被忽略。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始元胞自动机行的随机填充比率。它是一个浮点数,范围从0到1,默认为1/PHI。

当指定文件或模式时,此选项将被忽略。

random_seed, seed

设置随机填充初始行的种子,必须是 0 到 UINT32_MAX 之间的整数。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。

rule

设置元胞自动机规则,范围是0到255的数字。默认值为110。

size, s

设置输出视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

如果文件名或者图案指定时,大小默认设置为指定初始状态行的宽度,高度设置为width * PHI。

如果尺寸设置后,它必须包含指定模式字符串的宽度,并且指定模式将在较大的行中居中。

如果未指定文件名或模式字符串,则大小值默认为“320x518”(用于随机生成的初始状态)。

scroll

如果设置为 1,则当输出中的所有行都已填充时向上滚动输出。如果设置为 0,则新生成的行将在填充底行后立即写入顶行。默认为 1。

start_full, full

如果设置为 1,则在输出第一帧之前用生成的行完全填充输出。这是默认行为,若要禁用,请将值设置为 0。

stitch

如果设置为 1,则将左右行边缘缝合在一起。这是默认行为,若要禁用,请将值设置为 0。

44.2.1 示例

  • 读取初始状态图案,并指定大小为 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
    

44.3 coreimagesrc

在 OSX 上使用 Apple 的 CoreImage API 在 GPU 上生成的视频源。

该视频源是coreimage视频过滤器的专门版本。在应用的过滤器链的开头使用核心图像生成器来生成内容。

coreimagesrc 视频源接受以下选项:

list_generators

列出所有可用的生成器及其各自的选项以及可能的最小值和最大值以及默认值。

list_generators=true
size, s

指定源视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为320x240

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

sar

设置源视频的样本宽高比。

duration, d

设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

如果未指定,或者表示的持续时间为负,则视频应永久生成。

此外,还接受coreimage视频过滤器的所有选项。完整的过滤器链可用于进一步处理生成的输入,而无需 CPU-HOST 传输。有关详细信息,请参阅coreimage文档和示例。

44.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 视频源。

44.4 ddagrab

通过桌面复制 API 捕获 Windows 桌面。

该过滤器专门返回 D3D11 硬件帧,用于 GPU 上编码或处理。因此任何类型的软件处理都需要 明确的硬件下载。

它接受以下选项:

output_idx

要捕获的 DXGI 输出索引。

通常对应于 Windows 给屏幕的索引减一,因此它从 0 开始。

默认输出 0。

draw_mouse

是否绘制鼠标光标。

默认为 true。

仅影响硬件光标。如果游戏或应用程序呈现自己的光标,它将始终被捕获。

framerate

捕获桌面的帧速率。

默认为 30 FPS。

video_size

指定捕获视频的大小。

默认为屏幕的全尺寸。

如果小于屏幕尺寸,则从底部/右侧裁剪。

offset_x

捕获视频的水平偏移。

offset_y

捕获视频的垂直偏移。

output_fmt

所需的过滤器输出格式。默认为 8 位 BGRA。

它接受以下值:

auto

将所有支持的输出格式传递给 DDA 并返回 DDA 决定使用的格式。

8bit
bgra

8 位格式始终有效,如果需要,DDA 将转换为它们。

10bit
x2bgr10

如果请求 10 位格式但不可用,过滤器初始化将失败。

44.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

44.5 gradients

生成多个渐变。

size, s

设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“640x480”。

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

c0, c1, c2, c3, c4, c5, c6, c7

设置 8 种颜色。颜色的默认值是随机选择一种。

x0, y0, y0, y1

设置渐变线源点和目标点。如果为负数或超出范围,则随机选择。

nb_colors, n

设置一次使用的颜色数量。允许的范围是 2 到 8。默认值为 2。

seed

设置用于拾取梯度线点的种子。

duration, d

设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

如果未指定,或者表示的持续时间为负,则视频应永久生成。

speed

设置渐变旋转的速度。

type, t

设置渐变类型,可以是linearradialcircularspiral

44.6 mandelbrot

生成 Mandelbrot 集分形,并逐渐向start_xstart_y指定的点缩放。

该来源接受以下选项:

end_pts

设置终端 pts 值。默认值为 400。

end_scale

设置终端比例值。必须是浮点值。默认值为 0.3。

inner

设置内部着色模式,即用于绘制Mandelbrot分形内部区域的算法。

它应采用以下值之一:

black

设置黑色模式。

convergence

显示收敛之前的时间。

mincol

根据最接近迭代原点的点设置颜色。

period

设置周期模式。

默认值为mincol

bailout

设置救助值。默认值为 10.0。

maxiter

设置渲染算法执行的最大迭代次数。默认值为 7189。

outer

设置外部着色模式。它应采用以下值之一:

iteration_count

设置迭代计数模式。

normalized_iteration_count

设置归一化迭代计数模式。

默认值为Normalized_iteration_count

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

size, s

设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“640x480”。

start_scale

设置初始比例值。默认值为 3.0。

start_x

设置初始 x 位置。必须是 -100 到 100 之间的浮点值。默认值为 -0.743643887037158704752191506114774。

start_y

设置初始 y 位置。必须是 -100 到 100 之间的浮点值。默认值为 -0.131825904205311970493132056385139。

44.7 mptestsrc

生成由 MPlayer 测试过滤器生成的各种测试模式。

生成的视频大小是固定的,为256x256。该源对于测试编码功能特别有用。

该来源接受以下选项:

rate, r

指定源视频的帧速率,即每秒生成的帧数。它必须是格式为 frame_rate_num / frame_rate_den的字符串、整数、浮点数或有效的视频帧速率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

如果未指定,或者表示的持续时间为负,则视频应永久生成。

test, t

设置要执行的测试的编号或名称。支持的测试有:

dc_luma
dc_chroma
freq_luma
freq_chroma
amp_luma
amp_chroma
cbp
mv
ring1
ring2
all
max_frames, m

设置每次测试生成的最大帧数,默认值为 30。

默认值为“all”,它将循环显示所有测试的列表。

一些例子:

mptestsrc=t=dc_luma

将生成“dc_luma”测试模式。

44.8 frei0r_src

提供 frei0r 源。

要启用此过滤器的编译,您需要安装 frei0r 标头并使用--enable-frei0r.

该源接受以下参数:

size

要生成的视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (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

44.9 life

生成生活模式。

本资料基于约翰·康威的人生游戏的概括。

源输入代表一个生命网格,每个像素代表一个细胞,该细胞可以处于两种可能状态之一:活着或死亡。每个细胞与其八个邻居相互作用,这些邻居是水平、垂直或对角相邻的细胞。

在每次交互中,网格都会根据所采用的规则进行演化,该规则指定了使细胞保持存活或诞生的相邻存活细胞的数量。这规则选项允许指定要采用的规则。

该来源接受以下选项:

filename, f

设置从中读取初始网格状态的文件。在文件中,每个非空白字符都被视为活动单元格,换行符用于分隔每行的末尾。

如果不指定该选项,则初始网格是随机生成的。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始随机网格的随机填充比率。它是一个浮点数,范围从0到1,默认为1/PHI。当指定文件时它会被忽略。

random_seed, seed

设置填充初始随机网格的种子,必须是 0 到 UINT32_MAX 之间的整数。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。

rule

设定生活规则。

可以使用“S NS /B NB ”类型的代码来指定规则,其中NSNB是 0-8 范围内的数字序列, NS指定使活动小区保持活动状态的活动相邻小区的数量, NB使死亡细胞变得活跃(即“出生”)的存活相邻细胞的数量“s”和“b”可以分别代替“S”和“B”。

或者,可以通过 18 位整数指定规则。9 个高位用于编码下一个细胞状态(如果每个数量的相邻存活细胞都存活),低位指定“诞生”新细胞的规则。更高阶的比特对更多数量的相邻单元进行编码。例如,数字 6153 =(12<<9)+9指定存活规则 12 和出生规则 9,对应于“S23/B03”。

默认值为“S23/B3”,这是原始的康威生命游戏规则,如果一个细胞有 2 或 3 个相邻的存活细胞,则该细胞将保持存活;如果死亡的细胞周围有 3 个存活的细胞,则将诞生一个新细胞细胞。

size, s

设置输出视频的大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分

如果文件名指定后,大小默认设置为与输入文件的大小相同。如果尺寸设置后,它必须包含输入文件中指定的大小,并且该文件中定义的初始网格位于较大的结果区域的中心。

如果未指定文件名,则大小值默认为“320x240”(用于随机生成的初始网格)。

stitch

如果设置为 1,则将左右网格边缘以及顶部和底部边缘缝合在一起。默认为 1。

mold

设置单元模具速度。如果设置,死细胞将从死亡颜色模具颜色步长为模具模具可以具有 0 到 255 之间的值。

life_color

设置活体(或新生)细胞的颜色。

death_color

设置死细胞的颜色。如果模具设置后,这是用于表示死细胞的第一种颜色。

mold_color

设置霉菌颜色,用于明确死亡和发霉的细胞。

对于这 3 个颜色选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“颜色”部分

44.9.1 示例

  • 读取网格图案,并将其置于大小为 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
    

44.10 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

allrgb返回所有 RGB 颜色的大小为 4096x4096 的帧。

allyuv返回所有 yuv 颜色的大小为 4096x4096 的帧。

color提供统一颜色的输入。

The colorchart source provides a colors checker chart.

The colorspectrum source provides a color spectrum input.

The haldclutsrc source provides an identity Hald CLUT. See also haldclut filter.

The nullsrc source returns unprocessed video frames. It is mainly useful to be employed in analysis / debugging tools, or as the source for filters which ignore the input data.

The pal75bars source generates a color bars pattern, based on EBU PAL recommendations with 75% color levels.

The pal100bars source generates a color bars pattern, based on EBU PAL recommendations with 100% color levels.

The rgbtestsrc source generates an RGB test pattern useful for detecting RGB vs BGR issues. You should see a red, green and blue stripe from top to bottom.

The smptebars source generates a color bars pattern, based on the SMPTE Engineering Guideline EG 1-1990.

The smptehdbars source generates a color bars pattern, based on the SMPTE RP 219-2002.

The testsrc source generates a test video pattern, showing a color pattern, a scrolling gradient and a timestamp. This is mainly intended for testing purposes.

The testsrc2 source is similar to testsrc, but supports more pixel formats instead of just rgb24. This allows using it as an input for other tests without requiring a format conversion.

The yuvtestsrc source generates an YUV test pattern. You should see a y, cb and cr stripe from top to bottom.

The sources accept the following parameters:

level

Specify the level of the Hald CLUT, only available in the haldclutsrc source. A level of N generates a picture of N*N*N by N*N*N pixels to be used as identity matrix for 3D lookup tables. Each component is coded on a 1/(N*N) scale.

color, c

Specify the color of the source, only available in the color source. For the syntax of this option, check the (ffmpeg-utils)"Color" section in the ffmpeg-utils manual.

size, s

Specify the size of the sourced video. For the syntax of this option, check the (ffmpeg-utils)"Video size" section in the ffmpeg-utils manual. The default value is 320x240.

This option is not available with the allrgb, allyuv, and haldclutsrc filters.

rate, r

Specify the frame rate of the sourced video, as the number of frames generated per second. It has to be a string in the format frame_rate_num/frame_rate_den, an integer number, a floating point number or a valid video frame rate abbreviation. The default value is "25".

duration, d

Set the duration of the sourced video. See (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual for the accepted syntax.

如果未指定,或者表示的持续时间为负,则视频应永久生成。

由于帧速率用作时间基准,因此包括最后一帧在内的所有帧都将具有完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则会向上舍入。

sar

设置源视频的样本宽高比。

alpha

指定背景的 Alpha(不透明度),仅在 testsrc2源中可用。该值必须介于 0(完全透明)和 255(完全不透明,默认值)之间。

decimals, n

设置时间戳中显示的小数位数,仅在 testsrc源中可用。

显示的时间戳值将对应于原始时间戳值乘以指定值的 10 次方。默认值为 0。

type

设置色谱类型,仅在 colorspectrum源中可用。可以是以下之一:

black
white
all
patch_size

设置单色色块的色块大小,仅在 colorchart源码中可用。默认为64x64.

preset

设置 colorchecker 颜色预设,仅在 colorchart源中可用。

可用值为:

reference
skintones

默认值为reference

44.10.1 示例

  • 生成时长为 5.3 秒、大小为 176x144、帧率为每秒 10 帧的视频:
    testsrc=duration=5.3:size=qcif:rate=10
    
  • 以下图形描述将生成不透明度为 0.2、大小为“qcif”、帧速率为每秒 10 帧的红色源:
    color=c=red@0.2:s=qcif:r=10
    
  • 如果要忽略输入的内容,nullsrc可以使用。以下命令通过使用滤波器在亮度平面中生成噪声geq
    nullsrc=s=256x256, geq=random(1)*255:128:128
    

44.10.2 命令

源码color支持以下命令:

c, color

设置创建的图像的颜色。接受相应的相同语法颜色选项。

44.11 openclsrc

使用 OpenCL 程序生成视频。

source

OpenCL 程序源文件。

kernel

程序中的内核名称。

size, s

要生成的帧的大小。必须设置此项。

format

用于生成的帧的像素格式。必须设置此项。

rate, r

每秒生成的帧数。默认值为“25”。

有关程序加载工作原理的详细信息,请参阅program_opencl 过滤器。

示例程序:

  • 通过根据输出图像中像素的位置设置像素值来生成颜色渐变。(请注意,这适用于所有像素格式,但生成的输出将不同。)
    __kernel void ramp(__write_only image2d_t dst,
                       unsigned int index)
    {
        int2 loc = (int2)(get_global_id(0), get_global_id(1));
    
        float4 val;
        val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));
    
        write_imagef(dst, loc, val);
    }
    
  • 生成谢尔宾斯基地毯图案,每帧平移一个像素。
    __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);
    }
    

44.12 sierpinski

生成谢尔宾斯基地毯/三角形分形,并随机平移。

该来源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“640x480”。

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

seed

设置用于随机平移的种子。

jump

设置单个平移目标的最大跳跃。允许的范围是从 1 到 10000。

type

设置分形类型,可以是默认值carpettriangle

44.13 zoneplate

生成波带片测试视频模式。

该来源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为“320x240”。

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

duration, d

设置源视频的持续时间。请参阅 ffmpeg-utils(1) 手册中的 (ffmpeg-utils) 持续时间部分, 了解可接受的语法。

如果未指定,或者表示的持续时间为负,则视频应永久生成。

sar

设置源视频的样本宽高比。

precision

设置正弦计算查找表的精度(以位为单位)。默认值为 10。允许的范围为 4 到 16。

xo

设置输出信号的水平轴偏移。默认值为 0。

yo

设置输出信号的垂直轴偏移。默认值为 0。

to

设置输出信号的时间轴偏移。默认值为 0。

k0

设置添加到信号相位的 0 阶常数。默认值为 0。

kx

设置水平轴的一阶相位因子乘数。默认值为 0。

ky

设置垂直轴的一阶相位因子乘数。默认值为 0。

kt

设置时间轴的一阶相位因子乘数。默认值为 0。

kxt, kyt, kxy

设置空间轴和时间轴组合的相位因子乘数。默认值为 0。

kx2

设置水平轴的二阶相位因子乘数。默认值为 0。

ky2

设置垂直轴的二阶相位因子乘数。默认值为 0。

kt2

设置时间轴的二阶相位因子乘数。默认值为 0。

ku

设置添加到最终相位的常数以产生信号的色度蓝色分量。默认值为 0。

kv

设置添加到最终相位的常数以产生信号的色度红色分量。默认值为 0。

44.13.1 命令

该源支持上述一些选项作为命令

44.13.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
    

45 个视频接收器

以下是当前可用视频接收器的描述。

45.1 buffersink

缓冲视频帧,并使它们可用于过滤器图的末尾。

该接收器主要用于编程使用,特别是通过中定义的接口libavfilter/buffersink.h 或选项系统。

它接受指向 AVBufferSinkContext 结构的指针,该结构定义传入缓冲区的格式,作为不透明参数传递给avfilter_init_filter初始化。

45.2 nullsink

空视频接收器:对输入视频完全不执行任何操作。它主要用作模板并用于分析/调试工具。

46 多媒体过滤器

以下是当前可用的多媒体过滤器的描述。

46.1 a3dscope

将输入音频转换为 3D 范围视频输出。

该过滤器接受以下选项:

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为hd720

fov

设置相机视野。默认值为 90 度。允许的范围是 40 到 150。

roll

设置相机胶卷。

pitch

设置相机间距。

yaw

设置相机偏航角。

xzoom

设置 X 轴上的相机变焦。

yzoom

设置 Y 轴上的相机变焦。

zzoom

设置 Z 轴上的相机变焦。

xpos

设置相机在 X 轴上的位置。

ypos

设置摄像机在 Y 轴上的位置。

zpos

设置相机在 Z 轴上的位置。

length

设置显示的音频波的长度(以帧数为单位)。

46.1.1 命令

Filter 支持以上一些选项作为命令

46.2 abitscope

将输入音频转换为视频输出,显示音频位范围。

该过滤器接受以下选项:

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为1024x256

colors

指定由空格或“|”分隔的颜色列表 它将用于绘制通道。无法识别或缺失的颜色将被白色替换。

mode, m

设置输出模式。可以是barstrace. 默认为bars.

46.3 adrawgraph

使用输入音频元数据绘制图表。

参见绘图

46.4 agraphmonitor

请参阅图形监视器

46.5 ahistogram

将输入音频转换为视频输出,显示音量直方图。

该过滤器接受以下选项:

dmode

指定直方图的计算方式。

它接受以下值:

single

对所有通道使用单个直方图。

separate

为每个通道使用单独的直方图。

默认为single.

rate, r

设置帧速率,表示为每秒的帧数。默认值为“25”。

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为hd720

scale

设置显示比例。

它接受以下值:

log

对数

sqrt

平方根

cbrt

立方根

lin

线性

rlog

反对数

默认为log.

ascale

设置幅度刻度。

它接受以下值:

log

对数

lin

线性

默认为log.

acount

设置在直方图中累积多少帧。默认值为 1。将其设置为 -1 会累积所有帧。

rheight

设置窗口高度的直方图比例。

slide

设置超声波图滑动。

它接受以下值:

replace

用新行替换旧行。

scroll

从上到下滚动。

默认为replace.

hmode

设置直方图模式。

它接受以下值:

abs

使用样本的绝对值。

sign

使用样本的未触及值。

默认为abs.

46.6 aphasemeter

测量输入音频的相位,将其导出为元数据lavfi.aphasemeter.phase,表示当前音频帧的平均相位。还可以生成视频输出并默认启用。音频作为第一个输出传递。

如果音频具有不同的通道布局,则音频将被重新矩阵为立体声。相位值[-1, 1]-1表示左右声道完全异相、1表示声道同相的范围内。

该过滤器接受以下选项,所有选项都与其视频输出相关:

rate, r

设置输出帧速率。默认值为25

size, s

设置输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为800x400

rc
gc
bc

指定红、绿、蓝对比度。默认值为271。允许的范围是[0, 255].

mpc

设置用于绘制中值相位的颜色。如果颜色是 none默认值,则不会绘制中值相位值。

video

启用视频输出。默认启用。

46.6.1 定相检测

该滤波器还检测立体声流中的异相和单声道序列。当序列持续时间较长或达到最小设置时,它会记录序列的开始、结束和持续时间。

过滤器接受以下检测选项:

phasing

启用单声道和异相检测。默认为禁用。

tolerance, t

设置单声道检测的相位容差,以幅度比表示。默认为0. 允许的范围是[0, 1].

angle, a

设置异相检测的角度阈值(以度为单位)。默认为170. 允许的范围是[90, 180].

duration, d

设置单声道或异相持续时间直到通知,以秒为单位。默认为2.

46.6.2 示例

  • ffmpeg以 0.001 相位容差检测 1 秒单声道的 完整示例:
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

46.7 avectorscope

将输入音频转换为视频输出,表示音频矢量范围。

该滤波器用于测量立体声音频流通道之间的差异。由相同的左右信号组成的单声道信号会产生垂直直线。任何立体分离都可以视为与这条线的偏差,从而创建利萨如图形。如果出现直线(或偏离直线)但水平的线,则表明左右通道异相。

该过滤器接受以下选项:

mode, m

设置矢量示波器模式。

可用值为:

lissajous

李萨如旋转了 45 度。

lissajous_xy

与上面相同,但没有旋转。

polar

形状类似半圆。

默认值为 '利萨如'。

size, s

设置输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (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

在先前和当前样本之间绘制抗锯齿线。

默认值为 ''。

scale

指定音频样本的幅度比例。

可用值为:

lin

线性。

sqrt

平方根。

cbrt

立方根。

log

对数。

swap

将左通道轴与右通道轴交换。

mirror

镜轴。

none

没有镜子。

x

仅镜像 x 轴。

y

仅镜像 y 轴。

xy

镜像两个轴。

46.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]'
    

46.7.2 命令

size该过滤器支持除 options和 之外的所有上述选项作为命令rate

46.8 bench, abench

过滤器图表的基准部分。

该过滤器接受以下选项:

action

启动或停止计时器。

可用值为:

start

获取当前时间,将其设置为帧元数据(使用 key lavfi.bench.start_time),并将帧转发到下一个过滤器。

stop

获取当前时间,lavfi.bench.start_time从输入帧元数据中取出元数据,得到时间差。然后打印时间差、平均值、最大和最小时间(分别为、 和 tavg。时间戳以秒为单位表示。 maxmin

46.8.1 示例

  • 基准选择性滤色镜:
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

46.9 concat

连接音频和视频流,将它们一个接一个地连接在一起。

该过滤器适用于同步视频和音频流的片段。所有段必须具有相同数量的每种类型的流,并且这也是输出的流的数量。

该过滤器接受以下选项:

n

设置段数。默认值为 2。

v

设置输出视频流的数量,即每段视频流的数量。默认值为 1。

a

设置输出音频流的数量,即每个段中音频流的数量。默认值为 0。

unsafe

激活不安全模式:如果段具有不同的格式,则不会失败。

该滤波器有v + a 个输出:第一个v 个视频输出,然后 一个音频输出。

n x( v + a ) 个输入:首先是第一段的输入,与输出的顺序相同,然后是第二段的输入,依此类推。

由于编解码器帧大小或草率创作等各种原因,相关流并不总是具有完全相同的持续时间。因此,相关的同步流(例如视频及其音轨)应该立即连接起来。连接过滤器将使用每个片段中最长的流的持续时间(最后一个片段除外),并在必要时用静音填充较短的音频流。

为了使此过滤器正常工作,所有段必须从时间戳 0 开始。

所有对应的流在所有段中必须具有相同的参数;过滤系统将自动为视频流选择通用的像素格式,为音频流选择通用的采样格式、采样率和通道布局,但其他设置(例如分辨率)必须由用户显式转换。

不同的帧速率是可以接受的,但会导致输出时帧速率可变;请务必配置输出文件来处理它。

46.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=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]
    

    请注意,如果第一个文件中音频和视频流的持续时间不完全相同,则会在拼接处发生不同步。

46.9.2 命令

该过滤器支持以下命令:

next

关闭当前段并进入下一个段

46.10 ebur128

EBU R128 扫描仪过滤器。该滤波器获取音频流并分析其响度级别。默认情况下,它以 10Hz 的频率记录一条消息,其中包含瞬时响度(由 标识M)、短期响度 ( S)、综合响度 ( I) 和响度范围 ( LRA)。

该过滤器只能分析样本格式为双精度浮点的流。如果需要,输入流将转换为该规范。用户可能需要在此过滤器之后插入格式和/或样本过滤器以获得原始参数。

该滤波器还具有视频输出(请参阅视频选项),并带有实时图表以观察响度演变。该图形包含上面提到的记录消息,因此当设置此选项时不再打印它,除非设置了详细日志记录。主图形区域包含短期响度(3 秒的分析),右侧的仪表用于瞬时响度(400 毫秒),但可以选择配置为显示短期响度(请参阅仪表

绿色区域标记目标响度周围的 +/- 1LU 目标范围(默认为 -23LUFS,除非通过target修改)。

有关响度建议 EBU R128 的更多信息,请访问 http://tech.ebu.ch/loudness

该过滤器接受以下选项:

video

激活视频输出。无论是否设置此选项,音频流都会不变地传递。如果激活,视频流将是第一个输出流。默认为0.

size

设置视频大小。此选项仅适用于视频。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认和最小分辨率为640x480

meter

设置 EBU 刻度表。默认为9. 常用值为918,分别对应 EBU 刻度计 +9 和 EBU 刻度计 +18。允许此范围内的任何其他整数值。

metadata

设置元数据注入。如果设置为1,音频输入将被分割为 100ms 的输出帧,每个帧都包含元数据中的各种响度信息。所有元数据键都以lavfi.r128..

默认为0.

framelog

强制帧记录级别。

可用值为:

quiet

禁用日志记录

info

信息记录级别

verbose

详细日志记录级别

默认情况下,日志记录级别设置为info。如果视频或者元数据设置选项后,它会切换到verbose

peak

设置峰值模式。

可用模式可以累积(选项是一种flag类型)。可能的值为:

none

禁用任何峰值模式(默认)。

sample

启用采样峰值模式。

简单峰值模式寻找更高的样本值。它记录样本峰值的消息(由 标识SPK)。

true

启用真峰值模式。

如果启用,峰值查找将在输入流的过采样版本上完成,以获得更好的峰值精度。它记录一条有关真实峰值的消息。(由 标识TPK)和每帧的真实峰值(由 标识FTPK)。此模式需要使用libswresample.

dualmono

将单声道输入文件视为“双单声道”。如果单声道文件用于在立体声系统上播放,则其 EBU R128 测量在视觉上将是不正确的。如果设置为true,此选项将补偿这种影响。多通道输入文件不受此选项的影响。

panlaw

设置用于测量双单声道文件的特定声相法则。该参数是可选的,默认值为-3.01dB。

target

设置在可视化中用作相对零的特定目标级别(以 LUFS 为单位)。此参数是可选的,并且具有 EBU R128 指定的默认值 -23LUFS。然而,在线发布的材料可能更喜欢-16LUFS 的级别(例如,用于播客或视频平台)。

gauge

设置仪表显示的值。有效值为momentary和 s shortterm。默认情况下,将使用瞬时值,但在某些情况下,观察短期值可能更有用(例如现场混音)。

scale

设置响度的显示比例。有效参数是absolute (在 LUFS 中)或relative(LU)相对于目标的参数。这仅影响视频输出,而不影响摘要或连续日志输出。

integrated

测量的积分响度的只读导出值(以 LUFS 为单位)。

range

测量响度范围的只读导出值(以 LU 为单位)。

lra_low

测量的 LRA 低值的只读导出值(以 LUFS 为单位)。

lra_high

测量的 LRA 高值的只读导出值(以 LUFS 为单位)。

sample_peak

测量样本峰值的只读导出值(以 dBFS 为单位)。

true_peak

测量的真实峰值的只读导出值(以 dBFS 为单位)。

46.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 -
    

46.11 interleave, ainterleave

暂时交错来自多个输入的帧。

interleave适用于视频输入ainterleave和音频。

这些过滤器从多个输入读取帧并将最旧的排队帧发送到输出。

输入流必须具有明确定义的、单调递增的帧时间戳值。

为了提交一帧进行输出,这些过滤器需要为每个输入至少排队一帧,因此,如果一个输入尚未终止并且不会接收传入帧,它们就无法工作。

例如,考虑当一个输入是select总是丢弃输入帧的过滤器时的情况。过滤interleave器将继续从该输入读取数据,但在输入发送流结束信号之前,它永远无法将新帧发送到输出。

此外,根据输入同步,如果一个输入接收的帧多于其他输入,并且队列已满,则过滤器将丢弃帧。

这些过滤器接受以下选项:

nb_inputs, n

设置不同输入的数量,默认为2。

duration

如何确定流结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一次输入的持续时间。

46.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
    

46.12 latency, alatency

测量过滤延迟。

报告先前的过滤器过滤延迟、音频过滤器的音频样本数量延迟或视频过滤器的视频帧数量。

在输入流结束时,过滤器将报告过滤器图中先前运行的过滤器的最小和最大测量延迟。

46.13 metadata, ametadata

操纵帧元数据。

该过滤器接受以下选项:

mode

设置过滤器的操作模式。

可以是以下之一:

select

如果 和value均已key设置,则选择具有此类元数据的帧。如果仅key设置,则选择元数据中具有此类键的每个帧。

add

添加新的元数据keyvalue. 如果密钥已经可用,则不执行任何操作。

modify

修改已存在键的值。

delete

如果value设置,则仅删除具有该值的键。否则,删除密钥。如果key未设置,则删除帧中的所有元数据值。

print

如果找到元数据,则打印密钥及其值。如果key未设置,则打印框架中可用的所有元数据值。

key

设置用于所有模式的键。print必须为除和之外的所有模式进行设置delete

value

设置将使用的元数据值。此选项对于 modifyandadd模式是必需的。

function

比较元数据值和 时使用哪个函数value

可以是以下之一:

same_str

值被解释为字符串,如果元数据值与 相同则返回 true value

starts_with

值被解释为字符串,如果元数据值以选项value字符串开头,则返回 true。

less

值被解释为浮点数,如果元数据值小于,则返回 true value

equal

值被解释为浮点数,如果value等于元数据值则返回 true。

greater

值被解释为浮点数,如果元数据值大于 则返回 true value

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 时,减少打印模式下的缓冲

46.13.1 示例

  • 打印键值在 0 到 1 之间的帧的所有元数据值lavfi.signalstats.YDIF
    signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
    
  • 将静音检测输出打印到文件元数据.txt
    silencedetect,ametadata=mode=print:file=metadata.txt
    
  • 将所有元数据定向到文件描述符为 4 的管道。
    metadata=mode=print:file='pipe\:4'
    

46.14 perms, aperms

设置输出帧的读/写权限。

这些过滤器主要针对开发人员在过滤器图中测试以下过滤器中的直接路径。

过滤器接受以下选项:

mode

选择权限模式。

它接受以下值:

none

没做什么。这是默认设置。

ro

将所有输出帧设置为只读。

rw

将所有输出帧设置为直接可写。

toggle

如果该帧可写,则将其设置为只读;如果是只读,则将其设置为可写。

random

将每个输出帧随机设置为只读或可写。

seed

设置随机模式的种子,必须是0和之间的整数 UINT32_MAX。如果未指定,或者明确设置为 -1,过滤器将尽力使用良好的随机种子。

注意:如果在权限过滤器和下一个过滤器之间自动插入过滤器,则在下一个过滤器中可能无法按预期接收权限。在 perms/aperms 过滤器之前 插入formataformat过滤器可以避免此问题。

46.15 realtime, arealtime

减慢过滤速度以大致匹配实时。

这些过滤器将暂停过滤一段可变的时间,以使输出速率与输入时间戳相匹配。它们类似于关于选项到ffmpeg.

他们接受以下选项:

limit

暂停的时间限制。任何超过该时间的暂停都将被视为时间戳不连续并重置计时器。默认值为 2 秒。

speed

处理速度因素。该值必须是大于零的浮点数。大于 1.0 的值将导致比实时处理更快,较小的值将减慢处理速度。该限制会相应地自动调整。默认值为 1.0。

无法实现比没有这些滤波器更快的处理速度。

46.15.1 命令

两个过滤器都支持上述所有选项作为命令

46.16 segment, asegment

将单个输入流拆分为多个流。

该过滤器的作用与串联过滤器相反。

segment适用于视频帧和asegment音频样本。

该过滤器接受以下选项:

timestamps

输出段的时间戳由“|”分隔。第一个段将从输入流的开头运行。最后一段将运行直到输入流结束

frames, samples

用于分割片段的精确帧/样本计数。

在所有情况下,为每个段添加前缀“+”将使其相对于前一个段。

46.16.1 示例

  • 将输入音频流拆分为三个输出音频流,从输入音频流开始处开始并将其存储在第一个输出音频流中,然后在第 60 秒处存储在第二个输出音频流中,最后在输入音频流存储的第 150 秒后在第三个输出音频流中:
    asegment=timestamps="60|150"
    

46.17 select, aselect

选择要传入输出的帧。

该过滤器接受以下选项:

expr, e

设置表达式,针对每个输入帧计算该表达式。

如果表达式的计算结果为零,则丢弃该帧。

如果评估结果为负或NaN,则该帧被发送到第一个输出;否则,它会被发送到带有索引的输出 ceil(val)-1,假设输入索引从0开始。

例如, 的值1.2对应于索引为的输出 ceil(1.2)-1 = 2-1 = 1,即第二个输出。

outputs, n

设置输出数量。将所选帧发送到的输出基于评估结果。默认值为 1。

该表达式可以包含以下常量:

n

过滤帧的(连续)编号,从 0 开始。

selected_n

所选帧的(连续)编号,从 0 开始。

prev_selected_n

最后选择的帧的序号。如果未定义则为 NAN。

TB

输入时间戳的时基。

pts

已过滤帧的 PTS(呈现时间戳),以TB为单位表示。如果未定义则为 NAN。

t

已过滤帧的 PTS,以秒为单位表示。如果未定义则为 NAN。

prev_pts

先前过滤的帧的 PTS。如果未定义则为 NAN。

prev_selected_pts

先前过滤的最后一个帧的 PTS。如果未定义则为 NAN。

prev_selected_t

先前选择的最后一帧的 PTS,以秒为单位表示。如果未定义则为 NAN。

start_pts

流中的第一个 PTS 不是 NAN。如果没有找到,它仍然是 NAN。

start_t

流中非 NAN 的第一个 PTS(以秒为单位)。如果没有找到,它仍然是 NAN。

pict_type (video only)

过滤帧的类型。它可以采用以下值之一:

I
P
B
S
SI
SP
BI
interlace_type (video only)

帧交错类型。它可以采用以下值之一:

PROGRESSIVE

帧是逐行的(不是隔行的)。

TOPFIRST

该帧是顶场优先。

BOTTOMFIRST

该帧是底场优先的。

consumed_sample_n (audio only)

当前帧之前选定的样本数

samples_n (audio only)

当前帧中的样本数

sample_rate (audio only)

输入采样率

key

如果过滤后的帧是关键帧,则为 1,否则为 0。

pos

已过滤帧在文件中的位置,如果信息不可用(例如对于合成视频),则为 -1;已弃用,请勿使用

scene (video only)

0到1之间的值表示新场景;较低的值反映当前帧引入新场景的概率较低,而较高的值表示当前帧更有可能是一个新场景(请参见下面的示例)

concatdec_select

concat 解复用器可以通过设置入点和出点来仅选择 concat 输入文件的一部分,但输出数据包可能不会完全包含在所选间隔中。通过使用此变量,可以跳过由串联解复用器生成的未完全包含在所选间隔中的帧。

这是通过将帧点与lavf.concat.start_timelavf.concat.duration数据包元数据值进行比较来实现的,这些值也存在于解码帧中。

如果帧pts 至少为 start_time 并且缺少持续时间元数据或帧 pts 小于 start_time + 持续时间,则 concatdec_select 变量为 -1,否则为 0,如果缺少 start_time 元数据,则 concatdec_select 变量为 NaN

这基本上意味着,如果输入帧的点位于连接解复用器设置的间隔内,则选择该输入帧。

选择表达式的默认值为“1”。

46.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
    

    将场景与 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
    

46.18 sendcmd, asendcmd

将命令发送到过滤器图中的过滤器。

这些过滤器读取要发送到过滤器图中其他过滤器的命令。

sendcmd必须插入两个视频过滤器之间, asendcmd必须插入两个音频过滤器之间,但除此之外,它们的行为方式相同。

命令的规范可以在带有命令选项的过滤器参数中提供,或者在由文件名选项指定的文件中 提供。

这些过滤器接受以下选项:

commands, c

设置要读取并发送到其他过滤器的命令。

filename, f

设置要读取并发送到其他过滤器的命令的文件名。

46.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]

46.18.2 示例

  • 指定第 4 秒处的音频速度变化:
    asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位特定的过滤器实例:
    asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定绘图文本和色调命令的列表。
    # show text in the interval 5-10
    5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
             [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
    
    # desaturate the image in the interval 15-20
    15.0-20.0 [enter] hue s 0,
              [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
              [leave] hue s 1,
              [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
    
    # apply an exponential saturation fade-out effect, starting from time 25
    25 [enter] hue s exp(25-t)
    

    过滤器图允许读取和处理存储在文件中的上述命令列表测试命令,可以指定为:

    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
    

46.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

应用命令后第一帧的时间或如果没有命令则第一帧的时间。

46.19.1 示例

  • 从零开始计算 PTS
    setpts=PTS-STARTPTS
    
  • 应用快动作效果:
    setpts=0.5*PTS
    
  • 应用慢动作效果:
    setpts=2.0*PTS
    
  • 设置固定速率为每秒 25 帧:
    setpts=N/(25*TB)
    
  • 设置固定速率 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
    

46.19.2 命令

两个过滤器都支持以上所有选项作为命令

46.20 setrange

强制输出视频帧的颜色范围。

过滤setrange器标记输出帧的颜色范围属性。它不会更改输入帧,而只会设置相应的属性,这会影响后续过滤器处理该帧的方式。

该过滤器接受以下选项:

range

可用值为:

auto

保持相同的颜色范围属性。

unspecified, unknown

将颜色范围设置为未指定。

limited, tv, mpeg

将颜色范围设置为有限。

full, pc, jpeg

将颜色范围设置为完整。

46.21 settb, asettb

设置用于输出帧时间戳的时基。它主要用于测试时基配置。

它接受以下参数:

expr, tb

计算输出时基的表达式。

的价值待定是代表有理数的算术表达式。该表达式可以包含常量“AVTB”(默认时基)、“intb”(输入时基)和“sr”(采样率,仅限音频)。默认值为“intb”。

46.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
    

46.22 showcqt

使用带有直接频域系数计算的 Brown-Puckette 常数 Q 变换算法,将输入音频转换为对数表示频谱的视频输出(但变换本身并不是真正的常数 Q,而是 Q 因子实际上是可变/钳位的),具有音乐音调等级,从 E0 到 D#10。

该过滤器接受以下选项:

size, s

指定输出的视频大小。一定是均匀的。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为1920x1080

fps, rate, r

设置输出帧速率。默认值为25

bar_h

设置条形图高度。一定是均匀的。默认值是-1自动计算条形图高度。

axis_h

设置轴高度。一定是均匀的。默认值是-1自动计算轴高度。

sono_h

设置超声图高度。一定是均匀的。默认值是-1自动计算超声图高度。

fullhd

设置全高清分辨率。此选项已弃用,请使用size , s 代替。默认值为1

sono_v, volume

指定声波图体积表达式。它可以包含变量:

bar_v

bar_v计算表达式

frequency, freq, f

评估频率

timeclamp, tc

timeclamp选项 的值

和功能:

a_weighting(f)

等响度A计权

b_weighting(f)

等响度B计权

c_weighting(f)

等响度的 C 计权。

默认值为16

bar_v, volume2

指定条形图体积表达式。它可以包含变量:

sono_v

sono_v计算表达式

frequency, freq, f

评估频率

timeclamp, tc

timeclamp选项 的值

和功能:

a_weighting(f)

等响度A计权

b_weighting(f)

等响度B计权

c_weighting(f)

等响度的 C 计权。

默认值为sono_v

sono_g, gamma

指定声波图伽玛值。较低的伽玛使光谱更具对比度,较高的伽玛使光谱具有更大的范围。默认值为3。可接受的范围是[1, 7].

bar_g, gamma2

指定条形图伽玛值。默认值为1。可接受的范围是 [1, 7].

bar_t

指定条形图透明度级别。值越低,条形图越清晰。默认值为1。可接受的范围是[0, 1].

timeclamp, tc

指定变换时间夹。在低频下,时域精度和频域精度之间需要权衡。如果时间钳位较低,则时域中的事件表示得更准确(例如快速低音鼓),否则频域中的事件表示得更准确(例如低音吉他)。可接受的范围是[0.002, 1]. 默认值为0.17

attack

设置攻击时间(以秒为单位)。默认为0(禁用)。否则,它会通过在时域中应用非对称加窗来限制未来的样本,这在需要低延迟时很有用。可接受的范围是[0, 1].

basefreq

指定变换基频。默认值为20.01523126408007475,即频率比 E0 低 50 美分。可接受的范围是[10, 100000].

endfreq

指定变换结束频率。默认值为20495.59681441799654,即频率比 D#10 高 50 音分。可接受的范围是[10, 100000].

coeffclamp

此选项已被弃用并被忽略。

tlength

指定时域中的变换长度。使用此选项可以控制每个频率样本的时域和频域之间的精度权衡。它可以包含变量:

frequency, freq, f

评估频率

timeclamp, tc

timeclamp选项的值。

默认值为384*tc/(384+tc*f)

count

指定每个视频帧的变换计数。默认值为6。可接受的范围是[1, 30].

fcount

指定每个像素的变换计数。默认值为0,这使得它自动计算。可接受的范围是[0, 10].

fontfile

指定与 freetype 一起使用的字体文件来绘制轴。如果没有指定,则使用嵌入字体。请注意,使用字体文件或嵌入字体进行绘图不是使用自定义basefreqendfreq实现的,而是使用axisfile 选项。

font

指定字体配置模式。它的优先级低于fontfile。模式 :中的 可以替换为|以避免不必要的转义。

fontcolor

指定字体颜色表达。这是应返回整数值 0xRRGGBB 的算术表达式。它可以包含变量:

frequency, freq, f

评估频率

timeclamp, tc

timeclamp选项 的值

和功能:

midi(f)

频率 f 的 midi 编号,一些 midi 编号:E0(16)、C1(24)、C2(36)、A4(69)

r(x), g(x), b(x)

强度 x 的红色、绿色和蓝色值。

默认值为st(0, (midi(f)-59.5)/12); st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0)); r(1-ld(1)) + b(ld(1))

axisfile

指定用于绘制轴的图像文件。此选项覆盖fontfilefontcolor选项。

axis, text

启用/禁用在轴上绘制文本。如果设置为0,则禁用绘制到轴,忽略fontfileaxisfile选项。默认值为1

csp

设置色彩空间。可接受的值为:

unspecified

未指定(默认)

bt709

BT.709

fcc

美国联邦通信委员会

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.

46.22.1 示例

  • 在显示频谱的同时播放音频:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt [out0]'
    
  • 与上面相同,但帧速率为 30 fps:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=fps=30:count=5 [out0]'
    
  • 以 1280x720 分辨率播放:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=s=1280x720:count=4 [out0]'
    
  • 禁用超声图显示:
    sono_h=0
    
  • A1 及其谐波:A1、A2、(近)E3、A3:
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt [out0]'
    
  • 与上面相同,但频域精度更高:
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]'
    
  • 定制体积:
    bar_v=10:sono_v=bar_v*a_weighting(f)
    
  • 自定义伽玛,现在频谱与幅度成线性关系。
    bar_g=2:sono_g=2
    
  • 自定义 tlength 方程:
    tc=0.33:tlength='st(0,0.17); 384*tc / (384 / ld(0) + tc*f /(1-ld(0))) + 384*tc / (tc*f / ld(0) + 384 /(1-ld(0)))'
    
  • 自定义字体颜色和字体文件,C-note 为绿色,其他为蓝色:
    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
    

46.23 showcwt

使用连续小波变换和 Morlet 小波将输入音频转换为表示频谱的视频输出。

该过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请检查ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为640x512

rate, r

设置输出帧速率。默认值为25

scale

设置使用的频率范围。允许的值为:

linear
log
bark
mel
erbs
sqrt
cbrt
qdrt
fm

默认值为linear

iscale

设置使用的强度等级。允许的值为:

linear
log
sqrt
cbrt
qdrt

默认值为log

min

设置输出中使用的最小频率。默认值为20赫兹。

max

设置输出中使用的最大频率。默认值为20000赫兹。实际频率上限取决于输入音频的采样率,当该值设置为大于奈奎斯特频率时,将强制执行该值。

imin

设置输出中使用的最小强度。

imax

设置将在输出中使用的最大强度。

logb

将计算的幅度值映射到像素值时设置亮度强度的对数基础。允许的范围是从01。默认值为0.0001

deviation

设置频率偏差。较低的值 比1更注重频率,而较高的值 比1更注重时间。允许的范围是从010。默认值为1

pps

设置一行中每秒输出的像素数。允许的范围是从11024。默认值为64

mode

设置输出视觉模式。允许的值为:

magnitude

显示大小。

phase

仅显示相位。

magphase

显示幅度和相位的组合。幅度映射到亮度,相位映射到颜色。

channel

显示每个通道幅度的独特颜色。

stereo

显示每个立体差异的独特颜色。

默认值为magnitude

slide

设置输出幻灯片方式。允许的值为:

replace
scroll
frame
direction

设置输出滑动方式的方向方式。允许的值为:

lr

方向从左到右。

rl

方向从右到左。

ud

方向从上到下。

du

方向从下到上。

bar

设置条形图显示与显示尺寸的比例。默认值为 0。

rotation

设置颜色旋转,必须在[-1.0, 1.0]范围内。默认值为0

46.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,这意味着将选择所选窗函数的最佳重叠。

averaging

设置时间平均。将其设置为 0 将显示当前最大峰值。默认值为1,这意味着禁用时间平均。

colors

指定由空格或“|”分隔的颜色列表 它将用于绘制通道频率。无法识别或缺失的颜色将被白色替换。

cmode

设置通道显示模式。

它接受以下值:

combined
separate

默认为combined.

minamp

设置幅度缩放器中使用的最小幅度log

data

设置数据显示模式。

它接受以下值:

magnitude
phase
delay

默认为magnitude.

channels

设置处理音频时要使用的通道。默认情况下,所有内容都会被处理。

46.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

设置输出帧率。

46.26 showspectrum

将输入音频转换为视频输出,表示音频频谱。

该过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为640x512

slide

指定光谱应如何沿着窗口滑动。

它接受以下值:

replace

当样本到达右侧时,样本再次从左侧开始

scroll

样本从右向左滚动

fullframe

仅当样本到达右侧时才产生框架

rscroll

样本从左向右滚动

lreplace

当样本到达左侧时,样本再次从右侧开始

默认值为replace

mode

指定显示模式。

它接受以下值:

combined

所有通道显示在同一行

separate

所有通道均显示在单独的行中

默认值为 '合并的'。

color

指定显示颜色模式。

它接受以下值:

channel

每个通道以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道均使用彩虹配色方案显示

moreland

每个通道均使用 Moreland 配色方案显示

nebulae

每个通道均使用星云配色方案显示

fire

每个通道均使用火色方案显示

fiery

每个通道都使用火热的配色方案显示

fruit

每个通道都使用水果配色方案显示

cool

每个通道都使用冷色调显示

magma

每个通道均使用岩浆配色方案显示

green

每个通道均使用绿色配色方案显示

viridis

每个通道均使用 viridis 配色方案显示

plasma

每个通道均使用等离子配色方案显示

cividis

每个通道均使用 cividis 配色方案显示

terrain

每个通道都使用地形颜色方案显示

默认值为 '渠道'。

scale

指定用于计算强度颜色值的比例。

它接受以下值:

lin

线性

sqrt

平方根,默认

cbrt

立方根

log

对数

4thrt

第四根

5thrt

五次方根

默认值为 '开方'。

fscale

指定频率范围。

它接受以下值:

lin

线性

log

对数

默认值为 ''。

saturation

设置显示颜色的饱和度修改器。负值提供替代配色方案。0根本没有饱和。饱和度必须在 [-10.0, 10.0] 范围内。默认值为1

win_func

设置窗函数。

它接受以下值:

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为hann

orientation

设置时间与频率轴的方向。可以是verticalhorizontal. 默认为vertical.

overlap

设置重叠窗口的比例。默认值为0。当值为1重叠时,将设置为当前使用的特定窗口函数的推荐大小。

gain

设置用于计算强度颜色值的比例增益。默认值为1

data

设置要显示的数据。可以是magnitude、默认或phase、或展开阶段:uphase

rotation

设置颜色旋转,必须在[-1.0, 1.0]范围内。默认值为0

start

设置显示频谱图的起始频率。默认为0.

stop

设置显示频谱图的停止频率。默认为0.

fps

设置帧速率上限。默认为auto,无限制。

legend

绘制时间和频率轴以及图例。默认为禁用。

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。

limit

设置输入音频样本音量的上限(以 dBFS 为单位)。默认值为 0 dBFS。允许的范围是从 -100 到 100。

opacity

使用带 alpha 分量的像素格式输出时设置不透明度强度。

用法与showwaves过滤器非常相似;请参阅该部分中的示例。

46.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]'
    

46.27 showspectrumpic

将输入音频转换为单个视频帧,表示音频频谱。

该过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为4096x2048

mode

指定显示模式。

它接受以下值:

combined

所有通道显示在同一行

separate

所有通道均显示在单独的行中

默认值为 '合并的'。

color

指定显示颜色模式。

它接受以下值:

channel

每个通道以单独的颜色显示

intensity

每个通道都使用相同的配色方案显示

rainbow

每个通道均使用彩虹配色方案显示

moreland

每个通道均使用 Moreland 配色方案显示

nebulae

每个通道均使用星云配色方案显示

fire

每个通道均使用火色方案显示

fiery

每个通道都使用火热的配色方案显示

fruit

每个通道都使用水果配色方案显示

cool

每个通道都使用冷色调显示

magma

每个通道均使用岩浆配色方案显示

green

每个通道均使用绿色配色方案显示

viridis

每个通道均使用 viridis 配色方案显示

plasma

每个通道均使用等离子配色方案显示

cividis

每个通道均使用 cividis 配色方案显示

terrain

每个通道都使用地形颜色方案显示

默认值为 '强度'。

scale

指定用于计算强度颜色值的比例。

它接受以下值:

lin

线性

sqrt

平方根,默认

cbrt

立方根

log

对数

4thrt

第四根

5thrt

五次方根

默认值为 '日志'。

fscale

指定频率范围。

它接受以下值:

lin

线性

log

对数

默认值为 ''。

saturation

设置显示颜色的饱和度修改器。负值提供替代配色方案。0根本没有饱和。饱和度必须在 [-10.0, 10.0] 范围内。默认值为1

win_func

设置窗函数。

它接受以下值:

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为hann

orientation

设置时间与频率轴的方向。可以是verticalhorizontal. 默认为vertical.

gain

设置用于计算强度颜色值的比例增益。默认值为1

legend

绘制时间和频率轴以及图例。默认启用。

rotation

设置颜色旋转,必须在[-1.0, 1.0]范围内。默认值为0

start

设置显示频谱图的起始频率。默认为0.

stop

设置显示频谱图的停止频率。默认为0.

drange

设置用于计算强度颜色值的动态范围。默认值为 120 dBFS。允许的范围是 10 到 200。

limit

设置输入音频样本音量的上限(以 dBFS 为单位)。默认值为 0 dBFS。允许的范围是从 -100 到 100。

opacity

使用带 alpha 分量的像素格式输出时设置不透明度强度。

46.27.1 示例

  • 使用以下命令提取 1024x1024 图片中整个音轨的音频频谱图ffmpeg
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

46.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

46.29 showwaves

将输入音频转换为视频输出,表示样本波。

该过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为600x240

mode

设置显示模式。

可用值为:

point

为每个样本画一个点。

line

为每个样本画一条垂直线。

p2p

为每个样本画一个点并在它们之间画一条线。

cline

为每个样本绘制一条居中垂直线。

默认值为point

n

设置同一列上打印的样本数。较大的值将降低帧速率。必须是正整数。 仅当未明确指定 速率值时才能设置此选项。

rate, r

设置(近似)输出帧速率。这是通过设置选项n来完成的。默认值为“25”。

split_channels

设置通道是否应单独绘制或重叠。默认值为 0。

colors

设置颜色,以“|”分隔 将用于绘制每个通道。

scale

设置幅度刻度。

可用值为:

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认为线性。

draw

设置绘图模式。这对于设置高n非常有用。

可用值为:

scale

缩放每个绘制样本的像素值。

full

直接绘制每个样本。

默认值为scale

46.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]
    

46.30 showwavespic

将输入音频转换为单个视频帧,表示样本波。

该过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请检查 ffmpeg-utils 手册中的 (ffmpeg-utils)“视频大小”部分。默认值为600x240

split_channels

设置通道是否应单独绘制或重叠。默认值为 0。

colors

设置颜色,以“|”分隔 将用于绘制每个通道。

scale

设置幅度刻度。

可用值为:

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认为线性。

draw

设置绘图模式。

可用值为:

scale

缩放每个绘制样本的像素值。

full

直接绘制每个样本。

默认值为scale

filter

设置过滤模式。

可用值为:

average

使用每个抽取样本的平均样本值。

peak

使用每个抽取样本的峰值样本值。

默认值为average

46.30.1 示例

  • 使用以下命令提取 1024x800 图片中整个音轨波形的通道分割表示ffmpeg
    ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
    

46.31 sidedata, asidedata

删除帧侧数据,或根据它选择帧。

该过滤器接受以下选项:

mode

设置过滤器的操作模式。

可以是以下之一:

select

选择边数据为 的每一帧type

delete

删除 的辅助数据type。如果type未设置,则删除帧中的所有侧面数据。

type

设置与所有模式一起使用的侧面数据类型。必须设置为select模式。有关帧端数据类型的列表,请参阅AVFrameSideDataType中的枚举libavutil/frame.h。例如,要选择 AV_FRAME_DATA_PANSCAN辅助数据,您必须指定PANSCAN

46.32 spectrumsynth

从 2 个输入视频频谱合成音频,第一个输入流表示随时间变化的幅度,第二个输入流表示随时间变化的相位。滤波器将从视频中显示的频域转换回音频输出中显示的时域。

该滤波器主要是为了反转处理后的频谱 滤波器输出而创建的,但也可以从其他频谱图中合成声音。但在这种情况下,如果相位数据不可用,结果将会很差,因为在这种情况下需要重新创建相位数据,通常只是从随机噪声中重新创建。为了获得最佳结果,请仅使用灰色输出(显示频谱channel过滤器中的颜色模式 )以及幅度视频的比例和 相位视频的比例。要生成第二个视频的阶段,请使用 选项。输入视频通常应使用 幻灯片模式,因为这样可以节省解码视频所需的资源。 loglindatafullframe

该过滤器接受以下选项:

sample_rate

指定输出音频的采样率,生成频谱的音频采样率可能有所不同。

channels

设置输入视频频谱中表示的通道数。

scale

设置生成幅度输入频谱时使用的比例。可以是linlog. 默认为log.

slide

设置生成输入频谱时使用的幻灯片。可以是replacescrollfullframerscroll。默认为fullframe.

win_func

设置用于重新合成的窗口函数。

overlap

设置窗口重叠。在范围内[0, 1]。默认值为1,这意味着将选择所选窗函数的最佳重叠。

orientation

设置输入视频的方向。可以是verticalhorizontal. 默认为vertical.

46.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
    

46.33 split, asplit

将输入分成几个相同的输出。

asplit适用于音频输入split和视频。

该过滤器接受一个指定输出数量的参数。如果未指定,则默认为 2。

46.33.1 示例

  • 从同一输入创建两个单独的输出:
    [in] split [out0][out1]
    
  • 要创建 3 个或更多输出,您需要指定输出的数量,如下所示:
    [in] asplit=3 [out0][out1][out2]
    
  • 从同一输入创建两个单独的输出,一个被裁剪,一个被填充:
    [in] split [splitout1][splitout2];
    [splitout1] crop=100:100:0:0    [cropout];
    [splitout2] pad=200:200:100:100 [padout];
    
  • 使用以下命令创建输入音频的 5 个副本ffmpeg
    ffmpeg -i INPUT -filter_complex asplit=5 OUTPUT
    

46.34 zmq, azmq

接收通过 libzmq 客户端发送的命令,并将它们转发到过滤器图中的过滤器。

zmqazmq作为直通滤波器工作。zmq 必须插入两个视频过滤器之间、azmq两个音频过滤器之间。两者都能够将消息发送到任何过滤器类型。

要启用这些过滤器,您需要安装 libzmq 库和标头,并使用--enable-libzmq.

有关 libzmq 的更多信息,请参阅: http: //www.zeromq.org/

和过滤器作为 libzmq 服务器工作,它接收通过由 定义的网络接口发送的 zmq消息azmq绑定地址(或缩写“") 选项。该选项的默认值为tcp://本地主机:5555。您可能想根据需要更改此值,但不要忘记转义任何“:”符号(请参阅filtergraph转义)。

收到的消息必须采用以下形式:

TARGET COMMAND [ARG]

TARGET指定命令的目标,通常是过滤器类的名称或特定过滤器实例名称。默认过滤器实例名称使用模式 '已解析_<过滤器名称>_<索引>',但您可以使用 ' 来覆盖它过滤器名称@id' 语法(请参阅Filtergraph 语法)。

COMMAND指定目标过滤器的命令名称。

ARG是可选的,指定给定COMMAND 的可选参数列表。

收到消息后,将处理该消息并将相应的命令注入到过滤器图中。根据结果​​,过滤器将向客户端发送答复,采用以下格式:

ERROR_CODE ERROR_REASON
MESSAGE

消息是可选的。

46.34.1 示例

看着工具/zmqsend有关可用于发送由这些过滤器处理的命令的 zmq 客户端的示例。

考虑以下由 生成的过滤器图ffplay。在此示例中,最后一个覆盖过滤器具有实例名称。所有其他过滤器都将具有默认实例名称。

ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@my=x=100 "

要更改视频左侧的颜色,可以使用以下命令:

echo Parsed_color_0 c yellow | tools/zmqsend

要更改右侧:

echo Parsed_color_1 c pink | tools/zmqsend

要更改右侧的位置:

echo overlay@my x 150 | tools/zmqsend

47 多媒体源

以下是当前可用的多媒体源的描述。

47.1 amovie

这与电影源相同,只是它默认选择音频流。

47.2 avsynctest

生成音频/视频同步测试。

生成的流定期显示 Flash 视频帧并发出音频蜂鸣声。对于检查 A/V 同步问题很有用。

它接受以下选项:

size, s

设置输出视频大小。默认值为hd720

framerate, fr

设置输出视频帧速率。默认值为30

samplerate, sr

设置输出音频采样率。默认值为44100

amplitude, a

设置输出音频蜂鸣幅度。默认值为0.7

period, p

设置输出音频蜂鸣时间(以秒为单位)。默认值为3

delay, dl

设置输出视频闪光延迟(以帧数为单位)。默认值为0

cycle, c

启用视频延迟循环,默认情况下处于禁用状态。

duration, d

设置流输出持续时间。默认情况下,持续时间是无限的。

fg, bg, ag

设置前景色/背景色/附加颜色。

47.2.1 命令

该源支持上述一些选项作为命令

47.3 movie

从电影容器中读取音频和/或视频流。

它接受以下参数:

filename

要读取的资源的名称(不一定是文件;也可以是通过某种协议访问的设备或流)。

format_name, f

指定电影读取的格式,可以是容器的名称或输入设备的名称。如果未指定,则从movie_name或通过探测 猜测格式。

seek_point, sp

指定搜索点(以秒为单位)。将从该搜索点开始输出帧。该参数通过 进行计算 av_strtod,因此数值可能会带有 IS 后缀。默认值为“0”。

streams, s

指定要读取的流。可以指定多个流,用“+”分隔。然后,源将按照相同的顺序拥有尽可能多的输出。语法在ffmpeg 手册的 (ffmpeg)“流说明符”部分中有解释。两个特殊名称“dv”和“da”分别指定默认(最适合)的视频和音频流。默认为“dv”,如果过滤器名为“amovie”,则默认为“da”。

stream_index, si

指定要读取的视频流的索引。如果值为-1,将自动选择最合适的视频流。默认值为“-1”。已弃用。如果过滤器名为“amovie”,它将选择音频而不是视频。

loop

指定按顺序读取流的次数。如果值为 0,则流将无限循环。默认值为“1”。

请注意,当电影循环播放时,源时间戳不会更改,因此它将生成非单调递增的时间戳。

discontinuity

指定帧之间的时间差,超过该时间差的点将被视为时间戳不连续性,可通过调整后面的时间戳来消除。

dec_threads

指定解码线程数

format_opts

指定打开文件的格式选项。格式选项可以指定为由“:”分隔的=对的列表。以下示例显示如何添加protocol_whitelist和protocol_blacklist选项:

ffplay -f lavfi
"movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"

它允许在过滤器图的主输入之上叠加第二个视频,如下图所示:

input -----------> deltapts0 --> overlay --> output
                                    ^
                                    |
movie --> scale--> deltapts1 -------+

47.3.1 示例

  • 从 AVI 文件 in.avi 的开头跳过 3.2 秒,并将其覆盖在标记为“in”的输入之上:
    movie=in.avi:seek_point=3.2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从 video4linux2 设备读取,并将其覆盖在标记为“in”的输入之上:
    movie=/dev/video0:f=video4linux2, scale=180:-1, setpts=PTS-STARTPTS [over];
    [in] setpts=PTS-STARTPTS [main];
    [main][over] overlay=16:16 [out]
    
  • 从dvd.vob中读取第一个视频流和id为0x81的音频流;视频连接到名为“video”的 pad,音频连接到名为“audio”的 pad:
    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
    

47.3.2 命令

movie 和 amovie 都支持以下命令:

seek

使用“av_seek_frame”执行搜索。语法是:seekstream_index | 时间戳| 旗帜

  • stream_index:如果stream_index为-1,则选择默认流,并且时间戳会自动从AV_TIME_BASE单位转换为流特定的time_base。
  • timestamp:以 AVStream.time_base 为单位的时间戳,或者如果未指定流,则以 AV_TIME_BASE 为单位。
  • flags:选择方向和搜索模式的标志。
get_duration

获取以 AV_TIME_BASE 为单位的电影时长。

48 外部库

FFmpeg 可以与许多外部库连接以添加对更多格式的支持。默认情况下,它们都不被使用,必须通过将适当的标志传递给 来显式请求它们的使用 ./configure

48.1 Alliance for Open Media (AOM)

FFmpeg 可以利用 AOM 库进行 AV1 解码和编码。

访问http://aomedia.org/并按照安装该库的说明进行操作。然后传递--enable-libaom给configure以启用它。

48.2 AMD AMF/VCE

FFmpeg 可以使用 AMD 高级媒体框架库在具有视频编码引擎 (VCE) 的硬件上加速 H.264 和 HEVC(仅限 Windows)编码。

要启用支持,您必须从https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git获取 AMF 框架头文件(版本 1.4.9+) 。

AMF/在系统包含路径中创建一个目录。将 的内容复制AMF/amf/public/include/到该目录中。然后使用 FFmpeg 配置--enable-amf

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 脚本安装此驱动程序。

48.3 AviSynth

FFmpeg 可以读取 AviSynth 脚本作为输入。要启用支持,请 在安装AviSynth+--enable-avisynth提供的标头后传递给 configure 。可以将 AviSynth+ 配置为仅安装标头,方法是传递到正常的基于 CMake 的构建系统,或使用提供的. -DHEADERS_ONLY:bool=onGNUmakefile

对于 Windows,支持的 AviSynth 变体为 32 位版本的 AviSynth 2.6 RC1 或更高版本,以及32 位和 64 位版本的 AviSynth+ r1718 或更高版本。

对于 Linux、macOS 和 BSD,唯一支持的 AviSynth 变体是 AviSynth+,从版本 3.5 开始。

2016 年,AviSynth+ 添加了对使用 GCC 进行构建的支持。然而,由于 Windows 调用约定的怪异,AviSynth+ 的 32 位 GCC 版本与 FFmpeg 的典型 32 位版本不兼容。

默认情况下,FFmpeg 假定与 AviSynth+ 的 32 位 MSVC 构建兼容,因为这是最广泛使用和根深蒂固的构建配置。-DAVSC_WIN32_GCC32用户可以覆盖此设置,并通过 在配置 FFmpeg 时传递 来启用对 AviSynth+ 32 位 GCC 版本的支持--extra-cflags

FFmpeg 的 64 位版本不受影响,并且可以使用 AviSynth+ 的 MSVC 或 GCC 版本,无需任何特殊标志。

AviSynth(+) 是动态加载的。分销商可以使用 构建 FFmpeg --enable-avisynth,并且无论最终用户是否安装了 AviSynth,二进制文件都可以正常工作。如果/当最终用户想要使用 AviSynth 脚本时,他们可以安装 AviSynth(+),FFmpeg 将能够找到并使用它来打开脚本。

48.4 Chromaprint

FFmpeg 可以利用 Chromaprint 库来生成音频指纹。传递--enable-chromaprint给配置以启用它。请参阅https://acoustid.org/chromaprint

48.5 codec2

FFmpeg可以利用codec2库进行codec2解码和编码。目前没有原生解码器,所以必须使用libcodec2进行解码。

访问http://freedv.org/,下载“Codec 2 源存档”。使用 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。还支持原始编解码器2 文件。为了理解它们,需要将使用的模式指定为格式选项: ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav

48.6 dav1d

FFmpeg 可以利用 dav1d 库进行 AV1 视频解码。

转至https://code.videolan.org/videolan/dav1d并按照安装该库的说明进行操作。然后传递--enable-libdav1d给configure以启用它。

48.7 davs2

FFmpeg 可以利用 davs2 库进行 AVS2-P2/IEEE1857.4 视频解码。

转到https://github.com/pkuvcl/davs2并按照安装该库的说明进行操作。然后传递--enable-libdavs2给configure以启用它。

libdavs2 采用 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

48.8 uavs3d

FFmpeg 可以利用 uavs3d 库进行 AVS3-P2/IEEE1857.10 视频解码。

访问https://github.com/uavs3/uavs3d并按照安装库的说明进行操作。然后传递--enable-libuavs3d给configure以启用它。

48.9 Game Music Emu

FFmpeg 可以利用 Game Music Emu 库从支持的视频游戏音乐文件格式读取音频。传递--enable-libgme给配置以启用它。请参阅https://bitbucket.org/mpyne/game-music-emu/overview

48.10 Intel QuickSync Video

FFmpeg 可以使用 Intel QuickSync Video (QSV) 来加速多个编解码器的解码和编码。要使用 QSV,FFmpeg 必须链接到libmfx 调度程序,该调度程序加载实际的解码库。

该调度程序是开源的,可以从 https://github.com/lu-zero/mfx_dispatch.git下载。FFmpeg 需要配置该--enable-libmfx选项,并且pkg-config需要能够找到调度程序的.pc文件。

48.11 Kvazaar

FFmpeg 可以利用 Kvazaar 库进行 HEVC 编码。

访问https://github.com/ultravideo/kvazaar并按照安装库的说明进行操作。然后传递 --enable-libkvazaar给configure以启用它。

48.12 LAME

FFmpeg 可以利用 LAME 库进行 MP3 编码。

访问http://lame.sourceforge.net/并按照说明安装该库。然后传递--enable-libmp3lame给configure以启用它。

48.13 libilbc

iLBC 是一种窄带语音编解码器,作为 WebRTC 项目的一部分由 Google 免费提供。libilbc 是 iLBC 编解码器的打包友好副本。FFmpeg 可以利用 libilbc 库进行 iLBC 解码和编码。

转到https://github.com/TimothyGu/libilbc并按照安装该库的说明进行操作。然后传递--enable-libilbc给configure以启用它。

48.14 libjxl

JPEG XL 是一种图像格式,旨在完全取代传统 JPEG,以延长其使用寿命。请参阅https://jpegxl.info/了解更多信息,并参阅 https://github.com/libjxl/libjxl了解库源。您可以传递 --enable-libjxl到configure以启用libjxl包装器。

48.15 libvpx

FFmpeg 可以利用 libvpx 库进行 VP8/VP9 解码和编码。

访问http://www.webmproject.org/并按照安装该库的说明进行操作。然后传递--enable-libvpx给configure以启用它。

48.16 ModPlug

FFmpeg 可以利用这个源自 Modplug-XMMS 的库来读取类似 MOD 的音乐文件。请参阅https://github.com/Konstanty/libmodplug。传递--enable-libmodplug给配置以启用它。

48.17 OpenCORE, VisualOn, and Fraunhofer libraries

OpenCore、VisualOn 和 Fraunhofer 库源自 Google Android 源代码,为多种音频编解码器提供编码器。

OpenCORE 和 VisualOn 库采用 Apache License 2.0(详细信息请参见http://www.apache.org/licenses/LICENSE-2.0 ),与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。您必须升级 FFmpeg 的许可证通过传递配置来使用 LGPL 版本 3(或者如果您已启用 GPL 组件,--enable-version3则为 GPL 版本 3)。

Fraunhofer AAC 库的许可证与 GPL 不兼容。因此,对于 GPL 版本,您必须传递--enable-nonfree配置才能使用它。据我们所知,它与 LGPL 兼容。

48.17.1 OpenCORE AMR

FFmpeg 可以利用 OpenCORE 库进行 AMR-NB 解码/编码和 AMR-WB 解码。

转至http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后通过--enable-libopencore-amrnb和/或 --enable-libopencore-amrwb配置来启用它们。

48.17.2 VisualOn AMR-WB 编码器库

FFmpeg 可以利用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。

转至http://sourceforge.net/projects/opencore-amr/并按照安装该库的说明进行操作。然后传递--enable-libvo-amrwbenc给configure以启用它。

48.17.3 弗劳恩霍夫 AAC 库

FFmpeg 可以利用 Fraunhofer AAC 库进行 AAC 解码和编码。

转至http://sourceforge.net/projects/opencore-amr/并按照安装该库的说明进行操作。然后传递--enable-libfdk-aac给configure以启用它。

48.18 OpenH264

FFmpeg 可以利用 OpenH264 库进行 H.264 解码和编码。

访问http://www.openh264.org/并按照安装该库的说明进行操作。然后传递--enable-libopenh264给configure以启用它。

对于解码来说,这个库比 libavcodec 中内置的解码器要有限得多;目前,该库缺乏对 B 帧解码和其他一些主要/重要功能的支持。(它目前仅支持约束基线配置文件和 CABAC。)使用它主要用于测试和利用 Cisco 的专利组合许可证 ( http://www.openh264.org/BINARY_LICENSE.txt )。

48.19 OpenJPEG

FFmpeg 可以使用 OpenJPEG 库对 J2K 视频进行解码/编码。转至 http://www.openjpeg.org/获取库并按照安装说明进行操作。要在 FFmpeg 中启用 OpenJPEG,请传递--enable-libopenjpeg。/配置

48.20 rav1e

FFmpeg 可以通过其 C 绑定使用 rav1e(Rust AV1 编码器)来编码视频。访问https://github.com/xiph/rav1e/并按照说明构建 C 库。要在 FFmpeg 中启用 rav1e,请传递--enable-librav1e。/配置

48.21 SVT-AV1

FFmpeg 可以利用 Scalable Video Technology for AV1 库进行 AV1 编码。

访问https://gitlab.com/AOMediaCodec/SVT-AV1/并按照安装库的说明进行操作。然后传递--enable-libsvtav1给configure以启用它。

48.22 TwoLAME

FFmpeg 可以利用 TwoLAME 库进行 MP2 编码。

访问http://www.twolame.org/并按照安装该库的说明进行操作。然后传递--enable-libtwolame给configure以启用它。

48.23 VapourSynth

FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请传递 --enable-vapoursynth到配置。Vapoursynth 通过检测 pkg-config。支持版本 42 或更高版本。请参阅http://www.vapoursynth.com/

出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制输入格式。对于 ff* CLI 工具,请-f vapoursynth在输入之前添加-i yourscript.vpy.

48.24 x264

FFmpeg 可以利用 x264 库进行 H.264 编码。

转至http://www.videolan.org/developers/x264.html并按照安装该库的说明进行操作。然后传递--enable-libx264给configure以启用它。

x264 遵循 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

48.25 x265

FFmpeg 可以利用 x265 库进行 HEVC 编码。

转至http://x265.org/developers.html并按照安装该库的说明进行操作。然后传递--enable-libx265给configure以启用它。

x265 遵循 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

48.26 xavs

FFmpeg 可以利用 xavs 库进行 AVS 编码。

转至http://xavs.sf.net/并按照安装该库的说明进行操作。然后传递--enable-libxavs给configure以启用它。

48.27 xavs2

FFmpeg 可以利用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。

转到https://github.com/pkuvcl/xavs2并按照安装该库的说明进行操作。然后传递--enable-libxavs2给configure以启用它。

libxavs2 采用 GNU 公共许可证版本 2 或更高版本(详细信息请参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html),您必须将 FFmpeg 的许可证升级到 GPL 才能使用它。

48.28 ZVBI

ZVBI是一个VBI解码库,FFmpeg可以使用它来解码DVB图文电视页面和DVB图文电视字幕。

转至http://sourceforge.net/projects/zapping/并按照安装该库的说明进行操作。然后传递--enable-libzvbi给configure以启用它。

49 支持的文件格式、编解码器或功能

您可以使用-formats-codecs选项来获得详尽的列表。

49.1 File Formats

FFmpeg 通过库支持以下文件格式libavformat

Name编码解码评论
3dostrX
4xmX4X Technologies 格式,用于某些游戏。
8088flex TMVX
AAXXAudible 增强音频格式,用于有声读物。
AAX有声格式 2、3 和 4,用于有声读物。
ACT VoiceX包含 G.729 音频
Adobe FilmstripXX
Audio IFF (AIFF)XX
American Laser Games MMXMad Dog McCree 等游戏中使用的多媒体格式。
3GPP AMRXX
Amazing Studio Packed Animation FileX游戏《黑暗之心》中使用的多媒体格式。
Apple HTTP Live StreamingX
Artworx Data FormatX
Interplay ACMX某些 Interplay 游戏中使用的纯音频格式。
ADPXNintendo Gamecube 使用的音频格式。
AFCXNintendo Gamecube 使用的音频格式。
ADS/SS2XPS2 上使用的音频格式。
APNGXX
ASFXX高级/活动流格式。
ASTXXNintendo Wii 上使用的音频格式。
AVIXX
AviSynthX
AVRXMac 上使用的音频格式。
AVSXCreature Shock 游戏使用的多媒体格式。
Beam Software SIFFXBeam Software 在某些游戏中使用的音频和视频格式。
Bethesda Softworks VIDX用于 Bethesda Softworks 的一些游戏。
Binary textX
BinkX许多游戏使用的多媒体格式。
Bink AudioX某些游戏使用的纯音频多媒体格式。
Bitmap Brothers JVX用于Z和Z95游戏。
BRPX阿尔戈英雄游戏格式。
Brute Force & IgnoranceX用于游戏《Flash Traffic:天使之城》。
BFSTMXNintendo WiiU 上使用的音频格式(基于 BRSTM)。
BRSTMXNintendo Wii 上使用的音频格式。
BW64X广播波 64 位。
BWFXX
codec2 (raw)XX必须给出 -mode 格式选项才能正确解码。
codec2 (.c2 files)XX包含带有版本和模式信息的标头,简化播放。
CRI ADXXX控制台视频游戏中使用的纯音频格式。
CRI AIXX
CRI HCAX控制台视频游戏中使用的纯音频格式。
Discworld II BMVX
Interplay C93X用于 Interplay 的 Cyber​​ia 游戏。
Delphine Software International CINXDelphine Software 游戏使用的多媒体格式。
Digital Speech Standard (DSS)X
CD+GXCD+G 卡拉 OK 光盘使用的视频格式
Phantom CineX
Commodore CDXLXAmiga CD 视频格式
Core Audio FormatXX苹果核心音频格式
CRC testing formatX
Creative VoiceXX专为 Sound Blaster Pro 创建。
CRYO APCXCRYO Interactive Entertainment 在某些游戏中使用的音频格式。
D-Cinema audioXX
Deluxe Paint AnimationX
DCSTRX
DFAX此格式用于 Chronomaster 游戏
DirectDraw SurfaceX
DSD Stream File (DSF)X
DV videoXX
DXAX此格式用于非 Windows 版本的 Feeble Files 游戏以及重新打包以与 ScummVM 一起使用的不同游戏过场动画。
Electronic Arts cdataX
Electronic Arts MultimediaX用于各种EA游戏;文件具有 WVE 和 UV2 等扩展名。
Ensoniq Paris Audio FileX
FFM (FFserver live feed)XX
Flash (SWF)XX
Flash 9 (AVM2)XX仅解码嵌入的音频。
FLI/FLC/FLX animationX.fli/.flc 文件
Flash Video (FLV)XXMacromedia Flash 视频文件
framecrc testing formatX
FunCom ISSXFunCom 的各种游戏(例如《最长的旅程》)中使用的音频格式。
G.723.1XX
G.726X左对齐和右对齐。
G.729 BITXX
G.729 rawX
GENHX各种游戏的音频格式。
GIF AnimationXX
GXFXX通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播放服务器使用。
HNMX仅支持版本 4,用于 Cryo Interactive 的某些游戏
iCEDraw FileX
ICOXX微软Windows ICO
id Quake II CIN videoX
id RoQXX用于《雷神之锤 III》、《绝地武士 2》等电脑游戏。
IEC61937 encapsulationXX
IFFX交换文件格式
IFVX一些旧的 CCTV DVR 使用的格式。
iLBCXX
Interplay MVEX各种 Interplay 电脑游戏中使用的格式。
Iterated Systems ClearVideoX仅 I 帧
IV8X由 IndigoVision 8000 视频服务器生成的格式。
IVF (On2)XXlibvpx 使用的格式
Internet Video RecordingX
IRCAMXX
LAFX无限的音频格式
LATMXX
LMLM4X由 Linux Media Labs MPEG-4 PCI 板使用
LOASX包含 LATM 多路复用 AAC 音频
LRCXX
LVFX
LXFXVR 原生流格式,由 Leitch/Harris 的视频服务器使用。
Magic Lantern Video (MLV)X
MatroskaXX
Matroska audioX
FFmpeg metadataXX文本格式的元数据。
MAXIS XAX用于模拟城市3000;文件扩展名 .xa。
MCAX用于Capcom的一些游戏;文件扩展名 .mca。
MD StudioX
Metal Gear Solid: The Twin SnakesX
Megalux FrameXMegalux Ultimate Paint 使用
MobiClip MODSX
MobiClip MOFLEXX
Mobotix .mxgX
Monkey’s AudioX
Motion Pixels MVIX
MOV/QuickTime/MP4XX支持 3GP、3GP2、PSP、iPod 变体
MP2XX
MP3XX
MPEG-1 SystemXX音视频混合,支持VCD格式
MPEG-PS (program stream)XX也称为VOB文件,支持 SVCD 和 DVD 格式
MPEG-TS (transport stream)XX也称为 DVB 传输流
MPEG-4XXMPEG-4 是 QuickTime 的变体。
MSFXPS3 上使用的音频格式。
Mirillis FIC videoX无光标渲染。
MIDI Sample Dump StandardX
MIME multipart JPEGX
MSN TCP webcamX由 MSN Messenger 网络摄像头流使用。
MTVX
MusepackX
Musepack SV8X
Material eXchange Format (MXF)XXSMPTE 377M,D-Cinema、广播行业使用。
Material eXchange Format (MXF), D-10 MappingXXSMPTE 386M、D-10/IMX 映射。
NC camera feedXNC (AVIP NC4600) 摄像机流
NIST SPeech HEader REsourcesX
Computerized Speech Lab NSPX
NTT TwinVQ (VQF)X日本电报电话公司 TwinVQ。
Nullsoft Streaming VideoX
NuppelVideoX
NUTXXNUT 开放容器格式
OggXX
Playstation Portable PMPX
Portable Voice FormatX
RK Audio (RKA)X
TechnoTrend PVAX由 TechnoTrend DVB PCI 板使用。
QCPX
raw ADTS (AAC)XX
raw AC-3XX
raw AMR-NBX
raw AMR-WBX
raw APACX
raw aptXXX
raw aptX HDXX
raw BonkX
raw Chinese AVS videoXX
raw DFPWMXX
raw DiracXX
raw DNxHDXX
raw DTSXX
raw DTS-HDX
raw E-AC-3XX
raw FLACXX
raw GSMX
raw H.261XX
raw H.263XX
raw H.264XX
raw HEVCXX
raw Ingenient MJPEGX
raw MJPEGXX
raw MLPX
raw MPEGX
raw MPEG-1X
raw MPEG-2X
raw MPEG-4XX
raw NULLX
raw videoXX
raw id RoQX
raw OBUXX
raw OSQX
raw SBCXX
raw ShortenX
raw TAKX
raw TrueHDXX
raw VC-1XX
raw PCM A-lawXX
raw PCM mu-lawXX
raw PCM Archimedes VIDCXX
raw PCM signed 8 bitXX
raw PCM signed 16 bit big-endianXX
raw PCM signed 16 bit little-endianXX
raw PCM signed 24 bit big-endianXX
raw PCM signed 24 bit little-endianXX
raw PCM signed 32 bit big-endianXX
raw PCM signed 32 bit little-endianXX
raw PCM signed 64 bit big-endianXX
raw PCM signed 64 bit little-endianXX
raw PCM unsigned 8 bitXX
raw PCM unsigned 16 bit big-endianXX
raw PCM unsigned 16 bit little-endianXX
raw PCM unsigned 24 bit big-endianXX
raw PCM unsigned 24 bit little-endianXX
raw PCM unsigned 32 bit big-endianXX
raw PCM unsigned 32 bit little-endianXX
raw PCM 16.8 floating point little-endianX
raw PCM 24.0 floating point little-endianX
raw PCM floating-point 32 bit big-endianXX
raw PCM floating-point 32 bit little-endianXX
raw PCM floating-point 64 bit big-endianXX
raw PCM floating-point 64 bit little-endianXX
RDTX
REDCODE R3DXRED 数码相机使用的文件格式,包含 JPEG 2000 帧和 PCM 音频。
RealMediaXX
RedirectorX
RedSparkX
Renderware TeXture DictionaryX
Resolume DXVX
RF64X
RL2X娱乐软件合作伙伴在某些游戏中使用的音频和视频格式。
RPL/ARMovieX
Lego Mindstorms RSOXX
RSDX
RTMPXX通过将流发布到RTMP服务器来执行输出
RTPXX
RTSPXX
Sample Dump eXchangeX
SAPXX
SBGX
SDNSX
SDPX
SERX
Digital Pictures SGAX
Sega FILM/CPKXX用于许多世嘉土星游戏机游戏。
Silicon Graphics MovieX
Sierra SOLXSierra Online 游戏中使用的 .sol 文件。
Sierra VMDX用于 Sierra CD-ROM 游戏。
SmackerX许多游戏使用的多媒体格式。
SMJPEGXX用于某些 Loki 游戏移植。
SMPTE 337M encapsulationX
SmushX某些 LucasArts 游戏中使用的多媒体格式。
Sony OpenMG (OMA)XXSony Sonic Stage 和 Sony Vegas 使用的音频格式。
Sony PlayStation STRX
Sony Wave64 (W64)XX
SoX native formatXX
SUN AU formatXX
SUP raw PGS subtitlesXX
SVAGXKonami PS2 游戏中使用的音频格式。
TDSCX
Text filesX
THPX用于任天堂 GameCube。
Tiertex Limited SEQXTiertex .seq 文件用于游戏 Flashback 的 DOS CD-ROM 版本。
True AudioXX
VAGX许多索尼 PS2 游戏中使用的音频格式。
VC-1 test bitstreamXX
Vidvox HapXX
VivoX
VPKX索尼 PS 游戏中使用的音频格式。
Marble WADYX
WAVXX
Waveform ArchiverX
WavPackXX
WebMXX
Windows Televison (WTV)XX
Wing Commander III movieXOrigin 的 Wing Commander III 电脑游戏中使用的多媒体格式。
Westwood Studios audioXXWestwood Studios 游戏中使用的多媒体格式。
Westwood Studios VQAXWestwood Studios 游戏中使用的多媒体格式。
Wideband Single-bit Data (WSD)X
WVEX
Konami XMDX
XMVXXbox 游戏中使用的 Microsoft 视频容器。
XVAGXPS3 上使用的音频格式。
xWMAXXAudio 2 使用的 Microsoft 音频容器。
eXtended BINary text (XBIN)X
YUV4MPEG pipeXX
Psygnosis YOPX

X表示支持该列中的功能(编码/解码)。

49.2 Image Formats

FFmpeg 可以读取和写入视频序列的每一帧的图像。支持以下图像格式:

Name编码解码评论
.Y.U.VXX每个组件一个原始文件
Alias PIXXXAlias/Wavefront PIX 图像格式
animated GIFXX
APNGXX动画便携式网络图形
BMPXX微软BMP图像
BRender PIXXArgonaut BRender 3D 引擎图像格式。
CRIX辛特尔RAW
DPXXX数字图片交换
EXRX开放EXR
FITSXX灵活的图像传输系统
HDRXXRadiance HDR RGBE 图像格式
IMGXGEM 光栅图像
JPEGXX不支持渐进式 JPEG。
JPEG 2000XX
JPEG-LSXX
LJPEGX无损 JPEG
Media 100X
MSPX微软画图图像
PAMXXPAM 是具有 alpha 支持的 PNM 扩展。
PBMXX便携式位图图像
PCDX照片CD
PCXXX电脑画笔
PFMXX便携式浮动地图图像
PGMXX便携式灰度图图像
PGMYUVXXYUV 4:2:0 中具有 U 和 V 分量的 PGM
PGXXPGX 文件解码器
PHMXX便携式 HalfFloatMap 图像
PICX绘画/PC油漆
PNGXX便携式网络图形图像
PPMXX便携式 PixelMap 图像
PSDXPhotoshop
PTXX五、Flash PTX格式
QOIXX相当不错的图像格式
SGIXXSGI RGB 图像格式
Sun RasterfileXXSun RAS 映像格式
TIFFXX尚不支持 YUV、JPEG 和某些扩展。
Truevision TargaXXTarga (.TGA) 图像格式
VBNXXVizrt 二进制图像格式
WBMPXX无线应用协议位图图像格式
WebPXWebP图像格式,通过外部库libwebp支持编码
XBMXXX 位图图像格式
XFaceXXX-Face 图像格式
XPMXX PixMap 图像格式
XWDXXX Window 转储图像格式

X表示支持该列中的功能(编码/解码)。

E意味着支持是通过外部库提供的。

49.3 Video Codecs

Name编码解码评论
4X MovieX用于某些电脑游戏。
8088flex TMVX
A64 multicolorX创建适合在 Commodore 64(多色模式)上播放的视频。
Amazing Studio PAF VideoX
American Laser Games MMX用于像疯狗麦克雷这样的游戏。
Amuse Graphics MovieX
AMV VideoXX用于中文MP3播放器。
ANSI/ASCII artX
Apple Intermediate CodecX
Apple MJPEG-BX
Apple PixletX
Apple ProResXXfourcc:apch、apcn、apcs、apco、ap4h、ap4x
Apple QuickDrawXfourcc:qdrw
Argonaut VideoX用于一些阿尔戈英雄游戏。
Asus v1XX四联:ASV1
Asus v2XX四联:ASV2
ATI VCR1X四联:VCR1
ATI VCR2X四:VCR2
Auravision AuraX
Auravision Aura 2X
Autodesk Animator Flic videoX
Autodesk RLEX四方:AASC
AV1通过外部库 libaom、libdav1d、librav1e 和 libsvtav1 支持
Avid 1:1 10-bit RGB PackerXXfourcc:AVrp
AVS (Audio Video Standard) videoXCreature Shock 游戏使用的视频编码。
AVS2-P2/IEEE1857.4通过外部库 libxavs2 和 libdavs2 支持
AVS3-P2/IEEE1857.10通过外部库 libuavs3d 支持
AYUVXXMicrosoft 未压缩打包 4:4:4:4
Beam Software VBX
Bethesda VID videoX用于 Bethesda Softworks 的一些游戏。
Bink VideoX
BitJazz SheerVideoX
Bitmap Brothers JV videoX
y41p Brooktree uncompressed 4:1:1 12-bitXX
Brooktree ProSumer VideoX四联:BT20
Brute Force & IgnoranceX用于游戏《Flash Traffic:天使之城》。
C93 videoXCyber​​ia 游戏中使用的编解码器。
CamStudioX四方:CSCD
CD+GXCD+G 卡拉 OK 光盘的视频编解码器
CDXLXAmiga CD 视频编解码器
Chinese AVS videoXAVS1-P2,JiZhun配置文件,通过外部库libxavs编码
Delphine Software International CIN videoXDelphine Software International 游戏中使用的编解码器。
Discworld II BMV VideoX
CineForm HDXX
Canopus HQX
Canopus HQAX
Canopus HQXX
Canopus Lossless CodecX
CDToonsX各种 Broderbund 游戏中使用的编解码器。
CinepakX
Cirrus Logic AccuPakXX四方:CLJR
CPiA Video FormatX
Creative YUV (CYUV)X
DFAXChronomaster 游戏中使用的编解码器。
DiracX通过本机 vc2 (Dirac Pro) 编码器支持
Deluxe Paint AnimationX
DNxHDXX又名 SMPTE VC3
Duck TrueMotion 1.0Xfourcc: 鸭子
Duck TrueMotion 2.0X四联:TM20
Duck TrueMotion 2.0 RTX四联:TR20
DV (Digital Video)XX
Dxtory capture formatX
Feeble Files/ScummVM DXAX编解码器最初用于 Feeble Files 游戏。
Electronic Arts CMV videoX用于 NHL 95 比赛。
Electronic Arts Madcow videoX
Electronic Arts TGV videoX
Electronic Arts TGQ videoX
Electronic Arts TQI videoX
Escape 124X
Escape 130X
FFmpeg video codec #1XX无损编解码器(fourcc:FFV1)
Flash Screen Video v1XXfourcc:FSV1
Flash Screen Video v2XX
Flash Video (FLV)XXFlash 中使用的 Sorenson H.263
FM Screen Capture CodecX
Forward UncompressedX
FrapsX
Go2MeetingXfourcc:G2M2、G2M3
Go2WebinarX四联:G2M4
Gremlin Digital VideoX
H.261XX
H.263 / H.263-1996XX
H.263+ / H.263-1998 / H.263 version 2XX
H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10X通过外部库 libx264 和 OpenH264 支持的编码
HEVCXX通过外部库 libx265 和 libkvazaar 支持的编码
HNM version 4X
HuffYUVXX
HuffYUV FFmpeg variantXX
IBM UltimotionXfourcc:ULTI
id Cinematic videoX用于《雷神之锤 II》。
id RoQ videoXX用于《雷神之锤 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 的 Cyber​​ia 游戏。
Interplay MVE videoX用于 Interplay .MVE 文件。
J2KXX
Karl Morton’s video codecX《百战天虫》游戏中使用的编解码器。
Kega Game Video (KGV1)XKega 模拟器屏幕捕获编解码器。
LagarithX
LCL (LossLess Codec Library) MSZHX
LCL (LossLess Codec Library) ZLIB
LEAD MCMPX
LOCOX
LucasArts SANM/SmushX用于 LucasArts 游戏/SMUSH 动画。
lossless MJPEGXX
MagicYUV VideoXX
Mandsoft Screen Capture CodecX
Microsoft ATC ScreenX也称为 Microsoft Screen 3。
Microsoft Expression Encoder ScreenX也称为微软钛屏 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 videoX
Motion Pixels videoX
MPEG-1 videoXX
MPEG-2 videoXX
MPEG-4 part 2XXlibxvidcore 也可以用于编码。
MPEG-4 part 2 Microsoft variant version 1X
MPEG-4 part 2 Microsoft variant version 2XX
MPEG-4 part 2 Microsoft variant version 3XX
Newtek SpeedHQXX
Nintendo Gamecube THP videoX
NotchLCX
NuppelVideo/RTjpegXNuppelVideo 文件中使用的视频编码。
On2 VP3X仍处于实验阶段
On2 VP4X四联:VP40
On2 VP5X四联:VP50
On2 VP6X四:VP60、VP61、VP62
On2 VP7X四:VP70、VP71
VP8Xfourcc:VP80,通过外部库 libvpx 支持的编码
VP9X通过外部库 libvpx 支持的编码
Pinnacle TARGA CineWave YUV16X四联:Y216
Q-team QPEGXfourccs:QPEG、Q1.0、Q1.1
QuickTime 8BPS videoX
QuickTime Animation (RLE) videoXXfourcc: 'rle'
QuickTime Graphics (SMC)XXfourcc: 'smc'
QuickTime video (RPZA)XXfourcc: rpza
R10K AJA Kona 10-bit RGB CodecXX
R210 Quicktime Uncompressed RGB 10-bitXX
Raw VideoXX
RealVideo 1.0XX
RealVideo 2.0XX
RealVideo 3.0X离理想还很远
RealVideo 4.0X
Renderware TXD (TeXture Dictionary)XRenderware 引擎使用的纹理字典。
RivaTuner VideoXfourcc: 'RTV1'
RL2 videoX娱乐软件合作伙伴在某些游戏中使用
ScreenPressorX
ScreenpressoX
Screen Recorder Gold CodecX
Sierra VMD videoX用于 Sierra VMD 文件。
Silicon Graphics Motion Video Compressor 1 (MVC1)X
Silicon Graphics Motion Video Compressor 2 (MVC2)X
Silicon Graphics RLE 8-bit videoX
Smacker videoXSmacker 中使用的视频编码。
SMPTE VC-1X
SnowXX实验性小波编解码器(fourcc:SNOW)
Sony PlayStation MDEC (Motion DECoder)X
Sorenson Vector Quantizer 1XX四联:SVQ1
Sorenson Vector Quantizer 3X四联:SVQ3
Sunplus JPEG (SP5X)X四联:SP5X
TechSmith Screen Capture CodecX四号:TSCC
TechSmith Screen Capture Codec 2X四联:TSC2
TheoraX通过外部库 libtheora 支持的编码
Tiertex Limited SEQ videoXDOS CD-ROM FlashBack 游戏中使用的编解码器。
Ut VideoXX
v210 QuickTime uncompressed 4:2:2 10-bitXX
v308 QuickTime uncompressed 4:4:4XX
v408 QuickTime uncompressed 4:4:4:4XX
v410 QuickTime uncompressed 4:4:4 10-bitXX
VBLE Lossless CodecX
vMix VideoXfourcc: 'VMX1'
VMware Screen Codec / VMware VideoXVMware 捕获的视频中使用的编解码器。
Westwood Studios VQA (Vector Quantized Animation) videoX
Windows Media ImageX
Windows Media Video 7XX
Windows Media Video 8XX
Windows Media Video 9X不完全工作
Wing Commander III / XanX用于 Wing Commander III .MVE 文件。
Wing Commander IV / XanX用于 Wing Commander IV。
Winnov WNV1X
WMV7XX
YAMAHA SMAFXX
Psygnosis YOP VideoX
yuv4XXlibquicktime 未压缩打包 4:2:0
ZeroCodec Lossless VideoX
ZLIBXXLCL部分,编码器实验
Zip Motion Blocks VideoXX编码器仅适用于 PAL8。

X表示支持该列中的功能(编码/解码)。

E意味着支持是通过外部库提供的。

49.4 Audio Codecs

Name编码解码评论
8SVX exponentialX
8SVX fibonacciX
AAC前任X通过内部编码器和外部库 libfdk-aac 支持的编码
AAC+通过外部库 libfdk-aac 支持的编码
AC-3
ACELP.KELVINX
ADPCM 4X MovieX
ADPCM Yamaha AICAX
ADPCM AmuseGraphics MovieX
ADPCM Argonaut GamesXX
ADPCM CDROM XAX
ADPCM Creative TechnologyX16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
ADPCM Electronic ArtsX用于各种 EA 游戏。
ADPCM Electronic Arts Maxis CDROM XSX用于《模拟城市 3000》。
ADPCM Electronic Arts R1X
ADPCM Electronic Arts R2X
ADPCM Electronic Arts R3X
ADPCM Electronic Arts XASX
ADPCM G.722XX
ADPCM G.726XX
ADPCM IMA Acorn ReplayX
ADPCM IMA AMVXX用于 AMV 文件
ADPCM IMA Cunning DevelopmentsX
ADPCM IMA Electronic Arts EACSX
ADPCM IMA Electronic Arts SEADX
ADPCM IMA FuncomX
ADPCM IMA High Voltage Software ALPXX
ADPCM IMA Mobiclip MOFLEXX
ADPCM IMA QuickTimeXX
ADPCM IMA Simon & Schuster InteractiveXX
ADPCM IMA Ubisoft APMXX
ADPCM IMA Loki SDL MJPEGX
ADPCM IMA WAVXX
ADPCM IMA WestwoodX
ADPCM ISS IMAX用于 FunCom 游戏。
ADPCM IMA DialogicX
ADPCM IMA Duck DK3X用于一些世嘉土星游戏机游戏。
ADPCM IMA Duck DK4X用于一些世嘉土星游戏机游戏。
ADPCM IMA RadicalX
ADPCM MicrosoftXX
ADPCM MS IMAXX
ADPCM Nintendo Gamecube AFCX
ADPCM Nintendo Gamecube DTKX
ADPCM Nintendo THPX
ADPCM PlaystationX
ADPCM QT IMAXX
ADPCM SEGA CRI ADXXX用于世嘉 Dreamcast 游戏。
ADPCM Shockwave FlashXX
ADPCM Sound Blaster Pro 2-bitX
ADPCM Sound Blaster Pro 2.6-bitX
ADPCM Sound Blaster Pro 4-bitX
ADPCM VIMAX用于 LucasArts SMUSH 动画。
ADPCM Konami XMDX
ADPCM Westwood Studios IMAXX用于 Westwood Studios 游戏,例如《命令与征服》。
ADPCM YamahaXX
ADPCM ZorkX
AMR-NBX通过外部库 libopencore-amrnb 支持的编码
AMR-WBX通过外部库 libvo-amrwbenc 支持的编码
Amazing Studio PAF AudioX
Apple lossless audioXXQuickTime fourcc 'alac'
aptXXX用于蓝牙A2DP
aptX HDXX用于蓝牙A2DP
ATRAC1X
ATRAC3X
ATRAC3+X
ATRAC9X
Bink AudioX用于许多游戏中的 Bink 和 Smacker 文件。
Bonk audioX
CELT通过外部库 libcelt 支持解码
codec2通过外部库 libcodec2 支持 en/解码
CRI HCAX
Delphine Software International CIN audioXDelphine Software International 游戏中使用的编解码器。
DFPWMXX
Digital Speech Standard - Standard Play mode (DSS SP)X
Discworld II BMV AudioX
COOKX支持除 5.1 之外的所有版本。
DCA (DTS Coherent Acoustics)XX支持的扩展名:XCh、XXCH、X96、XBR、XLL、LBR(部分)
Dolby EX
DPCM Cuberoot-Delta-ExactX在少数游戏中使用。
DPCM GremlinX
DPCM id RoQXX用于《雷神之锤 III》、《绝地武士 2》等电脑游戏。
DPCM Marble WADYX
DPCM InterplayX用于各种 Interplay 电脑游戏。
DPCM Squareroot-Delta-ExactX用于各种游戏。
DPCM Sierra OnlineX用于 Sierra Online 游戏音频文件。
DPCM SolX
DPCM XanX用于 Origin 的 Wing Commander IV AVI 文件。
DPCM Xilam DERFX
DSD (Direct Stream Digital), least significant bit firstX
DSD (Direct Stream Digital), most significant bit firstX
DSD (Direct Stream Digital), least significant bit first, planarX
DSD (Direct Stream Digital), most significant bit first, planarX
DSP Group TrueSpeechX
DST (Direct Stream Transfer)X
DV audioX
Enhanced AC-3XX
EVRC (Enhanced Variable Rate Codec)X
FLAC (Free Lossless Audio Codec)X
FTR VoiceX
G.723.1XX
G.729X
GSMX通过外部库 libgsm 支持的编码
GSM Microsoft variantX通过外部库 libgsm 支持的编码
IAC (Indeo Audio Coder)X
iLBC (Internet Low Bitrate Codec)前任通过外部库 libilbc 支持编码和解码
IMC (Intel Music Coder)X
Interplay ACMX
MACE (Macintosh Audio Compression/Expansion) 3:1X
MACE (Macintosh Audio Compression/Expansion) 6:1X
Marian’s A-pac audioX
MI-SC4 (Micronas SC-4 Audio)X
MLP (Meridian Lossless Packing)XX用于 DVD 音频光盘。
Monkey’s AudioX
MP1 (MPEG audio layer 1)
MP2 (MPEG audio layer 2)还通过外部库 TwoLAME 支持编码
MP3 (MPEG audio layer 3)通过外部库 LAME 支持编码,还支持 ADU MP3 和 MP3onMP4
MPEG-4 Audio Lossless Coding (ALS)X
MobiClip FastAudioX
Musepack SV7X
Musepack SV8X
Nellymoser AsaoXX
On2 AVC (Audio for Video Codec)X
OpusX通过外部库 libopus 支持的编码
OSQ (Original Sound Quality)X
PCM A-lawXX
PCM mu-lawXX
PCM Archimedes VIDCXX
PCM signed 8-bit planarXX
PCM signed 16-bit big-endian planarXX
PCM signed 16-bit little-endian planarXX
PCM signed 24-bit little-endian planarXX
PCM signed 32-bit little-endian planarXX
PCM 32-bit floating point big-endianXX
PCM 32-bit floating point little-endianXX
PCM 64-bit floating point big-endianXX
PCM 64-bit floating point little-endianXX
PCM D-Cinema audio signed 24-bitXX
PCM signed 8-bitXX
PCM signed 16-bit big-endianXX
PCM signed 16-bit little-endianXX
PCM signed 24-bit big-endianXX
PCM signed 24-bit little-endianXX
PCM signed 32-bit big-endianXX
PCM signed 32-bit little-endianXX
PCM signed 16/20/24-bit big-endian in MPEG-TSX
PCM unsigned 8-bitXX
PCM unsigned 16-bit big-endianXX
PCM unsigned 16-bit little-endianXX
PCM unsigned 24-bit big-endianXX
PCM unsigned 24-bit little-endianXX
PCM unsigned 32-bit big-endianXX
PCM unsigned 32-bit little-endianXX
PCM SGAX
QCELP / PureVoiceX
QDesign Music Codec 1X
QDesign Music Codec 2X仍然存在一些扭曲。
RealAudio 1.0 (14.4K)XX真正的 14400 位/秒编解码器
RealAudio 2.0 (28.8K)X真正的 28800 位/秒编解码器
RealAudio 3.0 (dnet)X真正的低比特率 AC-3 编解码器
RealAudio LosslessX
RealAudio SIPR / ACELP.NETX
RK Audio (RKA)X
SBC (low-complexity subband codec)XX用于蓝牙A2DP
ShortenX
Sierra VMD audioX用于 Sierra VMD 文件。
Smacker audioX
SMPTE 302M AES3 audioXX
SonicXX实验编解码器
Sonic losslessXX实验编解码器
Speex前任通过外部库 libspeex 支持
TAK (Tom’s lossless Audio Kompressor)X
True Audio (TTA)XX
TrueHDXX用于 HD-DVD 和蓝光光盘。
TwinVQ (VQF flavor)X
VIMAX用于 LucasArts SMUSH 动画。
ViewQuest VQCX
VorbisX存在一种本机但非常原始的编码器。
Voxware MetaSoundX
Waveform ArchiverX
WavPackXX
Westwood Audio (SND1)X
Windows Media Audio 1XX
Windows Media Audio 2XX
Windows Media Audio LosslessX
Windows Media Audio ProX
Windows Media Audio VoiceX
Xbox Media Audio 1X
Xbox Media Audio 2X

X表示支持该列中的功能(编码/解码)。

E意味着支持是通过外部库提供的。

I意味着也可以使用纯整数版本(确保在没有硬件浮点支持的系统上获得高性能)。

49.5 Subtitle Formats

Name穆星解复用编码解码
3GPP Timed TextXX
AQTitleXX
DVBXXXX
DVB teletextX
DVDXXXX
JACOsubXXX
MicroDVDXXX
MPL2XX
MPsub (MPlayer)XX
PGSX
PJS (Phoenix)XX
RealTextXX
SAMIXX
Spruce format (STL)XX
SSA/ASSXXXX
SubRip (SRT)XXXX
SubViewer v1XX
SubViewerXX
TED Talks captionsXX
TTMLXX
VobSub (IDX+SUB)XX
VPlayerXX
WebVTTXXXX
XSUBXX

X表示支持该功能。

E意味着支持是通过外部库提供的。

49.6 Network Protocols

Name支持
AMQP
fileX
FTPX
GopherX
GophersX
HLSX
HTTPX
HTTPSX
IcecastX
MMSHX
MMSTX
pipeX
Pro-MPEG FECX
RTMPX
RTMPEX
RTMPSX
RTMPTX
RTMPTEX
RTMPTSX
RTPX
SAMBA
SCTPX
SFTP
TCPX
TLSX
UDPX
ZMQ

X表示支持该协议。

E意味着支持是通过外部库提供的。

49.7 Input/Output Devices

Name输入输出
ALSAXX
BKTRX
cacaX
DV1394X
Lavfi virtual deviceX
Linux framebufferXX
JACKX
LIBCDIOX
LIBDC1394X
OpenALX
OpenGLX
OSSXX
PulseAudioXX
SDLX
Video4Linux2XX
VfW captureX
X11 grabbingX
Win32 grabbingX

X表示支持输入/输出。

49.8 Timecode

Codec/format
AVIXX
DVXX
GXFXX
MOVXX
MPEG1/2XX
MXFXX

50 另请参阅

ffmpeg ffplayffprobeffmpeg-utilsffmpeg-scalerffmpeg-resamplerffmpeg-编解码器ffmpeg-bitstream-filtersffmpeg-formatsffmpeg-devicesffmpeg-protocolsffmpeg-filters

51 位作者

FFmpeg 开发人员。

git log有关作者身份的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源目录中键入命令 ,或浏览https://git 的在线存储库。 ffmpeg.org/ffmpeg

文件中列出了特定组件的维护者 维护者在源代码树中。

本文档于2023 年 11 月 17 日使用makeinfo 生成。

由telepoint.bg提供的托管