ffmpeg 文档

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

目录

1 纲要

ffmpeg [全局选项] {[输入文件选项] -iinput_url} ... {[输出文件选项] output_url} ...

2 描述

ffmpeg是一种通用的媒体转换器。它可以读取各种输入 —— 包括实时获取/记录设备 —— 过滤和转码它们至大量的输出格式。

ffmpeg从任意数量的输入读取(可以是常规文件、管道、网络流、抓取设备等),由-i选项指定,并写入任意数量的输出,这些输出由普通输出 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构建了一个由以下列出的组件组成的转码管道。程序操作包括从输入源流入数据块,沿管道向汇点移动数据,同时经过途中的组件进行转换。

提供以下类型的组件:

  • Demuxers(“解复用器”的简称)读取输入源以提取
    • 全局属性,例如元数据或章节;
    • 输入基本流及其属性的列表

    为每个-i选项创建一个解复用器实例,并发送已编码的packetsdecodersmuxers.

    在其他文献中,解复用器有时被称为splitters,因为其主要功能是将文件拆分为基本流(尽管某些文件仅包含一个基本流)。

    解复用器的示意图如下:

    ┌──────────┬───────────────────────┐
    │ demuxer  │                       │ packets for stream 0
    ╞══════════╡ elementary stream 0   ├──────────────────────►
    │          │                       │
    │  global  ├───────────────────────┤
    │properties│                       │ packets for stream 1
    │   and    │ elementary stream 1   ├──────────────────────►
    │ metadata │                       │
    │          ├───────────────────────┤
    │          │                       │
    │          │     ...........       │
    │          │                       │
    │          ├───────────────────────┤
    │          │                       │ packets for stream N
    │          │ elementary stream N   ├──────────────────────►
    │          │                       │
    └──────────┴───────────────────────┘
         ▲
         │
         │ read from file, network stream,
         │     grabbing device, etc.
         │
    
  • Decoders接收已编码(压缩)的packets数据,针对某个音频、视频或字幕基本流,将其解码为原始数据frames(视频为像素数组,音频为PCM)。解码器通常与一个基本流相关联(并接收其输入)demuxer,但有时也可能独立存在(参见环回解码器).

    解码器的示意图如下:

              ┌─────────┐
     packets  │         │ raw frames
    ─────────►│ decoder ├────────────►
              │         │
              └─────────┘
    
  • Filtergraphs处理并转换原始音频或视频frames。由一个或多个独立的filters链接为图构成的过滤图组成。过滤图有两种类型 -simplecomplex,分别由-filter-filter_complex选项进行配置。

    一个简单的过滤图与一个output elementary stream关联;它接收待过滤的输入decoder并将过滤后的输出发送到该输出流的encoder.

    一个简单的视频过滤图进行去隔行(使用yadif去隔行滤镜)后紧接着调整大小(使用scale滤镜)的示意图如下:

                 ┌────────────────────────┐
                 │  simple filtergraph    │
     frames from ╞════════════════════════╡ frames for
     a decoder   │  ┌───────┐  ┌───────┐  │ an encoder
    ────────────►├─►│ yadif ├─►│ scale ├─►│────────────►
                 │  └───────┘  └───────┘  │
                 └────────────────────────┘
    

    复杂的过滤图是独立的,不与任何特定的流相关联。它可能有多个(或零个)输入,可能是不同类型(音频或视频)的,每个输入接收数据要么来自解码器,要么来自另一个复杂过滤图的输出。它还具有一个或多个输出,输出要么连接到编码器,要么连接到另一个复杂过滤图的输入。

    以下示例是一个具有3个输入和2个输出(全部为视频)的复杂过滤图的示意图:

              ┌─────────────────────────────────────────────────┐
              │               complex filtergraph               │
              ╞═════════════════════════════════════════════════╡
     frames   ├───────┐  ┌─────────┐      ┌─────────┐  ┌────────┤ frames
    ─────────►│input 0├─►│ overlay ├─────►│ overlay ├─►│output 0├────────►
              ├───────┘  │         │      │         │  └────────┤
     frames   ├───────┐╭►│         │    ╭►│         │           │
    ─────────►│input 1├╯ └─────────┘    │ └─────────┘           │
              ├───────┘                 │                       │
     frames   ├───────┐ ┌─────┐ ┌─────┬─╯              ┌────────┤ frames
    ─────────►│input 2├►│scale├►│split├───────────────►│output 1├────────►
              ├───────┘ └─────┘ └─────┘                └────────┤
              └─────────────────────────────────────────────────┘
    

    第二个输入的帧叠加在第一个输入的帧上。第三个输入的帧被重新调整大小,然后被复制为两个相同的流。将其中一个叠加在前两个输入组合的结果上,并将结果作为过滤图的第一个输出。另一份副本最终成为过滤图的第二个输出。

  • Encoders接收原始音频、视频或字幕frames并将其编码成编码的packets。编码(压缩)过程通常是lossy有损的 - 它通过降低流的质量来减小输出的大小;某些编码器是lossless无损的,但代价是输出大小显著增加。视频或音频编码器从某个过滤图的输出中接收输入,字幕编码器从解码器接收输入(因为字幕过滤尚不支持)。每个编码器都与某个复用器的output elementary stream相关联,并将其输出发送给该复用器。

    编码器的示意图如下:

                 ┌─────────┐
     raw frames  │         │ packets
    ────────────►│ encoder ├─────────►
                 │         │
                 └─────────┘
    
  • Muxers(“复用器”的简称)接收编码的packets,针对它们的基本流从编码器(transcoding路径)或直接从解复用器(streamcopy路径),将它们交织(当存在多个基本流时),并将生成的字节写入输出文件(或管道、网络流等)。

    复用器的示意图如下:

                           ┌──────────────────────┬───────────┐
     packets for stream 0  │                      │   muxer   │
    ──────────────────────►│  elementary stream 0 ╞═══════════╡
                           │                      │           │
                           ├──────────────────────┤  global   │
     packets for stream 1  │                      │properties │
    ──────────────────────►│  elementary stream 1 │   and     │
                           │                      │ metadata  │
                           ├──────────────────────┤           │
                           │                      │           │
                           │     ...........      │           │
                           │                      │           │
                           ├──────────────────────┤           │
     packets for stream N  │                      │           │
    ──────────────────────►│  elementary stream N │           │
                           │                      │           │
                           └──────────────────────┴─────┬─────┘
                                                        │
                         write to file, network stream, │
                             grabbing device, etc.      │
                                                        │
                                                        ▼
    

3.1 流复制

中最简单的管道是单流ffmpeg,即复制一个streamcopy的分组而无需解码、过滤或编码它们。例如,假设有一个名为input elementary stream’s packets without decoding, filtering, or encoding them. As an example, consider an input file called INPUT.mkv的输入文件,包含3个基本流,我们从中提取第二个写入文件OUTPUT.mp4。这样的管道示意图如下:

┌──────────┬─────────────────────┐
│ demuxer  │                     │ unused
╞══════════╡ elementary stream 0 ├────────╳
│          │                     │
│INPUT.mkv ├─────────────────────┤          ┌──────────────────────┬───────────┐
│          │                     │ packets  │                      │   muxer   │
│          │ elementary stream 1 ├─────────►│  elementary stream 0 ╞═══════════╡
│          │                     │          │                      │OUTPUT.mp4 │
│          ├─────────────────────┤          └──────────────────────┴───────────┘
│          │                     │ unused
│          │ elementary stream 2 ├────────╳
│          │                     │
└──────────┴─────────────────────┘

上述管道可以通过以下命令行构建:

ffmpeg -i INPUT.mkv -map 0:1 -c copy OUTPUT.mp4

在这条命令中

  • 只有一个输入文件INPUT.mkv;
  • 此输入文件没有输入选项;
  • 只有一个输出文件OUTPUT.mp4;
  • 此输出文件有两个输出选项:
    • -map 0:1选择要使用的输入流 - 来自索引为0(即第一个)的输入,选择索引为1(即第二个)的流;
    • -c copy选择copy编码器,即进行流复制而无需解码或编码。

流复制用于更改基本流计数、容器格式或修改容器级别元数据。由于没有解码或编码,它非常快且没有质量损失。然而,在某些情况下可能无法工作,原因可能是各种因素(例如目标容器所需的某些信息在源中不可用)。显然,无法使用过滤器,因为过滤器作用于解码后的帧。

可以构建更复杂的流复制场景,例如将两个输入文件的流组合为一个输出:

┌──────────┬────────────────────┐         ┌────────────────────┬───────────┐
│ demuxer 0│                    │ packets │                    │   muxer   │
╞══════════╡elementary stream 0 ├────────►│elementary stream 0 ╞═══════════╡
│INPUT0.mkv│                    │         │                    │OUTPUT.mp4 │
└──────────┴────────────────────┘         ├────────────────────┤           │
┌──────────┬────────────────────┐         │                    │           │
│ demuxer 1│                    │ packets │elementary stream 1 │           │
╞══════════╡elementary stream 0 ├────────►│                    │           │
│INPUT1.aac│                    │         └────────────────────┴───────────┘
└──────────┴────────────────────┘

可以通过以下命令构建:

ffmpeg -i INPUT0.mkv -i INPUT1.aac -map 0:0 -map 1:0 -c copy OUTPUT.mp4

输出-map选项此处被使用了两次,在输出文件中创建了两个流,一个由第一个输入提供,另一个由第二个输入提供。出现的单个-c选项实例将流复制选择为两个流的处理方式。您还可以结合使用多个此选项实例和流说明符来对每个流应用不同值,如以下章节中所示。

相反的场景是将单个输入的多个流分割成多个输出:

┌──────────┬─────────────────────┐          ┌───────────────────┬───────────┐
│ demuxer  │                     │ packets  │                   │ muxer 0   │
╞══════════╡ elementary stream 0 ├─────────►│elementary stream 0╞═══════════╡
│          │                     │          │                   │OUTPUT0.mp4│
│INPUT.mkv ├─────────────────────┤          └───────────────────┴───────────┘
│          │                     │ packets  ┌───────────────────┬───────────┐
│          │ elementary stream 1 ├─────────►│                   │ muxer 1   │
│          │                     │          │elementary stream 0╞═══════════╡
└──────────┴─────────────────────┘          │                   │OUTPUT1.mp4│
                                            └───────────────────┴───────────┘

通过以下命令构建:

ffmpeg -i INPUT.mkv -map 0:0 -c copy OUTPUT0.mp4 -map 0:1 -c copy OUTPUT1.mp4

注意即使值相同,每个输出文件仍需单独一个-c选项实例。这是因为非全局选项(大多数选项是非全局的)仅适用在它们放置的文件前的上下文中。

这些示例当然可以进一步推广为任意数量输入与任意数量输出的任意重映射。

3.2 转码

Transcoding是解码流然后重新编码它的过程。由于编码通常计算量大,且在大多数情况下会降低流质量(即lossy),因此您应仅在必要时进行转码,其他情况下使用流复制。转码的典型原因包括:

  • 应用过滤器 - 例如调整大小、去隔行或叠加视频;重新采样或混音音频;
  • 您需要将流提供给无法解码原始编解码器的设备。

注意ffmpeg将转码所有的音频、视频和字幕流,除非您为它们指定了-c copy选项。

考虑一个示例管道,它从包含一个音频流和一个视频流的输入文件中读取,转码视频并复制音频到一个单一的输出文件。这可以通过以下图示表示

┌──────────┬─────────────────────┐
│ demuxer  │                     │       audio packets
╞══════════╡ stream 0 (audio)    ├─────────────────────────────────────╮
│          │                     │                                     │
│INPUT.mkv ├─────────────────────┤ video    ┌─────────┐     raw        │
│          │                     │ packets  │  video  │ video frames   │
│          │ stream 1 (video)    ├─────────►│ decoder ├──────────────╮ │
│          │                     │          │         │              │ │
└──────────┴─────────────────────┘          └─────────┘              │ │
                                                                     ▼ ▼
                                                                     │ │
┌──────────┬─────────────────────┐ video    ┌─────────┐              │ │
│ muxer    │                     │ packets  │  video  │              │ │
╞══════════╡ stream 0 (video)    │◄─────────┤ encoder ├──────────────╯ │
│          │                     │          │(libx264)│                │
│OUTPUT.mp4├─────────────────────┤          └─────────┘                │
│          │                     │                                     │
│          │ stream 1 (audio)    │◄────────────────────────────────────╯
│          │                     │
└──────────┴─────────────────────┘

并通过以下命令行实现:

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

注意它如何使用流说明符:v:a选择输入流,并为它们应用不同的-c选项值;有关更多详细信息,请参阅流说明符部分。

3.3 过滤

在转码时,可以在编码之前对音频和视频流进行过滤,用以下任意一个simplecomplex滤镜图。

3.3.1 简单滤镜图

简单滤镜图是那些仅具有一个输入和一个输出的滤镜图,且两者类型相同(音频或视频)。它们通过每流配置选项设置-filter选项(使用-vf-af分别作为-filter:v(视频)和-filter:a(音频)的别名)。注意,简单滤镜图与其输出流绑定,因此例如如果您有多个音频流,-af将为每个音频流创建一个单独的滤镜图。

以上转码示例添加了滤镜(为清楚起见省略音频)看起来像这样:

┌──────────┬───────────────┐
│ demuxer  │               │          ┌─────────┐
╞══════════╡ video stream  │ packets  │  video  │ frames
│INPUT.mkv │               ├─────────►│ decoder ├─────►───╮
│          │               │          └─────────┘         │
└──────────┴───────────────┘                              │
                                  ╭───────────◄───────────╯
                                  │   ┌────────────────────────┐
                                  │   │  simple filtergraph    │
                                  │   ╞════════════════════════╡
                                  │   │  ┌───────┐  ┌───────┐  │
                                  ╰──►├─►│ yadif ├─►│ scale ├─►├╮
                                      │  └───────┘  └───────┘  ││
                                      └────────────────────────┘│
                                                                │
                                                                │
┌──────────┬───────────────┐ video    ┌─────────┐               │
│ muxer    │               │ packets  │  video  │               │
╞══════════╡ video stream  │◄─────────┤ encoder ├───────◄───────╯
│OUTPUT.mp4│               │          │         │
│          │               │          └─────────┘
└──────────┴───────────────┘

3.3.2 复杂滤镜图

复杂滤镜图是不能简单地描述为对一个流进行线性处理链的情况。例如,当图具有多个输入和/或输出,或者当输出流类型与输入流类型不同时,就属于复杂滤镜图。复杂滤镜图通过-filter_complex选项配置。注意,这个选项是全局的,因为复杂滤镜图本质上无法明确地与单一流或文件相关联。每次使用-filter_complex都会创建一个新的复杂滤镜图,而且可以有任意数量的复杂滤镜图。

一个复杂滤镜图的简单示例是overlay滤镜,它有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频上。这的音频对应滤镜是amix滤镜。

3.4 回环解码器

虽然解码器通常与分流器流相关联,但也可以创建“回环”解码器,这种解码器解码某些编码器的输出,并允许其反馈到复杂滤镜图中。这是通过-dec指令完成,指令参数为要解码的输出流的索引。每个这样的指令都会创建一个新的回环解码器,从零开始依次编号。这些编号随后应在复杂滤镜图链接标签中使用,以引用回环解码器,如-filter_complex.

的文档中所述。-dec解码的AV选项可以通过放置在

之前传递给回环解码器,类似于输入/输出选项。

ffmpeg -i INPUT                                        \
  -map 0:v:0 -c:v libx264 -crf 45 -f null -            \
  -threads 3 -dec 0:0                                  \
  -filter_complex '[0:v][dec:0]hstack[stack]'          \
  -map '[stack]' -c:v ffv1 OUTPUT

例如,以下示例:

  • 读取一个输入视频并libx264(第2行)以低质量编码它;
  • (第3行)使用3线程解码此编码流;
  • (第4行)将解码的视频与原始输入视频并排放置;
  • (第5行)组合的视频进行无损编码,然后写入OUTPUT.

这样的转码流水线可以用以下图表示:

┌──────────┬───────────────┐
│ demuxer  │               │   ┌─────────┐            ┌─────────┐    ┌────────────────────┐
╞══════════╡ video stream  │   │  video  │            │  video  │    │ null muxer         │
│   INPUT  │               ├──►│ decoder ├──┬────────►│ encoder ├─┬─►│(discards its input)│
│          │               │   └─────────┘  │         │(libx264)│ │  └────────────────────┘
└──────────┴───────────────┘                │         └─────────┘ │
                                 ╭───────◄──╯   ┌─────────┐       │
                                 │              │loopback │       │
                                 │ ╭─────◄──────┤ decoder ├────◄──╯
                                 │ │            └─────────┘
                                 │ │
                                 │ │
                                 │ │  ┌───────────────────┐
                                 │ │  │complex filtergraph│
                                 │ │  ╞═══════════════════╡
                                 │ │  │  ┌─────────────┐  │
                                 ╰─╫─►├─►│   hstack    ├─►├╮
                                   ╰─►├─►│             │  ││
                                      │  └─────────────┘  ││
                                      └───────────────────┘│
                                                           │
┌──────────┬───────────────┐  ┌─────────┐                  │
│ muxer    │               │  │  video  │                  │
╞══════════╡ video stream  │◄─┤ encoder ├───────◄──────────╯
│  OUTPUT  │               │  │ (ffv1)  │
│          │               │  └─────────┘
└──────────┴───────────────┘

4 流选择

ffmpeg提供-map选项以手动控制每个输出文件中的流选择。用户可以跳过-map并让ffmpeg执行如以下所述的自动流选择。-vn / -an / -sn / -dn选项可用于跳过人工映射或自动选择的视频、音频、字幕和数据流的包含,但复杂滤镜图的输出流除外。

4.1 描述

以下子章节描述了流选择中涉及的各种规则。接下来的示例表明了这些规则如何被应用。

尽管已尽力准确反映程序的行为,但FFmpeg仍在持续开发中,因此代码可能自撰写本文以来已发生更改。

4.1.1 自动流选择

如果未为特定输出文件提供任何映射选项,ffmpeg会检查输出格式以确定可以包含哪些类型的流,例如视频、音频和/或字幕。对于每种可接受的流类型,ffmpeg会从所有输入中选择一个流(如果可用)。

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

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

如果多个相同类型的流得到同等评价,将选择索引最小的流。

数据或附件流不会被自动选择,仅能通过-map.

包括。

4.1.2 手动流选择-map当使用

映射选项时,只有用户映射的流会包含在该输出文件中,有一个不能包含的复杂滤镜图的输出流排序的例外。

If there are any complex filtergraph output streams with unlabeled pads, they will be added to the first output file. This will lead to a fatal error if the stream type is not supported by the output format. In the absence of the map option, the inclusion of these streams leads to the automatic stream selection of their types being skipped. If map options are present, these filtergraph streams are included in addition to the mapped streams.

复杂滤镜图的输出流必须映射一次且仅一次。

4.1.4 流处理

流处理独立于流选择,但字幕有一个例外。流处理是通过特定-codec文件线内的output选项设置的。尤其是,编解码器选项在流选择之后由ffmpeg应用,因此不会影响流选择。如果对某一流类型未设置任何选项,ffmpeg将选择由输出文件格式注册的默认编码器。-codec字幕存在一个例外。如果为输出文件指定了字幕编码器,将包括找到的第一个字幕流,无论是文本还是图像。即使用户手动设置编码器时,流选择过程也不能检查编码后的流是否能够写入的输出文件中。如果不能,则ffmpeg将中止并输出文件无法被处理。

An exception exists for subtitles. If a subtitle encoder is specified for an output file, the first subtitle stream found of any type, text or image, will be included. ffmpeg does not validate if the specified encoder can convert the selected stream or if the converted stream is acceptable within the output format. This applies generally as well: when the user sets an encoder manually, the stream selection process cannot check if the encoded stream can be muxed into the output file. If it cannot, ffmpeg will abort and all output files will fail to be processed.

4.2 示例

以下示例说明了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将自动选择这些两个文件的流。

out1.mkv是一个Matroska容器文件,接受视频、音频和字幕流,因此ffmpeg将尝试选择每种类型中的一个。
对于视频,它会选择stream 0来自B.mp4,它在所有输入视频流中具有最高的分辨率。
对于音频,它会选择stream 3来自B.mp4,因为它拥有最多的频道。
对于字幕,它会选择来自stream 2,这是B.mp4中的第一个字幕流,与A.aviB.mp4.

out2.wav仅接受音频流,所以仅选择stream 3来自B.mp4的音频。

对于out3.mov,由于设置了一个-map映射选项,没有自动选择流。-map 1:a映射选项会选择来自第二个输入B.mp4的所有音频流。不会包含其他流到输出文件中。

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

对于第三个输出,音频流的编解码器选项被设置为copy,因此不会进行解码-滤镜-编码操作,或者can进行。选定流的数据包将从输入文件传输并在输出文件中复用。

示例:自动字幕选择

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

尽管out1.mkv是接受字幕流的Matroska文件,但仅会选择一个视频和音频流。C.mkv的字幕流基于图像,而Matroska复用器的默认字幕编码器则基于文本,所以预期的字幕转码操作失败,因此不会选择该流。然而,在out2.mkv中,命令中指定了字幕编码器,因此字幕流被选择添加到视频流中。-an的存在禁用out2.mkv.

音频流的选择。

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

示例:未标注的滤镜图输出-filter_complex这里设置了一个滤镜图并使用overlay选项,包含单个视频滤镜。A.aviC.mkv过滤器的输出端没有标签,因此发送到第一个输出文件。out1.mp4由于此原因,视频流的自动选择被跳过,它本会选择流。B.mp4具有最多声道的音频流。stream 3B.mp4被自动选择。然而,没有选择字幕流,因为MP4格式没有默认字幕编码器注册,并且用户没有指定字幕编码器。

第二个输出文件,out2.srt仅接受基于文本的字幕流。因此,尽管第一个可用的字幕流属于C.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被发送到色调过滤器,通过拆分过滤器复制一次输出,并将两个输出贴上标签。然后各自一个副本被映射到第一个和第三个输出文件。

叠加过滤器需要两个视频输入,使用了前两个未使用的视频流。这些流是来自A.aviC.mkv的流。叠加输出没有标签,因此被发送到第一个输出文件out1.mp4,无论是否存在-map选项。

aresample过滤器被发送到第一个未使用的音频流,即来自A.avi的流。由于这个过滤器输出也是无标签的,它也被映射到第一个输出文件。存在-an只抑制音频流的自动或手动选择,而不是从过滤器图发送的输出。这些映射的流都将排在out1.mp4.

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

out3.mkv由色调过滤器克隆的视频输出和来自B.mp4.

的第一个音频流组成。

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

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

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

接受参数的选项支持一种特殊语法,其中命令行给出的参数被解释为路径,从该路径加载实际参数值。要使用此功能,请在选项名称前(在前导破折号之后)立即添加正斜杠'/'.例如:

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

将从名为filter.script.

的文件加载过滤器图描述。

一些选项是按流应用的,例如比特率或编解码器。流说明符用于精确指定给定选项属于哪些流。

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

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

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

流说明符的可能形式有:

流索引

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

流类型[:附加流说明符]

流类型是以下之一:'v'或'V'表示视频,'a'表示音频,'s'表示字幕,'d'表示数据,以及't'表示附件。'v'匹配所有视频流,'V'仅匹配不是附加图片、视频缩略图或封面艺术的视频流。如果附加流说明符被使用,那么它匹配类型为该类型且匹配附加流说明符的流。否则,它匹配所有指定类型的流。

g:组说明符[:附加流说明符]

匹配属于说明符组说明符的组内的流。如果附加流说明符被使用,那么它匹配属于该组且匹配附加流说明符. 组说明符可能是以下之一:

组索引

匹配具有此组索引的流。

#组ID or i:组ID

匹配具有此组ID的流。

p:节目ID[:附加流说明符]

匹配属于ID为节目ID的节目中的流。如果附加流说明符被使用,那么它匹配属于该节目且匹配附加流说明符.

#流ID or i:流ID

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

m:[:]

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

disp:倾向[:附加流说明符]

匹配具有指定配置的流。配置是一组一个或多个配置(如打印的那样-dispositions选项)用'+'连接。

u

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

注意在ffmpeg中,通过元数据匹配只针对输入文件正常工作。

5.2 通用选项

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

-L

显示许可证。

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

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

参数的可能值参数有:

long

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

full

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

decoder=解码器名称

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

encoder=编码器名称

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

demuxer=解复用器名称

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

muxer=复用器名称

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

filter=滤镜名称

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

bsf=比特流滤镜名称

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

protocol=协议名称

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

-version

显示版本。

-buildconf

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

-formats

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

-demuxers

显示可用的解复用器。

-muxers

显示可用的复用器。

-devices

显示可用的设备。

-codecs

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

请注意,术语“编解码器”在本文档中作为对更正确称为媒体比特流格式的简称。

-decoders

显示可用的解码器。

-encoders

显示所有可用的编码器。

-bsfs

显示可用的比特流滤镜。

-protocols

显示可用的协议。

-filters

显示可用的 libavfilter 滤镜。

-pix_fmts

显示可用的像素格式。

-sample_fmts

显示可用的采样格式。

-layouts

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

-dispositions

显示流的配置。

-colors

显示已识别的颜色名称。

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

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

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

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

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

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

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

repeat

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

level

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

time

表示日志行前应该加上时间信息。

datetime

表示日志行前应该加上日期和时间信息。

标志也可以单独使用,通过加上'+'/'-'前缀用于设置/重置单个标志而不影响其他标志或更改日志级别。当同时设置这两者标志日志级别,在最后一个之间需要一个’+’分隔符标志值之前和日志级别.

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

quiet, -8

不显示任何内容;保持安静。

panic, 0

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

fatal, 8

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

error, 16

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

warning, 24

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

info, 32

在处理过程中显示信息性消息。这是在警告和错误之外的默认值。

verbose, 40

info相同,但更详尽。

debug, 48

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

trace, 56

比如要启用重复的日志输出,可以添加level前缀,并设置日志级别verbose:

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

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

ffmpeg [...] -loglevel +repeat

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

-report

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

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

以下选项被识别:

file

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

level

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

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

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

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

-hide_banner

禁止打印横幅。

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

-cpuflags flags (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 计数 (global)

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

ffmpeg -cpucount 2
-max_alloc 字节

设置使用 ffmpeg 的分配函数分配堆内块的最大大小限制。使用极度谨慎的方式。不要在不了解全部后果的情况下使用。 默认值为 INT_MAX。

5.3 AVOptions

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

generic

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

private

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

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

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

所有编解码器 AVOptions 都是按流的,因此应该将流说明符附加到它们:

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

在上述示例中,一个多声道音频流被映射了两次进行输出。 第一实例使用编解码器 ac3 和比特率 640k 编码。 第二实例被混音为 2 声道并使用编解码器 aac 编码。为其设置的比特率为 128k,使用了输出流的绝对索引。

注意:-nooption语法不能用于布尔 AVOptions,请使用-option 0/-option 1.

注意:通过在选项名称前加上 v/a/s 标记来指定按流的 AVOptions 的旧的未文档化方式现已过时,将很快被移除。

5.4 主要选项

-f 格式 (input/output)

强制输入或输出文件格式。对于输入文件通常会自动检测格式,对于输出文件格式将通过文件扩展名进行猜测,因此在大多数情况下不需要此选项。

-i URL (input)

输入文件 URL

-y (global)

覆盖输出文件而无需询问。

-n (global)

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

-stream_loop 数字 (input)

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

-recast_media (global)

允许强制使用与解复用器检测或指定的媒体类型不同的解码器。这对解码作为数据流复用的媒体数据非常有用。

-c[:流说明符] 编解码器 (input/output,per-stream)
-codec[:流说明符] 编解码器 (input/output,per-stream)

为一个或多个流选择一个编码器(当在输出文件之前使用时)或解码器(当在输入文件之前使用时)。编解码器是一个解码器/编码器的名称或者一个特殊值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 持续时间 (input/output)

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

当作为输出选项(在输出 URL 之前使用),在输出持续时间达到持续时间.

时停止写入。持续时间(ffmpeg-utils)ffmpeg-utils(1) 手册中的时间长度部分.

-to 和 -t 互相排斥,并且 -t 优先。

-to 位置 (input/output)

停止写入输出或读取输入位置位置. 位置必须是一个时间持续时间的规范, 参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分.

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

-fs 文件大小限制 (output)

设置文件大小限制,以字节为单位。一旦超出限制,就不会再写入字节块。输出文件的大小会稍大于请求的文件大小。

-ss 位置 (input/output)

作为输入选项使用时(在-i之前),在此输入文件中跳转至位置。请注意,在大多数格式中不可能精确地跳转,因此ffmpeg将跳转到最接近的位置点之前位置。 在进行转码时,并且-accurate_seek启用时(默认情况下),此段在跳转点和位置之间的额外部分将被解码并丢弃。在进行流复制或当-noaccurate_seek使用时,它将被保留。

作为输出选项使用时(在输出 URL 之前),会解码但丢弃输入,直到时间戳达到位置.

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

-sseof 位置 (input)

类似于-ss选项,但是相对于文件的 “文件末尾”。即负值表示更早的位置,0 表示文件末尾。

-isync 输入索引 (input)

将一个输入指定为同步源。

这将采用目标和参考输入的起始时间之间的差值,并将该差值加到目标文件的时间戳上。两个输入的源时间戳应来自相同的时钟源,以获得预期的结果。如果copyts被设置,则start_at_zero也必须被设置。如果任一输入没有起始时间戳,则不进行同步调整。

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

默认值为-1.

-itsoffset 偏移量 (input)

设置输入时间偏移。

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

偏移量被加到输入文件的时间戳上。指定正偏移意味着相应的流将通过偏移量.

-itsscale 比例 (input,per-stream)

重新缩放输入时间戳。比例应该是一个浮点数。

-timestamp 日期 (output)

在容器中设置录制时间戳。

日期必须是一个日期规范, 参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的日期部分.

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

设置一个元数据键/值对。

可选项元数据说明符可以被用来设置元数据 到流、章节或节目上。参见-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] (output,per-stream)

设置流的处置标志。

默认值:默认情况下,所有处置标志会从输入流复制, 除非此选项所适用的输出流被复杂过滤器图处理 - 在这种情况下默认不设置处置标志。

是由 ‘+’ 或 ‘-’ 分隔的处置标志序列。‘+’ 前缀添加指定的处置,‘-’则移除它。如果第一个标志也 带有 ‘+’ 或 ‘-’ 前缀,结果处置是默认值通过更新而来的。如果第一个标志没有前缀,结果处置是。也可以通过将其设置为 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

为从第一个音频流中添加 ‘原始’ 并移除 ‘注释’ 标志,而不移除 其其他处置标志的方法:

ffmpeg -i in.mkv -c copy -disposition:a:0 +original-comment out.mkv

从第一个音频流中移除 ‘原始’ 标志并添加 ‘注释’ 标志,而不移除 其其他处置标志的方法:

ffmpeg -i in.mkv -c copy -disposition:a:0 -original+comment out.mkv

为仅在第一个音频流上设置 ‘原始’ 和 ‘注释’ 标志(并移除其 其他所有处置标志)的方法:

ffmpeg -i in.mkv -c copy -disposition:a:0 original+comment out.mkv

从第一个音频流中移除所有处置标志的方法:

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

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

-program [title=标题:][program_num=节目编号:]st=[:st=...] (output)

以指定的标题, 节目编号创建一个节目并添加指定的

-stream_group [map=输入文件 ID=流组][type=类型:]st=[:st=][:stg=流组][:id=流组ID...] (output)

创建指定类型的流组类型流组ID,或者通过映射一个输入组,添加指定的和/或之前定义的(s) and/or previously defined 流组到其中。

类型可以是以下之一:

iamf_audio_element

将属于同一个IAMF音频元素的进行分组

对于这个组类型类型,以下选项可用

audio_element_type

音频元素类型。支持以下值:

channel

可扩展信道音频表示

scene

全方向音频表示

demixing

用于重构可扩展信道音频表示的解混信息。 此选项必须用‘,’分隔,包含以下 键=值选项

parameter_id

帧中参数块可能引用的标识符

dmixp_mode

解混参数的预定义组合

recon_gain

用于重构可扩展信道音频表示的恢复增益信息。 此选项必须用‘,’分隔,包含以下 键=值选项

parameter_id

帧中参数块可能引用的标识符

layer

音频元素中定义信道布局的一个层。 此选项必须用‘,’分隔。可以定义多个用‘,’分隔的条目, 且至少需要设置一个。

它包含以下以“:”分隔的键=值选项

ch_layout

该层的信道布局

flags

以下标志可用:

recon_gain

是否标志恢复增益是否作为元数据出现在帧中的参数块中

output_gain
output_gain_flags

哪些信道应用了输出增益。以下标志可用:

FL
FR
BL
BR
TFL
TFR
ambisonics_mode

全向音频模式。如果audio_element_type设置为信道,则此项无效。

支持以下值:

mono

每个全向音频信道作为组中单独的单声流进行编码

default_w

默认权重值

iamf_mix_presentation

将属于同一个IAMF音频元素和同一个IAMF混音演示引用的所有进行分组

对于这个组类型,以下选项可用

submix

混音演示中的一个子混音。 此选项必须用‘,’分隔。可以定义多个用‘,’分隔的条目, 且至少需要设置一个。

它包含以下以“:”分隔的键=值选项

parameter_id

帧中参数块可能引用的标识符,用于对混合音频信号进行后处理以生成用于回放的音频信号

parameter_rate

帧中参数块中参数ID字段的采样率持续时间参数ID

default_mix_gain

默认混合增益值,当没有共享同一参数ID的参数块存在时应用参数ID在给定的帧中

element

引用此混音演示中用于生成最终输出音频信号的音频元素。 此选项必须用‘|’分隔。可以定义多个用‘|’分隔的条目, 且至少需要设置一个。

它包含以下以“:”分隔的键=值选项:

stg

The 音频元素的流组ID此子混音所引用的

parameter_id

帧中参数块可能引用的标识符,用于对引用并渲染的音频元素进行处理,然后 与其他处理过的音频元素相加

parameter_rate

帧中参数块中参数ID字段的采样率持续时间参数ID

default_mix_gain

默认混合增益值,当没有共享同一参数ID的参数块存在时应用参数ID在给定的帧中

annotations

描述子混音元素的键=值字符串,其中“键”是符合BCP-47的字符串, 指定“值”字符串的语言。“键”必须与混音的注释

headphones_rendering_mode

指示在耳机播放时,基于信道的输入音频元素是渲染到立体扬声器还是通过双耳渲染器空间化。 如果引用的音频元素的audio_element_type设置为信道,则此选项无效。

支持以下值:

stereo
binaural
layout

指定对此子混音进行响度测量时使用的布局。 此选项必须用‘|’分隔。可以定义多个用‘|’分隔的条目, 且至少需要设置一个。

它包含以下以“:”分隔的键=值选项:

layout_type
loudspeakers

布局遵循ITU-2051-3的扬声器音响系统惯例。

binaural

布局为双耳。

sound_system

信道布局匹配ITU-2051-3中的A到J声系统,以及7.1.2和3.1.2。 如果布局类型设置为双耳,则此项无效。

integrated_loudness

程序综合响度信息,定义于ITU-1770-4。

digital_peak

音频信号的数字(采样)峰值,定义于ITU-1770-4。

true_peak

音频信号的真实峰值,定义于ITU-1770-4。

dialog_anchored_loudness

对话响度信息,定义于ITU-1770-4。

album_anchored_loudness

专辑响度信息,定义于ITU-1770-4。

annotations

描述混音的键=值字符串,其中“键”是符合BCP-47的字符串, 指定“值”字符串的语言。“键”必须与所有子混音元素的注释相同

例如,从多个WAV输入文件创建一个可扩展的5.1 IAMF文件

ffmpeg -i front.wav -i back.wav -i center.wav -i lfe.wav
-map 0:0 -map 1:0 -map 2:0 -map 3:0 -c:a opus
-stream_group type=iamf_audio_element:id=1:st=0:st=1:st=2:st=3,
demixing=parameter_id=998,
recon_gain=parameter_id=101,
layer=ch_layout=stereo,
layer=ch_layout=5.1(side),
-stream_group type=iamf_mix_presentation:id=2:stg=0:annotations=en-us=Mix_Presentation,
submix=parameter_id=100:parameter_rate=48000|element=stg=0:parameter_id=100:annotations=en-us=Scalable_Submix|layout=sound_system=stereo|layout=sound_system=5.1(side)
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.iamf

将一个带有四个数据流的输入IAMF文件中的两个流组(音频元素和混音演示)复制到一个mp4输出中

ffmpeg -i input.iamf -c:a copy -stream_group map=0=0:st=0:st=1:st=2:st=3 -stream_group map=0=1:stg=0
-streamid 0:0 -streamid 1:1 -streamid 2:2 -streamid 3:3 output.mp4
-target 类型 (output)

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

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

尽管如此,您可以指定其他选项,只要确保它们不会与标准冲突,例如:

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

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

VCD

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

电影:
-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

电影:
-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

电影:
-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

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

目标dv50与目标完全相同dv目标除了像素格式设置为yuv422p针对所有三个标准。

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

-dn (input/output)

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

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

-dframes 数量 (output)

设置要输出的数据帧数。这是-frames:d的废弃别名,建议使用后者。

-frames[:流选择符] 帧计数 (output,per-stream)

写入指定流后停止帧计数数据帧。

-q[:流选择符] 质量 (output,per-stream)
-qscale[:流选择符] 质量 (output,per-stream)

使用固定质量比例(可变比特率)。质量/质量比例的含义取决于具体的编解码器。如果质量比例没有使用流选择符那么它仅适用于视频流,这是为了保持与之前行为的兼容性,因为为两个不同的编解码器(音频和视频)指定同样值通常不是无流选择符时的预期。

-filter[:流选择符] 滤镜图 (output,per-stream)

创建指定的滤镜图滤镜图并使用过滤该流。

滤镜图是要应用于流的滤镜图描述,必须具有与流相同类型的单一输入和单一输出。在滤镜图中,输入与标签in相关联,输出与标签out相关联。具体语法请参阅ffmpeg-filters手册。

参见-filter_complex选项如果需要创建具有多个输入和/或输出的滤镜图。

-reinit_filter[:流选择符] 整数 (input,per-stream)

此布尔选项确定当输入帧参数在流中间发生变化时,向这一流提供的滤镜图是否会被重新初始化。筛选器通常不能处理输入帧属性的变化,因此默认会启用。重新初始化时现有的滤镜状态会丢失,例如某些筛选器中的帧计数引用。重新初始化时任何缓冲帧都会丢失。触发重新初始化的属性变化包括:视频流的分辨率或像素格式;音频流的采样格式、采样率、通道数或通道布局。n reference available in some filters. Any frames buffered at time of reinitialization are lost. The properties where a change triggers reinitialization are, for video, frame resolution or pixel format; for audio, sample format, sample rate, channel count or channel layout.

-drop_changed[:流选择符] 整数 (input,per-stream)

此布尔选项决定在中间出现参数不同的帧时是否丢弃该帧,而不是重新初始化滤镜图,因为那会导致丢失滤镜状态。通常用于避免实时流输入中已损坏但仍可解码的分组。默认值为false。

-filter_threads 线程数 (global)

定义用于处理滤镜管道的线程数。每个管道将生成一个具有这么多线程的线程池以实现并行处理。默认为可用的CPU数量。

-pre[:流选择符] 预设名 (output,per-stream)

为匹配的流指定预设。

-stats (global)

以"info"级日志记录编码进度/统计数据(参见-loglevel)。默认启用,若明确禁用需要指定-nostats.

-stats_period 时间 (global)

设置编码进度/统计数据的更新周期。默认是0.5秒。

-print_graphs (global)

以-print_graphs_format选项设置的格式将执行图细节打印到标准错误。

-print_graphs_file 文件名 (global)

以-print_graphs_format选项设置的格式将执行图细节写入指定文件。

-print_graphs_format 格式 (global)

设置输出格式(可用格式有:default, compact, csv, flat, ini, json, xml, mermaid, mermaidhtml)。默认格式为json。

-progress 网址 (global)

发送程序友好的进度信息到网址.

进度信息会定期写入以及编码过程结束时写入。内容由“=”组成。仅包含字母数字字符。每个进度信息序列的最后一个键总是“progress”,值为“continue”或“end”。

更新周期通过-stats_period.

设置。例如,将进度信息记录到标准输出:

ffmpeg -progress pipe:1 -i in.mkv out.mkv
-stdin

启用标准输入上的交互。默认启用,除非标准输入已被用作输入。若明确禁用交互需指定-nostdin.

关闭标准输入交互是有用的,例如,当ffmpeg在后台进程组运行时。可以通过ffmpeg ... < /dev/null实现类似结果,但需要一个shell。

-debug_ts (global)

打印时间戳/延迟信息。默认关闭,此选项主要用于测试和调试目的,输出格式可能随着版本改变,所以不建议用于便携式脚本。

参见选项-fdebug ts.

-attach 文件名 (output)

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

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

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

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

-dump_attachment[:流选择符] 文件名 (input,per-stream)

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

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

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

要根据filename标签提取所有附件到文件:

ffmpeg -dump_attachment:t "" -i INPUT

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

5.5 视频选项

-vframes 编号 (output)

设置输出的视频帧数。这是的一个已废弃别名,您应该改用-frames:v来代替。

-r[:流说明符] 帧率 (input/output,per-stream)

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

作为输入选项,忽略文件中存储的任何时间戳,而是假设恒定帧率生成时间戳帧率。这与某些输入格式(如image2或v4l2)使用的输入选项并不相同(在FFmpeg的较早版本中它们是相同的)。如果不确定使用-framerate而不是输入选项-framerate-r.

作为输出选项:

video encoding

在编码之前复制或删除帧以实现恒定的输出帧率帧率。.

video streamcopy

指示复用器帧率是流的帧率。在此情况下不会丢失或复制数据。如果帧率不匹配数据包时间戳确定的实际流帧率,这可能会生成无效文件。另请参见setts比特流过滤器。

-fpsmax[:流说明符] 帧率 (output,per-stream)

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

当输出帧率为自动设置且高于该值时,限制输出帧率。在批量处理或输入帧率被错误检测为非常高时很有用。不能与-r一起设置。在流拷贝期间被忽略。

-s[:流说明符] 尺寸 (input/output,per-stream)

设置帧尺寸。

作为输入选项,这是video_size私有选项的快捷方式,该选项被某些解复用器识别。对于未在文件中存储或可配置的帧尺寸,如原始视频或视频抓取器,此选项非常有用。

作为输出选项,这会将scale视频过滤器插入到end对应的过滤器图形中。请直接使用scale过滤器将其插入到开头或其他地方。

格式是‘wxh’(默认 - 与源相同)。

-aspect[:流说明符] 纵横比 (output,per-stream)

设置视频显示的纵横比,由纵横比指定。.

纵横比可以是浮点数字符串,也可以是分子:分母形式的字符串,其中分子分母是纵横比的分子和分母。例如 "4:3"、"16:9"、"1.3333" 和 "1.7777" 是有效的参数值。

如果与-vcodec copy一起使用,它会影响存储在容器级别的纵横比,但不会影响存储在编码帧中的纵横比(如果存在)。

-display_rotation[:流说明符] 旋转 (input,per-stream)

设置视频旋转元数据。

旋转是一个十进制数字,指定视频在显示前逆时针旋转的度数。

该选项会覆盖文件中存储的旋转/显示变换元数据(如果有)。当视频被转码(而不是复制)并且-autorotate已启用时,视频将在过滤阶段进行旋转。否则,如果复用器支持,该元数据将写入输出文件。

如果-display_hflip和/或-display_vflip选项被提供,它们将在此选项指定的旋转之后应用。

-display_hflip[:流说明符] (input,per-stream)

设置显示时是否应水平翻转图像。

有关更多详细信息,请参阅-display_rotation选项。

-display_vflip[:流说明符] (input,per-stream)

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

有关更多详细信息,请参阅-display_rotation选项。

-vn (input/output)

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

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

-vcodec 编解码器 (output)

设置视频编解码器。这是-codec:v.

-pass[:的别名。] n (output,per-stream)

选择通行次序(1或2)。它用于进行两次通行视频编码。在第一通行中,视频的统计信息被记录到日志文件中(另请参见选项-passlogfile),在第二通行中,该日志文件被用于以准确的请求比特率生成视频。在第一个通行中,您可以仅停用音频并将输出设置为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[:流说明符] 前缀 (output,per-stream)

将两次通行的日志文件名前缀设置为前缀,默认文件名前缀为“ffmpeg2pass”。完整文件名将为PREFIX-N.log,其中 N 是特定于输出流的编号。

-vf 过滤器图形 (output)

创建由过滤器图形指定的过滤器图形,并使用它来过滤流。

这是一个-filter:v的别名,请参见-filter 选项。.

-autorotate

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

-autoscale

根据第一帧的分辨率自动缩放视频。默认启用,使用-noautoscale来禁用它。当自动缩放被禁用时,过滤器图的所有输出帧可能分辨率不同,且可能不适合某些编码器/复用器。因此,除非完全了解相关影响,否则不建议禁用自动缩放。 自行禁用自动缩放风险自负。

5.6 高级视频选项

-pix_fmt[:流选择器] 格式 (input/output,per-stream)

设置像素格式。使用-pix_fmts查看所有支持的像素格式。 如果所选的像素格式无法选择,ffmpeg会打印警告并选择编码器支持的最佳像素格式。 如果pix_fmt+前缀开头,ffmpeg会在无法选择请求的像素格式时退出并报错,同时禁用过滤器图内部的自动转换。 如果pix_fmt为单一+,ffmpeg会选择与输入(或图输出)相同的像素格式,并禁用自动转换。

-sws_flags 标志 (input/output)

为libswscale库设置默认标志。这些标志由自动插入的scale过滤器以及简单过滤器图内部的过滤器使用,如果未在过滤器图定义中被覆盖。

请参阅ffmpeg-scaler手册以获取缩放选项列表。

-rc_override[:流选择器] 覆盖 (output,per-stream)

为特定区间设置速率控制覆盖,格式为"int,int,int"列表,用斜线分隔。前两个值是开始和结束帧号,最后一个是正值时表示使用的量化器,负值时表示质量因子。

-vstats

将视频编码统计数据导出到vstats_HHMMSS.log。参见vstats文件格式部分以查看格式描述。

-vstats_file 文件

将视频编码统计数据导出到文件。参见vstats文件格式部分以查看格式描述。

-vstats_version 文件

指定使用的vstats格式版本。默认为2。参见vstats文件格式部分以查看格式描述。

-vtag fourcc/tag (output)

强制视频标签/fourcc。这是-tag:v.

-force_key_frames[:的别名] 时间[,时间...] (output,per-stream)
-force_key_frames[:流选择器] expr:表达式 (output,per-stream)
-force_key_frames[:流选择器] source (output,per-stream)

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

时间[,时间...]

如果参数由时间戳组成,ffmpeg会根据编码器时间基将指定的时间四舍五入到最近的输出时间戳,并在第一个时间戳等于或大于计算后时间戳的帧处强制关键帧。注意,如果编码器时间基过粗,则关键帧可能会强制在时间戳低于指定时间的帧上。 默认的编码器时间基为输出帧率的倒数,但可能通过-enc_time_base.

设置为其他值。chapters[delta]"之一,则它被扩展为文件中所有章节开始时间点的时间,加上delta,以秒为单位表达。 此选项可确保在输出文件中的章节标记或任何指定位置存在一个查找点。

例如,要在5分钟插入一个关键帧,并在每个章节开始时间的0.1秒前插入关键帧:

-force_key_frames 0:05:00,chapters-0.1
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)

从第13秒开始,每次比上一个强制关键帧晚5秒插入一个关键帧:

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

如果参数为source,ffmpeg会在当前编码的帧被其源标记为关键帧时强制插入关键帧。 如果该源帧必须被丢弃,则强制下一个可用帧成为关键帧。

注意,强制插入过多关键帧对某些编码器的预览算法非常有害:使用固定GOP选项或类似方式会更有效率。

-apply_cropping[:流选择器] 来源 (input,per-stream)

根据文件元数据视频解码后自动裁剪。 默认值为all.

none (0)

不应用任何裁剪元数据。

all (1)

同时应用编解码器和容器级别的裁剪。这是默认模式。

codec (2)

应用编解码器级别裁剪。

container (3)

应用容器级别裁剪。

-copyinkf[:流选择器] (output,per-stream)

执行流复制时,也复制开始处发现的非关键帧。

-init_hw_device 类型[=名称][:设备[,key=value...]]

初始化一个类型为type名称为name的新硬件设备,使用指定的设备参数。 如未指定名称,则将获得形式为"type%d"的默认名称。

The meaning of 设备以下参数取决于设备类型:

cuda

设备是CUDA设备的编号。

以下选项被识别:

primary_ctx

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

示例:

-init_hw_device cuda:1

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

-init_hw_device cuda:0,primary_ctx=1

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

dxva2

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

d3d11va

设备是Direct3D 11显示适配器的编号。 如果未指定,它将尝试使用默认的Direct3D 11显示适配器或硬件VendorId由‘vendor_id’.

示例:

-init_hw_device d3d11va

在默认的Direct3D 11显示适配器上创建一个d3d11va设备。

-init_hw_device d3d11va:1

在索引为1的Direct3D 11显示适配器上创建一个d3d11va设备。

-init_hw_device d3d11va:,vendor_id=0x8086

在硬件VendorId为0x8086的第一个Direct3D 11显示适配器上创建一个d3d11va设备。

vaapi

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

以下选项被识别:

kernel_driver

设备未指定时,使用此选项来指定与所需设备相关联的内核驱动程序名称。此选项仅在硬件加速方法drmvaapi启用时可用。

vendor_id

设备内核驱动未指定时,使用此选项来指定与所需设备相关联的供应商ID。此选项仅在硬件加速方法drmvaapi启用且kernel_driver未指定时可用。

示例:

-init_hw_device vaapi

在默认设备上创建一个vaapi设备。

-init_hw_device vaapi:/dev/dri/renderD129

在DRM渲染节点上创建一个vaapi设备/dev/dri/renderD129.

-init_hw_device vaapi:1

在DirectX适配器1上创建一个vaapi设备。

-init_hw_device vaapi:,kernel_driver=i915

在与内核驱动程序‘i915’.

-init_hw_device vaapi:,vendor_id=0x8086

相关联的设备上创建一个vaapi设备。0x8086’.

vdpau

设备是一个X11显示名称。 如果未指定,它将尝试打开默认X11显示($DISPLAY).

qsv

设备选择‘MFX_IMPL_*’中的一个值。允许的值是:

auto
sw
hw
auto_any
hw_any
hw2
hw3
hw4

如果未指定,则使用‘auto_any’。 (请注意,通过创建平台适配的子设备(‘dxva2’或‘d3d11va’或‘vaapi’)然后派生一个QSV设备可能更容易实现所需结果。)

以下选项被识别:

child_device

在Linux上指定一个DRM渲染节点或在Windows上指定一个DirectX适配器。

child_device_type

选择平台适配的子设备类型。在Windows上,‘d3d11va’作为默认子设备类型,当--enable-libvpl在配置时指定,‘dxva2’作为默认子设备类型,当--enable-libmfx在配置时指定。在Linux上,用户只能将‘vaapi’作为子设备类型。

示例:

-init_hw_device qsv:hw,child_device=/dev/dri/renderD129

使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DRM渲染节点/dev/dri/renderD129.

-init_hw_device qsv:hw,child_device=1

使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DirectX适配器1。

-init_hw_device qsv:hw,child_device_type=d3d11va

选择子设备类型为‘d3d11va’并使用‘MFX_IMPL_HARDWARE’.

-init_hw_device qsv:hw,child_device_type=dxva2

选择子设备类型为‘dxva2’并使用‘MFX_IMPL_HARDWARE’.

-init_hw_device qsv:hw,child_device=1,child_device_type=d3d11va

使用‘MFX_IMPL_HARDWARE’创建一个QSV设备,位于DirectX适配器1,子设备类型为‘d3d11va’.

-init_hw_device vaapi=va:/dev/dri/renderD129 -init_hw_device qsv=hw1@va

va上创建一个名为‘/dev/dri/renderD129’的VAAPI设备,然后从设备‘hw1’派生一个名为‘va’.

opencl

设备选择平台和设备,如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

如果设备是整数,它会通过系统依赖设备列表中的索引选择设备。如果设备是其他字符串,它会选择名称中包含该字符串作为子字符串的第一个设备。

以下选项被识别:

debug

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

linear_images

如果设置为1,则由硬件上下文分配的图像将是线性的并且可以本地映射。

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 类型[=名称]@来源

初始化一种新硬件设备类型类型称为名称, 从现有名为的设备派生来源.

-init_hw_device list

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

-filter_hw_device 名称

将名为的硬件设备传递给任何滤镜图表中的所有滤镜。 这可以用于设置要上传到的设备滤镜,或要映射到的设备hwupload滤镜。其他滤镜可能也会 在需要硬件设备时使用此参数。请注意,通常只有当输入不是硬件帧时才需要这样做—— 当输入是硬件帧时,滤镜会根据收到的帧上下文推导它们所需的设备。hwmap filter. Other filters may also make use of this parameter when they require a hardware device. Note that this is typically only required when the input is not already in hardware frames - when it is, filters will derive the device they require from the context of the frames they receive as input.

这是个全局设置,所以所有滤镜都会接收到相同的设备。

-hwaccel[:流指定符] 硬件加速 (input,per-stream)

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

none

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

auto

自动选择硬件加速方法。

vdpau

使用 VDPAU(用于 Unix 的视频解码和呈现 API)硬件加速。

dxva2

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

d3d11va

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

vaapi

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

qsv

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

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

为使其工作,解码器和编码器都必须支持 QSV 加速,并且不得使用滤镜。

videotoolbox

使用 Video Toolbox 硬件加速。

如果选定的硬件加速不可用或不被所选解码器支持,此选项将无效。

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

-hwaccel_device[:流指定符] 硬件加速设备 (input,per-stream)

选择一个设备用于硬件加速。

此选项仅在-hwaccel选项也被指定时有意义。 它可以通过名称引用已创建的设备,也可以模仿-init_hw_device创建新设备, 就像在立即调用-init_hw_device类型:硬件加速设备之前一样。

-hwaccels

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

-fix_sub_duration_heartbeat[:流指定符]

设置一个特定的输出视频流作为心跳流, 用以根据接收到的随机访问包分割并推动当前进行中的字幕。

这降低了尚未接收到结束包或后续字幕的字幕的延迟。 但会出现字幕事件重复的可能性,以涵盖完整的持续时间。因此, 在字幕事件输出时的延时不重要的情况下, 不应使用此选项。

需要-fix_sub_duration为相关的输入字幕流设置。 这需要输入字幕流直接映射到包含心跳流的相同输出。

5.7 音频选项

-aframes 编号 (output)

设置要输出的音频帧数。这是-frames:a的过时别名,建议使用后者。

-ar[:流指定符] 频率 (input/output,per-stream)

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

-aq 质量 (output)

设置音频质量(编解码器特定,可变比特率)。这是 -q:a 的别名。

-ac[:流指定符] 声道 (input/output,per-stream)

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

-an (input/output)

作为输入选项,阻止过滤或自动选择或映射文件中的所有音频流。参见-discard选项单独禁用流。

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

-acodec 编解码器 (input/output)

设置音频编解码器。这是-codec:a.

-sample_fmt[:的别名。] 样本格式 (output,per-stream)

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

-af 滤镜图 (output)

创建由滤镜图指定的滤镜图并用于过滤流。

这是-filter:a的别名,参见-filter 选项.

5.8 高级音频选项

-atag 四字符代码/标记 (output)

强制音频标记/四字符代码。这是-tag:a.

-ch_layout[:的别名。] 布局 (input/output,per-stream)

-channel_layout.

-channel_layout[:的别名。] 设置音频通道布局。输出流的默认布局为输入通道布局。 输入流会覆盖其通道布局。并非所有解码器都会遵守覆盖的通道布局。 此选项还用于设置音频抓取设备和原始解复用器的通道布局, 并映射到对应的解复用器选项。 (input/output,per-stream)

Set the audio channel layout. For output streams it is set by default to the input channel layout. For input streams it overrides the channel layout of the input. Not all decoders respect the overridden channel layout. This option also sets the channel layout for audio grabbing devices and raw demuxers and is mapped to the corresponding demuxer option.

-guess_layout_max 通道数 (input,per-stream)

如果某些输入通道布局未知,则尝试仅在通道数 不超过指定通道数时猜测。比如,值为 2 会让ffmpeg识别 1 个通道为单声道,2 个通道为立体声, 但不会将 6 个通道识别为 5.1 声道。默认值始终尝试猜测。 使用 0 禁用所有猜测。使用-channel_layout选项显式指定输入布局也会禁用猜测。

5.9 字幕选项

-scodec 编解码器 (input/output)

设置字幕编解码器。这是-codec:s.

-sn (input/output)

作为输入选项,阻止过滤或自动选择/映射文件中的所有字幕流。参见-discard选项单独禁用流。

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

5.10 高级字幕选项

-fix_sub_duration

修复字幕持续时间。等待同一字幕流中的下一个包到来, 调整第一个包的持续时间以避免重叠。 对于某些字幕编解码器(尤其是 DVB 字幕)这是必要的, 因为原始包中的持续时间只是粗略估计, 真正的结束是通过一个空字幕帧标记的。 如果在需要时未使用此选项,可能会导致持续时间被夸大或因 时间戳非单调性导致复用失败。

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

-canvas_size 大小

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

5.11 高级选项

-map [-]输入文件标识[:流标识符][:视图标识符][:?] | [链接标签] (output)

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

在第一种形式下,每个来自索引为输入文件标识的输入文件的流都会创建一个输出流。如果指定了流标识符,则仅使用符合此标识符的流(参见流标识符部分的流标识符语法)。

在流标识符之前添加一个-字符表示创建一个“负”映射。它会禁用已经创建映射中匹配的流。

可以在流标识符之后添加一个可选的视图标识符,用于指定多视点视频中需要使用的视图。视图标识符可以有以下格式之一:

view:视图ID

通过其ID选择视图;视图ID可以设置为 'all' 以使用所有视图并将其交错到一个流中;

vidx:视图索引

通过其索引选择视图;例如0为基础视图,1为第一个非基础视图,等等。

vpos:位置

通过显示位置选择视图;位置可以是leftright

对于转码而言,默认只使用基础视图,即等同于vidx:0。对于流复制,不支持视图标识符,且始终会复制所有视图。

在流索引之后添加一个尾部?允许映射为可选:如果映射未匹配到任何流,则会忽略该映射而不是失败。需要注意,若使用了无效的输入文件索引(例如映射引用了不存在的输入),映射仍然会失败。

另一种[链接标签]形式将从复杂的筛选图中映射输出到输出文件(参见-filter_complex选项)。链接标签必须对应于图中定义的输出链接标签。

可以多次指定该选项,每次添加更多流到输出文件。任何给定的输入流也可以作为源流映射多次到不同的输出流,例如,为了使用不同的编码选项和/或滤镜。创建的流会按照-map选项在命令行中的顺序生成在输出中。

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

示例:

map everything

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

ffmpeg -i INPUT -map 0 output
select specific stream

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

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

将第一个输入文件中的第二个输入流映射到INPUT中(单个)输出流。out.wav.

create multiple streams

从输入文件a.mov中选择索引为2的流(由标识符0:2指定),以及从输入b.mov中选择索引为6的流(由标识符1:6指定),并将它们复制到输出文件out.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_metadata[:元数据输出说明] 输入文件[:元数据输入说明] (output,per-metadata)

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

g

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

s[:流说明符]

每条流的元数据。流说明符流标识符章节中描述的流标识符。在输入的元数据说明符中,第一次匹配的流会被复制。在输出的元数据说明符中,所有匹配的流会被复制。

c:章节索引

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

p:节目索引

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

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

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

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

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

反之,将全局元数据复制到所有音频流:

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

请注意,简单形式的0在此示例中也适用,因为默认情况下会假定为全局元数据。

-map_chapters 输入文件索引 (output)

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

-benchmark (global)

在编码结束时显示基准信息。 显示使用的真实时间、系统时间和用户时间,以及最大内存消耗。 并非所有系统都支持最大内存消耗,通常在不支持时显示为0。

-benchmark_all (global)

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

-timelimit 持续时间 (global)

在 ffmpeg 运行持续时间秒后退出。

-dump (global)

将每个输入数据包转储到标准错误。

-hex (global)

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

-readrate 速度 (input)

限制输入读取速度。

其值为正浮点数,表示在一秒钟的墙钟时间内最多应摄取的媒体持续时间(以秒为单位)。 默认值为零,表示没有施加输入速度的限制。 值1表示实时速度等同于-re.

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

对于输出数据包流速重要的情况(例如实时流),这很有用。

-re (input)

以原生帧速率读取输入。这等同于设置-readrate 1.

-readrate_initial_burst

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

-readrate_catchup 速度 (input)

如果输入或输出被阻塞导致实际读取速度落后于指定的读取速率,那么此速率将生效,直到输入赶上指定的读取速率。 必须不低于主读取速率。

-vsync 参数 (global)
-fps_mode[:流指定] 参数 (output,per-stream)

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

出于兼容性原因,某些 vsync 的值可以指定为数字(以下表中的括号)。

passthrough (0)

每帧都有其时间戳从解复用器传递给复用器。

cfr (1)

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

vfr (2)

帧将根据时间戳直接传递或被丢弃,以防止两个帧有相同时间戳。

auto (-1)

根据复用器能力在 cfr 和 vfr 之间选择。默认方法。

请注意,时间戳可能会在复用器之后进一步修改。例如,在格式选项avoid_negative_ts启用的情况下。

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

-frame_drop_threshold 参数

帧丢弃阈值,指定视频帧可落后多少后丢弃。以帧速率单位表示,因此1.0表示一帧。 默认值为-1.1。 一个可能的用途是在时间戳有噪声时避免丢帧,或者在时间戳精确时提高帧丢弃精度。

-apad 参数 (output,per-stream)

填充输出音频流。这与应用-af apad相同。 参数为过滤器参数的字符串,组成方式与apad过滤器相同。-shortest必须为此输出设置,以使选项生效。

-copyts

不处理输入时间戳,但保留其值而不尝试进行清理。 特别是,不移除初始开始时间偏移值。

请注意,根据vsync选项或特定复用器处理(例如如果格式选项avoid_negative_ts启用)即使选择此选项,输入时间戳和输出时间戳可能不匹配。

-start_at_zero

copyts一起使用时,将输入时间戳移位,使其从零开始。

这意味着使用例如-ss 50会使输出时间戳从50秒开始,而不考虑输入文件从哪个时间戳开始。

-copytb 模式

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

1

使用解复用器时间基。

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

0

使用解码器时间基。

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

-1

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

默认值为-1。

-enc_time_base[:流指定] 时间基 (output,per-stream)

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

0

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

对于视频 - 使用 1/framerate,对于音频 - 使用 1/samplerate。

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 持续时间 (output)

The -shortest选项可能需要缓冲大量数据,当其中至少有一个流是"稀疏"时(即帧之间间隔较大——字幕通常如此)。

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

默认值为10秒。

-dts_delta_threshold 阈值

时间戳不连续性 delta 阈值,以秒的小数表示。

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

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

默认值为10。

-dts_error_threshold 阈值

时间戳错误 delta 阈值,以秒的小数表示。

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

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

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

-muxdelay (output)

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

-muxpreload (output)

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

-streamid 输出流索引:新值 (output)

为输出流分配一个新的流 ID 值。此选项应在适用的输出文件名前指定。如果存在多个输出文件的情况,可以将流 ID 重新分配为不同的值。

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

ffmpeg -i inurl -streamid 0:33 -streamid 1:36 out.ts
-bsf[:流指定符] 码流过滤器 (input/output,per-stream)

将码流过滤器应用于匹配的流。当作为输入选项使用时,过滤器应用于从解复用器接收的每个包;当作为输出选项使用时,过滤器应用于发送到复用器之前的每个包。

码流过滤器是一个用逗号分隔的码流过滤器规范列表,每个形式为

过滤器[=选项名0=选项值0:选项名1=选项值1:...]

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

使用-bsfs选项来获取码流过滤器的列表。

例如

ffmpeg -bsf:v h264_mp4toannexb -i h264.mp4 -c:v copy -an out.h264

应用了h264_mp4toannexb码流过滤器(将封装在 MP4 中的 H.264 转换为 Annex B)到input视频流。

另一方面,

ffmpeg -i file.mov -an -vn -bsf:s mov2textsub -c:s copy -f rawvideo sub.txt

应用了mov2textsub码流过滤器(从 MOV 字幕中提取文本)到output字幕流。然而请注意,由于这两个示例使用了-c copy,在输入或输出上是否应用过滤器影响不大 - 只有在进行转码时情况才会改变。

-tag[:流指定符] 编解码标签 (input/output,per-stream)

强制为匹配的流设置标签/fourcc。

-timecode 小时:分钟:SEP

指定写入的时间码。分隔符对于非丢帧时间码为‘:’,对于丢帧时间码为‘;’(或‘.’)。

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

定义一个复杂的过滤器图,即具有任意数量的输入和/或输出的图。对于简单图 - 即类型相同的一个输入和一个输出,请参见-filter选项。过滤器图是过滤器图的描述,如 ffmpeg-filters 手册中的“过滤器图语法”部分所述。此选项可以多次指定 - 每次使用都会创建一个新的复杂过滤器图。

复杂过滤器图的输入可以来自不同的来源类型,通过相应链接标签的格式区分:

  • 要连接输入流,请使用[file_index:stream_specifier](即与-map具有相同的语法)。如果流指定符匹配多个流,将使用第一个流。对于多视图视频,流指定符之后可以跟随视图指定符,请参阅-map选项的文档了解其语法。
  • 要连接循环解码器,请使用 [dec:解码器索引],其中解码器索引是要连接到给定输入的循环解码器的索引。对于多视图视频,解码器索引之后可以跟随视图指定符,请参阅-map选项的文档了解其语法。
  • 要连接另一个复杂过滤器图的输出,请使用其链接标签。例如以下示例:
    ffmpeg -i input.mkv \
      -filter_complex '[0:v]scale=size=hd1080,split=outputs=2[for_enc][orig_scaled]' \
      -c:v libx264 -map '[for_enc]' output.mkv \
      -dec 0:0 \
      -filter_complex '[dec:0][orig_scaled]hstack[stacked]' \
      -map '[stacked]' -c:v ffv1 comparison.mkv
    

    读取输入视频并

    • (第2行)使用一个具有一个输入和两个输出的复杂过滤器图将视频缩放到1920x1080并将结果复制到两个输出;
    • (第3行)使用libx264对一个缩放后的输出进行编码,并将结果写入output.mkv;
    • (第4行)使用循环解码器解码此编码流;
    • (第5行)将循环解码器的输出(即libx264编码的视频)与缩放后的原始输入并排放置;
    • (第6行)组合的视频随后进行无损编码并写入comparison.mkv.

    请注意,这两个过滤器图不能合并为一个,因为在转码管道中会形成一个循环(过滤器图输出进入编码,从编码到解码,然后返回到相同的图),而不允许这样的循环。

未标记的输入将连接到匹配类型的第一个未使用输入流。

可使用-map引用输出链接标签。未标记的输出将添加到第一个输出文件。

请注意,使用此选项可以只使用 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 线程数量 (global)

定义用于处理 filter_complex 图的线程数。类似于 filter_threads,但仅用于-filter_complex图。默认值为可用的 CPU 数量。

-lavfi 过滤器图 (global)

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

-accurate_seek (input)

此选项启用或禁用使用-ss选项进行准确的输入文件寻址。默认情况下启用,因此在转码时寻址是准确的。使用-noaccurate_seek将其禁用,这可能在某些流为复制且其他流为转码时很有用。

-seek_timestamp (input)

此选项启用或禁用使用-ss选项按时间戳进行输入文件寻址。默认情况下禁用。如果启用,则-ss选项的参数将被视为实际时间戳,并且不会以文件的开始时间为偏移。这仅对不以时间戳0开始的文件(如传输流)有意义。

-thread_queue_size 大小 (input/output)

对于输入,此选项设置从文件或设备读取时的最大排队包数量。对于低延迟/高速率直播流,如果未及时读取包,则可能会丢弃包;设置该值可以强制 ffmpeg 使用单独的输入线程并在包到达时立即读取包。默认情况下,ffmpeg 仅在指定多个输入时这样做。

对于输出,此选项指定可排队到每个复用线程的最大包数。

-sdp_file 文件 (global)

将输出流的 sdp 信息打印到文件这允许在至少一个输出不是rtp流时转储SDP信息。(需要输出格式中至少有一个是rtp)

-discard (input)

允许丢弃指定的流或流中的帧。 任何输入流都可以完全丢弃,使用值all而从流中选择性地丢弃帧发生在解复用器上, 并且并非所有解复用器都支持此功能。

none

不丢弃任何帧。

default

默认值,不丢弃任何帧。

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

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

all

丢弃所有帧。

-abort_on 标志 (global)

在多种情况下停止并中止。有以下可用标志:

empty_output

没有数据包传递给复用器,输出为空。

empty_output_stream

在一些输出流中没有数据包传递给复用器。

-max_error_rate (global)

设置跨所有输入的解码帧失败的比例阈值,一旦超出,ffmpeg将返回退出代码69。达到此阈值不会终止处理。范围是介于0到1之间的浮点数。默认值为2/3。

-xerror (global)

在发生错误时停止并退出

-max_muxing_queue_size 数据包 (output,per-stream)

在转码音频或视频流时,ffmpeg不会开始写入输出,直到每个这样的流都有一个数据包。在等待发生这种情况时,其它流的数据包会被缓冲。此选项设置与匹配输出流相关的此缓冲区大小(单位为数据包数)。

此选项的默认值应足够高,以满足大多数使用场景,因此只有在确定需要时才修改该选项。

-muxing_queue_data_threshold 字节 (output,per-stream)

这是一个最低阈值,在此之前复用队列大小不会被考虑。每个流默认为50兆字节,并以传递给复用器的数据包的总大小为基础。

-auto_conversion_filters (global)

启用在所有过滤器图形中自动插入格式转换过滤器,包括由-vf, -af, -filter_complex-lavfi定义的过滤器图形。当过滤器格式协商需要转换时,过滤器初始化将失败。转换仍可以通过在图形中插入相关的转换过滤器(如scale,aresample)来实现。默认启用,如需显式禁用,需要指定-noauto_conversion_filters.

-bits_per_raw_sample[:流说明符] (output,per-stream)

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

-stats_enc_pre[:流说明符] 路径 (output,per-stream)
-stats_enc_post[:流说明符] 路径 (output,per-stream)
-stats_mux_pre[:流说明符] 路径 (output,per-stream)

将匹配流的每帧编码信息写入由路径.

-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[:流说明符] 格式说明 (output,per-stream)
-stats_enc_post_fmt[:流说明符] 格式说明 (output,per-stream)
-stats_mux_pre_fmt[:流说明符] 格式说明 (output,per-stream)

指定通过-stats_enc_pre / -stats_enc_post / -stats_mux_pre.

格式说明写入的行的格式。它是一个字符串,可以包含形式为{fmt}. 的指令。是反斜杠转义的 — 使用 \{, \}, 和 \\ 来分别向输出中写入字面量 {, } 或 \。

通过格式给出的指令可以是以下之一:

fidx

输出文件的索引。

sidx

文件中输出流的索引。

n

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

ni

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

tb

此帧/数据包的时间戳表述的时间基,格式为有理数num/den。请注意,编码器和复用器可能使用不同的时间基。

tbi

Timebase for 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。

key (packet)

如果数据包包含关键帧,则为字符“K”,否则为字符“N”。

带有packet标签的指令只能用于-stats_enc_post_fmt-stats_mux_pre_fmt.

带有标签的指令frame只能用于-stats_enc_pre_fmt.

带有标签的指令audio只能用于音频流。

默认的格式字符串是:

pre-encoding

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

post-encoding

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

将来,默认格式字符串的末尾可能会添加新项。依赖格式严格保持不变的用户应手动设置格式。

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

5.12 预设文件

一个预设文件包含一系列选项=对,每行一个,指定了一系列在命令行上指定起来比较麻烦的选项。以井号(‘#’)字符开头的行会被忽略,并用于提供注释。请查看presetsFFmpeg 源代码树中的目录获取示例。

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

5.12.1 ffpreset 文件

ffpreset 文件通过vpre, apre, sprefpre选项指定。fpre选项以预设名称作为输入,而不是预设文件名,并且可用于任何类型的编解码器。对于vpre, aprespre选项,预设文件中指定的选项会应用于与预设选项同类型的当前选定编解码器。

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

首先,ffmpeg 会在目录下搜索名为arg.ffpreset 的文件,包括$FFMPEG_DATADIR(如果设置了),以及$HOME/.ffmpeg和在配置时定义的数据目录(通常为PREFIX/share/ffmpeg)或在 win32 上可执行文件旁边的ffpresets文件夹,比如说,如果参数为libvpx-1080p,它会搜索文件libvpx-1080p.ffpreset.

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

5.12.2 avpreset 文件

avpreset 文件通过pre选项指定。它们与 ffpreset 文件类似,但仅允许特定于编码器的选项。因此,选项=对不能指定编码器。

当使用pre选项时,ffmpeg 将按照以下顺序查找后缀为 .avpreset 的文件:$AVCONV_DATADIR如果设置了)和$HOME/.avconv以及在配置时定义的数据目录(通常为PREFIX/share/ffmpeg)。

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

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

5.13 vstats 文件格式

选项-vstats-vstats_file选项启用生成包含有关生成的视频输出的统计信息的文件。

选项控制生成文件的格式版本。-vstats_version option controls the format version of the generated file.

对于版本1格式是:

frame=  q= 帧质量 PSNR= 峰值信噪比 f_size= 帧大小 s_size= 流大小kB time= 时间戳 br= 比特率kbits/s avg_br= 平均比特率kbits/s

对于版本2格式是:

out= 输出文件索引 st= 输出流索引 frame= 帧编号 q= 帧质量f PSNR= 峰值信噪比 f_size= 帧大小 s_size= 流大小kB time= 时间戳 br= 比特率kbits/s avg_br= 平均比特率kbits/s

每个键对应的值描述如下:

avg_br

平均比特率,以 Kbits/s 表示

br

比特率,以 Kbits/s 表示

frame

编码帧的数量

out

输出文件索引

PSNR

峰值信噪比

q

帧的质量

f_size

以字节数表示的编码分组大小

s_size

以KiB表示的流大小

st

输出文件流索引

time

数据包的时间

type

图片类型

另请参见-stats_enc选项提供一种显示编码统计信息的替代方法。

6 实例

6.1 视频和音频抓取

如果你指定输入格式和设备,那么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

请注意,在启动带有任何电视查看器的ffmpeg之前,如xawtv(由Gerd Knorr编写),你必须激活正确的视频源和通道。你还需要用标准音量调节器正确设置音频录制电平。

6.2 X11抓取

通过ffmpeg抓取X11显示器

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

0.0是X11服务器的显示器.屏幕编号,与DISPLAY环境变量相同。

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

0.0是X11服务器的显示器.屏幕编号,与DISPLAY环境变量相同。10是抓取的x偏移量,20是y偏移量。

6.3 视频和音频文件格式转换

任意受支持的文件格式和协议都可以作为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文件的两倍。它们是无头的原始文件。所有合适的视频解码器都可以生成这些文件。如果ffmpeg无法猜测,你必须通过-s选项指定图像大小。

  • 你可以从一个原始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
    

    将a.wav转换为22050Hz采样率的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编码的,你需要通过以下命令启用LAME支持--enable-libmp3lame来配置。 映射对DVD转码特别有用,可以获得所需的音频语言。

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

  • 你可以从视频中提取图像,或者通过许多图像创建一个视频:

    从视频中提取图像:

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

    这将从视频中每秒提取一帧并将其输出为命名为foo-001.jpeg, foo-002.jpeg等的文件。图像将重新调整大小以适应新的WxH值。

    如果你只想提取有限数量的帧,可以将上述命令与-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的通配模式(globbing)。

    例如,通过匹配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 引用和转义

除非特别指定,FFmpeg采用以下引用和转义机制。这些规则适用:

  • '’和‘\’是特殊字符(分别用于引用和转义)。除此之外,根据使用转义和引用的具体语法,可能还有其他特殊字符。
  • 通过在特殊字符前加‘\’.
  • 所有包含在‘''’之间的字符都会字面地包含在解析的字符串中。引用字符‘'’本身不能被引用,因此可能需要关闭引号并转义它。
  • 除非转义或引用,解析字符串的前导和尾随空白都会被移除。

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

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

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

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 日期

接受的语法是:

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

如果值是"now",它将采用当前时间。

时间为本地时间,除非追加Z,此时它将被解释为UTC。 如果未指定年月日部分,它将采用当前年月日。

7.3 时间持续

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

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

HH表示小时数,MM表示最多2位数字的分钟数,SS表示最多2位数字的秒数。在最后表示十进制值.

or

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

表示秒数,可包含可选的小数部分。 可选的文字后缀‘s’, ‘ms’或‘us’表示将值解释为秒、毫秒或微秒。

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

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 视频大小

指定源视频的大小,可以是形式为宽度x高度,或大小缩写的名称。

可以识别以下缩写:

ntsc

720x480

pal

720x576

qntsc

352x240

qpal

352x288

sntsc

640x480

spal

768x576

film

352x240

ntsc-film

352x240

sqcif

128x96

qcif

176x144

cif

352x288

4cif

704x576

16cif

1408x1152

qqvga

160x120

qvga

320x240

vga

640x480

svga

800x600

xga

1024x768

uxga

1600x1200

qxga

2048x1536

sxga

1280x1024

qsxga

2560x2048

hsxga

5120x4096

wvga

852x480

wxga

1366x768

wsxga

1600x1024

wuxga

1920x1200

woxga

2560x1600

wqsxga

3200x2048

wquxga

3840x2400

whsxga

6400x4096

whuxga

7680x4800

cga

320x200

ega

640x350

hd480

852x480

hd720

1280x720

hd1080

1920x1080

2k

2048x1080

2kflat

1998x1080

2kscope

2048x858

4k

4096x2160

4kflat

3996x2160

4kscope

4096x1716

nhd

640x360

hqvga

240x160

wqvga

400x240

fwqvga

432x240

hvga

480x320

qhd

960x540

2kdci

2048x1080

4kdci

4096x2160

uhd2160

3840x2160

uhd4320

7680x4320

7.5 视频帧率

指定视频的帧率,以每秒生成的帧数表示。必须是以下格式的字符串帧率分子/帧率分母,一个整数值,一个浮点数或一个有效的视频帧率缩写。

可以识别以下缩写:

ntsc

30000/1001

pal

25/1

qntsc

30000/1001

qpal

25/1

sntsc

30000/1001

spal

25/1

film

24/1

ntsc-film

24000/1001

7.6 比率

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

请注意,无穷大(1/0)或负值的比率被认为是有效的,因此如果要排除这些值,需要对返回值进行检查。

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

7.7 颜色

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

alpha分量可以是"0x"开头加一个十六进制数字的字符串或范围在0.0到1.0之间的十进制数字,表示透明度值(‘0x00’或‘0.0’表示完全透明,‘0xff’或‘1.0’ 完全不透明)。如果未指定 alpha 组件,则默认为 ‘0xff’。

字符串 ‘random’ 将生成一个随机颜色。

以下颜色名称是已被识别的:

AliceBlue

0xF0F8FF

AntiqueWhite

0xFAEBD7

Aqua

0x00FFFF

Aquamarine

0x7FFFD4

Azure

0xF0FFFF

Beige

0xF5F5DC

Bisque

0xFFE4C4

Black

0x000000

BlanchedAlmond

0xFFEBCD

Blue

0x0000FF

BlueViolet

0x8A2BE2

Brown

0xA52A2A

BurlyWood

0xDEB887

CadetBlue

0x5F9EA0

Chartreuse

0x7FFF00

Chocolate

0xD2691E

Coral

0xFF7F50

CornflowerBlue

0x6495ED

Cornsilk

0xFFF8DC

Crimson

0xDC143C

Cyan

0x00FFFF

DarkBlue

0x00008B

DarkCyan

0x008B8B

DarkGoldenRod

0xB8860B

DarkGray

0xA9A9A9

DarkGreen

0x006400

DarkKhaki

0xBDB76B

DarkMagenta

0x8B008B

DarkOliveGreen

0x556B2F

Darkorange

0xFF8C00

DarkOrchid

0x9932CC

DarkRed

0x8B0000

DarkSalmon

0xE9967A

DarkSeaGreen

0x8FBC8F

DarkSlateBlue

0x483D8B

DarkSlateGray

0x2F4F4F

DarkTurquoise

0x00CED1

DarkViolet

0x9400D3

DeepPink

0xFF1493

DeepSkyBlue

0x00BFFF

DimGray

0x696969

DodgerBlue

0x1E90FF

FireBrick

0xB22222

FloralWhite

0xFFFAF0

ForestGreen

0x228B22

Fuchsia

0xFF00FF

Gainsboro

0xDCDCDC

GhostWhite

0xF8F8FF

Gold

0xFFD700

GoldenRod

0xDAA520

Gray

0x808080

Green

0x008000

GreenYellow

0xADFF2F

HoneyDew

0xF0FFF0

HotPink

0xFF69B4

IndianRed

0xCD5C5C

Indigo

0x4B0082

Ivory

0xFFFFF0

Khaki

0xF0E68C

Lavender

0xE6E6FA

LavenderBlush

0xFFF0F5

LawnGreen

0x7CFC00

LemonChiffon

0xFFFACD

LightBlue

0xADD8E6

LightCoral

0xF08080

LightCyan

0xE0FFFF

LightGoldenRodYellow

0xFAFAD2

LightGreen

0x90EE90

LightGrey

0xD3D3D3

LightPink

0xFFB6C1

LightSalmon

0xFFA07A

LightSeaGreen

0x20B2AA

LightSkyBlue

0x87CEFA

LightSlateGray

0x778899

LightSteelBlue

0xB0C4DE

LightYellow

0xFFFFE0

Lime

0x00FF00

LimeGreen

0x32CD32

Linen

0xFAF0E6

Magenta

0xFF00FF

Maroon

0x800000

MediumAquaMarine

0x66CDAA

MediumBlue

0x0000CD

MediumOrchid

0xBA55D3

MediumPurple

0x9370D8

MediumSeaGreen

0x3CB371

MediumSlateBlue

0x7B68EE

MediumSpringGreen

0x00FA9A

MediumTurquoise

0x48D1CC

MediumVioletRed

0xC71585

MidnightBlue

0x191970

MintCream

0xF5FFFA

MistyRose

0xFFE4E1

Moccasin

0xFFE4B5

NavajoWhite

0xFFDEAD

Navy

0x000080

OldLace

0xFDF5E6

Olive

0x808000

OliveDrab

0x6B8E23

Orange

0xFFA500

OrangeRed

0xFF4500

Orchid

0xDA70D6

PaleGoldenRod

0xEEE8AA

PaleGreen

0x98FB98

PaleTurquoise

0xAFEEEE

PaleVioletRed

0xD87093

PapayaWhip

0xFFEFD5

PeachPuff

0xFFDAB9

Peru

0xCD853F

Pink

0xFFC0CB

Plum

0xDDA0DD

PowderBlue

0xB0E0E6

Purple

0x800080

Red

0xFF0000

RosyBrown

0xBC8F8F

RoyalBlue

0x4169E1

SaddleBrown

0x8B4513

Salmon

0xFA8072

SandyBrown

0xF4A460

SeaGreen

0x2E8B57

SeaShell

0xFFF5EE

Sienna

0xA0522D

Silver

0xC0C0C0

SkyBlue

0x87CEEB

SlateBlue

0x6A5ACD

SlateGray

0x708090

Snow

0xFFFAFA

SpringGreen

0x00FF7F

SteelBlue

0x4682B4

Tan

0xD2B48C

Teal

0x008080

Thistle

0xD8BFD8

Tomato

0xFF6347

Turquoise

0x40E0D0

Violet

0xEE82EE

Wheat

0xF5DEB3

White

0xFFFFFF

WhiteSmoke

0xF5F5F5

Yellow

0xFFFF00

YellowGreen

0x9ACD32

7.8 通道布局

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

各个通道通过标识符来识别,具体如以下表格所示:

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

前置中央声道

stereo

前置左+前置右

2.1

前置左+前置右+低频

3.0

前置左+前置右+前置中央

3.0(back)

前置左+前置右+后置中央

4.0

前置左+前置右+前置中央+后置中央

quad

前置左+前置右+后置左+后置右

quad(side)

前置左+前置右+侧左+侧右

3.1

前置左+前置右+前置中央+低频

5.0

前置左+前置右+前置中央+后置左+后置右

5.0(side)

前置左+前置右+前置中央+侧左+侧右

4.1

前置左+前置右+前置中央+低频+后置中央

5.1

前置左+前置右+前置中央+低频+后置左+后置右

5.1(side)

前置左+前置右+前置中央+低频+侧左+侧右

6.0

前置左+前置右+前置中央+后置中央+侧左+侧右

6.0(front)

前置左+前置右+前置左中+前置右中+侧左+侧右

3.1.2

前置左+前置右+前置中央+低频+顶部前左+顶部前右

hexagonal

前置左+前置右+前置中央+后置左+后置右+后置中央

6.1

前置左+前置右+前置中央+低频+后置中央+侧左+侧右

6.1

前置左+前置右+前置中央+低频+后置左+后置右+后置中央

6.1(front)

前置左+前置右+低频+前置左中+前置右中+侧左+侧右

7.0

前置左+前置右+前置中央+后置左+后置右+侧左+侧右

7.0(front)

前置左+前置右+前置中央+前置左中+前置右中+侧左+侧右

7.1

前置左+前置右+前置中央+低频+后置左+后置右+侧左+侧右

7.1(wide)

前置左+前置右+前置中央+低频+后置左+后置右+前置左中+前置右中

7.1(wide-side)

前置左+前置右+前置中央+低频+前置左中+前置右中+侧左+侧右

5.1.2

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

octagonal

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

cube

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

5.1.4

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

7.1.2

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

7.1.4

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

7.2.3

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

9.1.4

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

9.1.6

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

hexadecagonal

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

binaural

BIL+BIR

downmix

DL+DR

22.2

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

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

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

一个标准通道布局可以通过以下来指定:

  • 单个通道的名称(例如‘FL’, ‘FR’, ‘FC’, ‘LFE’,等等)
  • 标准通道布局的名称(例如‘mono’, ‘stereo’, ‘4.0’, ‘quad’, ‘5.0’,等等)
  • 一个以十进制表示的通道数,后跟‘c’,生成默认的通道布局,通道数的默认布局请参阅函数av_channel_layout_default)。请注意,并非所有的通道数量都有默认布局。
  • 一个以十进制表示的通道数,后跟‘C’,生成一个具有指定通道数量的未知通道布局。请注意,并非所有通道布局指定字符串支持未知通道布局。
  • 以十六进制开头的通道布局掩码,比如"0x"(参见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.

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

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

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

以下函数可用:

abs(x)

计算x.

acos(x)

计算x.

asin(x)

计算x.

atan(x)

计算x.

atan2(y, x)

计算x/y.

between(x, min, max)

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

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

执行对xy.

通过评估xy的值转换为整数后执行位操作。

注意,将值转换为整数和转换回浮点数可能会丢失精度。对于大数(通常为2^53及更大)可能产生意外结果。

ceil(expr)

向上舍入表达式expr的值到最近的整数。例如,"ceil(1.5)"等于"2.0"。

clip(x, min, max)

返回x的值,并将其剪裁在minmax.

cos(x)

计算x.

cosh(x)

计算x.

eq(x, y)

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

exp(x)

计算x(带有底数e, 欧拉常数e)。

floor(expr)

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

gauss(x)

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

gcd(x, y)

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

gt(x, y)

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

gte(x, y)

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

hypot(x, y)

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

if(x, y)

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

if(x, y, z)

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

ifnot(x, y)

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

ifnot(x, y, z)

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

isinf(x)

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

isnan(x)

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

ld(idx)

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

lerp(x, y, z)

返回在xy之间按比例z.

log(x)

计算x.

lt(x, y)

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

lte(x, y)

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

max(x, y)

返回xy.

min(x, y)

之间的最小值。xy.

mod(x, y)

计算除法的余数x除以y.

not(expr)

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

pow(x, y)

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

print(t)
print(t, l)

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

random(idx)

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

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

的内部变量中。例如,要在索引中存储种子值42并打印一些随机值:0 and print a few random values:

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

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

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

root(expr, max)

找到一个输入值使得由表达式expr表示的函数在参数ld(0)的值为0的区间0..max.

中的值。expr中的表达式必须表示一个连续函数,否则结果是不确定的。

ld(0)用于表示函数的输入值,这意味着给定的表达式将会多次以不同输入值进行评估,表达式可以通过ld(0)访问这些输入值。当表达式评估结果为0时,将返回相应的输入值。

round(expr)

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

sgn(x)

计算x.

sin(x)

计算x.

sinh(x)

计算x.

sqrt(expr)

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

squish(x)

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

st(idx, expr)

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

存储的值可以用ld(var).

来检索。

tan(x)

计算x.

tanh(x)

计算双曲正切x.

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

x处评估泰勒级数,给定的表达式表示ld(idx)阶导数在0处的值。

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

ld(idx)用于表示expr中的导数阶次,这意味着给定的表达式将会多次以不同输入值进行评估,表达式可以通过ld(idx)访问这些输入值。如果idx未指定,则默认为0。

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

time(0)

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

trunc(expr)

将表达式的值expr向零方向截取到最近的整数。例如,“trunc(-1.5)”是“-1.0”。

while(cond, expr)

当表达式expr在表达式cond不为零时计算,并返回最后一次expr计算的值,如果cond一直为假。

以下常量可用:

PI

单位圆的面积,约为 3.14

E

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

PHI

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

假设表达式被认为是“真”的条件是其具有非零值,请注意:

*类似于 AND

+类似于 OR

例如,以下构造:

if (A AND B) then C

等价于:

if(A*B, C)

在您的 C 代码中,您可以扩展一元和二元函数的列表,并定义可识别的常量,以便它们可以用于您的表达式。

计算器还识别国际单位系统的前缀。如果前缀后面附加'i',则使用二进制前缀,这些前缀是基于 1024 的幂而不是 1000 的幂。 后缀 'B' 会将值乘以 8,并可以附加在单位前缀后或单独使用。这允许例如使用 'KB'、'MiB'、'G' 和 'B' 作为数字后缀。

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

y

10^-24 / 2^-80

z

10^-21 / 2^-70

a

10^-18 / 2^-60

f

10^-15 / 2^-50

p

10^-12 / 2^-40

n

10^-9 / 2^-30

u

10^-6 / 2^-20

m

10^-3 / 2^-10

c

10^-2

d

10^-1

h

10^2

k

10^3 / 2^10

K

10^3 / 2^10

M

10^6 / 2^20

G

10^9 / 2^30

T

10^12 / 2^40

P

10^15 / 2^50

E

10^18 / 2^60

Z

10^21 / 2^70

Y

10^24 / 2^80

9 编解码器选项

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

有时候,全局选项可能只影响特定种类的编解码器,并且在其他编解码器中可能没有意义或被忽略,因此您需要了解所指定选项的意义。另外,一些选项仅适用于解码或编码。

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

以下是支持的选项列表:

b 整数 (encoding,audio,video)

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

ab 整数 (encoding,audio)

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

bt 整数 (encoding,video)

设置视频比特率容忍度(单位:比特/秒)。在单通模式下,比特率容忍度指定速率控制可能偏离目标平均比特率值的程度。这与最低/最高比特率无关。过度降低容忍度会对质量产生不良影响。

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

设置通用标志。

可能的值:

mv4

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

qpel

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

loop

使用环状滤波器。

qscale

使用固定量化比例。

pass1

在第一次传递模式中使用内部两次速率控制。

pass2

在第二次传递模式中使用内部两次速率控制。

gray

仅解码/编码灰度。

psnr

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

truncated

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

drop_changed

不输出参数与流中首次解码帧不同的帧。 当帧被丢弃时返回错误 AVERROR_INPUT_CHANGED。

ildct

使用交错离散余弦变换(DCT)。

low_delay

强制低延迟。

global_header

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

bitexact

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

aic

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

ilme

应用交错运动估计。

cgop

使用封闭 GOP(组图片)。

output_corrupt

输出甚至可能损坏的帧。

time_base 有理数

设置编解码器时间基。

这是时间的基本单位(秒),以其表示帧时间戳。 对于固定帧率内容,时间基应该是1 / frame_rate并且时间戳增量应完全为 1。

g 整数 (encoding,video)

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

ar 整数 (decoding/encoding,audio)

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

ac 整数 (decoding/encoding,audio)

设置音频通道数。

cutoff 整数 (encoding,audio)

设置截止带宽。(仅支持特定编码器,请参阅其相应的文档部分。)

frame_size 整数 (encoding,audio)

设置音频帧大小。

除最后一个提交的帧外,每个帧必须包含确切的帧大小,每个通道采样数。 当编解码器设置了 CODEC_CAP_VARIABLE_FRAME_SIZE 时可以为 0,此时帧大小没有限制。 某些解码器会设置帧大小表明固定的帧大小。

frame_number 整数

设置帧编号。

delay 整数
qcomp 浮点数 (encoding,video)

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

qblur 浮点数 (encoding,video)

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

qmin 整数 (encoding,video)

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

qmax 整数 (encoding,video)

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

qdiff 整数 (encoding,video)

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

bf 整数 (encoding,video)

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

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

默认值为 0。

b_qfactor 浮点数 (encoding,video)

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

codec_tag 整数
bug 标志 (decoding,video)

工作时避免自动检测到的编码器缺陷。

可能的值:

autodetect
xvid_ilace

Xvid 交错问题(当 fourcc==XVIX 时自动检测)

ump4

(当 fourcc==UMP4 时自动检测)

no_padding

填充问题(自动检测)

amv
qpel_chroma
std_qpel

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

qpel_chroma2
direct_blocksize

直接 qpel 块大小问题(根据 fourcc/version 自动检测)

edge

边缘填充问题(根据 fourcc/version 自动检测)

hpel_chroma
dc_clip
ms

解决某些微软损坏解码器的各种缺陷。

trunc

截断的帧

strict 整数 (decoding/encoding,audio,video)

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

可能的值:

very

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

strict

严格遵守规范中的所有内容,不考虑后果

normal
unofficial

允许非官方扩展

experimental

允许非标准的实验性内容,包括实验性的 (未完成/进行中/未充分测试的)解码器和编码器。 注意:实验性解码器可能会带来安全风险,不要使用它来 解码不可信的输入。

b_qoffset 浮点数 (encoding,video)

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

err_detect 标志 (decoding,audio,video)

设置错误检测标志。

可能的值:

crccheck

验证嵌入的 CRC

bitstream

检测比特流的规范偏差

buffer

检测不正确的比特流长度

explode

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

ignore_err

忽略解码错误并继续解码。 如果您想分析视频内容,并希望无论如何都要解码所有内容, 这个选项是有用的。遇到错误时,此选项不会提供令人赏心悦目的视频。

careful

将违反规范且未在实际中见过的内容视为错误

compliant

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

aggressive

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

has_b_frames 整数
block_align 整数
rc_override_count 整数
maxrate 整数 (encoding,audio,video)

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

minrate 整数 (encoding,audio,video)

设置最小比特率容差(以比特/秒为单位)。主要用于设置 CBR 编码,在其他情况下用途不大。

bufsize 整数 (encoding,audio,video)

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

i_qfactor 浮点数 (encoding,video)

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

i_qoffset 浮点数 (encoding,video)

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

dct 整数 (encoding,video)

设置 DCT 算法。

可能的值:

auto

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

fastint

快速整数

int

精确整数

mmx
altivec
faan

浮点 AAN DCT

lumi_mask 浮点数 (encoding,video)

比对中等亮度区域压缩更强烈的亮区。

tcplx_mask 浮点数 (encoding,video)

设置时间复杂度掩蔽。

scplx_mask 浮点数 (encoding,video)

设置空间复杂度掩蔽。

p_mask 浮点数 (encoding,video)

设置交错掩蔽。

dark_mask 浮点数 (encoding,video)

比对中等亮度区域压缩更强烈的暗区。

idct 整数 (decoding/encoding,video)

选择 IDCT 实现。

可能的值:

auto
int
simple
simplemmx
simpleauto

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

arm
altivec
sh4
simplearm
simplearmv5te
simplearmv6
simpleneon
xvid
faani

浮点 AAN IDCT

slice_count 整数
ec 标志 (decoding,video)

设置错误隐藏策略。

可能的值:

guess_mvs

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

deblock

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

favor_inter

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

bits_per_coded_sample 整数
aspect 有理数 (encoding,video)

设置采样宽高比。

sar 有理数 (encoding,video)

设置采样宽高比。别名为宽高比.

debug 标志 (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 整数 (encoding,video)

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

可能的值:

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差值之和

dct

绝对 DCT 变换差值之和

psnr

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

bit

块所需的比特数量

rd

率失真最优,慢速

zero

0

vsad

绝对垂直差值之和

vsse

平方垂直差值之和

nsse

保留噪声的平方误差之和

w53

5/3 小波,仅用于雪花算法

w97

9/7 小波,仅用于雪花算法

dctmax
chroma
subcmp 整数 (encoding,video)

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

可能的值:

sad

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

sse

平方误差之和

satd

绝对哈达玛变换差值之和

dct

绝对 DCT 变换差值之和

psnr

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

bit

块所需的位数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差值总和

vsse

平方垂直差值总和

nsse

噪声保留的平方差值总和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

dctmax
chroma
mbcmp 整数 (encoding,video)

设置宏块比较函数。

可能的值:

sad

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

sse

平方误差总和

satd

绝对阿达玛变换差值总和

dct

绝对DCT变换差值总和

psnr

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

bit

块所需的位数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差值总和

vsse

平方垂直差值总和

nsse

噪声保留的平方差值总和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

dctmax
chroma
ildctcmp 整数 (encoding,video)

设置交错DCT比较函数。

可能的值:

sad

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

sse

平方误差总和

satd

绝对阿达玛变换差值总和

dct

绝对DCT变换差值总和

psnr

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

bit

块所需的位数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差值总和

vsse

平方垂直差值总和

nsse

噪声保留的平方差值总和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

dctmax
chroma
dia_size 整数 (encoding,video)

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

(1024, INT_MAX)

完全运动估计(最慢)

(768, 1024]

不对称多六边形运动估计

(512, 768]

六边形运动估计

(256, 512]

线状菱形运动估计

[2,256]

变量菱形运动估计

(-1, 2)

小型菱形运动估计

-1

有趣的菱形运动估计

(INT_MIN, -1)

Sab菱形运动估计

last_pred 整数 (encoding,video)

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

precmp 整数 (encoding,video)

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

可能的值:

sad

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

sse

平方误差总和

satd

绝对阿达玛变换差值总和

dct

绝对DCT变换差值总和

psnr

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

bit

块所需的位数

rd

率失真最优,慢

zero

0

vsad

绝对垂直差值总和

vsse

平方垂直差值总和

nsse

噪声保留的平方差值总和

w53

5/3小波,仅用于snow

w97

9/7小波,仅用于snow

dctmax
chroma
pre_dia_size 整数 (encoding,video)

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

subq 整数 (encoding,video)

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

me_range 整数 (encoding,video)

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

global_quality 整数 (encoding,audio,video)
slice_flags 整数
mbd 整数 (encoding,video)

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

可能的值:

simple

使用mbcmp(默认)

bits

使用最少的位数

rd

使用最佳率失真

rc_init_occupancy 整数 (encoding,video)

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

flags2 标志 (decoding/encoding,audio,video,subtitles)

可能的值:

fast

允许非规范兼容的加速技巧。

noout

跳过比特流编码。

ignorecrop

忽略sps中的裁剪信息。

local_header

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

chunks

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

showall

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

export_mvs

将运动矢量导出到帧侧数据(参见AV_FRAME_DATA_MOTION_VECTORS) 对于支持的编解码器。同样参见doc/examples/export_mvs.c.

skip_manual

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

ass_ro_flush_noop

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

icc_profiles

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

export_side_data 标志 (decoding/encoding,audio,video,subtitles)

可能的值:

mvs

将运动矢量导出到帧侧数据(参见AV_FRAME_DATA_MOTION_VECTORS) 对于支持的编解码器。同样参见doc/examples/export_mvs.c.

prft

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

venc_params

通过帧侧数据导出视频编码参数(参见AV_FRAME_DATA_VIDEO_ENC_PARAMS) 对于支持此功能的编解码器。目前,这些是 H.264 和 VP9。

film_grain

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

enhancements

通过帧侧数据输出画面增强元数据,例如 LCEVC(见AV_FRAME_DATA_LCEVC).

threads 整数 (decoding/encoding,video)

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

可能的值:

auto, 0

自动选择要设置的线程数

默认值是 ‘auto’.

dc 整数 (encoding,video)

设置 intra_dc_precision。

nssew 整数 (encoding,video)

设置 nsse 权重。

skip_top 整数 (decoding,video)

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

skip_bottom 整数 (decoding,video)

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

profile 整数 (encoding,audio,video)

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

level 整数 (encoding,audio,video)

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

可能的值:

unknown
lowres 整数 (decoding,audio,video)

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

mblmin 整数 (encoding,video)

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

mblmax 整数 (encoding,video)

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

skip_loop_filter 整数 (decoding,video)
skip_idct 整数 (decoding,video)
skip_frame 整数 (decoding,video)

根据选项值所选的帧类型设置解码器丢弃处理。

skip_loop_filter跳过帧循环过滤,skip_idct跳过帧逆离散余弦变换/去量化,skip_frame跳过解码。

可能的值:

none

不丢弃任何帧。

default

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

noref

丢弃所有非参考帧。

bidir

丢弃所有双向帧。

nokey

只保留关键帧,丢弃所有其他帧。

nointra

只保留I帧,丢弃所有其他帧。

all

丢弃所有帧。

默认值是‘default’.

bidir_refine 整数 (encoding,video)

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

keyint_min 整数 (encoding,video)

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

refs 整数 (encoding,video)

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

trellis 整数 (encoding,audio,video)

设置率失真最优量化。

mv0_threshold 整数 (encoding,video)
compression_level 整数 (encoding,audio,video)
bits_per_raw_sample 整数
channel_layout 整数 (decoding/encoding,audio)

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

rc_max_vbv_use 浮点数 (encoding,video)
rc_min_vbv_use 浮点数 (encoding,video)
color_primaries 整数 (decoding/encoding,video)

可能的值:

bt709

BT.709

bt470m

BT.470 M

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

film

Film

bt2020

BT.2020

smpte428
smpte428_1

SMPTE ST 428-1

smpte431

SMPTE 431-2

smpte432

SMPTE 432-1

jedec-p22

JEDEC P22

color_trc 整数 (decoding/encoding,video)

可能的值:

bt709

BT.709

gamma22

BT.470 M

gamma28

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

linear

线性

log
log100

对数

log_sqrt
log316

对数平方根

iec61966_2_4
iec61966-2-4

IEC 61966-2-4

bt1361
bt1361e

BT.1361

iec61966_2_1
iec61966-2-1

IEC 61966-2-1

bt2020_10
bt2020_10bit

BT.2020 - 10 位

bt2020_12
bt2020_12bit

BT.2020 - 12 位

smpte2084

SMPTE ST 2084

smpte428
smpte428_1

SMPTE ST 428-1

arib-std-b67

ARIB STD-B67

colorspace 整数 (decoding/encoding,video)

可能的值:

rgb

RGB

bt709

BT.709

fcc

FCC

bt470bg

BT.470 BG

smpte170m

SMPTE 170 M

smpte240m

SMPTE 240 M

ycocg

YCOCG

bt2020nc
bt2020_ncl

BT.2020 非常规亮度(NCL)

bt2020c
bt2020_cl

BT.2020 常规亮度(CL)

smpte2085

SMPTE 2085

chroma-derived-nc

基于色度的非常规亮度(NCL)

chroma-derived-c

基于色度的常规亮度(CL)

ictcp

ICtCp

color_range 整数 (decoding/encoding,video)

如果用作输入参数,它为解码器提供有关输入色彩范围的提示。 可能的值:

tv
mpeg
limited

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

pc
jpeg
full

JPEG (2^n-1)

chroma_sample_location 整数 (decoding/encoding,video)

可能的值:

left
center
topleft
top
bottomleft
bottom
log_level_offset 整数

设置日志级别偏移。

slices 整数 (encoding,video)

并行编码使用的切片数量。

thread_type 标志 (decoding/encoding,video)

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

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

可能的值:

slice

同时解码单一帧的多个部分。

使用切片的多线程解码仅在视频编码时启用切片时有效。

frame

同时解码多帧。

默认值是‘slice+frame’.

audio_service_type 整数 (encoding,audio)

设置音频服务类型。

可能的值:

ma

主音频服务

ef

特效

vi

视障人士

hi

听障人士

di

对话

co

解说

em

紧急情况

vo

配音

ka

卡拉OK

request_sample_fmt 采样格式 (decoding,audio)

设置音频解码器优先选择的采样格式。默认值是none.

pkt_timebase 有理数
sub_charenc 编码 (decoding,subtitles)

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

field_order 字段顺序 (video)

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

progressive

逐行扫描视频

tt

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

bb

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

tb

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

bt

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

skip_alpha 布尔值 (decoding,video)

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

codec_whitelist 列表 (input)

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

dump_separator 字符串 (input)

用于分隔命令行中关于流参数的打印字段。 例如,用新行和缩进分隔字段:

ffprobe -dump_separator "
                          "  -i ~/videos/matrixbench_mpeg2.mpg
max_pixels 整数 (decoding/encoding,video)

每图像的最大像素数。可以使用该值来避免由于大图像导致的内存耗尽故障。

apply_cropping 布尔值 (decoding,video)

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

10 解码器

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

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

您可以使用配置选项禁用所有解码器--disable-decoders并通过相关选项有选择性地启用和禁用单个解码器--enable-decoder=解码器 / --disable-decoder=解码器.

关于FFmpeg工具的-decoders选项将显示启用的解码器列表。

11 视频解码器

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

11.1 av1

AOMedia 视频1 (AV1) 解码器。

11.1.1 选项

operating_point

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

11.2 hevc

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

解码器支持MV-HEVC多视图流,最多两个视图。通过向解码器提供视图ID列表view_ids选项选择要输出的视图。该选项可能在解码器初始化之前静态设置,或者从get_format()回调设置——适用于在解码过程中视图数或ID动态变化的情况。

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

注意,如果您正在使用ffmpegCLI工具,则应使用其文档中描述的视图说明符,而不是此处记录的选项。

11.2.1 选项

view_ids (MV-HEVC)

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

view_ids_available (MV-HEVC)

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

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

view_pos_available (MV-HEVC)

调用者可通过此选项读取活动VPS中可用的视图位置(左、右或未指定)数组,形式为AVStereo3DView值。当数组可用时,其元素应用于view_ids_available的对应元素,即,view_pos_available[i]包含具有ID的视图位置view_ids_available[i].

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

11.3 原始视频

原始视频解码器。

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

11.3.1 选项

top top_field_first

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

-1

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

0

默认假设为下场优先

1

默认假设为上场优先

11.4 libdav1d

dav1d AV1 解码器。

libdav1d 允许 libavcodec 解码 AOMedia 视频 1 (AV1) 编解码器。 配置时需要存在 libdav1d 头文件和库。 您需要显式通过配置构建来启用此功能--enable-libdav1d.

11.4.1 选项

libdav1d 包装器支持以下选项。

framethreads

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

tilethreads

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

max_frame_delay

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

filmgrain

如果比特流中存在添加的胶片颗粒,则将其应用于解码视频。默认为 库的内部默认值。 此选项已弃用,将在未来删除。请参见全局选项export_side_data以导出胶片颗粒参数,而非直接应用它。

oppoint

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

alllayers

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

11.5 libdavs2

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

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

11.6 libuavs3d

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

libuavs3d 允许 libavcodec 解码 AVS3 流。 配置时需要存在 libuavs3d 头文件和库。 您需要显式通过配置构建来启用此功能--enable-libuavs3d.

11.6.1 选项

libuavs3d 包装器支持以下选项。

frame_threads

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

11.7 libxevd

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

此解码器需要在配置时存在 libxevd 头文件和库。 您需要显式通过配置构建来启用此功能--enable-libxevd.

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

11.7.1 选项

libxevd 包装器支持以下选项。 为了方便迁移,列出了与 xevd 对应的选项或值。

要获取 libxevd 选项的更准确和全面的文档, 请运行命令xevd_app --help或参考 libxevd 文档。

threads (threads)

强制使用特定数量的线程

11.8 QSV 解码器

英特尔快速同步视频(QuickSync Video)解码器系列(VC1、MPEG-2、H.264、HEVC、 JPEG/MJPEG、VP8、VP9、AV1、VVC)。

11.8.1 通用选项

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

async_depth

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

gpu_copy

视频和系统内存之间的 GPU 加速拷贝

default
on
off

11.8.2 HEVC 选项

hevc_qsv 的额外选项。

load_plugin

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

none
hevc_sw
hevc_hw
load_plugins

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

11.9 v210

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

11.9.1 选项

custom_stride

设置 v210 数据的字节行尺寸。默认值为 0(自动检测)。您可以使用特殊值 -1 表示无跨距的 v210,如在 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。 有三个重要的缩放因子范围:

drc_scale == 0

禁用动态范围压缩。生成全范围音频。

0 < drc_scale <= 1

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

drc_scale > 1

启用动态范围压缩。不对称地应用 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.

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

12.8 libopencore-amrwb

libopencore-amrwb 解码器包装器。

libopencore-amrwb 允许 libavcodec 解码自适应多速率宽带音频编解码器。 使用它需要配置时存在 libopencore-amrwb 头文件和库。 您需要显式通过配置构建来启用此功能--enable-libopencore-amrwb.

FFmpeg已内置AMR-WB解码器,因此用户无需此库即可解码AMR-WB。

12.9 libopus

libopus解码器包装。

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

FFmpeg已内置Opus解码器,因此用户无需此库即可解码Opus。

13 字幕解码器

13.1 libaribb24

ARIB STD-B24字幕解码器。

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

13.1.1 libaribb24解码器选项

-aribb24-base-path 路径

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

默认未设置。

-aribb24-skip-ruby-text 布尔值

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

默认启用。

13.2 libaribcaption

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

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

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

13.2.1 libaribcaption解码器选项

-sub_type 字幕类型

指定已解码字幕的格式。

bitmap

图形图像。

ass

ASS格式化文本。

text

简单的无格式文本输出。

默认值为asslibaribb24解码器一致。 某些现有播放器(例如,mpv)需要ASS格式的ARIB字幕。

-caption_encoding 编码方案

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

auto

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

jis

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

utf8

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

latin

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

-font 字体名称[,字体名称2,...]

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

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

-ass_single_rect 布尔值

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

默认值为false.

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

-force_outline_text 布尔值

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

默认值为false.

-outline_width 数字 (0.0 - 3.0)

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

默认值为1.5.

-ignore_background 布尔值

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

默认值为false.

-ignore_ruby 布尔值

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

默认值为false.

-replace_drcs 布尔值

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

默认值为true.

-replace_msz_ascii 布尔值

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

默认值为true.

-replace_msz_japanese 布尔值

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

默认值为true.

-replace_msz_glyph 布尔值

指定是否在字体支持的情况下,将MSZ(中尺寸;半宽)字符替换为半宽字形。 此选项在使用Adobe-Japan1兼容字体的FreeType或DirectWrite渲染器下工作。 例如,IBM Plex Sans JP,Morisawa BIZ UDGothic,Morisawa BIZ UDMincho,Yu Gothic,Yu Mincho和Meiryo。

默认值为true.

-canvas_size 图像大小

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

libaribcaption解码器假定输入帧大小用于位图渲染,如下所示:

  1. 配置文件A:1440 x 1080,SAR(PAR)为4:3
  2. 配置文件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_transparent未设置,它仅影响开始框和结束框之间的字符,通常是字幕。默认值为0,如果txt_transparent设置,则为255。

14 编码器

编码器是FFmpeg中配置的元素,允许对多媒体流进行编码。

当您配置FFmpeg构建时,所有支持的本地编码器默认情况下都会启用。需要外部库的编码器必须通过相应的选项手动启用。您可以使用以下配置选项列出所有可用编码器--enable-lib option. You can list all available encoders using the configure option --list-encoders.

您可以使用以下配置选项禁用所有编码器--disable-encoders并选择性启用/禁用单个编码器 通过选项--enable-encoder=编码器 / --disable-encoder=编码器.

选项-encodersff*工具将显示启用编码器的列表。

15 音频编码器

以下是部分当前可用音频编码器的描述。

15.1 AAC

高级音频编码(AAC)编码器。

此编码器是默认的AAC编码器,已原生集成到FFmpeg中。

15.1.1 选项

b

设置比特率,单位为bits/s。设置此选项会自动激活恒定比特率(CBR)模式。如果未指定此选项,则设置为128kbps。

q

设置可变比特率(VBR)模式的质量。此选项仅通过命令行工具有效。对于库接口用户,使用ffmpeg命令。global_quality.

cutoff

设置截止频率。如果未指定,将允许编码器动态调整截止频率以在低比特率时提高清晰度。

aac_coder

设置AAC编码器的编码方法。可能的值:

twoloop

两次循环搜索(TLS)方法。这是默认方法。

此方法首先根据频带阈值设置量化器,然后尝试通过向所有量化器加减特定值并稍微调整某些单个量化器来找到最佳组合。根据是否启用了aac_is, aac_msaac_pns选项进行调整。

anmr

平均噪声掩码比率(ANMR)基于网格的解决方案。

这是一种实验性编码器,目前质量较低,速度较慢且不稳定,但具有潜力。目前不支持aac_isaac_pns选项。 目前不推荐使用。

fast

恒定量化器方法。

使用一种较便宜的twoloop算法版本,尽量少进行调整。在低比特率(低于64kbps)下效果较差,但在较高比特率下效果更好且速度更快。

aac_ms

设置中间/侧边编码模式。默认值为“auto”,将自动为受益于此种编码的频段使用M/S。可以通过值“enable”强制使用,主要用于调试,或者通过“disable”禁用。

aac_is

设置强度立体声编码工具的使用。默认情况下,它启用,并且如果对于类似的立体声频段有益,将自动切换IS。可以设置为“disable”禁用以进行调试。

aac_pns

使用感知噪声替代工具在解码过程中用不可察觉的白噪声代替低熵高频段。默认情况下,它启用,但可以通过“disable”禁用以进行调试。

aac_tns

启用使用跨越高频段的多抽头FIR滤波器,在编码过程中隐藏量化噪声并在解码时还原。除了减少高频不愉快的伪影之外,它还减少高频段的熵,使中低频段使用更多位。默认情况下启用,但可以通过选项设置“disable”禁用以进行调试。

aac_ltp

启用长期预测扩展,可以在非常低带宽情况下如语音或独奏钢琴音乐编码中增加编码效率,通过在帧之间扩展恒定谐波峰值。此选项由profile:a aac_low隐式启用。 结合使用-ar选项可减少采样率。

profile

设置编码配置文件,可能的值:

aac_low

默认值,AAC“低复杂性”配置文件。它最具兼容性并产生不错的质量。

mpeg2_aac_low

等同于-profile:a aac_low -aac_pns 0。PNS是根据MPEG4规范引入的。

aac_ltp

长期预测配置文件,由此启用并启用aac_ltp选项。MPEG4中引入。

如果未指定此选项,则设置为‘aac_low’.

15.2 ac3和ac3_fixed

AC-3音频编码器。

这些编码器实现了ATSC A/52:2010和ETSI TS 102 366的一部分。

ac3编码器使用浮点数学实现,而ac3_fixed编码器则仅使用定点整数数学实现。这并不意味着一个总是更快,它只是适合某些特定系统。 encoder only uses fixed-point integer math. This does not mean that one is always faster, just that one or the other may be better suited to a particular system. The ac3_fixed编码器不是任何输出格式的默认编解码器,因此必须明确使用选项-acodec ac3_fixed才能使用它。

15.2.1 AC-3元数据

AC-3元数据选项用于设置描述音频的参数,但在大多数情况下不会影响音频编码本身。一些选项会直接影响或影响结果位流的解码和播放,而另一些仅用于信息展示。某些选项会为输出流添加位元,这些位元可能原本用于音频数据,因此会影响输出质量。在以下选项列表中将标注注意事项。

这些参数在若干公开可用的文档中有详细描述。

15.2.1.1 元数据控制选项

-per_frame_metadata 布尔值

允许逐帧元数据:指定编码器是否应检查每一帧的元数据变化。

0

初始化时设置的元数据值将用于流中的每一帧。(默认)

1

元数据值可以在编码每帧之前更改。

15.2.1.2 下混合音量

-center_mixlev 音量

中心混音音量:解码器在下混合到立体声时应对中心声道应用的增益量。这个字段只有在存在中心声道时才会被写入位流。值以比例因子表示,有三种有效值:

0.707

应用 -3dB 增益

0.595

应用 -4.5dB 增益(默认)

0.500

应用 -6dB 增益

-surround_mixlev 音量

环绕混音音量:解码器在下混合到立体声时应对环绕声道应用的增益量。这个字段只有在存在一个或多个环绕声道时才会被写入位流。值以比例因子表示,有三种有效值:

0.707

应用 -3dB 增益

0.500

应用 -6dB 增益(默认)

0.000

静音环绕声道

15.2.1.3 音频制作信息

音频制作信息是描述混音环境的可选信息。要么不写入,要么两个字段都写入位流。

-mixing_level 数值

混音级别:指定制作环境中主混音时的峰值声压级(SPL)。有效值为 80 到 111,或 -1 表示未知或未指示。默认值为 -1,但如果音频制作信息写入到位流,则不能使用该值。因此,如果room_type选项不是默认值,mixing_level选项就不能是 -1。

-room_type 类型

房间类型:描述在工作室或配音舞台的最终混音过程中使用的均衡方式。大房间指的是具有行业标准 X 曲线均衡化的配音舞台;小房间有平坦的均衡化。如果mixing_level选项和room_type选项都为默认值,则不会将此字段写入位流。

0
notindicated

未指示(默认)

1
large

大房间

2
small

小房间

15.2.1.4 其他元数据选项

-copyright 布尔值

版权指示符:指定该音频是否存在版权。

0
off

无版权(默认)

1
on

存在版权

-dialnorm 数值

对话标准化:指示节目平均对话电平低于数字100%满刻度(0 dBFS)的程度。此参数决定在音频播放过程中设置对话平均音量到预设电平所需的电平变化。目标是匹配节目来源之间的音量电平。值为 -31dB 时,相对于来源音量,播放过程中不会有音量电平变化。有效值为 -31 到 -1 的整数,其中 -31 是默认值。

-dsur_mode 模式

杜比环绕模式:指定立体声信号是否使用杜比环绕(Pro Logic)。如果音频流为立体声,此字段才会写入到位流。使用此选项并不意味着编码器实际上会应用杜比环绕处理。

0
notindicated

未指示(默认)

1
off

非杜比环绕编码

2
on

杜比环绕编码

-original 布尔值

原始比特流指示符:指定此音频是否来自原始来源而不是拷贝。

0
off

非原始来源

1
on

原始来源(默认)

15.2.2 扩展比特流信息

扩展比特流选项是 A/52:2010 标准附录 D 中指定的替代比特流语法的一部分。它分为两个部分。如果某个组中的任何一个参数被指定,则该组中的所有值都会被写入到位流中。对于那些被写入但未指定的选项,将使用默认值。如果写入了混音级别,解码器将使用这些值而不是center_mixlevsurround_mixlev选项中指定的值(如果支持替代比特流语法)。

15.2.2.1 扩展比特流信息 - 第1部分

-dmix_mode 模式

优选立体声下混合模式:允许用户选择 Lt/Rt(杜比环绕)或 Lo/Ro(普通立体声)作为优选的立体声下混合模式。

0
notindicated

未指示(默认)

1
ltrt

偏好 Lt/Rt 下混合

2
loro

偏好 Lo/Ro 下混合

-ltrt_cmixlev 音量

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 音量

Lt/Rt 环绕混音音量:解码器在 Lt/Rt 模式下混合到立体声时应对环绕声道应用的增益量。

0.841

应用 -1.5dB 增益

0.707

应用 -3.0dB 增益

0.595

应用 -4.5dB 增益

0.500

应用 -6.0dB 增益(默认)

0.000

静音环绕声道

-loro_cmixlev 音量

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 音量

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 模式

杜比环绕 EX 模式:指示流是否使用了杜比环绕 EX(7.1 矩阵到 5.1)。使用此选项并不意味着说明编码器实际会进行Dolby Surround EX处理。

0
notindicated

未指示(默认)

1
on

关闭Dolby Surround EX

2
off

开启Dolby Surround EX

-dheadphone_mode 模式

Dolby Headphone模式。表示流是否使用了Dolby Headphone编码(多声道矩阵转换为2.0用于耳机)。使用此选项说明编码器实际会进行Dolby Headphone处理。

0
notindicated

未指示(默认)

1
on

关闭Dolby Headphone

2
off

开启Dolby Headphone

-ad_conv_type 类型

A/D转换器类型。表示音频是否通过HDCD A/D转换。

0
standard

标准A/D转换器(默认)

1
hdcd

HDCD A/D转换器

15.2.3 其他AC-3编码选择

-stereo_rematrixing 布尔值

立体声重矩阵化。启用/禁用立体声输入的重矩阵化。这是一种可选的AC-3特性,通过选择性地将左/右声道编码为中/侧来提高质量。此选项默认启用,强烈建议除测试目的外保持启用状态。

cutoff 频率

设置低通截止频率。如果未指定,编码器将根据其他多个编码参数选择默认值。

15.2.4 仅限浮点AC-3编码选项

这些选项仅对浮点编码器有效,由于固定点编码器未实现相应功能,因此它们在固定点编码器中不存在。

-channel_coupling 布尔值

启用/禁用通道耦合,这是一种可选的AC-3特性,通过将多声道的高频信息合并到单声道以提高质量。每个声道的高频信息在频率和时间域中以较少的精度发送。这允许更多的比特用于低频,同时保留足够的信息以重建高频。浮点编码器默认启用此选项,除测试目的或提高编码速度外,通常应保持启用状态。

-1
auto

由编码器选择(默认)

0
off

禁用通道耦合

1
on

启用通道耦合

-cpl_start_band 数值

耦合开始频带。设置通道耦合开始频带,从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

用于Cholesky分解在LPC分析中的传递次数

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

设置最大延迟(以毫秒为单位)。低于20ms的延迟会迅速降低质量。

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(可变比特率)编码,通过vbrflags +qscale选项启用,处于实验阶段,仅在某些参数组合下工作。

编码7.1音频的支持仅在libfdk-aac 0.1.3或更高版本中可用。

有关更多信息,请参见fdk-aac项目:http://sourceforge.net/p/opencore-amr/fdk-aac/.

15.5.1 选项

以下选项映射到共享的FFmpeg编解码器选项。

b

以比特/秒为单位设置比特率。如果未显式指定比特率,它会根据所选配置文件自动设置为合适的值。

如果启用了VBR模式,该选项将被忽略。

ar

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

channels

设置音频声道数量。

flags +qscale

启用固定质量、VBR(可变比特率)模式。注意,当vbr值为正时,VBR会被隐式启用。

cutoff

设置截止频率。如果未指定或者显式设置为零,它将使用库自动计算的值。默认值为0。

profile

设置音频配置文件。

以下配置文件被识别:

aac_low

低复杂度AAC(LC)

aac_he

高效AAC(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

显式分层信令

默认值是 ‘default’.

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 liblc3

liblc3 LC3(低复杂性通信编解码器)编码器封装。

在配置期间需要存在liblc3头文件和库。您需要通过以下方式显式配置构建:--enable-liblc3.

该编码器支持用于蓝牙SIG LC3编解码器的LE音频协议,以及LC3plus的以下功能:

  • 帧持续时间为2.5ms和5ms。
  • 高分辨率模式,48 KHz 和 96 KHz采样率。

有关更多信息,请参阅liblc3项目:https://github.com/google/liblc3.

15.6.1 选项

以下选项映射到共享FFmpeg编解码器选项。

b 比特率

以比特/秒为单位设置比特率。这将决定为选定帧持续时间编码的帧的固定大小。

ar 频率

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

channels

设置音频频道的数量。

frame_duration

以毫秒为单位设置音频帧的持续时间。默认值为10ms。允许的帧持续时间为2.5ms、5ms、7.5ms和10ms。LC3(蓝牙LE音频)允许7.5ms和10ms;而LC3plus允许2.5ms、5ms和10ms。

10ms帧持续时间在LC3和LC3plus标准中可用。在此模式下,生成的比特流既可以参考为LC3,也可以参考为LC3plus。

high_resolution 布尔值

如果设置为1,则启用高分辨率模式。高分辨率模式可用于所有LC3plus帧持续时间以及采样率为48 KHz 和 96 KHz的情况下。

编码器会在较低采样率时自动关闭此模式,并在96 KHz时激活此模式。

该模式应优先用于高比特率。在此模式下,相较于LC3在48 KHz时将带宽限制至20 KHz,音频带宽始终可达到奈奎斯特频率。

15.7 libmp3lame

LAME(Lame不是一个MP3编码器)MP3编码器封装。

在配置期间需要存在libmp3lame头文件和库。您需要通过以下方式显式配置构建:--enable-libmp3lame.

参见libshine用于固定点MP3编码器,但质量较低。

15.7.1 选项

以下选项由libmp3lame封装器支持。lame-等效选项列表于括号内列出。

b (-b)

设置以比特/秒为单位表示的CBR或ABR比特率。LAMEbitrate以千比特/秒为单位表示。

q (-V)

为VBR设置恒定质量设置。此选项仅使用ffmpeg命令行工具有效。对于库接口用户,请使用global_quality.

compression_level (-q)

设置算法质量。有效参数为0-9范围内的整数,0表示最高质量但最慢,9表示最快但质量最差。

cutoff (--lowpass)

设置低通截止频率。如果未指定,编码器会动态调整截止频率。

reservoir

启用比特储存库时设置为1。默认值为1。LAME默认启用此功能,但可以通过使用--nores选项覆盖。

joint_stereo (-m j)

启用编码器在逐帧基础上使用左右立体声或中间/侧面立体声。默认值为1。

abr (--abr)

启用编码器使用ABR时设置为1。lame --abr设置目标比特率,而该选项只规定FFmpeg使用ABR,仍然依赖b设置比特率。

copyright (-c)

设置MPEG音频版权标志时设置为1。默认值为0(禁用)。

original (-o)

设置MPEG音频原创标志时设置为1。默认值为1(启用)。

15.8 libopencore-amrnb

OpenCORE自适应多速率窄带编码器。

在配置期间需要存在libopencore-amrnb头文件和库。您需要通过以下方式显式配置构建:--enable-libopencore-amrnb --enable-version3.

这是一个仅支持单声道的编码器。官方只支持8000Hz采样率,但您可以通过设置strict为‘unofficial’或更低值来覆盖。

15.8.1 选项

b

以比特/秒为单位设置比特率。仅支持以下比特率,否则libavcodec会舍入到最近的有效比特率。

4750
5150
5900
6700
7400
7950
10200
12200
dtx

允许不连续传输(生成舒适噪声)时设置为1。默认值为0(禁用)。

15.9 libopus

libopus Opus交互式音频编解码器封装。

在配置期间需要存在libopus头文件和库。您需要通过以下方式显式配置构建:--enable-libopus.

15.9.1 选项映射

大多数libopus选项参考opusenc作为模型。以下是描述libopus封装器支持的选项及其opusenc-等效选项的映射表。

b (bitrate)

以比特/秒为单位设置比特率。FFmpeg的b选项以比特/秒表示,而opusencbitrate以千比特/秒表示。

vbr (vbr, hard-cbr, and cvbr)

设置VBR模式。FFmpeg的vbr选项有以下有效参数,其中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。较小帧大小实现较低延迟,但比特率相同时质量会更低。大于20ms的大小仅在相当低的比特率时有意义。默认值为20ms。

packet_loss (expect-loss)

设置预期包丢失百分比。默认值为0。

fec (n/a)

启用带内前向错误修正。packet_loss必须为非零以利用此功能 - FEC‘辅助数据’的频率与预期的包丢失成比例。默认情况下禁用。

application (N.A.)

设置预期的应用类型。有效选项如下:

voip

偏向提高语音清晰度。

audio

偏向对输入的忠实性(默认值)。

lowdelay

通过禁用语音优化模式,仅限制为最低延迟模式。

cutoff (N.A.)

以Hz为单位设置截止带宽。参数必须是以下之一:4000、6000、8000、12000或20000,对应于窄带、中等带宽、宽带、超宽带和全频段。默认值为0(禁用截止)。请注意,libopus会强制对比特率<15 kbps的情况下采用宽带截止,除非使用CELT-only(application设置为‘lowdelay’)模式。

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

Shine 定点MP3编码器包装。

Shine 是一个定点MP3编码器。在没有FPU的平台(例如armel CPU以及一些手机和平板电脑)上表现更好。然而,由于其更多地针对性能而非质量,因此在质量上不如 LAME 和其他生产级编码器。此外,根据项目主页,该编码器代码编写于很久以前,且项目至少停滞了5年,因此可能存在一些漏洞。

此编码器仅支持立体声和单声道输入。同时它只能编码CBR。

原始项目(最后更新于2007年初)地址为http://sourceforge.net/projects/libshine-fxp/。我们仅支持由Savonet/Liquidsoap项目维护的更新分支,地址为https://github.com/savonet/shine.

需要在配置期间存在libshine头文件和库。你需要显式地通过以下命令配置构建--enable-libshine.

另请参阅libmp3lame.

15.10.1 选项

libshine包装支持以下选项。shineenc选项的等价形式在括号内列出。

b (-b)

设置CBR的比特率(以比特/秒为单位)。shineenc -b选项以千比特/秒为单位表示。

15.11 libtwolame

TwoLAME MP2编码器包装。

需要在配置期间存在libtwolame头文件和库。你需要显式地通过以下命令配置构建--enable-libtwolame.

15.11.1 选项

libtwolame包装支持以下选项。twolame选项的等价形式遵循FFmpeg的标准,括号内列出。

b (-b)

设置CBR的比特率(以比特/秒为单位)。twolame b选项以千比特/秒为单位表示。默认值为128k。

q (-V)

设置实验性VBR支持的质量。最大范围从-50到50,有效范围从-10到10。值越高,质量越好。此选项仅在使用ffmpeg命令行工具时有效。对于库接口用户,请使用global_quality.

mode (--mode)

设置生成音频的模式。可能的值有:

auto

根据输入自动选择模式。这是默认设置。

stereo

立体声

joint_stereo

联合立体声

dual_channel

双通道

mono

单声道

psymodel (--psyc-mode)

设置编码中使用的心理声学模型。参数必须是介于-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.12 libvo-amrwbenc

VisualOn自适应多速率宽带编码器。

需要在配置期间存在libvo-amrwbenc头文件和库。你需要显式地通过以下命令配置构建--enable-libvo-amrwbenc --enable-version3.

这是一个单声道编码器。官方仅支持16000Hz的采样率,但可以通过设置strict为‘unofficial’或更低值覆盖。

15.12.1 选项

b

设置比特率(以比特/秒为单位)。仅支持以下比特率,否则libavcodec将舍入到最近的有效比特率。

6600
8850
12650
14250
15850
18250
19850
23050
23850
dtx

设置为1时允许不连续传输(生成舒适噪音)。默认值为0(禁用)。

15.13 libvorbis

libvorbis编码器包装。

需要在配置期间存在libvorbisenc头文件和库。你需要显式地通过以下命令配置构建--enable-libvorbis.

15.13.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命令行工具时有效。 对于库接口用户,请使用global_quality.

cutoff (--advanced-encode-option lowpass_frequency=N)

设置截止带宽(以Hz为单位)。值为0将禁用截止。oggenc相关选项以千赫兹为单位表示。默认值为‘0’(禁用截止)。

minrate (-m)

设置最小比特率(以比特/秒为单位)。oggenc -m选项以千比特/秒为单位表示。

maxrate (-M)

设置最大比特率(以比特/秒为单位)。oggenc -M选项以千比特/秒为单位表示。此选项仅对ABR模式有效。

iblock (--advanced-encode-option impulse_noisetune=N)

设置脉冲块的噪声层偏差。值是从-15.0到0.0的浮点数。负偏移指示编码器特别关注编码音频中过渡区域的清晰度。更好的瞬态响应需要用更高的比特率来换取。

15.14 mjpeg

运动JPEG编码器。

15.14.1 选项

huffman

设置霍夫曼编码策略。可能的值为:

default

使用默认的霍夫曼表。这是默认策略。

optimal

计算并使用最优霍夫曼表。

15.15 wavpack

WavPack无损音频编码器。

15.15.1 选项

等价于wavpack命令行工具的选项列在括号内。

15.15.1.1 共用选项

以下共用选项对该编码器有效。此处仅记录关于该编码器的特别说明。有关选项的一般含义,请参阅编解码器选项章节.

frame_size (--blocksize)

对于此编码器,此选项的范围是128到131072。默认值根据采样率和通道数自动决定。

关于计算默认值的完整公式,请参阅libavcodec/wavpackenc.c.

compression_level (-f, -h, -hh, and -x)

15.15.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扩展了第5种颜色(colram)。

16.2 Cinepak

Cinepak又名CVID编码器。 兼容Windows 3.1和老版MacOS。

16.2.1 选项

g 整数

关键帧间隔。 至少每-g帧插入一个关键帧,有时更早。

q:v 整数

质量因子。值越低质量越好。较高的值则会产生较低的比特率。 以下列表为不同-q:v值在编码akiyo_cif.y4m时的比特率。-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 整数

最大额外的码表重计算次数,次数越多越好但速度更慢。

skip_empty_cb 布尔值

避免浪费字节,忽略老版MacOS解码器。

max_strips 整数
min_strips 整数

使用的最小和最大条带数。 更宽范围有时可以提高质量。 更多条带通常质量更好但占用更多比特。 较少条带倾向于生成更多关键帧。 老版兼容范围为1..3。

strip_number_adaptivity 整数

条带数量在帧之间允许的变化幅度。 值越高质量越好但更慢。

16.3 ffv1

FFv1 编码器

16.3.1 选项

FFmpeg 的 FFv1 编码器支持以下选项。

context

设置上下文大小,0(默认)为小,1为大。

coder

设置编码器,

rice

Golomb rice 编码器

range_def

带默认表的范围编码器

range_tab

带自定义表的范围编码器

slicecrc

-1(默认,自动),1使用初始和终结状态为零的crc,2使用非零初始和终结状态的crc

qtable
default

默认,自动

8bit

使用8bit默认值

greater8bit

使用>8bit默认值

remap_optimizer

0 - 5,默认3,指编码器优化重新映射表时投入的努力程度。

16.4 GIF

GIF 图像/动画编码器。

16.4.1 选项

gifflags 整数

设置用于 GIF 编码的标志。

offsetting

启用图片偏移。

默认启用。

transdiff

启用帧之间的透明检测。

默认启用。

gifimage 整数

设置每帧编码一个完整的 GIF 图像,而不是动画 GIF。

默认值为0.

global_palette 整数

在可能的情况下将调色板写入全局 GIF 头中。

如果禁用,每一帧都将始终写入调色板,即使有全局调色板提供。

默认值为1.

16.5 Hap

Vidvox Hap 视频编码器。

16.5.1 选项

format 整数

指定要编码的 Hap 格式。

hap
hap_alpha
hap_q

默认值为hap.

chunks 整数

指定将帧分割成的块数,范围为1到64。 这允许对大帧进行多线程解码,可能会以数据速率为代价。 编码器可能根据需要调整此值以均匀分割。

默认值为1.

compressor 整数

指定要使用的二级压缩器。如果设置为none, chunks将被限制为1,因为分块的未压缩帧没有优势。

none
snappy

默认值为snappy.

16.6 jpeg2000

本地jpeg 2000编码器默认是有损的,可以使用-q:v选项设置编码质量。无损编码可以通过选择-pred 1.

16.6.1 选项

format 整数

可以设置为j2kjp2(默认),使其可以存储非rgb像素格式。

tile_width 整数

设置瓷砖宽度。范围是1到1073741824。默认值为256。

tile_height 整数

设置瓷砖高度。范围是1到1073741824。默认值为256。

pred 整数

允许设置离散小波变换(DWT)类型。

dwt97int (Lossy)
dwt53 (Lossless)

默认值为dwt97int

sop 布尔值

启用此选项,以在每个数据包的开头添加SOP标记。默认禁用。

eph 布尔值

启用此选项,以在每个数据包头的末尾添加EPH标记。默认禁用。

prog 整数

设置编码器使用的进展顺序。 可能的值为:

lrcp
rlcp
rpcl
pcrl
cprl

默认设置为lrcp

layer_rates 字符串

默认情况下,当不使用此选项时,压缩使用质量指标。 此选项允许使用压缩比进行压缩。每个级别的压缩比可以指定。层的压缩比l指定前l层中包含的总文件大小的比例。

示例用法:

ffmpeg -i input.bmp -c:v jpeg2000 -layer_rates "100,10,1" output.j2k

这将图像压缩为包含3层,其中第一层包含的数据将压缩1000倍,前两层压缩100倍,并使用全部3层包含所有数据。

16.7 librav1e

rav1e AV1 编码器封装。

配置时需要存在rav1e头文件和库。 需要显示地通过以下方式配置构建。--enable-librav1e.

16.7.1 选项

qmax

设置在使用比特率模式时使用的最大量化器。

qmin

设置在使用比特率模式时使用的最小量化器。

qp

使用量化器模式以给定的量化器(0-255)进行编码。

speed

选择用于编码的速度预设(0-10)。

tiles

选择用于编码的分块数量。

tile-rows

选择用于编码的行分块数量。

tile-columns

选择用于编码的列分块数量。

rav1e-params

使用一个包含的列表设置rav1e选项=对,用":"分隔。参见rav1e --help以查看选项列表。

例如,通过以下方式指定librav1e编码选项-rav1e-params:

ffmpeg -i input -c:v librav1e -b:v 500K -rav1e-params speed=5:low_latency=true output.mp4

16.8 libaom-av1

libaom AV1 编码器封装器。

配置期间需要存在libaom头文件和库。您需要通过显式配置构建--enable-libaom.

16.8.1 选项

封装器支持以下标准libavcodec选项:

b

以比特/秒设置目标码率。默认情况下,这将使用可变比特率模式。如果maxrateminrate也设置为相同的值,则将使用恒定比特率模式,否则如果crf也已设置,则将使用受限质量模式。

g keyint_min

设置关键帧布局。GOP大小设置关键帧之间的最大距离;如果为零,输出流将仅包含帧内帧。最小距离将被忽略,除非它与GOP大小相同,在这种情况下,关键帧将总是在固定间隔出现。默认未设置,因此没有此选项,库能够完全自由选择关键帧位置。

qmin qmax

设置最低/最高量化值。有效范围为0到63(警告:这并不是AV1实际使用的量化值——除以四可将实际量化值映射到此范围)。默认最低/最高(无限制)。

minrate maxrate bufsize rc_init_occupancy

设置码率控制缓冲参数。如果未设置,则不会使用——默认是无限制的可变比特率。

threads

设置编码时使用的线程数量。这可能需要tiles或者row-mt选项同时设置,以便完全利用指定线程数量。默认值为支持主机机器的硬件线程数。

profile

设置编码配置文件。默认使用与输入的深度和色度子采样匹配的配置文件。

封装器还有一些特定选项:

cpu-used

设置质量/编码速度的权衡。有效范围为0到8,较高的数字表示更快的速度和更低的质量。默认值为1,这将是慢速和高质量。

auto-alt-ref

启用使用备用参考帧。默认值为库的内部默认值。

arnr-max-frames (frames)

设置备用参考噪声减少最大帧数。默认值为-1。

arnr-strength (strength)

设置备用参考噪声减少滤波器强度。范围为-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

为512块以下设置一个变化阈值,低于该值的块将被编码器跳过。以任意单位定义为非负整数,默认值为零(不跳过任何块)。

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)

启用帧并行解码能力功能。默认值为真。

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,默认值为真。

enable-global-motion (boolean)

为块预测启用全局运动的使用。默认值为真。

enable-intrabc (boolean)

为帧内块预测启用块拷贝模式。此模式对屏幕内容有用。默认值为真。

enable-rect-partitions (boolean) (Requires libaom >= v2.0.0)

启用矩形分区。默认值为真。

enable-1to4-partitions (boolean) (Requires libaom >= v2.0.0)

启用1:4/4:1分区。默认值为真。

enable-ab-partitions (boolean) (Requires libaom >= v2.0.0)

启用AB形状分区。默认值为真。

enable-angle-delta (boolean) (Requires libaom >= v2.0.0)

启用角度变化帧内预测。默认值为真。

enable-cfl-intra (boolean) (Requires libaom >= v2.0.0)

启用从亮度预测色度的帧内预测。默认值为真。

enable-filter-intra (boolean) (Requires libaom >= v2.0.0)

启用滤波帧内预测器。默认值为真。

enable-intra-edge-filter (boolean) (Requires libaom >= v2.0.0)

启用帧内边缘滤波器。默认值为真。

enable-smooth-intra (boolean) (Requires libaom >= v2.0.0)

启用光滑帧内预测模式。默认值为真。

enable-paeth-intra (boolean) (Requires libaom >= v2.0.0)

在帧内预测中启用paeth预测器。默认值为真。

enable-palette (boolean) (Requires libaom >= v2.0.0)

启用调色板预测模式。默认值为真。

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。默认值为真。

enable-tx64 (boolean) (Requires libaom >= v2.0.0)

启用64点变换。默认值为真。

reduced-tx-type-set (boolean) (Requires libaom >= v2.0.0)

使用精简的变换类型集。默认值为假。

use-intra-dct-only (boolean) (Requires libaom >= v2.0.0)

仅对INTRA模式使用DCT。默认值为假。

use-inter-dct-only (boolean) (Requires libaom >= v2.0.0)

仅对INTER模式使用DCT。默认值为假。

use-intra-default-tx-only (boolean) (Requires libaom >= v2.0.0)

仅对INTRA模式使用默认变换。默认值为假。

enable-ref-frame-mvs (boolean) (Requires libaom >= v2.0.0)

启用时间MV预测。默认值为真。

enable-reduced-reference-set (boolean) (Requires libaom >= v2.0.0)

使用精简的单一和复合参考集。默认值为假。

enable-obmc (boolean) (Requires libaom >= v2.0.0)

启用obmc。默认值为真。

enable-dual-filter (boolean) (Requires libaom >= v2.0.0)

启用双滤波器。默认值为真。

enable-diff-wtd-comp (boolean) (Requires libaom >= v2.0.0)

启用差异加权复合。默认值为真。

enable-dist-wtd-comp (boolean) (Requires libaom >= v2.0.0)

启用距离加权复合。默认值为真。

enable-onesided-comp (boolean) (Requires libaom >= v2.0.0)

启用单边复合。默认值为真。

enable-interinter-wedge (boolean) (Requires libaom >= v2.0.0)

启用内部楔形复合。默认值为真。

enable-interintra-wedge (boolean) (Requires libaom >= v2.0.0)

启用内部帧内楔形复合。默认值为真。

enable-masked-comp (boolean) (Requires libaom >= v2.0.0)

启用蒙版复合。默认值为真。

enable-interintra-comp (boolean) (Requires libaom >= v2.0.0)

启用内部帧内复合。默认值为真。

enable-smooth-interintra (boolean) (Requires libaom >= v2.0.0)

启用平滑内部帧内模式。默认值为真。

aom-params

使用一个包含的列表设置libaom选项=对,用":"分隔。有关支持选项的列表,请参阅aomenc --help下的"AV1特定选项"一节。

例如,通过以下方式指定libaom编码选项-aom-params:

ffmpeg -i input -c:v libaom-av1 -b:v 500K -aom-params tune=psnr:enable-tpl-model=1 output.mp4

16.9 liboapv

高级专业视频编解码器编码器封装器。

此编码器要求配置期间存在liboapv头文件和库。您需要通过显式配置构建--enable-liboapv.

许多 liboapv 编码器选项映射到 FFmpeg 全局编解码选项,而独特的编码器选项则通过私有选项提供。

apv 项目的网站地址是https://github.com/AcademySoftwareFoundation/openapv.

16.9.1 选项

以下选项由 liboapv 封装器支持。

要获取有关 liboapv 选项的更广泛的文档,请查阅 liboapv 文档。

preset

设置质量与速度的权衡 [最快, 快速, 中等, 缓慢, 极慢, 默认]

qp

为 CQP 码率控制模式设置量化参数值。

oapv-params (parse_apv_params)

通过一列=对设置 liboapvenc 参数,以":"分隔。请参阅 liboapv 编码器用户指南了解可接受的参数列表。

16.10 libsvtav1

SVT-AV1 编码器封装器。

在配置期间需要存在 SVT-AV1 标头和库。您需要显式配置构建,以--enable-libsvtav1.

16.10.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.11 libjxl

libjxl JPEG XL 编码器封装器。

在配置期间需要存在 libjxl 标头和库。您需要显式配置构建,以--enable-libjxl.

16.11.1 选项

libjxl 封装器支持以下选项:

distance

设置目标 Butteraugli 距离。这是一个质量设置:较低距离产生较高质量,distance=1.0 大致可与 libjpeg 的 Quality 90 相媲美(针对摄影内容)。设置 distance=0.0 可实现真正的无损编码。有效值范围介于 0.0 到 15.0,合理值很少超过 5.0。设置 distance=0.1 通常可使大多数输入达到透明度。默认值为 1.0。

effort

设置使用的编码努力值。较高的努力值能够产生更加一致的质量,并通常产生更好的质量/位每像素曲线,但需要更多的 CPU 时间。有效值范围为 1 到 9,默认值为 7。

modular

强制编码器使用模块化模式而不是自动选择模式。默认情况下对于有损编码使用 VarDCT,对于无损编码使用模块化模式。有损编码中,VarDCT 通常优于模块化,但不支持无损编码。

16.12 libkvazaar

Kvazaar H.265/HEVC 编码器。

在配置期间需要存在 libkvazaar 标头和库。您需要显式配置构建,以--enable-libkvazaar.

16.12.1 选项

b

设置目标视频比特率(以 bit/s 为单位)并启用码率控制。

kvazaar-params

通过一个含有名称=对的列表设置 kvazaar 参数,以逗号 (,) 分隔。请参阅 kvazaar 文档了解选项列表。

16.13 libopenh264

Cisco libopenh264 H.264/MPEG-4 AVC 编码器封装器。

该编码器在配置期间需要存在 libopenh264 标头和库。您需要显式配置构建,以--enable-libopenh264。库通过以下方式检测pkg-config.

有关该库的更多信息,请参阅http://www.openh264.org.

16.13.1 选项

以下 FFmpeg 全局选项会影响 libopenh264 编码器的配置。

b

设置比特率(以每秒比特为单位)。

g

设置 GOP 大小。

maxrate

设置最大比特率(以每秒比特为单位)。

flags +global_header

在比特流中设置全局标头。

slices

设置片的数量,用于并行化编码。默认值为 0。仅当slice_mode设置为‘fixed’.

loopfilter

如果设置为 1(自动启用),则启用环形滤波器。如果要禁用,请设置为 0。

profile

设置配置文件限制。如果设置为‘main’启用 CABAC(将SEncParamExt.iEntropyCodingModeFlag标志设置为 1)。

max_nal_size

以字节为单位设置最大 NAL 大小。

allow_skip_frames

如果设置为 1,则允许跳帧以达到目标比特率。

16.14 libtheora

libtheora Theora 编码器封装器。

在配置期间需要存在 libtheora 标头和库。您需要显式配置构建,以--enable-libtheora.

有关 libtheora 项目的更多信息,请参阅http://www.theora.org/.

16.14.1 选项

以下全局选项映射到内部 libtheora 选项,这些选项会影响编码流的质量和比特率。

b

为 CBR(恒定比特率)模式设置视频比特率(以 bit/s 为单位)。如果启用了 VBR(可变比特率)模式,则此选项将被忽略。

flags

用于启用恒定质量模式(VBR)编码,通过qscale标记,并启用pass1pass2模式。

g

设置 GOP 大小。

global_quality

以 lambda 单位的整数形式设置全局质量。

仅在通过启用 VBR 模式时相关flags +qscale。该值通过除以FF_QP2LAMBDA转换为 QP 单位,范围裁剪在 [0-10],然后乘以 6.3 得到原生 libtheora 范围 [0-63] 的值。更高的值对应于更高质量。

q

将 VBR 模式设置为非负值时启用,并以 QP 单位的双浮点值设置恒定质量值。

该值裁剪在 [0-10] 范围内,然后乘以 6.3 得到原生 libtheora 范围 [0-63] 的值。

此选项仅在使用ffmpeg命令行工具时有效。对于库接口用户,请使用global_quality.

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

通过 libvpx 支持 VP8/VP9 格式。

在配置期间需要存在 libvpx 标头和库。您需要显式配置构建,以--enable-libvpx.

16.15.1 选项

以下选项由 libvpx 包装器支持。vpxenc为了方便迁移,列出了等效选项或值。

为了减少文档的重复,仅记录了私有选项和一些需要特别注意的选项。对于未记录的通用选项的文档,请参阅编解码器选项章节.

获取 libvpx 选项的更多文档,请执行以下命令ffmpeg -h encoder=libvpx, ffmpeg -h encoder=libvpx-vp9vpxenc --help。更多信息可在 libvpx API 文档中找到。

b (target-bitrate)

设置比特率(以位/秒为单位)。请注意,FFmpeg 的b选项以位/秒表示,而vpxenctarget-bitrate则以千比特/秒表示。

g (kf-max-dist)
keyint_min (kf-min-dist)
qmin (min-q)

最小(最佳质量)量化器。

qmax (max-q)

最大(最差质量)量化器。 可以逐帧更改。

bufsize (buf-sz, buf-optimal-sz)

设置码率控制缓冲区大小(以位为单位)。请注意,vpxenc的选项是以毫秒为单位指定的,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' 更糟糕的质量输出。

good

使用良好质量截止时间。这在速度和质量之间提供了一个很好的折中, 尤其是与cpu-used选项结合时。

realtime

使用实时质量截止时间。

speed, cpu-used (cpu-used)

设置质量/速度比率修饰符。更高的值会加快编码速度,但以质量为代价。

nr (noise-sensitivity)
static-thresh

设置一个更改阈值,在低于该阈值时,编码器将跳过这些块。

slices (token-parts)

请注意,FFmpeg 的slices选项表示分区的总数,而vpxenctoken-parts则表示为log2(partitions).

max-intra-rate

设置 I 帧的最大比特率(占目标比特率的百分比)。设为 0 表示无限制。

force_key_frames

VPX_EFLAG_FORCE_KF

Alternate reference frame related
auto-alt-ref

启用备用参考帧的使用(仅限两次编码)。值大于 1 时启用多层备用参考帧(仅限 VP9)。

arnr-maxframes

设置备用参考帧降噪的最大帧数。

arnr-type

设置备用参考帧降噪滤波器类型:向后、向前、居中。

arnr-strength

设置备用参考帧降噪滤波器强度。

rc-lookahead, lag-in-frames (lag-in-frames)

设置用于预测帧类型和速率控制的预览帧数。

min-gf-interval

设置最小黄金帧/备用参考帧间隔(仅限 VP9)。

error-resilient

启用错误恢复特性。

sharpness 整数

通过牺牲较低的 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_cfgvpx/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 帧之间存在依赖关系。

VP8-specific options
screen-content-mode

屏幕内容模式,选项之一:0(关闭),1(屏幕),2(屏幕,具有更激进的速率控制)。

VP9-specific options
lossless

启用无损模式。

tile-columns

设置要使用的编码分片列数。请注意,此值按log2(tile_columns)指定。 例如,设置tile-columns选项为 3 可以请求 8 个编码片列。

tile-rows

设置要使用的编码分片行数。请注意,此值按log2(tile_rows)指定。 例如,设置tile-rows选项为 2 可以请求 4 个编码片行。

frame-parallel

启用帧并行解码功能。

aq-mode

设置自适应量化模式(0:关闭(默认),1:方差,2:复杂度,3:循环刷新,4:equator360)。

colorspace color-space

设置输入色彩空间。VP9 比特流支持以下颜色空间的信号:

rgbsRGB
bt709bt709
unspecifiedunknown
bt470bgbt601
smpte170msmpte170
smpte240msmpte240
bt2020_nclbt2020
row-mt 布尔值

启用基于行的多线程处理。

tune-content

设置内容类型:默认(0),屏幕(1),电影(2)。

corpus-complexity

语料库 VBR 模式是标准 VBR 的一种变体,其中复杂分布中值被传递,而不是为特定的剪辑或片段计算。

有效范围为 [0, 10000]。0(默认)使用标准 VBR。

enable-tpl 布尔值

启用时间依赖模型。

ref-frame-config

使用逐帧元数据,设置vpx_svc_ref_frame_config_t中的成员以 精细控制引用方案和帧缓冲区管理。vpx/vp8cx.h to fine-control referencing schemes and frame buffer management.
使用以 ':' 分隔的键=值对列表。 例如:

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

LAST 帧缓冲区索引。

rfc_gld_fb_idx

GOLDEN 帧缓冲区索引。

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

VVenC H.266/VVC 编码器封装。

此编码器在配置时需要 libvvenc 的头文件和库。您需要显式配置构建--enable-libvvenc.

VVenC 项目的官方网站是https://github.com/fraunhoferhhi/vvenc.

16.16.1 支持的像素格式

VVenC 仅支持 10 位色彩空间作为输入。但内部(编码)位深可以在运行时设置为 8 位或 10 位。

16.16.2 选项

b

设置目标视频比特率。

g

设置 GOP 大小。目前支持 g=1(仅限 Intra)或默认。

preset

设置 VVenC 预设。

levelidc

设置等级 ID。

tier

设置 VVC 层。

qp

设置恒定量化参数。

subopt 布尔值

设置主观(感知驱动的)优化。默认值为 1(开启)。

bitdepth8 布尔值

设置 8 位编码模式,而不是使用 10 位。默认值为 0(关闭)。

period

设置(内部)刷新周期(以秒为单位)。

vvenc-params

使用列表设置 vvenc 选项=对用“:”分隔。参见vvencapp --fullhelp或者vvencFFapp --fullhelp了解选项列表。

例如,可以提供选项为:

intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8

例如,可以提供编码选项为-vvenc-params:

ffmpeg -i input -c:v libvvenc -b 1M -vvenc-params intraperiod=64:decodingrefreshtype=idr:poc0idr=1:internalbitdepth=8 output.mp4

16.17 libwebp

libwebp WebP 图像编码器封装

libwebp 是 Google 官方的 WebP 图像编码器。它可以以有损或无损模式进行编码。有损图像本质上是 VP8 帧的封装。无损图像是 Google 开发的一种单独编解码器。

16.17.1 像素格式

由于格式和 libwebp 的限制,目前 libwebp 仅支持有损模式的 YUV420 和无损模式的 RGB。任一模式都支持 Alpha 通道。由于 API 的限制,如果在有损编码时传入 RGB 或在无损编码时传入 YUV,像素格式将使用 libwebp 的函数自动转换。这种方法并不理想,仅为方便操作。

16.17.2 选项

-lossless 布尔值

启用/禁用无损模式。默认值为 0。

-compression_level 整数值

对于有损模式,这是质量/速度的权衡。较高值可以在增加编码时间的代价下提供更好的质量。在无损模式下,这是大小/速度的权衡。较高值可以在增加编码时间的代价下提供更小的文件大小。更具体地,它控制额外算法和压缩工具的数量,并改变这些工具的组合。这映射到方法选项在 libwebp 中有效范围是 0 到 6。默认值为 4。

-quality 浮点值

对于有损编码,这控制图像质量。对于无损编码,这控制压缩时的努力和时间。范围是 0 到 100。默认值为 75。

-preset 类型

配置预设。这会根据图像类型自动设置一些选项。

none

不使用预设。

default

使用编码器默认值。

picture

数字图像,例如肖像、室内照片。

photo

室外照片,自然光照下。

drawing

手绘或线条图,高对比度细节。

icon

小尺寸彩色图像。

text

类似文本。

16.18 libx264, libx264rgb

x264 H.264/MPEG-4 AVC 编码器封装。

此编码器在配置时需要 libx264 的头文件和库。您需要显式配置构建--enable-libx264.

libx264 支持大量功能,包括 8x8 和 4x4 自适应空间变换、自适应 B 帧放置、CAVLC/CABAC 熵编码、隔行扫描(MBAFF)、无损模式、心理优化以保留细节(自适应量化、心理 RD、心理网格)。

许多 libx264 编码选项已映射到 FFmpeg 的全局编解码器选项,而独特的编码选项通过私有选项提供。此外,x264optsx264-params私有选项允许传递接受 libx264 接受的 key=value 元组的列表。x264_param_parse函数。

x264 项目网站是http://www.videolan.org/developers/x264.html.

libx264rgb 编码器与 libx264 相同,只是它接受打包的 RGB 像素格式作为输入,而不是 YUV。

16.18.1 支持的像素格式

x264 支持 8 到 10 位色彩空间。具体位深在 x264 的配置时间被控制。

16.18.2 选项

libx264 封装支持以下选项。x264- 等效选项或值见括号内,可方便迁移使用。

为了减少文档重复,仅记录私有选项和一些需要特别注意的其他选项。对于未记录的通用选项的文档,请参见编解码器选项章节.

要获取更准确和广泛的 libx264 选项文档,请运行以下命令x264 --fullhelp或参考 libx264 文档。

在列表中请注意x264选项名称在 libavcodec 相应名称之后括号内显示,以便存在直接映射时使用。

b (bitrate)

以比特/s设置比特率。注意 FFmpeg 的b选项以比特/s表示,而x264bitrate以千比特/s表示。

bf (bframes)

I 帧和 P 帧之间的 B 帧数量。

g (keyint)

最大 GOP 大小。

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 level 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 的菱形搜索(最快)。‘epzs’ 是 ‘dia’.

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--no-cabac选项效果相同。

cmp

设置全像素运动估计比较算法。可能的值:

chroma

在运动估计中启用色度。

sad

在运动估计中忽略色度。这与x264--no-chroma-me选项效果相同。

threads (threads)

编码线程数量。

thread_type

设置多线程技术。可能的值:

slice

基于切片的多线程。这与x264--sliced-threads选项效果相同。

frame

基于帧的多线程。

flags

设置编码标志。通过将其设置为-cgop可以禁用闭合GOP并启用开放GOP。这与x264--open-gop选项的行为相似。

rc_init_occupancy (vbv-init)

初始VBV缓冲区占用量

preset (preset)

设置编码预设。

tune (tune)

设置编码参数的调校。

profile (profile)

设置配置文件限制。

fastfirstpass

启用快速设置进行第一遍编码,设置为1时启用。设置为0时,与x264--slow-firstpass选项效果相同。

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

当设置为1时使用心理视觉优化。设置为0时,与x264--no-psy选项效果相同。

psy-rd (psy-rd)

设置心理视觉优化的强度,格式为psy-rd:psy-trellis

rc-lookahead (rc-lookahead)

设置预查看帧类型和速率控制的帧数。

weightb

设置为1时启用对B帧的加权预测。设置为0时,与x264--no-weightb选项效果相同。

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=1 force-cfr=1"的快捷方式。

b-bias (b-bias)

设置B帧使用频率的影响。

b-pyramid (b-pyramid)

设置保留部分B帧作为参考的方法。可能的值:

none (none)

禁用。

strict (strict)

严格层级金字塔。

normal (normal)

非严格(不兼容蓝光)。

mixed-refs

当设置为1时启用每分区使用一个参考,而不是每宏块一个参考。当设置为0时,与x264--no-mixed-refs选项效果相同。

8x8dct

当设置为1时启用自适应空间变换(高配置文件8x8变换)。设置为0时与x264--no-8x8dct选项效果相同。

fast-pskip

当设置为1时,在P帧上启用早期SKIP检测。设置为0时与x264--no-fast-pskip选项效果相同。

aud (aud)

当设置为1时启用访问单元分隔符的使用。

mbtree

当设置为1时启用宏块树速率控制。设置为0时,与x264--no-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有效负载大小(ps),则使用该值。

stats (stats)

设置多次通过统计的文件名。

nal-hrd (nal-hrd)

设置信号HRD信息(需要vbv-bufsize启用)。可能的值有:

none (none)

禁用HRD信息信号。

vbr (vbr)

可变比特率。

cbr (cbr)

恒定比特率(在MP4容器中不允许)。

x264opts 选项
x264-params 选项

使用由“键=值”选项组成的冒号分隔列表覆盖x264配置。

这两个选项的参数是一个=对,通过":"分隔。对于x264opts值可以省略,在这种情况下默认为1提供的值。

对于滤镜psy-rd选项使用":"作为分隔符的值,改用","。自很久以前就接受此值,但由于某些原因未在文档中提及。

例如,可以提供选项如下:

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

例如,使用ffmpeg:

ffmpeg -i foo.mpg -c:v libx264 -x264opts keyint=123:min-keyint=20 -an out.mkv

指定libx264编码选项的完整列表,请使用以下命令:x264 --fullhelp或查阅libx264文档。

a53cc 布尔值

将闭合字幕导入输出(必须为ATSC兼容格式)。仅mpeg2和h264解码器提供此功能。默认值为1(启用)。

udu_sei 布尔值

如果可用,将未注册的用户数据SEI导入输出。默认值为0(关闭)。

mb_info 布尔值

通过AVFrameSideData设置mb_info数据,仅在从API使用时有用。默认值为0(关闭)。

提供了用于常见用途的编码ffpresets,因此可以与通用预设系统一起使用(例如传递pre选项)。

16.19 libx265

x265 H.265/HEVC编码器封装。

此编码器需要在配置期间提供libx265头文件和库。您需要明确配置构建--enable-libx265.

16.19.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 布尔值

如果可用,将未注册的用户数据SEI导入输出。默认值为0(关闭)。

x265-params

使用包含=对的列表设置x265选项,通过":"分隔。参见x265 --help以了解选项列表。

例如,使用-x265-params:

ffmpeg -i input -c:v libx265 -x265-params crf=26:psy-rd=1 output.mp4

16.20 libxavs2

xavs2 AVS2-P2/IEEE1857.4编码器封装。

此编码器要求在配置期间提供libxavs2头文件和库。需要明确配置构建--enable-libxavs2.

使用以下标准libavcodec选项:

  • b / bit_rate
  • g / gop_size
  • bf / max_b_frames

编码器还具有自己的特定选项:

16.20.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选项,通过":"分隔。

例如,使用-xavs2-params:

ffmpeg -i input -c:v libxavs2 -xavs2-params RdoqLevel=0 output.avs2

16.21 libxeve

eXtra-fast Essential Video Encoder (XEVE) MPEG-5 EVC编码器封装。列出了xeve对应的选项或值以便轻松迁移。

此编码器要求在配置期间提供libxeve头文件和库。需要明确配置构建--enable-libxeve.

许多libxeve编码器选项映射到FFmpeg全球编解码器选项,而独特的编码器选项通过私人选项提供。此外,xeve-params私人选项允许传递一个键=值对的列表,如libxeveparse_xeve_params函数接受的。

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

16.21.1 选项

以下选项由libxeve封装支持。列出了xeve对应的选项或值以便轻松迁移。

为了减少文档重复,仅记录私人选项以及需要特别注意的一些其他选项。对于未记录的通用选项文档,请参阅编解码器选项章节.

为了获得关于libxeve选项更准确和广泛的文档,请执行以下命令:xeve_app --help或查阅libxeve文档。

b (bitrate)

设置目标视频比特率(以位/s为单位)。注意FFmpeg的b选项以bits/s表示,而xeve的比特率以kilobits/s表示。

bf (bframes)

设置最大B帧数(1,3,7,15)。

g (keyint)

设置GOP大小(I图周期)。

preset (preset)

设置xeve预设。选择编码器预设值以确定编码速度[快、中、慢、极慢]

tune (tune)

设置编码器调节参数[PSNR、零延迟]

profile (profile)

设置编码器配置文件[0:基线;1:主]

crf (crf)

设置恒定质量模式的质量。恒定率因子<10..49>[默认值:32]

qp (qp)

设置恒定量化率控制方法参数。量化参数qp<0..51>[默认值:32]

threads (threads)

强制使用特定数量的线程

16.22 libxvid

Xvid MPEG-4部分2编码器包装器。

此编码器在配置期间需要存在libxvidcore的头文件和库。您需要在配置构建时显式启用此设置。--enable-libxvid --enable-gpl.

本地mpeg4编码器支持MPEG-4部分2格式,因此用户可以在没有此库的情况下将该格式编码。

16.22.1 选项

以下选项由libxvid包装器支持。以下一些选项已列出但未记录,且对应于共享的编解码器选项。请参阅编解码器选项章节了解其文档。其他未列出的共享选项对libxvid编码器没有影响。

b
g
qmin
qmax
mpeg_quant
threads
bf
b_qfactor
b_qoffset
flags

设置特定的编码标志。可能的值:

mv4

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

aic

启用高质量AC预测。

gray

只编码灰度图像。

qpel

启用四分之一像素运动补偿。

cgop

启用闭合GOP。

global_header

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

gmc

启用使用全局运动补偿(GMC)。默认值为0(禁用)。

me_quality

设置运动估计质量级别。速度逐步降低,质量逐步增加的可能值:

0

不使用运动估计(默认)。

1, 2

启用16x16块的高级菱形区域搜索和半像素精细化。

3, 4

启用上述所有功能,以及8x8块的高级菱形区域搜索和半像素精细化,还启用P帧和B帧的彩色视频平面运动估计。

5, 6

启用上述所有功能,以及扩展的16x16和8x8块搜索。

mbd

设置宏块决策算法。质量逐步增加的可能值:

simple

使用宏块比较函数算法(默认)。

bits

启用基于失真率的16x16块半像素和四分之一像素精细化。

rd

启用上述所有功能,以及基于失真率的8x8块半像素和四分之一像素精细化,并基于失真率搜索正方形模式。

lumi_aq

当设置为1时,启用亮度掩盖自适应量化。默认值为0(禁用)。

variance_aq

当设置为1时,启用方差自适应量化。默认值为0(禁用)。

当与lumi_aq结合时,结果质量不会比单独应用两者更好。换句话说,结果质量将是两者效果中较差的一个。

trellis

设置失真率最优量化。

ssim

设置结构相似性(SSIM)显示方法。可能值:

off

禁用SSIM信息显示。

avg

在编码结束时将平均SSIM输出到标准输出。显示平均SSIM的格式为:

Average SSIM: %f

对于不熟悉C语言的用户,%f表示浮点数,即小数(例如0.939232)。

frame

在编码期间输出每帧的SSIM数据,并在编码结束时输出平均SSIM到标准输出。每帧信息的格式为:

       SSIM: avg: %1.3f min: %1.3f max: %1.3f

对于不熟悉C语言的用户,%1.3f表示一个浮点数,保留小数点后三位(例如0.932)。

ssim_acc

设置SSIM精度。有效选项是0-4范围内的整数,其中0提供最准确的结果,4计算最快。

16.23 MediaFoundation

此模块提供了MediaFoundation框架中编码器(音频和视频)的包装器。它可以访问软硬件编码器。视频编码器可以接受nv12或yuv420p格式的输入(某些编码器支持这两种格式,有些仅支持其中一种——实际上,nv12在硬件编码器中更安全)。

16.24 Microsoft RLE

微软RLE即MSRLE编码器。 仅支持8位调色板模式。 与Windows 3.1和Windows 95兼容。

16.24.1 选项

g 整数

关键帧间隔。 至少每-g帧插入一个关键帧,有时更小。

16.25 mpeg2

MPEG-2视频编码器。

16.25.1 选项

profile

选择编码使用的mpeg2配置文件:

422
high
ss

空间可伸缩

snr

SNR 可伸缩

main
simple
level

选择编码使用的mpeg2级别:

high
high1440
main
low
seq_disp_ext 整数

指定编码器是否应将sequence_display_extension写入输出。

-1
auto

自动决定写入与否(默认值)通过检查要写入的数据是否与默认或未指定值不同。

0
never

从不写入。

1
always

总是写入。

video_format 整数

指定sequence display extension中写入的视频格式,用于指示视频画面的来源。默认值为‘unspecified’,可以为‘component’, ‘pal’, ‘ntsc’, ‘secam’或‘mac’。 为了最大限度地兼容性,使用‘component’.

a53cc 布尔值

将闭合字幕(必须为ATSC兼容格式)导入到输出中。 默认值为1(开启)。

16.26 png

PNG图像编码器。

16.26.1 选项

compression_level

设置压缩级别,从0到9(默认)。

16.26.2 私有选项

dpi 整数

设置像素物理密度,以每英寸点数为单位,默认为未设置。

dpm 整数

设置像素物理密度,以每米点数为单位,默认为未设置。

pred 方法

设置预测方法(none, sub, up, avg, paeth, mixed),默认值为paeth。

16.27 ProRes

苹果ProRes编码器。

FFmpeg包含2个ProRes编码器,即prores-aw和prores-ks编码器。 可以使用-vcodec选项选择使用的编码器。

16.27.1 对于prores-ks的私有选项

profile 整数

选择编码使用的ProRes配置文件。

proxy
lt
standard
hq
4444
4444xq
quant_mat 整数

选择量化矩阵。

auto
default
proxy
lt
standard
hq

如果设置为自动,将选择与配置文件匹配的矩阵。 如果未设置,将选择提供最高质量的矩阵,默认

bits_per_mb 整数

为编码一个宏块分配的位数。不同的配置文件使用200到2400位/宏块,最大为8000。

mbs_per_slice 整数

每个切片的宏块数目(1-8);默认值(8)几乎适用于所有情况。

vendor 字符串

覆盖4字节的供应商ID。 一个自定义供应商ID如apl0会声明该流是由苹果编码器产生的。

alpha_bits 整数

指定 alpha 组件的位数。 可能的值为0, 816。 使用0来禁用 alpha 平面的编码。

16.27.2 速度考量

在默认操作模式下,编码器必须满足帧大小的约束(即,不生成大于要求的帧),同时尽可能提升输出画质。 包含大量细节的帧更难压缩,编码器需要花费更多时间为每个切片寻找合适的量化值。

设置更高的bits_per_mb限制将提高编码速度。

为了获得最快的编码速度,请设置qscale参数(推荐值为 4),并且不要设置大小约束。

16.28 QSV 编码器

Intel QuickSync Video 编码器系列(MPEG-2、H.264、HEVC、JPEG/MJPEG、VP9、AV1)

16.28.1 码率控制方法

码率控制方法选择如下:

  • 当指定global_quality时,使用基于质量的模式。 具体来说,这意味着以下之一:
    • - CQP- 恒定量化标度,当设置qscale编解码器标志时(-qscaleffmpeg 选项)。
    • - LA_ICQ- 带有前瞻性的智能恒定质量,当同时设置look_ahead选项时。
    • - ICQ– 否则为智能恒定质量模式。对于 ICQ 模式,全局质量范围是 1 到 51,1 表示最佳质量。
  • 否则,当使用b选项指定所需的平均码率时,使用基于码率的模式。
    • - LA- 带有前瞻性的 VBR,当指定了look_ahead选项时。
    • - VCM- 视频会议模式,当设置了vcm选项时。
    • - CBR- 恒定码率,当设置了maxrate并且等于平均码率时。
    • - VBR- 可变码率,当设置了maxrate但高于平均码率时。
    • - AVBR- 平均可变码率模式,当未指定maxrate,且avbr_accuracyavbr_convergence都设置为非零时。此模式在 Windows 上支持 H264 和 HEVC。
  • 否则,默认的码率控制方法CQP将被使用。

请注意,根据您的系统,编码器可能会选择与您指定的模式不同的模式。 将详细级别设置为详细或更高以查看 QSV 运行时使用的实际设置。

16.28.2 全局选项 -> MSDK 选项

其他 libavcodec 全局选项映射到 MSDK 选项如下:

  • g/gop_size -> GopPicSize
  • bf/max_b_frames+1 -> GopRefDist
  • rc_init_occupancy/rc_initial_buffer_occupancy -> InitialDelayInKB
  • slices -> NumSlice
  • refs -> NumRefFrame
  • b_strategy/b_frame_strategy -> BRefType
  • cgop/CLOSED_GOP编解码器标志 ->GopOptFlag
  • 对于CQP模式,i_qfactor/i_qoffsetb_qfactor/b_qoffset设置QPPQPI的差值,以及QPPQPB 的差值。
  • coder选项的值设置为vlc会使 H.264 编码器使用 CAVLC 而不是 CABAC。

16.28.3 通用选项

以下选项被所有 QSV 编码器使用。

async_depth

指定应用程序在显式同步结果之前执行的异步操作数量。 如果为零,则未指定值。

preset

此选项从 veryfast(最佳速度)到 veryslow(最佳质量)提供了一系列选择。

veryfast
faster
fast
medium
slow
slower
veryslow
forced_idr

将 I 帧强制为 IDR 帧。

low_power

对于编码器,将此标志设置为 ON 可以减少功耗和 GPU 使用量。

16.28.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
最小QP值(I帧)
最大QP值(P帧)
最小QP值(P帧)
最大QP值(B帧)
最小QP值(B帧)

在h264_qsv中支持。 更改这些值以重置qsv编解码器的最大/最小QP配置。

低延迟速率控制

在h264_qsv、hevc_qsv和av1_qsv中支持。 更改此值以重置qsv编解码器的低延迟速率控制配置。

帧率

更改此值以重置qsv编解码器的帧率配置。

比特率
速率控制缓冲区大小
速率控制初始缓冲区占用量
速率控制最大速率

更改这些值以重置qsv编解码器的比特率控制配置。

画面时序SEI消息

在h264_qsv和hevc_qsv中支持。 更改此值以重置qsv编解码器的画面时序SEI消息配置。

qsv参数

将QSV编码器参数设置为冒号分隔的键值对列表。

qsv_params应当格式化为key1=value1:key2=value2:....

这些参数直接通过MFXSetParameter函数传递给底层的Intel Quick Sync Video (QSV)编码器。

示例:

ffmpeg -i input.mp4 -c:v h264_qsv -qsv_params "CodingOption1=1:CodingOption2=2" output.mp4

此选项允许对QSV编码器提供的各种特定于编码器的设置进行细粒度的控制。

16.28.5 H264选项

这些选项由h264_qsv使用

扩展比特率控制

已扩展的比特率控制。

恢复点SEI消息

设置此标志以在每次帧内刷新周期的开头插入恢复点SEI消息。

率失真优化

启用率失真优化。

最大帧大小

以字节为单位的最大编码帧大小。

最大帧大小(I帧)

以字节为单位的最大I帧编码帧大小。如果此值设置为大于零,则对于I帧,将忽略由max_frame_size设置的值。

最大帧大小(P帧)

以字节为单位的最大P帧编码帧大小。如果此值设置为大于零,则对于P帧,将忽略由max_frame_size设置的值。

最大切片大小

以字节为单位的最大编码切片大小。

比特率限制

切换比特率限制。 将比特率调整为QSV编码器强加的范围内。关闭此标志可能会违反HRD一致性。请注意,指定比QSV编码器范围更低的比特率可能会显著影响质量。如果启用,此选项将对非CQP模式生效:如果比特率不在QSV编码器范围内,它将被调整到范围内。

宏块级别比特率控制

设置此标志启用宏块级别的比特率控制,这通常会提高主观视觉质量。启用此标志可能会对性能和客观视觉质量指标产生负面影响。

低延迟速率控制

设置此标志打开或关闭qsv插件中的LowDelayBRC特性,该功能提供更准确的比特率控制以最小化逐帧比特流大小的差异。值:-1-默认,0-关闭,1-打开。

自适应I帧

此标志控制QSV编码器插入I帧的功能。打开此标志以允许将帧类型从P帧和B帧更改为I帧。

自适应B帧

此标志控制将帧类型从B帧更改为P帧。

P帧策略

启用P-金字塔:0-默认,1-简单,2-金字塔(bf需要设置为0)。

B帧策略

此选项控制B帧作为参考帧的使用。

去块效应索引

此选项禁用去块效应。其值范围为0~2。

CAVLC

如果设置,则使用CAVLC;如果未设置,则使用CABAC进行编码。

视频会议模式

视频会议模式,请参见速率控制方法。

IDR间隔

IDR帧之间的间隔(以I帧为单位)。

画面时序SEI消息

插入带有pic_struct_syntax元素的画面时序SEI消息。

单一SEI NAL单元

将所有SEI消息放入一个NAL单元中。

最大解码帧缓冲区

在DPB中缓冲的最大帧数。

前瞻

使用带前瞻的可变比特率算法。

前瞻深度

以帧数为单位的前瞻深度。

前瞻降采样

用于前瞻分析的降采样因子。

unknown
auto
off
2x
4x
帧内刷新类型

指定帧内刷新类型。帧内刷新的主要目标是提高错误恢复能力,而不会因I帧而对编码比特流大小产生显著影响。SDK编码器通过在刷新周期内每帧部分区域使用帧内MB编码来实现。表示不刷新。垂直表示按MB列垂直刷新。水平表示按MB行水平刷新。切片表示按切片进行水平刷新且无重叠。在切片的情况下,忽略int_ref_cycle_size。要启用帧内刷新,B帧应设置为0。

帧内刷新周期大小

指定刷新周期内图像的数量,从2开始。0和1是无效值。

帧内刷新QP差值

指定插入帧内MB的QP差异。此值是处于[-51, 51]范围内的有符号值,如果亮度样本的目标编码位深为8,则范围为[-63, 63],如果是10位深或12位深,则分别为[-75, 75]。

帧内刷新周期距离

帧内刷新周期开始之间的帧数距离。

配置文件
unknown
baseline
main
high
A53关闭字幕

使用A53关闭字幕(如果可用)。

访问单元分隔符

插入访问单元分隔符NAL。

多帧模式

多帧模式。

off
auto
重复PPS

对每个帧重复pps。

最大I帧视频量化比例。

I帧的最大视频量化比例。

最小I帧视频量化比例。

I帧的最小视频量化比例。

最大P帧视频量化比例。

P帧的最大视频量化比例。

最小P帧视频量化比例。

P帧的最小视频量化比例。

最大B帧视频量化比例。

B帧的最大视频量化比例。

最小B帧视频量化比例。

B帧的最小视频量化比例。

场景

为编码会话提供场景的提示。

unknown
displayremoting
videoconference
archive
livestreaming
cameracapture
videosurveillance
gamestreaming
remotegaming
AVBR精度

AVBR码率控制的精度(以十分之一百分点为单位)。

AVBR收敛速率

AVBR码率控制的收敛速率(以帧数的百分之一单位表示)。

参数avbr_accuracyavbr_convergence是用于平均可变比特率控制(AVBR)算法的。 该算法专注于整体编码质量,同时满足指定的 码率target_bitrate,在精度范围内avbr_accuracy, 经过一个avbr_Convergence周期后生效。此方法不遵循HRD,瞬时比特率不受到限制或填充。

skip_frame

使用每帧元数据"qsv_skip_frame"在编码时跳过帧。此选项定义该元数据的用途。

no_skip

帧跳过已禁用。

insert_dummy

编码器将插入一个所有宏块均编码为跳过的帧到码流中。

insert_nothing

类似于insert_dummy,但编码器不会在位流中插入任何内容。跳过的帧仍然用于码率控制。例如,GOP仍包括跳过的帧,并且跳过帧后的帧大小会更大。

brc_only

skip_frame元数据指示当前帧之前丢失的帧数。

16.28.6 HEVC选项

这些选项由hevc_qsv使用

extbrc

扩展码率控制。

recovery_point_sei

设置此标志以在每个内刷新周期的开始时插入恢复点SEI消息。

rdo

启用率失真优化。

max_frame_size

最大编码帧大小(以字节为单位)。

max_frame_size_i

I帧的最大编码帧大小(以字节为单位)。如果设置的值大于0,那么I帧将忽略max_frame_size设置的值。

max_frame_size_p

P帧的最大编码帧大小(以字节为单位)。如果设置的值大于0,那么P帧将忽略max_frame_size设置的值。

max_slice_size

最大编码切片大小(以字节为单位)。

mbbrc

启用此标志会启动宏块级别的码率控制,一般能提升主观视觉质量。但启用此标志会对性能和客观视觉质量指标产生负面影响。

low_delay_brc

启用或禁用QSV插件中的低延迟码率控制功能,提供更精确的码率控制以最小化每帧比特流大小的变化。值:-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

启用此选项以允许变换跳过。在不早于ICL的平台上支持。

int_ref_type

指定帧内刷新类型。帧内刷新的主要目标是提高抗误差能力, 同时不会因为I帧对编码比特流大小产生重大影响。 SDK编码器通过在每帧的刷新周期内使用帧内宏块进行编码实现这一目标。none表示无刷新。vertical表示 垂直刷新,根据宏块列。horizontal表示水平刷新, 根据宏块行。片段表示通过片段进行水平刷新且无重叠。在以下情况下片段时,in_ref_cycle_size会被忽略。要启用帧内刷新,B帧应该设置为0。

帧内刷新循环大小

指定刷新循环内的图片数量,从2开始。0和1是无效值。

帧内刷新QP差值

指定插入的帧内宏块的QP差值。此为在范围 [-51, 51] 的带符号值,如果目标编码亮度样本的位深为8,范围为 [-63, 63] 对于10位深或 [-75, 75] 对于12位深。

帧内刷新循环距离

帧内刷新循环起始点之间的距离(以帧为单位)。

I帧最大QP值

I帧的最大视频量化标度。

I帧最小QP值

I帧的最小视频量化标度。

P帧最大QP值

P帧的最大视频量化标度。

P帧最小QP值

P帧的最小视频量化标度。

B帧最大QP值

B帧的最大视频量化标度。

B帧最小QP值

B帧的最小视频量化标度。

场景

为编码器提供有关编码会话场景的提示。

unknown
displayremoting
videoconference
archive
livestreaming
cameracapture
videosurveillance
gamestreaming
remotegaming
AVBR精度

AVBR速率控制的精度(以千分之一百分比为单位)。

AVBR收敛性

AVBR速率控制的收敛性(以100帧为单位)。

这些参数AVBR精度AVBR收敛性用于平均可变比特率控制(AVBR)算法。该算法专注于整体编码质量,同时满足指定的比特率目标比特率,在精度范围内AVBR精度,经过AVBR 收敛性周期后。此方法不遵循HRD,且即时比特率未受限制或填充。

跳帧

使用每帧元数据“qsv_skip_frame”在编码时跳过帧。此选项定义了该元数据的使用。

no_skip

跳帧功能已禁用。

insert_dummy

编码器向比特流中插入所有宏块编码为跳过的帧。

insert_nothing

类似于插入占位帧,但编码器不向比特流中插入任何内容。跳过的帧仍被用于brc。例如,gop仍包括跳过的帧,跳过帧之后的帧大小会更大。

brc_only

跳帧元数据表示在当前帧之前漏过的帧数。

16.28.7 MPEG2选项

这些选项由mpeg2_qsv使用。

级别
unknown
simple
main
high

16.28.8 VP9选项

这些选项由vp9_qsv使用。

级别
unknown
profile0
profile1
profile2
profile3
切片列

用于切片编码的列数(需要libmfx >= 1.29)。

切片行

用于切片编码的行数(需要libmfx >= 1.29)。

16.28.9 AV1选项

这些选项由av1_qsv使用(需要libvpl)。

级别
unknown
main
切片列

用于切片编码的列数。

切片行

用于切片编码的行数。

自适应I

此标志控制QSV编码器插入I帧的功能。开启此标志允许将帧类型从P和B更改为I。

自适应B

此标志控制将帧类型从B更改为P。

B策略

此选项控制使用B帧作为参考。

扩展比特率控制

扩展的比特率控制。

前视深度

前视深度以帧数为单位,仅在启用extbrc选项时可用。

低延迟比特率控制

设置此标志开启或关闭QSV插件中的低延迟比特率控制功能,该功能提供更准确的比特率控制以最小化逐帧比特流尺寸的变化。值:-1默认值,0关闭,1开启。

最大帧尺寸

为每帧设置允许的最大尺寸(以字节为单位)。如果帧大小超过限制,编码器将调整QP值以控制帧大小。在CQP速率控制模式中无效。

I帧的最大帧尺寸

I帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对I帧会忽略max_frame_size设置的值。

P帧的最大帧尺寸

P帧的最大编码帧大小(以字节为单位)。如果此值设置为大于零,则对P帧会忽略max_frame_size设置的值。

16.29 Snow

16.29.1选项

iterative_dia_size

用于迭代运动估计的直径大小

16.30 VAAPI编码器

通过VAAPI访问硬件编码器的封装。

这些编码器仅接受VAAPI硬件表面上的输入。如果您有软件帧输入,请使用hwupload过滤器将它们上传到GPU。

使用以下标准libavcodec选项:

  • g / gop_size
  • bf / max_b_frames
  • profile

    如果未设置,将根据输入帧的格式和驱动支持的级别自动确定。

  • level
  • b / bit_rate
  • maxrate / rc_max_rate
  • bufsize / rc_buffer_size
  • rc_init_occupancy / rc_initial_buffer_occupancy
  • compression_level

    速度/质量权衡:值越高速度越快,质量越差。

  • q / global_quality

    大小/质量权衡:值越高大小越小,质量越差。

  • qmin
  • qmax
  • i_qfactor / i_quant_factor
  • i_qoffset / i_quant_offset
  • b_qfactor / b_quant_factor
  • b_qoffset / b_quant_offset
  • slices

所有编码器支持以下选项:

low_power

某些驱动/平台为部分编解码器提供了第二个编码器,意图使用比默认编码器更少的功率;设置此选项将尝试使用该编码器。请注意,在此模式下它可能支持的功能集较少,因此某些其他选项可能无法使用。

idr_interval

在开放GOP模式下,设置完整刷新(IDR)帧之间的普通帧间隔数量。普通帧仍为IRAP,但不会包含全局头文件并可能带有不可解码的前置图片。

b_depth

设置B帧参考深度。当设置为1(默认值)时,所有B帧将仅引用P或I帧。当设置为更高的值时,将存在多层B帧,各层中的帧仅引用高层帧。

async_depth

最大处理并行度。增大此值以提升单通道性能。如果驱动未实现vaSyncBuffer函数,此选项将不起作用。如果使用较大的async_depth值,请确保分配了足够的硬件帧。

max_frame_size

为每帧设置允许的最大尺寸(以字节为单位)。如果帧大小超过限制,编码器将调整QP值以控制帧大小。在CQP速率控制模式中无效。

rc_mode

设置使用的速率控制模式。具体驱动可能仅支持部分模式。

可用模式:

auto

根据驱动支持和其他选项自动选择模式。这是默认设置。

CQP

恒定质量。

CBR

恒定比特率。

VBR

可变比特率。

ICQ

智能恒定质量。

QVBR

质量定义的可变比特率。

AVBR

平均可变比特率。

blbrc

启用块级速率控制,每块分配不同的比特率。 在CQP模式下无效。

每个编码器还有其特定选项:

av1_vaapi

profile设置值为seq_profile. tier设置值为seq_tier. level设置值为seq_level_idx.

tiles

设置用于编码输入视频的块数量,以列x行的形式。 (默认是自动,这意味着使用最小的列/行块数量)。

tile_groups

设置块组数量。所有块将尽可能均匀地分配到每个块组。(默认是1)。

h264_vaapi

profile设置值为profile_idc以及constraint_set*_flags。level设置值为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

profile以及level设置general_profile_idcgeneral_level_idc的值。

aud

在流中包含访问单元定界符(默认不包含)。

tier

设置general_tier_flag。这可能会影响为流选择的级别 如果没有明确指定的话。

sei

设置要包含的SEI消息类型。 以下值的一些组合:

hdr

如果输入帧有HDR元数据,包含HDR元数据 (mastering_display_colour_volumecontent_light_level消息)。

tiles

设置用于编码输入视频的块数量,以列x行的形式。 较大的数量允许更大的编码和解码并行性,但 可能会降低编码效率。

mjpeg_vaapi

仅支持基线DCT编码。编码器始终使用标准 量化和霍夫曼表 -global_quality对标准 量化表进行缩放(范围1-100)。

对于YUV,支持4:2:0、4:2:2和4:4:4子采样模式。也支持RGB, 并会创建一个RGB JPEG。

jfif

在每帧中包含JFIF头(默认不包含)。

huffman

包括标准霍夫曼表(默认开启)。关闭此功能会节省 每个输出帧中的几百字节,但可能会失去对某些JPEG解码器的兼容性, 这些解码器无法完全处理MJPEG。

mpeg2_vaapi

profile以及level设置值为profile_and_level_indication.

vp8_vaapi

不支持B帧。

global_quality设置q_idx用于非关键帧的值(范围0-127)。

loop_filter_level
loop_filter_sharpness

手动设置环路滤镜参数。

vp9_vaapi

global_quality设置q_idx用于P帧的值(范围0-255)。

loop_filter_level
loop_filter_sharpness

手动设置环路滤镜参数。

支持B帧,但输出流始终是编码顺序而不是显示顺序。 如果启用了B帧,可能需要使用vp9_raw_reorder比特流过滤器来修改输出流以按正确顺序显示帧。

仅生成普通帧 -vp9_superframe比特流过滤器可能 需要生成所有解码器都可用的流。

16.31 vbn

Vizrt二进制图像编码器。

此格式由广播供应商Vizrt用于快速纹理流传输。 格式的高级功能(如纹理数据的LZW压缩或 生成mipmaps)不受支持。

16.31.1选项

format 字符串

设置VBN文件所使用的纹理压缩。可选项包括dxt1, dxt5raw。默认值是dxt5.

16.32 vc2

SMPTE VC-2(此前为BBC Dirac Pro)。该编码器主要面向 专业广播,但由于它支持yuv420、yuv422和yuv444, 8位(限幅范围或全范围)、10位或12位, 这使得它适用于其他低开销和低压缩任务(如屏幕录制)。

16.32.1选项

b

设置目标视频比特率。通常这是未压缩视频 比特率的1:6(例如,1920x1080 50fps yuv422p10的约400Mbps)。 较高的值(接近未压缩比特率)将启用无损压缩模式。

field_order

为隔行输入启用场编码(例如,设置为tt表示顶场优先)。 应提高隔行内容的压缩效率,因为它分割场并 分别进行编码。

wavelet_depth

设置应用的总小波变换次数,范围为1到5(默认)。 较低的值减少压缩和质量。能力较低的解码器可能无法 处理值超过wavelet_depth3。

wavelet_type

设置变换类型。目前仅支持5_3(LeGall)和9_7(Deslauriers-Dubuc), 其中9_7具有更好的压缩效果,因此 是默认值。

slice_width
slice_height

设置每个切片的切片大小。较大的值会提高压缩效率。 为了与其他更有限的解码器兼容,使用slice_width值为 32和slice_height值为8。

tolerance

设置速率控制系统的欠射容差百分比。这是为了 防止进行昂贵的搜索。

qm

通过默认值或当wavelet_depth设为5时设置量化矩阵预设。

  • - 默认使用来自规范的默认量化矩阵,扩展至 第五级的值。这在保持细节和省略伪影之间提供了良好的平衡。
  • - 平坦使用完全清零的量化矩阵。这会提高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构建时,所有支持的比特流过滤器默认都会启用。您可以通过configure选项列出所有可用的过滤器。--list-bsfs.

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

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

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

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

18.2 av1_metadata

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

td

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

insert

在每个TU的开头插入一个TD(如果当前没有TD)。

remove

从每个TU的开头移除TD(如果当前有TD)。

color_primaries
transfer_characteristics
matrix_coefficients

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

color_range

设置流中的颜色范围(参见AV1第6.4.2节;注意,对于使用BT.709原色、sRGB传输特性以及identity (RGB)矩阵系数的流,无法设置此选项)。

tv

限制范围。

pc

全部范围。

chroma_sample_position

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

vertical

左侧位置(与MPEG-2和H.264中的默认值匹配)。

colocated

左上位置。

tick_rate

设置时序信息中的时钟频率 (time_scale / num_units_in_display_tick) 在序列头中。

num_ticks_per_picture

设置每个图片中的时钟数,以指示流具有固定帧率。如果未设置tick_rate选项,则忽略。

delete_padding

删除填充OBU。

18.3 chomp

移除包末尾的零填充。

18.4 dca_core

从DCA/DTS流中提取核心内容,丢弃扩展部分,例如DTS-HD。

18.5 dovi_rpu

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

strip

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

compression

启用的压缩级别。

none

无元数据压缩。

limited

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

extended

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

18.6 dump_extra

将额外数据添加到过滤后的包的开头,除非这些包的开头已经准确包含了要添加的额外数据。

freq

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

k
keyframe

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

e
all

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

如果没有指定,则假定为‘k’.

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

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

18.7 dv_error_marker

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

color

用于替换损坏块的颜色。

sta

16位掩码,指定16种可能的错误状态值中的哪些应该被用颜色块替换。默认值为0xFFFE,它将所有非0错误状态值替换。

ok

没有错误,没有隐藏。

err

有错误,没有隐藏。

res

保留。

notok

有错误或隐藏。

notres

未保留。

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

具体的错误状态代码。

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

18.8 eac3_core

从E-AC-3流中提取核心内容,丢弃额外的频道。

18.9 extract_extradata

提取带内额外数据。

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

此比特流过滤器检测带内头,并将其作为额外数据提供。

remove

启用此选项后,从比特流中提取头后将从中删除这些长期头。

18.10 filter_units

从流中移除或保留类型在指定集合中的单元。

pass_types

传递并移除所有其他单元的单元类型或类型范围的列表。这些单元类型值或通过‘-’指定的值范围构成‘|’分隔的列表。

remove_types

pass_types相同,但会移除给定集合中的单元,并传递所有其他单元。

pass_types和remove_types使用的类型与H.264、HEVC和H.266中的NAL单元类型(nal_unit_type)对应(参见H.264和HEVC规范中的表7-1或H.266规范中的表5),与JPEG的标记值(不包括0xFF前缀)或MPEG-2中的无开始码前缀的开始码(即0x000001后面的字节)对应。对于VP8和VP9,每个单元类型为零。

额外数据在此转换中保持不变,但请注意,如果流中包含内联参数集,则输出可能在它们被移除后无法使用。

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

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

从H.265流中移除所有AUDs、SEI和填充物:

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

从MPEG-2流中移除所有用户数据,包括闭合字幕:

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

从H.264流中移除所有SEI,包括闭合字幕:

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

从HEVC流中移除所有前缀和后缀SEI,包括闭合字幕和动态HDR:

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

18.11 hapqa_extract

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

texture

指定要保留的纹理。

color
alpha

将HAPQA转换为HAPQ。

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

将HAPQA转换为HAPAlphaOnly。

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

18.12 h264_metadata

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

aud

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

pass
insert
remove

默认值为pass。

sample_aspect_ratio

在VUI参数中设置流的样本宽高比。参见H.264表E-1。

overscan_appropriate_flag

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

video_format
video_full_range_flag

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

colour_primaries
transfer_characteristics
matrix_coefficients

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

chroma_sample_loc_type

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

tick_rate

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

fixed_frame_rate_flag

设置流是否具有固定帧率-通常这表明帧速率恰好是时钟频率的一半,但确切含义取决于交错和图片结构(参见H.264第E.2.1节和表E-6)。

zero_new_constraint_set_flags

SPS中的zero 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+hello’将插入与给定UUID关联的字符串“hello”。

delete_filler

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

display_orientation

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

pass
insert
remove
extract

默认行为是通过。

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

rotate

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

flip

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

horizontal
vertical

默认未设置。

level

在SPS中设置级别。参考H.264第A.3节和表格A-1至A-5。

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

18.13 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

请注意,此过滤器会自动插入到用于MPEG-TS(复用器mpegts)和裸H.264(复用器h264)输出格式的处理中。

18.14 h264_redundant_pps

这适用于一些具有冗余PPS的蓝光BDMV H264流的修复操作。这些PPS修改了与流无关的参数,导致需要正确额外数据的其他转换过程发生混淆。

这些受影响流中使用的编码器在整个流中增加了额外的PPS,变更了初始QP以及是否启用了加权预测。这在将流复制到全局头容器后导致问题,因为初始PPS不适合流的其余部分。例如,寻址时会返回混乱的输出,直到一个新的PPS出现。

此比特流过滤器移除了额外的PPS,并重写了切片头,使得流使用全局头中的单一前置PPS,从而解决问题。

18.15 hevc_metadata

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

aud

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

insert
remove
sample_aspect_ratio

在流的VUI参数中设置采样长宽比。

video_format
video_full_range_flag

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

colour_primaries
transfer_characteristics
matrix_coefficients

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

chroma_sample_loc_type

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

tick_rate

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

num_ticks_poc_diff_one

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

crop_left
crop_right
crop_top
crop_bottom

在SPS中设置符合窗口裁剪偏移值。如果流已经裁剪,这些值将替代当前值。

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

width
height

设置裁剪后的宽度和高度。

level

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

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

18.16 hevc_mp4toannexb

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

一些流式传输格式要求这一步骤,通常是MPEG-2传输流格式(复用器mpegts).

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

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

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

18.17 imxdump

修改比特流以适应MOV,并可被Final Cut Pro解码器使用。此过滤器仅适用于mpeg2video编解码器,且对于拥有适当配置的Final Cut Pro 7及更新版本来说可能不再需要。-tag:v.

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

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

18.18 mjpeg2jpeg

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

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

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

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

Avery Lee在2001年rec.video.desktop新闻组中写道:"MJPEG,或者至少是具有MJPG fourcc码的AVIs中的MJPEG,是受限JPEG,采用了固定的、*省略的*霍夫曼表。JPEG必须是YCbCr颜色空间,必须是4:2:2,并且必须使用基本霍夫曼编码,而不是算术或渐进型。……实际上您可以提取MJPEG帧并使用常规JPEG解码器解码,但您必须将DHT段添加在它们之前,否则解码器将无法了解如何解压数据。所需的确切表在OpenDML规范中给出。"

此比特流过滤器修补从MJPEG流中提取的帧头(数据包具有AVI1标识且缺少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.19 mjpegadump

在比特流中添加MJPEG A头,以便QuickTime可以解码。

18.20 mov2textsub

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

另请参见text2movsub过滤器。

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,仅仅是为了解决损坏的视频窗口子系统的临时方案。它们占用更多空间,可能会导致轻微的音视频同步问题,需要更多的CPU功率来解码(除非播放器有一些解码后图片队列来补偿这种2,0,2,0每包帧的方式),而将它们复制到标准容器如mp4或mpeg-ps/ts中会造成问题,因为MPEG-4解码器可能无法解码它们,因为它们不是有效的MPEG-4。

例如,使用ffmpeg修复包含MPEG-4流的AVI文件中的DivX样式打包B帧,可以使用以下命令:

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

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

设置每个输出音频包的样本数量。该数字表示样本数量。per each channel默认值为 1024。

pad, p

如果设置为 1,滤镜将在最后一个音频包中填充静音,以便其中 包含与之前音频包数量相同的样本数量(或大致相同的样本数量, 详见frame_rate)默认值为 1。

frame_rate, r

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

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

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

18.26 pgs_frame_merge

将以 "显示设置结束" 片段结尾的 PGS 字幕片段序列合并为一个数据包。

对于支持 PGS 字幕的一些容器, 这是必须的(如多路复用器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

BT 601, BT 709, BT 2020

smpte2084

SMPTE ST 2084

arib-std-b67

ARIB STD-B67

matrix_coefficients

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

auto

保持相同的色彩空间属性(默认)。

unknown
bt709
smpte170m

BT 601

bt2020nc

为文件的每个帧设置 Rec709 色彩空间

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

为文件的每个帧设置混合对数伽马参数

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

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 常量。

例如,设置 PTS 等于 DTS(如果涉及 B 帧,不建议这样做):

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

18.30 showinfo

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

18.31 text2movsub

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

另请参阅mov2textsub过滤。

18.32 trace_headers

记录包含编码流头部中所有语法元素的日志输出(所有位于单个编码块级别之上的内容)。这对于调试低级流问题可能非常有用。

支持 AV1、H.264、H.265、(M)JPEG、MPEG-2 和 VP9,但具体支持的编解码器取决于构建版本,可能只支持其中的一个子集。

18.33 truehd_core

从 TrueHD 流中提取核心内容,移除 ATMOS 数据。

18.34 vp9_metadata

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

color_space

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

unknown
bt601
bt709
smpte170
smpte240
bt2020
rgb
color_range

在帧头中设置色彩范围值。请注意,色彩空间强制修改的任何值将优先于此值。

tv
pc

18.35 vp9_superframe

将 VP9 的不可见(备用参考)帧重新合并到 VP9 超帧中。此选项可修复分离/分段的 VP9 流,其中备用参考帧从其可见对应物中分离出来的情况。

18.36 vp9_superframe_split

将 VP9 超帧拆分为单帧。

18.37 vp9_raw_reorder

对于排序可能错误但时间戳正确的 VP9 流,插入额外的已存在帧数据包以纠正顺序。

19 格式选项

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

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

所支持选项的列表如下:

avioflags 标志 (input/output)

可能的值:

direct

减少缓冲。

probesize 整数 (input)

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

max_probe_packets 整数 (input)

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

packetsize 整数 (output)

设置数据包大小。

fflags 标志

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

输入文件的可能值:

discardcorrupt

丢弃损坏的数据包。

fastseek

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

genpts

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

igndts

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

ignidx

忽略索引。

nobuffer

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

nofillin

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

noparse

禁用 AVParsers,这需要+nofillin同时设置。

sortdts

尝试通过 DTS 交错输出数据包。目前仅适用于带有索引的 AVI 格式。

输出文件的可能值:

autobsf

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

bitexact

仅写入与平台、生成和时间无关的数据。这确保文件和数据校验和具有可重复性,并且在不同平台之间保持一致。其主要用途是回归测试。

flush_packets

立即写入数据包。

shortest

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

seek2any 整数 (input)

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

analyzeduration 整数 (input)

指定要分析输入的微秒数。较高的值可以更准确地检测信息,但会增加延迟。默认值为 5,000,000 微秒(5 秒)。

cryptokey 十六进制字符串 (input)

设置解密密钥。

indexmem 整数 (input)

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

rtbufsize 整数 (input)

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

fdebug 标志 (input/output)

打印特定调试信息。

可能的值:

ts
max_delay 整数 (input/output)

设置复用或解复用延迟的最大值(微秒)。

fpsprobesize 整数 (input)

设置探测 FPS 使用的帧数。

audio_preload 整数 (output)

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

chunk_duration 整数 (output)

为每段设置微秒值。

chunk_size 整数 (output)

设置每段的字节大小。

err_detect, f_err_detect 标志 (input)

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

可能的值:

crccheck

验证嵌入式 CRC 校验值。

bitstream

检测比特流规范偏差。

buffer

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

explode

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

careful

将违反规范且未在实际情况中见到的问题视为错误。

compliant

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

aggressive

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

max_interleave_delta 整数 (output)

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

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

此字段指定第一个和最后一个数据包的时间戳差异的最大值。如果超过此值,libavformat 将输出一个数据包,无论它是否已为所有流排队了一个数据包。

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

use_wallclock_as_timestamps 整数 (input)

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

avoid_negative_ts 整数 (output)

可能的值:

make_non_negative

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

make_zero

调整时间戳,使第一个时间戳为 0。

auto (default)

在目标格式要求时启用调整。

disabled

禁用时间戳的偏移。

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

skip_initial_bytes 整数 (input)

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

correct_ts_overflow 整数 (input)

如果设置为1,将校正单一的时间戳溢出。默认值为1。

flush_packets 整数 (output)

在每个包之后刷新底层I/O流。默认值为-1(自动),这意味着底层协议会决定,1启用选项,减少延迟;0禁用选项,在某些情况下可能提高I/O吞吐量。

output_ts_offset 偏移量 (output)

设置输出时间偏移。

偏移量必须是时间持续量的规范,参考(ffmpeg-utils) ffmpeg-utils(1)手册中的时间持续量章节.

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

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

format_whitelist 列表 (input)

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

dump_separator 字符串 (input)

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

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

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

skip_estimate_duration_from_pts 布尔值 (input)

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

duration_probesize 整数 (input)

设置探测大小(字节)用于输入持续时间估算,当需要文件尾部额外探测PTS时(目前:MPEG-PS和MPEG-TS)。旨在让用户获得更好的持续时间探测效果,或者间接地提升,例如使用concat解复用器的操作。 典型用例是高码率的CBR的MPEG-TS,具有高视频缓冲和清洁结束,以及类似的音频与视频PTS值:在这种情况下,最后视频包和音频包之间的物理间隔较大,因此需要读取许多字节以获得视频流持续时间。 另一个用例是默认探测行为仅获取到视频流的单个帧,但非最后帧,因为帧重排导致持续时间不准确。 设置此选项对小文件也会有性能影响,因为探测大小是固定的。默认行为是通用权衡,通常是适应性的,但探测大小不会为了获得流持续时间而不惜一切代价扩展。 必须是大于等于1的整数,0为默认行为。

strict, f_strict 整数 (input/output)

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

可能的值:

very

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

strict

严格遵循规格中的所有内容,不管其后果如何

normal
unofficial

允许非官方扩展

experimental

允许非标准化的实验内容,实验性(未完成/正在开发/测试不足)解码器和编码器。 注意:实验性解码器可能带来安全风险,不要用于解码不信任的输入。

19.1 格式流说明符

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

流说明符的具体语义由avformat_match_stream_specifier()声明在libavformat/avformat.h头文件中,并记录在(ffmpeg)ffmpeg(1)手册中的流说明符章节.

20 解复用器

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

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

你可以使用配置选项禁用所有解复用器--disable-demuxers, 并通过选项选择性地启用单一解复用器--enable-demuxer=DEMUXER, 或使用选项禁用它--disable-demuxer=DEMUXER.

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

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

20.1 aa

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

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

20.2 aac

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

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

20.3 apng

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

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

-ignore_loop 布尔值

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

-max_fps 整数

帧每秒的最大帧速率。默认值为0,不对帧速率施加限制。

-default_fps 整数

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

20.4 asf

高级系统格式解复用器。

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

-no_resync_search 布尔值

不尝试通过寻找某些可选起始代码进行重新同步。

20.5 concat

虚拟连接脚本解复用器。

此解复用器从文本文件读取文件列表和其他指令,并依次解复用它们,好像它们的所有包被混合在一起。

文件中的时间戳被调整,使第一个文件的时间戳从0开始,每个后续文件从前一个文件结束时间开始。注意,这种调整是全局进行的,如果所有流长度不完全一致,可能会导致间隙。

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

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

20.5.1 语法

脚本是扩展ASCII的文本文件,每行一个指令。空行、开头的空格和以’#’开头的行都会被忽略。可以识别出以下指令:

file 路径

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

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

ffconcat version 1.0

识别脚本类型和版本。

为了让FFmpeg自动识别格式,此指令必须完全按照固定形式出现(没有额外空格或字节序标记)并位于脚本的第一行。

duration 持续时间

文件的持续时间。此信息可以从文件中获取;在这里指定可能更高效或者在文件信息不可用或不准确时提供帮助。

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

inpoint 时间戳

文件的进入点。当解复用器打开文件时,它会立即寻求指定的时间戳。寻求会进行调整,使所有流可以在进入点成功展示。

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

对于每个文件,在文件进入点之前的包将具有小于文件计算的开始时间戳的时间戳(如果是第一个文件,则为负值),并且文件的持续时间(如果没有通过duration指令指定)将根据它们指定的进入点减少。

因为进入点之前可能存在额外的包,包时间戳可能在两个连接的文件之间产生重叠。

outpoint 时间戳

文件的退出点。当解复用器在任何流中达到指定的解码时间戳时,它将处理为文件结束条件,并跳过当前以及所有剩余流中的包。

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

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

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

file_packet_metadata 键=值

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

file_packet_meta

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

option

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

stream

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

exact_stream_id id

设置流的ID。 如果提供了该指令,将使用子文件中对应ID的字符串。 这在流顺序不可靠的MPEG-PS(VOB)文件中特别有用。

stream_meta

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

stream_codec

流的编解码器。

stream_extradata hex_string

字符串的额外数据,编码为十六进制。

chapter id 开始 结束

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

20.5.2 选项

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

safe

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

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

默认值是1。

auto_convert

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

目前唯一的转换是向MP4格式的H.264流添加h264_mp4toannexb比特流过滤器。这在分辨率变化时尤其必要。

segment_time_metadata

如果设置为1,每个数据包将包含lavf.concat.start_timelavf.concat.duration数据包元数据值,它们分别是合并输出中的相关文件段的开始时间和持续时间,以微秒表示。仅当基于合并文件已知持续时间时才设置持续时间元数据。 默认值为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流解复用器。

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

20.6.1 选项

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

cenc_decryption_key

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

20.7 dvdvideo

DVD视频解复用器,由libdvdnav和libdvdread驱动。

可以直接将DVD标题,特别是顺序PGC,引入到转换管道中。菜单资产,例如背景视频或音频,也可以在提供菜单坐标的情况下解复用(尽力而为)。

接受块设备(DVD驱动器)、ISO文件和目录结构。通过激活-f dvdvideo以使用其中一个输入。

此解复用器没有任何种类的解密代码。处理加密DVD时需自行解决问题,并且不应期待对此方面的支持。

底层播放由libdvdnav处理,结构解析由libdvdread完成。 FFmpeg必须支持相关的GPL库并启用配置开关--enable-libdvdnav--enable-libdvdread.

您需要提供所需的"标题编号"或确切的PGC/PG坐标。 许多开源DVD播放器和工具可以协助提供这些信息。 如果未指定,解复用器将默认为标题1,这适用于许多光盘。 但是,由于格式的灵活性,建议手动检查。 有许多光盘设计奇怪或头信息无效。

如果输入是真正的DVD驱动器,请注意某些驱动器在从光盘读取坏扇区时可能会悄悄失败,返回随机位,这实际上是损坏的数据。 需要第二次通过和完整性检查来检测此损坏。 这不是FFmpeg的问题。

20.7.1 背景

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

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

还有许多其他的DVD结构(一个长话题)在这里将不作详细讨论。 特别是NAV数据包,由此解复用器处理以建立准确的时间,同时不会作为流输出。要了解高层次信息,可参考:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures

20.7.2 选项

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

title int

要播放的标题编号。如果pgcpg未设置,则必须设置。 不适用于菜单。 默认值为0(自动),目前仅选择第一个可用标题(标题1)并通知用户有关影响。

chapter_start int

开始的章节或PTT(标题的一部分)编号。不适用于菜单。 默认值为1。

chapter_end int

结束的章节或PTT(标题的一部分)编号。不适用于菜单。 默认值为0,这是一种特殊值,表示在最后一个可能章节结束。

angle int

视频角度编号,指的是额外的 视频流,这些流由VOB中交织的替换帧组成。 不适用于菜单。 默认值为1。

region int

用于播放的区域代码。一些光盘可能使用此代码在不同的区域默认播放特定角度。 此选项不会影响作为输入的真实DVD驱动器的区域代码。不适用于菜单。 默认值为0,"世界"。

menu bool

解复用菜单资源而不是导航标题。需要菜单的确切坐标(menu_lu, menu_vts, pgc, pg)。 默认值为false。

menu_lu int

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

menu_vts int

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

pgc int

用于开始播放的入口PGC,与pg联合使用。 设置的替代项title。 目前不支持章节标记。 对于菜单,需要明确设置。 默认值为0,自动从title.

pg 值解析。

intpgc用于开始播放的入口PG,与title。 目前不支持章节标记。 默认值为1,PGC的第一个PG。

preindex bool

启用此选项以获得准确的章节(PTT)标记和持续时间测量,这需要缓慢的第二遍读取以从NAV数据包中索引章节标记时间戳。 对真实光盘驱动器来说,这是不理想的额外工作。 建议并且更快地在硬盘驱动器上使用DVD结构的备份启用此选项。 与pgc和不兼容。pg默认是 0,false。

trim 布尔值

跳过从开头开始的填充单元(例如长度小于 1 秒的单元)。 许多光盘在 PGC 开头有填充段, 通常包含用于控制真实 DVD 播放器缓冲速度的垃圾数据, 没有其他重要数据值。 不适用于菜单。 默认是 1,true。

20.7.3 示例

  • 从给定的 DVD 结构中打开标题 3:
    ffmpeg -f dvdvideo -title 3 -i <path to DVD> ...
    
  • 从给定的 DVD 结构中打开标题 1 的章节 3-6:
    ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ...
    
  • 从给定的 DVD 结构中仅打开标题 1 的章节 5:
    ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ...
    
  • 从 VTS 1、PGC 1 开始的 PG 1 中分离语言 1 的菜单:
    ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
    

20.8 ea

Electronic Arts 多媒体格式分离器。

这个格式被各种 Electronic Arts 游戏使用。

20.8.1 选项

merge_alpha 布尔值

通常 VP6 的 alpha 通道(如果存在)会作为第二个视频流返回, 设置此选项后,分离器会返回一个包含普通视频和 alpha 通道的单一视频流。

20.9 imf

互操作母版格式分离器。

此分离器将 IMF Composition 中找到的音频和视频流呈现为流, 按照SMPTE ST 2067-2.

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

如果-assetmaps未指定,分离器将在 CPL 同一目录下寻找文件ASSETMAP.xml

20.10 flv, live_flv, kux

Adobe Flash 视频格式分离器。

此分离器用于分离 FLV 文件和 RTMP 网络流。在直播网络流情况下, 如果强行指定格式,可以使用 live_flv 选项代替 flv,以适应时间戳不连续。 KUX 是优酷平台使用的一种 flv 变种。

ffmpeg -f flv -i myfile.flv ...
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
-flv_metadata 布尔值

根据 onMetaData 数组内容分配流。

-flv_ignore_prevtag 布尔值

忽略前一个标签值的大小。

-flv_full_metadata 布尔值

输出所有 onMetadata 的内容。

20.11 gif

动态图像 GIF 分离器。

接受以下选项:

min_delay

设置帧间的最小有效延迟(以百分之一秒为单位)。 范围是 0 到 6000。默认值为 2。

max_gif_delay

设置帧间的最大有效延迟(以百分之一秒为单位)。 范围是 0 到 65535。默认值为 65535(接近 11 分钟), 这是规范允许的最大值。

default_delay

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

ignore_loop

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

例如,与覆盖滤镜一起,将一个无限循环的 GIF 放到另一个视频上:

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

请注意,在上述示例中,覆盖滤镜的 shortest 选项 被用于使输出视频的长度等于最短输入文件的长度, 在本例中是input.mp4因为此示例中的 GIF 循环是无限的。

20.12 hls

HLS 分离器

Apple HTTP 实时流分离器。

此分离器呈现所有变体流的所有 AVStreams。 id 字段设置为比特率变体的索引号。通过设置 AVStreams 的丢弃标志 (在 ffplay 中按 'a' 或 'v'),调用方可以决定实际接收到哪些变体流。 流所属变体的总比特率可在名为 "variant_bitrate" 的元数据键中找到。

接受以下选项:

live_start_index

开始直播的分段索引(负值表示从结尾开始)。

prefer_x_start

如果播放列表中有 #EXT-X-START,优先使用它,而不是 live_start_index。

allowed_extensions

以逗号分隔的 hls 允许访问的文件扩展名列表。

extension_picky

这会阻止探测被禁止的扩展名。 它还要求所有可用分段的扩展名与格式匹配, mpegts 除外,总是被允许。 建议正确设置白名单,而不是依赖扩展名。 默认启用。

max_reload

重试不足列表的最大次数。 默认值为 1000。

m3u8_hold_counters

刷新播放列表而未发现新分段时的最大加载 m3u8 次数。 默认值为 1000。

http_persistent

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

http_multiple

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

http_seekable

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

seg_format_options

为媒体分段的分离器设置选项,使用 key=value 对列表分隔:.

seg_max_retry

在出错的情况下重新加载分段的最大次数, 适用于不希望在网络错误时跳过分段的情形。 默认值为 0。

20.13 image2

图像文件分离器。

此分离器从指定的图像文件列表中读取。 格式和含义由模式类型.

模式可以包含用于自动确定文件中图像格式的后缀。

序列中的所有文件图像必须具有相同的大小、像素格式和格式。

此分离器接受以下选项:

framerate

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

loop

如果设置为 1,则循环输入。默认值为 0。

pattern_type

选择用于解释提供的文件名的模式类型。

模式类型接受以下值之一。

none

禁用模式匹配,因此视频将仅包含指定的图像。 如果您不想从多个图像创建序列且文件名可能包含特殊模式字符, 则应使用此选项。

sequence

选择序列模式类型,用于通过顺序编号表示文件序列。

序列模式可能包含字符串 " %d " 或 "%0Nd", 它指定了使用模式匹配的文件名中代表顺序编号的字符位置。形式 "%d0Nd" 时,文件名中表示编号的字符串会以零填充,N 表示零填充表示编号的总位数。字符 '%' 可通过字符串 "%%" 在模式中指定。N is the total number of 0-padded digits representing the number. The literal character ’%’ can be specified in the pattern with the string "%%".

如果序列模式包含 "%d" 或 "%0Nd",则由模式指定的文件列表的第一个文件名必须包含一个数字,该数字在起始编号起始编号范围+-1 范围内,并且所有后续编号必须是连续的。-1, and all the following numbers must be sequential.

例如,模式 "img-%03d.bmp" 会匹配由以下形式文件组成的序列:img-001.bmp, img-002.bmp, ..., img-010.bmp,等;模式 "i%%m%%g-%d.jpg" 会匹配由以下形式文件组成的序列:i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg,等。

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

ffmpeg -i img.jpeg img.png
glob

选择 glob 通配符模式类型。

这种模式被解释为glob()模式。如果 libavformat 是以支持 glob 编译的,这才可以选择。

glob_sequence (deprecated, will be removed)

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

如果您使用的 libavformat 版本是以支持 glob 编译的,并且提供的模式中至少包含一个 glob 元字符:%*?[]{}且元字符前有未转义的 "%",则模式被解释为glob()模式,否则解释为序列模式。

所有的通配符特殊字符%*?[]{}必须以 "%" 为前缀。要转义百分号 "%" 本身,请使用 "%%"。

例如,模式foo-%*.jpeg将匹配所有以 "foo-" 开头并以 ".jpeg" 结尾的文件名,以及foo-%?%?%?.jpeg将匹配所有以 "foo-" 开头,后跟三字符序列并以 ".jpeg" 结尾的文件名。

这一模式类型已被弃用,建议使用glob序列.

默认值为glob_sequence.

pixel_format

设置要读取图像的像素格式。如果未指定,像素格式将从序列中的第一个图像文件中猜测。

start_number

设置从匹配到的图像文件模式中开始读取的文件索引,默认值为 0。

start_number_range

设置查找序列中的第一个图像文件时要检查的索引间隔范围,从start_number开始。默认值为 5。

ts_from_file

如果设置为 1,将使用图像文件的修改时间设置帧时间戳。请注意,时间戳的单调性无法保证:图像顺序与未开启此选项时一致。默认值为 0。 如果设置为 2,将使用图像文件的修改时间精确到纳秒。

video_size

设置要读取图像的视频尺寸。如果未指定,视频尺寸将从序列中的第一个图像文件中猜测。

export_path_metadata

如果设置为 1,将为输入中找到的元数据添加两个额外字段,并使它们可供其他滤镜使用(参见drawtext滤镜的示例)。默认值为 0。这些额外字段的描述如下:

lavf.image2dec.source_path

对应于正在读取的输入文件的完整路径。

lavf.image2dec.source_basename

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

20.13.1 示例

  • 使用ffmpeg创建一个视频,其中从文件序列中取图像img-001.jpeg, img-002.jpeg,...,假设输入帧率为每秒 10 帧:
    ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv
    
  • 如上,但从序列中索引为 100 的文件开始读取:
    ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv
    
  • 读取匹配 "*.png" 通配符模式的图像,即所有以 ".png" 为后缀的文件:
    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
    

20.14 libgme

Game Music Emu 库是一个用于视频游戏音乐文件的模拟器集合。

请参阅https://bitbucket.org/mpyne/game-music-emu/overview了解更多信息。

它接受以下选项:

track_index

设置要解复用的曲目索引。解复用器只能导出一个曲目。 曲目索引从 0 开始。默认情况下选择第一个曲目。曲目数量导出为tracks元数据项。

sample_rate

设置导出的曲目的采样率。范围是 1000 到 999999。默认值为 44100。

max_size (bytes)

解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小, 从而实质上限制可以读取文件的大小。默认值为 50 MiB。

20.15 libmodplug

基于 ModPlug 的模块解复用器

请参阅https://github.com/Konstanty/libmodplug

它将导出一个 2 通道 16 位 44.1 kHz 的音频流。 可选地,可以导出一个pal816 色的视频流,带或不带打印的元数据。

它接受以下选项:

noise_reduction

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

reverb_depth

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

reverb_delay

设置延迟(单位:毫秒),限制范围为 40-250 毫秒。默认值为 0。

bass_amount

应用低音增强(XBass 或 megabass)。范围是 0(安静)到 100(响亮)。默认值为 0。

bass_range

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

surround_depth

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

surround_delay

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

max_size

解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小, 从而实质上限制可以读取文件的大小。范围为 0 到 100 MiB。 设置为 0 将移除缓冲区大小限制(不推荐)。默认值为 5 MiB。

video_stream_expr

使用 eval API 评估的用于为生成的视频流分配颜色的字符串。 可以使用的变量是x, y, w, h, t, speed, tempo, order, patternrow.

video_stream

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

video_stream_w

设置视频帧宽度(以字符表示,一个字符表示 8 像素)。范围为 20-512。默认值为 30。

video_stream_h

设置视频帧高度(以字符表示,一个字符表示 8 像素)。范围为 20-512。默认值为 30。

video_stream_ptxt

在视频流上打印元数据,包括speed, tempo, order, pattern, rowts(单位:毫秒)。值可以是 1(开)或 0(关)。默认值为 1。

20.16 libopenmpt

基于 libopenmpt 的模块解复用器

请参阅https://lib.openmpt.org/libopenmpt/了解更多信息。

某些文件具有多个子曲(轨道),可以通过subsong选项设置。

它接受以下选项:

subsong

设置子曲索引。可以是 'all','auto' 或子曲的索引。 子曲索引从 0 开始。默认值为 'auto'。

默认值为让 libopenmpt 自动选择。

layout

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

sample_rate

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

20.17 mov/mp4/3gp

Quicktime 文件格式 & ISO/IEC 基本媒体文件格式的解复用器(ISO/IEC 14496-12 或 MPEG-4 Part 12,ISO/IEC 15444-12 或 JPEG 2000 Part 12)。

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

20.17.1 可选项

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

enable_drefs

启用外部轨道加载功能,默认禁用。 启用此功能在某些使用场景下可能泄露信息。

use_absolute_path

允许通过绝对路径加载外部轨道,默认禁用。 启用此功能存在安全风险。仅在源是可信赖的情况下启用。

seek_streams_individually

在寻求时,分别识别每个流中最接近的点,并从识别点开始解复用该流中的包。这可能导致与从头线性解复用不同的包序列。默认值为 true。

ignore_editlist

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

advanced_editlist

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

ignore_chapters

不要解析章节。这包括 GoPro 的“HiLight”标记/时刻。请注意,仅在输入可寻址的情况下解析章节。默认值为 false。

use_mfra_for

对于可寻址的分段输入,如果存在,自媒体分段随机访问箱中设置分段的起始时间戳。

以下选项可用:

auto

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

dts

将 mfra 时间戳设置为 DTS

pts

将 mfra 时间戳设置为 PTS

0

不要使用 mfra 框设置时间戳

use_tfdt

对于分段输入,将分段的起始时间戳设置为baseMediaDecodeTimetfdt中。默认启用,这将优先使用tfdt框来设置 DTS。如禁用,则使用earliest_presentation_timesidx中。在任何情况下,时间戳mfra如果可用,将使用box。use_mfra_for设置为pts或dts。

export_all

导出未识别的box作为udta中的元数据条目。box类型的前四个字符将作为键。默认值为false。

export_xmp

导出整个内容XMP_box以及uuidbox为一个字符串,键为xmp。注意,如果export_all已设置且该选项未设置,XMP_box的内容仍然会被导出,但使用键为XMP_。默认值为false。

activation_bytes

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

audible_fixed_key

处理Audible AAX/AAX+文件的固定密钥。它已预设,因此通常不需要指定。

decryption_key

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

max_stts_delta

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

单位为轨时间比例。范围是0到UINT_MAX。默认值为UINT_MAX - 48000*10,此设置允许48 kHz音频流的DTS校正长达10秒,同时容纳99.9%的uint32范围。

interleaved_read

在解复用级别对多个轨道的包进行交错。对于交错不良的文件,这可以防止由于不同轨道的包之间的间隔较大而导致的播放问题,因为MOV/MP4对包的位置没有要求。然而,这可能会导致在非常交错不良的文件上过度寻道,由于轨道之间的寻道,因此禁用它可能会在一定程度上防止I/O问题,但以牺牲回放为代价。

20.17.2 Audible AAX

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

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

20.18 mpegts

MPEG-2传输流解复用器。

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

resync_size

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

skip_unknown_pmt

跳过PAT中未定义的节目的PMT。默认值为0。

fix_teletext_pts

将teletext包的PTS和DTS值覆盖为使用其所在且未被丢弃的第一个节目的PCR计算的时间戳。默认值为1,如果希望保留teletext包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.19 mpjpeg

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

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

strict_mime_boundary

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

20.20 rawvideo

原始视频解复用器。

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

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

framerate

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

pixel_format

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

video_size

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

例如,读取一个rawvideo文件input.raw,假设像素格式为ffplay,视频大小为rgb24,帧速率为每秒10帧,请使用命令:320x240, and a frame rate of 10 images per second, use the command:

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

20.21 rcwt

RCWT(带时间的原始字幕)是ccextractor本地格式,这是一款常用的开放源代码工具,用于处理608/708闭包字幕(CC)源。有关格式的更多信息,请参见(ffmpeg-formats)rcwtenc.

此解复用器根据2024年3月的规格实现,该规格自2014年4月以来保持稳定且未更改。

20.21.1 示例

  • 使用内置解码器将CC渲染为ASS格式:
    ffmpeg -i CC.rcwt.bin CC.ass
    

    请注意,如果您的输出似乎为空,可能需要手动设置解码器的data_field选项以选择所需的CC子流。

  • 将RCWT备份转换为Scenarist(SCC)格式:
    ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
    

    请注意,SCC格式不支持RCWT中可以存储的所有可能的CC扩展(例如EIA-708)。

20.22 sbg

SBaGen脚本解复用器。

此解复用器读取SBaGen使用的脚本语言,网址为http://uazu.net/sbagen/生成双耳节拍会话。SBG脚本如下:

-SE
a: 300-2.5/3 440+4.5/0
b: 300-2.5/0 440+4.5/3
off: -
NOW      == a
+0:07:00 == b
+0:14:00 == a
+0:21:00 == b
+0:30:00    off

SBG脚本可以混合使用绝对时间戳和相对时间戳。如果脚本仅使用绝对时间戳(包括脚本开始时间)或仅使用相对时间戳,则其布局是固定的,转换是直接的。另一方面,如果脚本混合使用两种时间戳,则NOW参考相对时间戳将从读取脚本时的当前时间获取,并根据该参考冻结脚本布局。这意味着如果脚本直接播放,实际时间将与绝对时间戳匹配(取决于声音控制器的时钟精度),但如果用户以某种方式暂停播放或寻道,则所有时间将相应地偏移。

20.23 tedcaptions

用于TED演讲.

的JSON字幕不提供字幕链接,但可以从页面中推测。FFmpeg源代码树中的文件tools/bookmarklets.html包含一个书签工具以显示它们。

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

start_time

设置TED演讲的开始时间(毫秒)。默认为15000(15秒)。用于将字幕与可下载视频同步,因为它们包括一个15秒的前奏。

示例:将字幕转换为大多数播放器可以理解的格式:

ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt

20.24 vapoursynth

Vapoursynth包装器。

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

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

max_script_size

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

20.25 w64

Sony Wave64音频解复用器。

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

max_size

查看wav解复用器的相同选项。

20.26 wav

RIFF Wave音频解复用器。

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

max_size

指定解复用包的最大包大小(字节)。默认为0,这意味着将根据输入格式选择一个合理值。

21 复用器

复用器是FFmpeg中配置的元素,用于将多媒体流写入特定类型的文件。

在配置您的FFmpeg构建时,所有支持的复用器默认都是启用的。您可以使用configure选项列出所有可用的复用器--list-muxers.

您可以使用configure选项禁用所有复用器--disable-muxers并通过选项--enable-muxer=MUXER / --disable-muxer=MUXER.

选项-muxers使用 ff* 工具将显示已启用的混流器列表。使用-formats来查看已启用的解复用器和混流器的综合列表。

以下是一些当前可用的混流器的描述。

21.1 原始混流器

本节涉及原始混流器。它们接受与指定编解码器匹配的单一流。它们不存储时间戳或元数据。识别的扩展名与混流器名称相同,除非另有指示。

它包括以下混流器。媒体类型以及用于自动从输出扩展名中选择混流器的最终扩展名也显示在这里。

ac3 audio

杜比数字,也称为 AC-3。

adx audio

CRI Middleware ADX 音频。

当输出文件可寻址并且总样本数可以存储在 32 位中时,此混流器将在第一个包开始附近写入总样本数。

aptx audio

aptX(用于蓝牙的音频处理技术)

aptx_hd audio (aptxdh)

aptX HD(用于蓝牙的音频处理技术)音频

avs2 video (avs, avs2)

AVS2-P2(第二代音视频标准-部分2)/ IEEE 1857.4 视频

avs3 video (avs3)

AVS3-P2(第三代音视频标准-部分2)/ IEEE 1857.10 视频

cavsvideo video (cavs)

中国 AVS(第一代音视频标准)

codec2raw audio

Codec 2 音频。

没有注册的扩展名,因此必须提供格式名称,例如在 ffmpeg CLI 工具中-f codec2raw.

data any

通用数据混流器。

此混流器接受任何类型的单一编码流。输入流必须使用-map选项选择ffmpeg命令行工具。

没有注册的扩展名,因此必须提供格式名称,例如在ffmpeg命令行工具中-f data.

dfpwm audio (dfpwm)

原始 DFPWM1a(动态滤波脉冲宽度调制)音频混流器。

dirac video (drc, vc2)

BBC Dirac 视频。

Dirac Pro 编解码器是一个子集并经过 SMPTE VC-2 标准化。

dnxhd video (dnxhd, dnxhr)

Avid DNxHD 视频。

它经过 SMPTE VC-3 标准化。接受 DNxHR 流。

dts audio

DTS 一致声学(DCA)音频

eac3 audio

杜比数字增强版,也称为增强 AC-3

evc video (evc)

MPEG-5 基础视频编码(EVC)/ EVC / MPEG-5 第 1 部分 EVC 视频

g722 audio

ITU-T G.722 音频

g723_1 audio (tco, rco)

ITU-T G.723.1 音频

g726 audio

ITU-T G.726 大端(“左对齐”)音频。

没有注册的扩展名,因此必须提供格式名称,例如在ffmpeg命令行工具中-f g726.

g726le audio

ITU-T G.726 小端(“右对齐”)音频。

没有注册的扩展名,因此必须提供格式名称,例如在ffmpeg命令行工具中-f g726le.

gsm audio

全球移动通信系统音频

h261 video

ITU-T H.261 视频

h263 video

ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 第 2 版视频

h264 video (h264, 264)

ITU-T H.264 / MPEG-4 第 10 部分 AVC 视频。如果是长度前缀模式,比特流将转换为 Annex B 语法。

hevc video (hevc, h265, 265)

ITU-T H.265 / MPEG-H 第 2 部分 HEVC 视频。如果是长度前缀模式,比特流将转换为 Annex B 语法。

m4v video

MPEG-4 第 2 部分视频

mjpeg video (mjpg, mjpeg)

Motion JPEG 视频

mlp audio

Meridian 无损打包,也称为打包 PCM

mp2 audio (mp2, m2a, mpa)

MPEG-1 音频层 II 音频

mpeg1video video (mpg, mpeg, m1v)

MPEG-1 第 2 部分视频。

mpeg2video video (m2v)

ITU-T H.262 / MPEG-2 第 2 部分视频

obu video

AV1 低开销开放比特流单元混流器。

Temporal delimiter OBU 将插入到流的所有时间单元中。

rawvideo video (yuv, rgb)

原始未压缩视频。

sbc audio (sbc, msbc)

蓝牙 SIG 低复杂度子带编解码音频

truehd audio (thd)

杜比 TrueHD 音频

vc1 video

SMPTE 421M / VC-1 视频

21.1.1 示例

  • 使用‘rawvideo’混流器存储原始视频帧ffmpeg:
    ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
    

    由于 rawvideo 混流器不存储有关大小和格式的信息,解流文件时必须提供这些信息:

    ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
    

21.2 原始 PCM 混流器

本节涉及原始 PCM(脉码调制)音频混流器。

它们接受与指定编解码器匹配的单一流。它们不存储时间戳或元数据。识别的扩展名与混流器名称相同。

它包括以下混流器。可选的附加扩展名用于通过输出扩展名自动选择混流器。

alaw (al)

PCM A-law

f32be

PCM 32 位浮点大端

f32le

PCM 32 位浮点小端

f64be

PCM 64 位浮点大端

f64le

PCM 64 位浮点小端

mulaw (ul)

PCM mu-law

s16be

PCM 有符号 16 位大端

s16le

PCM 有符号 16 位小端

s24be

PCM 有符号 24 位大端

s24le

PCM 有符号 24 位小端

s32be

PCM 有符号 32 位大端

s32le

PCM 有符号 32 位小端

s8 (sb)

PCM 有符号 8 位

u16be

PCM 无符号 16 位大端

u16le

PCM 无符号 16 位小端

u24be

PCM 无符号 24 位大端

u24le

PCM 无符号 24 位小端

u32be

PCM 无符号 32 位大端

u32le

PCM 无符号 32 位小端

u8 (ub)

PCM 无符号 8 位

vidc

PCM Archimedes VIDC

21.3 MPEG-1/MPEG-2 程序流混流器

本节涉及属于 MPEG-1 和 MPEG-2 系统家族的格式。

MPEG-1 系统格式(也称为 ISO/IEEC 11172-1 或 MPEG-1 程序流)已被采纳为存储在 VCD(视频光盘)中的媒体轨道的格式。

MPEG-2 系统标准(也称为 ISO/IEEC 13818-1)覆盖了两种容器格式,一种称为传输流,另一种称为程序流;这里只涉及程序流。

MPEG-2 程序流格式(也称为 VOB,因为相应的文件扩展名)是 MPEG-1 程序流的扩展:除了支持音频和视频流的不同编解码器,还存储字幕和导航元数据。 MPEG-2 程序流已被采纳用于在 SVCD 和 DVD 存储设备中存储媒体流。

本节包括以下混流器。

mpeg (mpg,mpeg)

MPEG-1 系统 / MPEG-1 程序流混流器。

vcd

MPEG-1 系统 / MPEG-1 程序流(VCD)混流器。

此混流器可用于生成格式被 VCD(视频光盘)存储设备接受的轨道。

它与‘mpeg’混流器相同,有一些区别。

vob

MPEG-2 程序流(VOB)混流器。

dvd

MPEG-2 程序流(DVD VOB)混流器。

此混流器可用于生成格式被 DVD(数字多功能光盘)存储设备接受的轨道。

这与‘vob’ 复用器有一些不同之处。

svcd (vob)

MPEG-2 程序流 (SVCD VOB) 复用器。

此复用器可用于生成被 SVCD (超级视频光盘) 存储设备接受的轨道格式。

这与 ‘vob’ 复用器有一些不同之处。

21.3.1 选项

muxrate 速率

设置用户定义的复用速率,以位/秒为单位表示。如果未指定,则采用自动计算的复用速率。默认值为0.

preload 延迟

设置初始解复用-解码延迟,以微秒为单位。默认值为500000.

21.4 MOV/MPEG-4/ISOMBFF 复用器

本节涵盖属于 QuickTime / MOV 系列的格式,包括 MPEG-4 第14部分格式和 ISO 基本媒体文件格式 (ISOBMFF)。这些格式基于 ISO 基本媒体文件格式 (ISOBMFF) 共享一个通用结构。

MOV 格式最初是为 Apple QuickTime 使用而开发的。后来成为 MPEG-4 第1部分(后来的第14部分)格式的基础,也被称为 ISO/IEC 14496-1。后来该格式被概括为 ISOBMFF,也称为 MPEG-4 第12部分格式、ISO/IEC 14496-12 或 ISO/IEC 15444-12。

它由以下复用器组成。

3gp

第三代合作伙伴计划 (3GPP) 格式,用于3G UMTS多媒体服务

3g2

第三代合作伙伴计划2 (3GP2 或 3GPP2) 格式,用于3G CDMA2000多媒体服务,与 ‘3gp’ 格式类似,但有扩展和限制

f4v

Adobe Flash 视频格式

ipod

MPEG-4 音频文件格式,与 MOV/MP4类似但仅限包含音频流,通常用于 Apple iPod设备播放

ismv

Microsoft IIS (Internet Information Services) 平滑流媒体音频/视频 (ISMV 或 ISMA) 格式。此格式基于 MPEG-4 第14部分格式,但具有一些不兼容的变体,用于 Microsoft IIS 服务器的媒体文件流传输。

mov

QuickTime播放器格式,由.mov扩展标识

mp4

MP4 或 MPEG-4 第14部分格式

psp

PlayStation Portable MP4/MPEG-4 第14部分格式变体。此格式基于 MPEG-4 第14部分格式,但具有一些不兼容的变体,用于在 PlayStation 设备上播放文件。

21.4.1 分片

mov’, ‘mp4’,和 ‘ismv’ 复用器支持分片功能。通常,MOV/MP4文件的所有数据包元数据都存储在一个位置。

这些数据通常写在文件末尾,但可以通过添加+faststart-movflags,或使用qt-faststart工具将其移至文件开头以便更好的播放。

分片文件包含若干分片,其中数据包和有关这些数据包的元数据存储集中在一起。写入分片文件的好处是,即使写入中断,文件仍可解码(而正常的 MOV/MP4 如果没有正确完成则不可解码),并且写入非常长的文件时需要较少的内存(因为写入正常的 MOV/MP4文件会将每个单独数据包的信息存储在内存中,直到文件关闭)。缺点是它与其他应用程序的兼容性较差。

通过设置确定如何将文件切分为分片的选项可开启分片功能:

frag_duration
frag_size
min_frag_duration
movflags +frag_keyframe
movflags +frag_custom

如果指定了多个条件,只需满足一个指定条件时就会切分片。例外是选项min_frag_duration,必须满足才能应用其他条件。

21.4.2 选项

brand 主要品牌

覆盖主要品牌。

empty_hdlr_name 布尔

启用以跳过在hdlr框内写入名称。默认值为false.

encryption_key 密钥

以十六进制格式设置媒体加密密钥

encryption_kid 密钥标识

以十六进制格式设置媒体加密密钥标识符

encryption_scheme 方案

配置加密方案,允许的值为 ‘none’,和 ‘cenc-aes-ctr

frag_duration 持续时间

生成持续时间为duration微秒的分片。

frag_interleave 数字

在分片内交错样本(连续样本的最大数量,较低值交错更紧密,但开销更高)。默认值为0

frag_size 大小

生成分片包含最多size字节的负载数据

iods_audio_profile 配置文件

为音频配置文件原子指定 iods 编号(从 -1 到 255),默认值为-1

iods_video_profile 配置文件

为视频配置文件原子指定 iods 编号(从 -1 到 255),默认值为-1

ism_lookahead 条目数

为 ISM 文件指定 Lookahead 条目数(从 0 到 255),默认值为0

min_frag_duration 时长

不要创建比duration微秒短的分片

moov_size 字节

在文件开头保留 moov 元素的空间,而不是将 moov 元素放在结尾处。如果保留空间不足,复用将失败。

mov_gamma 伽马值

为 gama 元素指定伽马值(作为十进制数,从0到10),默认值为0.0,必须与+ movflags

movflags 标志

设置各种复用开关。以下标志可用:

cmaf

写入 CMAF(通用媒体应用格式)兼容的分片 MP4 输出

dash

写入 DASH(动态自适应 HTTP 流媒体)兼容的分片 MP4 输出

default_base_moof

与 ‘omit_tfhd_offset’ 标志类似,此标志通过使用新的 default-base-is-moof 标志避免了在 tfhd 原子中写入绝对的 base_data_offset 字段。此标志是自 14496-12:2012 以来的新标志。这可能使得片段在某些情况下更容易解析(避免基于先前轨道片段隐式结束来计算轨道片段位置)。

delay_moov

延迟写入初始 moov,直到切分第一个分片或刷新第一个分片

disable_chpl

禁用 Nero 章节标记(chpl 元素)。通常,文件中既写入 Nero 章节也写入 QuickTime 章节轨道。设置此选项后,仅写入 QuickTime 章节轨道。Nero 章节可能在文件重新处理时引起某些标记程序的失败,例如 mp3Tag 2.61a 和 iTunes 11.3,可能其他版本也会受到影响。

faststart

执行第二次移动索引(moov 元素)到文件开头操作。此操作可能需要一段时间,并且在某些情况下(例如分片输出)不起作用,因此默认状态下未启用。

frag_custom

允许调用方手动选择何时切分片,通过调用av_write_frame(ctx, NULL)以写入片段和当前写入的数据包。(这仅对其他集成 libavformat 的应用程序有用,而不是从ffmpeg.)

frag_discont

表示下一个片段与之前的片段不连续

frag_every_frame

每一帧切分片

frag_keyframe

在每个视频关键帧处开始新的分片

global_sidx

在文件开头写入全局 sidx 索引

isml

创建实时平滑流媒体馈送(用于推送到发布点)

negative_cts_offsets

启用使用 CTTS 元素的版本 1,其中 CTS 偏移量可以为负值。这使得初始样本的 DTS/CTS 为零,并减少了某些情况下对编辑列表的需求,例如包含 B 帧的视频轨道。此外,简化了遵守 DASH-IF 互操作性指南。

写入 ‘ismv’(Smooth Streaming)文件时隐式设置此选项。

omit_tfhd_offset

不要在 tfhd 原子中写入任何绝对的 base_data_offset。这避免绑定片段至文件/流中的绝对字节位置。

prefer_icc

如果写入 colr 元素,优先使用 ICC 配置文件(如果在流数据包侧数据中存在)。

rtphint

向输出文件添加 RTP 提示轨道

separate_moof

为每个轨道写入独立的 moof(电影片段)元素。通常,所有轨道的数据包都写入一个 moof 元素(稍微更高效),但设置此选项后,复用器会为每个轨道写入一个 moof/mdat 对,使得更容易分离轨道。

skip_sidx

跳过写入 sidx 元素。当由于 sidx 元素引起的比特率开销较高时,此选项可用于 sidx 元素不是强制要求的情况。当启用了 ‘global_sidx’ 标志时,此选项将被忽略。

skip_trailer

跳过为分片文件写入mfra/tfra/mfro尾部

use_metadata_tags

使用mdta原子用于元数据

write_colr

即使颜色信息未指定,也写入colr原子。此标志为实验性,可能会重命名或更改,请勿在脚本中使用。

write_gama

写入已弃用的gama原子

hybrid_fragmented

为了可恢复性——将输出文件写作为分片文件。这使得在写入过程中可以读取中间文件(尤其是在写入过程未正常结束时)。写入完成后,文件会转换为常规的、非分片文件,这样更兼容且更易于快速定位。

如果写入被中止,中间文件可以手动进行重新混流,以便得到常规的、非分片文件,它包含已写入未完成文件的内容。

movie_timescale 比例

设置电影头部框中写入的时间比例(mvhd)。范围为1到INT_MAX。默认值为1000.

rtpflags 标志

向输出文件添加RTP提示轨道。

可以使用以下标志:

h264_mode0

对H.264使用模式0进行RTP

latm

对AAC使用MP4A-LATM分包,而非MPEG4-GENERIC

rfc2190

对H.263使用RFC 2190分包,而非RFC 4629

send_bye

完成时发送RTCP BYE数据包

skip_rtcp

不发送RTCP发送者报告

skip_iods 布尔值

跳过写入iods原子(默认值为true)

use_editlist 布尔值

使用编辑列表(默认值为auto)

use_stream_ids_as_track_ids 布尔值

使用流ID作为轨道ID(默认值为false)

video_track_timescale 比例

设置用于视频轨道的时间比例。范围为0到 INT_MAX。如果设置为0,时间比例会根据原生流时间基自动设置。默认值为0.

write_btrt 布尔值

强制或禁用在轨道的stsd框中写入比特率框。该框包含解码缓冲区大小(字节数)、最大比特率和平均比特率。若这些值均无法计算,则跳过该框。默认值为-1auto,仅在MP4模式下写入该框。

write_prft 选项

使用指定的时间源将制作时间参考框(PRFT)写入PRFT框的NTP字段。将值设置为‘wallclock’以指定时间源为墙上时钟时间,将值设置为‘pts’以指定时间源为输入数据包的PTS值。

write_tmcd 布尔值

指定on以强制写入时间码轨道,off以禁用它,auto仅为mov和mp4输出时写入时间码轨道(默认)。

将值设置为‘pts’仅适用于实时编码场景,在此场景下PTS值设置为源的墙上时钟时间。例如,在编码场景中使用decklink捕获源,其中video_ptsaudio_pts设置为‘abs_wallclock’.

21.4.3 示例

  • 将实时平滑流媒体内容推送到IIS上的发布点,使用‘ismv’复用器ffmpeg:
    ffmpeg -re <正常输入/转码选项> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
    

21.5 a64

A64 Commodore 64视频复用器。

此复用器接受单个a64_multia64_multi5编解码视频流。

21.6 ac4

原始AC-4音频复用器。

此复用器接受单个ac4音频流。

21.6.1 选项

write_crc 布尔值

启用时,为每个数据包写入CRC校验和到输出,默认值为false

21.7 adts

音频数据传输流复用器。

它接受单个AAC流。

21.7.1 选项

write_id3v2 布尔值

启用在流开头写入ID3v2.4标签。默认值为禁用。

write_apetag 布尔值

启用在流末尾写入APE标签。默认值为禁用。

write_mpeg2 布尔值

启用在ADTS帧头中设置MPEG版本位为1,表示MPEG-2。默认值为0,表示MPEG-4。

21.8 aea

MD STUDIO音频复用器。

此复用器接受一个ATRAC1音频流,最多为双声道,采样率为44100Hz。

由于AEA支持存储曲目标题,此复用器还会将流的元数据标题写入容器。

21.9 aiff

音频交互文件格式复用器。

21.9.1 选项

write_id3v2 布尔值

启用时写ID3v2标签,设置为1时默认启用。默认值为0(禁用)。

id3v2_version 布尔值

选择要写入的ID3v2版本。目前仅支持版本3和4(即ID3v2.3和ID3v2.4)。默认版本为4。

21.10 alp

High Voltage Software的Lego Racers游戏音频复用器。

它接受一个ADPCM_IMA_ALP流,最多为双声道,采样率不超过44100Hz。

扩展版本:tun, pcm

21.10.1 选项

type 类型

设置文件类型。

类型接受以下值:

tun

将文件类型设置为音乐。必须具有22050Hz的采样率。

pcm

将文件类型设置为音效。

auto

根据输出文件扩展名设置文件类型。.pcm结果为 typepcm否则typetun被设置。(默认)

21.11 amr

3GPP AMR(自适应多速率)音频复用器。

它接受一个包含AMR NB流的音频流。

21.12 amv

AMV(Actions Media Video)格式复用器。

21.13 apm

Ubisoft Rayman 2 APM音频复用器。

它接受单一的ADPCM IMA APM音频流。

21.14 apng

动画PNG(便携式网络图形)复用器。

它接受单一APNG视频流。

21.14.1 选项

final_delay 延迟

强制在每次重复的最后一帧后设定以秒为单位的延迟时间。默认值是0.0.

plays 重复次数

指定内容播放的次数,0导致无限循环,1没有循环

21.14.2 示例

  • 使用ffmpeg生成具有两次重复并在第一次重复后延迟半秒的APNG输出:
    ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
    

21.15 argo_asf

Argonaut Games ASF音频复用器。

它接受单一ADPCM音频流。

21.15.1 选项

version_major 版本

覆盖文件主版本号,指定为整数,默认值是2

version_minor 版本

覆盖文件次版本号,指定为整数,默认值是1

name 名称

将文件名嵌入文件中,如果未指定则使用输出文件名。名称截断为8个字符。

21.16 argo_cvg

Argonaut Games CVG音频复用器。

它接受单一单声道22050Hz ADPCM音频流。

loopreverb选项设置标头中的对应标志,这些标志可在以后检索以相应地处理音频流。

21.16.1 选项

skip_rate_check 布尔值

跳过采样率检查(默认值为false)

loop 布尔值

设置循环标志(默认值为false)

reverb 布尔值

设置混响标志(默认值为true)

21.17 asf, asf_stream

高级/活动系统格式或流式音频复用器。

应选择‘asf_stream’变体用于流式传输。

需要注意的是,Windows Media Audio(WMA)和Windows Media Video(WMV)也使用此复用器。

21.17.1 选项

packet_size 大小

设置复用器数据包大小,以字节为单位。通过调整此设置,可以减少数据碎片或复用器开销,这取决于您的源。默认值是3200,最小值是100,最大值是64Ki.

21.18 ass

ASS/SSA(SubStation Alpha)字幕复用器。

它接受单一ASS字幕流。

21.18.1 选项

ignore_readorder 布尔值

立即写入对话事件,即使它们是乱序的,默认值为false,否则事件会被缓存直到找到预期的时间事件。

21.19 ast

AST(音频流)复用器。

此格式用于在某些Nintendo Wii游戏中播放音频。

它接受单一音频流。

loopstartloopend选项可用于定义文件的一个部分以便播放器遵循这些选项进行循环。

21.19.1 选项

loopstart 开始

指定循环开始的位置,以毫秒表示,从-1INT_MAX,如果-1被设置,则不指定循环(默认值-1),并且loopend值被忽略。

loopend 结束

指定循环结束的位置,以毫秒表示,从0INT_MAX,默认值是0,如果0被设置,它假定为总流持续时间。

21.20 au

SUN AU音频复用器。

它接受单一音频流。

21.21 avi

音频视频交错复用器。

AVI是由微软开发的专有格式,后来通过Open DML规范正式定义。

由于播放器实现之间的差异,可能需要设置某些选项以确保生成的输出能够被目标播放器正确播放。

21.21.1 选项

flipped_raw_rgb 布尔值

如果设置为true,为原始RGB位图存储正高度,这表示位图是自底向上的存储。注意,此选项不会翻转位图,必须在之前手动完成,例如通过使用‘vflip’ 过滤器。默认值是false,表示位图是自顶向下存储。

reserve_index_space 大小

为文件头内每个流的OpenDML主索引保留指定数量的字节。默认情况下,如果第一个主索引中没有剩余空间,额外的主索引会嵌入到数据包中,并作为一个索引链链接。这种索引结构可能在某些使用场景中引发问题,例如严格依赖OpenDML索引规范的第三方软件或文件搜索较慢的情况。在文件头中保留足够的索引空间可以避免这些问题。

所需索引空间取决于输出文件大小,大约每GB需要16字节。当此选项被省略或设置为零时,会猜测必要的索引空间。

默认值是0.

write_channel_mask 布尔值

将通道布局掩码写入音频流标头。

此选项默认启用。禁用通道掩码在特定情况下可能有用,例如将多个音频流合并为一个,以兼容仅支持AVI中单音频流的软件(参见(ffmpeg-filters)ffmpeg过滤器手册中的“amerge”部分).

21.22 avif

AV1(开放媒体联盟视频编码1)图像格式复用器。

此复用器存储使用AV1编码的图像。

它接受一个或两个视频流。如果提供两个视频流,第二个必须包含一个存储alpha通道的单独平面。

如果提供多个图像,生成的输出会被视为动态AVIF,可以通过loop选项来指定循环次数。

基于开放媒体联盟在以下网址的规范https://aomediacodec.github.io/av1-avif.

21.22.1 选项

loop count

动态AVIF循环的次数,0指定为无限循环,默认值为0

movie_timescale timescale

设置写入电影头部框中的时间刻度 (mvhd)。范围是1到INT_MAX。默认值为1000.

21.23 avm2

ShockWave Flash (SWF)/ActionScript Virtual Machine 2 (AVM2) 格式复用器。

它接受一个音频流、一个视频流,或者两者。

21.24 bit

G.729 (.bit) 文件格式复用器。

它接受一个G.729音频流。

21.25 caf

Apple CAF(核心音频格式)复用器。

它接受一个音频流。

21.26 codec2

Codec2音频复用器。

它接受一个codec2音频流。

21.27 chromaprint

Chromaprint指纹复用器。

要启用该滤镜的编译,需要使用以下配置FFmpeg:--enable-chromaprint.

此复用器向Chromaprint库提供音频数据,从而为提供的音频数据生成指纹。参见:https://acoustid.org/chromaprint

它接受最多2通道的签名本地字节序16位原始音频流。

21.27.1 选项

algorithm version

选择用于生成指纹的算法版本。范围是04。版本3启用静音检测。默认值为1.

fp_format format

输出指纹的格式。接受以下选项:

base64

Base64压缩指纹(default)

compressed

二进制压缩指纹

raw

二进制原始指纹

silence_threshold threshold

检测静音的阈值。范围为-132767,其中-1禁用静音检测。 静音检测只能与版本3的算法一起使用。

使用AcoustID服务时必须禁用静音检测。默认值为-1.

21.28 crc

CRC(循环冗余校验)复用器。

此复用器计算并打印所有输入音频和视频帧的Adler-32 CRC。默认情况下,音频帧被转换为签名16位原始音频,视频帧被转换为原始视频,然后计算CRC。

复用器的输出由以下形式的单行组成: CRC=0xCRC,其中CRC是一个填充到8位的十六进制数字,包含所有解码的输入帧的CRC。

另请参见framecrc复用器。

21.28.1 示例

  • 使用ffmpeg计算输入的CRC,并将其存储在文件中out.crc:
    ffmpeg -i INPUT -f crc out.crc
    
  • 使用ffmpeg通过以下命令将CRC打印到标准输出:
    ffmpeg -i INPUT -f crc -
    
  • 您可以通过指定音频和视频编解码器及格式来选择每帧的输出格式。例如,要计算音频转换为PCM无符号8位,视频转换为MPEG-2后的输入的CRC,请使用以下命令:ffmpeg by specifying the audio and video codec and format. For example, to compute the CRC of the input audio converted to PCM unsigned 8-bit and the input video converted to MPEG-2 video, use the command:
    ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
    

21.29 dash

动态HTTP自适应流(DASH)复用器。

此复用器根据MPEG-DASH标准ISO/IEC 23009-1:2014和后续标准更新创建段和清单文件。

有关详细信息,请参见:

此复用器为每个流创建一个MPD(媒体呈现描述)清单文件和段文件。段文件放置在与MPD清单文件相同的目录中。

段文件名中可以包含在清单SegmentTemplate节定义的预定义标识符,标准的第5.3.9.4.4节中有详细说明。

可用的标识符有$RepresentationID$, $Number$, $Bandwidth$,和$Time$。除了标准标识符,还支持一个特定于ffmpeg的$ext$标识符。当使用时,ffmpeg将用复用格式扩展名(如$ext$等)替换文件名中的mp4, webm

21.29.1 选项

adaptation_sets adaptation_sets

分配流到MPD清单中AdaptationSets节的适配集。

适配集包含作为单个子集访问的一组流,例如编码为不同大小的对应流,可以由用户根据可用带宽选择,或者具有不同语言的不同音频流。

每个适配集使用以下语法指定:

id=index,streams=streams

其中index必须是一个数字索引,streams,-分隔的流索引序列。多个适配集可以用空格分隔指定。

将所有视频(或音频)流映射到一个自适应集,v(或a)可以用作流标识符,而不是 ID。

当未定义分配时,默认每个流对应一个自适应集。

还可以指定以下可选字段:

descriptor

根据 ISO/IEC 23009-1:2014/Amd.2:2015 定义描述符。

例如:

<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>

描述符字符串应为一个自关闭的 XML 标签。

frag_duration

覆盖通过frag_duration选项指定的全局片段时长。

frag_type

覆盖通过frag_type选项指定的全局片段类型。

seg_duration

覆盖通过seg_duration选项指定的全局片段时长。

trick_id

将一个自适应集标记为包含用于参考自适应集的快速模式的流。

以下是参数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
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
dash_segment_type 类型

设置 DASH 片段文件类型。

可能的值:

auto

DASH 片段文件格式将基于流编解码器选择。这是默认模式。

mp4

DASH 片段文件将采用 ISOBMFF/MP4 格式

webm

DASH 片段文件将采用 WebM 格式

extra_window_size 大小

设置在磁盘上移除之前保留在清单之外的最大片段数量。

format_options 选项列表

使用:-分隔的键值对列表设置容器格式(mp4/webm)选项。包含:特殊字符的值必须进行转义。

frag_duration 持续时间

设置片段内的时长(以秒为单位),也可以设置小数值。

frag_type 类型

设置分片的时间间隔类型。

可能的值:

auto

为每段设置一个片段

every_frame

以每帧分片

duration

在特定时间间隔分片

pframes

在关键帧和后续 P 帧重新排序处分片(仅限视频,实验性)

global_sidx 布尔值

写入全局SIDX原子。仅适用于单个文件、mp4 输出和非流模式。

hls_master_name 文件名

HLS 主播放列表名称。默认值为master.m3u8.

hls_playlist 布尔值

生成 HLS 播放列表文件。主播放列表以选项hls_master_name指定的文件名生成。每个流生成一个媒体播放列表文件,文件名为media_0.m3u8, media_1.m3u8等。

http_opts HTTP 选项

指定一个:-分隔的键值对选项列表,用于传递到底层的 HTTP 协议。仅适用于 HTTP 输出。

http_persistent 布尔值

使用持久 HTTP 连接。仅适用于 HTTP 输出。

http_user_agent 用户代理

覆盖 HTTP 头中的 User-Agent 字段。仅适用于 HTTP 输出。

ignore_io_errors 布尔值

忽略打开和写入期间的 IO 错误。适用于长时运行的网络输出。此项默认禁用。

index_correction 布尔值

启用或禁用段索引校正逻辑。仅当use_template启用且use_timeline禁用时适用。此项默认禁用。

启用时,该逻辑会监控片段索引的流动。如果某个流的片段索引值不在预期的实时位置,则逻辑会校正该索引值。

通常此逻辑在实时流媒体使用情况下需要。网络带宽在长时间流媒体播放期间都有波动。这些波动可能导致片段索引落后于预期的实时位置。

init_seg_name 初始化名称

用于初始化片段的 DASH 模板名称。默认值为init-stream$RepresentationID$.$ext$. $ext$会替换为片段格式特定的文件扩展名。

ldash 布尔值

通过限制某些元素的存在和值启用低延迟 Dash。默认情况下禁用。

lhls 布尔值

启用低延迟 HLS (LHLS)。添加#EXT-X-PREFETCH标签和当前片段的 URI。hls.js 播放器团队正在尝试标准化一个开放的 LHLS 规范。规范草案可见于https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md.

此选项试图遵守上述开放规范。它会自动启用streaminghls_playlist选项。这是一个实验性功能。

注意:这不是苹果的 LHLS 版本。详见https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis

master_m3u8_publish_rate 片段间隔计数

每隔指定数量的片段间隔重复发布主播放列表。

max_playback_rate 速率

设置最大播放速率,指示适合在客户进行正常播放时自动调整播放延迟和缓冲占用。

media_seg_name 片段名称

用于媒体片段的 DASH 模板名称。默认值为chunk-stream$RepresentationID$-$Number%05d$.$ext$. $ext$会替换为片段格式特定的文件扩展名。

method 方法

使用指定的 HTTP 方法创建输出文件。通常设置为PUTPOST.

min_playback_rate 速率

设置最小播放速率,指示适合在客户进行正常播放时自动调整播放延迟和缓冲占用。

mpd_profile 标志

设置一个或多个 MPD 清单配置文件。

可能的值:

dash

MPEG-DASH ISO 基本媒体文件格式实时配置文件

dvb_dash

DVB-DASH 配置文件

默认值为dash.

remove_at_exit 布尔值

启用或禁用在完成时移除所有片段。此项默认禁用。

seg_duration 持续时间

设置片段时长(以秒为单位,可设置小数值)。当use_template选项启用且use_timeline选项禁用时,该值被视为平均片段时长,其他情况下被视为最小片段时长。

默认值是5.

single_file 布尔值

启用或禁用将所有片段存储在一个文件中的功能,可通过字节范围访问。默认情况下禁用。

可通过以下选项指定单个文件的名称single_file_name选项,如果未指定,则假定为清单文件的基本名称加输出格式的扩展名。

single_file_name 文件名

用于清单的DASH模板化名称baseURL元素。隐含设置了single_file选项为true。在模板中,$ext$将替换为特定于片段格式的文件扩展名。

streaming 布尔值

启用或禁用输出的分块流模式。在分块流模式下,每帧将成为一个moof片段,形成一个分块。默认情况下禁用。

target_latency 目标延迟

为服务设置预期目标延迟(可以设置小数值)。仅当streamingwrite_prft选项启用时适用。这是一个信息字段,客户端可以用来衡量服务的延迟。

timeout 超时

设置套接字I/O操作的超时时间,以秒为单位(可以设置小数值)。仅对HTTP输出适用。

update_period 周期

设置用于动态内容的MPD更新周期。单位为秒。如果设置为0,周期将自动计算。

默认值是0.

use_template 布尔值

启用或禁用使用SegmentTemplate而不是SegmentList在清单中。默认是启用的。

use_timeline 布尔值

启用或禁用在SegmentTimeline清单部分中使用SegmentTemplate。默认启用。

utc_timing_url URL

返回ISO格式UTC时间戳的页面URL,例如https://time.akamai.com/?iso

window_size 大小

设置清单中保留的最大片段数,丢弃最旧的。这对实时流很有用。

如果该值为0,则在清单中保留所有片段。默认值是0.

write_prft 写入_prft

为支持的流写入Producer Reference Time元素。这也使得在底层复用器中写入_prft盒子仅在utc_url选项启用时适用。默认为自动,在这种情况下,复用器将尝试仅在需要的模式下启用它。

21.29.2 示例

生成一个从输入源实时读取的DASH输出,使用ffmpeg.

从输入文件生成两个多媒体流,它们都包含一个通过libx264编码的视频流和一个通过libfdk_aac编码的音频流。第一个多媒体流包含比特率为800k的视频和默认比特率的音频;第二个流则将视频缩放到320x170像素,使用300k比特率,并将音频重采样为22005 Hz。

window_size选项仅保留最近的5个片段,每个片段的默认时长为5秒。

ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
-b:v:0 800k -profile:v:0 main \
-b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \
-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

21.30 daud

D-Cinema音频复用器。

它接受单个6声道的音频流,该流需重新采样为96000 Hz并用pcm_24daud编解码器进行编码。

21.30.1 示例

使用ffmpeg将输入音频复用为5.1通道布局,并重新采样为96000Hz:

ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302

对于7.0版本之前的ffmpeg,你可能需要使用asetnsamples过滤器来限制复用的数据包大小,因为此格式不支持复用大于65535字节(3640样本)的数据包。对于较新的ffmpeg版本,音频会自动打包为36000字节(2000样本)的数据包。

21.31 dv

DV(数字视频)复用器。

它仅接受一个dvvideo视频流,最多两个pcm_s16音频流。更多限制受视频属性约束,视频必须符合支持的DV视频配置文件,且需要匹配帧率。

21.31.1 示例

使用ffmpeg转换输入:

ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv

21.32 ffmetadata

FFmpeg元数据复用器。

此复用器将流的元数据写为ffmetadata格式。

参见(ffmpeg-formats)的元数据章节了解有关格式的信息。

21.32.1 示例

使用ffmpeg将输入文件的元数据提取到metadata.ffmeta文件中,格式为ffmetadata

ffmpeg -i INPUT -f ffmetadata metadata.ffmeta

21.33 fifo

FIFO(先进先出)复用器。

fifo’伪复用器允许通过使用先进先出的队列将编码和复用分开,并在单独的线程中运行实际复用器。

这在与组合使用时特别有用,并可用于将数据发送到多个具有不同可靠性/写入速度/延迟的目标。 muxer and can be used to send data to several destinations with different reliability/writing speed/latency.

目标复用器可以从输出名称中选择,也可以通过fifo_format选项指定。

fifo’复用器在队列填满或输出失败(例如无法将数据包写入输出)时的行为是可配置的:

  • 可以使用基于实时或流处理时间的可配置延迟透明地重新启动输出。
  • 在临时失败期间,编码可以被阻塞,或者在FIFO队列填满时透明地丢弃数据包后继续。

API用户应了解回调函数interrupt_callback, io_openio_closeAVFormatContext中使用时必须是线程安全的。

21.33.1 选项

attempt_recovery 布尔值

如果发生故障,尝试恢复输出。这在与网络输出一起使用时特别有用,因为它使得可以透明地重新启动流媒体。默认情况下,此选项设置为false.

drop_pkts_on_overflow 布尔值

如果设置为true,在 fifo 队列满时,数据包将被丢弃而不是阻塞编码器。这使得可以在不延迟输入的情况下继续流媒体,但代价是省略流的一部分。默认情况下,此选项设置为false,因此在这种情况下,编码器将被阻塞,直到复用器处理一些数据包且没有数据包丢失。

fifo_format 格式名称

指定格式名称。如果无法从输出名称后缀中推断出格式名称,这会很有用。

format_opts 选项

为底层复用器指定格式选项。复用器选项可以作为=对的列表,使用 ':' 分隔。

max_recovery_attempts 计数

设置最大连续恢复尝试失败的次数,超过此次数输出将永久失败。默认情况下,此选项设置为0(无限制)。

queue_size 大小

指定队列大小为数据包数。默认值为60.

recover_any_error 布尔值

如果设置为true,无论导致故障的错误类型如何,都将尝试恢复。默认情况下,此选项设置为false,对于某些特定的(通常是永久性的)错误,即使attempt_recovery选项设置为true.

recovery_wait_streamtime 布尔值

如果设置为false,尝试恢复时将使用实时时间(即在recovery_wait_time选项指定的时间后尝试恢复)。

如果设置为true,将改为考虑已处理流的时间(即,在丢弃与recovery_wait_time选项相对应的数据包后尝试恢复)。

默认情况下,此选项设置为false.

recovery_wait_time 持续时间

指定在前一次恢复尝试失败后等待下一次恢复尝试前的时间(以秒为单位)。默认值为5.

restart_with_keyframe 布尔值

指定在从队列溢出或失败中恢复后是否等待关键帧。默认情况下,此选项设置为false

timeshift 持续时间

缓冲指定数量的数据包并延迟写入输出。请注意,queue_size选项的值必须足够大以存储用于时间平移的数据包。在输入结束时,fifo 缓冲区将以实时速度刷新。

21.33.2 示例

使用ffmpeg向 RTMP 服务器流媒体,即使出现暂时性故障(网络中断)也能以实时速率继续处理流媒体,并无限期地每秒尝试一次恢复流媒体:

ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \
  -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \
  -map 0:v -map 0:a rtmp://example.com/live/stream_name

21.34 film_cpk

Sega 电影 (.cpk) 复用器。

这种格式在几款 Sega 游戏中用作内部格式。

有关 Sega 电影文件格式的更多信息,请访问http://wiki.multimedia.cx/index.php?title=Sega_FILM.

最多接受一个 'cinepak' 或原始视频流,以及一个音频流。

21.35 filmstrip

Adobe Filmstrip 复用器。

此格式由多个 Adobe 工具用于存储生成的电影胶片导出。它仅接受单个原始视频流。

21.36 fits

灵活图像传输系统 (FITS) 复用器。

此图像格式用于存储天文学数据。

有关此格式的更多信息,请访问https://fits.gsfc.nasa.gov.

21.37 flac

原始 FLAC 音频复用器。

此复用器仅接受一个 FLAC 音频流。此外,还可以添加带有 'attached_pic’.

21.37.1 选项

write_header 布尔值

如果设置为true,则写入文件头,默认值为true

21.37.2 示例

使用ffmpeg从输入文件中存储音频流,同时与带有 'attached_pic' 属性的多张图片一起存储:

ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT

21.38 flv

Adobe Flash 视频格式复用器。

21.38.1 选项

flvflags 标志

可能的值:

aac_seq_header_detect

基于音频流数据放置 AAC 序列头。

no_sequence_end

禁用序列结束标签。

no_metadata

禁用元数据标签。

no_duration_filesize

在流结束时,禁用当持续时间和文件大小均为零时的元数据(用于不可搜索的实时流)。

add_keyframe_index

用于简化搜索功能,尤其是用于 HTTP 伪流媒体。

21.39 framecrc

每包 CRC(循环冗余校验)测试格式。

此复用器会为每个音频和视频数据包计算并打印 Adler-32 CRC。默认情况下,音频帧会被转换为有符号的 16 位原始音频,而视频帧会被转换为原始视频,随后再计算 CRC。

复用器的输出由每个音频和视频数据包对应的一行组成,格式如下:

流索引, 数据包 DTS, 数据包 PTS, 数据包持续时间, 数据包大小, 0xCRC

CRC是一个用 0 填充到 8 位的十六进制数字,包含数据包的 CRC。

21.39.1 示例

例如,要计算INPUT中音频和视频帧的 CRC,将其转换为原始音频和视频数据包,并将结果存储在文件out.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.40 framehash

每包哈希测试格式。

该复用器为每个音频和视频包计算并打印一个加密哈希。这可以用于逐包的相等性检查,而无需逐个做二进制比较。

默认情况下,音频帧会被转换为有符号16位原始音频,视频帧会被转换为原始视频,然后计算哈希,但显式转换为其他编解码器的输出也可用。默认使用SHA-256加密哈希函数,但支持多种其他算法。

复用器的输出由每个音频和视频包的一行组成,格式如下:

流索引, 包DTS, 包PTS, 包持续时间, 包大小, 哈希

哈希是表示已计算出的包哈希的一个十六进制数字。

hash 算法

使用由字符串指定的加密哈希函数算法。 支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32以及adler32.

21.40.1 示例

要计算INPUT中音频和视频帧的SHA-256哈希, 将其转换为原始音频和视频包,并将其存储到文件中out.sha256:

ffmpeg -i INPUT -f framehash out.sha256

要使用MD5哈希函数将信息打印到标准输出,使用以下命令:

ffmpeg -i INPUT -f framehash -hash md5 -

另请参见哈希复用器。

21.41 framemd5

每包MD5测试格式。

这是一个framehash复用器的变体。与该复用器不同, 它默认使用MD5哈希函数。

21.41.1 示例

要计算INPUT中音频和视频帧的MD5哈希, 将其转换为原始音频和视频包,并将其存储到文件中out.md5:

ffmpeg -i INPUT -f framemd5 out.md5

要将信息打印到标准输出,使用以下命令:

ffmpeg -i INPUT -f framemd5 -

另请参见framehashmd5复用器。

21.42 gif

动画GIF复用器。

注意,GIF格式有一个非常大的时间基准:两帧之间的延迟因此不能小于一百分之一秒。

21.42.1 选项

loop 布尔值

设置输出循环的次数。使用-1表示不循环,0表示无限循环(默认值)。

final_delay 延迟

强制设置最后一帧后的延迟(以百分秒表示)。每帧结束时都会有一个延迟,直到下一帧。默认值为-1,这是一个特殊值,告诉复用器重用以前的延迟。在循环的情况下,您可能希望自定义此值以标记暂停时间。

21.42.2 示例

编码一个循环10次的GIF,循环之间有5秒的延迟:

ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif

注意1:如果您希望将帧提取为单独的GIF文件,需要强制使用image2复用器:

ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"

21.43 gxf

通用交换格式(GXF)复用器。

GXF由Grass Valley Group开发,然后由SMPTE标准化为SMPTE 360M,并在SMPTE RDD 14-2007中扩展以包括高分辨率视频。

它最多接受一个视频流的编解码器为‘mjpeg’,或‘mpeg1video’,或‘mpeg2video’,或‘dvvideo’,分辨率为‘512x480’或‘608x576’,以及几个音频流,速率为48000Hz, 编解码器为‘pcm16_le’.

21.44 哈希

哈希测试格式。

该复用器为所有输入音频和视频帧计算并打印一个加密哈希。这可以用于相等性检查,而无需进行完整的二进制比较。

默认情况下,音频帧会被转换为有符号16位原始音频,视频帧会被转换为原始视频,然后计算哈希,但显式转换为其他编解码器的输出也可用。时间戳会被忽略。默认使用SHA-256加密哈希函数,但支持多种其他算法。

复用器的输出由单行组成,格式如下:算法=哈希,其中算法是表示所使用的哈希函数的一个短字符串,哈希是表示计算得出的哈希的一个十六进制数字。

hash 算法

使用由字符串指定的加密哈希函数算法。 支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32以及adler32.

21.44.1 示例

要计算输入转换为原始音频和视频的SHA-256哈希,并将其存储到文件中out.sha256:

ffmpeg -i INPUT -f hash out.sha256

要将MD5哈希打印到标准输出,使用以下命令:

ffmpeg -i INPUT -f hash -hash md5 -

另请参见framehash复用器。

21.45 hds

HTTP动态流(HDS)复用器。

HTTP动态流,或HDS,是由Adobe开发的一种自适应码率流方法。HDS通过HTTP连接传输MP4视频内容。HDS可以用于按需流或直播流。

该复用器为每个流创建一个.f4m(Adobe Flash媒体清单文件)清单,一个.abst (Adobe引导文件),以及在指定为输出的目录中的片段文件。

这些文件需要通过HTTPS被HDS播放器访问,以便能够对生成的流进行回放。

21.45.1 选项

extra_window_size 整数

在从磁盘移除之前,清单之外保留的片段数量

min_frag_duration 微秒

最小片段持续时间(以微秒为单位),默认值为1秒 (10000000)

remove_at_exit 布尔值

完成后删除所有片段设置为true

window_size 整数

保留在清单中的片段数量,如果设置为不同于0的值。默认情况下,所有片段都保留在输出目录中。

21.45.2 示例

使用ffmpeg以实时速率生成HDS文件到目录:output.hds目录中

ffmpeg -re -i INPUT -f hds -b:v 200k output.hds

21.46 hls

Apple HTTP直播流复用器,用于根据HTTP直播流(HLS)规范分段MPEG-TS。

它创建一个播放列表文件,以及一个或多个片段文件。输出文件名指定播放列表文件名。

默认情况下,复用器为每个生成的片段创建一个文件。这些文件名称与播放列表相同,后面跟着一个顺序号和一个.ts扩展名。

确保在编码时要求闭合GOP并将GOP大小设置为符合您的片段时间约束。

例如,将输入文件转换为ffmpeg:

ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8

此示例将产生播放列表,out.m3u8以及片段文件:out0.ts, out1.ts, out2.ts等。

另见片段复用器,它提供一个更通用和灵活的分段器实现,可以用于进行HLS分段。

21.46.1 选项

hls_init_time 持续时间

设置初始目标片段长度。默认值为0.

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

片段将在初始m3u8列表中填满后经过此时间并进入下一个关键帧后进行切割。ffmpeg将以和hls_time.

hls_time 持续时间

设置目标片段长度。默认值为2。

持续时间必须是时间持续时间规范,请参见(ffmpeg-utils) ffmpeg-utils(1)手册中的时间持续时间部分。 片段将在经过此时间后进入下一个关键帧并进行切割。

hls_list_size 大小

设置播放列表条目的最大数量。如果设置为0,则列表文件将包含所有片段。默认值为5。

hls_delete_threshold 大小

设置磁盘上要保留的未引用片段数量,直到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 数字

从指定的#EXT-X-MEDIA-SEQUENCE数字启动播放列表序列号(数字hls_start_number_source值为通用。(这是默认情况。) 除非hls_flags single_file已设置,它还指定片段和字幕文件名的起始序列号。 默认值为0。

hls_allow_cache 布尔值

明确设置客户端是否可以(1)或不可(0)缓存媒体片段。

hls_base_url 基本URL

附加基本URL到播放列表中的每个条目。 用于生成带有绝对路径的播放列表。

请注意,播放列表序列号必须对于每个片段是唯一的,且不能与片段文件名序列号混淆,后者可以是循环的,例如如果指定了wrap选项。

hls_segment_filename 文件名

设置片段文件名。除非设置了hls_flags选项并设为single_file’, 文件名将被用作一个字符串格式,后面附加片段编号。

例如:

ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8

将生成播放列表,out.m3u8和片段文件:file000.ts, file001.ts, file002.ts等等。

文件名可以包含完整路径或相对路径规范,但m3u8片段列表中只包含文件名部分而不包含任何路径。如果指定了相对路径,则创建的片段文件的路径将相对于当前工作目录。当strftime_mkdir已设置时,文件名的整个扩展值将被写入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

将生成播放列表片段文件集合:file_0_000.ts, file_0_001.ts, file_0_002.ts等等,和file_1_000.ts, file_1_001.ts, file_1_002.ts等等。

字符串"%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等等。

strftime 布尔值

使用strftime()关于文件名扩展片段文件名为本地时间。在此模式下,片段编号也可用,但要使用它,您需要设置second_level_segment_index’ 在hls_flag并且 %%d 将是说明符。

例如:

ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8

将产生播放列表,out.m3u8,以及片段文件:file-20160215-1455569023.ts, file-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

将产生播放列表,out.m3u8以及片段文件:file-20160215-0001.ts, file-20160215-0002.ts,等等。

strftime_mkdir 布尔

strftime一起使用,它将创建在选项的扩展值中存在的所有子目录hls_segment_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(如果它不存在),然后生成播放列表,out.m3u8以及片段文件:20160215/file-20160215-1455569023.ts, 20160215/file-20160215-1455569024.ts,等等。

例如:

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(如果其中任何一个不存在),然后生成播放列表,out.m3u8以及片段文件:2016/02/15/file-20160215-1455569023.ts, 2016/02/15/file-20160215-1455569024.ts,等等。

hls_segment_options 选项列表

使用以“:”分隔的 key=value 参数列表设置输出格式选项。包含:特殊字符的值必须转义。

hls_key_info_file 密钥信息文件

使用密钥信息文件中的信息进行分段加密。第一行的密钥信息文件指定记录在播放列表中的密钥 URI。播放时通过密钥 URL 访问加密密钥。第二行指定加密过程中用于获取密钥的密钥文件路径。密钥文件以二进制格式读取为单个包含 16 个八位字节的打包数组。可选的第三行指定初始化向量 (IV),作为十六进制字符串使用,代替分段序列号(默认)进行加密。如有更改密钥信息文件将导致使用新密钥/IV 的分段加密,并为播放列表中的新密钥 URI/IV 添加条目,如果hls_flags periodic_rekey启用。

密钥信息文件格式:

密钥 URI
密钥文件路径
初始化向量 (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 布尔

启用 (1) 或禁用 (0) AES128 加密。 启用时生成的每个片段都会被加密,加密密钥会保存为播放列表名称.key。

hls_enc_key 密钥

设置一个 16 个八位字节的密钥用于加密片段,默认情况下随机生成。

hls_enc_key_url 密钥 URL

如果设置,密钥 URL将替换基本 URL被附加到播放列表中的密钥文件名。

hls_enc_iv 初始化向量 (IV)

为每个片段指定一个 16 个八位字节的初始化向量,代替自动生成的。

hls_segment_type 标志

可能的值:

mpegts

以 MPEG-2 传输流格式输出分段文件。这与所有 HLS 版本兼容。

fmp4

以碎片化 MP4 格式(类似于 MPEG-DASH)输出分段文件。 fmp4 文件可用于 HLS 第 7 版及以上版本。

hls_fmp4_init_filename 文件名

设置片段文件头文件的文件名,默认文件名为init.mp4.

strftime启用时,文件名会扩展到带有本地时间的片段文件名。

例如:

ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8

将生成这样的初始化:1602678741_init.mp4.

hls_fmp4_init_resend 布尔

在每次 m3u8 文件刷新后重新发送初始化文件,默认值为0.

var_stream_map设置为两个或更多变体流时,文件名模式必须包含字符串“%v”,此字符串指定生成的初始化文件名中变体流索引的位置。 字符串“%v”可能出现在文件名中,也可能出现在包含文件的最后一个目录名称中。如果字符串出现在目录名称中,那么在扩展目录名称模式后会创建子目录。这使得能在子目录中创建对应不同变体流的初始化文件。

hls_flags 标志

可能的值:

single_file

如果设置该标志,复用器将所有片段存储在单个 MPEG-TS 文件中,并使用播放列表中的字节范围。以此方式生成的 HLS 播放列表的版本号将为 4。

例如:

ffmpeg -i in.nut -hls_flags single_file out.m3u8

将生成播放列表,out.m3u8以及一个单独的片段文件:out.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

#EXT-X-INDEPENDENT-SEGMENTS标记添加到具有视频片段的播放列表中,以及当播放列表的所有片段确保以关键帧开始时。

iframes_only

#EXT-X-I-FRAMES-ONLY标记添加到具有视频片段的播放列表中,并且仅在#EXT-X-BYTERANGE模式下可以播放 I 帧。

split_by_time

允许片段从关键帧之外的帧开始。这在关键帧之间的时间不稳定时改善了某些播放器的行为,但在其他播放器上可能会变得更糟,并且在搜索过程中可能会出现一些异常。此标志应与hls_time选项一起使用。

program_date_time

生成EXT-X-PROGRAM-DATE-TIME标签。

second_level_segment_index

使得可以在hls_segment_filename选项表达式中使用段索引作为 %%d,不仅限于日期/时间值,当strftime选项启用时。要获取固定宽度的数字并带有尾部零,可使用 %%0xd 格式,其中 x 是所需宽度。

second_level_segment_size

使得可以在hls_segment_filename选项表达式中使用段大小(以字节计数)作为 %%s,不仅限于日期/时间值,当 strftime 启用时。要获取固定宽度的数字并带有尾部零,可使用 %%0xs 格式,其中 x 是所需宽度。

second_level_segment_duration

使得可以在hls_segment_filename选项表达式中使用段持续时间(以微秒计算)作为 %%t,不仅限于日期/时间值,当 strftime 启用时。要获取固定宽度的数字并带有尾部零,可使用 %%0xt 格式,其中 x 是所需宽度。

例如:

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

将生成像这样片段:segment_20170102194334_0003_00122200_0000003000000.ts, segment_20170102194334_0004_00120072_0000003000000.ts等等。

temp_file

将段数据写入filename.tmp并在段完成后才重命名为文件名。

一个提供段服务的网络服务器可以被配置为拒绝对 *.tmp 的访问请求,以防止在段已添加到 m3u8 播放列表之前访问未完成的片段。

此标志还会影响 m3u8 播放列表文件的创建。如果设置了此标志,所有播放列表文件都将被写入临时文件并在完成后重命名,类似于处理段方式。但带有file协议以及类型为hls_playlist_type其他类型(非vod)的播放列表始终以临时文件写入,与此标志无关。

使用master_pl_name指定的主播放列表文件(如果有)以及file协议的播放列表,在此标志无关时也始终写入临时文件,当master_pl_publish_rate值不为零时即如此。

hls_playlist_type 类型

如果类型是event,则在 m3u8 头部中发出#EXT-X-PLAYLIST-TYPE:EVENT。这会强制hls_list_size为 0;播放列表只能被附加。

如果类型是vod,则在 m3u8 头部中发出#EXT-X-PLAYLIST-TYPE:VOD。这会强制hls_list_size为 0;播放列表不得更改。

method 方法

使用给定的 HTTP 方法创建 hls 文件。

例如:

ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8

将所有的 mpegts 片段文件上传到 HTTP 服务器,使用 HTTP PUT 方法,并使用相同的方法每refresh次更新 m3u8 文件。请注意,HTTP 服务器必须支持上传文件的给定方法。

http_user_agent 代理

覆盖 HTTP 头部中的 User-Agent 字段,仅适用于 HTTP 输出。

var_stream_map 流映射

指定一个映射字符串,定义如何将音频、视频和字幕流组合到不同变体流中。变体流组之间用空格分隔。

预期的字符串格式类似于 "a:0,v:0 a:1,v:1 ...."。其中 a:、v:、s: 是分别指定音频、视频和字幕流的键。允许的值是 0 到 9(仅基于实际用途的限制)。

当有两个或更多变体流时,输出文件名模式必须包含字符串 "%v":此字符串指定变体流索引在输出媒体播放列表文件名中的位置。字符串 "%v" 可以出现在文件名或包含文件的最后一个目录名中。如果字符串出现在目录名中,则在扩展目录名称模式后会创建子目录。这使得可以在子目录中创建变体流。

以下是一些示例。

  • 创建两个 hls 变体流。第一个变体流将包含比特率为 1000k 的视频流和比特率为 64k 的音频流,第二个变体流将包含比特率为 256k 的视频流和比特率为 32k 的音频流。在这里,将创建两个文件名为out_0.m3u8out_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 v:1,a:1" \
      http://example.com/live/out_%v.m3u8
    
  • 如果您希望结果名称中有一些有意义的文本而不是索引,可以为每个或某些变体指定名称。以下示例将创建与先前示例相同的两个 hls 变体流。但这里,将创建两个文件名为out_my_hd.m3u8out_my_sd.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 变体流。第一个变体流将是一个仅视频流,比特率为 1000k,第二个变体流将是一个仅音频流,比特率为 64k,第三个变体流将是一个仅视频流,比特率为 256k。在这里,将创建三个文件名为out_0.m3u8, out_1.m3u8out_2.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
    
  • 在子目录中创建变体流。在这里,第一个媒体播放列表创建于http://example.com/live/vs_0/out.m3u8,第二个媒体播放列表创建于http://example.com/live/vs_1/out.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
    
  • 创建两个仅音频和两个仅视频的变体流。除了为每个变体流添加#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 -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',音频组具有默认状态为 NO 或 YES。 默认情况下,会创建一个包含所有编码流的单个 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',音频组默认状态为 NO 或 YES,其中一个音频有语言名称为 ENG,另一个音频语言为 CHN。 默认情况下,会创建一个包含所有编码流的单个 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-MEDIA标签添加TYPE=SUBTITLES,webvtt 字幕组名称为 'subtitle' 和可选字幕名称,例如 'English'。确保输入文件至少有一个文本字幕流。
    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,sname:English" \
     -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
    
cc_stream_map 闭合字幕流映射

指定不同闭合字幕组及其属性的映射字符串。闭合字幕流组之间用空格分隔。

预期的字符串格式例如 "ccgroup:<组名>,instreamid:<INSTREAM-ID>,language:<语言代码> ...."。'ccgroup' 和 'instreamid' 是必须的属性。'language' 是可选属性。

使用此选项配置的闭合字幕组通过在var_stream_map字符串中提供相同的 'ccgroup' 名称映射到不同的变体流。

例如:

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

将添加两个#EXT-X-MEDIA标签带有TYPE=CLOSED-CAPTIONS到主播放列表,针对 INSTREAM-ID 'CC1' 和 'CC2'。此外,将添加CLOSED-CAPTIONS属性,组名为 'cc' 用于两个输出变体流。

如果var_stream_map未设置,则cc_stream_map中的第一个可用 ccgroup 映射到输出变体流。

例如:

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标签带有TYPE=CLOSED-CAPTIONS到主播放列表,组名为 'cc',语言为 'en'(英文),INSTREAM-ID 为 'CC1'。此外,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.47 IAMF

沉浸式音频模型和格式 (IAMF) 多路复用器。

IAMF 用于在各种设备上提供沉浸式音频内容,用于流媒体和离线应用。这些应用包括互联网音频流、多播/广播服务、文件下载、游戏、通信、虚拟现实和增强现实等。在这些应用中,音频可以在各种设备上播放,例如耳机、手机、平板电脑、电视、声条、家庭影院系统和大屏幕。

此格式由开放媒体联盟推广和设计。

有关此格式的更多信息,请参见https://aomedia.org/iamf/.

21.48 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.49 iLBC

互联网低比特率编解码器 (iLBC) 原始多路复用器。

它接受单个‘ilbc’音频流。

21.50 image2, image2pipe

图像文件多路复用器。

image2’多路复用器将视频帧写入图像文件。

输出文件名通过模式指定,可用于生成按顺序编号的文件系列。 模式可能包含字符串“%d”或“%0Nd”,此字符串指定文件名中字符代表编号的位置。如果使用形式“%0Nd”,则每个文件名中的编号字符串将用0填充至N位数字。可以用字符串“%%”在模式中指定字符‘%’。

如果模式包含“%d”或“%0Nd”,文件列表指定的第一个文件名将包含数字 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等。

图像多路复用器支持 .Y.U.V 图像文件格式。此格式的特殊之处在于每个图像帧由三个文件组成,每个包含一个 YUV420P 组件。要读写此图像文件格式,请指定‘.Y’文件的名称。多路复用器将根据需要自动打开‘.U’和‘.V’文件。

image2pipe’多路复用器接受与‘image2’多路复用器相同的选项,但忽略模式验证和扩展,因为它应该写入命令输出而不是实际存储的文件。

21.50.1 选项

frame_pts 布尔值

如果设置为 1,则使用数据包 PTS(呈现时间戳)扩展文件名。默认值为 0。

start_number 计数

从指定数字开始序列。默认值为 1。

update 布尔值

如果设置为 1,则文件名将始终被解释为文件名而不是模式,并且相应的文件将会被连续覆盖新图像。默认值为 0。

strftime 布尔值

如果设置为 1,则用日期和时间信息扩展文件名,信息来源是strftime()。默认值为 0。

atomic_writing 布尔值

将输出写入临时文件,写入完成后重命名为目标文件名。默认禁用。

protocol_opts 选项列表

设置协议选项为一个以 :- 分隔的键值参数列表。包含:特殊字符的值必须转义。

21.50.2 示例

  • 使用ffmpeg创建一系列文件img-001.jpeg, img-002.jpeg..., 每秒从输入视频获取一帧图像:
    ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
    

    请注意,使用ffmpeg,如果格式没有通过-f选项指定,且输出文件名指定了一种图像文件格式,那么将自动选择 image2 多路复用器,所以之前的命令可以写为:

    ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
    

    另请注意,模式不一定必须包含“%d”或“%0Nd”,例如要从输入视频开头创建单个图像文件,可以使用命令:img.jpeg生成单帧图像文件。

    ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
    
  • strftime选项允许您用日期和时间信息扩展文件名。查阅strftime()函数文档以了解语法。

    生成图像文件时,使用日期时间格式例如strftime()"%Y-%m-%d_%H-%M-%S" 模式,使用以下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.51 IRCAM

伯克利 / IRCAM / CARL 声音文件系统 (BICSF) 格式多路复用器。

伯克利 / IRCAM / CARL 声音格式在1980年代开发,源于多种不同的早期声音文件格式和系统,包括由加州大学圣地亚哥分校 CARL 的 Gareth Loy 博士开发的 csound 系统,巴黎 IRCAM 的 Rob Gross 和 Dan Timis 开发的 IRCAM 声音文件系统,以及伯克利快速文件系统。

该格式最初作为伯克利 / IRCAM / CARL 声音文件系统的一部分开发,该系统是一套旨在为音频应用实现文件系统的程序,运行于伯克利 UNIX 系统。它在学术音乐研究中心特别流行,并多次被用于早期计算机生成作曲的创作中。

此多路复用器接受包含 PCM 数据的单个音频流。

21.52 IVF

On2 IVF 多路复用器。

IVF 文件格式由 On2 Technologies(前身为 Duck Corporation)开发,用于存储其内部开发的编解码器。

此多路复用器接受单个‘vp8’, ‘vp9’,或‘av1’视频流。

21.53 JACOsub

JACOsub 字幕格式多路复用器。

此多路复用器接受单个‘jacosub’字幕流。

有关格式的更多信息,请参见http://unicorn.us.com/jacosub/jscripts.html.

21.54 KVAG

Simon & Schuster Interactive VAG 多路复用器。

此自定义 VAG 容器由一些 Simon & Schuster Interactive 游戏使用,例如《真实战争》和《真实战争:流氓国家》。

此复用器接受单个‘adpcm_ima_ssi’音频流。

21.55 LC3

蓝牙 SIG 低复杂度通信编解码器音频(LC3)或 ETSI TS 103 634 低复杂度通信编解码器加(LC3plus)。

此复用器接受单个‘lc3’音频流。

21.56 LRC

LRC 歌词文件格式复用器。

LRC(LyRiCs 的缩写)是一种计算机文件格式,能够将歌词与音频文件(例如 MP3、Vorbis 或 MIDI)同步。

此复用器接受单个‘subrip’或‘text’字幕流。

21.56.1 元数据

以下元数据标签将被转换为格式对应的元数据:

title
album
artist
author
creator
encoder
encoder_version

如果‘encoder_version’未明确设置,则自动设置为 libavformat 版本。

21.57 Matroska

Matroska 容器复用器。

此复用器实现了 Matroska 和 WebM 容器规范。

21.57.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.57.2 选项

reserve_index_space 大小

默认情况下,此复用器会在文件末尾写入用于寻址的索引(在 Matroska 中称为线索),因为它无法预先知道需要在文件开头保留多少空间用于索引。然而,对于某些使用场景——例如流式传输,虽然可以寻址但速度很慢——将索引放置在文件开头是有用的。

如果此选项设置为非零值,复用器将保留大小字节的空间在文件头中,然后尝试在复用结束时将线索写入其中。如果保留的空间不够,则不会写入线索,文件将被最终化并且写入尾部将返回错误。大多数使用场景的安全大小应该大约为每小时视频 50KB。

注意,只有在输出是可寻址的情况下才会写入线索,如果不是,则此选项将无效。

cues_to_front 布尔值

如果设置,复用器将在必要时通过移动主要数据将索引写入文件开头。这可以与 reserve_index_space 结合使用,在这种情况下,只有在最初保留空间不足时数据才会被移动。

如果输出不可寻址,则忽略该选项。

cluster_size_limit 大小

每个聚簇最多存储提供的字节数。

如果未指定,则会自动设置为合理的硬编码固定值。

cluster_time_limit 持续时间

每个聚簇最多存储提供的毫秒数。

如果未指定,则会自动设置为合理的硬编码固定值。

dash 布尔值

创建符合 WebM DASH 规范的 WebM 文件。默认设置为false.

dash_track_number 索引

DASH流的轨道编号。默认设置为1.

live 布尔值

假定为直播流写入文件。默认设置为false.

allow_raw_vfw 布尔值

允许原始VFW模式。默认设置为false.

flipped_raw_rgb 布尔值

如果设置为true,则为原始RGB位图存储正高度,这表示位图是自底向上的存储。注意,此选项不会翻转位图,这必须在前手动完成,例如使用‘vflip’滤镜。默认是false,表示位图自顶向下存储。

write_crc32 布尔值

在每个1级元素中写入一个CRC32元素。默认设置为true。此选项对WebM无效。

default_mode 模式

控制输出轨道的 FlagDefault 的设置方式。这会影响播放器默认播放的轨道。默认模式是‘passthrough’.

infer

每个带有默认布置的轨道将设置 FlagDefault。另外,对于每种类型的轨道 (音频、视频或字幕),如果不存在带有默认布置的该类型轨道,则该类型的第一个轨道(如果存在)将被标记为默认。这确保了即使输入来源于缺乏默认轨道概念的容器,默认标志也能以合理方式设置。

infer_no_subs

此模式与推断相同,但如果没有字幕轨道带有默认布置,则不会标记默认字幕轨道。

passthrough

在此模式下,只有在对应流的布置中设置了 AV_DISPOSITION_DEFAULT 标志时,FlagDefault 才会被设置。

21.58 MD5

MD5 测试格式。

这是一个哈希复用器的变体。不像那个复用器,它默认为使用 MD5 哈希函数。

另请参见哈希framemd5复用器。

21.58.1 示例

  • 计算输入转换成原始音频和视频的 MD5 哈希,并将其存储在文件中out.md5:
    ffmpeg -i INPUT -f md5 out.md5
    
  • 将 MD5 哈希打印到标准输出:
    ffmpeg -i INPUT -f md5 -
    

21.59 MicroDVD

MicroDVD 字幕格式复用器。

此复用器接受单个‘microdvd’字幕流。

21.60 MMF

合成音乐移动应用程序格式(SMAF)格式复用器。

SMAF 是一种音乐数据格式,由雅马哈公司为便携式电子设备(如手机和个人数字助理)制定。

此复用器接受单个‘adpcm_yamaha音频流。

21.61 mp3

MP3复用器生成一个包含以下可选功能的原始MP3流:

  • 文件开始处的ID3v2元数据头(默认启用)。支持版本2.3和2.4,id3v2_versionprivate选项用于控制使用哪个版本(3或4)。设置id3v2_version为0可完全禁用ID3v2头。

    复用器支持向ID3v2头写入附加图片(APIC帧)。图片以单个包的视频流形式提供给复用器。可以存在任意数量这样的流,每个流对应一个APIC帧流。流的元数据标签titlecomment分别映射到APIC的descriptionpicture type。请参阅http://id3.org/id3v2.4.0-frames以了解允许的图片类型。

    请注意,APIC帧必须在文件的开头写入,因此复用器将在获取所有图片之前会缓冲音频帧。因此建议尽快提供图片以避免过度缓冲。

  • ID3v2头后面的Xing/LAME帧(如果存在)。默认启用,但仅在输出可寻址的情况下写入。可以使用write_xingprivate选项来禁用它。此帧包含可能对解码器有用的各种信息,例如音频时长或编码器延迟。
  • 文件末尾的传统ID3v1标签(默认禁用)。可以通过write_id3v1private选项启用,但由于其功能非常有限,不推荐使用。

示例:

写入包含ID3v2.3头和ID3v1尾部的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.62 mpegts

MPEG传输流复用器。

此复用器实现了ISO 13818-1和ETSI EN 300 468的一部分。

mpegts复用器中可识别的元数据设置为service_providerservice_name。如果未设置,service_provider的默认值是“FFmpeg”,service_name的默认值是“Service01’.

21.62.1 选项

复用器的选项为:

mpegts_transport_stream_id 整数

设置“transport_stream_id”。这标识了DVB中的一个转发器。默认值是0x0001.

mpegts_original_network_id 整数

设置“original_network_id”。这是DVB中一个网络的唯一标识符。其主要用途是在通过路径“Original_Network_ID, Transport_Stream_ID”唯一标识服务时。默认值是0x0001.

mpegts_service_id 整数

设置“service_id”,也称为DVB中的节目。默认值是0x0001.

mpegts_service_type 整数

设置节目的“service_type”。默认值为digital_tv。 接受以下选项:

hex_value

任何介于0x010xff之间的十六进制值,如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 整数

设置PMTs的第一个PID。默认值是0x1000,最小值是0x0020,最大值是0x1ffa。此选项在m2ts模式下无效,当时PMT的PID是固定的0x0100.

mpegts_start_pid 整数

设置基本流的第一个PID。默认值是0x0100,最小值是0x0020,最大值是0x1ffa。此选项在m2ts模式下无效,当时基本流的PID是固定的。

mpegts_m2ts_mode 布尔值

如果设置为1,启用m2ts模式。默认值为-1,表示禁用m2ts模式。

muxrate 整数

设置固定的复用速率。默认是可变比特率(VBR)。

pes_payload_size 整数

以字节为单位设置最小PES数据包负载。默认值是2930.

mpegts_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 布尔值

如果值设置为1,保留原始时间戳。默认值是-1,这会导致时间戳从0开始计算。

omit_video_pes_length 布尔值

省略视频数据包的PES数据包长度。默认值是1(true)。

pcr_period 整数

覆盖默认的PCR重新传输时间(以毫秒为单位)。默认值是-1,这意味着PCR间隔将自动确定:对于CBR流使用20毫秒,对于VBR流使用小于100毫秒的帧时长的最大公倍数。

pat_period 时长

PAT/PMT表之间的最大时间(以秒为单位)。默认值是0.1.

sdt_period 持续时间

SDT表之间的最大时间(秒)。默认为0.5.

nit_period 持续时间

NIT表之间的最大时间(秒)。默认为0.5.

tables_version 整数

设置PAT、PMT、SDT和NIT版本(默认值0,有效值范围为0到31(含)。 此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出AVFormatContext(在使用API的情况下)或重启ffmpeg实例,循环更改tables_version值:

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.62.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.63 mxf、mxf_d10、mxf_opatom

MXF多路复用器。

21.63.1 选项

多路复用器的选项有:

store_user_comments 布尔值

设置是否在可用的情况下存储用户评论或永远不存储。 IRT D-10不允许用户评论。因此默认情况下,为mxf和mxf_opatom写入它们,但不为mxf_d10写入。

21.64 null

Null多路复用器。

此多路复用器不生成任何输出文件,主要用于测试或性能测试目的。

例如,为了基准测试解码,可以使用以下命令:ffmpeg命令如下:

ffmpeg -benchmark -i INPUT -f null out.null

请注意,以上命令不读取或写入out.null文件,但必须指定输出文件。该ffmpeg语法要求如此。

或者可以将命令写为:

ffmpeg -benchmark -i INPUT -f null -

21.65 nut

-syncpoints 旗标

更改NUT中的同步点使用方式:

默认 use the normal low-overhead seeking aids.
do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;

不推荐使用此选项,因为生成的文件非常容易损坏,无法进行搜索。此外,通常同步点的开销是可以忽略的。注意,-write_index0可以用于禁用所有增长的数据表,允许以有限内存多路复用无尽的流,并且没有这些缺点。

时间戳 extend the syncpoint with a wallclock field.

以及时间戳旗标是实验性的。

-write_index 布尔值

在末尾写入索引,默认是写入索引。

ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor

21.66 ogg

Ogg容器多路复用器。

-page_duration 持续时间

首选页面持续时间(微秒)。多路复用器将尝试创建大约为持续时间微秒长的页面。这使用户能够在搜索粒度和容器开销之间进行权衡。默认值是1秒。值为0将填充所有段,使页面尽可能大。值为1将有效地在大多数情况下使用每页1包形式,这具有额外的容器开销成本,但搜索粒度较小。

-serial_offset

设置流序列号的起始值。 将其设置为不同且足够大的值可确保生成的ogg文件可以安全连接。

21.67 rcwt

RCWT(带时间的原始字幕)是ccextractor的原生格式,这是一种常用的开源工具,用于处理608/708闭目字幕(CC)源。 它可以用于存储原始提取的CC比特流并生成供后续处理或转换的源文件。该格式支持ccextractor和FFmpeg之间的互操作性,解析简单,并且可以用于创建CC表示的备份。

此多路复用器实现了2024年3月的规范,自2014年4月起稳定且未改变。

此多路复用器与ccextractor处理 RCWT 的方式稍有不同。 到目前为止,并未观察到处理输出时与ccextractor存在兼容性问题,但效果可能因情况而异,并且输出不会完全比特匹配。

可以在此找到免费的RCWT规范:https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT

21.67.1 示例

  • 使用lavfi提取闭目字幕到RCWT格式:
    ffmpeg -f lavfi -i "movie=INPUT.mkv[out+subcc]" -map 0:s:0 -c:s copy -f rcwt CC.rcwt.bin
    

21.68 segment、stream_segment、ssegment

基本流分段器。

此多路复用器将流输出到多个固定时长的单独文件中。输出文件名模式可以设置为类似于image2,或者使用strftime模板,如果strftime选项被启用。

stream_segment是用于写入流输出的多路复用器变体,即不需要全局头,推荐用于例如输出到MPEG-TS段。ssegmentstream_segment.

每段以选定参考流的关键帧开始,参考流通过reference_stream选项设置。

请注意,如果需要对视频文件进行精确分割,必须确保输入关键帧与分段器预期的分割时间完全一致,否则分段多路复用器将从指定的开始时间之后找到的下一个关键帧开始新的段。

分段多路复用器在单一恒定帧率视频下效果最好。

可选择通过设置选项segment_list来生成创建的段列表。列表类型通过选项segment_list_type指定。列表中的条目文件名默认为对应段文件的基本名称。

另请参考hls多路复用器,它为HLS分段提供了更具体的实现。

21.68.1 选项

分段多路复用器支持以下选项:

increment_tc 1|0

如果设置为1,在每段之间增加时间码。 如果选择此选项,输入需要在第一个视频流中有时间码。默认值为0.

reference_stream 规范器

根据字符串规范器设置参考流。 如果规范器设置为auto,则参考流会自动选择。否则它必须是一个流规范器(见ffmpeg手册中的“流规范器”章节),用于指定参考流。默认值为auto.

segment_format 格式

覆盖内部容器格式,默认由文件扩展名推断。

segment_format_options 选项列表

使用用冒号分隔的键=值参数列表设置输出格式选项。 值中包含:特殊字符必须进行转义。

segment_list 名称

也生成命名为名称的列表文件。如果未指定,则不生成列表文件。

segment_list_flags 旗标

设置影响段列表生成的标志。

当前支持以下标志:

cache

允许缓存(仅影响M3U8列表文件)。

live

允许生成适合直播的文件。

segment_list_size 大小

更新列表文件以包含最多size个片段。如果设置为0,列表文件将包含所有片段。默认值为0。

segment_list_entry_prefix 前缀

在每个条目前添加prefix。对生成绝对路径很有用。默认情况下不应用任何前缀。

segment_list_type 类型

选择列表格式。

以下值被识别:

flat

为创建的片段生成一个平坦列表,每行一个片段。

csv, ext

为创建的片段生成一个列表,每行一个片段,每行匹配以下格式(逗号分隔的值):

片段文件名,片段开始时间,片段结束时间

segment_filename是复用器根据提供的模式生成的输出文件名。如有需要将应用CSV转义(根据RFC4180)。

segment_start_timesegment_end_time分别指定片段开始和结束时间,单位为秒。

具有后缀".csv"".ext"的列表文件将自动选择此格式。

ext’已被弃用,推荐使用‘csv’.

ffconcat

为创建的片段生成一个ffconcat文件。生成的文件可以使用FFmpegconcat解复用器读取。

具有后缀".ffcat"".ffconcat"的列表文件将自动选择此格式。

m3u8

生成符合http://tools.ietf.org/id/draft-pantos-http-live-streaming.

版本3的扩展M3U8文件。".m3u8"的列表文件将自动选择此格式。

如果未指定类型,将从列表文件的后缀中猜测类型。

segment_time 时间

将片段持续时间设置为time,该值必须是一个持续时间规范。默认值为"2"。另见segment_times选项。

请注意,划分可能并不准确,除非您在给定时间强制参考流关键帧。请参见以下的介绍性说明和示例。

min_seg_duration 时间

将最小片段持续时间设置为time,该值必须是一个持续时间规范。这可以防止复用器将片段结束时间低于该值。仅在使用segment_time时有效。默认值为"0"。

segment_atclocktime 1|0

如果设置为"1",则从00:00时起按常规时钟时间间隔拆分。使用time中指定的值设置拆分间隔的长度。segment_time is used for setting the length of the splitting interval.

例如,使用segment_time设置为"900",可以每次创建12:00、12:15、12:30等时间点的文件。

默认值为"0"。

segment_clocktime_offset 持续时间

使用时以指定的持续时间延迟片段拆分时间segment_atclocktime.

例如,使用segment_time设置为"900"和segment_clocktime_offset设置为"300",则可以创建12:05、12:20、12:35等时间点的文件。

默认值为"0"。

segment_clocktime_wrap_duration 持续时间

强制分段器仅在一个数据包到达复用器且在分段时钟时间后指定的持续时间内时才开始新片段。这样可以使分段器对本地时间向后跳跃(如闰秒或从夏令时转换到标准时间)更加具有容错性。

默认值为最长可能持续时间,这意味着无论距离上一次时钟时间经过了多久都会开始新片段。

segment_time_delta 差值

选择片段起始时间时的时间精确度,单位为持续时间规范。默认值为"0"。

当指定delta时,如果关键帧的PTS满足以下关系,将从该关键帧开始新片段:

PTS >= start_time - time_delta

此选项在分割总是基于GOP边界的视频内容时非常有用,例如在分隔时间点之前找到一个关键帧的情况下。

尤其可以与ffmpeg选项结合使用。force_key_frames。由于四舍五入问题,由force_key_frames指定的关键帧时间可能不会精确设置,从而导致关键帧时间可能仅在指定时间之前。对于恒定帧率的视频,值为1/(2*frame_rate) 应该可以解决指定时间和force_key_frames.

segment_times 指定的时间之间最差的时间不匹配问题。

指定一个分段点的列表。times包含一个以逗号分隔的持续时间规范的列表,按升序排列。另见segment_time选项。

segment_frames

指定一个拆分视频帧编号的列表。frames包含一个以逗号分隔的整数列表,按升序排列。

此选项指定只要找到参考流关键帧,并且帧的连续编号(从0开始)大于或等于列表中的下一个值,就开始新片段。

segment_wrap 限制

当分段索引达到限制时绕回。.

segment_start_number 号码

设置第一个片段的序列号。默认值为0.

strftime 1|0

使用strftime函数定义新片段的命名。如果选择了此选项,输出片段名称必须包含一个strftime函数模板。默认值为0.

break_non_keyframes 1|0

如果启用,允许片段从关键帧以外的帧开始。这在某些播放器上时间不一致的关键帧间隔可能会改进行为,但在其他播放器上可能会变差,并且在搜索时可能会出现一些异常现象。默认值为0.

reset_timestamps 1|0

将在每个片段的开始处重置时间戳,使每个片段的时间戳接近于零。这旨在简化生成的片段的播放。可能与某些复用器/编解码器组合不兼容。设置为0默认情况下。

initial_offset 偏移量

指定对输出数据包时间戳应用的时间戳偏移量。 参数必须是时间持续时间规格,默认为0。

write_empty_segments 1|0

如果启用,则在通常会生成片段的期间没有数据包时写入一个空片段。 否则,片段将填充到下一次写入的数据包。默认值为0.

在编码时,请确保需要闭合的GOP,并将GOP大小设置为满足您的片段时间约束。

21.68.2 示例

  • 将文件内容重新封装in.mkv为片段列表out-000.nut, out-001.nut等,并将生成的片段列表写入out.list:
    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 force_key_frames选项在指定位置强制在输入中设置关键帧,同时使用片段选项segment_time_delta对此时设置关键帧时间可能进行的舍入进行调整。
    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
    

    为了在输入文件上强制关键帧,需要进行转码。

  • 通过根据使用的帧编号序列分割输入文件来对输入文件进行分段segment_frames选项:
    ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
    
  • in.mkv转换为TS片段使用libx264aac编码器:
    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.69 smoothstreaming

Smooth Streaming复用器生成一组文件(清单、块),适合使用常规Web服务器进行服务。

window_size

指定清单中保留的片段数量。默认值为0(保留所有)。

extra_window_size

指定从磁盘中移除前在清单之外保留的片段数量。默认值为5。

lookahead_count

指定预览片段的数量。默认值为2。

min_frag_duration

指定最小片段持续时间(以微秒为单位)。默认值为5000000。

remove_at_exit

指定在完成后是否移除所有片段。默认值为0(不移除)。

21.70 streamhash

每流哈希测试格式。

此复用器为所有输入帧计算并打印加密哈希值,按流划分。 这可以用于平等检查,无需进行完整二进制比较。

默认情况下,音频帧被转换为带符号16位原始音频,视频帧被转换为原始视频,然后计算哈希值。 但也可以使用明确转换为其他编解码器的输出。时间戳被忽略。 默认使用SHA-256加密哈希函数,但支持其他算法。

复用器的输出由每流的一行组成,形式如下:流索引,流类型,算法=哈希其中流索引是映射流的索引,流类型是 表示流类型的单个字符,算法是表示使用的哈希函数的简短字符串,哈希是表示计算得出的 哈希值的十六进制数字。

hash 算法

使用由字符串指定的加密哈希函数算法。 支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32adler32.

21.70.1 示例

计算转换为原始音频和视频的输入的SHA-256哈希值,并 将其存储在文件中out.sha256:

ffmpeg -i INPUT -f streamhash out.sha256

要打印MD5哈希到标准输出,请使用命令:

ffmpeg -i INPUT -f streamhash -hash md5 -

另请参阅哈希帧哈希复用器。

21.71 tee

tee复用器可用于将同一数据写入多个输出,例如文件或流。 它可用于同时在网络上传输视频并保存到磁盘。

这不同于为ffmpeg命令行工具指定多个输出。使用tee复用器,音频和视频数据只需编码一次。 使用常规多输出,则会启动多个并行编码操作,这可能是一个非常昂贵的过程。 如果直接使用libavformat API,tee复用器没有用处,因为那时可以直接向多个复用器馈送相同的数据包。

由于tee复用器不代表任何特定输出格式,所以ffmpeg无法自动选择 输出流。因此,所有拟输出的流必须使用-map指定。参见以下示例。

某些编码器可能需要根据输出格式设置不同的选项; 这些选项的自动检测无法在tee复用器中工作,因此需要明确指定。 主要示例是global_header标志。

通过以‘|’分隔,指定给复用器的文件名中的从属输出。 如果任何从属名称包含‘|’分隔符、前后空白或任何特殊字符, 必须进行转义(请参见(ffmpeg-utils)ffmpeg-utils(1)手册中的“引用和转义” 部分).

21.71.1 选项

use_fifo 布尔值

如果设置为1,从属输出将使用fifo复用器在单独的线程中处理。这允许弥补输出的速度/延迟/可靠性不同, 并设置透明恢复。默认情况下此功能关闭。

fifo_options

传递给fifo伪复用器实例的选项。参见fifo.

可以通过在方括号之间以键值对列表的形式预置来为每个从属指定复用器选项。 键值对之间使用‘:’分隔。如果选项值包含特殊字符或‘:’分隔符,则必须转义; 请注意,这是二级转义。key=value pairs separated by ’:’, between square brackets. If the options values contain a special character or the ’:’ separator, they must be escaped; note that this is a second level escaping.

另外还识别以下特殊选项:

f

指定格式名称。如果从输出URL无法推断,则为必需项。

bsfs[/规范]

指定应用于特定输出的比特流过滤器列表。

可以通过将流规范附加到选项中与其分隔,来指定给定比特流过滤器适用的流/. 规范必须是流规范(请参见格式流规范).

如果未指定流规范,则比特流过滤器将应用于输出中的所有流。 如果输出中包含无法应用于该比特流过滤器的流,例如h264_mp4toannexb比特流过滤器应用于包含音频流的输出时,将导致该输出操作失败。

比特流过滤器的选项必须以键值对列表的形式指定,形式为opt=value.

可以指定多个比特流过滤器,以‘,’分隔。

use_fifo 布尔值

这允许覆盖tee复用器的use_fifo选项以用于单个从属复用器。

fifo_options

这允许覆盖tee复用器的fifo_options选项以用于单个从属复用器。 参见fifo.

select

选择应该映射到从属输出的流, 由流说明符指定。如果未指定,则默认映射所有流。 如果输出格式不接受所有映射的流,这将导致输出操作失败。

可以使用多个流说明符,用逗号(",")分隔。,例如:a:0,v

onfail

指定输出失败时的行为。可以设置为abort(默认值) 或ignore. abort在此从属输出失败的情况下将导致整个进程失败。ignore将忽略此输出上的失败,因此其他输出将继续不受影响。

21.71.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格式要求的。选项out.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.72 webm_chunk

WebM实时块多路复用器。

此多路复用器将WebM头和块写入单独的文件,支持通过DASH消费WebM实时流的客户端。

21.72.1 选项

此多路复用器支持以下选项:

chunk_start_index

第一个块的索引值(默认为0)。

header

写入初始数据的头文件名。

audio_chunk_duration

每个音频块的持续时间(以毫秒为单位,默认为5000)。

21.72.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.73 webm_dash_manifest

WebM DASH清单多路复用器。

此多路复用器实现了WebM DASH清单规范,用于生成DASH清单XML,也支持DASH实时流的清单生成。

欲了解更多信息,请参阅:

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

第一个块的起始索引值。这将出现在清单中的‘startNumber’属性。SegmentTemplate’元素中。默认值:0。

chunk_duration_ms

每个块的持续时间(以毫秒为单位)。这将在清单中的‘duration’属性。SegmentTemplate’元素中。默认值:1000。

utc_timing_url

将返回ISO格式的UTC时间戳的页面的URL。这将在清单中的‘value’属性。UTCTiming’元素中。默认值:无。

time_shift_buffer_depth

任何表示形式保证可用的最小时间(以秒为单位)的移动缓冲区。这将在清单中的‘timeShiftBufferDepth’属性。MPD’元素中。默认值:60。

minimum_update_period

清单的最小更新周期(以秒为单位)。这将在清单中的‘minimumUpdatePeriod’属性。MPD’元素中。默认值:0。

21.73.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. 头部是一个‘;FFMETADATA’字符串,后跟一个版本号(目前为1)。
  3. 元数据标签的格式为‘key=value
  4. ’。
  5. 头部之后紧跟着的是全局元数据。
  6. 全局元数据之后可能会有包含每个流/章节元数据的部分。[’, ‘]部分以部分名称(大写)在括号中开始(例如STREAM或CHAPTER),‘
  7. ’并以下一个部分或文件结束。TIMEBASE=章节部分开头可能有一个可选的时间基,用于起始/结束值。它必须是/numden的格式,其中numden是整数。如果时间基不存在,则假定开始/结束时间为纳秒。

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

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

一个ffmetadata文件可能如下所示:

;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team

[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line

通过使用ffmetadata多路复用器和解复用器,可以从输入文件中提取元数据到一个ffmetadata文件,然后将其编辑后的元数据文件重编码到输出文件中。

ffmpeg提取ffmetadata文件的过程如下:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE

从FFMETADATAFILE文件重新插入编辑后的元数据信息的过程如下:

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

23 协议选项

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

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

支持的选项列表如下:

protocol_whitelist 列表 (input)

设置允许协议的","分隔列表。"ALL" 匹配所有协议。以 "-" 开头的协议将被禁用。 默认情况下允许所有协议,但某些协议用于嵌套协议时受到每个协议子集的限制。

24个协议

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

在配置FFmpeg构建时,默认会启用所有支持的协议。您可以使用配置选项"–list-protocols"来列出所有可用的协议。

您可以使用配置选项"–disable-protocols"禁用所有协议,并通过选项"–enable-protocol="选择性启用某个协议。协议,或者您可以使用选项 "–disable-protocol="禁用特定协议。协议".

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

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

rw_timeout

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

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

24.1 amqp

高级消息队列协议(AMQP)版本0-9-1是一种基于代理的发布订阅通信协议。

FFmpeg必须使用–enable-librabbitmq编译以支持AMQP。此外,还需要运行一个单独的AMQP代理。一个示例开源AMQP代理是RabbitMQ。

在启动代理后,FFmpeg客户端可以使用以下命令向代理流式传输数据:

ffmpeg -re -i input -f mpegts amqp://[[user]:[password]@]hostname[:port][/vhost]

其中hostname和port(默认是5672)是代理的地址。客户端还可以设置用户/密码进行身份验证。两者的默认值是"guest"。代理上的虚拟主机名称可以使用vhost设置。默认值是"/"。

多个订阅者可以使用以下命令从代理中流式获取数据:

ffplay amqp://[[user]:[password]@]hostname[:port][/vhost]

在RabbitMQ中,发布到代理的所有数据都通过特定的交换机,并且每个订阅客户端都有分配的队列/缓冲区。当数据包到达交换机时,根据交换机和routing_key字段,它可以被复制到客户端的队列。

支持以下选项:

exchange

设置代理上要使用的交换机。RabbitMQ有几个预定义的交换机:"amq.direct"是默认交换机,发布者和订阅者必须有一个匹配的routing_key;"amq.fanout"相当于广播操作(即数据被转发到fanout交换机上的所有队列,与routing_key无关);"amq.topic"类似于"amq.direct",但允许更复杂的模式匹配(参阅RabbitMQ文档)。

routing_key

设置路由密钥。默认值是"amqp"。路由密钥在"amq.direct"和"amq.topic"交换机中用于决定数据包是否写入某个订阅者的队列。

pkt_size

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

connection_timeout

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

delivery_mode 模式

设置发送到代理的每条消息的交付模式。 接受以下值:

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:/mnt/bluray

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

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

24.4 cache

输入流的缓存包装。

将输入流缓存到临时文件。它为直播流提供了支持寻址的能力。

接受的选项有:

read_ahead_limit

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

URL语法为

cache:URL

24.5 concat

物理串联协议。

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

此协议接受的URL语法为:

concat:URL1|URL2|...|URLN

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

例如,要读取一系列文件split1.mpeg, split2.mpeg, split3.mpeg使用ffplay命令:

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

注意,您可能需要转义字符"|",因为它对于许多shell来说是特殊字符。

24.6 concatf

使用换行符分隔的资源列表进行物理串联协议。

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

此协议接受的URL语法为:

concatf:URL

其中URL是包含换行符分隔的资源列表的url,每个资源可能指定一个不同的协议。特殊字符必须通过反斜杠或单引号进行转义。参见(ffmpeg-utils) ffmpeg-utils(1)手册中的"引用和转义"部分.

例如,要读取一系列文件split1.mpeg, split2.mpeg, split3.mpeg列在单独的行中或 文件中split.txt使用ffplay命令:

ffplay concatf:split.txt

其中split.txt包含以下行:

split1.mpeg
split2.mpeg
split3.mpeg

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 文件描述符

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

此协议接受以下选项:

blocksize

设置I/O操作的最大块大小(以字节为单位)。默认值为INT_MAX这将导致不限制请求的块大小。 将此值设置得较低可以提高用户终止请求的反应时间,特别是在数据传输速度较慢时,这点尤为重要。

fd

设置文件描述符。

24.10 文件

文件访问协议。

从文件读取或写入文件。

文件URL可以具有以下形式:

file:文件名

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

没有协议前缀的URL将被假定为一个文件URL。根据构建类型,看起来像以驱动器字母开头的Windows路径的URL也会被假定为文件URL(通常在类Unix系统的构建中不是这样)。

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

ffmpeg -i file:input.mpeg output.mpeg

此协议接受以下选项:

truncate

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

blocksize

设置I/O操作的最大块大小,以字节为单位。默认值为INT_MAX这将导致不限制请求的块大小。 将此值设置得较低可以提高用户终止请求的反应时间,对慢速介质上的文件尤为重要。

follow

如果设置为1,则协议将在文件末尾重试读取,允许读取仍在写入的文件。 为了使其终止,可以使用rw_timeout选项或使用中断回调(对于API用户)。

seekable

控制是否在文件上声明可寻址性。0表示不可寻址,-1表示自动(普通文件为可寻址,命名管道为不可寻址)。

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

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-anonymous-password覆盖(如果未设置用户)。

ftp-anonymous-password

以匿名用户身份登录时使用的密码。通常应使用电子邮件地址。

ftp-write-seekable

控制在编码期间连接的可寻址性。如果设置为1,则假定资源是可寻址的;如果设置为0,则假定不可寻址。默认值为0。

备注:协议可以用作输出,但建议不要这样做,除非采取特别的措施(测试、自定义服务器配置等)。不同的FTP服务器在寻址操作时的行为各不相同。 ff*工具可能会由于服务器限制而产生不完整的内容。

24.12 gopher

Gopher协议。

24.13 gophers

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。

http_proxy

设置代理,通过代理隧道,例如:http://example.com:1234

headers

设置自定义HTTP头,可以覆盖内置默认头。值必须是编码头的字符串。

content_type

为POST消息或监听模式设置特定的内容类型。

user_agent

覆盖User-Agent头。如果未指定,协议将使用提供libavformat构建描述的字符串("Lavf/<version>")。

referer

设置Referer头。在HTTP请求中包含'Referer:URL'头。

multiple_requests

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

post_data

设置自定义HTTP POST数据。

mime_type

导出MIME类型。

http_version

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

cookies

设置将在未来请求中发送的Cookie。每个Cookie的格式与Set-Cookie HTTP响应字段的值相同。 多个Cookie可以用换行符分隔。

icy

如果设置为1,则向服务器请求ICY(SHOUTcast)元数据。如果服务器支持此功能,应用程序需要通过读取icy_metadata_headersicy_metadata_packet选项来检索元数据。 默认为1。

icy_metadata_headers

如果服务器支持ICY元数据,此选项包含ICY特定的HTTP响应头,每行一个。

icy_metadata_packet

如果服务器支持ICY元数据,并且icy设置为1,这将包含服务器发送的最后一个非空元数据包。 对流式元数据更新感兴趣的应用程序应定期轮询此选项。

metadata

设置一个导出的字典,其中包含从码流中提取的Icecast元数据(如果存在)。仅对C API有用。

auth_type

设置HTTP身份验证类型。没有为Digest提供选项,因为这种方法需要从服务器先获取nonce参数,不能像Basic一样直接使用。

none

自动选择HTTP身份验证类型。这是默认值。

basic

选择HTTP基本身份验证。

基本身份验证发送一个Base64编码的字符串,该字符串包含客户端的用户名和密码。 Base64不是一种加密方式,应视为与以明文发送用户名和密码相同(Base64是一种可逆编码)。 如果需要保护资源,请强烈考虑使用基本身份验证以外的身份验证方案。 基本身份验证应与HTTPS/TLS一起使用。 如果没有这些额外的安全措施,基本身份验证不应用于保护敏感或有价值的信息。

send_expect_100

为POST发送Expect:100-continue头。如果设置为1,它将发送;如果设置为0,它不会发送;如果设置为-1, 它将在适用时尝试发送。默认值为-1。

location

一个导出的字典,包含内容位置。仅对C API有用。

offset

设置初始字节偏移。

end_offset

尝试将请求限制在此偏移之前的字节。

method

当用作客户端选项时,设置请求的HTTP方法。

当用作服务器选项时,设置客户端预期的HTTP方法。 如果预期的HTTP方法与收到的HTTP方法不匹配,客户端将收到一个错误请求响应。 当未设置时,目前不会检查HTTP方法。未来此功能将替换为自动检测。

reconnect

在遇到EOF之前断开连接时自动重新连接。

reconnect_at_eof

如果设置,则将EOF视为错误并引发重新连接,这对于直播/无限流很有用。

reconnect_on_network_error

在连接期间遇到TCP/TLS错误时自动重新连接。

reconnect_on_http_error

用逗号分隔的一组HTTP状态代码,用于执行重新连接。列表可以包含具体的状态代码(例如'503')或字符串'4xx'/'5xx'。

reconnect_streamed

如果设置,即使是流式/不可寻址的流在遇到错误时也会重新连接。

reconnect_delay_max

设置最大延迟时间(以秒为单位),超过此时间后放弃重新连接。

reconnect_max_retries

设置最大重试连接次数。默认未设置。

reconnect_delay_total_max

设置最大总延迟时间(以秒为单位),超过此时间后放弃重新连接。

respect_retry_after

如果启用且遇到Retry-After头,其请求的重新连接延迟将被遵守,而不是使用指数回退。适合429和503错误。默认启用。

listen

如果设置为1,启用实验性HTTP服务器。 此设置可用于作为输出选项发送数据,或在作为输入选项使用HTTP POST时接收客户端的数据。 如果设置为2,启用实验性多客户端HTTP服务器。 这种功能尚未在ffmpeg.c中实现,因此不得用作命令行选项。

# Server side (sending):
ffmpeg -i somefile.ogg -c copy -listen 1 -f ogg http://服务器:端口

# Client side (receiving):
ffmpeg -i http://服务器:端口 -c copy somefile.ogg

# Client can also be done with wget:
wget http://服务器:端口 -O somefile.ogg

# Server side (receiving):
ffmpeg -listen 1 -i http://服务器:端口 -c copy somefile.ogg

# Client side (sending):
ffmpeg -i somefile.ogg -chunked_post 0 -c copy -f ogg http://服务器:端口

# Client can also be done with wget:
wget --post-file=somefile.ogg http://服务器:端口
resource

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

reply_code

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

short_seek_size

设置读取预读的字节阈值,当超过该阈值时,相较于一次查找和新HTTP请求,更倾向于使用预读。这对于确保在读取跨大视频包和小音频包之间的连接一致性很有用。

24.15.1 HTTP Cookies

某些HTTP请求会被拒绝,除非在请求中传递了cookie值。cookies选项允许指定这些cookies。至少,每个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://[用户名[:密码]@]服务器:端口/挂载点

24.17 ipfs

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

该协议接受以下选项:

gateway

定义要使用的网关。如果未设置,协议会首先尝试通过查找$IPFS_GATEWAY, $IPFS_PATH$HOME/.ipfs/按顺序定位本地网关。

可以通过两种方式使用此协议。使用IPFS:

ffplay ipfs://<hash>

或使用IPNS协议(IPNS是可变的IPFS):

ffplay ipns://<hash>

24.18 mmst

MMS(微软媒体服务器)协议的TCP版本。

24.19 mmsh

MMS(微软媒体服务器)协议的HTTP版本。

必需的语法为:

mmsh://服务器[:端口][/应用程序][/播放路径]

24.20 md5

MD5输出协议。

计算要写入数据的MD5哈希值,并在关闭时将其写入指定输出或stdout(如果未指定)。可以用于测试混流器而无需实际写入文件。

以下是一些示例。

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

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

请注意,一些格式(通常是MOV)要求输出协议是可查找的,因此它们无法与MD5输出协议配合使用。

24.21 pipe

UNIX管道访问协议。

从UNIX管道中读取和写入。

接受的语法为:

pipe:[数字]

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

例如,使用以下方式从stdin读取ffmpeg:

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

使用以下方式写入stdoutffmpeg:

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

此协议必须与rtp_mpegts混流器和rtp协议结合使用。

必需的语法为:

-f rtp_mpegts -fec prompeg=选项=... rtp://主机名:端口

目标UDP端口为port + 2罗列FEC流,port + 4列FEC流。

该协议接受以下选项:

l=

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

d=

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

使用示例:

-f rtp_mpegts -fec prompeg=l=8:d=4 rtp://主机名:端口

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

RTMP服务器的地址。

port

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

app

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

playpath

相对于应用指定的资源播放的路径或名称,可以以"mp4:"为前缀。您也可以通过rtmp_playpath选项覆盖从URI解析的值。

listen

充当服务器,等待传入连接。

timeout

等待传入连接的最长时间。暗示已监听。

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

rtmp_app

连接RTMP服务器上的应用程序的名称。此选项会覆盖URI中指定的参数。

rtmp_buffer

设置客户端缓冲时间(以毫秒为单位)。默认值为3000。

rtmp_conn

从字符串解析的额外任意AMF连接参数,例如类似B:1 S:authMe O:1 NN:code:1.23 NS:flag:ok O:0。 每个值以一个字符作为前缀来表示类型,B表示布尔值,N表示数字,S表示字符串,O表示对象,Z表示空值,后跟一个冒号。布尔值的数据必须是0或1,分别表示FALSE或TRUE。同样,对于对象,数据必须是0或1,分别表示结束和开始一个对象。子对象中的数据项可以命名,通过在类型前加上'N'并在值之前指定名称(例如NB:myFlag:1)。此选项可以多次使用以构造任意AMF序列。

rtmp_enhanced_codecs

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

rtmp_flashver

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

已解压SWF文件的大小,在进行SWF验证时需要。

rtmp_swfurl

SWF播放器的URL。默认情况下,不会发送任何值。

rtmp_swfverify

到播放器SWF文件的URL,自动计算哈希值/大小。

rtmp_tcurl

目标流的URL。默认值为proto://host[:port]/app。

tcp_nodelay=1|0

设置TCP_NODELAY,以禁用Nagle算法。默认值为0。

Remark: Writing to the socket is currently not optimized to minimize system calls and reduces the efficiency / effect of 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)、RTMP上的SSL/TLS(RTMPS)以及这些加密类型的隧道变体(RTMPTE,RTMPTS)的服务器功能。

所需的语法是:

rtmp_proto://服务器[:端口][/应用][/播放路径] 选项

其中rtmp_proto是“rtmp”、“rtmpt”、“rtmpe”、“rtmps”、“rtmpte”、“rtmpts”字符串之一,对应于每个RTMP变体,而服务器, 端口, 应用程序播放路径与RTMP原生协议中指定的含义相同。选项包含一个由空格分隔的选项列表,形式为=.

有关更多信息,请参阅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://主机名[:端口][?选项]

端口指定要使用的RTP端口。

选项包含一个由&分隔的选项列表,形式为=.

支持以下URL选项:

ttl=n

设置TTL(仅适用于多播)的值。

rtcpport=n

将远程RTCP端口设置为n.

localrtpport=n

将本地RTP端口设置为n.

localrtcpport=n'

将本地RTCP端口设置为n.

pkt_size=n

将最大数据包大小(以字节为单位)设置为n.

buffer_size=大小

设置最大UDP套接字缓冲区大小,以字节为单位。

connect=0|1

在UDP套接字上执行connect()(如果设置为1)或不执行(如果设置为0)。

sources=IP[,IP]

列出允许的源IP地址。

block=IP[,IP]

列出不允许(被阻止)的源IP地址。

write_to_source=0|1

将数据包发送到最近接收到数据包的源地址(如果设置为1),或发送到默认远程地址(如果设置为0)。

localport=n

将本地RTP端口设置为n.

这是一个不推荐使用的选项。应改用localrtpport

localaddr=地址

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

timeout=n

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

重要注意事项:

  1. 如果rtcpport未设置,RTCP端口将被设置为RTP端口值加1。
  2. 如果localrtpport(本地RTP端口)未设置,则将使用任何可用端口作为本地RTP和RTCP端口。
  3. 如果localrtcpport(本地RTCP端口)未设置,它将被设置为本地RTP端口值加1。

24.34 rtsp

实时流协议。

RTSP在libavformat中技术上不是协议处理程序,而是一个解复用器和复用器。解复用器支持普通RTSP(通过RTP传输数据;例如苹果和微软使用此协议)以及Real-RTSP(通过RDT传输数据)。

复用器可用于通过RTSP ANNOUNCE将流发送到支持该功能的服务器(目前包括Darwin Streaming Server和Mischa Spiegelmock的RTSP服务器).

RTSP URL 的必要语法为:

rtsp://主机名[:端口]/路径

可以通过ffmpeg/ffplay命令行设定选项,或者通过代码中的AVOptions 或在avformat_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 隧道作为底层传输协议,对通过代理和广泛应用于安全考虑很有用。

可以指定多个底层传输协议,在这种情况下,它们会一个接一个地尝试(如果一个设置失败,就尝试下一个)。对于复用器,仅支持tcpudp选项。

rtsp_flags

设置 RTSP 标志。

接受以下值:

filter_src

仅接受来自协商的对端地址和端口的包。

listen

作为服务器监听传入连接。

prefer_tcp

如果 TCP 可用作 RTSP RTP 传输,则优先尝试用于 RTP 传输的 TCP。

satip_raw

导出原始 MPEG-TS 流而不是解复用。此标志仅写出原始流,保留原始的 PAT/PMT/PIDs。

默认值为none’.

allowed_media_types

设置从服务器接受的媒体类型。

接受以下标志:

video
audio
data
subtitle

默认情况下,接受所有媒体类型。

min_port

设置最小本地 UDP 端口。默认值为 5000。

max_port

设置最大本地 UDP 端口。默认值为 65000。

listen_timeout

设置建立初始连接的最大超时时间(以秒为单位)。设置listen_timeout> 0 会设置rtsp_flagslisten。默认值为 -1,表示在模式为listen时超时时间无限。

reorder_queue_size

设置缓冲重新排序数据包的包数量。

timeout

设置套接字 TCP I/O 超时(微秒)。

user_agent

覆盖 User-Agent 头。如果未指定,默认为 libavformat 标识字符串。

buffer_size

设置套接字缓冲区的最大大小(以字节为单位)。

当通过 UDP 接收数据时,解复用器尝试对接收到的数据包进行重新排序(因为它们可能顺序到达,也可能完全丢失)。这可以通过将最大解复用延迟设置为零禁用(通过 AVFormatContext 的max_delay字段)。

观看多码率 Real-RTSP 流时,通过ffplay工具,可以选择显示的流,并可以通过按-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 输入 -f rtsp -muxdelay 0.1 rtsp://server/live.sdp
    
  • 实时接收流:
    ffmpeg -rtsp_flags listen -i rtsp://ownaddress/live.sdp 输出
    

24.35 sap

会话公告协议(RFC 2974)。这在技术上不是 libavformat 的协议处理程序,而是一种复用器和解复用器。它用于对 RTP 流进行信号通知,通过定期在单独的端口上公布 SDP。

24.35.1 复用器

复用器接收的 SAP URL 的语法为:

sap://目的地址[:端口][?选项]

RTP 包发送到目的地址端口端口,如果未指定端口则默认为 5004。选项是一组&-分隔的列表。支持以下选项:

announce_addr=地址

指定发送公告的目标 IP 地址。如果省略,公告将发送到通常使用的 SAP 公告多播地址 224.2.127.254(sap.mcast.net),或(如果目的地是 IPv6 地址)发送到 ff0e::2:7ffe。

announce_port=端口

指定发送公告的端口,默认值为 9875。

ttl=ttl

指定公告和 RTP 包的生存时间值,默认值为 255。

same_port=0|1

如果设置为 1,所有 RTP 流都会发送到同一对端口。如果设置为 0(默认值),所有流会发送到唯一端口,每个流的端口比前一个流高 2。VLC/Live555 要求此值设为 1 以便接收流。libavformat 的 RTP 堆栈要求所有流发送到唯一端口。

如下是示例命令行。

在本地子网广播流,以便在 VLC 中观看:

ffmpeg -re -i 输入 -f sap sap://224.0.0.255?same_port=1

类似地,用于在ffplay:

ffmpeg -re -i 中观看: -f sap sap://224.0.0.255

输入ffplay并在

ffmpeg -re -i 中观看,使用 IPv6: -f sap sap://[ff0e::1:2:3:4]

24.35.2 解复用器

解复用器接收的 SAP URL 的语法为:

sap://[地址][:端口]

地址是用于接收公告的多播地址,如果省略,使用默认值 224.2.127.254(sap.mcast.net)。端口是监听的端口,如果省略则为 9875。

解复用器监听指定地址和端口的公告。一旦接收到公告,会尝试接收特定的流。

如下是示例命令行。

回放在默认 SAP 多播地址上宣布的第一个流:

ffplay sap://

回放在默认 IPv6 SAP 多播地址上宣布的第一个流:

ffplay sap://[ff0e::2:7ffe]

24.36 sctp

流控制传输协议。

接受的 URL 语法为:

sctp://主机:端口[?选项]

协议接受以下选项:

listen

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

max_streams

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

24.37 srt

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

支持的SRT URL语法为:

srt://主机名:端口[?选项]

选项包含以下格式的通过&分隔的选项列表=.

选项 srt://主机名:端口

选项包含’-分隔的列表 -选项。

此协议接受以下选项。

connect_timeout=毫秒

连接超时;当RTT > 1500毫秒(2次握手交换)时,SRT无法连接,默认连接超时为3秒。此选项适用于调用者和会合连接模式。会合模式使用的连接超时值是配置值的10倍(这可以用作以前版本中解决此连接问题的变通方法)。

ffs=字节

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

inputbw=字节/秒

发送方的标称输入速率,单位为字节/秒。与oheadbw一起使用,当maxbw设置为相对(0)时,计算在恢复数据包与主媒体流一起发送时的最大发送速率:inputbw * (100 + oheadbw) / 100 如果inputbw未设置但maxbw设置为相对(0),实际输入速率在库内部评估。默认值为0。

iptos=tos

IP服务类型,仅适用于发送方。默认值为0xB8。

ipttl=ttl

IP生存时间,仅适用于发送方。默认值为64。

latency=微秒

基于时间戳的数据包交付延迟。用于吸收丢失数据包重发的突发。这一标识同时设置rcvlatencypeerlatency为相同值。请注意,1.3.0版本之前这是唯一的设置延迟方式,这实际上等效于设置peerlatency当发送方时为rcvlatency接收方时为

listen_timeout=微秒

设置套接字监听超时时间。

maxbw=字节/秒

最大发送带宽,单位为字节/秒。 -1 无限(CSRTCC限制为30mbps) 0 相对于输入速率(参见inputbw) >0 绝对限制值 默认值为0(相对)

mode=caller|listener|rendezvous

连接模式。caller打开客户端连接。listener启动服务器以监听传入连接。rendezvous使用会合连接模式。默认值是caller。

mss=字节

最大片段大小,单位为字节。用于缓冲区分配并使用数据包计数进行速率计算,假设数据包完全填充。使用对端之间的最小MSS值。整体互联网的默认值为1500。这是UDP数据包的最大大小,只能减小,除非有某些特殊的网络设置。默认值为1500。

nakreport=1|0

如果设置为1,接收方将定期发送‘UMSG_LOSSREPORT’消息,直到丢失的数据包重新发送或有意丢弃。默认值为1。

oheadbw=百分比

高于输入速率的恢复带宽开销,单位为百分比。参见inputbw。默认值为25%。

passphrase=字符串

HaiCrypt加密/解密密码字符串,长度从10到79个字符。密码是发送者和接收者之间的共享密钥。它用于生成使用PBKDF2(基于密码的密钥派生函数)的密钥加密密钥。仅当pbkeylen非零时使用。仅当接收到的数据已加密时在接收器上使用。配置的密码不能恢复(仅写)。

enforced_encryption=1|0

如果为true,则连接的双方必须设置相同的密码(包括空密码,即无加密)。如果密码不匹配或只有一方未加密,则连接将被拒绝。默认值为true。

kmrefreshrate=数据包

发送一定数量的数据包后切换到新加密密钥。默认值为-1。 -1表示自动(srt库中的0x1000000)。此选项的范围是整数,范围为0 -INT_MAX.

kmpreannounce=数据包

从发送新加密密钥到切换的数据包间隔时间。此值也适用于切换发生后和旧加密密钥退役之间的间隔时间。默认值为-1。 -1表示自动(srt库中的0x1000)。此选项的范围是整数,从0至INT_MAX.

snddropdelay=微秒

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

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

payload_size=字节

设置在单次调用发送功能时传输的最大声明数据包大小(实时模式)。使用0表示无需使用此值(默认文件模式)。 默认值为-1(自动),这通常意味着MPEG-TS;如果您打算使用SRT发送任何其他类型的有效负载,例如包装一个实时流中的非常小帧,那么可以使用更大的最大帧大小,但不能超过1456字节。

pkt_size=字节

‘的别名payload_size’.

peerlatency=微秒

发送方设定的延迟值(如rcvlatency所描述),作为接收器的最小值。

pbkeylen=字节

发送方加密密钥长度,单位为字节。 仅可设置为0、16、24和32。 如果不是0,则启用发送方加密。 接收器不需要设置(设置为0), 密钥大小通过发送方在HaiCrypt握手中获得。 默认值为0。

rcvlatency=微秒

设置从数据包发送时到接收器应用程序调用接收功能时的经过时间。 此时间应为足够大的缓冲时间,以覆盖发送时间、意外延长的RTT时间,以及重发丢失的UDP数据包所需的时间。有效的延迟值将为此选项的值与对端设置的peerlatency的最大值。在版本1.3.0之前,此选项仅作为latency.

recv_buffer_size=字节

设置UDP接收缓冲区大小,以字节表示。

send_buffer_size=字节

设置UDP发送缓冲区大小,以字节表示。

timeout=微秒

设置读取、写入和连接操作的错误超时。请注意,SRT库有内部超时,这可以单独控制,此处设置的值仅是它们的上限。

tlpktdrop=1|0

过晚数据包丢弃。当接收器启用时,它会跳过未及时交付的丢失数据包,并在其播放时间到达时将后续数据包交付给应用程序。它还会向发送方发送伪ACK。当发送方启用并且接收器对端启用时,发送方会丢弃无法及时交付的旧数据包。如果接收器支持此功能,它在发送方中会自动启用。

sndbuf=字节

设置发送缓冲区大小,以字节表示。

rcvbuf=字节

设置接收缓冲区大小,以字节表示。

接收缓冲区不能大于ffs.

lossmaxttl=数据包

重新排序容差可增长的最大值。当重新排序容差> 0,则数据包丢失报告延迟,直到该数量的数据包到达。 重新排序容差每次“迟到”数据包到达时都增加,但不是由于重传(即,当UDP数据包可能无序到达时),以最新序列与此数据包的序列之间的差异值增加,但不超过此选项的值。 默认情况下为0,表示关闭此机制,每次遇到序列间的“间隙”时都会立即发送丢失报告。

minversion

对端所需的最低SRT版本。不满足最低版本要求的对端连接将被拒绝。

十六进制版本格式为 0xXXYYZZ,表示可读形式的 x.y.z。

streamid=字符串

一个长度限制为512字符的字符串,可以在连接前设置到套接字上。监听方可以从通过 srt_accept 返回的套接字中检索到此流 ID,该套接字通过具有设置的流 ID 的套接字连接。SRT 不对此字符串的内容进行任何特殊解释。 此选项在 Rendezvous 连接中没有意义;结果可能只是某一方覆盖另一方的值,这取决于运气确定哪一方会胜。

srt_streamid=字符串

' 的别名streamid避免与 ffmpeg 命令行选项冲突。

smoother=live|file

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

messageapi=1|0

设置时,此套接字使用消息 API,否则使用缓冲区 API。注意,在 live 模式下(参见transtype), 仅可用消息 API。在文件模式下,可以选择使用以下两种模式之一:

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

消息 API。在此模式下,单次发送指令传递确切一条有边界的数据(消息)。与实时模式不同,此消息可能跨多个 UDP 数据包,而唯一的大小限制是它必须整体适合发送缓冲区。接收器必须使用足够大的缓冲区来接收消息,否则消息不会被放弃。未完成的消息(未接收所有数据包或存在数据包丢失)将不会被放弃。

transtype=live|file

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

live:将选项设置为实时传输模式。在此模式下,只应通过一次发送指令发送那么多恰好适合一个 UDP 包的数据,并受到最初定义值的限制,例如payload_size(此模式下默认值为 1316)。此模式下没有速度控制,只有带宽控制(如配置),以防止超过带宽,不包括重发和控制包的开销传输。

文件:将选项设置为非实时传输模式。请参见messageapi了解详细说明。

linger=

套接字在关闭时等待未发送数据的秒数。默认值为 -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://主机名:端口[?选项]

选项包含 & 分隔的形式为的选项列表=.

支持的选项列表如下。

listen=2|1|0

监听传入连接。0 表示禁用监听,1 表示启用单客户端模式监听,2 表示启用多客户端模式监听。默认值为 0。

local_addr=地址

用于 TCP 套接字连接的网络接口的本地 IP 地址。

local_port=端口

用于 TCP 套接字连接的本地端口。

timeout=微秒

设置错误超时触发值(以微秒为单位)。

此选项仅在读取模式下相关:如果超过此时间间隔没有数据到达,则触发错误。

listen_timeout=毫秒

设置监听超时(以毫秒为单位)。

recv_buffer_size=字节

设置接收缓冲区大小(以字节为单位)。

send_buffer_size=字节

设置发送缓冲区大小(以字节为单位)。

tcp_nodelay=1|0

设置 TCP_NODELAY 禁用 Nagle 算法。默认值为 0。

Remark: Writing to the socket is currently not optimized to minimize system calls and reduces the efficiency / effect of TCP_NODELAY.

tcp_mss=字节

设置传出的 TCP 数据包的最大分段大小(以字节为单位)。

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

ffmpeg -i 输入 -f 格式 tcp://主机名:端口?listen
ffplay tcp://主机名:端口

24.42 tls

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

TLS/SSL URL 的必需语法为:

tls://主机名:端口[?选项]

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

ca_file, cafile=文件名

包含证书颁发机构(CA)根证书的文件,作为可信证书。 如果关联的 TLS 库包含默认值,则可能无需指定此文件。 文件必须为 OpenSSL 的 PEM 格式。

tls_verify=1|0

如果启用,则尝试验证我们正在通讯的对等方。 请注意,如果使用 OpenSSL,目前仅确保对等证书由 CA 数据库中的根证书之一签署, 但未验证该证书实际上是否匹配我们尝试连接的主机名。(使用其他后端时,还会验证主机名。)

此功能默认未启用,因为在许多情况下需要调用方提供 CA 数据库。

cert_file, cert=文件名

一个文件,其中包含用于与对等方握手的证书。 (作为服务器操作时,在监听模式下,对等方通常需要此文件,而客户端证书仅在某些设置中被要求。)

key_file, key=文件名

包含证书的私钥的文件。

listen=1|0

如果启用,在指定端口上监听连接,并在握手中假设服务器角色而不是客户端角色。

http_proxy

要通过隧道的 HTTP 代理,例如http://example.com:1234。 代理必须支持 CONNECT 方法。

示例命令行:

创建一个提供输入流的 TLS/SSL 服务器。

ffmpeg -i 输入 -f 格式 tls://主机名:端口?listen&cert=server.crt&key=server.key

从TLS/SSL服务器回放流ffplay:

ffplay tls://主机名:端口

24.43 udp

用户数据报协议。

UDP URL的必需语法为:

udp://主机名:端口[?选项]

选项包含一个由&分隔的选项列表,形式为=.

如果系统启用了线程支持,将使用一个环形缓冲器来存储输入数据,从而减少UDP套接字缓冲区溢出导致的数据丢失。fifo_sizeoverrun_nonfatal选项与该缓冲区相关。

支持的选项列表如下。

buffer_size=大小

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

bitrate=比特率

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

burst_bits=比特

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

localport=端口

覆盖绑定的本地UDP端口。

localaddr=地址

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

pkt_size=大小

设置UDP数据包的字节大小。

reuse=1|0

显式允许或不允许重用UDP套接字。

ttl=TTL

设置生存时间值(仅多播)。

connect=1|0

使用connect()初始化UDP套接字。在这种情况下,目的地址不能稍后通过ff_udp_set_remote_url更改。如果起始时目的地址未知,此选项也可以在ff_udp_set_remote_url中指定。此选项允许通过getsockname找出数据包的源地址,并且,如果收到"目的地不可达"消息,写操作将返回AVERROR(ECONNREFUSED)。对于接收,这具有仅接收来自指定对等地址/端口数据包的好处。

sources=地址[,地址]

仅接收来自指定地址发出的数据包。对于多播,也仅订阅来自这些地址的数据。

block=地址[,地址]

忽略来自指定地址的数据包。对于多播,也会在多播订阅中排除这些源地址。

fifo_size=单位

设置UDP接收环形缓冲区的大小,以188字节的包数量表示。如果未指定,默认为7*4096。

overrun_nonfatal=1|0

在UDP接收环形缓冲区溢出时幸存下来。默认值为0。

timeout=微秒

设置错误超时上限,以微秒为单位。

此选项仅在读取模式下相关:如果在此时间间隔内没有数据到达,则引发错误。

broadcast=1|0

显式允许或不允许UDP广播。

请注意,在具有广播风暴保护的网络中,广播可能无法正常工作。

24.43.1 示例

  • 使用ffmpeg通过UDP流式传输到远程端点:
    ffmpeg -i 输入 -f 格式 udp://主机名:端口
    
  • 使用ffmpeg通过UDP以mpegts格式流式传输,使用188大小的UDP数据包和较大的输入缓冲区:
    ffmpeg -i 输入 -f mpegts udp://主机名:端口?pkt_size=188&buffer_size=65535
    
  • 使用ffmpeg接收来自远程端点的UDP:
    ffmpeg -i udp://[多播地址]:端口 ...
    

24.44 unix

Unix本地套接字

Unix套接字URL的必需语法为:

unix://文件路径

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

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的发布-订阅模式实现的。服务端绑定到端口并发布数据。客户端连接到服务端(通过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.hAPI实现编程使用。

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部分是可选的。

三个参数(按顺序:CARD,DEV,SUBDEV)指定卡号或标识符、设备号和子设备号(-1 表示任何设备)。

要查看系统当前识别的卡列表,请检查文件/proc/asound/cards/proc/asound/devices.

例如,要从卡号为 0 的 ALSA 设备捕获数据,可以运行以下命令:ffmpeg from an ALSA device with card id 0, you may run the command:

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 <INDEX> 和/或 -audio_device_index <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 decklink

decklink 输入设备提供对 Blackmagic DeckLink 设备的捕获功能。

要启用此输入设备,您需要 Blackmagic DeckLink SDK,并需要使用适当的--extra-cflags--extra-ldflags进行配置。 在 Windows 上,您需要运行 IDL 文件通过widl.

DeckLink 对其支持的格式非常挑剔。可以使用raw_format设置输入的视频格式。 帧率和视频尺寸必须通过-list_formats 1确定您的设备。 音频样本速率始终为 48 kHz,通道数可以是 2、8 或 16。请注意,所有音频通道捆绑在一个音轨中。

26.4.1 选项

list_devices

如果设置为true,打印设备列表并退出。 默认值是false。此选项已被弃用,请使用 ffmpeg 的-sources选项列出可用输入设备。

list_formats

如果设置为true,打印支持的格式列表并退出。 默认值是false.

format_code <FourCC>

此选项将输入视频格式设置为 FourCC 指定的格式。要查看设备支持的值,请使用list_formats。 请注意,还有一个 FourCC'pal '也可以用作pal(3个字母)。 默认行为是自动检测输入视频格式(如果硬件支持)。

raw_format

设置抓取视频的像素格式。 可用值包括:

auto

这是默认值,表示使用 8 位 YUV 422 或 8 位 ARGB(如果启用了格式自动检测),否则为 8 位 YUV 422。

uyvy422

8位 YUV 422。

yuv422p10

10位 YUV 422。

argb

8位 RGB。

bgra

8位 RGB。

rgb10

10位 RGB。

teletext_lines

如果设置为非零值,将从垂直辅助数据中捕获一个额外的字幕流。支持SD PAL (576i) 和 HD (1080i或1080p) 源。在HD源的情况下,将解码OP47数据包。

此选项是捕获的SD PAL VBI行的位掩码,具体为第6到第22行,以及第318到第335行。掩码中第6行是最低有效位。未包含字幕信息的选定行将被忽略。您可以使用特殊的all常量以选择所有可能的行,或standard跳过第6、318和319行,这些行与所有接收器不兼容。

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

channels

定义要捕获的音频通道数。必须是‘2’, ‘8’或‘16’。默认为‘2’.

duplex_mode

设置DeckLink设备的双工/配置文件模式。必须是‘unset’, ‘half’, ‘full’, ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’。默认为‘unset’.

注意:DeckLink SDK 11.0将双工属性替换为配置文件属性。对于DeckLink Duo 2和DeckLink Quad 2,配置文件在使用相同连接器的任何两个子设备之间共享。对于DeckLink 8K Pro,配置文件在所有四个子设备之间共享。因此,DeckLink 8K Pro支持四个配置文件。

DeckLink 8K Pro的有效配置文件模式(使用DeckLink SDK >= 11.0):‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half

DeckLink Quad 2和DeckLink Duo 2的有效配置文件模式:‘half’, ‘full

timecode_format

要包含在帧和视频流元数据中的时间码类型。必须是‘none’, ‘rp188vitc’, ‘rp188vitc2’, ‘rp188ltc’, ‘rp188hfr’, ‘rp188any’, ‘vitc’, ‘vitc2’,或‘serial’。默认为‘none’(不包含)。

为了正确支持50/60 fps的时间码,对于‘rp188any’时间码类型的查询顺序为HFR、VITC1、VITC2和LTC(针对>30 fps的内容)。请注意,这与DeckLink API使用的顺序略有不同,后者是HFR、VITC1、LTC、VITC2。

video_input

设置视频输入源。必须是‘unset’, ‘sdi’, ‘hdmi’, ‘optical_sdi’, ‘component’, ‘composite’或‘s_video’。默认为‘unset’.

audio_input

设置音频输入源。必须是‘unset’, ‘embedded’, ‘aes_ebu’, ‘analog’, ‘analog_xlr’, ‘analog_rca’或‘microphone’。默认为‘unset’.

video_pts

设置视频数据包时间戳源。必须是‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。默认为‘video’.

audio_pts

设置音频数据包时间戳源。必须是‘video’, ‘audio’, ‘reference’, ‘wallclock’或‘abs_wallclock’。默认为‘audio’.

draw_bars

如果设置为‘true’,在信号丢失的情况下绘制彩条。默认为‘true’。此选项已弃用,请使用signal_loss_action选项。

signal_loss_action

设置在信号丢失情况下的操作。接受以下值之一:

1, none

信号丢失时不采取任何操作。这通常会导致黑帧。

2, bars

信号丢失时绘制彩条。仅支持8位输入信号。

3, repeat

信号丢失时重复最后一个视频帧。

默认为‘bars’.

queue_size

设置最大输入缓冲区大小(以字节为单位)。如果缓冲达到此值,将丢弃传入帧。默认为‘1073741824’.

audio_depth

设置音频采样位深。必须是‘16’或‘32’。默认为‘16’.

decklink_copyts

如果设置为true,时间戳将按原样转发,不移除初始偏移。默认为false.

timestamp_align

捕获开始时间对齐(以秒为单位)。如果设置为非零值,输入帧将被丢弃,直到系统时间戳与配置的值对齐。容忍高达一帧持续时间的对齐差异。这对于在‘N路’冗余中维护N个不同硬件设备的输入同步非常有用。在使用此选项之前,不同硬件设备的系统时间应通过NTP或PTP等协议进行同步。请注意,此方法并非万无一失。在某些边界情况下,由于操作系统中的线程调度抖动,输入同步可能无法发生。同步可能错误1帧或者在更少见的情况下出现timestamp_align秒的错误。默认为‘0’.

wait_for_tc (bool)

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

enable_klv(bool)

如果设置为true,从VANC中提取KLV数据并输出KLV数据包。基于MID和PSC字段合并KLV VANC数据包,并聚合为一个KLV数据包。默认为false.

26.4.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.5 dshow

Windows DirectShow输入设备。

当FFmpeg使用mingw-w64项目构建时启用DirectShow支持。目前仅支持音频和视频设备。

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

输入名称格式应为:

类型=名称[:类型=名称]

其中类型可以是音频或者视频名称是设备的名称或替代名称。

26.5.1 选项

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

video_size

设置捕获视频的分辨率。

framerate

设置捕获视频的帧率。

sample_rate

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

sample_size

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

channels

设置捕获音频的通道数。

list_devices

如果设置为true,打印设备列表并退出。

list_options

如果设置为true,打印选定设备的选项列表并退出。

video_device_number

为同名设备设置视频设备编号(从0开始,默认为0)。

audio_device_number

为同名设备设置音频设备编号(从0开始,默认为0)。

pixel_format

选择DirectShow使用的像素格式。仅当视频编解码器未设置或设置为rawvideo时,才可设置。

audio_buffer_size

设置音频设备缓冲区大小(以毫秒计),这会直接影响延迟,具体取决于设备。默认为使用音频设备的默认缓冲区大小(通常是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

如果设置为true,在捕获开始之前,弹出一个显示对话框供终端用户手动更改视频过滤器属性和配置。注意,对于交叉开关设备,有时需要调整此对话框中的值以在PAL (25 fps) 和 NTSC (29.97) 输入帧速率、尺寸、交织等之间切换。更改这些值可以启用不同的扫描速率/帧速率并避免底部出现绿色条纹、扫描线闪烁等问题。此外,对于某些设备,更改这些属性也可能会影响未来调用(设置新的默认值),直到系统重启后。

show_audio_device_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供终端用户手动更改音频过滤器属性和配置。

show_video_crossbar_connection_dialog

如果设置为true,在打开视频设备时捕获开始之前,弹出一个显示对话框供终端用户手动修改交叉开关引脚路由。

show_audio_crossbar_connection_dialog

如果设置为true,在打开音频设备时捕获开始之前,弹出一个显示对话框供终端用户手动修改交叉开关引脚路由。

show_analog_tv_tuner_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供终端用户手动修改电视频道和频率。

show_analog_tv_tuner_audio_dialog

如果设置为true,在捕获开始之前,弹出一个显示对话框供终端用户手动修改电视音频(如单声道 vs 立体声,语言A、B或C)。

audio_device_load

从文件加载音频捕获过滤器设备而不是根据名称搜索。它也可能加载额外的参数,如果过滤器支持其属性的序列化。要使用此功能,必须指定音频捕获源,但它可以是任何东西甚至是虚假的。

audio_device_save

将当前使用的音频捕获过滤器设备及其参数(如果过滤器支持)保存到文件。如果存在同名文件,它将被覆盖。

video_device_load

从文件加载视频捕获过滤器设备而不是根据名称搜索。它也可能加载额外的参数,如果过滤器支持其属性的序列化。要使用此功能,必须指定视频捕获源,但它可以是任何东西甚至是虚假的。

video_device_save

将当前使用的视频捕获过滤器设备及其参数(如果过滤器支持)保存到文件。如果存在同名文件,它将被覆盖。

use_video_device_timestamps

如果设置为false,视频帧的时间戳将从时钟源推导,而不是使用捕获设备提供的时间戳。这可以解决设备提供不可靠时间戳的问题。

26.5.2 例子

  • 打印DirectShow支持的设备列表并退出:
    $ ffmpeg -list_devices true -f dshow -i dummy
    
  • 打开视频设备相机:
    $ ffmpeg -f dshow -i video="Camera"
    
  • 打开名为的第二个视频设备相机:
    $ ffmpeg -f dshow -video_device_number 1 -i video="Camera"
    
  • 打开视频设备相机和音频设备麦克风:
    $ ffmpeg -f dshow -i video="Camera":audio="Microphone"
    
  • 打印所选设备中支持的选项列表并退出:
    $ ffmpeg -list_options true -f dshow -i video="Camera"
    
  • 通过名称或替代名称指定捕获的引脚名称,指定替代设备名称:
    $ ffmpeg -f dshow -audio_pin_name "Audio Out" -video_pin_name 2 -i video=video="@device_pnp_\\?\pci#ven_1a0a&dev_6200&subsys_62021461&rev_01#4&e2c7dd6&0&00e1#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\{ca465100-deb0-4d59-818f-8c477184adf6}":audio="Microphone"
    
  • 配置交叉开关设备,指定交叉开关引脚,允许用户在启动时调整视频捕获属性:
    $ ffmpeg -f dshow -show_video_device_dialog true -crossbar_video_input_pin_number 0
         -crossbar_audio_input_pin_number 3 -i video="AVerMedia BDA Analog Capture":audio="AVerMedia BDA Analog Capture"
    

26.6 fbdev

Linux帧缓冲输入设备。

Linux帧缓冲是一个与硬件无关的图形抽象层,用于在计算机监视器上显示图形,通常是在控制台上。通过文件设备节点访问,通常是/dev/fb0.

有关更详细的信息,请阅读包括在Linux源代码树中的文件Documentation/fb/framebuffer.txt。

另请参阅http://linux-fbdev.sourceforge.net/以及fbset(1)。

从帧缓冲设备记录/dev/fb0使用ffmpeg:

ffmpeg -f fbdev -framerate 10 -i /dev/fb0 out.avi

可以使用以下命令生成单个屏幕截图图像:

ffmpeg -f fbdev -framerate 1 -i /dev/fb0 -frames:v 1 screenshot.jpeg

26.6.1 选项

framerate

设置帧速率。默认值是25。

26.7 gdigrab

基于Win32 GDI的屏幕捕获设备。

此设备允许您在Windows上捕获显示屏的一个区域。

输入文件名的选项包括以下元素:

desktop

title=窗口标题

hwnd=窗口句柄

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

例如,使用ffmpeg:

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

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

ffmpeg -f gdigrab -framerate 6 -offset_x 10 -offset_y 20 -video_size vga -i desktop out.mpg

抓取名为“计算器”的窗口内容

ffmpeg -f gdigrab -framerate 6 -i title=Calculator out.mpg

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

设置视频帧尺寸。如果desktop被选择,则默认值是捕获全屏;如果选择title=窗口标题,则默认值是捕获整个窗口大小。

offset_x

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

注意,该偏移计算是从Windows中的主监视器左上角开始。如果您的主监视器左侧有一个监视器,则需要使用负值offset_x将区域移动到那个监视器。

offset_y

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

注意,该偏移计算是从Windows中的主监视器左上角开始。如果您的主监视器上方有一个监视器,则需要使用负值offset_y将区域移动到那个监视器。

26.8 iec61883

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

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

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

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

26.8.1 选项

dvtype

覆盖DV/HDV的自动检测。这应该仅在自动检测不起作用时使用,或者在禁止使用不同的设备类型时使用。将DV设备视为HDV(或反之亦然)将不起作用并导致未定义的行为。支持值auto, dvhdv

dvbuffer

设置用于接收数据的最大缓冲区大小,以帧为单位。对于DV,这是一个确切值。对于HDV,它不是帧确切的,因为HDV没有固定帧大小。

dvguid

通过指定其 GUID 来选择捕获设备。捕获将仅从指定设备执行,如果未找到具有给定 GUID 的设备,则捕获失败。这在同时连接多个设备时选择输入非常有用。 查看 /sys/bus/firewire/devices 以查找 GUID。

26.8.2 示例

  • 捕获并显示 FireWire DV/HDV 设备的输入。
    ffplay -f iec61883 -i auto
    
  • 捕获并记录 FireWire DV/HDV 设备的输入, 如果源是 HDV,则使用包含 100000 个数据包的缓冲区。
    ffmpeg -f iec61883 -i auto -dvbuffer 100000 out.mpg
    

26.9 JACK

JACK 输入设备。

要在配置期间启用此输入设备,您需要在系统上安装 libjack。

JACK 输入设备为每个音频通道创建一个或多个可写的 JACK 客户端,其名称为client_name:input_N,其中client_name是应用程序提供的名称,N是标识频道的数字。 每个可写客户端将把收到的数据发送到 FFmpeg 输入设备。

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

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

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

以下是一个示例,显示如何使用ffmpeg.

# Create a JACK writable client with name "ffmpeg".
$ ffmpeg -f jack -i ffmpeg -y out.wav

# Start the sample jack_metro readable client.
$ jack_metro -b 120 -d 0.2 -f 4000

# List the current JACK clients.
$ jack_lsp -c
system:capture_1
system:capture_2
system:playback_1
system:playback_2
ffmpeg:input_1
metro:120_bpm

# Connect metro to the ffmpeg writable client.
$ jack_connect metro:120_bpm ffmpeg:input_1

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

26.9.1 选项

channels

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

26.10 kmsgrab

KMS 视频输入设备。

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

需要 DRM master 或 CAP_SYS_ADMIN 权限才能运行。

如果您不明白这些内容,这可能不是您需要的功能。请查看x11grab代替。

26.10.1 选项

device

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

format

帧缓冲区的像素格式。如果运行的是 Linux 5.7 或更高版本,可以自动检测,否则需要手动提供。默认值为bgr0, 这是 Linux 控制台和 Xorg X 服务器最常用的格式。

format_modifier

输出帧的格式修饰符。这对于正确导入某些 API 是必要的。如果运行的是 Linux 5.7 或更高版本,可以自动检测,否则在需要时需要手动提供。在 libdrm 文档中可以找到可能的值。

crtc_id

用于定义捕获源的 KMS CRTC ID。将使用给定 CRTC 上的第一个活动平面。

plane_id

用于定义捕获源的 KMS 平面 ID。如果未指定crtc_idplane_id,默认为找到的第一个活动平面。

framerate

捕获的帧速率。此速率不与页面翻转或帧缓冲区变更同步 - 它仅定义帧缓冲区采样的间隔。如果采样速度快于帧缓冲区更新速率,将生成内容相同的独立帧。默认值为30.

26.10.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.11 lavfi

Libavfilter 输入虚拟设备。

此输入设备从 libavfilter 滤波图的开放输出端读取数据。

对于每个滤波图开放输出,输入设备将创建一个相应的流并将其映射到生成的输出。 通过选项指定滤波图:graph.

26.11.1 选项

graph

指定要作为输入使用的滤波图。每个视频开放输出必须以格式 "outN" 的唯一字符串标记,其中N是从 0 开始的编号,对应设备生成的映射的输入流。 第一个未标记输出将自动分配为 "out0" 标签,但其他所有需要明确指定。

可以在输出标签后附加后缀 "+subcc",以创建一个附加的流,其封闭字幕数据包附加到该输出(实验性;目前仅适用于 EIA-608 / CEA-708)。 子字幕流的创建顺序在所有普通流之后,且与对应流的顺序一致。 例如,如果有 "out19+subcc"、"out7+subcc" 和最多 "out42",则第 43 流是流 #7 的子字幕,流 #44 是流 #19 的子字幕。

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

graph_file

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

dumpgraph

将图表转储到标准错误输出。

26.11.2 示例

  • 创建一个彩色视频流并使用ffplay:
    ffplay -f lavfi -graph "color=c=pink [out0]" dummy
    
  • 如前一个示例,但使用文件名指定图表描述,并省略 "out0" 标签:
    ffplay -f lavfi color=c=pink
    
  • 创建三个不同的视频测试滤波源并播放它们:
    ffplay -f lavfi -graph "testsrc [out0]; testsrc,hflip [out1]; testsrc,negate [out2]" test3
    
  • 使用 amovie 源从文件读取音频流并使用ffplay:
    ffplay -f lavfi "amovie=test.wav"
    
  • 读取音频流和视频流并使用ffplay:
    ffplay -f lavfi "movie=test.avi[out0];amovie=test.wav[out1]"
    
  • 将解码帧转储为图像,并将闭合字幕转储为 RCWT 备份:
    ffmpeg -f lavfi -i "movie=test.ts[out0+subcc]" -map v frame%08d.png -map s -c copy -f rcwt subcc.bin
    

26.12 libcdio

基于 libcdio 的 Audio-CD 输入设备。

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

此设备允许播放和抓取 Audio-CD。

例如,要使用ffmpeg复制整个 Audio-CD 到/dev/sr0, 您可以运行以下命令:

ffmpeg -f libcdio -i /dev/sr0 cd.wav

26.12.1 选项

speed

设置驱动器读取速度。默认值为 0。

速度以 CD-ROM 速度单位指定。速度通过 libcdio 中的cdio_cddap_speed_set函数设置。在许多 CD-ROM 驱动器上,指定过大的值会导致使用最快速度。

paranoia_mode

设置偏执恢复模式标志。它接受以下值之一:

disable
verify
overlap
neverskip
full

默认值为“disable’.

有关可用恢复模式的更多信息,请参考 paranoia 项目文档。

26.13 libdc1394

基于 libdc1394 和 libraw1394 的 IIDC1394 输入设备。

需要配置选项:--enable-libdc1394.

26.13.1 选项

framerate

设置帧速率。默认值为ntsc,对应于帧速率30000/1001.

pixel_format

选择像素格式。默认值为uyvy422.

video_size

设置视频尺寸,指定为类似字符串640x480hd720。 默认值为qvga.

26.14 openal

OpenAL 输入设备提供在所有支持 OpenAL 1.1 实现的系统上的音频捕获。

要在配置期间启用此输入设备,您需要在系统上安装 OpenAL 头文件和库,并需要用以下选项配置 FFmpeg:--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.

苹果

OpenAL是Core Audio的一部分,它是Mac OS X的官方音频接口。 查看http://developer.apple.com/technologies/mac/audio-and-video.html

此设备允许通过OpenAL从音频输入设备捕获。

你需要在提供的文件名中指定要捕获的设备名称。如果提供的是空字符串,设备将自动选择默认设备。你可以通过使用选项list_devices.

26.14.1 选项

channels

设置捕获音频的通道数。目前仅支持值1(单声道) 和2(立体声)。 默认值为2.

sample_size

设置捕获音频的采样大小(以位为单位)。目前仅支持值816。默认值为16.

sample_rate

设置捕获音频的采样率(以Hz为单位)。 默认值为44.1k.

list_devices

如设置为true, 则打印设备列表并退出。 默认值为false.

26.14.2 示例

打印支持OpenAL的设备列表并退出:

$ ffmpeg -list_devices true -f openal -i dummy out.ogg

从OpenAL设备捕获:DR-BT101 via PulseAudio:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out.ogg

从默认设备捕获(注意文件名为空字符串“”):

$ ffmpeg -f openal -i '' out.ogg

同时从两个设备捕获,写入两个不同的文件, 在同一个ffmpeg命令下:

$ ffmpeg -f openal -i 'DR-BT101 via PulseAudio' out1.ogg -f openal -i 'ALSA Default' out2.ogg

注意: 并非所有OpenAL实现都支持多个设备同时捕获 - 如果上述方法无效,请尝试最新的OpenAL Soft。

26.15 oss

Open Sound System输入设备。

提供给输入设备的文件名是表示OSS输入设备的设备节点,通常设置为/dev/dsp.

例如,从/dev/dsp中抓取时ffmpeg使用以下 命令:

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

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

26.15.1 选项

sample_rate

设置采样率(单位: Hz)。默认值为48000。

channels

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

26.16 pulse

PulseAudio输入设备。

要启用此输出设备,您需要使用以下配置选项配置FFmpeg--enable-libpulse.

提供给输入设备的文件名是一个源设备或字符串"default"。

要列出PulseAudio源设备及其属性,可以运行命令pactl list sources.

关于PulseAudio的更多信息,请参见http://www.pulseaudio.org.

26.16.1 选项

server

连接到一个特定的PulseAudio服务器,由IP地址指定。 如果未提供,则使用默认服务器。

name

指定PulseAudio显示活动客户端时使用的应用程序名称, 默认值是LIBAVFORMAT_IDENT字符串。

stream_name

指定PulseAudio显示活动流时使用的流名称, 默认值是"record"。

sample_rate

指定采样率(单位: Hz),默认值为48kHz。

channels

指定使用的通道数,默认设置为2(立体声)。

frame_size

此选项无效,已被废弃。

fragment_size

指定PulseAudio中最小缓冲片段的大小(以字节为单位), 这将影响音频延迟。默认设置为50毫秒的数据量。

wallclock

使用当前时间设置初始PTS。默认值为1。

26.16.2 示例

从默认设备记录流:

ffmpeg -f pulse -i default /tmp/pulse.wav

26.17 sndio

sndio输入设备。

要在配置期间启用此输入设备,您需要在系统上安装libsndio。

提供给输入设备的文件名是表示sndio输入设备的设备节点,通常设置为/dev/audio0.

例如,从/dev/audio0中抓取时ffmpeg使用以下 命令:

ffmpeg -f sndio -i /dev/audio0 /tmp/oss.wav

26.17.1 选项

sample_rate

设置采样率(单位: Hz)。默认值为48000。

channels

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

26.18 video4linux2, v4l2

Video4Linux2输入视频设备。

"v4l2"可以作为"video4linux2"的别名使用。

如果FFmpeg通过使用--enable-libv4l2配置选项构建了v4l-utils支持,则可以与-use_libv4l2输入设备选项一起使用。

要抓取设备的名称是一个文件设备节点,通常当设备(例如USB摄像头)插入系统时,Linux系统会自动创建这样的节点,其名称类似于/dev/videoN,其中N是与设备关联的编号。

Video4Linux2设备通常支持有限的宽度x高度尺寸和帧速率。您可以使用以下方式检查支持的尺寸和帧速率:-list_formats all用于Video4Linux2设备。 某些设备,例如电视卡,支持一个或多个标准。可以使用以下命令列出所有支持的标准:-list_standards all.

时间戳的时间基数为1微秒。根据内核版本和配置,时间戳可能源自实时时钟(Unix纪元起点)或单调时钟(通常在启动时间起点,不受NTP或手动更改时间的影响)。-timestamps abs-ts abs选项可以用来强制 转换为实时时钟。

以下是使用video4linux2设备的一些用例示例:ffmpegffplay:

  • 列出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.18.1 选项

standard

设置标准。必须是支持的标准的名称。要获得支持的标准列表,请使用list_standards选项。

channel

设置输入通道号。默认值为-1,这意味着使用之前选择的通道。

video_size

设置视频帧大小。参数必须是以下格式的字符串宽度x高度或一个有效的尺寸缩写。

pixel_format

选择像素格式(仅适用于原始视频输入)。

input_format

设置首选的像素格式(针对原始视频)或编解码器名称。 此选项允许在有多个可用格式时选择输入格式。

framerate

设置首选的视频帧率。

list_formats

列出可用格式(支持的像素格式、编解码器和帧尺寸)并退出。

可用的值为:

all

显示所有可用的(压缩和未压缩的)格式。

raw

仅显示原始视频(未压缩的)格式。

compressed

仅显示压缩格式。

list_standards

列出支持的标准并退出。

可用的值为:

all

显示所有支持的标准。

timestamps, ts

设置捕获帧的时间戳类型。

可用的值为:

default

使用内核中的时间戳。

abs

使用绝对时间戳(系统时间)。

mono2abs

强制将单调时间戳转换为绝对时间戳。

默认值为default.

use_libv4l2

使用libv4l2(v4l-utils)转换功能。默认值为0。

26.19 vfwcap

VfW(Windows视频)捕获输入设备。

作为输入传递的文件名是捕获驱动程序编号,范围为0到9。可以使用"list"作为文件名来打印驱动程序列表。 任何其他的文件名将被解释为设备编号0。

26.19.1 选项

video_size

设置视频帧尺寸。

framerate

设置捕捉帧率。默认值为ntsc, 对应的帧率为30000/1001.

26.20 x11grab

X11视频输入设备。

为在配置期间启用此输入设备,您的系统需要安装libxcb。 在配置期间会自动检测到它。

该设备允许捕获X11显示区域。

作为输入传递的文件名的语法为:

[主机名]:显示编号.屏幕编号[+x偏移,y偏移]

主机名:显示编号.屏幕编号指定要捕获的 X11屏幕的显示名称。主机名可以忽略,默认为"localhost"。 环境变量DISPLAY包含默认的显示名称。

x偏移y偏移指定捕获区域相对于X11屏幕左上角的偏移。 默认值为0。

请查阅X11文档(如man X)以获得更多详细信息。

使用xdpyinfo程序获取有关 X11显示属性的基本信息(例如,可以grep "name" 或 "dimensions")。

例如,从:0.0捕获,使用ffmpeg:

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

在位置捕获10,20:

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

26.20.1 选项

select_region

指定是否使用鼠标选择捕获区域。 值为1提示用户通过点击拖动图形化选择捕获区域。 单击且不拖动将选择整个屏幕。 宽度或高度为零的区域也将选择整个屏幕。 此选项将覆盖视频尺寸, 抓取x抓取y选项。默认值为0.

draw_mouse

指定是否显示鼠标指针。 值为0指定不绘制指针。默认值为1.

follow_mouse

让捕获区域跟随鼠标。 参数可以为centered或像素数像素.

当值为"centered"时,捕获区域跟随鼠标并保持鼠标位于区域中心; 否则,只有当鼠标指针到达区域边缘像素(大于零)以内时区域才会跟随。

例如:

ffmpeg -f x11grab -follow_mouse centered -framerate 25 -video_size cif -i :0.0 out.mpg

当鼠标指针到达边缘100像素范围内才跟随:

ffmpeg -f x11grab -follow_mouse 100 -framerate 25 -video_size cif -i :0.0 out.mpg
framerate

设置捕获帧率。默认值为ntsc, 对应的帧率为30000/1001.

show_region

在屏幕上显示捕获区域。

如果显示区域被指定为1,那么 屏幕上将标记捕获区域。 通过此选项,可以轻松知道捕获的区域是否为 屏幕的一部分。

region_border

设置区域边框厚度(如果-show_region 1已使用)。 范围是1到128,默认值为3(仅适用于基于XCB的x11grab)。

例如:

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

通过跟随鼠标:

ffmpeg -f x11grab -follow_mouse centered -show_region 1 -framerate 25 -video_size cif -i :0.0 out.mpg
window_id

仅捕获该窗口,而不是整个屏幕。 默认值为0,对应于整个屏幕(根窗口)。

可以使用xwininfo程序找到窗口的id, 可能需要使用-tree和 -root选项。

如果窗口随后被放大,新区域不会被记录。 当窗口关闭、从映射中移除(例如图标化)或缩小到 小于视频尺寸(默认为初始窗口尺寸)时,视频将结束。

此选项将禁用选项follow_mouseselect_region.

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

如果设置为true,打印可用驱动程序列表并退出。

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上,您需要通过以下工具运行IDL文件widl.

DeckLink对所支持的格式非常挑剔。像素格式始终为uyvy422,帧速率、场顺序和视频大小必须根据您的设备通过以下工具确定-list_formats 1。音频采样率始终为48 kHz。

27.4.1 选项

list_devices

如果设置为true,打印设备列表并退出。 默认为false。此选项已被弃用,请使用ffmpeg的以下选项来列出可用的输出设备。-sinks option of ffmpeg to list the available output devices.

list_formats

如果设置为true,打印支持的格式列表并退出。 默认为false.

preroll

设定视频预加载时间(秒)。 默认为0.5.

duplex_mode

设置decklink设备的双工/配置文件模式。必须为‘unset’, ‘half’, ‘full’, ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half’。 默认为‘unset’.

注意:DeckLink SDK 11.0已将duplex属性替换为profile属性。 对于DeckLink Duo 2和DeckLink Quad 2,共享属性在任何使用相同连接器的2个子设备之间共享。 对于DeckLink 8K Pro,共享属性在所有4个子设备之间共享。因此DeckLink 8K Pro支持四种配置。

DeckLink 8K Pro的有效配置模式(DeckLink SDK >= 11.0): ‘one_sub_device_full’, ‘one_sub_device_half’, ‘two_sub_device_full’, ‘four_sub_device_half

DeckLink Quad 2和DeckLink Duo 2的有效配置模式: ‘half’, ‘full

timing_offset

设置在使用的输出上的genlock定时像素偏移。 默认为‘unset’.

link

设置在使用的输出上的SDI视频链路配置。必须为 ‘unset’, ‘single’链路SDI,‘dual’链路SDI或‘quad’链路SDI。 默认为‘unset’.

sqd

为四联SDI输出启用Square Division Quad Split模式。 必须为‘unset’, ‘true’或‘false’。 默认为unset.

level_a

在使用的输出上启用SMPTE Level A模式。 必须为‘unset’, ‘true’或‘false’。 默认为unset.

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.

有关更详细的信息,请读取以下文件Documentation/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 oss

OSS(开放声音系统)输出设备。

27.7 pulse

PulseAudio 输出设备。

要启用此输出设备,需要使用以下命令配置 FFmpeg--enable-libpulse.

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

27.7.1 选项

server

连接到指定的 PulseAudio 服务器,通过 IP 地址指定。 如果未提供,将使用默认服务器。

name

指定 PulseAudio 在显示活跃客户端时使用的应用程序名称, 默认值是LIBAVFORMAT_IDENT字符串。

stream_name

指定 PulseAudio 在显示活跃流时使用的流名称, 默认值设置为指定的输出名称。

device

指定要使用的设备。如果未提供,将使用默认设备。 可以使用以下命令获取输出设备列表pactl list sinks.

buffer_size
buffer_duration

控制 PulseAudio 缓冲区的大小和持续时间。小缓冲区 提供更多控制,但需要更频繁的更新。

buffer_size指定以字节为单位的大小,而buffer_duration指定以毫秒为单位的持续时间。

当同时提供两项时,将使用较大的值 (持续时间将根据流参数重新计算为字节数)。如果将 其设置为 0(默认值),设备将使用默认的 PulseAudio 持续时间值。默认情况下,PulseAudio 将缓冲区持续时间 设置为大约 2 秒。

prebuf

指定预缓冲大小(以字节为单位)。在缓冲区中至少有prebuf字节可用之前,服务器不会开始播放。 默认情况下,此选项初始化为与buffer_sizebuffer_duration(取较大值)相同的值。

minreq

指定最小请求大小(以字节为单位)。服务器从客户端请求的 字节数不会少于minreq字节,而是等待缓冲区 足够空闲以一次性请求更多字节。不推荐设置此选项, 此时默认会初始化为服务器认为合适的值。

27.7.2 示例

在默认服务器上的默认设备上播放文件:

ffmpeg  -i INPUT -f pulse "stream name"

27.8 sndio

sndio 音频输出设备。

27.9 v4l2

Video4Linux2 输出设备。

27.10 xv

XV(XVideo)输出设备。

此输出设备允许在 X Window 系统窗口中显示视频流。

27.10.1 选项

display_name

指定硬件显示名称,该名称决定了使用的显示和通信域。

显示名称或 DISPLAY 环境变量可以是格式为主机名[:编号[.屏幕编号]].

主机名指定显示器物理连接的主机的名称。编号指定 该主机上的显示服务器编号。屏幕编号指定 服务器上使用的屏幕。

如果未指定,其默认值为 DISPLAY 环境变量的值。

例如,dual-headed:0.1将指定机器“dual-headed”上的显示器 0 的屏幕 1。

有关显示名称格式的更详细信息,请参阅 X11 规范。

window_id

当设置为非零值时,设备不会创建新窗口, 而是使用带有提供的window_id的现有窗口。 默认情况下,此选项设置为 0,设备会创建自己的窗口。

window_size

设置创建窗口的大小,可以是形式为宽度x高度或视频尺寸缩写的字符串。如果未 指定,默认值是输入视频的尺寸。 当window_id已设置时被忽略。

window_x
window_y

设置创建窗口的 X 和 Y 偏移量,两者默认都为 0。 窗口管理器可能会忽略这些值。 当window_id已设置时被忽略。

window_title

设置窗口标题,如果未指定,则默认为输出设备指定的文件名。 当window_id已设置时被忽略。

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

27.10.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.hAPI 进行编程使用。

uchl, used_chlayout

设置使用的输入通道布局。默认未设置。此选项仅用于特殊重新映射。

isr, in_sample_rate

设置输入采样率。默认值为 0。

osr, out_sample_rate

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

isf, in_sample_fmt

指定输入采样格式。默认设置为none.

osf, out_sample_fmt

指定输出采样格式。默认设置为none.

tsf, internal_sample_fmt

设置内部采样格式。默认值为none。 如果未明确设置,将自动选择。

ichl, in_chlayout
ochl, out_chlayout

设置输入/输出通道布局。

参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的通道布局部分以了解所需语法。

clev, center_mix_level

设置中心混合级别。以分贝表示,必须在区间 [-32,32] 之内。

slev, surround_mix_level

设置环绕混合级别。以分贝表示,必须在区间 [-32,32] 之内。

lfe_mix_level

设置将 LFE 混合到非 LFE 的级别。当有 LFE 输入但没有 LFE 输出时使用。 以分贝表示,必须在区间 [-32,32] 之内。

rmvol, rematrix_volume

设置重混矩阵的音量。默认值为1.0。

rematrix_maxval

设置重混最大输出值。 这可以用于防止削波或防止音量下降。 使用1.0的值可防止削波。

flags, swr_flags

设置转换器使用的标志。默认值为0。

它支持以下单独的标志:

res

强制重采样,此标志会强制使用重采样,即使输入和输出的采样率相匹配。

dither_scale

设置抖动比例。默认值为1。

dither_method

设置抖动方法。默认值为0。

支持的值:

rectangular

选择矩形抖动

triangular

选择三角抖动

triangular_hp

选择带高通的三角抖动

lipshitz

选择Lipshitz噪声整形抖动。

shibata

选择Shibata噪声整形抖动。

low_shibata

选择低Shibata噪声整形抖动。

high_shibata

选择高Shibata噪声整形抖动。

f_weighted

选择f加权噪声整形抖动

modified_e_weighted

选择修改后的e加权噪声整形抖动

improved_e_weighted

选择改进的e加权噪声整形抖动

resampler

设置重采样引擎。默认值为swr。

支持的值:

swr

选择原生SW重采样器;过滤器选项`precision`和`cheby`在这种情况下不适用。

soxr

选择SoX重采样器(如果可用);补偿和过滤器选项`filter_size`、`phase_shift`、`exact_rational`、`filter_type`及`kaiser_beta`不适用。

filter_size

仅适用于swr,设置重采样过滤器大小,默认值为32。

phase_shift

仅适用于swr,设置重采样相位偏移,默认值为10,必须在区间[0,30]内。

linear_interp

启用线性插值(默认)。如果想在`exact_rational`失败时优先速度而不是质量,可以禁用它。

exact_rational

仅适用于swr,启用时尝试基于输入和输出采样率使用精确的相位计数。如果超过1 << phase_shift, 相位计数将回落到1 << phase_shift。默认启用。

cutoff

设置截止频率(swr: 6dB点;soxr: 0dB点)的比例;必须为介于0到1之间的浮点值。对于swr,默认值为0.97;对于soxr,默认值为0.91(以44100的采样率保留整个音频带到20kHz)。

precision

仅适用于soxr,设置重采样信号计算的精度,单位为比特。默认值20(与适当的抖动一起使用,适用于目标位深度为16)提供SoX的'高质量';值28提供SoX的'非常高质量'。

cheby

仅适用于soxr,选择零通带滚降(切比雪夫)及对'非理性'比率的高精度近似。默认值为0。

async

仅适用于swr,使用简单的单参数音频同步到时间戳,使用拉伸、压缩、填充和修剪。设置为1将启用填充和修剪,较大值表示每秒数据可拉伸或压缩的最大样本数量。 默认值为0,因此不应用任何补偿以使样本与音频时间戳匹配。

first_pts

仅适用于swr,假设第一个PTS应为此值。时间单位为1/采样率。 这允许在流开始时填充/修剪。默认情况下,对第一个帧的预期PTS没有任何假设,因此不会进行填充或修剪。例如,如果音频流在视频流之后开始,可以将此值设置为0以用静音填充开始部分,或修剪由于编码器延迟导致的负PTS样本。

min_comp

仅适用于swr,设置时间戳与音频数据之间的最小差异(以秒为单位),以触发数据的拉伸/压缩/填充或修剪,从而使其与时间戳匹配。默认情况下,拉伸/压缩/填充和修剪会禁用。min_comp = FLT_MAX).

min_hard_comp

仅适用于swr,设置时间戳与音频数据之间的最小差异(以秒为单位),以触发添加/删除样本来使其与时间戳匹配。此选项实际上是硬(修剪/填充)与软(压缩/拉伸)补偿之间的阈值选择。注意,所有补偿默认通过禁用。min_comp。 默认值为0.1。

comp_duration

仅适用于swr,设置数据拉伸/压缩以使其匹配时间戳的持续时间(以秒为单位)。必须是非负的双精度浮点值,默认值为1.0。

max_soft_comp

仅适用于swr,设置数据拉伸/压缩以使其匹配时间戳的最大因子。必须是非负的双精度浮点值,默认值为0。

matrix_encoding

选择矩阵化的立体声编码。

它接受以下值:

none

选择无

dolby

选择Dolby

dplii

选择Dolby Pro Logic II

默认值为none.

filter_type

仅适用于swr,选择重采样过滤器类型。这仅影响重采样操作。

它接受以下值:

cubic

选择三次方

blackman_nuttall

选择布莱克曼努特尔窗滤波器

kaiser

选择凯撒窗滤波器

kaiser_beta

仅适用于swr,设置凯撒窗滤波器的Beta值。必须为区间[2,16]内的双精度浮点值,默认值为9。

output_sample_bits

仅适用于swr,设置用于抖动的输出样本位数。必须为区间[0,64]内的整数,默认值为0,表示未使用。

放大器选项

视频放大器支持以下命名选项。

可以通过在FFmpeg工具中指定-选项 来设置选项,但存在一些仅适用于API的例外情况。 对于编程使用,它们可以明确设置在SwsContext选项或通过libavutil/opt.hAPI。

sws_flags

设置放大器标志。这也用于设置放大算法。只能选择一个算法。默认值为‘bicubic’.

它接受以下值:

fast_bilinear

选择快速双线性放大算法。

bilinear

选择双线性放大算法。

bicubic

选择双三次方放大算法。

experimental

选择实验性放大算法。

neighbor

选择最近邻缩放算法。

area

选择平均区域缩放算法。

bicublin

选择用于亮度分量的双三次放大算法,用于色度分量的双线性放大算法。

gauss

选择高斯缩放算法。

sinc

选择Sinc缩放算法。

lanczos

选择Lanczos缩放算法。默认宽度(alpha)为3,可以通过设置param0.

spline

选择自然双三次样条缩放算法。

print_info

启用打印/调试日志。

accurate_rnd

启用精确舍入。

full_chroma_int

启用完整色度插值。

full_chroma_inp

选择完整的色度输入。

bitexact

启用位精确输出。

srcw (仅适用于API)

设置源宽度。

srch (仅适用于API)

设置源高度。

dstw (仅适用于API)

设置目标宽度。

dsth (仅适用于API)

设置目标高度。

src_format (仅适用于API)

设置源像素格式(必须表示为整数)。

dst_format (仅适用于API)

设置目标像素格式(必须表示为整数)。

src_range (布尔值)

如果值设置为1,表示源是全范围。默认值为0,表示源是有限范围。

dst_range (布尔值)

如果值设置为1,为目标启用全范围。默认值为0,启用有限范围。

param0, param1

设置缩放算法参数。指定的值对某些缩放算法有效,对其他算法无效。指定的值为浮点数值。

sws_dither

设置抖动算法。接受以下值之一。默认值为‘auto’.

auto

自动选择

none

无抖动

bayer

拜耳抖动

ed

误差扩散抖动

a_dither

基于加法的算术抖动

x_dither

基于异或算术抖动(比基于加法的算术抖动更随机/更少明显的图案)。

alphablend

设置输入具有透明度但输出没有透明度时使用的透明混合。默认值为‘none’.

uniform_color

混合到统一背景色

checkerboard

混合到棋盘格

none

无混合

30 过滤器介绍

FFmpeg中的过滤启用通过libavfilter库实现。

在libavfilter中,过滤器可以有多个输入和多个输出。为了说明可能的操作类型,我们考虑以下过滤图。

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

该过滤图将输入流分成两个流,然后将一个流通过裁剪过滤器和垂直翻转过滤器,再通过将其叠加在另一个流上的方式合并。您可以用以下命令实现这一效果:

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

结果是视频的上半部分反射在输出视频的下半部分。

同一线性链中的过滤器由逗号分隔,不同线性链的过滤器由分号分隔。在我们的例子中,裁剪,垂直翻转在一个线性链中,分裂叠加分别属于另一个链。线性链连接处用方括号中的名称标记。在这个例子中,分裂过滤器会产生两个输出,它们与以下标签关联:[主][临时].

发送到分裂过滤器第二个输出的流,标记为分裂,标记为[临时],通过裁剪过滤器处理,该过滤器裁剪掉视频的下半部分,然后垂直翻转。叠加过滤器接收分裂过滤器第一个未修改输出(标记为crop filter, which crops away the lower half part of the video, and then vertically flipped. The overlay filter takes in input the first unchanged output of the split filter (which was labelled as [主]),并将其下半部分叠加了裁剪,垂直翻转过滤链生成的输出。crop,vflip filterchain.

一些过滤器接收输入的参数列表:这些参数在过滤器名称和等号之后指定,用冒号分隔开。

有所谓的源过滤器,它没有音频/视频输入,还有所谓的接收过滤器,它没有音频/视频输出。

31 graph2dot

FFmpeg中的graph2dot程序tools目录包括了一个程序用于解析过滤图描述并生成相应以dot语言编写的文本表示。

请输入以下命令:

graph2dot -h

查看如何使用graph2dot.

然后您可以将dot描述传递给dot程序(graphviz工具包中的程序),并获得过滤图的图形化表示。

例如以下命令序列:

echo 图形描述 | \
tools/graph2dot -o graph.tmp && \
dot -Tpng graph.tmp -o graph.png && \
display graph.png

可用于创建并显示代表过滤图的图像,该图由图形描述字符串描述。请注意,这个字符串必须是完整的自包含图,输入和输出必须明确定义。例如如果您的命令行形式为:

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

您的图形描述字符串需要为以下形式:

nullsrc,scale=640:360,nullsink

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

32 过滤图描述

过滤图是连接过滤器的有向图。它可以包含循环,并且在过滤器对之间可以有多个链接。每个链接在一侧有一个连接其输入的输入端口,以及另一侧连接其输出的输出端口。

过滤图中的每个过滤器都是注册在应用程序中的过滤器类的一个实例,它定义了过滤器的特性以及输入和输出端口的数量。

没有输入端口的过滤器称为“源”,而没有输出端口的过滤器称为“接收”。

32.1 过滤图语法

过滤图有一个文本表示形式,这被以下选项识别:-filter/-vf/-af-filter_complexffmpeg-vf/-afffplay中,以及以下定义的函数avfilter_graph_parse_ptr()libavfilter/avfilter.h.

中定义。

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

过滤器由以下格式的字符串表示:输入链接_1]...[输入链接_N]过滤器名称@id=参数[输出链接_1]...[输出链接_M]

过滤器名称是过滤器类的名称,描述的过滤器是该类的一个实例,并且需要是程序中注册的过滤器类的名称,可以选择性地跟随一个“@id”。过滤器类的名称可以选择性地后跟一个字符串“=参数".

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

  • 以‘:’分隔的键=值对列表。
  • 以‘:’分隔的列表。在这种情况下,键被假设为按声明顺序的选项名称。例如,过滤器声明三个选项顺序为fade filter declares three options in this order – type, start_framenb_frames。然后参数列表在:0:30表示值被分配给选项type, 0start_frame30nb_frames.
  • 以冒号 ':' 分隔的混合直接和长键=值对。直接必须在键=值对之前,并遵循前一个点的约束顺序。以下键=值对可以按照任何首选顺序设置。

如果选项值本身是一个项目列表(例如,formatfilter 接受一个像素格式的列表),列表中的项通常用‘|’.

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

一个特别的语法在ffmpegCLI 工具中实现,允许从文件中加载选项值。这是通过在选项名称前加上斜杠 '/'来完成的,然后提供的值被解释为实际值加载的路径。例如

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

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

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

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

如果一个输出垫没有被标注,默认情况下它将连接到过滤链中下一个过滤器的第一个未标注输入垫。 例如,在过滤链

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

中,分割过滤器实例有两个输出垫,覆盖过滤器实例有两个输入垫。 分割的第一个输出垫标注为 "L1",第一个输入垫标注为 "L2",而分割的第二个输出垫链接到覆盖的第二个输入垫,二者未被标注。

在过滤器描述中,如果第一个过滤器的输入标签未指定,则假设为 "in"; 如果最后一个过滤器的输出标签未指定,则假设为 "out"。

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

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

例如,过滤器图:

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

可以表示为:

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

[L1][L2] hstack

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

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

名称             ::= sequence of alphanumeric characters and '_'
过滤器名称      ::= 名称["@"名称]
链接标签        ::= "[" 名称 "]"
链接标签       ::= 链接标签 [链接标签]
过滤器参数 ::= sequence of chars (possibly quoted)
过滤器           ::= [链接标签] 过滤器名称 ["=" 过滤器参数] [链接标签]
过滤链      ::= 过滤器 [,过滤链]
过滤器图      ::= [sws_flags=flags;] 过滤链 [;过滤器图]

32.2 过滤器图转义的注意事项

过滤器图描述的组成涉及几个级别的转义。参见(ffmpeg-utils)的 "引用和转义" 部分,了解 ffmpeg-utils(1) 手册中相关的转义过程。获取更多关于所用转义过程的信息。

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

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

最后,当您在 shell 起始命令行中指定一个过滤器图时,您需要为 shell 中的特殊字符执行第三级转义。

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

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

此字符串包含'特殊转义字符,和:特殊字符,所以需要以以下方式转义:

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

当嵌入过滤器描述到过滤器图描述中时,需要第二级转义来转义所有过滤器图的特殊字符。因此,上面的例子变成:

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

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

最后,在 shell 命令中书写过滤器图描述时,需要额外的转义级别,这取决于所使用 shell 的转义规则。例如,假设\是特殊字符,需要用另一个\来进行转义,之前的字符串最终结果是:

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

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

例如,对于绘制文字过滤器,您可能更喜欢使用textfile选项替代text来指定要渲染的文本。

33 时间线编辑

某些过滤器支持通用enable选项。对于支持时间线编辑的过滤器,此选项可以设置为一个表达式,该表达式在传递帧到过滤器之前被计算。如果计算结果为非零,则启用过滤器,否则该帧将不变地传递到过滤图中的下一个过滤器。

表达式接受以下值:

t

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

n

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

pos

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

w
h

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

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

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

例如,要启用模糊过滤器(smartblur)在 10 秒到 3 分钟期间,以及一个curves过滤器从 3 秒开始:

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

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

34 通过命令在运行时更改选项

某些选项可以使用命令在过滤器运行过程中更改。这些选项在ffmpeg -h filter=<name of filter>的输出中标记为‘T’。 命令的名称是选项的名称,参数是新值。

35 带多个输入的过滤器选项(framesync)

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

eof_action

当在次要输入遇到 EOF 时采取的行动;它接受以下值之一:

repeat

重复最后一帧(默认值)。

endall

结束两个流。

pass

通过主输入传递。

shortest

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

repeatlast

如果设置为 1,强制过滤器将次要流的最后一帧扩展到主要流的末端。值为 0 将禁用此行为。 默认值为 1。

ts_sync_mode

根据次要输入时间戳严格同步流的程度;它接受以下值之一:

default

次要输入帧的时间戳最接近于主要输入帧但低于或等于的帧。

nearest

次要输入帧的绝对最近的时间戳与主要输入帧相匹配的帧。

36 音频过滤器

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

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

36.1 aap

使用第二个音频流对第一个音频流应用仿射投影算法。

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

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

order

设置过滤器顺序。

projection

设置投影顺序。

mu

设置过滤器 mu。

delta

设置系数以初始化内部协方差矩阵。

out_mode

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

i

通过第一个输入。

d

通过第二个输入。

o

通过期望值、第二个输入与误差信号估算值之间的差异。

n

通过输入值、第一个输入与误差信号估算值之间的差异。

e

通过误差信号估算样本。

默认值为o.

precision

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

auto

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

float

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

double

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

36.2 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级别在输入流的所有通道之间 或更高(maximum)输入流通道影响减少。 默认值为average.

detection

peak情况下是否采取确切信号 或者在rms情况下选择 RMS 信号。 默认值为rms通常更平滑。

mix

输出中使用压缩信号的比例。 默认值为 1。 范围在 0 到 1 之间。

36.2.1 命令

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

36.3 acontrast

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

过滤器接受以下选项:

contrast

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

36.4 acopy

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

36.5 acrossfade

从一个输入音频流到另一个输入音频流应用交叉渐变。 交叉渐变在第一个流末尾附近的指定时间内应用。

过滤器接受以下选项:

nb_samples, ns

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

duration, d

指定交叉淡化效果的持续时间。请参阅ffmpeg-utils中的时间持续时间部分(ffmpeg-utils(1)手册)了解可接受的语法。 默认情况下,持续时间由nb_samples确定。 如果设置了此选项,则将代替nb_samples.

overlap, o

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

curve1

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

curve2

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

有关可用曲线类型的描述,请参阅afade过滤器描述。

36.5.1 示例

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

36.6 acrossover

将音频流分成几个频段。

此过滤器将音频流分成两个或更多频率范围。 将所有流总和回去将提供平坦的输出。

过滤器接受以下选项:

split

设置分割频率。必须为正值并递增。

order

为每个频带分割设置过滤器顺序。这控制滤波器的滚降或传递函数的陡峭度。 可用值为:

2nd

每倍频程12 dB。

4th

每倍频程24 dB。

6th

每倍频程36 dB。

8th

每倍频程48 dB。

10th

每倍频程60 dB。

12th

每倍频程72 dB。

14th

每倍频程84 dB。

16th

每倍频程96 dB。

18th

每倍频程108 dB。

20th

每倍频程120 dB。

默认值为4阶.

level

设置输入增益级别。允许范围为0到1。默认值为1。

gains

为每个频带设置输出增益。默认值为所有频带1。

precision

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

auto

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

float

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

double

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

默认值为auto.

36.6.1 示例

  • 将输入音频流分成低频和高频两个频段,分割频率为1500 Hz,每个频段将在单独的流中:
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
    
  • 与上述相同,但具有更高的滤波器阶数:
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500:order=8th[LOW][HIGH]' -map '[LOW]' low.wav -map '[HIGH]' high.wav
    
  • 与上述相同,但也包括额外的中频带(频率介于1500和8000之间):
    ffmpeg -i in.flac -filter_complex 'acrossover=split=1500 8000:order=8th[LOW][MID][HIGH]' -map '[LOW]' low.wav -map '[MID]' mid.wav -map '[HIGH]' high.wav
    

36.7 acrusher

减少音频位分辨率。

此过滤器是一种功能增强的位压缩器。位压缩器用于可听地减少音频信号的采样位数。 这不会改变深度位,而只是产生效果。降低位深度的材料听起来更刺耳和“数字化”。 此过滤器甚至可以将连续值四舍五入而不是离散位深度。 此外,它具有一个直流偏移,从而导致信号的下半部分和上半部分被不同地压缩。 反别名设置能够产生“更柔和”的压缩声音。

此过滤器的另一个功能是对数模式。 此设置将位之间的线性距离切换为对数距离。 其结果是更“自然”的压缩器,例如,不会对低信号进行门限操作。 人耳具有对数感知,因此这种压缩方式更加愉悦。 对数压缩还能够实现抗混叠。

过滤器接受以下选项:

level_in

设置输入级别。

level_out

设置输出级别。

bits

设置位还原。

mix

设置混合量。

mode

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

dc

设置直流。

aa

设置反别名。

samples

设置样本还原。

lfo

启用LFO(低频振荡器)。默认情况下禁用。

lforange

设置LFO范围。

lforate

设置LFO速率。

36.7.1 命令

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

36.8 acue

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

36.9 adeclick

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

被检测为冲击性噪声的样本将通过自动回归建模用插值样本替换。

window, w

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

overlap, o

设置窗口重叠率,以窗口大小的百分比表示。允许范围为5095。默认值为75百分比。 将此值设置得非常高会增加冲击性噪声的去除能力,但会使整个处理过程变得慢得多。

arorder, a

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

threshold, t

设置阈值。允许范围为1100。 默认值为2。 这控制了去除的冲击性噪声的强度。 值越低,有更多的样本将被检测为冲击性噪声。

burst, b

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

method, m

设置重叠方法。

接受以下值:

add, a

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

save, s

选择重叠-保存方法。未插值的样本保持不变。

默认值为a.

36.10 adeclip

从输入音频中去除剪裁样本。

检测到剪辑的样本将使用自回归建模的插值样本替换。

window, w

设置窗口大小(毫秒)。允许范围为10100。 默认值为55毫秒。 这设置了每次处理的窗口大小。

overlap, o

设置窗口重叠比例(百分比的窗口大小)。允许范围为5095。默认值为75百分比。

arorder, a

设置自回归顺序(窗口大小的百分比)。允许范围为025。默认值为8百分比。此选项还控制使用相邻有效样本进行插值样本的质量。

threshold, t

设置阈值。允许范围为1100。 默认值为10。较高的值会使剪辑检测不那么激进。

hsize, n

设置用于检测剪辑的直方图的大小。允许范围为1009999。 默认值为1000。较高的值会使剪辑检测不那么激进。

method, m

设置重叠方法。

接受以下值:

add, a

选择叠加方法。即使不是插值样本,此方法也会略微更改样本。

save, s

选择保存重叠方法。未插值的样本保持不变。

默认值是a.

36.11 去相关处理

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

过滤器接受以下选项:

stages

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

seed

设置用于在通道之间设置延迟(以样本为单位)的随机种子。

36.12 延迟

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

延迟通道中的样本被填充为空白。

该过滤器接受以下选项:

delays

为每个通道设置延迟(以毫秒为单位),每个延迟用“|”分隔。 未使用的延迟将被静默忽略。如果给定延迟的数量少于通道数,所有剩余的通道将不会被延迟。 如果要延迟确切的样本数,请在数字后加上“S”。 如果要用秒数代替,请在数字后加上“s”。

all

为所有剩余通道使用最后设置的延迟。默认情况下禁用。 如果启用,此选项会更改选项delays的解释。

36.12.1 示例

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

36.13 去标准化

通过添加极低水平的噪声来补救音频中的去标准化。

应将此过滤器放置在任何可能产生去标准化的过滤器之前。

接受参数的描述如下。

level

设置添加噪声的级别(以dB为单位)。默认值为-351。 允许范围为-451到-90。

type

设置添加的噪声类型。

dc

添加直流信号。

ac

添加交流信号。

square

添加方波信号。

pulse

添加脉冲信号。

默认值为dc.

36.13.1 命令

该过滤器支持上述所有选项作为命令.

36.14 导数、积分

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

依次应用两个过滤器将产生原始音频。

36.15 动态范围控制

对输入音频流应用频谱动态范围控制过滤器。

接受选项的描述如下。

transfer

设置转换表达式。

表达式可以包含以下常量:

ch

当前通道编号

sn

当前样本编号

nb_channels

通道数

t

以秒为单位的时间戳

sr

采样率

p

当前频率功率值(以dB为单位)

f

当前频率(以Hz为单位)

默认值为p.

attack

设置攻击时间(以毫秒为单位)。默认值为50毫秒。 允许范围为1到1000毫秒。

release

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

channels

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

36.15.1 命令

该过滤器支持上述所有选项作为命令.

36.15.2 示例

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

36.16 动态均衡器

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

接受选项的描述如下。

threshold

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

dfrequency

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

dqfactor

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

tfrequency

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

tqfactor

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

attack

设置信号从检测阈值上升超过检测阈值触发均衡所需的毫秒数。 默认值为20。允许范围为1到2000。

release

设置信号从检测阈值下降低于检测阈值终止均衡所需的毫秒数。 默认值为200。允许范围为1到2000。

ratio

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

makeup

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

range

设置最大允许的剪切/提升量。默认是50。 允许的范围是1到200。

mode

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

listen

仅输出隔离的检测信号。

cutbelow

剪除低于检测阈值的频率。

cutabove

剪除高于检测阈值的频率。

boostbelow

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

boostabove

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

默认模式是‘cutbelow’.

dftype

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

bandpass
lowpass
highpass
peak

默认类型是‘bandpass’.

tftype

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

bell
lowshelf
highshelf

默认类型是‘bell’.

auto

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

可用值有:

disabled

禁用自动收集的阈值。

off

停止拾取阈值。

on

开始拾取阈值。

adaptive

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

precision

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

auto

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

float

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

double

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

36.16.1 命令

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

36.17 动态平滑

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

以下是接受的选项描述。

sensitivity

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

basefreq

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

36.17.1 命令

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

36.18 回声

对输入音频应用回声效果。

回声是反射的声音,可以自然地发生在山间(有时是在大楼附近)在人们说话或喊叫时;数字回声效果模拟了这种行为,通常用于扩充单个乐器或人声的音效。 原始信号和反射信号之间的时间差是delay,而反射信号的响度是decay。 多个回声可能具有不同的延迟和衰减。

以下是接受的参数描述。

in_gain

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

out_gain

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

delays

设置时间间隔列表(以毫秒为单位),列出原始信号和反射之间的时间间隔,用’|’分隔。每个delay的允许范围是(0 - 90000.0]。 默认是1000.

decays

设置反射信号响度的列表,用’|’分隔。 每个decay的允许范围是(0 - 1.0]。 默认是0.5.

36.18.1 示例

  • 让它听起来像有两倍的乐器在演奏:
    aecho=0.8:0.88:60:0.4
    
  • 如果延迟非常短,那么听起来像一个(金属)机器人在演奏音乐:
    aecho=0.8:0.88:6:0.4
    
  • 更长的延迟会让它听起来像是山间露天音乐会:
    aecho=0.8:0.9:1000:0.3
    
  • 以上相同,但又多了一座山:
    aecho=0.8:0.9:1000|1800:0.3|0.25
    

36.19 音频强调

音频强调滤波器创建或恢复直接从LP或强调CD中获取的材料,使用不同的滤波曲线。例如,为了将音乐存储到黑胶唱片上,必须通过一个滤波器首先对信号进行修改,以平衡这种录音介质的缺点。 播放材料后,必须应用逆向滤波器来恢复频率响应的失真。

滤波器接受以下选项:

level_in

设置输入增益。

level_out

设置输出增益。

mode

设置滤波模式。要恢复材料,请使用reproduction模式,否则使用production模式。默认是reproduction模式。

type

设置滤波器类型。选择媒介,可以是以下之一:

col

选择哥伦比亚。

emi

选择EMI。

bsi

选择BSI(78转)。

riaa

选择RIAA。

cd

选择光盘(CD)。

50fm

选择50µs(FM)。

75fm

选择75µs(FM)。

50kf

选择50µs(FM-KF)。

75kf

选择75µs(FM-KF)。

36.19.1 命令

此滤波器支持以上所有选项作为命令.

36.20 音频评估

根据指定的表达式修改音频信号。

此滤波器接受一个或多个表达式(每个通道一个), 表达式被评估并用于修改相应的音频信号。

它接受以下参数:

exprs

为每个单独通道设置以‘|’分割的表达式列表。如果输入通道数量大于表达式数量,则最后指定的表达式用于剩余的输出通道。

channel_layout, c

设置输出通道布局。如果未指定,则通道布局由表达式数量决定。如果设置为‘same’,则默认使用相同的输入通道布局。

每个表达式中的表达式(exprs)可以包含以下常量和函数:

ch

当前表达式的通道编号

n

从0开始的样本评估编号

s

采样率

t

以秒为单位表示的样本评估时间

nb_in_channels
nb_out_channels

输入和输出通道的数量

val(CH)

编号为CH

的输入通道值

注意:此滤波器较慢。为了更快的处理,你应该使用专用滤波器。

  • 36.20.1 示例
    aeval=val(ch)/2:c=same
    
  • 音量减半:
    aeval=val(0)|-val(1)
    

把第二通道的相位反转:

36.21 激励器

激励器用于产生原信号中不存在的高音。这是通过创建信号的谐波失真完成的,这些失真被限制在一定范围内并添加到原信号中。 激励器提升音频信号的高端而不仅仅是像均衡器一样简单地提升高频,以创造更“清晰”或“明亮”的声音。

level_in

设置信号处理之前的输入电平。 允许的范围是0到64。 默认值是1。

level_out

设置信号处理后的输出级别。 允许范围是0到64。 默认值为1。

amount

设置添加到原始信号的谐波量。 允许范围是0到64。 默认值为1。

drive

设置新创建的谐波量。 允许范围是0.1到10。 默认值为8.5。

blend

设置新创建谐波的八度音阶。 允许范围是-10到10。 默认值为0。

freq

设置生成谐波的最低频率限制(单位:Hz)。 允许范围是2000到12000 Hz。 默认值为7500 Hz。

ceil

设置生成谐波的最高频率限制。 允许范围是9999到20000 Hz。 如果值低于10000 Hz,则不应用限制。

listen

静音原始信号,仅输出添加的谐波。 默认情况下禁用。

36.21.1 命令

该滤波器支持以上所有选项作为命令.

36.22 afade

对输入音频应用淡入/淡出效果。

以下是接受的参数说明。

type, t

指定效果类型,可以是in用于淡入,或out用于淡出效果。默认值为in.

start_sample, ss

指定开始应用淡化效果的起始样本编号。 默认值为0。

nb_samples, ns

指定淡化效果持续的样本数量。 在淡入效果结束时,输出音量与输入音量相同; 在淡出过渡结束时,输出音频为静音。 默认值为44100。

start_time, st

指定淡化效果的开始时间。默认值为0。 值必须以时间持续时间的形式指定;详见(ffmpeg-utils) ffmpeg-utils(1)手册中的时间持续时间部分接受的语法。 如果设置了此选项,将代替start_sample(起始样本).

duration, d

指定淡化效果的持续时间。详见(ffmpeg-utils) ffmpeg-utils(1)手册中的时间持续时间部分接受的语法。 在淡入效果结束时,输出音量与输入音量相同; 在淡出过渡结束时,输出音频为静音。 默认情况下,持续时间由nb_samples(样本数)确定。 如果设置了此选项,将代替nb_samples(样本数).

curve

设置淡化过渡的曲线。

它接受以下值:

tri

选择三角形,即线性斜率(默认)

qsin

选择四分之一正弦波

hsin

选择二分之一正弦波

esin

选择指数正弦波

log

选择对数曲线

ipar

选择反抛物线

qua

选择二次函数

cub

选择三次函数

squ

选择平方根

cbr

选择立方根

par

选择抛物线

exp

选择指数函数

iqsin

选择反四分之一正弦波

ihsin

选择反二分之一正弦波

dese

选择双指数座位曲线

desi

选择双指数S型曲线

losi

选择逻辑S型曲线

sinc

选择sine cardinal函数

isinc

选择反sine cardinal函数

quat

选择四次函数

quatr

选择四次根

qsin2

选择平方的四分之一正弦波

hsin2

选择平方的二分之一正弦波

nofade

不应用淡化

silence

设置淡入的初始增益或淡出的最终增益。 默认值为0.0.

unity

设置淡出的初始增益或淡入的最终增益。 默认值为1.0.

36.22.1 命令

该滤波器支持以上所有选项作为命令.

36.22.2 示例

  • 淡入音频的前15秒:
    afade=t=in:ss=0:d=15
    
  • 淡出900秒音频的最后25秒:
    afade=t=out:st=875:d=25
    

36.23 afftdn

使用FFT对音频样本去噪。

以下是接受的参数说明。

noise_reduction, nr

设置噪声降低值(单位:dB),允许范围是0.01到97。 默认值为12 dB。

noise_floor, nf

设置噪声底线(单位:dB),允许范围是-80到-20。 默认值为-50 dB。

noise_type, nt

设置噪声类型。

它接受以下值:

white, w

选择白噪声。

vinyl, v

选择唱片噪声。

shellac, s

选择虫胶噪声。

custom, c

选择自定义噪声,定义于bn选项。

默认值为白噪声。

band_noise, bn

为每个15个频段设置自定义频带噪声配置文件。 频段用’ ’或’|’分隔。

residual_floor, rf

设置剩余底线(单位:dB),允许范围是-80到-20。 默认值为-38 dB。

track_noise, tn

启用噪声底线跟踪。默认情况下禁用。 启用此选项时,噪声底线会自动调整。

track_residual, tr

启用残余跟踪。默认情况下禁用。

output_mode, om

设置输出模式。

它接受以下值:

input, i

通过输入音频不变。

output, o

通过过滤后的噪声。

noise, n

仅通过噪声。

默认值为output(输出).

adaptivity, ad

设置自适应因子,决定每个频率桶增益调整适应的速度。 值0启用即时适应,而更高的值反应得更慢。 允许范围是01。默认值为0.5.

floor_offset, fo

设置噪声底线偏移因子。此选项用于调整测量的噪声底线所应用的偏移量。 仅当启用了噪声底线跟踪时有效。 允许范围是-2.02.0。默认值为1.0.

noise_link, nl

设置用于多通道音频的噪声链接。

它接受以下值:

none

使用未改变的通道噪声底线。

min

使用所有通道中的测量最小噪声底线。

max

使用所有通道中的测量最大噪声底线。

average

使用所有通道中的测量平均噪声底线。

默认值为最小.

band_multiplier, bm

设置频段倍增因子,用于决定在频率范围内扩展频段的程度。 允许的范围是0.25。默认值是1.25.

sample_noise, sn

切换捕获并测量输入音频中的噪声轮廓。

接受以下值:

start, begin

开始采样噪声捕获。

stop, end

停止采样噪声捕获并测量新的噪声频段轮廓。

默认值是none.

gain_smooth, gs

设置增益平滑空间半径,用于平滑应用于每个频率范围增益。 有助于减少随机音乐噪声伪影。 较高的值会增强增益的平滑效果。 允许的范围是050。 默认值是0.

36.23.1 命令

此过滤器支持部分前述选项作为命令.

36.23.2 示例

  • 将白噪声减少10dB,并使用之前测量的-40dB噪声底线:
    afftdn=nr=10:nf=-40
    
  • 将白噪声减少10dB,同时将初始噪声底线设置为-80dB,并启用噪声底线的自动追踪,因此噪声底线会在处理过程中逐渐变化:
    afftdn=nr=10:nf=-80:tn=1
    
  • 将噪声减少20dB,使用-40dB的噪声底线,并使用命令对输入音频的前0.4秒进行噪声轮廓采集:
    asendcmd=0.0 afftdn sn start,asendcmd=0.4 afftdn sn stop,afftdn=nr=20:nf=-40
    

36.24 afftfilt

在频域中应用任意表达式到样本。

real

为每个独立的频道设置频率域实数表达式,以’|'分隔。默认值是"re"。 如果输入频道数量大于指定表达式数量,最后指定的表达式将用于多余的输出频道。

imag

为每个独立的频道设置频率域虚数表达式,以’|'分隔。默认值是"im"。

实数表达式虚数表达式中,每个表达式可以包含以下常量和函数:

sr

采样率

b

当前频率范围编号

nb

可用的总频率范围数

ch

当前表达式的频道编号

chs

频道总数

pts

当前帧的PTS

re

当前频道的当前频率范围的实部

im

当前频道的当前频率范围的虚部

real(b, ch)

返回在位置 (频率范围,频道)

imag(b, ch)

返回在位置 (频率范围,频道)

win_size

) 的频率范围数的虚部值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.24.1 示例

  • 几乎只保留音频中的低频段:
    afftfilt="'real=re * (1-clip((b/nb)*b,0,1))':imag='im * (1-clip((b/nb)*b,0,1))'"
    
  • 应用机器人效果:
    afftfilt="real='hypot(re,im)*sin(0)':imag='hypot(re,im)*cos(0)':win_size=512:overlap=0.75"
    
  • 应用耳语效果:
    afftfilt="real='hypot(re,im)*cos((random(0)*2-1)*2*3.14)':imag='hypot(re,im)*sin((random(1)*2-1)*2*3.14)':win_size=128:overlap=0.8"
    
  • 应用相位移效果:
    afftfilt="real=re*cos(1)-im*sin(1):imag=re*sin(1)+im*cos(1)"
    

36.25 afir

应用任意的有限冲激响应过滤器。

此过滤器设计用于应用长达60秒的FIR过滤器。

它可以用作数字分频过滤器、房间均衡、交谈消除、波场合成、音效化、环绕音效和空问化的组件。

此过滤器将用第一个以上的流作为FIR系数。 如果非第一流只包含一个频道,它将用于第一流中的所有输入频道;否则非第一流中的频道数量必须与第一流中的频道数量相同。

它接受以下参数:

dry

设置干信号增益。这设置输入增益。

wet

设置湿信号增益。这设置最终的输出增益。

length

设置冲激响应过滤器长度。默认值是1,意味着整个IR被处理。

gtype

This option is deprecated, and does nothing.

irnorm

Set norm to be applied to IR coefficients before filtering. Allowed range is from -1 to 2. IR coefficients are normalized with calculated vector norm set by this option. For negative values, no norm is calculated, and IR coefficients are not modified at all. Default is 1.

irlink

For multichannel IR if this option is set to true, all IR channels will be normalized with maximal measured gain of all IR channels coefficients as set by irnorm option. When disabled, all IR coefficients in each IR channel will be normalized independently. Default is true.

irgain

Set gain to be applied to IR coefficients before filtering. Allowed range is 0 to 1. This gain is applied after any gain applied with irnorm option.

irfmt

设置IR流格式。可以是monoinput。 默认值是input.

maxir

设置最大的允许冲激响应过滤器持续时间,以秒为单位。默认值是30秒。 允许的范围是0.1到60秒。

response

此选项已被弃用,没有任何作用。

channel

此选项已被弃用,没有任何作用。

size

此选项已被弃用,没有任何作用。

rate

此选项已被弃用,没有任何作用。

minp

设置用于卷积的最小分区大小。默认值是8192。 允许的范围是165536。 较低的值可以减少延迟,但会增加CPU使用率。

maxp

设置用于卷积的最大分区大小。默认值是8192。 允许的范围是865536。 较低的值可能会增加CPU使用率。

nbirs

设置将在运行时可切换的输入冲激响应流数量。 允许的范围是132。默认值是1.

ir

设置用于卷积的IR流,从0开始,应总是 小于由nbirs选项提供的值。默认值是0。 此选项可以通过命令.

precision

设置在处理样本时使用的精度。

auto

根据其他过滤器自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

默认值为自动。

irload

设置何时加载IR流。可以是initaccess。 第一个选项在初始化时加载并准备所有IR,第二个选项在首次访问特定IR时加载。 默认值是init.

36.25.1 示例

  • 使用单声道IR文件作为第二输入对流应用混响,使用ffmpeg完成命令:
    ffmpeg -i input.wav -i middle_tunnel_1way_mono.wav -lavfi afir output.wav
    
  • 给定输入立体声音频流,以及左声道和右声道的两个立体声脉冲响应文件(文件名分别为l_ir.wav和r_ir.wav),应用真实立体声处理,并设置irnorm选项值:
    "pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irnorm=1.2,pan=stereo|FL<c0+c2|FR<c1+c3"
    
  • 与上述示例类似,但显式地irgain将值设置为估算值,同时禁用irnorm:
    "pan=4C|c0=FL|c1=FL|c2=FR|c3=FR[a];amovie=l_ir.wav[LIR];amovie=r_ir.wav[RIR];[LIR][RIR]amerge[ir];[a][ir]afir=irfmt=input:irgain=-5dB:irnom=-1,pan=stereo|FL<c0+c2|FR<c1+c3"
    

36.26 aformat

设置输入音频的输出格式约束。框架将协商最适当的格式以最小化转换。

它接受以下参数:

sample_fmts, f

一个以'|'分隔的所请求的样本格式列表。

sample_rates, r

一个以'|'分隔的所请求的采样率列表。

channel_layouts, cl

一个以'|'分隔的所请求的声道布局列表。

参见(ffmpeg-utils)ffmpeg-utils(1)手册的声道布局部分以获取所需语法。

如果某个参数被省略,则允许所有值。

强制输出为非符号8比特或符号16比特立体声。

aformat=sample_fmts=u8|s16:channel_layouts=stereo

36.27 afreqshift

对输入音频样本应用频率偏移。

滤镜接受以下选项:

shift

指定频率偏移。允许范围是 -INT_MAX 至 INT_MAX。 默认值为0.0。

level

设置输出增益应用于最终输出。允许范围是0.0到1.0。 默认值为1.0。

order

设置用于过滤的滤镜阶数。允许范围是1到16。 默认值是8。

36.27.1 命令

此滤镜支持以上所有选项作为命令.

36.28 afwtdn

使用小波对输入样本减少宽带噪声。

以下是接受的选项的描述。

sigma

设置噪声标准差,允许范围是0到1。 默认值是0。 此选项控制对输入样本应用的去噪强度。 最有用的设置方式是使用分贝,例如-45dB。

levels

设置小波分解的层数。 允许范围是1到12。 默认值是10。 设置过低会使去噪性能非常差。

wavet

设置小波分解输入帧的类型。 它们按系数数量排序,从最低到最高。 更多系数意味着更差的过滤速度,但整体质量更好。 可用的小波是:

sym2
sym4
rbior68
deb10
sym10
coif5
bl3
percent

设置完全去噪的百分比。允许范围是0到100百分比。 默认值为85百分比或部分去噪。

profile

如果启用,第一个输入帧将用作噪声配置文件。 如果第一个帧样本包含非噪声,性能将非常差。

adaptive

如果启用,输入帧将分析噪声是否存在。 如果检测到高概率噪声,则输入帧配置文件将用于处理后续帧,直到检测到新的噪声帧。

samples

设置单个帧的样本数量。允许范围是512到65536。 默认帧大小是8192样本。

softness

设置在阈值函数内应用的软度。允许范围是0到10。 默认软度是1。

36.28.1 命令

此滤镜支持以上所有选项作为命令.

36.29 agate

噪声门主要用于降低信号的较低部分。这种信号处理方法减少了有用信号之间的干扰噪声。

通过检测低于所选级别阈值并用比率设置的因子将其分割。 噪声底部的范围通过范围设置。 由于信号的精确操作会导致波形失真,因此可以在时间上平缓减少。 这可以通过设置攻击时间释放时间.

攻击时间确定信号必须低于阈值的时间长度,之后才会发生减少,释放设置了信号必须高于阈值的时间长度,以减少减少。 短于攻击时间的信号将保持不变。

level_in

设置过滤前的输入级别。 默认是1。允许范围是0.015625到64。

mode

设置操作模式。可以是upwarddownward。 默认是downward。 如果设置为upward模式,信号的较高部分将被放大,动态范围在向上方向扩展。 否则,在downward模式的情况下,信号的较低部分将被减少。

range

设置当信号低于阈值时的增益减少水平。 默认是0.06125。允许范围是0到1。 将此设置为0会禁用减少,此时滤镜行为像扩展器。

threshold

如果信号超过此级别,增益减少将被释放。 默认是0.125。允许范围是0到1。

ratio

设置信号减少的比率。 默认是2。允许范围是1到9000。

attack

设置信号必须高于阈值的时间毫秒数,随后增益减少停止。 默认是20毫秒。允许范围是0.01到9000。

release

设置信号必须低于阈值的时间毫秒数,随后减少再次增加。 默认是250毫秒。允许范围是0.01到9000。

makeup

设置处理后信号的放大量。 默认是1。允许范围是1到64。

knee

调整阈值周围的尖锐拐点,使进入增益减少更柔和。 默认是2.828427125。允许范围是1到8。

detection

选择是否使用精确信号进行检测或类似RMS的信号。 默认是rms。 可以是peakrms.

link

选择是所有音频通道的平均电平还是较大的电平影响减少。 默认是average。 可以是averagemaximum.

36.29.1 命令

此滤镜支持以上所有选项作为命令.

36.30 aiir

应用一个任意的无限脉冲响应滤镜。

它接受以下参数:

zeros, z

设置B/分子/零点/反射系数。

poles, p

设置A/分母/极点/梯级系数。

gains, k

设置声道增益。

dry_gain

设置输入增益。

wet_gain

设置输出增益。

format, f

设置系数格式。

ll

阶梯-反射函数

sf

模拟传递函数

tf

数字传递函数

zp

Z平面零点/极点,笛卡尔坐标(默认)

pr

Z平面零点/极点,极坐标弧度

pd

Z平面零点/极点,极坐标度数

sp

S平面零点/极点

process, r

设置处理类型。

d

直接处理

s

串行处理

p

并行处理

precision, e

设置过滤精度。

dbl

双精度浮点(默认)

flt

单精度浮点

i32

32位整数

i16

16位整数

normalize, n

归一化滤波器系数,默认启用。 启用后将在直流频率处将幅度响应归一化到0dB。

mix

设置输出中使用过滤信号的比例,默认是1。 范围在0到1之间。

response

在附加视频流中显示冲激响应的频率响应,幅度(洋红色)、相位(绿色)和群延时(黄色)。 默认是禁用。

channel

设置显示哪个冲激响应通道的频率响应。默认显示第一个通道。 此选项仅在response启用时使用。

size

设置视频流大小。此选项仅在response启用时使用。

系数以tfsf格式用空格分隔,并按升序排列。

系数以zp格式用空格分隔,系数的顺序无关紧要。以zp格式的系数是复数,其中的i是虚数单位。

每个通道可以提供不同的系数或增益。此时 使用‘|’分隔系数或增益。最后提供的系数将用于所有剩余通道。

36.30.1 示例

  • 为48kHz采样率设置一个在约5000Hz处的2极椭圆凹口滤波器:
    aiir=k=1:z=7.957584807809675810E-1 -2.575128568908332300 3.674839853930788710 -2.57512875289799137 7.957586296317130880E-1:p=1 -2.86950072432325953 3.63022088054647218 -2.28075678147272232 6.361362326477423500E-1:f=tf:r=d
    
  • 与上例相同,但使用zp格式:
    aiir=k=0.79575848078096756:z=0.80918701+0.58773007i 0.80918701-0.58773007i 0.80884700+0.58784055i 0.80884700-0.58784055i:p=0.63892345+0.59951235i 0.63892345-0.59951235i 0.79582691+0.44198673i 0.79582691-0.44198673i:f=zp:r=s
    
  • 使用模拟传递函数格式,应用3阶归一化巴特沃斯低通滤波器:
    aiir=z=1.3057 0 0 0:p=1.3057 2.3892 2.1860 1:f=sf:r=d
    

36.31 限幅器(alimiter)

限制器防止输入信号超过设定的阈值。 此限制器使用前瞻技术来防止信号失真。 这意味着信号处理后会产生一个小延迟。请注意 其产生的延迟是您设置的启动时间。

过滤器接受以下选项:

level_in

设置输入增益。默认值为1。

level_out

设置输出增益。默认值为1。

limit

不允许限制器通过高于该级别的信号。默认值为1。

attack

限制器将在毫秒时间内达到其衰减水平。 默认值为5毫秒。

release

从限制中恢复到衰减1.0的时间,单位为毫秒。 默认值为50毫秒。

asc

当增益衰减始终需要时,ASC负责释放到 一个平均的衰减水平,而不是在释放时间内达到0衰减。

asc_level

选择释放时间受ASC影响的程度,0表示几乎不改变 释放时间,而1会产生更高的释放时间。

level

自动调平输出信号。默认是启用。 启用后会将音频归一化到0dB。

latency

补偿通过启动参数设置的前瞻缓冲区引入的延迟。 当流到达EOF时,也会刷新前瞻缓冲区内的有效音频数据。

根据所选设置,建议将输入2倍或4倍上采样 通过aresample滤波后应用此过滤器。

36.32 全通滤波器(allpass)

应用一个具有中心频率(单位:Hz)frequency和带宽width的两极全通滤波器。 全通滤波器通过改变音频的频率与相位关系 而不改变其频率与幅度关系。

过滤器接受以下选项:

frequency, f

设置频率,单位为Hz。

width_type, t

设置带宽指定方法。

h

赫兹

q

品质因数

o

倍频程

s

斜率

k

千赫兹

width, w

以width_type单位指定滤波器的带宽。

mix, m

设置输出中使用过滤信号的比例,默认是1。 范围在0到1之间。

channels, c

指定要过滤的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波器系数,默认是禁用。 启用后将在直流频率处将幅度响应归一化到0dB。

order, o

设置滤波器的阶数,可以是1或2。默认值为2。

transform, a

设置IIR滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环绕过滤器自动选择采样格式。

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用32位浮点。

f64

始终使用64位浮点。

36.32.1 命令

此过滤器支持以下命令:

frequency, f

更改全通频率。 命令语法为:"frequency"

width_type, t

更改全通width_type。 命令语法为:"width_type"

width, w

更改全通宽度。 命令语法为:"width"

mix, m

更改全通混合比例。 命令语法为:"mix"

36.33 循环(aloop)

循环音频样本。

过滤器接受以下选项:

loop

设置循环次数。将此值设置为-1将导致无限循环。 默认值为0。

size

设置最大样本数。默认值为0。

start

设置循环的第一个样本。默认值为0。

time

设置循环开始的时间,单位为秒。 仅在选项start设为-1.

36.34 音频合并(amerge)

将两个或多个音频流合并为单个多通道流。

过滤器接受以下选项:

inputs

设置输入数量。默认值为2。

如果输入的通道布局是分开的,因此是兼容的, 则输出的通道布局将相应设置,且会适当重新排列通道。 如果输入的通道布局不分开,则输出将包含 第一个输入的所有通道,然后是第二个输入的所有通道, 依此类推,且输出的通道布局将是与通道数量 对应的默认值。

例如,如果第一个输入为2.1(FL+FR+LF)且第二个输入 为FC+BL+BR,则输出将为5.1,通道顺序如下: a1, a2, b1, a3, b2, b3(a1是第一个输入的 第一个通道,b1是第二个输入的第一个通道)。

另一方面,如果两个输入都是立体声,输出通道顺序将为 默认顺序:a1, a2, b1, b2,且通道布局将 任意设置为4.0,这可能是也可能不是预期的值。

所有输入必须具有相同的采样率和格式。

如果输入的持续时间不同,输出将根据最短的停止。

36.34.1 示例

  • 将两个单声道文件合并为一个立体声流:
    amovie=left.wav [l] ; amovie=right.mp3 [r] ; [l] [r] amerge
    
  • 多个合并假设输入为1个视频流和6个音频流input.mkv:
    ffmpeg -i input.mkv -filter_complex "[0:1][0:2][0:3][0:4][0:5][0:6] amerge=inputs=6" -c:a pcm_s16le output.mkv
    

36.35 amix

将多个音频输入混合为单个输出。

请注意,该过滤器仅支持浮点样本(amergepan音频过滤器支持多种格式)。如果amix输入为整数样本,则aresample将自动插入,以执行到浮点样本的转换。

它接受以下参数:

inputs

输入的数量。如果未指定,默认为2。

duration

如何确定流结束。

longest

最长输入的持续时间。(默认值)

shortest

最短输入的持续时间。

first

第一次输入的持续时间。

dropout_transition

当一个输入流结束时,用于音量重新标准化的过渡时间,单位为秒。默认值为2秒。

weights

指定每个输入音频流的权重,作为由空格分隔的一系列数字。如果指定的权重少于输入的数量,最后的权重将分配给剩余的输入。每个输入的默认权重为1。

normalize

始终缩放输入,而不是仅进行样本求和。请注意,如果在过滤之前或之后未对输入进行标准化,则可能会出现严重剪辑情况。如果禁用此选项,默认情况下是启用的。

36.35.1 示例

  • 这将混合3个输入音频流为一个单一输出,其持续时间与第一个输入相同,并具有3秒的掉退出转换时间:
    ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT
    
  • 这将一个人声输入和一个音乐输入音频流混合为一个单一输出,其持续时间与最长输入相同。音乐的权重是人声的四分之一,且输入未经标准化:
    ffmpeg -i VOCALS -i MUSIC -filter_complex amix=inputs=2:duration=longest:dropout_transition=0:weights="1 0.25":normalize=0 OUTPUT
    

36.35.2 命令

此过滤器支持以下命令:

weights
normalize

语法与具有相同名称的选项相同。

36.36 amultiply

将第一个音频流与第二个音频流相乘,并将结果存储在输出音频流中。乘法是通过将第一个流中的每个样本与第二个流中同一位置的样本进行相乘来完成的。

通过这种逐元素乘法,可以创建幅度淡入淡出和幅度调制。

36.37 anequalizer

高阶参数多频段均衡器,每个通道适用。

它接受以下参数:

params

此选项字符串的格式为: "cchnf=cfw=wg=gt=f| ..." 每个均衡器频段由’|'分隔。

chn

设置要应用均衡的通道编号。如果输入没有该通道,则该条目将被忽略。

f

为频段设置中心频率。如果输入没有该频率,则该条目将被忽略。

w

以赫兹为单位设置频带宽度。

g

为频段设置增益,以分贝为单位。

t

设置频段的滤波器类型,可选,可以是:

0

巴特沃斯,这是默认值。

1

切比雪夫1型。

2

切比雪夫2型。

curves

激活此选项时,anequalizer的频率响应将在视频流中显示。

size

设置视频流大小。仅在激活曲线选项时有用。

mgain

设置将显示的最大增益。仅在激活曲线选项时有用。将其设置为合理值可以显示从紧邻的频带导出的增益,这些频带太靠近彼此且两者都激活时会产生更高的增益。

fscale

设置用于在视频输出中绘制频率响应的频率比例。可以是线性或对数。默认值为对数。

colors

设置将在视频流中显示的每个通道曲线的颜色。这是一组由空格或’|'分隔的颜色名称。未识别或缺失的颜色将替换为白色。

36.37.1 示例

  • 减少200Hz的中心频率和100Hz的带宽的增益10倍 对于使用切比雪夫1型滤波器的前两个通道:
    anequalizer=c0 f=200 w=100 g=-10 t=1|c1 f=200 w=100 g=-10 t=1
    

36.37.2 命令

此过滤器支持以下命令:

change

修改现有过滤器参数。 命令的语法为:"fN|f=freq|w=width|g=gain"

fN是现有过滤器的编号,从0开始,如果不存在该过滤器,将返回错误。freq设置新的频率参数。width以赫兹为单位设置新的宽度参数。gain以分贝为单位设置新的增益参数。

完整的过滤器调用,以asendcmd可能看起来像这样: asendcmd=c=’4.0 anequalizer change 0|f=200|w=50|g=1’,anequalizer=...

36.38 anlmdn

使用非本地均值算法降低音频样本中的宽带噪声。

通过观察具有类似上下文的其他样本调整每个样本。通过比较周围的补丁(大小为p的补丁)定义这种上下文相似性。r补丁将在样本周围被搜索,范围是

过滤器接受以下选项:

strength, s

设置降噪强度。允许范围从0.00001到10000。默认值为0.00001。

patch, p

设置补丁半径持续时间。允许范围从1到100毫秒。默认值为2毫秒。

research, r

设置搜索半径持续时间。允许范围从2到300毫秒。默认值为6毫秒。

output, o

设置输出模式。

它接受以下值:

i

通过输入未更改。

o

通过过滤掉噪声。

n

仅通过噪声。

默认值为o.

smooth, m

设置平滑因子。默认值为11。允许范围为11000.

36.38.1 命令

此过滤器支持上述所有选项,例如命令.

36.39 anlmf, anlms

使用第二个音频流对第一个音频流应用标准化最小均方(Squares|Fourth)算法。

这种自适应滤波器用于模拟一个期望的滤波器,通过找到相关的滤波器系数,以产生错误信号(目标信号,即第二个输入音频流与实际信号,即第一个输入音频流之差)的最小均方。

以下是所接受选项的描述。

order

设置滤波器阶数。

mu

设置滤波器的参数 mu。

eps

设置滤波器的参数 eps。

leakage

设置滤波器的泄漏参数。

out_mode

它接受以下值:

i

传递第一个输入音频。

d

传递第二个输入音频。

o

传递目标信号(第二个输入音频)与错误信号估计值之差。

n

传递输入信号(第一个输入音频)与错误信号估计值之差。

e

传递错误信号的估计采样值。

默认值是o.

precision

设置处理样本时使用的精度。

auto

根据其他过滤器自动选择内部样本格式。

float

始终使用单精度浮点格式的样本。

double

始终使用双精度浮点格式的样本。

36.39.1 示例

  • 此过滤器的许多用途中之一是噪声消除,音频输入通过相同的样本过滤,这些样本延迟了固定的时间量,这是某些立体声音频的一个例子:
    asplit[a][b],[a]adelay=32S|32S[a],[b][a]anlms=order=128:leakage=0.0005:mu=.5:out_mode=o
    

36.39.2 命令

此过滤器支持与选项相同的命令,除了选项order.

36.40 anull

将音频源未更改地传递给输出。

36.41 apad

用静音填充音频流的末尾。

可以与ffmpeg -shortest一起使用,以将音频流扩展到与视频流相同的长度。

以下是所接受选项的描述。

packet_size

设置静音包大小。默认值为 4096。

pad_len

设置添加到末尾的静音采样数。在达到该值后,流将被终止。此选项与以下选项互斥whole_len.

whole_len

设置输出音频流的最小总采样数。如果该值长于输入音频长度,则在达到该值之前将向末尾添加静音。此选项与以下选项互斥pad_len.

pad_dur

指定要添加的静音样本的持续时间。请参阅ffmpeg-utils 手册中 ffmpeg-utils(1) 部分的时间持续时间部分了解可接受的语法。仅当设置为非负值时使用。

whole_dur

指定输出音频流中的最小总持续时间。请参阅ffmpeg-utils 手册中 ffmpeg-utils(1) 部分的时间持续时间部分了解可接受的语法。仅当设置为非负值时使用。如果该值长于输入音频长度,则在达到该值之前向末尾添加静音。此选项与以下选项互斥pad_dur

如果既没有设置pad_len也没有设置whole_len亦无pad_durwhole_dur选项,过滤器将无限期地向输入流的末尾添加静音。

请注意,对于 ffmpeg 4.4 及之前版本,将零值pad_durwhole_dur也会导致该过滤器无限期地添加静音。

36.41.1 示例

  • 向输入末尾添加 1024 个静音采样:
    apad=pad_len=1024
    
  • 确保音频输出包含至少 10000 个采样,如果需要则通过静音填充输入:
    apad=whole_len=10000
    
  • 使用ffmpeg通过静音填充音频输入,以便视频流将始终为最短,且在输出文件使用以下选项时将被转换至末尾:shortest选项:
    ffmpeg -i VIDEO -i AUDIO -filter_complex "[1:0]apad" -shortest OUTPUT
    

36.42 aphaser

向输入音频添加相移效果。

相移过滤器在频率谱中创建一系列峰值和谷值。峰值和谷值的位置会被调制,使其随时间变化,从而产生一种扫掠效果。

以下是接受的参数描述。

in_gain

设置输入增益。默认值为 0.4。

out_gain

设置输出增益。默认值为 0.74。

delay

设置延迟(以毫秒为单位)。默认值为 3.0。

decay

设置衰减值。默认值为 0.4。

speed

设置调制速度(以赫兹为单位)。默认值为 0.5。

type

设置调制类型。默认值为三角波。

它接受以下值:

triangular, t
sinusoidal, s

36.43 aphaseshift

对输入音频样本应用相移。

该过滤器接受以下选项:

shift

指定相移值。允许范围为 -1.0 到 1.0。默认值为 0.0。

level

设置应用于最终输出的输出增益。允许范围为 0.0 到 1.0。默认值为 1.0。

order

设置用于过滤的滤波器阶数。允许范围为 1 到 16。默认值为 8。

36.43.1 命令

此过滤器支持上述选项作为命令.

36.44 apsnr

测量音频峰值信噪比。

此过滤器接受两个音频流作为输入,并输出第一个音频流的音频。在任一输入结束时,结果以每个通道的分贝为单位。

36.45 apsyclip

对输入音频流应用心理声学剪辑器。

该过滤器接受以下选项:

level_in

设置输入增益。默认值为 1。范围为 [0.015625 - 64]。

level_out

设置输出增益。默认值为 1。范围为 [0.015625 - 64]。

clip

设置剪辑的起始值。默认值为 0dBFS 或 1。

diff

仅输出差异采样,这对监听引入的失真很有用。默认情况下为禁用。

adaptive

设置应用的自适应失真强度。默认值为 0.5。允许范围为 0 到 1。

iterations

设置心理声学剪辑器的迭代次数。允许范围为 1 到 20。默认值为 10。

level

自动电平输出信号。默认禁用。如果启用,这会将音频恢复到 0dBFS。

36.45.1 命令

此过滤器支持上述所有选项作为命令.

36.46 apulsator

音频脉冲器介于自动声道平移器和颤音效果之间。但它也可以产生有趣的立体声效果。脉冲器根据具有不同波形和相位偏移的低频振荡器(LFO)改变左右通道的音量。此过滤器还具有定义左右通道之间偏移的能力。当偏移为 0 时,两个 LFO 形状彼此匹配。左右通道被同等改变——就像传统颤音效果一样。偏移为 50% 意味着右通道的形状刚好相移(或向后移动半个频率)——脉冲器充当自动声道平移器。当偏移为 1 时,两个曲线再次匹配。介于此范围内的设置无缝地移动相移,在所有阶段之间进行切换,并带有正弦和三角波形,产生一些“穿越”声音。偏移接近 1 时(从 0.5 开始),信号从左扬声器切换到右扬声器的速度更快。

该过滤器接受以下选项:

level_in

设置输入增益。默认值为 1。范围为 [0.015625 - 64]。

level_out

设置输出增益。默认值为 1。范围为 [0.015625 - 64]。

mode

设置 LFO 将使用的波形形状。可以是以下之一:正弦波(sine)、三角波(triangle)、方波(square)、锯齿波向上(sawup)或锯齿波向下(sawdown)。默认值为正弦波。

amount

设置调制。定义 LFO 影响原始信号的程度。

offset_l

设置左声道的偏移量。默认值为0。允许的范围是[0 - 1]。

offset_r

设置右声道的偏移量。默认值为0.5。允许的范围是[0 - 1]。

width

设置脉冲宽度。默认值为1。允许的范围是[0 - 2]。

timing

设置可能的定时模式。可选值为:bpm、ms或hz。默认值为hz。

bpm

设置bpm(节拍每分钟)。默认值为120。允许的范围是[30 - 300]。仅当定时模式设置为bpm时有效。

ms

设置ms(毫秒)。默认值为500。允许的范围是[10 - 2000]。仅当定时模式设置为ms时有效。

hz

以Hz为单位设置频率。默认值为2。允许的范围是[0.01 - 100]。仅当定时模式设置为hz时有效。

36.47 aresample

使用libswresample库将输入音频重采样为指定的参数。如果未指定参数,则滤镜会在其输入和输出之间自动转换。

此滤镜还可以拉伸/压缩音频数据以匹配时间戳,或者注入静音/裁剪音频使其匹配时间戳,或者两者结合,或者不执行任何操作。

滤镜接受以下语法 [采样率:]重采样器选项,其中采样率表示采样率,重采样器选项是一个=对的列表,用":"分隔。有关支持选项的完整列表,请参阅(ffmpeg-resampler)"重采样器选项"部分中的ffmpeg-resampler(1)手册

36.47.1 示例

  • 将输入音频重采样为44100Hz:
    aresample=44100
    
  • 将样本拉伸/压缩到给定的时间戳,每秒最多补偿1000个样本:
    aresample=async=1000
    

36.48 areverse

反转音频剪辑。

警告:此滤镜需要内存来缓冲整个剪辑,因此建议进行裁剪。

36.48.1 示例

  • 获取剪辑的前5秒,并反转它。
    atrim=end=5,areverse
    

36.49 arls

使用第二音频流对第一音频流应用递归最小二乘算法。

此自适应滤镜用于通过递归寻找滤镜系数来模拟所需的滤镜,这些滤镜系数与产生最小加权线性最小平方误差信号(目标,第2输入音频流和实际信号,第1输入音频流之间的差)的代价函数相关。

以下是可接受选项的描述。

order

设置滤镜阶数。

lambda

设置遗忘因子。

delta

设置初始化内部协方差矩阵的系数。

out_mode

设置滤镜输出样本。它接受以下值:

i

传递第1输入。

d

传递第2输入。

o

传递目标(第2输入)与误差信号估计之间的差。

n

传递输入(第1输入)与误差信号估计之间的差。

e

传递误差信号估计样本。

默认值是o.

precision

设置处理样本时使用的精度。

auto

根据其他滤镜自动选择内部样本格式。

float

始终使用单精度浮点样本格式。

double

始终使用双精度浮点样本格式。

36.50 arnndn

使用递归神经网络减少语音中的噪声。

此滤镜接受以下选项:

model, m

设置要加载的训练模型文件。此选项始终是必需的。

mix

设置过滤样本混合到最终输出中的比例。 允许范围为-1到1。默认值为1。 负值为特殊值,它们设置保留过滤噪声的比例 在最终滤波输出中。将此选项设置为-1,可听到从输入信号中移除的实际噪声。

36.50.1 命令

此滤镜支持上述所有选项作为命令.

36.51 asdr

测量音频信号与失真比。

此滤镜将两个音频流作为输入,输出第一个音频流。 结果以每通道分贝在任意输入结束时显示。

36.52 asetnsamples

设置每个输出音频帧的样本数。

最后一个输出包可能包含不同数量的样本,因为滤镜将在输入音频信号结束时刷新剩余的所有样本。

滤镜接受以下选项:

nb_out_samples, n

设置每个输出音频帧的帧数。此数字被视为样本数per each channel。 默认值是1024。

pad, p

如果设置为1,滤镜将用零填充最后的音频帧,使得最后的帧包含与前一帧相同的样本数。默认值是1。

例如,将每帧样本数设置为1234,并为最后一帧禁用填充,使用:

asetnsamples=n=1234:p=0

36.53 asetrate

设置采样率而不改变PCM数据。 这将导致速度和音高的变化。

滤镜接受以下选项:

sample_rate, r

设置输出采样率。默认值为44100 Hz。

36.54 ashowinfo

显示一行包含每个输入音频帧的各种信息。 不会修改输入音频。

显示的行包含一系列形式为:.

的键值对。

n

输入帧的(顺序)编号,从0开始。

pts

输入帧的显示时间戳,单位为时间基;时间基 取决于滤镜的输入端,通常是1/采样率.

pts_time

输入帧显示时间戳,以秒为单位。

fmt

采样格式。

chlayout

声道布局。

rate

音频帧的采样率。

nb_samples

帧中的样本数(每通道)。

checksum

音频数据的Adler-32校验和(以十六进制打印)。对于平面音频,数据被视为所有平面连接在一起。

plane_checksums

每个数据平面的Adler-32校验和列表。

36.55 asisdr

测量音频的缩放不变信号与失真比。

此滤镜将两个音频流作为输入,输出第一个音频流。 结果以每通道分贝在任意输入结束时显示。

36.56 asoftclip

应用音频软削波。

软削波是一种失真效果,其中信号的振幅沿平滑曲线饱和,而不是硬削波的突然形状。

此滤镜接受以下选项:

type

设置软削波的类型。

它接受以下值:

hard
tanh
atan
cubic
exp
alg
quintic
sin
erf
threshold

设置开始削波的阈值。默认值是0dB或1。

output

设置应用于输出的增益。默认值是0dB或1。

param

设置控制S型函数的附加参数。

oversample

设置过采样因子。

36.56.1 命令

此滤镜支持以上所有选项作为命令.

36.57 aspectralstats

显示音频通道的频域统计信息。 统计数据被计算并存储为每个音频通道和每个音频帧的元数据。

它接受以下选项:

win_size

设置窗口长度(以采样点数为单位)。默认值为2048。 允许范围是32到65536。

win_func

设置窗口函数。

它接受以下值:

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是hann.

overlap

设置窗口重叠。允许范围是从01。默认值是0.5.

measure

选择要测量的参数。这些元数据键可以用作标志,默认值是all测量所有内容。none禁用所有测量。

以下是每个元数据键的列表:

mean
variance
centroid
spread
skewness
kurtosis
entropy
flatness
crest
flux
slope
decrease
rolloff

36.58 asr

自动语音识别

此滤镜使用PocketSphinx进行语音识别。要启用此滤镜的编译,您需要配置FFmpeg并添加--enable-pocketsphinx.

它接受以下选项:

rate

设置输入音频的采样率。默认值是16000。 这需要与语音模型匹配,否则结果会很差。

hmm

设置包含声学模型文件的字典。

dict

设置发音字典。

lm

设置语言模型文件。

lmctl

设置语言模型集。

lmname

设置要使用的语言模型。

logfn

设置日志消息的输出。

此滤镜将识别的语音导出为帧元数据lavfi.asr.text.

36.59 astats

显示音频通道的时域统计信息。 每个音频通道的统计数据被计算并显示, 如果适用,还会给出整体数值。

它接受以下选项:

length

用于峰值和谷值RMS测量的短时间窗口长度(以秒为单位)。 默认值是0.05(50毫秒)。允许范围是[0 - 10].

metadata

设置元数据注入。所有的元数据键都以lavfi.astats.X为前缀, 其中X是从1开始的通道号或者字符串Overall。默认是禁用。

每个通道的可用键是:位深 峰度因子 直流偏移 动态范围 平滑因子 最大差异 最大电平 平均差异 最小差异 最小电平 噪声底 噪声底计数 无穷数个数 非数字个数 非正规数个数 峰值计数 绝对峰值计数 峰值电平 均方根差异 均方根峰值 均方根谷值 零交叉数 零交叉率

整体的可用键是:Overall: 位深 直流偏移 平滑因子 最大差异 最大电平 平均差异 最小差异 最小电平 噪声底 噪声底计数 无穷数个数 非数字个数 非正规数个数 样本总数 峰值计数 绝对峰值计数 峰值电平 均方根差异 均方根电平 均方根峰值 均方根谷值

例如,完整键格式为lavfi.astats.1.DC_offsetlavfi.astats.Overall.Peak_count.

下文是键的描述。

reset

设置用于计算累计统计数据的帧数,然后再重置。默认是禁用。

measure_perchannel

选择每个通道测量的参数。这些元数据键可以用作标志,默认值是all测量所有内容。none禁用所有每通道测量。

measure_overall

选择总体测量的参数。这些元数据键可以用作标志,默认值是all测量所有内容。none禁用所有总体测量。

以下是测量键的描述:

none

无措施

all

所有措施

Bit_depth

音频的整体位深度,即每个样本使用的位数

Crest_factor

峰值与均方根级别的标准比率(注意:不是以分贝表示)

DC_offset

平均振幅位移零点

Dynamic_range

以分贝为单位测量的音频动态范围

Entropy

整个音频的熵值测量,接近1.0的熵值通常是对白噪声的测量值

Flat_factor

信号在峰值级别上的平滑度(即连续样本具有相同值)最小级别或者最大级别)

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

信号达到指定最小或最大级别次数(而不是样本数)最小级别最大级别

Abs_Peak_count

绝对样本值达到信号最大绝对值的次数最小级别最大级别

Peak_level

以分贝全尺度 (dBFS) 表示的标准峰值级别

RMS_difference

两个连续样本之间的均方根 (RMS) 差

RMS_level

以分贝全尺度 (dBFS) 表示的标准均方根 (RMS) 级别

RMS_peak
RMS_trough

在短时间窗口内测量的 RMS 级别的峰值和谷值,单位为分贝全尺度 (dBFS)

Zero crossings

波形与零轴平面交叉点的数量

Zero crossings rate

零交叉速率和音频样本数量

36.60 asubboost

增强低音频率。

过滤器接受以下选项:

dry

设置干增益,保留原始信号的量。允许范围是0到1。默认值为1.0。

wet

设置湿增益,保留过滤信号的量。允许范围是0到1。默认值为1.0。

boost

设置最大增强系数。允许范围是1到12。默认值为2。

decay

设置延迟线衰减增益值。允许范围是0到1。默认值为0.0。

feedback

设置延迟线反馈增益值。允许范围是0到1。默认值为0.9。

cutoff

设置截止频率,以赫兹为单位。允许范围是50到900。默认值为100。

slope

设置截止频率的斜率量。允许范围是0.0001到1。默认值为0.5。

delay

设置延迟。允许范围是1到100。默认值为20。

channels

设置要处理的通道。默认值是所有可用的通道。

36.60.1 命令

此过滤器支持上述所有选项作为命令.

36.61 asubcut

切除低音频率。

此过滤器允许设置自定义的、更陡的滚降率比高通过滤器,并因此能够在停止带中更多地衰减频率内容。

过滤器接受以下选项:

cutoff

设置截止频率,以赫兹为单位。允许范围是2到200。默认值为20。

order

设置过滤器阶数。可用值是3到20。默认值为10。

level

设置输入增益值。允许范围是0到1。默认值为1。

36.61.1 命令

此过滤器支持上述所有选项作为命令.

36.62 asupercut

切除高频率。

过滤器接受以下选项:

cutoff

设置截止频率,以赫兹为单位。允许范围是20000到192000。默认值为20000。

order

设置过滤器阶数。可用值是3到20。默认值为10。

level

设置输入增益值。允许范围是0到1。默认值为1。

36.62.1 命令

此过滤器支持上述所有选项作为命令.

36.63 asuperpass

应用高阶巴特沃斯带通滤波器。

过滤器接受以下选项:

centerf

设置中心频率,以赫兹为单位。允许范围是2到999999。默认值为1000。

order

设置过滤器阶数。可用值是4到20。默认值为4。

qfactor

设置品质因数。允许范围是0.01到100。默认值为1。

level

设置输入增益值。允许范围是0到2。默认值为1。

36.63.1 命令

此过滤器支持上述所有选项作为命令.

36.64 asuperstop

应用高阶巴特沃斯带阻滤波器。

过滤器接受以下选项:

centerf

设置中心频率,以赫兹为单位。允许范围是2到999999。默认值为1000。

order

设置过滤器阶数。可用值是4到20。默认值为4。

qfactor

设置品质因数。允许范围是0.01到100。默认值为1。

level

设置输入增益值。允许范围是0到2。默认值为1。

36.64.1 命令

此过滤器支持上述所有选项作为命令.

36.65 atempo

调整音频的速度。

过滤器仅接受一个参数,即音频速度。如果未指定,则过滤器将假定速度为标准的1.0。速度必须在[0.5, 100.0]范围内。

请注意,速度大于2将跳过一些样本,而不是将它们混合。如果出于任何原因对此有所顾虑,可以将多个atempo实例串联使用以实现所需的速度乘积。

36.65.1 示例

  • 将音频减速到80%的速度:
    atempo=0.8
    
  • 将音频加速到300%的速度:
    atempo=3
    
  • 通过串联两个atempo实例将音频加速到300%的速度:
    atempo=sqrt(3),atempo=sqrt(3)
    

36.65.2 命令

此过滤器支持以下命令:

tempo

更改过滤器的节奏比例因子。 命令的语法是:"节奏"

36.66 倾斜

对音频流应用频谱倾斜过滤器。

此过滤器对任何指定频段应用频谱滚降斜率。

过滤器接受以下选项:

freq

设置倾斜的中心频率,单位为赫兹 (Hz)。默认为 10000 Hz。

slope

设置倾斜的斜率方向。默认值为 0。允许范围是 -1 到 1。

width

设置倾斜的宽度。默认为 1000。允许范围是 100 到 10000。

order

设置倾斜过滤器的阶数。

level

设置输入音量级别。允许范围是 0 到 4。 默认值为 1。

36.66.1 命令

此过滤器支持所有上述选项作为命令.

36.67 剪切

修剪输入,使输出包含输入的连续子部分。

它接受以下参数:

start

要保留部分的开始时间戳(秒)。即带有时间戳的音频样本开始将是输出中的第一个样本。

end

指定将丢弃的第一个音频样本的时间,即 时间戳立即之前的音频样本结束将是 输出中的最后一个样本。

start_pts

开始相同,但此选项以样本而非秒设置开始时间戳。

end_pts

结束相同,但此选项以样本而非秒设置结束时间戳。

duration

输出的最大持续时间(秒)。

start_sample

应输出的第一个样本的编号。

end_sample

应丢弃的第一个样本的编号。

start, end,和duration以时间持续时间的格式表示;参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分.

请注意,前两组开始/结束选项和duration选项查看帧的时间戳,而_sample选项仅计数通过过滤器的样本。因此,当时间戳错误、不精确或不从零开始时,start/end_pts 和 start/end_sample 将产生不同的结果。此外请注意,此过滤器不会修改时间戳。如果希望输出时间戳从零开始,请在 atrim 过滤器后插入 asetpts 过滤器。

如果设置了多个开始或结束选项,此过滤器会尝试贪婪地保留至少满足一个指定约束的所有样本。要仅保留一次满足所有约束的部分,请链接多个 atrim 过滤器。

默认设置为保留所有输入。因此,可以仅设置例如结束值以保留指定时间之前的所有内容。

示例:

  • 删除除输入的第二分钟之外的所有内容:
    ffmpeg -i INPUT -af atrim=60:120
    
  • 仅保留前 1000 个样本:
    ffmpeg -i INPUT -af atrim=end_sample=1000
    

36.68 交叉相关

计算两个输入音频流之间的标准化窗口交叉相关。

结果样本始终在 -1 和 1 之间,包括边界。 结果为 1 表示两个输入样本在选定段中高度相关。 结果为 0 表示它们完全不相关。 结果为 -1 表示两个输入样本相位相反,这意味着它们互相抵消。

此过滤器接受以下选项:

size

设置计算交叉相关的段大小。 默认为 256。允许范围是 2 到 131072。

algo

设置交叉相关算法。可以是slowfastbest。 默认值是best。快速算法假设任何给定段的平均值始终为零,因此需要更少的计算。 这通常不正确,但对于典型的音频流是有效的。

36.68.1 示例

  • 计算立体声音频流中声道之间的相关性:
    ffmpeg -i stereo.wav -af channelsplit,axcorrelate=size=1024:algo=fast correlation.wav
    

36.69 带通

应用具有中心频率频率和(3dB 点)带宽的两极巴特沃斯带通滤波器。csg选项选择恒定裙带增益(峰值增益 = Q),而不是默认的恒定 0dB 峰值增益。 滤波器滚降率为每倍频程 6dB(每十倍频 20dB)。

过滤器接受以下选项:

frequency, f

设置过滤器的中心频率。默认为3000.

csg

如果设置为 1,则恒定裙带增益。默认为 0。

width_type, t

设置指定过滤器带宽的方法。

h

赫兹

q

品质因数

o

倍频程

s

坡度

k

千赫

width, w

以 width_type 单位指定过滤器的带宽。

mix, m

在输出中使用过滤信号的比例。默认为 1。 范围是 0 到 1。

channels, c

指定要过滤的声道,默认情况下会过滤所有可用的声道。

normalize, n

规范化双二阶系数,默认情况下禁用。 启用后将在 DC 上规范化幅度响应为 0dB。

transform, a

设置 IIR 滤波器的变换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤精度。

auto

根据环境过滤器选择自动采样格式。

s16

始终使用有符号 16 位。

s32

始终使用有符号 32 位。

f32

始终使用浮点 32 位。

f64

始终使用浮点 64 位。

block_size, b

设置用于反向 IIR 处理的块大小。如果此值设置得足够高 (高于当接近零值时被截断的脉冲响应长度),过滤就会变成线性相位;否则如果不足够大,则只会产生刺耳的伪影。

请注意,当设置为非零值时,过滤器的延迟将正好为这多个样本。

36.69.1 命令

此过滤器支持以下命令:

frequency, f

更改带通频率。 命令的语法是:"频率"

width_type, t

更改带宽类型。 命令的语法是:"宽带类型"

width, w

更改带宽。 命令的语法是:"宽带"

mix, m

更改混合比例。 命令的语法是:"混合"

36.70 带拒绝

应用具有中心频率频率和(3dB 点)带宽宽带的两极巴特沃斯带拒绝滤波器。 滤波器滚降率为每倍频程 6dB(每十倍频 20dB)。

过滤器接受以下选项:

frequency, f

设置滤波器的中心频率。默认值是3000.

width_type, t

设置用于指定滤波器带宽的方法。

h

赫兹

q

品质因数

o

倍频程

s

坡度

k

千赫

width, w

以宽度单位指定滤波器的带宽。

mix, m

在输出中使用滤波信号的程度。默认值为1。 范围是0到1之间。

channels, c

指定要过滤的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波器系数,默认情况下禁用。 启用它会将直流量的幅度响应归一化到0dB。

transform, a

设置IIR滤波器的转换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤的精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置反向IIR处理使用的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度),过滤 将变为线性相位,否则如果不够大,它将产生严重伪像。

请注意,当设置为非零值时,滤波器延迟将正好是这么多样本。

36.70.1 命令

此滤波器支持以下命令:

frequency, f

更改带拒频率。 命令语法是:"频率"

width_type, t

更改带拒宽度类型。 命令语法是:"宽度类型"

width, w

更改带拒宽度。 命令语法是:"宽度"

mix, m

更改带拒混合。 命令语法是:"混合"

36.71 低音,低架构

使用一个两极架滤波器提升或削减音频的低频 类似于标准Hi-Fi音调控制的响应。这也被称为架式均衡(EQ)。

滤波器接受以下选项:

gain, g

在0赫兹处给予增益。其有效范围约为-20 (用于大削减)到+20(用于大提升)。 使用正增益时要注意削波。

frequency, f

设置滤波器的中心频率,因此可以用于扩展或缩小需提升或削减的频宽。 默认值是100赫兹。

width_type, t

设置用于指定滤波器带宽的方法。

h

赫兹

q

品质因数

o

倍频程

s

坡度

k

千赫

width, w

确定滤波器架变换的陡度。

poles, p

设置极点数量。默认值为2。

mix, m

在输出中使用滤波信号的程度。默认值为1。 范围是0到1之间。

channels, c

指定要过滤的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波器系数,默认情况下禁用。 启用它会将直流量的幅度响应归一化到0dB。

transform, a

设置IIR滤波器的转换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤的精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置反向IIR处理使用的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度),过滤 将变为线性相位,否则如果不够大,它将产生严重伪像。

请注意,当设置为非零值时,滤波器延迟将正好是这么多样本。

36.71.1 命令

此滤波器支持以下命令:

frequency, f

更改低音频率。 命令语法是:"频率"

width_type, t

更改低音宽度类型。 命令语法是:"宽度类型"

width, w

更改低音宽度。 命令语法是:"宽度"

gain, g

更改低音增益。 命令语法是:"增益"

mix, m

更改低音混合。 命令语法是:"混合"

36.72 二阶滤波器

应用具有给定系数的二阶IIR滤波器。 其中b0, b1, b2a0, a1, a2是分子和分母系数。 而通道, c指定要过滤的通道,默认情况下过滤所有可用通道。

36.72.1 命令

此滤波器支持以下命令:

a0
a1
a2
b0
b1
b2

更改二阶滤波器参数。 命令语法是:""

mix, m

在输出中使用滤波信号的程度。默认值为1。 范围是0到1之间。

channels, c

指定要过滤的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波器系数,默认情况下禁用。 启用它会将直流量的幅度响应归一化到0dB。

transform, a

设置IIR滤波器的转换类型。

di
dii
tdi
tdii
latt
svf
zdf
precision, r

设置过滤的精度。

auto

根据环绕滤波器选择自动采样格式。

s16

始终使用有符号16位。

s32

始终使用有符号32位。

f32

始终使用浮点32位。

f64

始终使用浮点64位。

block_size, b

设置反向IIR处理使用的块大小。如果该值设置得足够高 (高于当接近零值时截断的脉冲响应长度),过滤 将变为线性相位,否则如果不够大,它将产生严重伪像。

请注意,当设置为非零值时,滤波器延迟将正好是这么多样本。

36.73 bs2b

Bauer立体声到双耳转换,改善耳机听力的 立体声音频记录。

要启用此滤波器的编译,您需要使用以下配置设置FFmpeg:--enable-libbs2b.

它接受以下参数:

profile

预定义的交叉馈通电平。

default

默认电平(fcut=700, feed=50)。

cmoy

Chu Moy电路(fcut=700, feed=60)。

jmeier

Jan Meier电路(fcut=650, feed=95)。

fcut

截止频率(单位:Hz)。

feed

馈通电平(单位:Hz)。

36.74 通道映射

将输入通道重新映射到新的位置。

它接受以下参数:

map

将输入通道映射到输出通道。参数是一个用‘|’分隔的映射列表,每个映射的形式为输入通道-输出通道输入通道的形式。输入通道可以是输入通道的名称(例如FL表示前左)或其在输入通道布局中的索引。输出通道是输出通道的名称或其在输出通道布局中的索引。如果输出通道未给出,则它隐式为一个索引,从零开始,每个映射递增1。混合不同类型的映射是不允许的,将导致解析错误。

channel_layout

输出流的通道布局。如果未指定,则过滤器将根据输出通道名称或映射数量进行猜测。猜测的布局不一定包含与映射顺序一致的通道。

如果没有映射,过滤器将隐式地将输入通道映射到输出通道,保留索引。

36.74.1 示例

  • 例如,假设有一个5.1+下混的输入MOV文件,
    ffmpeg -i in.mov -filter 'channelmap=map=DL-FL|DR-FR' out.wav
    

    将从输入的下混通道创建一个标记为立体声的输出WAV文件。

  • 修正一个以AAC本地通道顺序不正确编码的5.1 WAV文件
    ffmpeg -i in.wav -filter 'channelmap=1|2|0|5|3|4:5.1' out.wav
    

36.75 通道分离

将输入音频流的每个通道分离为单独的输出流。

它接受以下参数:

channel_layout

输入流的通道布局。默认是"立体声"。

channels

描述要提取为单独输出流的通道布局或"all",表示将每个输入通道分别提取为单独的流。默认是"all"。

选择不在输入通道布局中的通道将导致错误。

36.75.1 示例

  • 例如,假设有一个立体声的输入MP3文件,
    ffmpeg -i in.mp3 -filter_complex channelsplit out.mkv
    

    将创建一个包含两个音频流的输出Matroska文件,一个仅包含左声道,另一个仅包含右声道。

  • 将一个5.1 WAV文件分离为每个通道的文件:
    ffmpeg -i in.wav -filter_complex
    'channelsplit=channel_layout=5.1[FL][FR][FC][LFE][SL][SR]'
    -map '[FL]' front_left.wav -map '[FR]' front_right.wav -map '[FC]'
    front_center.wav -map '[LFE]' lfe.wav -map '[SL]' side_left.wav -map '[SR]'
    side_right.wav
    
  • 仅从5.1 WAV文件中提取LFE:
    ffmpeg -i in.wav -filter_complex 'channelsplit=channel_layout=5.1:channels=LFE[LFE]'
    -map '[LFE]' lfe.wav
    

36.76 合唱

给音频添加合唱效果。

可以让单一人声听起来像合唱,也可以应用于乐器。

合唱效果类似于带有短延迟的回声效果,但在回声效果中,延迟是恒定的,而在合唱效果中,它使用正弦波或三角波调制进行变化。调制深度定义了调制延迟在延迟之前或之后播放的范围。因此,延迟的声音听起来要么更慢要么更快,也就是延迟的声音围绕原始声调进行微调,就像合唱中有些声部略微跑调。

它接受以下参数:

in_gain

设置输入增益。默认是0.4。

out_gain

设置输出增益。默认是0.4。

delays

设置延迟。一个典型的延迟大约是40ms到60ms。

decays

设置衰减。

speeds

设置速度。

depths

设置深度。

36.76.1 示例

  • 单一延迟:
    chorus=0.7:0.9:55:0.4:0.25:2
    
  • 双延迟:
    chorus=0.6:0.9:50|60:0.4|0.32:0.25|0.4:2|1.3
    
  • 三个延迟实现的更丰满合唱效果:
    chorus=0.5:0.9:50|60|40:0.4|0.32|0.3:0.25|0.4|0.3:2|2.3|1.3
    

36.77 动态压缩/扩展

压缩或扩展音频的动态范围。

它接受以下参数:

attacks
decays

每个通道的时间列表(单位:秒),用于平均输入信号的瞬时电平以确定音量。增长指的是音量增加,减衰指的是音量减少。在大多数情况下,增长时间(音频变大时的响应)应该比减衰时间短,因为人耳对突然而大的声音比突然减小的声音更为敏感。一个典型的增长时间为0.3秒,典型的减衰时间为0.8秒。如果指定的增长和减衰数量少于通道数量,则最后设置的增长/减衰将用于剩余通道。

points

转移函数的点列表,以相对于最大可能信号幅度的dB值指定。每个关键点列表必须使用以下语法定义:x0/y0|x1/y1|x2/y2|....x0/y0 x1/y1 x2/y2 ....

输入值必须严格递增,但转移函数不一定是单调上升的。点0/0被假设但可以被覆盖(通过0/out-dBn)。转移函数的典型值是-70/-70|-60/-20|1/0.

soft-knee

设置所有连接处的曲线半径(单位:dB)。默认为0.01。

gain

设置转移函数上所有点的额外增益(单位:dB)。这使得整体增益调整变得简单。默认为0。

volume

设置过滤开始时每个通道的初始音量(单位:dB)。这允许用户最初提供一个标称水平,例如在压缩操作开始前对最初安静的信号水平应用非常大的增益。对于最初安静的音频,一个典型值是-90 dB。默认为0。

delay

设置延迟(单位:秒)。输入音频会立即被分析,但在送入音量调整器之前会被延迟。指定一个与增长/减衰时间大致相等的延迟,可以使过滤器有效地以预测模式运行,而不是以反应模式运行。默认为0。

36.77.1 示例

  • 使包含安静和嘈杂段落的音乐适合在嘈杂环境中收听:
    compand=.3|.3:1|1:-90/-60|-60/-40|-40/-30|-20/-20:6:0:-90:0.2
    

    另一个适用于有耳语和爆炸部分的音频的示例:

    compand=0|0:1|1:-90/-900|-70/-70|-30/-9|0/-3:6:0:0:0
    
  • 当噪声水平低于信号时的噪声门限制:
    compand=.1|.1:.2|.2:-900/-900|-50.1/-900|-50/-50:.01:0:-90:.1
    
  • 另一个噪声门示例,这次适用于噪声水平高于信号的情况(在某些方面类似于静噪):
    compand=.1|.1:.1|.1:-45.1/-45.1|-45/-900|0/-900:.01:45:-90:.1
    
  • 从-6dB开始实现2:1压缩:
    compand=points=-80/-80|-6/-6|0/-3.8|20/3.5
    
  • 从-9dB开始实现2:1压缩:
    compand=points=-80/-80|-9/-9|0/-5.3|20/2.9
    
  • 从-12dB开始实现2:1压缩:
    compand=points=-80/-80|-12/-12|0/-6.8|20/1.9
    
  • 从-18dB开始实现2:1压缩:
    compand=points=-80/-80|-18/-18|0/-9.8|20/0.7
    
  • 从-15dB开始实现3:1压缩:
    compand=points=-80/-80|-15/-15|0/-10.8|20/-5.2
    
  • 压缩器/门限制器:
    compand=points=-80/-105|-62/-80|-15.4/-15.4|0/-12|20/-7.6
    
  • 扩展器:
    compand=attacks=0:points=-80/-169|-54/-80|-49.5/-64.6|-41.1/-41.1|-25.8/-15|-10.8/-4.5|0/0|20/8.3
    
  • 在-6dB硬限制:
    compand=attacks=0:points=-80/-80|-6/-6|20/-6
    
  • 在-12dB硬限制:
    compand=attacks=0:points=-80/-80|-12/-12|20/-12
    
  • 在-35 dB硬噪声门限制:
    compand=attacks=0:points=-80/-115|-35.1/-80|-35/-35|20/20
    
  • 软限制器:
    compand=attacks=0:points=-80/-80|-12.4/-12.4|-6/-8|0/-6.8|20/-2.8
    

36.78 补偿延迟

补偿延迟线是一个基于公制的延迟,用于补偿麦克风或扬声器的位置差异。

例如,使用不同位置的两个麦克风录制吉他。因为在正常条件下,声音波前的传播速度是固定的,麦克风的相位可能会有所不同,具体取决于它们的位置和相对位置。当这些麦克风同步(同相)时可以实现最佳声音混合。注意,麦克风之间大约30厘米的距离会使一个麦克风捕捉的信号与另一个麦克风的信号呈反相。这会使最终的混音听起来情绪化。这种过滤器通过为不同的麦克风轨道添加不同的延迟以使它们同步,帮助解决相位问题。

最佳结果可以通过将一个轨道作为基准并逐个与之同步其它轨道来实现。记住,同步/延迟容差也取决于采样率。更高的采样率会提供更大的容差。

该过滤器接受以下参数:

mm

设置毫米距离。这是用于精调的补偿距离。默认为0。

cm

设置厘米距离。这是用于调整距离设置的补偿距离。默认为0。

m

设置米距离。这是用于硬距离设置的补偿距离。默认为0。

dry

设置干信号量。未经处理(干)的信号量。默认为0。

wet

设置湿信号量。处理后(湿)的信号量。默认为1。

temp

设置环境温度(单位:摄氏度)。默认为20。

36.78.1 命令

此过滤器支持上述所有选项作为命令.

36.79 耳机共振处理

应用耳机共振过滤器。

共振处理是将立体声录音的左声道和右声道进行混合的过程。 主要用于减少低频的极端立体声分离。

目的是为听众提供更像扬声器发出的声音。

此过滤器接受以下选项:

strength

设置耳机共振强度。默认值为0.2。允许范围为0到1。 这决定了立体声图像侧边的低频滤波增益。 默认值为-6dB。当强度设置为1时,最大允许值为-30dB。

range

设置声场宽度。默认值为0.5。允许范围为0到1。 这设置了低频滤波的截止频率。默认情况下截止频率接近1550 Hz。 当范围设置为1时,截止频率为2100 Hz。

slope

设置低频滤波的曲线坡度。默认值为0.5。 允许范围为0.01到1。

level_in

设置输入增益。默认值为0.9。

level_out

设置输出增益。默认值为1。

block_size

设置用于反向IIR处理的块大小。如果该值设置为足够高的值 (高于脉冲响应长度当接近零值时的截断长度)过滤过程将成为线性相位, 否则如果设置不够大将产生明显的伪影。

注意,当设置为非零值时,过滤器延迟将精确为样本数量。

36.79.1 命令

此过滤器支持上述所有选项作为命令.

36.80 锐化处理

简单的音频噪声锐化算法。

此过滤器线性增加每个音频样本之间的差异。

此过滤器接受以下选项:

i

设置效果强度(默认值:2.0)。必须在-10.0至0 (声音保持不变)至10.0之间(最大效果)。 要反向过滤,请使用负值。

c

启用剪辑。默认情况下已启用。

36.80.1 命令

此过滤器支持上述所有选项作为命令.

36.81 直流偏移

对音频应用直流偏移。

这对于消除音频中的直流偏移(可能是由录音链中的硬件问题引起的)很有用。 直流偏移的影响是减少动态范围,从而减少音量。astats过滤器可用来检测信号是否存在直流偏移。

shift

设置直流偏移,允许范围是[-1, 1]。它表示音频的偏移量。

limitergain

可选。值应远小于1(例如0.05或0.02),用于防止剪辑。

36.82 除齿

对音频样本应用去齿处理。

i

设置触发去齿处理的强度。允许范围为0到1。默认值为0。

m

设置声音高音部分的衰减量。允许范围为0到1。默认值为0.5。

f

去齿处理时保留原始频率内容的比例。允许范围为0到1。 默认值为0.5。

s

设置输出模式。

它接受以下值:

i

保持输入不变。

o

通过滤除高音。

e

仅通过高音。

默认值为原始.

36.83 对话增强

增强立体声音频中的对话。

此过滤器接受立体声输入并生成环绕声(3.0声道)输出。 新生成的前方中心通道会增强原本存在于两个立体声声道中的语音对话。 此过滤器输出的前方左声道和右声道与立体声输入中提供的相同。

此过滤器接受以下选项:

original

设置保持在前方中心通道输出中的原始中心因子。 允许范围为0到1。默认值为1。

enhance

设置在前方中心通道输出中增强语音对话的因子。 允许范围为0到3。默认值为1。

voice

设置语音检测因子。 允许范围为2到32。默认值为2。

36.83.1 命令

此过滤器支持上述所有选项作为命令.

36.84 动态范围计量

检测音频动态范围。

动态范围值(DR)为14及以上的音频通常具有很强的动态性。动态范围值在8到13之间的音频是过渡数据。 任何小于8的动态范围被认为动态性差并被高度压缩。

此过滤器接受以下选项:

length

设置用于将音频分割为相等长度段的窗口长度(以秒为单位)。默认值为3秒。

36.85 动态音频正常化

动态音频正常化器。

此滤波器对输入音频应用一定增益,以使其峰值幅度达到目标水平(例如0 dBFS)。 然而,与更“简单”的正常化算法不同,动态音频正常化器会动态重新调整输入音频的增益因子。 这样,可以对音频的“静音”部分添加额外增益,同时避免“响亮”部分的失真或剪辑。 换句话说:动态音频正常化器会“平滑”静音和响亮部分的音量,将每个部分的音量都提高到相同的目标水平。 但是请注意,动态音频正常化器实现这一目标时不会应用“动态范围压缩”。它将保留每个音频部分的动态范围。

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。

targetrms, r

设置目标RMS值。范围为0.0至1.0。默认值为0.0 - 禁用。 默认情况下,动态音频正常化器执行“峰值”正常化。 这意味着每帧的最大局部增益因子仅由帧的最高幅度样本定义。 通过调整所有帧到固定RMS值,可以建立一致的感知响度。

coupling, n

启用信道耦合。默认情况下已启用。 默认情况下,动态音频正常化器对所有信道应用相同的增益因子。 如果录音中不同频道的音量不均匀,可以禁用信道耦合。 此时,各信道的增益因子将独立计算,仅基于各信道的最高幅度样本。

correctdc, c

启用直流偏差校正。默认情况下禁用。 音频信号应围绕零点居中。当均值显著偏离0.0时,被称为直流偏差。 动态音频正常化器提供可选的直流偏差校正。

altboundary, b

启用备用边界模式。默认情况下禁用。 动态音频正常化器将问题处理边界帧位置的邻近问题假设处理为1.0增益因子, 实现平滑的淡入淡出效果。

compress, s

设置压缩因子。范围为0.0到30.0。默认值为0.0。 动态音频正常化器不会应用“传统”压缩。 输入帧将会按指定门限剪略幅度超限样本,同时确保局部幅度保留1.0范围。

threshold, t

设置目标阈值。指定输入音频的最低允许幅度,该值将归一化。 默认值为0。

channels, h

指定要过滤的信道,默认情况下过滤所有可用信道。

overlap, o

指定帧的重叠。如果设置为0(默认)则不重叠。使用>0并<1值会使增益调整更平滑。

curve, v

指定峰值计算表达式,用于计算帧应用的增益。帧的最大输出增益仍受到其他选项限制。

表达式可包含以下常量:

ch

当前信道编号

sn

当前样本编号

nb_channels

信道数

t

时间戳(秒)

sr

采样率

p

当前帧峰值

36.85.1 命令

此过滤器支持上述所有选项作为命令.

36.86 耳蜡处理

让音频在耳机上听起来更舒服。

此过滤器添加‘提示’到44.1kHz立体声(即音频CD格式)音频中, 使得在耳机上播放时,立体声图像从头部内部转移到头部前方。

移植自SoX。

36.87 均衡器

应用双极点峰值均衡(EQ)滤波器。通过此过滤器,可提高或降低指定频率及其周围的信号电平, 而所有其他频率保持不变。

为了产生复杂的均衡曲线,可以多次调用此过滤器,每次使用不同的中心频率。

此过滤器接受以下选项:

frequency, f

设置过滤器的中心频率(单位Hz)。

width_type, t

设置过滤器的带宽指定方法。

h

Hz

q

Q因子

o

八度

s

斜率

k

千赫兹

width, w

指定滤波器的带宽,单位为宽度类型。

gain, g

设置所需的增益或衰减(单位:分贝)。 使用正增益时需注意可能会发生剪裁。

mix, m

在输出中使用滤波信号的比例。默认值为1。 范围介于0到1之间。

channels, c

指定要过滤的声道,默认情况下会过滤所有可用的声道。

normalize, n

归一化双二阶滤波器系数,默认关闭。 启用归一化将会使直流响应的幅度归一化为0分贝。

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.87.1 示例

  • 在1000 Hz处衰减10分贝,带宽为200 Hz:
    equalizer=f=1000:t=h:width=200:g=-10
    
  • 在1000 Hz处应用2分贝增益,Q值为1;并在100 Hz处衰减5分贝,Q值为2:
    equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5
    

36.87.2 命令

该过滤器支持以下命令:

frequency, f

更改均衡器频率。 命令的语法为:"频率"

width_type, t

更改均衡器宽度类型。 命令的语法为:"宽度类型"

width, w

更改均衡器宽度。 命令的语法为:"宽度"

gain, g

更改均衡器增益。 命令的语法为:"增益"

mix, m

更改均衡器混合比例。 命令的语法为:"混合"

36.88 额外立体声

线性增加左声道和右声道之间的差异, 为播放添加某种“现场”效果。

过滤器接受以下选项:

m

设置差异系数(默认:2.5)。0.0表示单声道声音 (左右声道的平均值);1.0表示声音保持不变;-1.0将左右声道交换。

c

启用剪裁。默认启用。

36.88.1 命令

该过滤器支持所有上述选项作为命令.

36.89 火焰均衡器

使用任意频率响应应用FIR均衡。

过滤器接受以下选项:

gain

设置增益曲线公式(单位:分贝)。公式可以包含以下变量:

f

评估的频率

sr

采样率

ch

声道编号,当禁用多声道评估时为0

chid

声道ID,参见libavutil/channel_layout.h,当禁用多声道评估时设置为第一个声道ID

chs

声道数量

chlayout

声道布局,参见libavutil/channel_layout.h

以及功能:

gain_interpolate(f)

在频率f上基于gain_entry插值获取增益

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项连续的1阶导数纳特窗

mnuttall3

最小化3项不连续纳特窗

nuttall

4项连续的1阶导数纳特窗

bnuttall

最小化4项不连续的纳特窗(布莱克曼-纳特窗)

bharris

布莱克曼-哈里斯窗

tukey

特基窗

fixed

如果启用,使用固定数量的音频样本。这提高了使用较大延迟进行过滤时的速度。 默认禁用。

multi

启用增益的多声道评估。默认禁用。

zero_phase

通过减去时间戳启用零相位模式以补偿延迟。 默认禁用。

scale

设置用于增益的比例。可接受的值有:

linlin

线性频率,线性增益

linlog

线性频率,对数增益(单位:分贝)(默认)

loglin

对数频率(使用八度音阶形式,其中20 Hz为0),线性增益

loglog

对数频率,对数增益

dumpfile

设置适合gnuplot使用的转储文件。

dumpscale

设置转储文件的比例。可接受的值与比例选项相同。 默认值是linlog。

fft2

启用使用复FFT进行的双通道卷积。这显著提高了速度。 默认禁用。

min_phase

启用最小相位脉冲响应。默认禁用。

36.89.1 示例

  • 1000 Hz低通滤波器:
    firequalizer=gain='if(lt(f,1000), 0, -INF)'
    
  • 带增益条目的低通滤波器,频率为1000 Hz:
    firequalizer=gain_entry='entry(1000,0); entry(1001, -INF)'
    
  • 自定义均衡化:
    firequalizer=gain_entry='entry(100,0); entry(400, -4); entry(1000, -6); entry(2000, 0)'
    
  • 更高的延迟具有零相位以补偿延迟:
    firequalizer=delay=0.1:fixed=on:zero_phase=on
    
  • 左声道低通滤波器,右声道高通滤波器:
    firequalizer=gain='if(eq(chid,1), gain_interpolate(f), if(eq(chid,2), gain_interpolate(1e6+f), 0))'
    :gain_entry='entry(1000, 0); entry(1001,-INF); entry(1e6+1000,0)':multi=on
    

36.90 颤音器

对音频应用颤音效果。

过滤器接受以下选项:

delay

设置基准延迟(单位:毫秒)。范围为0到30。默认值是0。

depth

设置附加扫频延迟(单位:毫秒)。范围为0到10。默认值是2。

regen

设置百分比再生(延迟信号的反馈)。范围为-95到95。 默认值为0。

width

设置延迟信号与原始信号混合的百分比。范围为0到100。 默认值是71。

speed

设置每秒的扫频次数(单位:赫兹)。范围为0.1到10。 默认值是0.5。

shape

设置扫频的波形,可以是三角波正弦波。 默认值是正弦波.

phase

设置多通道的扫描波百分比偏移。范围从0到100。 默认值是25。

interp

设置延迟线插值,线性二次。 默认是线性.

36.91 哈斯

将哈斯效应应用于音频。

请注意,这主要适合应用在单声道信号上。 对单声道信号应用此滤镜会产生一些方向性并 扩展其立体声图像。

该滤镜接受以下选项:

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.92 hdcd

解码高保真兼容数字(HDCD)数据。具有嵌入HDCD代码的16位PCM流将被扩展为20位PCM流。

滤镜支持HDCD的峰值扩展和低级增益调整功能,并检测瞬态滤波标志。

ffmpeg -i HDCD16.flac -af hdcd OUT24.flac

使用WAV与此滤镜时,请注意WAV的默认编码是16位, 因此生成的20位流将被截断回16位。使用类似-acodec pcm_s24le在滤镜之后以获得24位PCM输出。

ffmpeg -i HDCD16.wav -af hdcd OUT16.wav
ffmpeg -i HDCD16.wav -af hdcd -c:a pcm_s24le OUT24.wav

该滤镜接受以下选项:

disable_autoconvert

禁用滤镜图中的任何自动格式转换或重采样。

process_stereo

一同处理立体声通道。如果目标增益在通道之间不匹配,则认为它无效并使用最后有效的目标增益。

cdt_ms

设置代码检测计时器周期(毫秒)。

force_pe

即使PE未被信号标记,也始终扩展高于-3dBFS的峰值。

analyze_mode

用单一音调替换音频并调整幅度以标记解码过程的某些特定方面。 可以将输出文件与原始文件一起加载到音频编辑器中以辅助分析。

analyze_mode=pe:force_pe=true可用于查看所有高于PE级别的样本。

模式是:

0, off

禁用

1, lle

每个样本的增益调整级别

2, pe

发生峰值扩展的样本

3, cdt

代码检测计时器活动的样本

4, tgm

目标增益在通道之间不匹配的样本

36.93 耳机

应用头相关传递函数(HRTFs)以创建虚拟扬声器, 在用户周围进行双耳监听。 HRIR通过额外的流提供, 每个通道需要一个立体声输入流。

该滤镜接受以下选项:

map

设置用于卷积的输入流映射。 参数是一个用'|'分隔的通道名称列表, 顺序是按它们作为滤镜的额外流提供的。 这也指定了输入流的数量。 输入流数量不得少于第一个流的通道数加1。

gain

设置应用于音频的增益。值以dB表示。默认是0。

type

设置处理类型。可以是时间频率. 时间是在时间域处理音频,这很慢。频率是在频率域处理音频,这很快。 默认是频率.

lfe

设置自定义增益用于LFE通道。值以dB表示。默认是0。

size

设置将一次处理的帧大小(样本数)。 默认值是1024。允许范围是从1024到96000。

hrir

设置HRIR流的格式。 默认值是立体声。替代值是多通道。 如果值被设置为立体声,则额外流的数量应大于或等于第一个输入流中的通道数。 此外,每个额外流应具有立体声通道数。 如果值被设置为多通道,则额外流的数量应恰好为1。 此外,额外流的输入通道数量应等于或大于第一个输入流通道数量的两倍。

36.93.1 示例

  • 完整示例,使用WAV文件作为系数与amovie过滤器进行7.1下混, 每个amovie过滤器使用立体声文件作为IR系数的输入。 这些文件为虚拟扬声器的每个位置提供系数:
    ffmpeg -i input.wav
    -filter_complex "amovie=azi_270_ele_0_DFC.wav[sr];amovie=azi_90_ele_0_DFC.wav[sl];amovie=azi_225_ele_0_DFC.wav[br];amovie=azi_135_ele_0_DFC.wav[bl];amovie=azi_0_ele_0_DFC.wav,asplit[fc][lfe];amovie=azi_35_ele_0_DFC.wav[fl];amovie=azi_325_ele_0_DFC.wav[fr];[0:a][fl][fr][fc][lfe][bl][br][sl][sr]headphone=FL|FR|FC|LFE|BL|BR|SL|SR"
    output.wav
    
  • 完整示例,使用WAV文件作为系数与amovie过滤器进行7.1下混, 但现在采用多通道 HRIR格式。
    ffmpeg -i input.wav -filter_complex "amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
    output.wav
    

36.94 高通

应用一个3dB点频率的高通滤波器。 滤波器可以是单极,也可以是双极(默认是双极)。 滤波器每极每倍频程衰减6dB(每极每十倍频程衰减20dB)。

该滤镜接受以下选项:

frequency, f

设置频率(单位:Hz)。默认是3000。

poles, p

设置极的数量。默认是2。

width_type, t

设置用于指定滤波器带宽的方法。

h

赫兹

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.94.1 命令

此过滤器支持以下命令:

frequency, f

更改高通频率。 命令语法为:"frequency"

width_type, t

更改高通宽度类型。 命令语法为:"width_type"

width, w

更改高通宽度。 命令语法为:"width"

mix, m

更改高通混合。 命令语法为:"mix"

36.95 join

将多个输入流合并为一个多通道流。

它接受以下参数:

inputs

输入流的数量。默认值为2。

channel_layout

所需的输出通道布局。默认值为立体声。

map

将输入通道映射到输出端。参数是一个由'|'分隔的映射列表,每个映射以input_idx.in_channel-out_channel的形式。input_idx是输入流的从0开始的索引。in_channel可以是输入通道的名称(例如FL表示前左)或指定输入流中的索引。out_channel是输出通道的名称。

当映射未明确指定时,过滤器将尝试进行猜测。其方法是首先尝试找到未使用的匹配输入通道,如果失败,则选择第一个未使用的输入通道。

连接3个输入(具有正确设置的通道布局):

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex join=inputs=3 OUTPUT

从6个单通道流生成5.1输出:

ffmpeg -i fl -i fr -i fc -i sl -i sr -i lfe -filter_complex
'join=inputs=6:channel_layout=5.1:map=0.0-FL|1.0-FR|2.0-FC|3.0-SL|4.0-SR|5.0-LFE'
out

36.96 ladspa

加载一个LADSPA(Linux音频开发者简单插件API)插件。

要启用此过滤器的编译,您需要配置FFmpeg,并带有--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-th控制上的值。 或者,也可以使用以下语法定义:value0|value1|value2|..., 其中valuei是设置在i-th控制上的值。 如果controls被设置为help,将打印所有可用控制及其有效范围。

sample_rate, s

指定采样率,默认为44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧中每个通道的样本数量,默认为1024。仅在插件没有输入时使用。

duration, d

设置生成音频的最小持续时间。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以查看接受的语法。 请注意,生成的持续时间可能大于指定的持续时间,因为生成的音频始终会在完整帧结束时截断。 如果未指定,或表达的持续时间为负值,则音频将被视为无限期生成。 仅在插件没有输入时使用。

latency, l

启用延迟补偿,默认情况下禁用。 仅在插件有输入时使用。

36.96.1 示例

  • 列出amp(LADSPA示例插件)库中的所有可用插件:
    ladspa=file=amp
    
  • 列出vcf_notch插件的所有可用控制及其有效范围:VCF库中的
    ladspa=f=vcf:p=vcf_notch:c=help
    
  • 使用Computer Music Toolkit(CMT) 插件库模拟低质量音频设备:
    ladspa=file=cmt:plugin=lofi:controls=c0=22|c1=12|c2=12
    
  • 使用TAP插件 (Tom的音频处理插件)为音频添加混响:
    ladspa=file=tap_reverb:tap_reverb
    
  • 生成0.2幅度的白噪声:
    ladspa=file=cmt:noise_source_white:c=c0=.2
    
  • 使用插件生成20 bpm的点击音C* Click - Metronome,来自C* Audio Plugin Suite(CAPS)库:
    ladspa=file=caps:Click:c=c1=20'
    
  • 应用C* Eq10X2 - Stereo 10-band equaliser效果:
    ladspa=caps:Eq10X2:c=c0=-48|c9=-24|c3=12|c4=2
    
  • 使用Steve Harris快速前瞻限制器提高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.96.2 命令

此过滤器支持以下命令:

cN

修改个控制值。

如果指定的值无效,将被忽略并保留原值。

36.97 loudnorm

EBU R128响度标准化。包括动态和线性标准化模式。 支持单次通过(直播流、文件)和双次通过(文件)模式。 该算法可以设置目标综合响度、响度范围和最大真峰值。在动态模式中,为了准确检测真峰值,音频流将被升采样到192 kHz。 使用-ar选项或aresample滤镜显式设置输出采样率。

滤镜接受以下选项:

I, i

设置综合响度目标。 范围为-70.0到-5.0。默认值为-24.0。

LRA, lra

设置响度范围目标。 范围为1.0到50.0。默认值为7.0。

TP, tp

设置最大真峰值。 范围为-9.0到+0.0。默认值为-2.0。

measured_I, measured_i

输入文件的测量综合响度。 范围为-99.0到+0.0。

measured_LRA, measured_lra

输入文件的测量响度范围。 范围为0.0到99.0。

measured_TP, measured_tp

输入文件的测量真峰值。 范围为-99.0到+99.0。

measured_thresh

输入文件的测量阈值。 范围为-99.0到+0.0。

offset

设置偏移增益。增益在真峰值限制器之前应用。 范围为-99.0到+99.0。默认值为+0.0。

linear

通过线性缩放源音频进行标准化。measured_I, measured_LRA, measured_TP, 和measured_thresh必须全部被指定。目标响度范围不应低于源响度范围,综合响度的变化不应导致真峰值超出目标真峰值。如果这些条件中有任何未满足,则标准化模式将回退到动态。 选项为truefalse。默认值为true.

dual_mono

将单声道输入文件视为“双声道”。如果单声道文件在立体声音响系统上播放,其EBU R128测量值将在感知上不正确。 如果设置为true,此选项将对此效果进行补偿。 多声道输入文件不受此选项影响。 选项为true或false。默认值为false。

print_format

设置统计信息的打印格式。选项为summary、json或none。 默认值为none。

36.98 lowpass

应用一个3dB点频率的低通滤波器。 滤波器可以是单极或双极(默认)。 滤波器的滚降为每极每倍频程6dB(每极每十倍频程20dB)。

滤波器接受以下选项:

frequency, f

以Hz设置频率。默认值为500。

poles, p

设置极数。默认值为2。

width_type, t

设置指定滤波器带宽的方法。

h

Hz

q

Q因子

o

倍频

s

斜率

k

kHz

width, w

以width_type单位指定滤波器带宽。 仅适用于双极滤波器。 默认值为0.707q,提供Butterworth响应。

mix, m

在输出中使用过滤信号的程度。默认值为1。 范围为0到1之间。

channels, c

指定要过滤的通道,默认情况下会过滤所有可用通道。

normalize, n

标准化双二阶滤波器系数,默认情况下禁用。 启用后将在直流的幅值响应标准化为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.98.1 示例

  • 仅低通过滤 LFE 通道,如果 LFE 不存在则不执行任何操作:
    lowpass=c=LFE
    

36.98.2 命令

此滤镜支持以下命令:

frequency, f

更改低通滤波频率。 命令的语法为:"频率"

width_type, t

更改低通滤波宽度类型。 命令的语法为:"宽度类型"

width, w

更改低通滤波宽度。 命令的语法为:"宽度"

mix, m

更改低通滤波混合。 命令的语法为:"混合"

36.99 lv2

加载一个LV2(LADSPA版本2)插件。

为了启用此滤镜的编译,您需要将FFmpeg配置为--enable-lv2.

plugin, p

指定插件URI。您可能需要对":"进行转义。

controls, c

设置由"|"分隔的控制列表,这些控制可以是零个或多个浮点值,用以决定插件的行为(例如延迟、阈值或增益)。 如果controls被设置为help,则打印所有可用控制及其有效范围。

sample_rate, s

指定采样率,默认为44100。仅在插件没有输入时使用。

nb_samples, n

设置每个输出帧的每个通道的样本数,默认值为1024。仅在插件没有输入时使用。

duration, d

设置源音频的最短持续时间。参阅(ffmpeg-utils)在ffmpeg-utils (1)手册中的时间持续时间部分了解接受的语法。 注意,结果持续时间可能会大于指定持续时间,因为生成的音频始终在完整帧的末尾截断。 如果未指定,或者表达的持续时间为负,则音频将持续生成。 仅在插件没有输入时使用。

36.99.1 示例

  • 应用Calf的低音增强插件:
    lv2=p=http\\\\://calf.sourceforge.net/plugins/BassEnhancer:c=amount=2
    
  • 应用Calf的黑胶插件:
    lv2=p=http\\\\://calf.sourceforge.net/plugins/Vinyl:c=drone=0.2|aging=0.5
    
  • 应用ArtyFX的比特粉碎插件:
    lv2=p=http\\\\://www.openavproductions.com/artyfx#bitta:c=crush=0.3
    

36.99.2 命令

该滤镜支持插件导出的所有选项作为命令。

36.100 mcompand

多波段压缩或扩展音频动态范围。

输入音频通过4阶Linkwitz-Riley IIR分成多个频段。 这类似于扬声器的分频器,并在没有压扩操作时产生平坦的频率响应。

它接受以下参数:

args

此选项语法为: attack,decay,[attack,decay..] 软膝点 分频频率 [延迟 [初始音量 [增益]]] | attack,decay ... 各项的解释请参考compand滤镜文档。

36.101 pan

用特定增益水平混合通道。该滤镜接受输出 通道布局,然后是一些通道定义。

这个滤镜也可以用来有效地重新映射音频流的通道。

滤镜接受如下形式的参数: "l|输出定义|输出定义|..."

l

输出通道布局或通道数量

outdef

输出通道规范,形式为: "输出名称=[增益*]输入名称[(+-)[增益*]输入名称...]"

out_name

定义输出通道,可以是通道名称(FL、FR 等)或通道编号(c0、c1 等)。

gain

通道的乘法系数,设置为1时音量保持不变。

in_name

要使用的输入通道,详情请参阅 out_name;不能同时混合命名和编号的输入通道。

如果通道规范中的‘=’替换为‘<’,则此规范的增益将重新归一化,使总量为1,从而避免了剪辑噪声。

36.101.1 混音示例

例如,如果您想从立体声向单声道下混,但为左声道设定更大的权重:

pan=1c|c0=0.9*c0+0.1*c1

一种自定义的下混到立体声的方式,能够自动处理3、4、5和7声道的环绕声:

pan=stereo| FL < FL + 0.5*FC + 0.6*BL + 0.6*SL | FR < FR + 0.5*FC + 0.6*BR + 0.6*SR

请注意ffmpeg集成了一个默认的下混(和上混)系统,除非您有非常具体的需求,否则应优先使用该系统(参见“-ac”选项)。

36.101.2 通道重新映射示例

通道重新映射仅在以下情况下有效:

  • 增益系数为零或一,
  • 每个输出通道只有一个输入,

如果所有这些条件都满足,过滤器会通知用户(“检测到纯通道映射”),并使用优化的无损方法进行重新映射。

例如,如果您有一个5.1音源,并希望通过丢弃多余的通道获得立体声音频流:

pan="stereo| c0=FL | c1=FR"

对于相同的来源,您也可以交换前左和前右通道,同时保持输入通道布局:

pan="5.1| c0=c1 | c1=c0 | c2=c2 | c3=c3 | c4=c4 | c5=c5"

如果输入是立体声音频流,您可以静音左声道(并且仍然保持立体声通道布局):

pan="stereo|c1=c1"

仍以立体声音频流为输入,您可以将右声道复制到前左和右通道:

pan="stereo| c0=FR | c1=FR"

36.102 重播增益

重播增益扫描过滤器。该过滤器以音频流作为输入并输出不变音频。 在过滤结束时显示track_gaintrack_peak.

该过滤器接受以下导出的只读选项:

track_gain

流结束时导出的曲目增益,以分贝为单位。

track_peak

流结束时导出的曲目峰值。

36.103 重采样

转换音频采样格式、采样率和通道布局。不应直接使用。

36.104 橡皮带

通过 librubberband 应用时间拉伸和音高变化。

要启用此过滤器的编译,您需要用以下方式配置 FFmpeg--enable-librubberband.

该过滤器接受以下选项:

tempo

设置节奏比例因子。

pitch

设置音高比例因子。

transients

设置瞬态检测器。 可能的值有:

清脆
混合
平滑
detector

设置检测器。 可能的值有:

复合
打击乐
柔软
phase

设置相位。 可能的值有:

层流
独立
window

设置处理窗口尺寸。 可能的值有:

标准
smoothing

设置平滑选项。 可能的值有:

关闭
打开
formant

启用移调时的共振峰保留。 可能的值有:

已移调
已保留
pitchq

设置音高质量。 可能的值有:

质量
速度
一致性
channels

设置通道。 可能的值有:

分别
一起

36.104.1 命令

此过滤器支持以下命令:

tempo

更改过滤器节奏比例因子。 命令语法为:"节奏"

pitch

更改过滤器音高比例因子。 命令语法为:"音高"

36.105 旁链压缩

此过滤器的作用类似于普通的压缩器,但具有使用第二个输入信号进行压缩的能力。 它需要两个输入流,并输出一个流。 第一输入流根据第二流的信号进行处理。 过滤后的信号之后可以通过其它过滤器进一步处理。参见声相合并过滤器。

该过滤器接受以下选项:

level_in

设置输入增益。默认值为1。范围在0.015625到64之间。

mode

设置压缩机操作模式。可以是upwarddownward。 默认值是downward.

threshold

如果第二个流的信号高于此级别,它将影响第一流的增益减少。 默认为0.125。范围在0.00097563到1之间。

ratio

设置信号减少的比率。1:2表示如果级别高于阈值4分贝,则减少后仅高于2分贝。 默认值为2。范围在1到20之间。

attack

信号在高于阈值后开始减少增益所需的毫秒数。 默认值为20。范围在0.01到2000之间。

release

信号低于阈值后再次减少增益减少所需的毫秒数。 默认值为250。范围在0.01到9000之间。

makeup

设置信号处理后将被如何放大的数量。 默认值为1,范围为1到64。

knee

在阈值周围创建柔和的膝形,以更柔和地进入增益减少。 默认值是2.82843,范围在1到8之间。

link

选择是否average使用旁链流全部通道的水平maximum或旁链流较响的通道average.

detection

是否使用精确信号peak或在使用rms情况下使用均方根信号。 默认值为rms,其主要更为平滑。

level_sc

设置旁链增益。 默认值为1,范围在0.015625到64之间。

mix

在输出中使用压缩信号的程度。 默认值为1,范围在0到1之间。

36.105.1 命令

此过滤器支持上述所有选项作为命令.

36.105.2 示例

  • 完整的 ffmpeg 示例,使用2个音频输入,第一个输入将根据第二个输入的信号被压缩,随后合并压缩后的信号和第二个输入:
    ffmpeg -i main.flac -i sidechain.flac -filter_complex "[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
    

36.106 旁链门

旁链门的功能类似于普通(宽带)门,但具有在发送到增益减少阶段前过滤检测到的信号的能力。 通常,门使用整个范围的信号来检测是否超过阈值。 例如:如果您在旁链信号中去掉所有低频,仅当没有足够的高频时,门才会降低音轨的音量。使用此技术,您可以减少自然鼓的共鸣或者从深度失真的吉他的静音音符中移除“轰鸣”。 它需要两个输入流,并输出一个流。 第一输入流将根据第二输入流信号进行处理。

该过滤器接受以下选项:

level_in

设置过滤之前的输入级别。 默认值是1。允许范围是0.015625到64。

mode

设置操作模式。可以是upward或者downward。 默认值是downward。如果设置为upward模式,信号的较高部分会被增强,在向上方向扩展动态范围。 否则,在downward的情况下,信号的较低部分将被削减。

range

设置当信号低于阈值时的增益削减水平。 默认值是0.06125。允许范围是0到1。 设为0可禁用削减,此时过滤器将表现为扩展器。

threshold

如果信号超过此水平,则增益削减将被释放。 默认值是0.125。允许范围是0到1。

ratio

设置信号减弱的比例。 默认值是2。允许范围是1到9000。

attack

信号超过阈值的时间(毫秒),在此之前增益削减会停止。 默认值是20毫秒。允许范围是0.01到9000。

release

信号低于阈值的时间(毫秒),在此之后变减增益会再次增加。 默认值是250毫秒。允许范围是0.01到9000。

makeup

设置处理后信号的放大倍率。 默认值是1。允许范围是1到64。

knee

在阈值周围平滑曲线以更柔和地进入增益削减。 默认值是2.828427125。允许范围是1到8。

detection

选择是使用精确信号进行检测还是类似于RMS的信号。 默认值是rms。可以是peak或rms。

link

选择是由所有通道的平均电平还是较大通道影响减幅。 默认值是average。可以是average或maximum。

level_sc

设置侧链增益。默认值是1。范围是0.015625到64。

36.106.1 命令

该过滤器支持上述所有选项作为命令.

36.107 静音检测

检测音频流中的静音。

当检测到输入音频体积小于或等于噪声容忍值的持续时间 大于或等于最小检测噪声持续时间时,该过滤器会记录一条消息。

打印的时间和持续时间以秒为单位。lavfi.silence_startlavfi.silence_start.X元数据键会在第一个时间戳等于或超出检测持续 时间的帧上设置,并包含静音开始的第一个帧的时间戳。

The lavfi.silence_durationlavfi.silence_duration.Xlavfi.silence_endlavfi.silence_end.X元数据键将在静音后的第一帧上设置。如果mono被启用,并且每个通道被分别评估,则会使用.X后缀的键,并且X对应通道编号。

该过滤器接受以下选项:

noise, n

设置噪声容忍值。可以以dB为单位指定(如果在指定值后附加“dB”)或以幅度比指定。 默认值是-60dB,或0.001。

duration, d

设置通知所需的静音持续时间(默认是2秒)。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解接受的语法。

mono, m

单独处理每个通道,而不是组合处理。默认情况下禁用。

36.107.1 示例

  • 检测具有-50dB噪声容忍值的5秒静音:
    silencedetect=n=-50dB:d=5
    
  • 完整示例,使用ffmpeg以0.0001噪声容忍值检测静音silence.mp3:
    ffmpeg -i silence.mp3 -af silencedetect=noise=0.0001 -f null -
    

36.108 静音移除

从音频的开始、中间或结束移除静音。

该过滤器接受以下选项:

start_periods

此值用于指示是否应从音频开始修剪静音。值为0表示不应从开始修剪静音。 指定非零值时,它会修剪音频直到检测到非静音。通常,当从音频开头修剪静音时,start_periods将是1但可以增加到更高的值,以修剪到指定的非静音段数。 默认值是0.

start_duration

指定检测到非静音的时间量,此后停止修剪音频。 通过增加持续时间,可以将短暂的噪音视为静音并修剪掉。 默认值是0.

start_threshold

此值指示应将哪个采样值视为静音。 对于数字音频,值为0可能适用,但对于从模拟中录制的音频,可能需要增加值以考虑背景噪声。 可以以dB为单位指定(如果在指定值后附加“dB”)或以幅度比指定。 默认值是0.

start_silence

指定在修剪后保留在开头的最大静音持续时间。 默认值是0,相当于修剪掉所有检测为静音的样本。

start_mode

指定在多通道音频的开始检测静音结束的模式。 可以是anyall。 默认值是any。 当值为any时,任何通道中的任何样本被检测为非静音时 将触发音频流开头的静音修剪结束。 当值为all时,只有当每个通道的每个样本都被检测为非静音时 才会触发音频流开头的静音修剪结束,使用有限。

stop_periods

设置从音频结尾修剪静音的计数。 指定正值时,系统将在检测到指定的静音段之后修剪音频。 要从文件中间移除静音,请指定stop_periods为负值。此值随后会被视为正值,并用于指示效果应按stop_periods指定重新开始处理, 适合用来移除音频中间的静音段。 默认值是0.

stop_duration

指定静音必须存在的时间量,之后音频不再被复制。 通过指定更高的持续时间,可以在音频中保留所需的静音。 默认值是0.

stop_threshold

这与start_threshold功能相同,但用于从音频末尾修剪静音。 可以以dB为单位指定(如果在指定值后附加“dB”)或以幅度比指定。 默认值是0.

stop_silence

指定在修剪后保留在结尾的最大静音持续时间。 默认值是0,相当于修剪掉所有检测为静音的样本。

stop_mode

指定在多通道音频开始后,检测静音开始的模式。 可以是anyall。 默认值是all。 当值为any时,任何通道中的任何样本被检测为静音时 将触发音频流开始后的静音修剪开始,使用有限。 当值为all时,只有当每个通道的每个样本都被检测为静音时 才会触发音频流开始后的静音修剪开始。

detection

设置如何检测静音。

avg

移动窗口中样本绝对值的平均值。

rms

移动窗口中样本绝对值的平方根均值。

peak

移动窗口中样本绝对值的最大值。

median

移动窗口中样本绝对值的中位数。

ptp

移动窗口中样本的最大峰值和最小峰值差值的绝对值。

dev

移动窗口中样本值的标准差。

默认值是rms.

window

设置用于计算窗口大小以检测静音的持续时间(秒数)。 使用0将有效地禁用窗口,并只使用每个通道的单个样本进行静音检测。 在这种情况下,可能还需要将start_silence和/或stop_silence设置为非零值,并且将start_duration和/或stop_duration设置为非零值。 默认值是0.02. 允许的范围是010.

timestamp

设置每个音频帧输出时间戳的处理模式。

write

完整时间戳重写,仅保留第一个输出帧的开始时间。

copy

非丢弃帧的时间戳与输入音频帧的时间戳保持一致。

默认值为write.

36.108.1 示例

  • 以下示例显示如何使用此过滤器启动录音,该录音不包含通常发生在按下录音按钮和开始表演之间的延迟:
    silenceremove=start_periods=1:start_duration=5:start_threshold=0.02
    
  • 从开始到结束修剪所有遇到的静音,其中音频中的静音超过1秒:
    silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-90dB
    
  • 从开始到结束修剪所有数字静音样本,使用峰值检测,其中数字静音样本超过0个,并且流中的所有通道在相同位置检测到数字静音:
    silenceremove=window=0:detection=peak:stop_mode=all:start_mode=all:stop_periods=-1:stop_threshold=0
    
  • 从开始到结束修剪每第二个遇到的静音段,其中每段静音超过1秒:
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB
    
  • 类似于上述,但保留每个修剪段的最长0.5秒静音:
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5
    
  • 类似于上述,但保留音频开头的最长1.5秒静音:
    silenceremove=stop_periods=-2:stop_duration=1:stop_threshold=-90dB:stop_silence=0.5:start_periods=1:start_duration=1:start_silence=1.5:stop_threshold=-90dB
    

36.108.2 命令

此过滤器支持上述一些选项作为命令.

36.109 sofalizer

SOFAlizer使用头相关传输函数(HRTFs)创建虚拟扬声器,围绕用户以实现通过耳机进行双耳聆听(支持最多9声道的音频格式)。 HRTFs储存在SOFA文件中(参见http://www.sofacoustics.org/获取数据库)。 SOFAlizer由奥地利科学院声学研究所(ARI)开发。

要启用此过滤器的编译,需要使用以下配置构建FFmpeg:--enable-libmysofa.

该过滤器接受以下选项:

sofa

设置用于渲染的SOFA文件。

gain

设置应用于音频的增益。值以分贝表示。默认值为0。

rotation

设置虚拟扬声器的旋转角度(单位:度)。默认值为0。

elevation

设置虚拟扬声器的仰角(单位:度)。默认值为0。

radius

设置扬声器与听者之间的距离(单位:米),使用近场HRTFs。默认值为1。

type

设置处理类型。可以为timefreq. time在时间域处理音频,速度较慢。freq在频率域处理音频,速度较快。 默认值为freq.

speakers

设置虚拟扬声器的自定义位置。该选项语法为: <CH> <AZIM> <ELEV>[|<CH> <AZIM> <ELEV>|...]。 每个虚拟扬声器由简短的频道名称、方位角和仰角(单位:度)描述。 每个虚拟扬声器描述由‘|’分隔。 例如,覆盖前左和前右频道的自定义位置使用: ’speakers=FL 45 15|FR 345 15’。 对于无法识别的频道名称的描述将被忽略。

lfegain

设置LFE通道的自定义增益。值以分贝表示。默认值为0。

framesize

设置自定义帧大小,以样本数量表示。默认值为1024。 允许范围为1024到96000。仅在选项‘type’ 设置为freq.

normalize

所有IR在导入SOFA文件时是否应该归一化。 默认启用。

interpolate

如果确切位置不匹配,是否应将最近的IR与邻近的IR进行插值。 默认禁用。

minphase

加载SOFA文件时是否对所有IR进行最小相位处理。 默认禁用。

anglestep

设置邻近搜索角度步长。 仅在选项interpolate启用时使用。

radstep

设置邻近搜索半径步长。 仅在选项interpolate启用时使用。

36.109.1 示例

  • 使用ClubFritz6 SOFA文件:
    sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=1
    
  • 使用ClubFritz12 SOFA文件以及较大的半径和小的旋转:
    sofalizer=sofa=/path/to/ClubFritz12.sofa:type=freq:radius=2:rotation=5
    
  • 类似于上述,但使用前左、前右、后左和后右的自定义扬声器位置,同时设置自定义增益:
    "sofalizer=sofa=/path/to/ClubFritz6.sofa:type=freq:radius=2:speakers=FL 45|FR 315|BL 135|BR 225:gain=28"
    

36.110 speechnorm

语音规范化。

此过滤器根据阈值值扩展或压缩音频样本的每个半周期 (所有值都高于或低于零的局部样本集,以及两个最近零交点之间的样本),使音频在以下选项控制的条件下达到目标峰值。

过滤器接受以下选项:

peak, p

设置扩展目标峰值。这指定了规范化音频输入的最高允许绝对振幅。 默认值为0.95。允许范围为0.0到1.0。

expansion, e

设置最大扩展系数。允许范围为1.0到50.0。默认值为2.0。 此选项控制局部半周期样本的最大扩展。最大扩展为 使局部峰值达到目标峰值,但从不超过目标峰值,并使新旧峰值比从不超过此选项值。

compression, c

设置最大压缩系数。允许范围为1.0到50.0。默认值为2.0。 此选项控制局部半周期样本的最大压缩。 仅当threshold选项值大于0.0时使用,在这种情况下 当局部峰值小于或等于由threshold设置的值时, 该峰值半周期的所有样本将会根据当前压缩系数进行压缩。

threshold, t

设置阈值值。默认值为0.0。允许范围为0.0到1.0。 此选项指定哪些样本半周期将被压缩,哪些将被扩展。 局部峰值小于或等于此选项值的半周期样本将根据当前压缩系数被压缩; 否则,超出阈值的半周期将根据扩展系数扩展至目标峰值,但决不能超过目标值。

raise, r

设置每个样本半周期的扩展增长量。默认值为0.001。 允许范围为0.0到1.0。此选项控制扩展系数每个新半周期的增长速度,直到达到expansion值。 设置该选项过高可能会导致失真。

fall, f

设置每个样本半周期的压缩增长量。默认值为0.001。 允许范围为0.0到1.0。此选项控制压缩系数每个新半周期的增长速度,直到达到compression值。

channels, h

指定要过滤的频道,默认情况下过滤所有可用频道。

invert, i

启用反向过滤,默认情况下禁用此功能。这将反转threshold选项的解读。 启用时,任意半周期样本的局部峰值小于或等于threshold选项的值时将被扩展;否则将被压缩。

link, l

在计算每个过滤频道样本应用的增益时链接频道,默认情况下禁用。 禁用时每个过滤频道的增益计算互不相关,否则启用此选项时会使用每个过滤频道可能的最小增益。

rms, m

设置扩展目标RMS值。这指定了规范化音频输入的最高允许RMS值。默认值为0.0,因此禁用。 允许范围为0.0到1.0。

36.110.1 命令

此过滤器支持所有上述选项作为命令.

36.110.2 示例

  • 弱且缓慢的放大:
    speechnorm=e=3:r=0.00001:l=1
    
  • 中等且缓慢的放大:
    speechnorm=e=6.25:r=0.00001:l=1
    
  • 强且快速的放大:
    speechnorm=e=12.5:r=0.0001:l=1
    
  • 非常强且快速的放大:
    speechnorm=e=25:r=0.0001:l=1
    
  • 极端且快速的放大:
    speechnorm=e=50:r=0.0001:l=1
    

36.111 stereotools

此过滤器有一些实用工具,可用于处理立体声信号,用于将M/S立体录音转换为L/R信号 并控制参数,或扩展母带的立体声图像。

过滤器接受以下选项:

level_in

设置过滤之前两个频道的输入电平。默认值为1。 允许范围为0.015625到64。

level_out

设置过滤之后两个频道的输出电平。默认值为1。 允许范围为0.015625到64。

balance_in

设置两个频道之间的输入平衡。默认值为0。 允许范围为-1到1。

balance_out

设置两个频道之间的输出平衡。默认值为0。 允许范围为-1到1。

softclip

启用软剪裁。导致模拟失真而不是尖锐的数字0分贝剪裁。 默认情况下禁用。

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.111.1 命令

此过滤器支持所有以上选项作为命令.

36.111.2 示例

  • 应用像卡拉OK效果:
    stereotools=mlev=0.015625
    
  • 将M/S信号转换为L/R:
    "stereotools=mode=ms>lr"
    

36.112 立体声扩宽

此过滤器通过抑制两声道共有的信号并延迟左信号至右声道和 vice versa,增强立体声效果,从而扩宽立体声效果。

该过滤器接受以下选项:

delay

左信号延迟到右声道和 vice versa 的时间(以毫秒为单位)。默认值为20毫秒。

feedback

延迟信号到右声道和 vice versa 的增益量。提供的效果是左信号延迟到右输出,和 vice versa,产生扩宽效果。默认值为0.3。

crossfeed

左信号到右声道的带反相的交叉馈送。这有助于抑制单声道。如果值是1,它将取消两声道共有的所有信号。默认值为0.3。

drymix

设置原始声道的输入信号电平。默认值为0.8。

36.112.1 命令

此过滤器支持所有以上选项,但不包括delay作为命令.

36.113 超级均衡器

应用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.114 环绕

应用音频环绕上混滤波器。

此过滤器允许从音频流生成多声道输出。

该过滤器接受以下选项:

chl_out

设置输出声道布局。默认值是5.1.

参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分以获取所需的语法。

chl_in

设置输入声道布局。默认值是立体声.

参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的声道布局部分以获取所需的语法。

level_in

设置输入音量电平。默认值是1.

level_out

设置输出音量电平。默认值是1.

lfe

如果输出声道布局具有LFE声道,则启用LFE声道输出。默认情况下启用。

lfe_low

设置LFE低截止频率。默认值是128Hz。

lfe_high

设置LFE高截止频率。默认值是256Hz。

lfe_mode

设置LFE模式,可以是添加。默认值是添加。 在添加模式下,LFE声道从输入音频创建并添加到输出。 在模式下,LFE声道从输入音频创建并添加到输出,同时所有非LFE输出声道与输出LFE声道相减。

smooth

设置时间平滑强度,用于在在时间上逐步改变立体声转换因子。允许范围是0.01.0。 在focus选项值大于0.0时,可改善输出质量。 默认值是0.0。只有在此范围且不靠边的值是有效的。

angle

设置立体声环绕转换的角度,允许范围是0360。 默认值是90.

focus

设置立体声环绕转换的焦点,允许范围是-11. 默认值是0.

fc_in

设置前中输入音量。默认值为1.

fc_out

设置前中输出音量。默认值为1.

fl_in

设置前左输入音量。默认值为1.

fl_out

设置前左输出音量。默认值为1.

fr_in

设置前右输入音量。默认值为1.

fr_out

设置前右输出音量。默认值为1.

sl_in

设置侧左输入音量。默认值为1.

sl_out

设置侧左输出音量。默认值为1.

sr_in

设置侧右输入音量。默认值为1.

sr_out

设置侧右输出音量。默认值为1.

bl_in

设置后左输入音量。默认值为1.

bl_out

设置后左输出音量。默认值为1.

br_in

设置后右输入音量。默认值为1.

br_out

设置后右输出音量。默认值为1.

bc_in

设置后中输入音量。默认值为1.

bc_out

设置后中输出音量。默认值为1.

lfe_in

设置LFE输入音量。默认值为1.

lfe_out

设置LFE输出音量。默认值为1.

allx

设置所有通道在X轴上立体声图像的扩展使用。 允许范围是从-115. 默认情况下,此值为负-1,因此未使用。

ally

设置所有通道在Y轴上立体声图像的扩展使用。 允许范围是从-115. 默认情况下,此值为负-1,因此未使用。

fcx, flx, frx, blx, brx, slx, srx, bcx

设置每个通道在X轴上立体声图像的扩展使用。 允许范围是从0.0615. 默认值是0.5.

fcy, fly, fry, bly, bry, sly, sry, bcy

设置每个通道在Y轴上立体声图像的扩展使用。 允许范围是从0.0615. 默认值是0.5.

win_size

设置窗口大小。允许范围是从102465536. 默认大小是4096.

win_func

设置窗口函数。

它接受以下值:

rect
bartlett
hann, hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是hann.

overlap

设置窗口重叠。如果设置为1,将选择为所选窗口函数推荐的重叠。默认值为0.5.

36.115 倾斜搁架

通过一个双极搁架滤波器来提升或切割音频中的低频并切割或提升高频,类似于标准高保真的音调控制。 这也被称为搁架均衡(EQ)。

滤波器接受以下选项:

gain, g

给出在0 Hz处的增益。它的实用范围大约是-20(大幅削减)到+20(大幅提升)。 使用正增益时要小心剪切。

frequency, f

设置滤波器的中心频率,因此可以用来扩展或减少要提升或削减的频率范围。 默认值是3000Hz。

width_type, t

设置指定滤波器带宽的方法。

h

Hz

q

品质因数

o

倍频程

s

斜率

k

kHz

width, w

决定滤波器的搁架过渡有多陡。

poles, p

设置极点数量。默认值是2。

mix, m

在输出中使用滤波信号的量。默认值是1。 范围在0到1之间。

channels, c

指定要滤波的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波系数,默认情况下禁用。 启用后将归一化直流响应幅值到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 命令

此滤波器支持以下选项作为命令.

36.116 高音,高搁架

通过一个双极搁架滤波器来提升或削减音频中的高音(高频),类似于 标准高保真的音调控制。这也被称为搁架均衡(EQ)。

滤波器接受以下选项:

gain, g

给出在约22 kHz和奈奎斯特频率中较低者的增益。它的实用范围大约是-20(大幅削减)到+20(大幅提升)。使用正增益时要小心剪切。

frequency, f

设置滤波器的中心频率,因此可以用来扩展或减少要提升或削减的频率范围。 默认值是3000Hz。

width_type, t

设置指定滤波器带宽的方法。

h

Hz

q

品质因数

o

倍频程

s

斜率

k

kHz

width, w

决定滤波器的搁架过渡有多陡。

poles, p

设置极点数量。默认值是2。

mix, m

在输出中使用滤波信号的量。默认值是1。 范围在0到1之间。

channels, c

指定要滤波的通道,默认情况下过滤所有可用通道。

normalize, n

归一化二阶滤波系数,默认情况下禁用。 启用后将归一化直流响应幅值到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.116.1 命令

此滤波器支持以下命令:

frequency, f

更改高音频率。 命令的语法是:"频率"

width_type, t

更改高音宽度类型。 命令语法为:"宽度类型"

width, w

更改高音宽度。 命令语法为:"宽度"

gain, g

更改高音增益。 命令语法为:"增益"

mix, m

更改高音混合。 命令语法为:"混合"

36.117 颤音

正弦幅度调制。

滤镜接受以下选项:

f

调制频率以赫兹为单位。次谐波范围内的调制频率 (20 Hz或更低)将产生颤音效果。 此滤镜也可用于作为环形调制器,通过指定 高于20 Hz的调制频率。 范围为0.1 - 20000.0。默认值为5.0 Hz。

d

调制深度,以百分比表示。范围是0.0 - 1.0。 默认值为0.5。

36.118 振动效果

正弦相位调制。

滤镜接受以下选项:

f

调制频率以赫兹为单位。 范围为0.1 - 20000.0。默认值为5.0 Hz。

d

调制深度,以百分比表示。范围是0.0 - 1.0。 默认值为0.5。

36.119 虚拟低音

应用音频虚拟低音滤镜。

此滤镜接受立体声输入并生成带LFE(2.1)通道输出的立体声。 新生成的LFE通道从立体声通道中增强了虚拟低音。 此滤镜输出的前左和前右通道保持与立体声输入中的一致。

滤镜接受以下选项:

cutoff

设置虚拟低音截止频率。默认值为250 Hz。 允许范围为100到500 Hz。

strength

设置虚拟低音强度。允许范围为0.5到3。 默认值为3。

36.120 音量

调整输入音频音量。

它接受以下参数:

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

应用于选定的ReplayGain增益的预放大增益,以分贝为单位。

默认值为replaygain_preamp是0.0。

replaygain_noclip

通过限制应用的增益来防止失真。

默认值为replaygain_noclip是1。

eval

设置何时评估音量表达式。

它接受以下值:

once

仅在滤镜初始化期间或当发送‘volume’命令时评估表达式

frame

对每个输入帧评估表达式

默认值是‘once’.

音量表达式可以包含以下参数。

n

帧编号(从零开始)

nb_channels

通道数

nb_consumed_samples

滤镜处理的样本数量

nb_samples

当前帧中的样本数量

pos

文件中的原始帧位置;已弃用,请勿使用

pts

帧PTS

sample_rate

采样率

startpts

流开始时的PTS

startt

流开始时的时间

t

帧时间

tb

时间戳时间基

volume

最后设置的音量值

注意,当eval设置为‘once’时,仅采样率tb变量可用,所有其他变量将评估为NAN。

36.120.1 命令

此滤镜支持以下命令:

volume

修改音量表达式。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

36.120.2 示例

  • 将输入音频音量减半:
    volume=volume=0.5
    volume=volume=1/2
    volume=volume=-6.0206dB
    

    在上述所有示例中,可以省略volume的命名键,例如如下:

    volume=0.5
    
  • 使用定点精度将输入音频功率增加6分贝:
    volume=volume=6dB:precision=fixed
    
  • 在经过10秒时间后,音量淡化,消失周期为5秒:
    volume='if(lt(t,10),1,max(1-(t-10)/5,0))':eval=frame
    

36.121 音量检测

检测输入视频的音量。

滤镜没有参数。它仅支持16位带符号整数样本, 因此在需要时会执行输入转换。当输入流的最后 一帧被读取时,会打印有关音量的统计信息到日志中。

特别是它将显示平均音量(均方根)、最大 音量(逐样本)、以及记录的音量值的直方图的开始部分 (从最大值到累计样本的1/1000)。

所有音量以相对于最大PCM值的分贝表示。

36.121.1 示例

以下是输出的片段:

[Parsed_volumedetect_0  0xa23120] mean_volume: -27 dB
[Parsed_volumedetect_0  0xa23120] max_volume: -4 dB
[Parsed_volumedetect_0  0xa23120] histogram_4db: 6
[Parsed_volumedetect_0  0xa23120] histogram_5db: 62
[Parsed_volumedetect_0  0xa23120] histogram_6db: 286
[Parsed_volumedetect_0  0xa23120] histogram_7db: 1042
[Parsed_volumedetect_0  0xa23120] histogram_8db: 2551
[Parsed_volumedetect_0  0xa23120] histogram_9db: 4609
[Parsed_volumedetect_0  0xa23120] histogram_10db: 8409

它意味着:

  • 均方能量大约是-27分贝,即10^-2.7。
  • 最大的样本为-4分贝,更准确地说,在-4分贝和-5分贝之间。
  • 有6个样本在 -4 dB处,62个样本在 -5 dB处,286个样本在 -6 dB处,等等。

换句话说,将音量提高 +4 dB 不会导致任何剪辑,提高到 +5 dB 则会导致6个样本剪辑,等等。

37个音频来源

以下是当前可用音频来源的描述。

37.1 abuffer

缓冲音频帧,并将其提供给滤镜链使用。

此来源主要用于编程用途,特别是通过接口定义于libavfilter/buffersrc.h.

它接受以下参数:

time_base

用于提交帧时间戳的时间基准。它必须是一个浮点数或分子/分母形式。

sample_rate

传入音频缓冲区的采样率。

sample_fmt

传入音频缓冲区的采样格式。 可以是采样格式名称或其对应的来自枚举 AVSampleFormat 的整数表示。libavutil/samplefmt.h

channel_layout

传入音频缓冲区的声道布局。 可以是来自 channel_layout_map 的声道布局名称,也可以是其对应的整数表示,来源于宏 AV_CH_LAYOUT_*。libavutil/channel_layout.c or its corresponding integer representation from the AV_CH_LAYOUT_* macros in libavutil/channel_layout.h

channels

传入音频缓冲区的声道数量。 如果同时指定了声道数声道布局,那么它们必须一致。

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选项,所选的声道布局取决于提供的表达式数量。否则,最后指定的表达式会应用于剩余的输出声道。

channel_layout, c

设置声道布局。指定布局中的声道数量必须与指定的表达式数量相等。

duration, d

设置源音频的最小持续时间。参见(ffmpeg-utils)的ffmpeg-utils(1)手册的时间持续时间部分以了解接受的语法。 注意,生成的持续时间可能会大于指定的持续时间,因为生成的音频总是在完整帧结束时被截断。

如果未指定,或表达的持续时间为负值,则认为音频应永久生成。

nb_samples, n

设置每帧输出的每频道样本数,默认值为1024。

sample_rate, s

指定采样率,默认值为44100。

表达式中每个表达式都可以包含以下常量:

n

所评估样本的编号,从0开始

t

所评估样本的时间,以秒为单位,从0开始

s

采样率

37.2.1 示例

  • 生成静音:
    aevalsrc=0
    
  • 生成一个频率为440 Hz的正弦信号,采样率设置为8000 Hz:
    aevalsrc="sin(440*2*PI*t):s=8000"
    
  • 生成两个声道的信号,显式指定声道布局(前置中置+后置中置):
    aevalsrc="sin(420*2*PI*t)|cos(430*2*PI*t):c=FC|BC"
    
  • 生成白噪声:
    aevalsrc="-2+random(0)"
    
  • 生成一个幅度调制信号:
    aevalsrc="sin(10*2*PI*t)*sin(880*2*PI*t)"
    
  • 生成以360 Hz为载波、频率为2.5 Hz的双耳节拍:
    aevalsrc="0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)"
    

37.3 afdelaysrc

生成分数延迟FIR系数。

生成的流可以与afir滤镜一起,用于音频信号过滤。

滤镜接受以下选项:

delay, d

设置分数延迟。默认值为0。

sample_rate, r

设置采样率,默认值44100。

nb_samples, n

设置每帧样本数。默认值为1024。

taps, t

设置输出音频流中的滤镜系数数量。 默认值为0。

channel_layout, c

指定声道布局,可以是表示声道布局的字符串。声道布局的默认值为“立体声”。

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

设置由frequency定义的每个频率点的幅度值。 值的数量必须与频率点数量相同。 值用空格分隔。

phase, p

设置由frequency定义的每个频率点的相位值。 值的数量必须与频率点数量相同。 值用空格分隔。

sample_rate, r

设置采样率,默认值为44100。

nb_samples, n

设置每帧的样本数。默认值为1024。

win_func, w

设置窗口函数。默认值为blackman。

37.6 anullsrc

空音频来源,返回未处理的音频帧。它主要用于模板以及分析/调试工具,或者作为忽略输入数据的滤镜(例如sox synth滤镜)的来源。

此来源接受以下选项:

channel_layout, cl

指定声道布局,可以是整数或字符串,表示声道布局。默认值为channel_layout是 "stereo"。

查看libavutil/channel_layout.c中的 channel_layout_map 定义以获取字符串和声道布局值之间的映射。

sample_rate, r

指定采样率,默认值为 44100。

nb_samples, n

设置每帧请求的样本数。

duration, d

设置源音频的时长。请参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的时间持续时间部分以了解可接受的语法。

如果未指定,或者表示的持续时间为负数,则假定音频会一直生成。

37.6.1 示例

  • 将采样率设置为 48000 Hz,将声道布局设置为 AV_CH_LAYOUT_MONO。
    anullsrc=r=48000:cl=4
    
  • 使用更明显的语法执行相同的操作:
    anullsrc=r=48000:cl=mono
    

所有参数都需要显式定义。

37.7 flite

使用 libflite 库合成语音。

要启用此过滤器的编译,您需要使用以下配置 FFmpeg--enable-libflite.

请注意,flite 库 2.0 之前的版本不是线程安全的。

该过滤器接受以下选项:

list_voices

如果设置为 1,则列出可用语音的名称并立即退出。默认值为 0。

nb_samples, n

设置每帧的最大样本数。默认值为 512。

textfile

设置包含要朗读文本的文件名。

text

设置要朗读的文本。

voice, v

设置语音合成使用的语音。默认值为kal。另请参阅list_voices选项。

37.7.1 示例

  • 从文件speech.txt中读取,并使用标准 flite 语音合成文本:
    flite=textfile=speech.txt
    
  • 读取指定的文本并选择slt语音:
    flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
    
  • 将文本输入到 ffmpeg:
    ffmpeg -f lavfi -i flite=text='So fare thee well, poor devil of a Sub-Sub, whose commentator I am':voice=slt
    
  • ffplay说出指定的文本,使用flitelavfi设备:
    ffplay -f lavfi flite=text='No more be grieved for which that thou hast done.'
    

有关 libflite 的更多信息,请查看:http://www.festvox.org/flite/

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

设置凯撒窗参数 beta。

att

设置停止带衰减值。默认值为 120dB,允许范围为 40 到 180 dB。

round

启用舍入,默认情况下禁用。

hptaps

设置高通滤波器的阶数。

lptaps

设置低通滤波器的阶数。

37.11 sine

生成一个振幅为 1/8 的正弦波音频信号。

音频信号是位精确的。

该过滤器接受以下选项:

frequency, f

设置载波频率。默认值为 440 Hz。

beep_factor, b

启用每秒一个频率为beep_factor倍载波频率的周期性蜂鸣音。默认值为 0,表示蜂鸣音被禁用。

sample_rate, r

指定采样率,默认值为 44100。

duration, d

指定生成音频流的持续时间。

samples_per_frame

设置每个输出帧的样本数。

表达式可以包含以下常量:

n

输出音频帧的(顺序)编号,从 0 开始。

pts

输出音频帧的 PTS(显示时间戳),以TB单位表示。

t

输出音频帧的 PTS,以秒为单位表示。

TB

输出音频帧的时间基。

默认值为1024.

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
    
  • 生成一个1 kHz正弦波1602,1601,1602,1601,1602NTSC 图案:
    sine=1000:samples_per_frame='st(0,mod(n,5)); 1602-not(not(eq(ld(0),1)+eq(ld(0),3)))'
    

38 音频接收端

以下是当前可用音频接收端的描述。

38.1 abuffersink

缓冲音频帧,并使它们在过滤器链末端可用。

此接收端主要用于编程用途,尤其是通过libavfilter/buffersink.h或选项系统中定义的接口。

它接受一个指向AVABufferSinkContext结构的指针,该结构定义了输入缓冲的格式,需作为opaque参数传递给avfilter_init_filter进行初始化。

38.2 anullsink

空音频接收端;对输入音频完全不做任何处理。它主要用作模板以及用于分析/调试工具。

39 视频滤镜

配置您的FFmpeg构建时,可以使用--disable-filters禁用任何现有的滤镜。 配置输出将显示您的构建中所包含的视频滤镜。

以下是当前可用视频滤镜的描述。

39.1 addroi

标记视频帧中的兴趣区域。

帧数据保持原样未改变,但添加了元数据,指示兴趣区域,该功能可以影响后续编码的行为。可以通过多次应用滤镜标记多个区域。

x

区域距离帧左边缘的像素数。

y

区域距离帧顶部边缘的像素数。

w

兴趣区域的宽度(像素)。

h

兴趣区域的高度(像素)。

参数x, y, wh是表达式,可能包含以下变量:

iw

输入帧的宽度。

ih

输入帧的高度。

qoffset

应用于指定区域的量化偏移。

此值必须为在-1到+1范围内的实数。值为零表示质量没有变化,负值表示要求更高的质量(较少量化),而正值表示要求更低的质量(较多量化)。

该范围经过校准,使得极值表示最大可能的偏移值——如果帧的其他部分以最差质量编码,偏移值-1表示该区域依然应当以最高质量编码。中间值则以某种编解码器相关的方式进行插值。

例如,在10位H.264中,量化参数(QP)从-12到51变化。一个典型的qoffset值-1/10表示此区域的编码QP大约比整个范围的十分之一好。所以,如果帧的大部分编码QP约为30,那么这个区域的QP大约为24(偏移值约为-1/10 * (51 - -12) = -6.3)。偏移值为-1表示,无论帧其他部分处理如何,该区域都应以最高质量编码,也即以QP为-12编码。

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

subtitles滤镜功能相同,只是它不需要libavcodec和libavformat即可工作。另一方面,它限定为ASS(高级字幕)文件。

此滤镜除了subtitles滤镜的通用选项外,还接受以下选项:

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

为第一平面、第二平面或第三平面设置sigma值。默认值为32767。 有效范围为0到32767。 此选项控制每个像素在定义的半径内的权重。 默认值表示每个像素具有相同权重。 设置此选项为0 effectively禁用过滤。

39.6.1 命令

此滤镜支持与选项相同的命令(除部分选项外)。s. 该命令接受与相应选项相同的语法。

39.7 平均模糊

应用平均模糊滤镜。

该滤镜可接受以下选项:

sizeX

设置水平半径大小。

planes

设置要过滤的平面。默认情况下,过滤所有平面。

sizeY

设置垂直半径大小,如果为零,则与sizeX相同。 默认值为0.

39.7.1 命令

该滤镜支持与选项相同的命令。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.8 背景键

将静态背景变为透明。

该滤镜可接受以下选项:

threshold

场景变化检测的阈值。

similarity

与背景的相似度百分比。

blend

为不相似的像素设置混合量。

39.8.1 命令

此滤镜支持上述所有选项作为命令.

39.9 边界框

计算输入帧亮度平面中非黑像素的边界框。

此滤镜计算包含所有亮度值大于允许最小值的像素的边界框。 描述边界框的参数将在滤镜日志中打印出来。

该滤镜可接受以下选项:

min_val

设置最小亮度值。默认值为16.

39.9.1 命令

此滤镜支持上述所有选项作为命令.

39.10 双边滤波

应用双边滤波器,进行空间平滑同时保留边缘。

该滤镜可接受以下选项:

sigmaS

设置高斯函数的标准差以计算空间权重。 允许范围为0到512。默认值为0.1。

sigmaR

设置高斯函数的标准差以计算范围权重。 允许范围为0到1。默认值为0.1。

planes

设置要过滤的平面。默认仅过滤第一个平面。

39.10.1 命令

此滤镜支持上述所有选项作为命令.

39.11 位平面噪声

显示并测量位平面噪声。

该滤镜可接受以下选项:

bitplane

设置要分析的平面。默认值为1.

filter

bitplane设置的值中过滤出噪声像素。 默认禁用。

39.12 黑检测

检测几乎完全黑的视频间隔。可以用于检测章节转换、广告或无效录制。

该滤镜将其检测分析输出到日志和帧元数据。 如果找到至少指定最小持续时间的黑色片段, 将在日志级别info中打印开始和结束时间戳以及持续时间的行。 此外,每帧会以日志级别debug打印一行,显示该帧检测到的黑色量。

该滤镜还在黑色片段的第一个帧添加元数据键lavfi.black_start,并在黑色片段结束后的第一个帧添加元数据键lavfi.black_end。 值为帧的时间戳。无论指定的最小持续时间是多少,都会添加此元数据。

该滤镜可接受以下选项:

black_min_duration, d

设置检测到的最小黑色持续时间(以秒为单位)。必须为非负浮点数。

默认值为2.0。

picture_black_ratio_th, pic_th

设置将图像视为“黑色”的阈值。 表示比率的最小值:

nb_black_pixels / nb_pixels

使得图像被认为是黑色的像素比率。 默认值为0.98。

pixel_black_th, pix_th

设置将像素视为“黑色”的阈值。

该阈值表示将像素视为“黑色”的最大像素亮度值。 提供的值根据以下公式进行缩放:

absolute_threshold = luma_minimum_value + pixel_black_th * luma_range_size

luma_range_sizeluma_minimum_value取决于输入视频格式,范围为YUV全范围格式的[0-255]和 YUV非全范围格式的[16-235]。

默认值为0.10。

以下示例将最大像素阈值设置为最小值, 并仅检测2秒或更长的黑色间隔:

blackdetect=d=2:pix_th=0.00

39.13 黑帧

检测几乎完全为黑色的帧。 可用于检测章节转换或广告。 输出行包括检测到的帧的帧号、黑度百分比、 文件中的位置(如果已知)或-1以及以秒为单位的时间戳。

为了显示输出行,您需要将日志级别至少设置为AV_LOG_INFO值。

该滤镜输出帧元数据lavfi.blackframe.pblack。 值表示图片中低于阈值的像素百分比。

它接受以下参数:

amount

低于阈值的像素百分比;默认值为98.

threshold, thresh

将像素值视为“黑色”的阈值;默认值为32.

39.14 混合

将两个视频帧融合在一起。

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.14.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.14.2 命令

此滤镜支持与选项相同的命令

39.15 块检测

确定帧的块效应而不改变输入帧。

基于Remco Muijs和Ihor Kirenko的研究:“用于自适应视频处理的无参考块效应测量”。2005年第13届欧洲信号处理会议。

滤镜接受以下选项:

period_min
period_max

设置用于确定像素网格(周期)的最小值和最大值。 默认值为[3,24]。

planes

设置要过滤的平面。默认仅为第一个平面。

39.15.1 示例

  • 确定第一个平面的块效应并在[8,32]范围内搜索周期:
    blockdetect=period_min=8:period_max=32:planes=1
    

39.16 模糊检测

确定帧的模糊程度而不改变输入帧。

基于Marziliano, Pina等人的研究:“一种无参考感知模糊度量”。 支持基于块的简化处理。

滤镜接受以下选项:

low
high

设置由Canny阈值算法使用的低阈值和高阈值。

高阈值选择“强”边缘像素,随后通过8连通性与低阈值选择的“弱”边缘像素相连接。

阈值必须选择在范围 [0,1]内,且应小于或等于.

的值。 默认值为20/255,默认值为50/255.

radius

定义在每个边缘像素周围搜索局部最大值的半径。

block_pct

仅对最显著的块(以百分比表示)确定模糊度。

block_width

为宽度为block_width的块确定模糊度。如果设置为小于1的值,无论block_height.

block_height

的值如何,将整个图像作为一个块处理。为高度为的块确定模糊度。如果设置为小于1的值,无论block_width.

planes

的值如何,将整个图像作为一个块处理。

设置要过滤的平面。默认仅为第一个平面。

  • 为80%最显著的32x32块确定模糊度:
    blurdetect=block_width=32:block_height=32:block_pct=80
    

39.17 bm3d

使用块匹配3D算法对帧进行去噪。

滤镜接受以下选项。

sigma

设置去噪强度。默认值为1。 允许范围为0到999.9。 去噪算法对sigma非常敏感,因此需根据源调整。

block

设置局部补丁大小。这会设置2D的尺寸。

bstep

设置处理块的滑动步长。默认值为4。 允许范围为1到64。 较小的值允许处理更多参考块,但速度较慢。

group

为第3维度设置相似块的最大数量。默认值为1。 设置为1时,不进行块匹配。较大的值允许单组中有更多的块。 允许范围为1到256。

range

设置用于块匹配的搜索块匹配半径。默认值为9。 允许范围为1到INT32_MAX。

mstep

设置块匹配时两个搜索位置间的间隔步长。默认值为1。 允许范围为1到64。值越小,速度越慢。

thmse

为块匹配设置均方误差阈值。有效范围为0到INT32_MAX。

hdthr

为3D变换域内的硬阈值设置阈值参数。 较大的值会导致在频率域内更强的硬阈值滤波。

estim

设置过滤估计模式。可以是basicfinal。 默认值为basic.

ref

如果启用,过滤器将使用第二个流进行块匹配。 默认情况下,对basic值为estim选项时禁用, 如果estim值为final.

planes

设置要过滤的平面。默认值为所有可用的平面(不包括alpha)。

39.17.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.18 boxblur

对输入视频应用箱型模糊算法。

它接受以下参数:

luma_radius, lr
luma_power, lp
chroma_radius, cr
chroma_power, cp
alpha_radius, ar
alpha_power, ap

接受选项的详细说明如下。

luma_radius, lr
chroma_radius, cr
alpha_radius, ar

设置用于模糊对应输入平面的箱半径(以像素为单位)的表达式。

半径值必须为非负数,并且不能大于表达式min(w,h)/2的值 (用于亮度和alpha平面),以及min(cw,ch)/2的值 (用于色度平面)。

默认值为luma_radius是 "2"。如果未指定,chroma_radiusalpha_radius默认值为设置的相应值luma_radius.

表达式可以包含以下常量:

w
h

输入宽度和高度(以像素为单位)。

cw
ch

输入色度图像的宽度和高度(以像素为单位)。

hsub
vsub

水平与垂直色度下采样值。例如,对于 像素格式 "yuv422p",hsub是 2,而vsub是 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定对应平面应用盒状模糊滤镜的次数。

默认值为luma_power是 2。如果未指定,chroma_poweralpha_power默认值为设置的相应值。luma_power.

值为 0 将禁用该效果。

39.18.1 例子

  • 应用盒状模糊滤镜,设置亮度、色度和 alpha 半径 为 2:
    boxblur=luma_radius=2:luma_power=1
    boxblur=2:1
    
  • 将亮度半径设置为 2,alpha 和色度半径设置为 0:
    boxblur=2:1:cr=0:ar=0
    
  • 将亮度和色度半径设置为视频尺寸的分数:
    boxblur=luma_radius=min(h\,w)/10:luma_power=1:chroma_radius=min(cw\,ch)/10:chroma_power=1
    

39.19 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.20 ccrepack

重新打包 CEA-708 字幕辅助数据

此滤镜修复了与商业编码器相关的上游格式错误的 CEA-708 负载的各种问题,特别是 元组数量不正确(目标 FPS 错误的 cc_count), 以及元组顺序不正确(即 CEA-608 元组未在 负载的首项)。

39.21 cas

对视频流应用对比度自适应锐化滤镜。

该滤镜接受以下选项:

strength

设置锐化强度。默认值为 0。

planes

设置要滤镜的平面。默认值为滤镜所有 平面,除 alpha 平面外。

39.21.1 命令

此滤镜支持与命令选项相同。

39.22 chromahold

删除所有颜色信息,但排除某些特定颜色。

该滤镜接受以下选项:

color

不会被替换为中性色度的颜色。

similarity

与上述颜色的相似性百分比。 0.01 仅匹配完全的键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。 0.0 使像素完全灰色或完全非灰色。 更高的值会保留更多颜色。

yuv

表示传入的颜色已为 YUV 而不是 RGB。

启用此选项后,像 "绿色" 或 "红色" 之类的文字颜色将不再有意义。 这可以用于以十六进制数传递精确的 YUV 值。

39.22.1 命令

此滤镜支持与命令选项相同。 该命令接受与对应选项相同的语法。

如果指定的表达式不有效,则保持其当前值。

39.23 chromakey

YUV 色彩空间颜色/色度键控。

此滤镜接受以下选项:

color

将被替换为透明的颜色。

similarity

与键颜色的相似性百分比。

0.01 仅匹配完全的键颜色,而 1.0 匹配所有颜色。

blend

混合百分比。

0.0 使像素完全透明或完全不透明。

更高的值会使像素半透明,透明度越高 像素颜色与键颜色越相似。

yuv

表示传入的颜色已为 YUV 而不是 RGB。

启用此选项后,像 "绿色" 或 "红色" 之类的文字颜色将不再有意义。 这可以用于以十六进制数传递精确的 YUV 值。

39.23.1 命令

此滤镜支持与命令选项相同。 该命令接受与对应选项相同的语法。

如果指定的表达式不有效,则保持其当前值。

39.23.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.24 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 分量之间的最大允许差异设置更细的控制。 默认值为 200。允许范围为 1 到 200。

threu

设置平均色度值的 U 阈值。 为当前像素和邻域像素的 U 分量之间的最大允许差异设置更细的控制。 默认值为 200。允许范围为 1 到 200。

threv

设置平均色度值的 V 阈值。 为当前像素和邻域像素的 V 分量之间的最大允许差异设置更细的控制。 默认值为 200。允许范围为 1 到 200。

distance

设置用于计算的距离类型。

manhattan

绝对差值。

euclidean

差值平方。

默认距离类型为曼哈顿。

39.24.1 命令

此滤镜支持与命令作为选项。 该命令接受与对应选项相同的语法。

39.25 色度偏移

水平和/或垂直移动色度像素。

该滤镜接受以下选项:

cbh

设置水平偏移色度蓝的量。

cbv

设置垂直偏移色度蓝的量。

crh

设置水平偏移色度红的量。

crv

设置垂直偏移色度红的量。

edge

设置边缘模式,可以是涂抹,默认,或扭曲.

39.25.1 命令

该滤镜支持以上所有选项作为命令.

39.26 CIE 图示

显示叠加像素的 CIE 色彩图表。

该滤镜接受以下选项:

system

设置颜色系统。

ntsc, 470m
ebu, 470bg
smpte
240m
apple
widergb
cie1931
rec709, hdtv
uhdtv, rec2020
dcip3
cie

设置 CIE 系统。

xyy
ucs
luv
gamuts

设置绘制的色彩空间范围。

system选项了解可用值。

size, s

设置 CIE 图的大小,默认设置为 512。

intensity, i

设置用于将输入像素值映射到 CIE 图的强度。

contrast

设置用于绘制超出活动颜色系统色域的舌头颜色的对比度。

corrgamma

校正显示在范围图上的伽马值,默认启用。

showwhite

在 CIE 图中显示白点,默认禁用。

gamma

设置输入伽马值。仅用于 XYZ 输入色彩空间。

fill

用 CIE 颜色填充,默认已启用。

39.27 编解码器视图

可视化一些编解码器导出的信息。

某些编解码器可以通过帧使用附加数据或其他方式导出信息。例如,某些基于 MPEG 的编解码器通过export_mvs标志在编解码器flags2选项中导出运动矢量。

该滤镜接受以下选项:

block

使用亮度平面显示分块结构。

mv

设置要可视化的运动矢量。

可用的mv标志为:

pf

P-帧的前向预测运动矢量

bf

B-帧的前向预测运动矢量

bb

B-帧的后向预测运动矢量

qp

使用色度平面显示量化参数。

mv_type, mvt

设置要可视化的运动矢量类型。包括所有帧的运动矢量,除非通过指定frame_type选项限制。

可用的mv_type标志为:

fp

前向预测运动矢量

bp

后向预测运动矢量

frame_type, ft

设置用于可视化运动矢量的帧类型。

可用的frame_type标志为:

if

帧内编码帧 (I-帧)

pf

预测帧 (P-帧)

bf

双向预测帧 (B-帧)

39.27.1 示例

  • 可视化所有帧的前向预测运动矢量,使用ffplay:
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv_type=fp
    
  • 可视化 P 和 B 帧的多向运动矢量,使用ffplay:
    ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
    

39.28 色彩平衡

调整输入帧中基本颜色(红、绿和蓝)的强度。

此滤镜允许对红青、绿洋红或蓝黄平衡进行调整,用于阴影、中间色调或高光区域。

正的调整值将平衡向主色偏移,负值则向补色偏移。

该滤镜接受以下选项:

rs
gs
bs

调整红、绿和蓝的阴影(最暗像素)。

rm
gm
bm

调整红、绿和蓝的中间色调(中间像素)。

rh
gh
bh

调整红、绿和蓝的高光(最亮像素)。

选项的允许范围为[-1.0, 1.0]。默认值为0.

pl

更改色彩平衡时保持亮度。默认禁用。

39.28.1 示例

  • 为阴影添加红色偏色:
    colorbalance=rs=.3
    

39.28.2 命令

该滤镜支持以上所有选项作为命令.

39.29 色彩对比度

调整 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.29.1 命令

该滤镜支持以上所有选项作为命令.

39.30 颜色校正

有选择地调整黑白的白平衡。 此滤镜在 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.30.1 命令

此过滤器支持以上所有选项作为命令.

39.31 colorchannelmixer

通过重新混合颜色通道来调整视频输入帧。

此过滤器通过添加与相同像素的其他通道相关的值来修改颜色通道。例如,如果要修改的值是红色,输出值将为:

红色=红色*rr + 蓝色*rb + 绿色*rg + alpha*ra

过滤器接受以下选项:

rr
rg
rb
ra

调整输入红、绿、蓝和 alpha 通道对输出红色通道的贡献。 默认值是1用于rr,以及0用于rg, rbra.

gr
gg
gb
ga

调整输入红、绿、蓝和 alpha 通道对输出绿色通道的贡献。 默认值是1用于gg,以及0用于gr, gbga.

br
bg
bb
ba

调整输入红、绿、蓝和 alpha 通道对输出蓝色通道的贡献。 默认值是1用于bb,以及0用于br, bgba.

ar
ag
ab
aa

调整输入红、绿、蓝和 alpha 通道对输出 alpha 通道的贡献。 默认值是1用于aa,以及0用于ar, 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.31.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.31.2 命令

此过滤器支持以上所有选项作为命令.

39.32 colorize

在视频流上叠加实色。

过滤器接受以下选项:

hue

设置颜色色调。允许范围从 0 到 360。 默认值为 0。

saturation

设置颜色饱和度。允许范围从 0 到 1。 默认值为 0.5。

lightness

设置颜色亮度。允许范围从 0 到 1。 默认值为 0.5。

mix

设置源亮度的混合比例。默认设置为 1.0。 允许范围从 0.0 到 1.0。

39.32.1 命令

此过滤器支持以上所有选项作为命令.

39.33 colorkey

RGB 颜色空间颜色键控。 此过滤器对 8 位 RGB 格式的帧操作,通过将每个像素的 alpha 分量在关键颜色的相似半径内设置为 0。超出相似半径的像素 alpha 值取决于混合选项的值。

过滤器接受以下选项:

color

设置 alpha 将被设置为 0(完全透明)的颜色。 参见(ffmpeg-utils)“颜色”部分,位于 ffmpeg-utils 手册中。 默认值是black.

similarity

设置与关键颜色的半径,半径内的其他颜色也具有完全透明。 计算的距离与关键颜色的 RGB 值和像素颜色之间 3D 空间的单位分数距离相关。范围是 0.01 到 1.0。0.01 在非常小的半径内与确切的关键颜色匹配,而 1.0 匹配所有内容。 默认值是0.01.

blend

设置超出相似半径的像素 alpha 值的计算方式。 0.0 使像素要么完全透明,要么完全不透明。 更高的值会导致半透明的像素,像素颜色越接近关键颜色,透明度越高。 范围是 0.0 到 1.0。默认值是0.0.

39.33.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.33.2 命令

此过滤器支持相同命令作为选项。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值不变。

39.34 色彩保持

删除所有RGB颜色的信息,仅保留特定的一种颜色。

此滤镜接受以下选项:

color

不会被替换为中性灰的颜色。

similarity

与上述颜色的相似度百分比。 0.01 仅匹配精确的键颜色,而 1.0 匹配所有颜色。

blend

混合比例。0.0让像素完全变成灰色。 更高的值保留了更多颜色。

39.34.1 命令

此滤镜支持与选项相同的命令命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值不变。

39.35 色阶

使用色阶调整视频输入帧。

此滤镜接受以下选项:

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.35.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.35.2 命令

此滤镜支持以上所有选项作为命令.

39.36 色彩映射

对视频流应用自定义颜色映射。

此滤镜需要三个输入视频流。 第一个流是将被滤镜处理的视频流。 第二个和第三个视频流指定来源颜色到目标颜色的映射颜色块。

此滤镜接受以下选项:

patch_size

设置来源和目标视频流颜色块的像素大小。

nb_patches

设置来源和目标视频流中使用的最大颜色块数量。 默认值是额外视频流中可用的颜色块数量。 最大允许颜色块数量为64.

type

设置用于目标颜色的调整方式。可以是relativeabsolute。 默认值是absolute.

kernel

设置用于测量映射颜色之间颜色差异的内核。

可接受的值为:

euclidean
weuclidean

默认值是euclidean.

39.37 色彩矩阵

转换色彩矩阵。

此滤镜接受以下选项:

src
dst

指定来源和目标色彩矩阵。必须同时指定两个值。

可接受的值为:

bt709

BT.709

fcc

FCC

bt601

BT.601

bt470

BT.470

bt470bg

BT.470BG

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

例如,要从BT.601转换为SMPTE-240M,请使用以下命令:

colormatrix=bt601:smpte240m

39.38 色彩空间

转换色彩空间、传输特性或色彩原色。 输入视频需要具有偶数大小。

此滤镜接受以下选项:

all

一次性指定所有颜色属性。

可接受的值为:

bt470m

BT.470M

bt470bg

BT.470BG

bt601-6-525

BT.601-6 525

bt601-6-625

BT.601-6 625

bt709

BT.709

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

bt2020

BT.2020

space

指定输出色彩空间。

可接受的值为:

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

ycgco

YCgCo

bt2020ncl

BT.2020(非恒亮)

trc

指定输出传输特性。

可接受的值为:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG

gamma22

恒伽马值 2.2

gamma28

恒伽马值 2.8

smpte170m

SMPTE-170M、BT.601-6 625 或 BT.601-6 525

smpte240m

SMPTE-240M

srgb

SRGB

iec61966-2-1

iec61966-2-1

iec61966-2-4

iec61966-2-4

xvycc

xvycc

bt2020-10

BT.2020用于10位内容

bt2020-12

BT.2020用于12位内容

primaries

指定输出颜色基准。

可接受的值为:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG或BT.601-6 625

smpte170m

SMPTE-170M或BT.601-6 525

smpte240m

SMPTE-240M

film

胶片

smpte431

SMPTE-431

smpte432

SMPTE-432

bt2020

BT.2020

jedec-p22

JEDEC P22荧光粉

range

指定输出颜色范围。

可接受的值为:

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(全)范围

jpeg

JPEG(全)范围

format

指定输出颜色格式。

可接受的值为:

yuv420p

YUV 4:2:0平面8位

yuv420p10

YUV 4:2:0平面10位

yuv420p12

YUV 4:2:0平面12位

yuv422p

YUV 4:2:2平面8位

yuv422p10

YUV 4:2:2平面10位

yuv422p12

YUV 4:2:2平面12位

yuv444p

YUV 4:4:4平面8位

yuv444p10

YUV 4:4:4平面10位

yuv444p12

YUV 4:4:4平面12位

fast

执行快速转换,跳过伽马/基准校正。这将显著减少CPU使用,但会产生数学上不正确的结果。要获得与colormatrix滤镜生成的输出兼容的结果,请使用fast=1。

dither

指定抖动模式。

可接受的值为:

none

无抖动

fsb

Floyd-Steinberg抖动

wpadapt

白点适应模式。

可接受的值为:

bradford

Bradford白点适应

vonkries

von Kries白点适应

identity

identity白点适应(即无白点适应)

iall

一次覆盖所有输入属性。接受的值与all.

ispace

覆盖输入颜色空间。接受的值与space.

iprimaries

覆盖输入颜色基准。接受的值与primaries.

itrc

覆盖输入传递特性。接受的值与trc.

irange

覆盖输入颜色范围。接受的值与range.

此滤镜将传递特性、色彩空间和颜色基准转换为指定的用户值。如果未指定输出值,则根据“all”属性设置为默认值。如果该属性也未指定,滤镜将记录错误。输出颜色范围和格式默认为与输入颜色范围和格式相同。输入的传递特性、色彩空间、颜色基准和颜色范围应设置在输入数据上。如果这些属性中的任何一个丢失,滤镜将记录错误并且不会执行转换。

例如,要将输入转换为SMPTE-240M,可以使用以下命令:

colorspace=smpte240m

39.39 色温

调整视频中的色温以模拟环境色温的变化。

滤镜接受以下选项:

temperature

设置温度(单位:开尔文)。允许范围为1000到40000。 默认值为6500K。

mix

设置与过滤后输出的混合程度。允许范围为0到1。 默认值为1。

pl

设置光亮度的保留程度。允许范围为0到1。 默认值为0。

39.39.1 命令

此滤镜支持与选项相同的命令

39.40 卷积

应用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.40.1 命令

此滤镜支持上述所有选项作为命令.

39.40.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.41 卷积实现

在频域中使用第二个流作为脉冲对视频流应用2D卷积。

滤镜接受以下选项:

planes

设置要处理的平面。

impulse

设置要处理的脉冲视频帧,可以是第一个所有。 默认值为全部.

Theconvolve过滤器也支持帧同步选项。

39.42 复制

将输入视频源不变地复制到输出。这主要用于测试目的。

39.43 coreimage

使用苹果的CoreImage API在OSX上进行GPU视频滤镜处理。

硬件加速基于OpenGL上下文。通常,这意味着由视频硬件处理。然而,存在基于软件的OpenGL实现,这意味着不能保证硬件处理。这取决于相关的OSX。

苹果提供了许多滤镜和图像生成器,具有多种多样的选项。滤镜必须通过其名称及选项进行引用。

coreimage滤镜接受以下选项:

list_filters

列出所有可用的滤镜和生成器,以及它们的所有选项和可能的最小最大值以及默认值。

list_filters=true
filter

通过名称和选项指定所有滤镜。 使用list_filters来确定所有有效的滤镜名称和选项。 数值选项由浮点值指定,并自动限制在各自的值范围内。向量和颜色选项必须通过一个空格分隔的浮点值列表指定。字符转义必须完成。 有一个特殊的选项名称default可用于滤镜的默认选项。

需要指定default或至少一个滤镜选项。 所有省略的选项均使用其默认值。 滤镜字符串的语法如下:

filter=<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...][#<NAME>@<OPTION>=<VALUE>[@<OPTION>=<VALUE>][@...]][#...]
output_rect

指定一个矩形,将滤镜链的输出复制到输入图像中。通过一个空格分隔的浮点值列表给出:

output_rect=x\ y\ width\ height

如果未提供,输出矩形等于输入图像的尺寸。输出矩形在输入图像的边界处自动裁剪。每个组件的负值是有效的。

output_rect=25\ 25\ 100\ 100

几个滤镜可以链式处理,以便进行连续处理,不需要GPU到HOST的传输,从而实现快速处理复杂的滤镜链。 当前,仅支持没有输入(生成器)或恰好一个输入(滤镜)图像和一个输出图像的滤镜。此外,过渡滤镜尚未如预期般可用。

某些滤镜生成带额外填充的输出图像,这取决于相关滤镜内核。填充会自动移除,以确保滤镜输出的大小与输入图像相同。

对于图像生成器,输出图像的大小由滤镜链的前一个输出图像或整个滤镜链的输入图像决定。生成器不使用该图像的像素信息来生成其输出。然而,生成的输出将与该图像混合,从而部分或完全覆盖输出图像。

可以使用coreimagesrc视频源直接生成输入图像并传入滤镜链。通过使用它,无需通过其他视频源或输入视频提供输入图像。

39.43.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主页的二维码,给出完整且转义的命令行,用于苹果的标准bash shell:
    ffmpeg -f lavfi -i nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

39.44 corr

获得两个输入视频之间的相关性。

此滤镜接受两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,以便此滤镜正确工作。此外,它假定两个输入具有相同的帧数量,并逐帧进行比较。

通过日志系统打印每个组件的平均值、最小值和最大值的相关性。

滤镜将每帧计算的相关性存储在帧元数据中。

此滤镜也支持帧同步选项。

在以下示例中,输入文件main.mpg进行处理,并与参考文件ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi corr -f null -

39.45 cover_rect

覆盖一个矩形对象

它接受以下选项:

cover

可选覆盖图像的文件路径,需要为yuv420格式。

mode

设置覆盖模式。

它接受以下值:

cover

通过提供的图片进行覆盖

blur

通过插值周围像素进行覆盖

默认值为模糊.

39.45.1 示例

  • 通过提供的图片从一个给定的视频覆盖一个矩形对象,使用ffmpeg:
    ffmpeg -i file.ts -vf find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover new.mkv
    

39.46 crop

裁剪输入视频至给定尺寸。

它接受以下参数:

w, out_w

输出视频的宽度。默认为iw。 此表达式在滤镜配置期间或发送“w”或“out_w”命令时只计算一次。

h, out_h

输出视频的高度。默认为ih。 此表达式在滤镜配置期间或发送“h”或“out_h”命令时只计算一次。

x

输入视频中输出视频左边缘的水平位置。默认为(in_w-out_w)/2。 此表达式逐帧计算。

y

输入视频中输出视频顶部边缘的垂直位置。默认为(in_h-out_h)/2。 此表达式逐帧计算。

keep_aspect

如果设置为1,将强制输出显示纵横比与输入相同,通过更改输出样本纵横比。默认为0。

exact

启用精确裁剪。如果启用,子采样视频将按照指定的宽度/高度/x/y进行精确裁剪,不会向最近的较小值舍入。默认为0。

参数out_w, out_h, x, y是包含以下常量的表达式:

x
y

xy的计算值。它们会对每个新帧进行评估。. They are evaluated for each new frame.

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是2vsub是1。

n

输入帧的编号,从0开始。

pos

输入帧在文件中的位置,如果未知则为NAN;已弃用,请勿使用。

t

以秒为单位表示的时间戳。如果输入时间戳未知,则为NAN。

表达式out_w可能依赖于out_h的值,out_h可能依赖于out_w,但它们不能依赖于xy,因为xy是在out_wout_h.

之后计算的。xy参数指定输出区域(未裁剪部分)左上角的定位表达式值。对于每个帧都需要计算。如果计算值无效,则会近似到最接近的有效值。

表达式x可能依赖于y,表达式y可能依赖于x.

39.46.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.46.2 命令

此过滤器支持以下命令:

w, out_w
h, out_h
x
y

设置输出视频的宽度/高度及输入视频中的水平/垂直位置。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.47 cropdetect

自动检测裁剪尺寸。

它计算必要的裁剪参数并通过日志系统打印建议的参数。检测出的尺寸对应输入视频的非黑色或视频区域,依赖于模式.

它接受以下参数:

mode

根据模式,裁剪检测基于周围像素的纯黑值或运动矢量和边缘像素的组合。

black

检测围绕播放视频的黑色像素。对于细粒度控制,请使用选项限制.

mvedges

通过视频内的运动矢量检测播放视频,并扫描典型形成边界的边缘像素。

limit

设置更高的黑色值阈值,可选范围为无(0)到所有(255对于基于8位格式)。强度值大于设置值即被视为非黑色。默认值为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]范围内选择,并且应小于或等于.

对于的默认值是5/255,对于的默认值是15/255.

39.47.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.47.2 命令

此过滤器支持以下命令:

limit

命令接受与对应选项相同的语法。如果指定的表达式无效,则保持其当前值。

39.48 cue

将视频过滤延迟到给定的墙上时钟时间戳。过滤器首先通过。preroll帧数,然后最多缓冲buffer帧数并等待提示。当到达提示时 ,它会转发缓冲的帧以及随后从输入进来的任何帧。

该过滤器可用于同步多个 ffmpeg 进程的输出,以便实时输出设备(如 decklink)。通过在过滤链中引入延迟并预先缓冲帧,进程可以在目标壁钟时间戳达到后几乎立即将数据传递给输出。

无法保证完美的帧精确度,但结果对于某些使用场景已经足够好。

cue

提示时间戳以微秒表示的 UNIX 时间戳。默认为 0。

preroll

要作为预回滚传递的内容持续时间,以秒为单位表示。默认为 0。

buffer

在等待提示之前缓冲内容的最大持续时间,以秒为单位表示。默认为 0。

39.49 曲线

使用曲线应用颜色调整。

此过滤器类似于 Adobe Photoshop 和 GIMP 的曲线工具。每个分量(红色、绿色和蓝色)的值由N关键点通过平滑曲线相连定义。x轴表示输入帧的像素值,y轴表示要为输出帧设置的新像素值。

默认情况下,一个分量曲线由两点定义(0;0)(1;1)。这会创建一条直线,其中每个原始像素值被“调整”为其自身的值,这意味着图像没有任何变化。

该过滤器允许您重新定义这两点并添加其他点。一条新曲线将被定义为平滑通过所有这些新坐标。新定义的点需要在 x 轴上严格递增,并且它们的xy值必须在[0;1]区间内。曲线是通过自然或单调三次样条插值形成的,取决于interp选项(默认值:natural)。natural样条通常生成更平滑的曲线,而单调(pchip) 样条保证在指定点之间的过渡是单调的。如果计算得到的曲线恰好超过向量空间,则值将相应剪裁。

该过滤器接受以下选项:

preset

选择一个可用的颜色预设。此选项可以与r, g, b参数一起使用;在这种情况下,后者选项优先于预设值。 可用的预设有:

none
color_negative
cross_process
darker
increase_contrast
lighter
linear_contrast
medium_contrast
negative
strong_contrast
vintage

默认值是none.

master, m

设置主关键点。这些点将定义二次映射。 有时称为 "亮度" 或 "值" 映射。 它可以与r, g, ball一起使用,因为它的作用类似于后期处理 LUT。

red, r

设置红色分量的关键点。

green, g

设置绿色分量的关键点。

blue, b

设置蓝色分量的关键点。

all

设置所有分量的关键点(不包括主分量)。 可以与其他关键点分量选项一起使用。在这种情况下,未设置的分量将回退使用此all设置。

psfile

指定 Photoshop 曲线文件(.acv)以从中导入设置。

plot

将曲线的 Gnuplot 脚本保存到指定文件。

interp

指定插值的种类。可用的算法有:

natural

使用分段的三次多项式的自然三次样条,其连续两次可微。

pchip

使用分段三次 Hermite 插值多项式(PCHIP)的单调三次样条。

为避免一些过滤图语法冲突,每个关键点列表需要使用以下语法定义:x0/y0 x1/y1 x2/y2 ....

39.49.1 命令

此过滤器与选项支持相同的命令

39.49.2 示例

  • 略微增加蓝色的中间水平:
    curves=blue='0/0 0.5/0.58 1/1'
    
  • 复古效果:
    curves=r='0/0.11 .42/.51 1/0.95':g='0/0 0.50/0.48 1/1':b='0/0.22 .49/.44 1/0.8'
    

    这里我们为每个分量获得以下坐标:

    红色

    (0;0.11) (0.42;0.51) (1;0.95)

    绿色

    (0;0) (0.50;0.48) (1;1)

    蓝色

    (0;0.22) (0.49;0.44) (1;0.80)

  • 上一个示例也可以通过相关的内置预设实现:
    curves=preset=vintage
    
  • 或者简单地:
    curves=vintage
    
  • 使用 Photoshop 预设并重新定义绿色分量的点:
    curves=psfile='MyCurvesPresets/purple.acv':green='0/0 0.45/0.53 1/1'
    
  • 查看cross_process配置文件的曲线使用ffmpeggnuplot:
    ffmpeg -f lavfi -i color -vf curves=cross_process:plot=/tmp/curves.plt -frames:v 1 -f null -
    gnuplot -p /tmp/curves.plt
    

39.50 数据范围

视频数据分析过滤器。

该过滤器显示部分视频的十六进制像素值。

该过滤器接受以下选项:

size, s

设置输出视频大小。

x

设置拾取像素的 x 偏移量。

y

设置拾取像素的 y 偏移量。

mode

设置范围模式,可以是以下之一:

mono

在黑色背景上用白色绘制十六进制像素值。

color

在黑色背景上使用输入视频像素颜色绘制十六进制像素值。

color2

在从输入视频中选取的彩色背景上绘制十六进制像素值,文本颜色选择使其始终可见。

axis

在视频左边和顶部绘制行号和列号。

opacity

设置背景不透明度。

format

设置显示数值格式。可以为hex,或dec。默认是hex.

components

设置要显示的像素分量。默认情况下显示所有像素分量。

39.50.1 命令

此过滤器支持与选项相同的命令,不包括size选项。

39.51 定向模糊

应用定向模糊过滤器。

该过滤器接受以下选项:

angle

设置定向模糊的角度。默认值是45.

radius

设置定向模糊的半径。默认值是5.

planes

设置要过滤的平面。默认情况下过滤所有平面。

39.51.1 命令

此过滤器支持与选项相同的命令。 命令接受对应选项的相同语法。

如果指定的表达式无效,则保持在当前值。

39.52 DCT去噪

使用 2D DCT(频域过滤)对帧去噪。

此过滤器不适用于实时操作。

该过滤器接受以下选项:

sigma, s

设置噪声 sigma 常量。

这个sigma定义了一个硬性阈值为3 * sigma;每个DCT 系数(绝对值)低于这个阈值都会被丢弃。

如果需要更高级的过滤,请参见expr.

默认值是0.

overlap

设置每个块的重叠像素数量。由于滤镜可能会很慢,您可能希望降低此值,但代价是滤镜效果较差并且可能会出现各种伪影。

如果重叠值不允许处理整个输入宽度或高度,将显示一条警告,并且相应的边界不会被去噪。

默认值是块大小-1,这是最优的设置。

expr, e

设置系数因子表达式。

对于DCT块的每个系数,将评估此表达式作为系数的乘数值。

如果设置了此选项,则sigma选项将被忽略。

系数的绝对值可以通过c变量访问。

n

设置块大小使用比特数量。1<<n定义了块大小,即处理块的宽度和高度。

默认值是3(8x8),可以提升到4对于一个块大小为16x16。请注意,更改此设置对处理速度有巨大影响。此外,较大的块大小并不一定意味着更好的去噪效果。

39.52.1 示例

应用一个去噪,使用sigma4.5:

dctdnoiz=4.5

使用表达式系统可以实现相同的操作:

dctdnoiz=e='gte(c, 4.5*3)'

使用块大小为16x16:

dctdnoiz=15:n=4

39.53 去带化

从输入视频中去除带状伪影。 通过用参考像素的平均值替换带状像素来工作。

该滤镜接受以下选项:

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.53.1 命令

此滤镜支持所有上述选项作为命令.

39.54 去块化

从输入视频中去除块状伪影。

该滤镜接受以下选项:

filter

设置滤镜类型,可以是。默认是。 这控制了应用的去块化类型。

block

设置块的大小,允许范围是4到512。默认是8.

alpha
beta
gamma
delta

设置阻塞检测阈值。允许范围是0到1。 默认值为:0.098对于alpha0.05对于其余部分。 使用更高的阈值可以加强去块效果。 设置alpha控制块边缘的精确阈值检测。 其余选项控制边缘附近的阈值检测。每个选项分别对于下/上或左/右。将其中任何一个设置为0禁用 去块化。

planes

设置要过滤的平面。默认是过滤所有可用平面。

39.54.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.54.2 命令

此滤镜支持所有上述选项作为命令.

39.55 减少帧

以固定间隔丢弃重复帧。

该滤镜接受以下选项:

cycle

设置要丢弃的帧数。将其设置为N表示在每批N帧中将丢弃一帧。 默认是5.

dupthresh

设置重复检测的阈值。如果某帧的差异指标小于或等于此值,它将被声明为重复帧。默认是1.1

scthresh

设置场景变化阈值。默认是15.

blockx
blocky

设置在指标计算过程中使用的x轴和y轴块大小。更大的块可以更好地抑制噪声,但对小动作的检测效果较差。必须是2的幂数。默认是32.

ppsrc

将主输入标记为预处理输入并激活干净的源输入流。这允许通过各种滤镜预处理输入以帮助指标计算,同时保持帧选择无损。当设置为1时,第一个流是预处理输入,第二个流是保留帧来源的干净源。默认是0.

chroma

设置是否在指标计算中考虑色度。默认是1.

mixed

设置输入是否仅部分包含要减少的内容。默认是false。 如果启用,视频输出流将采用可变帧率。

39.56 去卷积

使用第二个流作为脉冲,在频域上对视频流应用二维去卷积。

该滤镜接受以下选项:

planes

设置要处理的平面。

impulse

设置要处理的脉冲视频帧,可以是第一个所有。默认是所有.

noise

设置进行除法时的噪声。默认值为0.0000001。当宽度和高度不相同且不是2的幂时,或者在卷积之前的流有噪声时非常有用。

deconvolve滤镜还支持帧同步选项。

39.57 去杂点

减少视频中的交叉亮度(点爬动)和交叉颜色(彩虹色)。

可接受以下选项:

m

设置操作模式。可以组合点爬动用于减少交叉亮度和/或彩虹用于减少交叉颜色。

lt

设置空间亮度阈值。较低的值会增加交叉亮度的减少。

tl

设置时间亮度的容差。较高的值会增加交叉亮度的减少。

tc

设置色度时间变化的容差。较高的值会增加交叉颜色的减少。

ct

设置时间色度阈值。较低的值会增加交叉颜色的减少。

39.58 收缩

对视频应用收缩效果。

此滤镜通过仅考虑比像素值低的值,用局部(3x3)平均值来替换像素。

可接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认值为65535。 如果为0,则平面保持不变。

39.58.1 命令

此滤镜支持作为命令.

39.59 去闪烁

移除时间帧亮度变化。

可接受以下选项:

size, s

设置帧移动平均滤波器的大小。默认值为5。允许范围为2到129。

mode, m

将平均模式设置为平滑时间亮度变化。

可用值为:

am

算术平均

gm

几何平均

hm

调和平均

qm

二次平均

cm

三次平均

pm

幂平均

median

中位数

bypass

实际上不修改帧。当只需要元数据时很有用。

39.60 去抖动

移除由部分隔行扫描的电影内容产生的抖动。

例如可能由拉起滤镜引入。如果原始 源是部分隔行扫描的电影内容,那么pullup,dejudder的输出将具有可变帧率。可能会更改 容器的记录帧率。除此之外,此滤镜不会影响恒定帧率的视频。

此滤镜可用的选项为:

cycle

指定抖动重复的时间窗长度。

接受任何大于1的整数。常用值为:

4

如果原始帧是从24fps电影隔行扫描到30fps(电影到NTSC)。

5

如果原始帧是从25fps电影隔行扫描到30fps(PAL到NTSC)。

20

如果两者的混合。

默认值是‘4’.

39.61 去Logo

通过简单的周围像素插值来抑制电视台的Logo。只需设置一个覆盖Logo的矩形,观看其消失 (有时会出现更难看的东西 - 这取决于具体情况)。

可接受以下参数:

x
y

指定Logo左上角的坐标。必须指定。

w
h

指定要清除的Logo的宽度和高度。必须指定。

show

当设置为1时,在屏幕上绘制绿色的矩形以简化寻找正确的x, y, w,以及h参数。 默认值为0。

矩形绘制在(部分)将被插值值替换的最外层像素上。在该矩形外部每个方向上紧接的下一 个像素的值将用于计算矩形内部的插值像素值。

39.61.1 示例

  • 设置一个矩形,覆盖左上角坐标为0,0,尺寸为100x77的区域:
    delogo=x=0:y=0:w=100:h=77
    

39.62 去雨

通过基于卷积神经网络的去雨方法移除输入图片/视频中的雨。支持的模型有:

训练以及模型生成脚本在以下仓库中提供:https://github.com/XueweiMeng/derain_filter.git.

滤镜接受以下选项:

filter_type

指定使用的滤镜类型。此选项接受以下值:

derain

去雨滤镜。要进行去雨滤镜操作,需要使用去雨模型。

dehaze

去雾滤镜。要进行去雾滤镜操作,需要使用去雾模型。

默认值是‘derain’.

dnn_backend

指定用于模型加载和执行的DNN后端类型。此选项接受以下值:

tensorflow

TensorFlow后端。启用此后端需要 安装TensorFlow的C语言库(见https://www.tensorflow.org/install/lang_c)并用以下命令配置FFmpeg:--enable-libtensorflow

model

设置指定网络架构及其参数的模型文件的路径。 请注意,不同的后端使用不同的文件格式。TensorFlow仅能够加载其格式的文件。

要获得完整功能(如异步执行),请使用DNN处理滤镜。

39.63 去抖动

尝试修正水平和/或垂直方向的小幅移动。 此滤镜有助于移除因手持相机、撞到三脚架、乘坐交通工具等造成的相机抖动。

滤镜接受以下选项:

x
y
w
h

指定一个矩形区域,以限制运动矢量的搜索范围。 如果需要,可以将运动矢量的搜索限制在帧的矩形区域内,该区域由其左上角坐标、宽度 和高度定义。这些参数的意义与绘制框滤镜相同,可用于可视化边框的位置。

当帧内对象的同时移动可能被运动矢量搜索误以为相机运动时,这非常有用。

如果x, y, wh中的任何一个或全部设置为-1 ,则使用整个帧。这允许在不指定运动矢量搜索边框的情况下设置后续选项。

默认 - 搜索整个帧。

rx
ry

指定 x 和 y 方向运动的最大范围,范围为 0-64 像素。默认值为 16。

edge

指定如何生成像素以填补帧边缘的空白位置。可用的值为:

blank, 0

在空白位置填充零。

original, 1

在空白位置使用原始图像。

clamp, 2

在空白位置使用挤出的边缘值。

mirror, 3

在空白位置使用镜像边缘。

默认值为 'mirror’.

blocksize

指定用于运动搜索的块大小。范围为 4-128 像素,默认值为 8。

contrast

指定块的对比度阈值。只有对比度(最暗和最亮像素之间的差异)超过指定值的块才会被考虑。范围为 1-255,默认值为 125。

search

指定搜索策略。可用的值为:

exhaustive, 0

设置为全面搜索。

less, 1

设置为较少的全面搜索。

默认值为 'exhaustive’.

filename

如果设置,则详细的运动搜索日志将写入指定的文件中。

39.64 去溢色

去除由于反射的绿屏或蓝屏颜色导致的前景颜色不必要污染。

此滤镜接受以下选项:

type

设置使用哪种去溢色类型。

mix

设置如何生成溢色图。

expand

设置去除仍然残留溢色的程度。

red

控制溢色区域中的红色数量。

green

控制溢色区域中的绿色数量。 对于绿屏应设为 -1。

blue

控制溢色区域中的蓝色数量。 对于蓝屏应设为 -1。

brightness

控制溢色区域的亮度,同时保留颜色。

alpha

从生成溢色图中修改 alpha 值。

39.64.1 命令

此滤镜支持上述所有选项作为命令.

39.65 反电显

应用与电显操作完全相反的操作。它需要使用 pattern 选项指定预定义的模式,这必须与传递给电显滤镜的模式相同。

此滤镜接受以下选项:

first_field
top, t

顶场优先

bottom, b

底场优先 默认值为top.

pattern

一个表示希望应用的拉伸模式的数字字符串。 默认值为23.

start_frame

一个表示第一个帧相对于电显模式位置的数字。如果流被剪切,请使用此设置。默认值为0.

39.66 膨胀

对视频应用膨胀效果。

此滤镜用局部(3x3)最大值替换像素。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面最大变化,默认值为 65535。 如果为0,则平面保持不变。

coordinates

指定参考像素的标志。默认值为 255,即使用所有八个像素。

标志对应的局部3x3坐标如下:

1 2 3 4 5 6 7 8

39.66.1 命令

此滤镜支持上述所有选项作为命令.

39.67 位移

根据第二和第三输入流指示位移像素。

它接受三个输入流并输出一个流,第一个输入是源,第二和第三输入是位移图。

第二个输入指定沿 x 轴位移像素多少,第三个输入指定沿 y 轴位移像素多少。 如果一个位移图流终止,最后一帧将被使用。

注意一旦生成,位移图可以反复使用。

以下是接受选项的描述。

edge

设置超出范围像素取代行为。

可用的值为:

blank

缺失像素替换为黑色像素。

smear

相邻像素扩展以取代缺失像素。

wrap

超出范围的像素将被包裹指向另一侧的像素。

mirror

超出范围的像素将被替换为镜像像素。

默认值为 'smear’.

39.67.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.68 dnn分类

基于边界框使用深度神经网络进行分类。

此滤镜接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。此选项目前仅接受 openvino,稍后将加入 tensorflow 后端。

model

设置模型文件路径以指定网络架构及其参数。 需注意不同后端使用不同的文件格式。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件路径以指定标签 ID 和名称之间的映射。 每个标签名称写入一行,尾部空格和空行将被跳过。 第一行为标签 ID 0 的名称, 第二行为标签 ID 1 的名称等等。 如果未提供标签文件,标签 ID 将视为名称。

backend_configs

设置传递到后端的配置。

对于 tensorflow 后端,可以通过sess_config选项设置其配置, 请使用 tools/python/tf_sess_config.py 获取适合当前系统的配置。

39.69 dnn检测

使用深度神经网络进行目标检测。

此滤镜接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。此选项目前仅接受 openvino,稍后将加入 tensorflow 后端。

model

设置模型文件路径以指定网络架构及其参数。 需注意不同后端使用不同的文件格式。

input

设置 dnn 网络的输入名称。

output

设置 dnn 网络的输出名称。

confidence

设置置信度阈值(默认值:0.5)。

labels

设置标签文件路径以指定标签 ID 和名称之间的映射。 每个标签名称写入一行,尾部空格和空行将被跳过。 第一行为标签 ID 0 的名称(通常为 'background'), 第二行为标签 ID 1 的名称等等。 如果未提供标签文件,标签 ID 将视为名称。

backend_configs

设置传递到后端的配置。若想采用异步执行,请设置 async(默认设置)。如果后端不支持异步,则回滚到同步执行。

39.70 dnn处理

使用深度神经网络进行图像处理。它与另一个滤镜配合使用,将帧的像素格式转换为 dnn 网络所需的格式。

此滤镜接受以下选项:

dnn_backend

指定使用哪个 DNN 后端来加载和执行模型。此选项接受以下值:

tensorflow

TensorFlow 后端。启用此后端需要安装 TensorFlow 的 C 库(参见https://www.tensorflow.org/install/lang_c)并使用以下配置 FFmpeg。--enable-libtensorflow

openvino

OpenVINO 后端。启用此后端需要构建并安装 OpenVINO 的 C 库(参见https://github.com/openvinotoolkit/openvino/blob/master/build-instruction.md)并使用以下配置 FFmpeg。--enable-libopenvino(如果头文件和库未安装到系统路径中,可能需要使用 –extra-cflags=-I... –extra-ldflags=-L...)

torch

Libtorch 后端。启用此后端需要构建并安装 Libtroch 的 C++ 库。请下载 cxx11 ABI 版本(参见https://pytorch.org/get-started/locally)并使用以下配置 FFmpeg。--enable-libtorch --extra-cflags=-I/libtorch_root/libtorch/include --extra-cflags=-I/libtorch_root/libtorch/include/torch/csrc/api/include --extra-ldflags=-L/libtorch_root/libtorch/lib/

model

设置模型文件路径以指定网络架构及其参数。 需注意不同后端使用不同的文件格式。TensorFlow、OpenVINO 和 Libtorch 后端只能加载其格式的文件。

input

设置 DNN 网络的输入名称。

output

设置 DNN 网络的输出名称。

backend_configs

设置要传递到后端的配置项。要使用异步执行,请设置异步(默认:设置)。 如果后端不支持异步执行,将回滚到同步执行。

对于TensorFlow后端,您可以通过以下方式设置其配置项sess_config选项, 请使用tools/python/tf_sess_config.py获取您系统的TensorFlow后端配置项。

39.70.1 示例

  • 使用can.pb(参见去除雨滴过滤器)从rgb24帧中去除雨滴:
    ./ffmpeg -i rain.jpg -vf format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y derain.jpg
    
  • 使用srcnn.pb处理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处理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.71 画框

在输入图像上绘制一个彩色框。

它接受以下参数:

x
y

指定框左上角坐标的表达式。默认为0。

width, w
height, h

指定框的宽度和高度的表达式;如果为0,则解释为输入的宽度和高度。默认为0。

color, c

指定要写入的框颜色。有关此选项的一般语法,请参见(ffmpeg-utils)"颜色"章节中的ffmpeg-utils手册. 如果使用特殊值invert,框边缘颜色将与视频相同,但亮度相反。

thickness, t

设置框边缘厚度的表达式。 值为fill将创建一个填充框。默认值为3.

参见下方接受的常量列表。

replace

适用于输入具有alpha通道的情况。值为1时,绘制的框像素将覆盖视频的颜色和alpha像素。 默认值为0,即将框与输入合成,同时保留视频的alpha通道。

以下是x, y, wht参数的表达式中 g包含的常量:

dar

输入显示的纵横比,它与(w / h) * sar.

hsub
vsub

水平和垂直色度抽样值。例如,对于像素格式"yuv422p"hsub是2而vsub是1。

in_h, ih
in_w, iw

输入的宽度和高度。

sar

输入的样本纵横比。

x
y

绘制框的x和y偏移坐标。

w
h

所绘制框的宽度和高度。

box_source

如果您希望使用检测side data中的检测边界框数据,可以将框源设置为side_data_detection_bboxes。

如果box_source被设置,x, y, 宽度高度将被忽略, 但仍使用检测边界框side data中的框数据。所以如果您不确定框源,请不要使用此参数。

t

所绘制框的厚度。

这些常量允许x, y, w, ht表达式互相引用,因此,您可以,例如指定y=x/darh=w/dar.

39.71.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.71.2 命令

该过滤器支持与选项相同的命令。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

39.72 绘制图表

使用输入视频的元数据绘制图表。

它接受以下参数:

m1

设置第一个帧元数据键,从中使用元数据值绘制图表。

fg1

设置第一个前景色表达式。

m2

设置第二个帧元数据键,从中使用元数据值绘制图表。

fg2

设置第二个前景色表达式。

m3

设置第三个帧元数据键,从中使用元数据值绘制图表。

fg3

设置第三个前景色表达式。

m4

设置第四个帧元数据键,从中使用元数据值绘制图表。

fg4

设置第四个前景色表达式。

min

设置元数据值的最小值。

max

设置元数据值的最大值。

bg

设置图表背景色。默认为白色。

mode

设置图表模式。

模式的可用值为:

bar
dot
line

默认值是line.

slide

设置滑动模式。

滑动的可用值为:

frame

当到达右边界时画新帧。

replace

用新列替换旧列。

scroll

从右向左滚动。

rscroll

从左向右滚动。

picture

绘制单张图片。

默认是frame.

size

设置图形视频的尺寸。有关此选项的语法,请查看ffmpeg-utils 手册中的"视频尺寸"部分。 默认值是900x256.

rate, r

设置输出帧率。默认值是25.

前景色表达式可以使用以下变量:

MIN

元数据值的最小值。

MAX

元数据值的最大值。

VAL

当前元数据键值。

颜色定义为 0xAABBGGRR。

示例使用来自signalstats滤镜的元数据:

signalstats,drawgraph=lavfi.signalstats.YAVG:min=0:max=255

示例使用来自ebur128滤镜的元数据:

ebur128=metadata=1,adrawgraph=lavfi.r128.M:min=-120:max=5

39.73 绘制网格

在输入图片上绘制网格。

它接受以下参数:

x
y

指定网格交点的某些点坐标的表达式(用于配置偏移)。两者默认值均为 0。

width, w
height, h

指定网格单元宽度和高度的表达式。如果为 0,则将解释为输入宽度和高度减去thickness,因此图像会被框住。默认值为 0。

color, c

指定网格颜色。有关此选项的一般语法,查看ffmpeg-utils 手册中的"颜色"部分。如果使用特殊值invert,网格颜色将与视频相同,但亮度反转。

thickness, t

设置网格线条厚度的表达式。默认值是1.

请见下文接受的常量列表。

replace

如果输入具有透明度,则适用。如果设置为1,绘制网格的像素将覆盖视频的颜色和透明度像素。 默认值是0,这会将网格合成到输入上,并且保持视频的透明度不变。

参数x, y, wh以及t是包含以下常量的表达式:

dar

输入显示宽高比,与(w / h) * sar.

hsub
vsub

水平和垂直色度的子采样值。例如,对于像素格式"yuv422p"hsub是 2 而vsub是 1。

in_h, ih
in_w, iw

输入网格单元的宽度和高度。

sar

输入示例宽高比。

x
y

网格交点某些点的 x 和 y 坐标(用于配置偏移)。

w
h

绘制单元的宽度和高度。

t

绘制单元的厚度。

这些常量允许x, y, w, ht的表达式相互引用,因此您可以例如指定y=x/darh=w/dar.

39.73.1 示例

  • 绘制一个单元为100x100像素,厚度为2像素,颜色为红色,透明度为50%的网格:
    drawgrid=width=100:height=100:thickness=2:color=red@0.5
    
  • 绘制一个透明度为50%的白色3x3网格:
    drawgrid=w=iw/3:h=ih/3:t=2:c=white@0.5
    

39.73.2 命令

此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。

如果指定的表达式无效,它将保持当前值。

39.74 绘制文本

使用 libfreetype 库在视频顶部绘制文本字符串或从指定文件中绘制文本。

要启用此滤镜的编译,您需要使用以下配置 FFmpeg:--enable-libfreetype--enable-libharfbuzz。 要启用默认字体回退以及font选项,您需要用以下配置 FFmpeg:--enable-libfontconfig。 要启用text_shaping选项,您需要使用以下配置 FFmpeg:--enable-libfribidi.

39.74.1 语法

它接受以下参数:

box

用于使用背景色围绕文本绘制框。 值必须为 1(启用)或 0(禁用)。 默认值为box为 0。

boxborderw

设置围绕框绘制边框的宽度,使用boxcolor。 该值必须使用以下格式之一指定:

  • boxborderw=10设置所有边框宽度为 10
  • boxborderw=10|20设置顶部和底部边框宽度为 10,左右边框宽度为 20
  • boxborderw=10|20|30设置顶部边框宽度为 10,底部边框宽度为 30,左右边框宽度为 20
  • boxborderw=10|20|30|40设置顶部宽度为 10,右侧宽度为 20,底部宽度为 30,左侧宽度为 40

默认值为boxborderw是"0"。

boxcolor

用于绘制文本框的颜色。有关此选项的语法,请查看ffmpeg-utils 手册中的"颜色"部分.

默认值为框颜色是 "白色"。

line_spacing

设置以像素为单位的行间距。默认值为行间距是 0。

text_align

设置文本相对于框边界的垂直和水平对齐方式。 该值是一个标志的组合,其中一个用于垂直对齐(T=顶端,M=中间,B=底端),另一个用于水平对齐(L=左对齐,C=居中对齐,R=右对齐)。 请注意,制表符仅在左对齐时受支持。

y_align

指定y值的参考位置。可能的值有:

  • text第一个文本行最高字形的顶部放置在y
  • baseline第一个文本行的基线放置在y
  • font第一个文本行的基线放置在y加上字体度量中定义的上升量(以像素为单位)。

默认值为y_align- 为了向后兼容是"text"。

borderw

设置围绕文本绘制的边框的宽度,使用边框颜色。 默认值为边框宽度是 0。

bordercolor

设置用于绘制文本边框的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于ffmpeg-utils手册中.

默认值为边框颜色是 "黑色"。

expansion

选择文本如何扩展。可以是none, strftime(已废弃) 或normal(默认)。详见文本扩展部分以了解详细信息。

basetime

设置计时的开始时间。值以微秒为单位。仅在已废弃的strftime扩展模式下应用。如需在常规扩展模式下模拟,请使用pts函数,提供以秒为单位的开始时间作为第二个参数。

fix_bounds

如果为真,检查并修正文本坐标以避免裁剪。

fontcolor

用于绘制字体的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于ffmpeg-utils手册中.

默认值为字体颜色是 "黑色"。

fontcolor_expr

字符串与文本的扩展方式相同,以获得动态字体颜色值。默认情况下,此选项为空并未处理。当此选项设置时,会覆盖字体颜色选项。

font

用于绘制文本的字体家族。默认是 Sans。

fontfile

用于绘制文本的字体文件。路径必须包含在内。 如果禁用 fontconfig 支持,此参数是强制性的。

alpha

以应用 alpha 混合方式绘制文本。值可以是 0.0 和 1.0 之间的数字。 表达式还接受相同的变量x, y。 默认值是 1。 详见字体颜色表达式.

fontsize

用于绘制文本的字体大小。 默认值为字体大小是 16。

text_shaping

如果设置为 1,在绘制文本前尝试对其进行整形(例如,反转从右到左文本的顺序并联结阿拉伯字符)。 否则,只是按给定的方式直接绘制文本。 默认值为 1(如果支持)。

ft_load_flags

用于加载字体的标志。

标志与 libfreetype 支持的相应标志相对应,并且是以下值的组合:

默认
无缩放
无提示
渲染
无位图
垂直布局
强制自动提示
裁剪位图
严格
忽略全局预进宽
无递归
忽略变换
单色
线性设计
无自动提示

默认值是"默认"。

欲了解更多信息,请查阅 FT_LOAD_* libfreetype 标志的文档。

shadowcolor

用于绘制文本阴影的颜色。有关此选项的语法,请参阅(ffmpeg-utils)"颜色"部分,位于 ffmpeg-utils 手册中.

默认值为阴影颜色是 "黑色"。

boxw

设置围绕文本绘制的框的宽度。 默认值为框宽是根据文本宽度自动计算的。

boxh

设置围绕文本绘制的框的高度。 默认值为框高是根据文本高度自动计算的。

shadowx
shadowy

文本阴影相对于文本位置的 x 和 y 偏移量。它们可以是正值或负值。 默认值均为 "0"。

start_number

n/frame_num 变量的起始帧号。默认值为 "0"。

tabsize

用于渲染制表符的空格数大小。 默认值为 4。

timecode

设置初始时间码表示,格式为 "hh:mm:ss[:;.]ff"。 可以与 text 参数一起使用或单独使用。时间码速率选项必须指定。

timecode_rate, rate, r

设置时间码帧速率(仅限时间码)。值将四舍五入为最接近的整数。最小值是 "1"。 时间码支持 30 和 60 帧速率的丢帧时间码。

tc24hmax

如果设置为 1,时间码选项的输出将在 24 小时时回滚。 默认值是 0(禁用)。

text

将要绘制的文本字符串。文本必须是由UTF-8编码的字符序列。本参数在未指定文件参数时为必填项。文本文件.

textfile

包含将要绘制文本的文本文件。文本必须是由UTF-8编码的字符序列。

本参数在未指定文本字符串参数时为必填项。文本.

如果同时指定了文本文本文件则会抛出错误。

text_source

如果希望使用副数据的检测边界框中的文本数据,文本来源应设置为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

最大字形高度,即渲染文本中所有字形的最大高度,相当于上升值 - 下降值.

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.74.2 文本扩展

如果expansion设置为strftime,则过滤器会识别strftimeC函数所接受的序列,并根据提供的文本进行扩展。请查看strftime的文档。此功能已被替代为使用normal扩展,以及gmtimelocaltime扩展函数。

如果expansion设置为none,文本将以原样打印。

如果expansion设置为normal(这是默认设置),则使用以下扩展机制。

反斜杠字符‘\’,后面跟随任何字符,总是扩展为第二个字符。

类似于%{...}的序列会被扩展。大括号之间的文本是一个函数名,可能后跟参数,以‘:’分隔。如果参数包含特殊字符或分隔符(‘:’或‘}’),它们需要进行转义。

注意,它们可能需要在过滤器参数字符串中的值、过滤器图描述中的过滤器参数,甚至shell中进行最多四层转义。使用带有text选项的文本文件可以避免这些问题。textfile以下函数可用:

The following functions are available:

expr, e

表达式求值结果。

它必须带有一个参数,用于指定需要求值的表达式,该表达式接受与x值。注意,并非所有常量都应该使用,例如在评估表达式时,文本大小是未知的,因此常量text_wtext_h将具有未定义的值。

expr_int_format, eif

评估表达式的值并以格式化整数输出。

第一个参数是要评估的表达式,与expr函数一样。 第二个参数指定输出格式。允许的值是‘x’, ‘X’, ‘d’和‘u’。它们的处理方式与printf函数完全相同。 第三个参数是可选的,用于设置输出占用的位置数。 它可以用于从左侧添加零填充。

gmtime

表达滤镜运行时间的UTC时间。 它可以接受一个参数:一个strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,它以可选指定的位数打印秒的分数。

localtime

表达滤镜运行时间的本地时区时间。 它可以接受一个参数:一个strftimeC函数格式字符串。 格式字符串扩展支持变量%[1-6]N,它以可选指定的位数打印秒的分数。

metadata

帧的元数据。接受一个或两个参数。

第一个参数是必需的,指定元数据键。

第二个参数是可选的,指定默认值,当元数据键未找到或为空时使用。

可用元数据可通过检查以TAG开头的条目来识别,这些条目包含在通过运行ffprobe -show_frames.

在引导至drawtext滤镜的滤镜中生成的字符串元数据也可用。

n, frame_num

从0开始的帧编号。

pict_type

当前图片类型的单个字符描述。

pts

当前帧的时间戳。 它可以接受最多三个参数。

第一个参数是时间戳的格式;默认值为flt表示以微秒精度的秒的十进制数;hms表示格式化的[-]HH:MM:SS.mmm时间戳,精度为毫秒。gmtime表示以UTC时间格式化的帧时间戳;localtime表示以本地时区时间格式化的帧时间戳。

第二个参数是添加到时间戳的偏移量。

如果格式设置为hms,则可以提供第三个参数24HH以使格式化时间戳的小时部分以24小时制(00-23)呈现。

如果格式设置为localtimegmtime,则可以提供第三个参数:一个strftimeC函数格式字符串。 默认情况下,YYYY-MM-DD HH:MM:SS格式将被使用。

39.74.3 命令

该滤镜支持通过命令改变参数:

reinit

更改现有滤镜参数。

参数的语法与调用滤镜时相同,例如

fontsize=56:fontcolor=green:text='Hello World'

完整的滤镜调用将是这样的:

sendcmd=c='56.0 drawtext reinit fontsize=56\:fontcolor=green\:text=Hello\\ World'

如果整个参数不能被解析或应用为有效值,那么滤镜将继续使用其现有参数。

以下选项也支持作为命令:

  • x
  • y
  • 透明度
  • 字体大小
  • 字体颜色
  • 框颜色
  • 边框颜色
  • 阴影颜色
  • 框宽度
  • 框高度
  • 框边框宽度
  • 行间距
  • 文本对齐
  • 阴影x轴
  • 阴影y轴
  • 边框宽度

39.74.4 示例

  • 使用FreeSerif字体绘制“测试文本”,使用默认值作为可选参数。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text'"
    
  • 使用FreeSerif字体,大小为24,在x=100和y=50的位置(从屏幕左上角计算)绘制‘测试文本’,文本为黄色,周围有一个红色的框。文本和框的透明度均为20%。
    drawtext="fontfile=/usr/share/fonts/truetype/freefont/FreeSerif.ttf: text='Test Text':\
              x=100: y=50: fontsize=24: fontcolor=yellow@0.2: box=1: boxcolor=red@0.2"
    

    注意,如果参数列表中没有使用空格,则无需使用双引号。

  • 在视频帧的中心显示文本:
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=(w-text_w)/2:y=(h-text_h)/2"
    
  • 在随机位置显示文本,每30秒切换到一个新位置:
    drawtext="fontsize=30:fontfile=FreeSerif.ttf:text='hello world':x=if(eq(mod(t\,30)\,0)\,rand(0\,(w-text_w))\,x):y=if(eq(mod(t\,30)\,0)\,rand(0\,(h-text_h))\,y)"
    
  • 在视频帧的最后一排显示从右到左滑动的文本行。文件LONG_LINE被假定为包含单行且没有换行符。
    drawtext="fontsize=15:fontfile=FreeSerif.ttf:text=LONG_LINE:y=h-line_h:x=-50*t"
    
  • 显示文件中的内容CREDITS从帧的底部滚动向上。
    drawtext="fontsize=20:fontfile=FreeSerif.ttf:textfile=CREDITS:y=h-20*t"
    
  • 在输入视频的中心绘制一个绿色的单独字母“g”。字形基线被置于屏幕高度的一半位置。
    drawtext="fontsize=60:fontfile=FreeSerif.ttf:fontcolor=green:text=g:x=(w-max_glyph_w)/2:y=h/2-ascent"
    
  • 每三秒显示一秒的文本:
    drawtext="fontfile=FreeSerif.ttf:fontcolor=white:x=100:y=x/dar:enable=lt(mod(t\,3)\,1):text='blink'"
    
  • 使用fontconfig设置字体。注意冒号需要进行转义。
    drawtext='fontfile=Linux Libertine O-40\\:style=Semibold:text=FFmpeg'
    
  • 绘制“测试文本”并根据视频高度设置字体大小。
    drawtext="text='Test Text': fontsize=h/30: x=(w-text_w)/2: y=(h-text_h*2)"
    
  • 打印实时编码的日期(参见strftimeC函数的文档):
    drawtext='fontfile=FreeSans.ttf:text=%{localtime\:%a %b %d %Y}'
    
  • 显示渐入渐出的文字(出现/消失):
    #!/bin/sh
    DS=1.0 # display start
    DE=10.0 # display end
    FID=1.5 # fade in duration
    FOD=5 # fade out duration
    ffplay -f lavfi "color,drawtext=text=TEST:fontsize=50:fontfile=FreeSerif.ttf:fontcolor_expr=ff0000%{eif\\\\: clip(255*(1*between(t\\, $DS + $FID\\, $DE - $FOD) + ((t - $DS)/$FID)*between(t\\, $DS\\, $DS + $FID) + (-(t - $DE)/$FOD)*between(t\\, $DE - $FOD\\, $DE) )\\, 0\\, 255) \\\\: x\\\\: 2 }"
    
  • 水平对齐多个独立的文本。注意max_glyph_a以及fontsize值包含在y偏移量中。
    drawtext=fontfile=FreeSans.ttf:text=DOG:fontsize=24:x=10:y=20+24-max_glyph_a,
    drawtext=fontfile=FreeSans.ttf:text=cow:fontsize=24:x=80:y=20+24-max_glyph_a
    
  • 绘制特殊lavf.image2dec.source_basename元数据到每个帧上,如果不存在这样的元数据,则绘制字符串“NA”。注意image2解复用器必须启用选项-export_path_metadata 1以使这些特殊元数据字段对滤镜可用。
    drawtext="fontsize=20:fontcolor=white:fontfile=FreeSans.ttf:text='%{metadata\:lavf.image2dec.source_basename\:NA}':x=10:y=10"
    

有关libfreetype的更多信息,请查看:http://www.freetype.org/.

有关fontconfig的更多信息,请查看:http://freedesktop.org/software/fontconfig/fontconfig-user.html.

关于 libfribidi 的更多信息,请查看:http://fribidi.org/.

关于 libharfbuzz 的更多信息,请查看:https://github.com/harfbuzz/harfbuzz.

39.75 边缘检测

检测并绘制边缘。该滤镜使用 Canny 边缘检测算法。

该滤镜接受以下选项:

low
high

设置 Canny 阈值算法使用的低高阈值。

高阈值选择“强”边缘像素,然后通过低阈值选择的“弱”边缘像素通过8连通性连接起来。

阈值必须选择在范围 [0,1] 内,并且应小于或等于.

默认值为20/255,默认值为50/255.

mode

定义绘图模式。

wires

在黑色背景上绘制白色/灰色线框。

colormix

混合颜色以创建绘画/卡通效果。

canny

对所有选择的平面应用 Canny 边缘检测器。

默认值为线框.

planes

选择要过滤的平面。默认情况下,过滤所有可用平面。

39.75.1 示例

  • 使用自定义值进行标准边缘检测以控制滞后阈值:
    edgedetect=low=0.1:high=0.4
    
  • 不使用阈值进行绘画效果:
    edgedetect=mode=colormix:high=0
    

39.76 elbg

使用 ELBG (增强型 LBG) 算法应用海报化效果。

对于每个输入图像,滤镜将根据代码簿长度(即输出颜色的数量)计算从输入到输出的最佳映射。

该滤镜接受以下选项。

codebook_length, l

设置代码簿长度。值必须为正整数,表示输出的颜色数量。默认值是 256。

nb_steps, n

设置最大迭代次数以计算最佳映射。值越高结果越好,同时计算时间也更长。默认值是 1。

seed, s

设置随机种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定或显式设置为 -1,滤镜将尽其努力使用良好的随机种子。

pal8

设置输出像素格式为 pal8 。此选项无法与代码簿长度大于 256 一起使用。默认情况下禁用。

use_alpha

在量化计算中包括 alpha 值。可以创建调色盘化的输出图像 (例如 PNG8),实现多次 alpha 平滑混合。

39.77 熵

测量视频帧颜色通道直方图的灰度熵。

它接受以下参数:

mode

可以是normaldiff。默认是normal.

diff模式测量直方图的增量值的熵,即相邻直方图值的绝对差。

39.78 epx

应用设计用于像素艺术的 EPX 放大滤镜。

它接受以下选项:

n

设置缩放维度:2用于2xEPX, 3用于3xEPX。默认是3.

39.79 eq

设置亮度、对比度、饱和度和近似伽马调整。

滤镜接受以下选项:

contrast

设置对比度表达式。值必须是范围内的浮点值-1000.01000.0。默认值是“1”。

brightness

设置亮度表达式。值必须是范围内的浮点值-1.01.0。默认值是“0”。

saturation

设置饱和度表达式。值必须是范围内的浮点值0.03.0。默认值是“1”。

gamma

设置伽马表达式。值必须是范围内的浮点值0.110.0。默认值是“1”。

gamma_r

设置红色伽马表达式。值必须是范围内的浮点值0.110.0。默认值是“1”。

gamma_g

设置绿色伽马表达式。值必须是范围内的浮点值0.110.0。默认值是“1”。

gamma_b

设置蓝色伽马表达式。值必须是范围内的浮点值0.110.0。默认值是“1”。

gamma_weight

设置伽马权重表达式。可以用来减少高伽马值对图像明亮区域的影响,例如防止过度放大使其完全白化。值必须是范围内的浮点值0.01.0。值为0.0会完全关闭伽马校正,而1.0会保持其全部强度。默认值是“1”。

eval

设置何时评估亮度、对比度、饱和度和伽马表达式。

它接受以下值:

init

仅在滤镜初始化或处理命令时评估表达式一次

frame

对每个输入帧评估表达式

默认值是‘init’.

表达式接受以下参数:

n

从 0 开始的输入帧的帧计数

pos

输入文件中对应数据包的字节位置,若未指定则为 NAN;已废弃,请勿使用

r

输入视频的帧率,若未知输入帧率则为 NAN

t

以秒为单位表示的时间戳,若未知输入时间戳则为 NAN

39.79.1 命令

该滤镜支持以下命令:

contrast

设置对比度表达式。

brightness

设置亮度表达式。

saturation

设置饱和度表达式。

gamma

设置伽马表达式。

gamma_r

设置伽马红表达式。

gamma_g

设置伽马绿表达式。

gamma_b

设置伽马蓝表达式。

gamma_weight

设置伽马权重表达式。

该命令接受相应选项的相同语法。

如果指定的表达式无效,则保持当前值。

39.80 腐蚀

对视频应用腐蚀效果。

此滤镜通过局部(3x3)最小值替换像素。

接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认为65535。 如果为0,平面将保持不变。

coordinates

指定要参考的像素标志。默认值为255,即使用所有八个像素。

局部3x3坐标的标志映射如下:

1 2 3 4 5 6 7 8

39.80.1 命令

该滤镜支持上述所有选项作为命令.

39.81 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

指定使用的插值方式。默认是四点插值。接受以下值之一:

2p

两点插值。

4p

四点插值。

6p

六点插值。

39.81.1 命令

此滤镜支持相同命令作为选项。

39.82 曝光

调整视频流的曝光。

该滤镜接受以下选项:

exposure

设置曝光校正值(单位EV)。允许范围为-3.0到3.0 EV。 默认值为0 EV。

black

设置黑电平校正。允许范围为-1.0到1.0。 默认值为0。

39.82.1 命令

此滤镜支持相同命令作为选项。

39.83 提取平面

从输入视频流中提取颜色通道组件并转换为单独的灰度视频流。

该滤镜接受以下选项:

planes

设置要提取的平面。

平面可用值为:

y
u
v
a
r
g
b

选择输入中不可用的平面会导致错误。 这意味着您不能同时选择r, g, b平面与y, u, v平面。

39.83.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.84 渐变

对输入视频应用渐入/渐出效果。

接受以下参数:

type, t

效果类型可以是"in"(渐入)或"out"(渐出)。 默认值为in.

start_frame, s

指定开始应用渐变效果的帧号。默认值为0。

nb_frames, n

渐变效果持续的帧数。在渐入效果结束时,输出视频将与输入视频具有相同的强度。 在渐出转换结束时,输出视频将填充为选定的color。 默认值为25。

alpha

如果设置为1,仅对存在于输入中的透明通道应用渐变。 默认值为0。

start_time, st

确保渐变效果的开始帧的时间戳(以秒为单位)。如果同时指定了开始帧和开始时间,则渐变将在两者中较晚的一个开始。 默认值为0。

duration, d

渐变效果的持续时间(以秒为单位)。在渐入效果结束时,输出视频与输入视频具有相同强度;在渐出转换结束时,输出视频将填充为选定的color。 如果同时指定了持续时间和帧数,则使用持续时间。默认值为0(默认使用帧数)。

color, c

指定渐变的颜色。默认值为"黑色"。

39.84.1 示例

  • 视频的前30帧渐入:
    fade=in:0:30
    

    上面的命令等价于:

    fade=t=in:s=0:n=30
    
  • 从一个200帧的视频中最后45帧渐出:
    fade=out:155:45
    fade=type=out:start_frame=155:nb_frames=45
    
  • 一个1000帧的视频首25帧渐入,最后25帧渐出:
    fade=in:0:25, fade=out:975:25
    
  • 前5帧的视频变为黄色,然后第5到24帧渐入:
    fade=in:5:20:color=yellow
    
  • 对前25帧的视频渐入透明度:
    fade=in:0:25:alpha=1
    
  • 前5.5秒变为黑色,然后在0.5秒内渐入:
    fade=t=in:st=5.5:d=0.5
    

39.85 反馈

应用反馈视频滤镜。

此滤镜将裁剪后的输入帧传递到第二输出。 可以使用其他视频滤镜对其进行过滤。 滤镜从第二输入接收帧后, 该帧被覆盖到原始帧(第一输入)之上并传递到第一输出。

典型用途是只过滤帧的一部分。

该滤镜接受以下选项:

x
y

设置裁剪的左上位置。

w
h

设置裁剪的大小。

39.85.1 示例

  • 仅模糊视频帧左上矩形部分,大小为100x100,使用gblur滤镜。
    [in][blurin]feedback=x=0:y=0:w=100:h=100[out][blurout];[blurout]gblur=8[blurin]
    
  • 在视频帧左上部分绘制一个黑色框,大小为100x100,使用drawbox滤镜。
    [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.86 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.87 fftfilt

在频域对样本应用任意表达式。

dc_Y

调整图像亮度平面的直流值(增益)。滤镜 接受范围内的整数值01000。 默认值为0.

dc_U

调整图像第一个色度平面的直流值(增益)。 滤镜接受范围内的整数值01000。 默认值为0.

dc_V

调整图像第二个色度平面的直流值(增益)。 滤镜接受范围内的整数值01000。 默认值为0.

weight_Y

设置亮度平面的频域权重表达式。

weight_U

设置第一个色度平面的频域权重表达式。

weight_V

设置第二个色度平面的频域权重表达式。

eval

设置表达式的评估时机。

它接受以下值:

init

仅在滤镜初始化时评估表达式一次。

frame

为每个输入帧评估表达式。

默认值是‘init’.

滤镜接受以下变量:

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

N

输入帧的数量,从0开始。

WS
HS

水平和垂直处理的FFT数组大小。

39.87.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.88 field

使用步幅算术从交错图像中提取单个场,以避免浪费CPU时间。 输出帧标记为非交错。

该滤镜接受以下选项:

type

指定是否提取顶部场(如果值为0top)或底部场(如果值为1bottom).

39.89 fieldhint

通过复制周围帧的顶部和底部场来创建新帧, 这些帧由提示文件中的数字提供。

hint

设置包含提示的文件:绝对/相对帧数。

剪辑中的每一帧必须对应一个行。每行必须包含两个 以逗号分隔的数字,后面可选跟-+。 文件中每行提供的数字不能超出[N-1,N+1]范围,其中N是absolute模式的当前帧编号或[-1, 1]范围 对于relative模式。第一个数字表示从哪个帧获取顶部场, 第二个数字表示从哪个帧获取底部场。

如果后面可选跟+输出帧将被标记为交错, 否则如果跟-输出帧将被标记为渐进,否则 帧将标记为与输入帧相同。 如果后面可选跟t输出帧将只使用顶部场,或者在b的情况下它将只使用底部场。 如果行以#;开头,则跳过该行。

mode

可以是项absoluterelativepattern。默认值为absolutepattern模式与relative模式相同,只不过文件末尾如果有更多帧 需要处理而不是hint时,会重新从文件开头读取。

文件前几个行的示例:hint模式:relative

0,0 - # first frame
1,0 - # second frame, use third's frame top field and second's frame bottom field
1,0 - # third frame, use fourth's frame top field and third's frame bottom field
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -
0,0 -
1,0 -
1,0 -
1,0 -
0,0 -

39.90 fieldmatch

用于反向电影转码的字段匹配滤镜。用于从经过电影转码的流中重建 渐进帧。该滤镜不会删除重复帧,因此为了实现完整的反向电影转码,fieldmatch需要在滤镜图中跟随一个降采样滤镜,例如decimate过滤。

将字段匹配与降采样分离的动机尤其在于可能将一个后备的去交错滤镜插入其间。 如果源具有混合电影转码和真正交错内容,fieldmatch将无法匹配交错部分的字段。 但这些残留的梳理帧将被标记为交错,因此稍后的滤镜如yadif可以在降采样之前对其进行去交错。

除了各种配置选项外,fieldmatch可以接受一个可选的第二个流,通过ppsrc选项激活。如果启用, 帧的重建将基于来自第二个流的字段和帧。这使第一个输入可以进行预处理, 以帮助滤镜的各种算法,同时保持输出无损 (假设字段匹配正确)。典型情况下,可以使用一个与字段相关的去噪器, 或者进行亮度/对比度调整。

请注意,该滤镜使用与TIVTC/TFM(AviSynth项目)和 VIVTC/VFM(VapourSynth项目)相同的算法。后者是TFM的简化克隆,而fieldmatch基于它。尽管语义和使用非常接近,其行为和选项名称可能有所不同。

The decimate滤镜目前仅适用于固定帧率输入。 如果您的输入具有混合电影转码(30fps)和渐进内容,例如较低帧率24fps,请使用以下 滤镜链以生成必要的固定帧率流:dejudder,fps=30000/1001,fieldmatch,decimate.

该滤镜接受以下选项:

order

指定输入流的假定场序。可用值是:

auto

自动检测场序(使用FFmpeg的内部场序值)。

bff

假定底部场优先。

tff

假定顶部场优先。

请注意,有时建议不要相信流通告的场序。

默认值为auto.

mode

设置匹配模式或策略。pc模式是最安全的,因为它不会因重复帧而在可能的情况下造成卡顿,但如果有错误的编辑或混合场,则可能会输出梳状帧,而实际上可能存在好的匹配。另一方面,pcn_ub模式在创建卡顿方面风险最大,但几乎总能找到一个好的帧。如果是其他值,它们都介于上述两者之间。pcpcn_ub在造成卡顿和重复帧的风险以及在糟糕编辑、孤立场、混合场等情况下找到好匹配之间。

有关 p/c/n/u/b 的更多详细信息,请参阅p/c/n/u/b 的含义章节。

可用值为:

pc

2 路匹配 (p/c)

pc_n

2 路匹配,仍然梳状则尝试第 3 次匹配 (p/c + n)

pc_u

2 路匹配,仍然梳状则按相同顺序尝试第 3 次匹配 (p/c + u)

pc_n_ub

2 路匹配,仍然梳状则尝试第 3 次匹配,仍然梳状则尝试第 4/5 次匹配 (p/c + n + u/b)

pcn

3 路匹配 (p/c/n)

pcn_ub

3 路匹配,最初的 3 次匹配都检测到梳状,则尝试第 4/5 次匹配 (p/c/n + u/b)

括号中表示为该模式要使用的匹配方式(假定order=tff(以及field开启自动).

速度方面pc模式是速度最快的,pcn_ub是最慢的。

默认值为pc_n.

ppsrc

将主输入流标记为预处理输入,并启用辅助输入流作为干净来源以选择场。有关详细信息,请参见滤镜介绍。它与 VFM/TFM 中的clip2功能相似。

默认值为0(禁用)。

field

设置匹配的场。建议将其设置为与order相同的值,除非使用该设置时出现匹配失败。在某些情况下,更改用于匹配的场可以对匹配性能产生重大影响。可用值为:

auto

自动(与order).

bottom

从底部场匹配。

top

从顶部场匹配。

默认值为自动.

mchroma

设置是否在匹配比较中包括色度。在大多数情况下,建议保持启用状态。仅在剪辑存在严重色度问题(如强烈的彩虹效应或其他伪像)时将其设置为0。设置为0还可用于加快速度,但会牺牲一些准确性。

默认值为1.

y0
y1

定义排除带以排除从y0y1之间的线,这些线不会被包含在场匹配决策中。排除带可用于忽略字幕、徽标或可能影响匹配的其他内容。y0设置起始扫描线,y1设置结束线;在y0y1之间(包括y0y1的所有线)将被忽略。设置y0y1为相同值将禁用此功能。y0y1默认值为0.

scthresh

设置场景变换检测阈值,以最大变换的百分比为基准,作用于亮度平面。适合的值在[8.0, 14.0]范围内。场景变换检测仅在combmatch=sc情形下相关。scthresh的范围为[0.0, 100.0].

默认值为12.0.

combmatch

combatch不为, fieldmatch时,将会根据匹配的梳状得分来决定最终的匹配结果。可用值为:

none

不根据梳状得分进行最终匹配。

sc

仅在检测到场景变换时使用梳状得分。

full

始终使用梳状得分。

默认值为sc.

combdbg

强制fieldmatch计算某些匹配的梳状指标并打印它们。此设置在 TFM/VFM 中被称为micout。可用值为:

none

不强制计算。

pcn

强制 p/c/n 计算。

pcnub

强制 p/c/n/u/b 计算。

默认值为.

cthresh

这是用于梳状帧检测的区域梳状阈值。这基本上控制梳状帧检测中梳状效果的“强度”或“可见性”。较大的值意味着必须更明显的梳状效果,较小的值意味着不那么明显或强烈的梳状效果仍然可以被检测。有效范围为-1(每个像素都会被检测为梳状) 到255(所有像素都不会被检测为梳状)。这基本上是像素的差值设置。好的范围是[8, 12].

默认值为9.

chroma

设置是否在梳状帧决策中考虑色度。仅当源存在色度问题(如彩虹效应等)并导致使用色度启用时的梳状帧检测出现问题时禁用此功能。实际上,使用chroma=0通常更可靠,除非源仅存在色度梳状的情况。

默认值为0.

blockx
blocky

分别设置用于梳状帧检测的窗口在 x 轴和 y 轴上的大小。这与combpel像素要求在检测为梳状后,设置为梳状帧的区域大小有关。有关更多信息,请参阅combpel参数描述。可能的值为从 4 到 512 的任何 2 的整数次幂。

默认值为16.

combpel

在帧的任何blocky乘以blockx大小块内检测到梳状像素的数量,以决定该帧是否为梳状帧。虽然cthresh控制梳状的“可见性”,但此设置控制帧的任何局部区域(由blockxblocky设置定义的窗口)中的梳状帧的“数量”。最小值为0,最大值为blocky x blockx(在该值时不会检测任何帧为梳状帧)。此设置在 TFM/VFM 中被称为MI

默认值为80.

39.90.1 p/c/n/u/b 的含义

39.90.1.1 p/c/n

我们假设以下为经过拉伸的流:

Top fields:     1 2 2 3 4
Bottom fields:  1 2 3 4 4

这些数字对应于相关字段的渐进帧。这里,第一个和第二个帧是渐进帧,第三个和第四个帧是混合帧,依此类推。

fieldmatch配置为从底部运行匹配时(field=底部)此输入流会被转换为如下样式:

Input stream:
                T     1 2 2 3 4
                B     1 2 3 4 4   <-- matching reference

Matches:              c c n n c

Output stream:
                T     1 2 3 4 4
                B     1 2 3 4 4

作为字段匹配的结果,我们可以看到一些帧被重复了。要执行完整的逆拉伸操作,您需要在此操作后使用一种抽取滤镜。例如,参见抽取滤镜。

采用从顶部字段匹配的相同操作(field=顶部)看起来如下:

Input stream:
                T     1 2 2 3 4   <-- matching reference
                B     1 2 3 4 4

Matches:              c c p p c

Output stream:
                T     1 2 2 3 4
                B     1 2 2 3 4

在这些示例中,我们可以看到p, cn是什么意思;基本上,它们指的是与性别相反的帧字段:

  • p匹配上一帧中性别相反的字段
  • c匹配当前帧中性别相反的字段
  • n匹配下一帧中性别相反的字段

39.90.1.2 u/b

ub匹配有些特别的地方是它们从性别相反的标志匹配。在以下示例中,我们假设当前正在匹配第2帧(顶部:2,底部:2)。根据匹配,每个匹配字段的上方和下方都会放置一个“x”。 matching are a bit special in the sense that they match from the opposite parity flag. In the following examples, we assume that we are currently matching the 2nd frame (Top:2, bottom:2). According to the match, a ’x’ is placed above and below each matched fields.

使用底部匹配(field=底部):

Match:           c         p           n          b          u

                 x       x               x        x          x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x         x           x        x              x

Output frames:
                 2          1          2          2          2
                 2          2          2          1          3

使用顶部匹配(field=顶部):

Match:           c         p           n          b          u

                 x         x           x        x              x
  Top          1 2 2     1 2 2       1 2 2      1 2 2      1 2 2
  Bottom       1 2 3     1 2 3       1 2 3      1 2 3      1 2 3
                 x       x               x        x          x

Output frames:
                 2          2          2          1          2
                 2          1          3          2          2

39.90.2 示例

一个顶部场优先拉伸流的简单IVTC:

fieldmatch=order=tff:combmatch=none, decimate

高级IVTC,备选使用yadif滤镜针对仍然混合的帧:

fieldmatch=order=tff:combmatch=full, yadif=deint=interlaced, decimate

39.91 fieldorder

转换输入视频的场顺序。

它接受以下参数:

order

输出场顺序。有效值为tff表示顶部字段优先,或者bff表示底部字段优先。

默认值为‘tff’.

通过向上或向下移动画面内容一行,并用适当的画面内容填充剩余行来完成转换。这种方法与大多数广播场顺序转换器一致。

如果输入视频没有标记为隔行扫描,或者已经标记为所需的输出场顺序,则此滤镜不会改变传入视频。

当转换到或从PAL DV素材(通常是底部场优先)时非常有用。

例如:

ffmpeg -i in.vob -vf "fieldorder=bff" out.dv

39.92 fillborders

填充输入视频的边框,而不改变视频流的尺寸。有时视频的四个边缘会有垃圾数据,而您可能不希望裁剪视频输入以保持尺寸为某些数字的倍数。

此滤镜接受以下选项:

left

从左边框填充的像素数。

right

从右边框填充的像素数。

top

从上边框填充的像素数。

bottom

从下边框填充的像素数。

mode

设置填充模式。

它接受以下值:

smear

使用最外层像素填充像素

mirror

使用镜像(半样本对称)填充像素

fixed

使用常量值填充像素

reflect

使用反射(全样本对称)填充像素

wrap

使用环绕填充像素

fade

淡化像素至常量值

margins

使用靠近边框的加权平均像素填充顶部和底部的像素

默认值为smear.

color

为固定或淡化模式中的像素设置颜色。默认是black.

39.92.1 命令

此滤镜支持与选项相同的命令。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.93 find_rect

在输入视频中找到一个矩形对象。

要搜索的对象必须指定为使用object选项定义的灰度图像(gray8)。

对于每个可能的匹配,都将计算一个分数。如果分数达到指定的阈值,则会认为找到了对象。

如果输入视频包含多个对象实例,滤镜将只找到其中的一个。

当对象被找到时,在匹配的帧中会设置以下元数据条目:

lavfi.rect.w

对象的宽度

lavfi.rect.h

对象的高度

lavfi.rect.x

对象的x位置

lavfi.rect.y

对象的y位置

lavfi.rect.score

找到的对象的匹配分数

它接受以下选项:

object

对象图像的文件路径,需要是灰度图像(gray8)。

threshold

检测阈值,以0-1范围内的小数表示。

阈值为0.01表示只有精确匹配,阈值为0.99表示几乎所有都匹配。

默认值是0.5。

mipmaps

mipmaps数量,默认为3。

xmin, ymin, xmax, ymax

指定要搜索的矩形。

discard

丢弃未检测到对象的帧。默认是禁用的。

39.93.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.94 填充区域

用相同像素分量的值填充区域,并将其替换为其他值。

它接受以下选项:

x

设置像素x坐标。

y

设置像素y坐标。

s0

设置源#0分量值。

s1

设置源#1分量值。

s2

设置源#2分量值。

s3

设置源#3分量值。

d0

设置目标#0分量值。

d1

设置目标#1分量值。

d2

设置目标#2分量值。

d3

设置目标#3分量值。

39.95 格式化

将输入视频转换为指定的像素格式之一。Libavfilter将尝试选择适合作为下一个过滤器输入的像素格式。

它接受以下参数:

pix_fmts

一个用’|’分隔的像素格式名称列表,例如"pix_fmts=yuv420p|monow|rgb24"。

color_spaces

一个用’|’分隔的色彩空间名称列表,例如"color_spaces=bt709|bt470bg|bt2020nc"。

color_ranges

一个用’|’分隔的色彩范围名称列表,例如"color_ranges=tv|pc"。

39.95.1 示例

  • 将输入视频转换为yuv420p格式
    format=pix_fmts=yuv420p
    

    将输入视频转换为列表中的任何格式

    format=pix_fmts=yuv420p|yuv444p|yuv410p
    

39.96 帧率

通过必要时复制或丢弃帧将视频转换为指定的恒定帧率。

它接受以下参数:

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.96.1 示例

  • 一个典型的用法是将帧率设置为25:
    fps=fps=25
    
  • 将帧率设置为24,使用缩写和舍入到最近的方法:
    fps=fps=film:round=near
    

39.97 帧打包

将两个不同的视频流打包成一个立体视频,在支持的编解码器上设置适当的元数据。这两视图需要具有相同的尺寸和帧率,当较短的视频结束时处理将停止。请注意,您可以方便地调整视图属性使用scalefps过滤器。

它接受以下参数:

format

所需的打包格式。支持的值有:

sbs

视图在彼此旁边(默认值)。

tab

视图位于彼此顶部。

lines

视图按行打包。

columns

视图按列打包。

frameseq

视图按时间交织。

一些示例:

# Convert left and right views into a frame-sequential video
ffmpeg -i LEFT -i RIGHT -filter_complex framepack=frameseq OUTPUT

# Convert views into a side-by-side video with the same output resolution as the input
ffmpeg -i LEFT -i RIGHT -filter_complex [0:v]scale=w=iw/2[left],[1:v]scale=w=iw/2[right],[left][right]framepack=sbs OUTPUT

39.98 帧率调整

通过从源帧插入新的视频输出帧来改变帧率。

此过滤器设计为无法正确处理交错视频。如果您希望更改交错视频的帧率,则需要在使用此过滤器之前进行去交错,并在使用此过滤器之后重新交错。

以下是接受选项的描述。

fps

指定输出每秒的帧数。此选项也可以单独指定为一个值。默认值为50.

interp_start

指定一个范围的开始,在该范围内输出帧将通过两帧的线性插值创建。范围为[0-255],默认值为15.

interp_end

指定一个范围的结束,在该范围内输出帧将通过两帧的线性插值创建。范围为[0-255],默认值为240.

scene

指定检测场景变化的级别,范围是0到100,用于表示一个新场景的可能性;较低的值表示当前帧引入新场景的可能性较低,而较高的值表示当前帧更有可能是一个新场景。默认值为8.2.

flags

指定影响过滤器过程的标志。

可用的值对于标志是:

scene_change_detect, scd

使用选项scene的值启用场景变化检测。此标志默认启用。

39.99 帧步长

选择每N帧中的一帧。

此过滤器接受以下选项:

step

选择每step帧后的帧。允许的值是大于0的正整数。默认值是1.

39.100 冻结检测

检测已冻结的视频。

此过滤器在检测到输入视频在指定时长内内容没有显著变化时记录一条消息并设置帧元数据。视频冻结检测计算视频帧所有分量的平均绝对差并与噪声基础值进行比较。

打印的时间和持续时间以秒为单位表示。lavfi.freezedetect.freeze_start元数据键设置在时间戳等于或超过检测持续时间的第一帧,并包含冻结的第一帧的时间戳。lavfi.freezedetect.freeze_durationlavfi.freezedetect.freeze_end元数据键设置在冻结后的第一帧。

滤镜接受以下选项:

noise, n

设置噪声容忍度。可以指定为分贝(如果在指定值后加上"dB")或为0到1之间的差异比率。默认值为-60dB,或0.001。

duration, d

设置通知之前的冻结持续时间(默认值为2秒)。

39.101冻结帧

冻结视频帧。

此滤镜使用第二个输入中的帧冻结视频帧。

滤镜接受以下选项:

first

设置开始冻结的首帧编号。

last

设置结束冻结的最后一帧编号。

replace

设置第二个输入中的帧编号,将用于替换的帧。

39.102 Frei0r

对输入视频应用Frei0r效果。

要启用此滤镜的编译,您需要安装Frei0r头文件,并使用以下配置FFmpeg:--enable-frei0r.

它接受以下参数:

filter_name

加载的Frei0r效果的名称。如果定义了环境变量FREI0R_PATHFrei0r效果将在环境变量中指定的目录中搜索,这些目录是冒号分隔的列表。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,其中R, GB是0.0到1.0(含)之间的浮点数)或如(ffmpeg-utils)"颜色"部分中描述的颜色。, 位置(指定为X/Y,其中XY是浮点数)和/或字符串。

参数的数量和类型取决于加载的效果。如果效果参数未指定,则使用默认值。

39.102.1 示例

  • 应用distort0r效果,设置前两个双精度参数:
    frei0r=filter_name=distort0r:filter_params=0.5|0.01
    
  • 应用colordistance效果,颜色作为第一个参数:
    frei0r=colordistance:0.2/0.3/0.4
    frei0r=colordistance:violet
    frei0r=colordistance:0x112233
    
  • 应用透视效果,指定图像的左上角和右上角位置:
    frei0r=perspective:0.2/0.2|0.8/0.2
    

更多信息,请参考http://frei0r.dyne.org

39.102.2 命令

此滤镜支持filter_params选项作为命令.

39.103 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.104 fsync

与文件中的外部映射同步视频帧。

对于地图文件中给定的每个输入PTS,它将根据需要丢弃或创建尽可能多的帧,以重新创建地图文件给出的输出帧序列。

此滤镜用于通过fps滤镜重新创建帧率转换的输出帧,记录到地图文件中使用ffmpeg选项-stats_mux_pre,并对相应的帧进行进一步处理,例如质量比较。

地图文件的每行必须包含三个项目:每个输入帧的输入PTS(十进制)、输出PTS(十进制)和 输出时间基准(十进制/十进制),以空格分隔。 此文件格式与以下内容的输出一致:-stats_mux_pre_fmt="{ptsi} {pts} {tb}".

滤镜假定地图文件按输入PTS递增排序。

滤镜接受以下选项:

file, f

要使用的地图文件的文件名。

示例:

# Convert a video to 25 fps and record a MAP_FILE file with the default format of this filter
ffmpeg -i INPUT -vf fps=fps=25 -stats_mux_pre MAP_FILE -stats_mux_pre_fmt "{ptsi} {pts} {tb}" OUTPUT

# Sort MAP_FILE by increasing input PTS
sort -n MAP_FILE

# Use INPUT, OUTPUT and the MAP_FILE from above to compare the corresponding frames in INPUT and OUTPUT via SSIM
ffmpeg -i INPUT -i OUTPUT -filter_complex '[0:v]fsync=file=MAP_FILE[ref];[1:v][ref]ssim' -f null -

39.105 高斯模糊

应用高斯模糊滤镜。

滤镜接受以下选项:

sigma

设置水平西格玛,高斯模糊的标准偏差。默认值为0.5.

steps

设置高斯近似的步数。默认值为1.

planes

设置过滤的平面。默认情况下过滤所有平面。

sigmaV

设置垂直西格玛,如果为负值,则与sigma相同。默认值为-1.

39.105.1 命令

此滤镜支持与选项相同的命令。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

39.106 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_expr选项,或cr_expr选项,滤镜将自动选择YCbCr颜色空间。如果指定了某个red_expr, green_expr选项,或blue_expr如果指定了选项,它将选择一个RGB颜色空间。

如果没有定义其中一个色度表达式,则会回退到另一个表达式。如果未指定任何alpha表达式,它将评估为不透明值。如果未指定任何色度表达式,它们将评估为亮度表达式。

表达式可以使用以下变量和函数:

N

过滤后的帧的序列号,从0.

X
Y

当前样本的坐标。

W
H

图像的宽度和高度。

SW
SH

宽度和高度根据当前过滤的平面进行缩放。它是对应的亮度平面像素数量与当前平面像素数量之间的比率。例如,对于 YUV4:2:0 的值是1,1用于亮度平面,以及0.5,0.5用于色度平面。

T

当前帧的时间,以秒为单位表达。

p(x, y)

返回当前平面位置 (x,,) 的像素值。

lum(x, y)

返回亮度平面位置 (x,,) 的像素值。

cb(x, y)

返回蓝差色度平面位置 (x,,) 的像素值。如果没有这样的平面,返回0。

cr(x, y)

返回红差色度平面位置 (x,,) 的像素值。如果没有这样的平面,返回0。

r(x, y)
g(x, y)
b(x, y)

返回位置 (x,,) 的红/绿/蓝分量的像素值。如果没有这样的分量,返回0。

alpha(x, y)

返回alpha平面位置 (x,,) 的像素值。如果没有这样的平面,返回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.106.1 示例

  • 水平翻转图像:
    geq=p(W-X\,Y)
    
  • 生成一个二维正弦波,具有角度PI/3和100像素的波长:
    geq=128 + 100*sin(2*(PI/100)*(cos(PI/3)*(X-50*T) + sin(PI/3)*Y)):128:128
    
  • 生成一个花哨的神秘移动光源:
    nullsrc=s=256x256,geq=random(1)/hypot(X-cos(N*0.07)*W/2-W/2\,Y-sin(N*0.09)*H/2-H/2)^2*1000000*sin(N*0.02):128:128
    
  • 生成快速浮雕效果:
    format=gray,geq=lum_expr='(p(X,Y)+(256-p(X-4,Y-4)))/2'
    
  • 根据像素位置修改RGB分量:
    geq=r='X/W*r(X,Y)':g='(1-X/W)*g(X,Y)':b='(H-Y)/H*b(X,Y)'
    
  • 创建一个与输入大小相同的径向渐变(另见vignette滤镜):
    geq=lum=255*gauss((X/W-0.5)*3)*gauss((Y/H-0.5)*3)/gauss(0)/gauss(0),format=gray
    

39.107 gradfun

修复由8位色深截断引入到几乎平坦区域的条带伪影。在条带所在的地方插值出应该有的渐变,并对其进行抖动处理。

它设计仅用于回放。不要在有损压缩之前使用它,因为压缩往往会丢失抖动并重新引入条带。

它接受以下参数:

strength

过滤器将更改任一像素的最大量。这也是检测几乎平坦区域的阈值。可接收的值范围从0.51到64;默认值为1.2。超出范围的值将被裁剪到有效范围。

radius

适合渐变的邻域范围。较大的半径会使渐变更平滑,但也会防止过滤器修改靠近详细区域的像素值。可接受的值为8-32;默认值为16。超出范围的值将被裁剪到有效范围。

或者,可以将选项指定为一个平展的字符串:强度[:半径]

39.107.1 示例

  • 应用过滤器,使用3.5强度和半径值为8:
    gradfun=3.5:8
    
  • 指定半径,省略强度(它将回退到默认值):
    gradfun=radius=8
    

39.108 graphmonitor

显示各种过滤图统计信息。

使用此过滤器可以调试完整过滤图,特别是链接中填充排队帧的问题。

该过滤器接受以下选项:

size, s

设置视频输出大小。默认是hd720.

opacity, o

设置视频不透明度。默认是0.9。允许的范围是从01.

mode, m

设置输出模式标志。

标志的可用值是:

full

没有任何过滤。默认值。

compact

仅显示有排队帧的过滤器。

nozero

仅显示具有非零统计数据的过滤器。

noeof

仅显示具有非EOF统计数据的过滤器。

nodisabled

仅显示在时间轴中启用的过滤器。

flags, f

设置启用显示视频中统计数据的标志。

标志的可用值是:

none

关闭所有标志。

all

打开所有标志。

queue

显示每个链接中排队帧的数量。

frame_count_in

显示从过滤器提取的帧数。

frame_count_out

显示从过滤器输出的帧数。

frame_count_delta

显示上述两个值之间的帧数差值。

pts

显示当前过滤的帧PTS。

pts_delta

显示当前帧与上一帧之间的PTS差值。

time

显示当前过滤的帧时间。

time_delta

显示当前帧与上一帧之间的时间差。

timebase

显示过滤链接的时间基数。

format

显示过滤链接使用的格式。

size

显示过滤链接使用的视频尺寸或 audio 使用的音频通道数。

rate

显示过滤链接使用的视频帧率或音频采样率。

eof

显示链接输出状态。

sample_count_in

显示从过滤器提取的样本数。

sample_count_out

显示从滤镜中给出的样本数量。

sample_count_delta

显示上述两个值之间的样本增量数量。

disabled

显示时间线滤镜状态。

rate, r

设置输出流视频速率的上限,默认值是25。 这保证了输出视频帧速率不会高于此值。

39.109 灰世界

一种基于灰世界假设的颜色校正滤镜。

参见: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.110 灰边

一种颜色恒常性滤镜变体,通过灰边算法估计场景光源并相应校正场景颜色。

参见:https://staff.science.uva.nl/th.gevers/pub/GeversTIP07.pdf

该滤镜接受以下参数:

difford

要对场景应用的微分阶数。必须在 [0,2] 范围内选择,默认值为 1。

minknorm

用于计算Minkowski距离的参数。必须在 [0,20] 范围内选择,默认值为 1。设置为 0 时将得到最大值而非计算 Minkowski 距离。

sigma

要对场景应用的高斯模糊标准偏差。必须在 [0,1024.0] 范围内选择,默认值为 1。sigma* break_off_sigma(3) ) 不能等于 0,若difford大于 0。

39.110.1 示例

  • 灰边:
    greyedge=difford=1:minknorm=5:sigma=2
    
  • 最大边:
    greyedge=difford=1:minknorm=0:sigma=2
    

39.111 引导

应用引导滤镜,用于边缘保留平滑、去雾等。

该滤镜接受以下参数:

radius

设置以像素为单位的方框半径。 允许范围为 1 到 20。默认值为 3。

eps

设置正则化参数(平方)。 允许范围为 0 到 1。默认值为 0.01。

mode

设置滤镜模式。可以是basic或者fast。 默认是basic.

sub

为以下模式设置子采样比率fast。 范围为 2 到 64。默认值为 4。 在以下模式中不进行子采样basic

guidance

设置引导模式。可以是off或者on。默认是off。 如果是off,只需单个输入。 如果是on,需要两个分辨率和像素格式相同的输入。 第二个输入作为引导。

planes

设置要过滤的层。默认仅处理第一层。

39.111.1 命令

此滤镜支持所有上述选项作为命令.

39.111.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.112 haldclut

将 Hald CLUT 应用于视频流。

第一个输入是要处理的视频流,第二个是 Hald CLUT。 Hald CLUT 输入可以是简单的图片或完整的视频流。

该滤镜接受以下参数:

clut

设置将从第二个输入流处理哪些 CLUT 视频帧, 可以是第一个或者全部。默认是全部.

shortest

强制在最短输入结束时终止。默认是0.

repeatlast

在流结束后继续应用最后的 CLUT。值为0在 CLUT 的最后一帧处理后禁用滤镜。 默认是1.

haldclut还具有与lut3d(两个滤镜共享相同的内部结构)相同的插值选项。

此滤镜还支持framesync选项。

有关 Hald CLUT 的更多信息,请访问 Eskil Steenberg 的网站 (Hald CLUT 作者):http://www.quelsolaar.com/technology/clut.html.

39.112.1 命令

此滤镜支持interp选项作为命令.

39.112.2 工作流程示例

39.112.2.1 Hald CLUT 视频流

生成带有各种效果的标识性 Hald CLUT 流:

ffmpeg -f lavfi -i haldclutsrc=8 -vf "hue=H=2*PI*t:s=sin(2*PI*t)+1, curves=cross_process" -t 10 -c:v ffv1 clut.nut

注意:请确保使用无损编解码器。

然后使用haldclut将其应用于某些随机流:

ffmpeg -f lavfi -i mandelbrot -i clut.nut -filter_complex '[0][1] haldclut' -t 20 mandelclut.mkv

Hald CLUT 将应用于前 10 秒(持续时间为clut.nut),然后该 CLUT 流的最新图片将应用 到后续的mandelbrot流的帧。

39.112.2.2 带预览的 Hald CLUT

Hald CLUT 应为Level*Level*LevelxLevel*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.113 水平翻转

将输入视频水平翻转。

例如,使用以下命令水平翻转输入视频:ffmpeg:

ffmpeg -i in.avi -vf "hflip" out.avi

39.114 直方图均衡

此滤镜在帧基础上应用全局颜色直方图均衡。

可用于校正像素强度范围被压缩的视频。 滤镜将重新分布像素强度,使其在强度范围内均衡分布。 它可以被视为一个“自动调整对比度滤镜”。此滤镜仅对校正退化 或拍摄质量较差的源视频有用。

过滤器接受以下选项:

strength

确定要应用的均衡化程度。当强度降低时,像素强度的分布会越来越接近输入帧的分布。该值必须是范围[0,1]内的浮点数,默认值为0.200。

intensity

设置可以生成的最大强度并适当地缩放输出值。应按需要设置强度,然后如果需要以避免过度曝光,可以限制强度。该值必须是范围[0,1]内的浮点数,默认值为0.210。

antibanding

设置抗带状级别。如果启用,该过滤器将随机略微变化输出像素的亮度,以避免直方图中出现带状。可能的取值有none, weakstrong。默认值为none.

39.115 直方图

计算并绘制输入视频的颜色分布直方图。

所计算的直方图是图像中颜色分量分布的表示。

标准直方图显示图像中的颜色分量分布。显示每个颜色分量的颜色图表。根据输入格式,它显示当前帧中Y、U、V、A或R、G、B分量的分布。每个图表的下方显示一个颜色分量刻度计。

过滤器接受以下选项:

level_height

设置级别的高度。默认值为200。 允许范围是[50, 2048]。

scale_height

设置颜色刻度的高度。默认值为12。 允许范围是[0, 40]。

display_mode

设置显示模式。 它接受以下值:

stack

每个颜色分量的图形依次排列在彼此之下。

parade

每个颜色分量的图形并排排列。

overlay

显示信息与parade中的信息相同, 只是颜色分量的图形直接叠加在一起显示。

默认值为stack.

levels_mode

设置模式。可以是linearlogarithmic。 默认值为linear.

components

设置要显示哪些颜色分量。 默认值为7.

fgopacity

设置前景不透明度。默认值为0.7.

bgopacity

设置背景不透明度。默认值为0.5.

colors_mode

设置颜色模式。 它接受以下值:

whiteonblack
blackonwhite
whiteongray
blackongray
coloronblack
coloronwhite
colorongray
blackoncolor
whiteoncolor
grayoncolor

默认值为whiteonblack.

39.115.1 示例

  • 计算并绘制直方图:
    ffplay -i input -vf histogram
    

39.116 hqdn3d

这是一个高精度/高质量的三维去噪过滤器。它旨在减少图像噪声,产生平滑图像并使静态图像更加静止。它应当增强可压缩性。

它接受以下可选参数:

luma_spatial

一个非负的浮点数,用于指定空间亮度强度。默认值为4.0。

chroma_spatial

一个非负的浮点数,用于指定空间色度强度。默认值为3.0*亮度空间/4.0.

luma_tmp

一个浮点数,用于指定亮度时间强度。默认值为6.0*亮度空间/4.0.

chroma_tmp

一个浮点数,用于指定色度时间强度。默认值为亮度时间*色度空间/亮度空间.

39.116.1 命令

此过滤器支持与选项相同的命令。命令接受与相应选项相同的语法。

如果指定的表达式无效,则将其保持当前值。

39.117 hwdownload

将硬件帧下载到系统内存。

输入必须为硬件帧,输出必须为非硬件格式。并非所有格式都能在输出中支持——可能需要在图表中紧挨着插入一个额外的format过滤器,以获得支持的输出格式。

39.118 hwmap

将硬件帧映射到系统内存或另一个设备。

该过滤器具有多种不同的操作模式;具体使用哪种模式取决于输入和输出格式:

  • 硬件帧输入,普通帧输出

    将输入帧映射到系统内存并传递给输出。如果以后需要原始硬件帧(例如,在其顶部叠加其他内容后),则hwmap过滤器可以再次在下一模式中检索它。

  • 普通帧输入,硬件帧输出

    如果输入实际上是软件映射的硬件帧,则取消映射它——也就是返回原始硬件帧。

    否则,必须提供一个设备。在该设备上为输出创建新的硬件表面,然后将其映射回输入的软件格式,并将这些帧传递给先前的过滤器。然后,这将像hwupload过滤器一样工作,但当输入已经处于兼容格式时可能避免额外的拷贝。

  • 硬件帧输入和输出

    必须为输出提供一个设备,可以直接或使用derive_device选项。输入和输出设备必须是不同类型且兼容的——其确切含义取决于系统,但通常它意味着它们必须引用同一底层硬件环境(例如,相同的显卡)。

    如果输入帧最初是在输出设备上创建的,则取消映射以检索原始帧。

    否则,将帧映射到输出设备——在输出上创建与输入帧对应的新硬件帧。

接受以下额外参数:

mode

设置帧映射模式。一些组合是:

读取

映射的帧应该是可读的。

写入

映射的帧应该是可写的。

覆盖

映射将始终覆盖整个帧。

这可能在某些情况下提高性能,因为帧的原始内容无需加载。

直接

映射不能涉及任何拷贝。

在某些情况下,直接映射不可能或将具有意外属性时,创建映射到帧副本的间接映射。设置此标志确保映射是直接的,如果不可能,将会失败。

默认值为读取+写入如果未指定。

derive_device 类型

与初始化时所提供的设备不同,从输入帧所在的设备中派生一个新的设备,其类型为类型。在硬件到硬件映射中,反向映射——在接收方创建帧并将它们映射回源。这可能对于某些情况下必须进行某个方向的映射,但设备只支持相反方向的映射是必要的。

reverse

In a hardware to hardware mapping, map in reverse - create frames in the sink and map them back to the source. This may be necessary in some cases where a mapping in one direction is required but only the opposite direction is supported by the devices being used.

此选项危险——如果之前的过滤器对其输出有任何附加约束,可能会以未定义的方式破坏它。不要在未完全了解使用其含义的情况下使用它。

39.119 hwupload

将系统内存帧上传到硬件表面。

必须在过滤器初始化时提供要上传到的设备。如果使用ffmpeg,请通过-filter_hw_device选项或derive_device选项选择合适的设备。输入和输出设备必须是不同类型且兼容的——其确切含义取决于系统,但通常它意味着它们必须引用同一底层硬件环境(例如,相同的显卡)。

接受以下额外参数:

derive_device 类型

与初始化时所提供的设备不同,从输入帧所在的设备中派生一个新的设备,其类型为类型。

39.120 hwupload_cuda

将系统内存帧上传到CUDA设备。

它接受以下可选参数:

device

要使用的CUDA设备编号

39.121 hqx

应用一种为像素艺术设计的高质量放大滤镜。此滤镜最初由Maxim Stepin创建。

它接受以下选项:

n

设置缩放维度:2用于hq2x, 3用于hq3x4用于hq4x。 默认值是3.

39.122 hstack

水平堆叠输入视频。

所有流必须具有相同的像素格式和相同的高度。

请注意,此滤镜比使用覆盖填充滤镜创建相同输出更快。

该滤镜接受以下选项:

inputs

设置输入流的数量。默认值是2。

shortest

如果设置为1,当最短输入终止时强制输出终止。默认值是0。

39.123 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.124 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.125 hue

修改输入的色调和/或饱和值。

它接受以下参数:

h

指定色调角度(以度数表示)。它接受一个表达式,默认为"0"。

s

指定饱和值,范围为[-10,10]。它接受一个表达式,默认为"1"。

H

指定色调角度(以弧度表示)。它接受一个表达式,默认为"0"。

b

指定亮度值,范围为[-10,10]。它接受一个表达式,默认为"0"。

hH是互斥的,不能同时指定。

b, h, Hs选项值是包含以下常量的表达式:

n

从0开始计算的输入帧的帧计数

pts

以时间基单位表示的输入帧呈现时间戳

r

输入视频的帧率,如果输入帧率未知则为NAN

t

以秒表示的时间戳,如果输入时间戳未知则为NAN

tb

输入视频的时间基

39.125.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.125.2 命令

该滤镜支持以下命令:

b
s
h
H

修改输入视频的色调和/或饱和度和/或亮度。该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

39.126 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.127 hysteresis

通过连接分量将第一个流扩展到第二个流。这使得构建更强大的边缘掩模成为可能。

此滤镜接受以下选项:

planes

设置将被作为位图处理的平面,未处理的平面将从第一个流中复制。默认值0xf,所有平面将被处理。

threshold

设置用于过滤的阈值。如果像素分量值高于此值,则激活连接分量的滤波算法。默认值是0。

hysteresis滤镜还支持帧同步选项。

39.128 ICC检测

从嵌入式ICC配置文件(如果存在)中检测颜色空间,并相应地更新视频帧的标签。

此滤镜接受以下选项:

force

如果为真,帧的现有颜色空间标签将始终被来自ICC配置文件中检测到的值覆盖。否则,只有在标签为空时才会赋值。unknown默认启用。

39.129 ICC生成

生成ICC配置文件并附加到帧。

此滤镜接受以下选项:

color_primaries
color_trc

配置生成的ICC配置文件所对应的颜色空间。默认值为auto从输入帧的元数据推导值,适当时默认为BT.709/sRGB。

setparams滤镜以获取可能值的列表,但请注意unknown对于此滤镜不是有效值。

force

如果为真,即使覆盖现有ICC配置文件,仍会生成一个新的ICC配置文件。默认是禁用的。

39.130 身份分数

获取两个输入视频之间的身份分数。

此滤镜需要两个输入视频。

这两个输入视频必须具有相同的分辨率和像素格式,才能正常工作。此外,假定两个输入均具有相同数量的帧,并且逐帧进行比较。

获得的每个组件的平均值、最小值和最大身份分数通过日志系统打印输出。

滤镜将计算得到的每帧的身份得分存储在帧元数据中。

此滤镜还支持帧同步选项。

在以下示例中,输入文件main.mpg正在处理,与参考文件进行比较ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi identity -f null -

39.131 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.131.1 示例

详细检查视频前360帧的场序:

ffmpeg -i INPUT -filter:v idet,metadata=mode=print -frames:v 360 -an -f null -

idet滤镜将为每帧添加分析元数据,然后将其丢弃。最后,滤镜还会打印一份带有统计数据的最终报告。

39.132 il

隔行拆解或重组字段。

此滤镜允许处理隔行扫描图像场而不进行去隔行处理。隔行拆解将输入帧分成两个场(即所谓的半图片)。奇数行移动到输出图像的上半部分,偶数行移动到下半部分。您可以独立处理(滤波)它们,然后将其重新组合。

滤镜接受以下选项:

luma_mode, l
chroma_mode, c
alpha_mode, a

以下是亮度模式, 色度模式透明度模式的可选值:

none

不进行任何操作。

deinterleave, d

去隔行扫描字段,将一个字段放置于另一个上方。

interleave, i

合并字段。逆向去隔行扫描的效果。

默认值为none.

luma_swap, ls
chroma_swap, cs
alpha_swap, as

交换亮度/色度/透明度字段。交换奇数与偶数行。默认值为0.

39.132.1 命令

此滤镜支持以上所有选项作为命令。.

39.133 鼓起

对视频应用鼓起效果。

此滤镜通过仅考虑比原像素值高的像素值来替换原像素,使其变为局部(3x3)平均值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化,默认值为65535。如果为0,则平面保持不变。

39.133.1 命令

此滤镜支持以上所有选项作为命令。.

39.134 interlace, interlace_vulkan

从渐进内容简单生成隔行扫描。这结合了奇数帧的上场(或下场)行与偶数帧的下场(或上场)行,减半帧率同时保持图像高度。

   Original        Original             New Frame
   Frame 'j'      Frame 'j+1'             (tff)
  ==========      ===========       ==================
    Line 0  -------------------->    Frame 'j' Line 0
    Line 1          Line 1  ---->   Frame 'j+1' Line 1
    Line 2 --------------------->    Frame 'j' Line 2
    Line 3          Line 3  ---->   Frame 'j+1' Line 3
     ...             ...                   ...
New Frame + 1 will be generated by Frame 'j+2' and Frame 'j+3' and so on

它接受以下可选参数:

scan

这决定了隔行扫描帧是从渐进帧的偶数行(tff - 默认值)还是奇数行(bff)中取出。

lowpass

垂直低通滤波以避免闪烁隔行和减少摩尔条纹。

0, off

禁用垂直低通滤波。

1, linear

启用线性滤波(默认值)。

2, complex

启用复杂滤波。这稍微减少了闪烁和摩尔条纹,但能更好地保留细节和主观锐度印象。

39.135 kerndeint

通过应用Donald Graft的自适应内核去隔行处理输入视频。仅处理视频的隔行扫描部分以生成渐进帧。

以下是已接受参数的详细说明。

thresh

设置阈值,该值影响滤镜判断是否需要处理像素行的容忍度。值必须在[0,255]范围内,为整数,默认值为10。值为0将导致对所有像素应用处理。

map

将超过阈值的像素用白色着色,若设置为1。默认值是0。

order

设置场序。若设置为1,交换场;若为0,则保持场不变。默认值为0。

sharp

如果设置为1,则启用附加锐化。默认值为0。

twoway

如果设置为1,则启用双向锐化。默认值为0。

39.135.1 示例

  • 应用默认值:
    kerndeint=thresh=10:map=0:order=0:sharp=0:twoway=0
    
  • 启用额外锐化:
    kerndeint=sharp=1
    
  • 将处理过的像素标记为白色:
    kerndeint=map=1
    

39.136 kirsch

对输入视频流应用 Kirsch 算子。

过滤器接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认为 0xf,所有平面都将被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果中的值。

39.136.1 命令

此过滤器支持以上所有选项作为命令.

39.137 lagfun

缓慢更新较暗像素。

此过滤器使短暂的光闪现持续时间更长。 此过滤器接受以下选项:

decay

设置衰减系数。默认为 0.95。允许范围为 0 到 1。

planes

设置要过滤的平面。默认为全部。允许范围为 0 到 15。

39.137.1 命令

此过滤器支持以上所有选项作为命令.

39.138 lenscorrection

校正径向镜头畸变

此过滤器可用于校正由使用广角镜头引起的径向畸变,从而重新校正图像。要找到合适的参数, 可以使用例如 opencv 提供的工具或简单的试错法。要使用 opencv,请使用其源代码中的校准样本(位于 samples/cpp 下),从结果矩阵中提取 k1 和 k2 系数。

注意,实际上在开源工具 Krita 和 KDE 项目下的 Digikam 中可以找到相同的过滤器。

相比于vignette过滤器(也可用于补偿镜头错误),此过滤器校正图像的畸变,而vignette校正亮度分布,因此在某些情况下,可能需要将两个过滤器一起使用,但需要注意顺序,即是否应该在镜头校正之前或之后应用渐晕。

39.138.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.

生成校正的公式是:

源距离 = 目标距离 * (1 + k1 系数 * (目标距离 / 参考距离)^2 + k2 系数 * (目标距离 / 参考距离)^4)

其中参考距离是图像对角线的一半,而源距离目标距离分别是源图像和目标图像中的焦点距离。

39.138.2 命令

此过滤器支持以上所有选项作为命令.

39.139 lensfun

通过 lensfun 库应用镜头校正(http://lensfun.sourceforge.net/).

lensfun过滤器需要相机品牌、相机型号和镜头型号来应用镜头校正。过滤器将加载 lensfun 数据库并查询以找到数据库中对应的相机和镜头条目。 只要这些条目可以通过给定选项找到,过滤器就可以对帧进行校正。 请注意,不完整的字符串将导致过滤器选择最佳匹配项,并将输出所选择的相机和镜头模型(以“info”级别记录)。 必须提供品牌、相机型号和镜头型号,因为它们是必需的。

要获取可用的品牌和型号列表,请省略一个或两个makemodel选项。过滤器会将完整列表发送到日志中,日志级别为INFO。 第一列是品牌,第二列是型号。 要获取可用的镜头列表,请为品牌和型号设置任意值,并省略lens_model选项。过滤器会将镜头的完整列表发送到日志中,日志级别为INFO。ffmpeg 工具会在列表打印后退出。

过滤器接受以下选项:

make

相机品牌(例如“Canon”)。此选项是必需的。

model

相机型号(例如“Canon EOS 100D”)。此选项是必需的。

lens_model

镜头型号(例如“Canon EF-S 18-55mm f/3.5-5.6 IS STM”)。此选项是必需的。

db_path

镜头数据库文件夹的完整路径。如果未设置,过滤器将在构建库时尝试加载默认路径。 默认未设置。

mode

要应用的校正类型。以下值是有效选项:

vignetting

启用镜头渐晕修正。

geometry

启用镜头几何修正。默认值。

subpixel

启用修正色差。

vig_geo

启用镜头渐晕和镜头几何修正。

vig_subpixel

启用镜头渐晕和色差修正。

distortion

启用镜头几何和色差修正。

all

启用所有可能的校正。

focal_length

图像/视频的焦距(缩放;视频预期为固定值)。例如,18–55mm 镜头的焦距范围是 [18–55],因此在使用该镜头时应选择该范围内的值。 默认值为 18。

aperture

图像/视频的光圈(视频预期为固定值)。注意光圈仅用于渐晕修正。 默认值为 3.5。

focus_distance

图像/视频的对焦距离(视频预期为固定值)。注意,对焦距离仅用于渐晕,并且只有略微影响渐晕修正过程。 如果未知,请保留其默认值(默认为 1000)。

scale

在转换后应用的缩放系数。校正后,视频不再一定是矩形。 此参数控制输出图像的可见部分。值 0 表示将自动选择一个值,以使得输出图像中几乎没有或没有未映射区域。1.0 表示不做额外缩放。 较低的值可能会使校正图像的更多部分可见,而较高值可能避免输出中的未映射区域。

target_geometry

输出图像/视频的目标几何。以下值是有效选项:

rectilinear (default)
fisheye
panoramic
equirectangular
fisheye_orthographic
fisheye_stereographic
fisheye_equisolid
fisheye_thoby
reverse

应用镜头校正的反向效果(不是修正失真,而是应用失真)。

interpolation

在修正失真时使用的插值类型。以下值是有效选项:

nearest
linear (default)
lanczos

39.139.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.140 lcevc

基于 liblcevc_dec 的低复杂度增强视频编解码器过滤器 (https://github.com/v-novaltd/LCEVCdec).

39.141 libplacebo

基于 libplacebo 的灵活的 GPU 加速处理过滤器 (https://code.videolan.org/videolan/libplacebo).

39.141.1 选项

此过滤器的选项分为以下几个部分:

39.141.1.1 输出模式

这些选项控制整体的输出模式。默认情况下,libplacebo 将尽可能保留源颜色空间和尺寸,但会应用任何嵌入的胶片颗粒、杜比视界元数据或源帧中存在的非正交 SAR。

inputs

设置输入的数量。这可以与idx变量一起使用,允许将多个输入放置/混合到输出帧中。这实际上启用了类似于水平堆叠, 覆盖等功能。

w
h

设置输出视频尺寸表达式。默认值为iwih.

允许使用与缩放过滤器相同的表达式。

crop_x
crop_y

设置输入裁剪 x/y 表达式,默认值为(iw-cw)/2(ih-ch)/2.

crop_w
crop_h

设置输入裁剪宽度/高度表达式,默认值为iwih.

pos_x
pos_y

设置输出放置 x/y 表达式,默认值为(ow-pw)/2(oh-ph)/2.

pos_w
pos_h

设置输出放置宽度/高度表达式,默认值为owoh.

rotate

顺时针旋转输入帧指定的角度。

0, 360
90
180
270
fps

设置输出帧率。可以是分数,例如60000/1001。如果设置为特殊字符串none(默认值),输入时间戳将未修改地传递到输出。否则,将根据选定的目标帧率插值输入视频帧,以一种由frame_mixer选项决定的方式进行重新缩放。

format

设置输出格式覆盖。如果未设置(默认值),帧将以与各自输入帧相同的格式输出。否则,将进行格式转换。

force_original_aspect_ratio
force_divisible_by

与相同的缩放过滤器选项效果相同。

normalize_sar

如果启用,输出帧将始终具有 1:1 的像素宽高比。这将根据需要引入额外的填充或裁剪。如果禁用(默认值),任何宽高比的不匹配(包括例如非正交视频源的那些)都将传递到输出像素宽高比。

pad_crop_ratio

指定输入宽高比与输出宽高比不匹配时填充和裁剪之间的比例(范围在0.01.0之间),并且normalize_sar生效。默认值0.0始终用黑边填充内容,而值为1.0始终裁剪内容的一部分。可以使用中间值,将导致两种方法的混合。

fillcolor

设置用于填充未覆盖输出图像的输出区域的颜色,例如由于normalize_sar选项的结果。有关此选项的一般语法,请参阅 ffmpeg-utils 手册中的"颜色"部分。默认值为black@0.

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'"
shader_cache

libplacebo 将用来存储和加载缓存着色器对象的缓存目录的文件路径。这个缓存不会被自动清理。如果路径未以目录分隔符结尾,生成的文件名将有效地以最后一个路径部分作为前缀。所有目录必须已创建。

-vf "libplacebo=shader_cache=/tmp/pl-shader-"
colorspace
color_primaries
color_trc
range

配置输出帧的目标颜色空间。默认值为auto导致输出帧与输入帧格式相同,不进行更改。对于任何其他值,将进行转换。

查看设置参数过滤器,了解可能值的列表。

apply_filmgrain

如果源帧中存在胶片颗粒(例如 AV1 或 H.274),则将应用并从输出中剥离。默认启用。

apply_dolbyvision

如果源帧中存在杜比视界 RPU 元数据,则将应用并从输出中剥离。默认启用。请注意,杜比视界将始终输出 BT.2020+PQ,这将覆盖通常的输入帧元数据。这些也将被用作auto的值,用于相应的帧输出选项。

除了为缩放过滤器记录的表达式常量外,crop_w, crop_h, crop_x, crop_y, pos_w, pos_h, pos_xpos_y选项还可以包含以下常量:

in_idx, idx

当前活动输入流的(从 0 开始的)数字索引。

crop_w, cw
crop_h, ch

计算得到的crop_wcrop_h.

pos_w, pw
pos_h, ph

计算得到的pos_wpos_h.

in_t, t

输入帧时间戳(以秒为单位)。如果输入时间戳未知,则为 NAN。

out_t, ot

输入帧时间戳(以秒为单位)。如果输入时间戳未知,则为 NAN。

n

输入帧编号,从 0 开始。

39.141.1.2 缩放

本节的选项控制 libplacebo 如何进行上采样以及(如果需要)下采样。注意,libplacebo 将始终在内部对 4:4:4 内容进行操作,因此任何子采样的色度格式(例如yuv420p)在渲染过程中不可避免地会被上采样和下采样。这意味着即使源和目标分辨率相同,也可能会进行缩放。

upscaler
downscaler

配置用于上采样和下采样的过滤器核。各自的默认值为spline36mitchell。要获取可能值的完整列表,请传递help到这些选项。最重要的值包括:

none

强制使用内置的 GPU 纹理采样(通常是双线性)。非常快但质量差,尤其是在下采样时。

bilinear

双线性插值。在 GPU 上通常可以免费进行,除非这样做会导致混叠。快速但质量较差。

nearest

最近邻插值。锐利但混叠严重。

oversample

一种算法,视觉上类似于最近邻插值,但尝试保持像素宽高比。适合像素艺术,因为它能最小化艺术外观的扭曲。

lanczos

标准的 sinc-sinc 插值核。

spline36

Lanczos 的三次样条近似。在性能上没有差别,但略微减少了振铃现象。

ewa_lanczos

基于 jinc-jinc 核的椭圆加权平均版 Lanczos。这也被称为 "Jinc 缩放"。慢速但质量非常高。

gaussian

高斯核。具有某些理想的数学特性,但主观上非常模糊。

mitchell

Mitchell 和 Netravali 推荐参数的三次 BC 样条。几乎没有振铃现象。

frame_mixer

控制用于在时间上混合帧的过滤器核。默认值为none,禁用帧混合。要获取可能值的完整列表,请传递help到此选项。最重要的值为:

none

禁用帧混合,结果等同于“最近邻”语义。

oversample

过采样输入视频以创建一种“平滑运动”效果:如果一个输出帧恰好落在两个视频帧之间的过渡处,则根据相对重叠进行混合。这是在希望保留原始主观外观时的推荐选项。

mitchell_clamp

较大的过滤器核,平滑地插值多个帧,以尽可能消除振铃和其他伪像。这是实现最大视觉平滑性的推荐选项。

linear

帧之间的线性混合/淡入淡出。特别适合构建例如幻灯片演示文稿。

antiringing

启用抗振铃(用于非 EWA 过滤器)。此值(范围在0.01.0之间)配置抗振铃算法的强度。如果设置过高,可能会增加混叠。默认禁用。

sigmoid

在上采样过程中启用 S 型压缩。略微减少振铃。默认启用。

39.141.1.3 去隔行

当帧被标记为隔行扫描时自动支持去隔行处理,但除非选择了去隔行算法,否则帧不会被去隔行。

deinterlace

要使用的去隔行算法。

weave

无去隔行处理,将字段拼接成单帧。这是默认设置。

bob

简单的bob去隔行处理,直接重复每行两次。

yadif

另一种去隔行滤镜。有关详细信息,请参见yadif滤镜。

skip_spatial_check

使用去隔行处理时跳过空间去隔行检查。yadif去隔行处理。

send_fields

每个字段输出一帧,而不是每个帧输出一帧。请注意,即使输入不包含任何隔行帧,这也将始终使标记输出帧率加倍。默认情况下禁用。

39.141.1.4 去色带处理

Libplacebo 内置一个去色带滤镜,对抗常见的色带和块状伪影非常有效。质量要求较高时,强烈建议打开此功能。

deband

启用(快速)去色带算法。默认情况下禁用。

deband_iterations

去色带算法的迭代次数。每次迭代都会逐步增加半径(并减少阈值)。推荐值范围为14,默认值为1.

deband_threshold

去色带滤镜强度。值越高去色带效果越强烈。默认值为4.0.

deband_radius

去色带滤镜半径。较高的半径更适合于缓慢梯度,而较低的半径更适合于陡峭梯度。默认值为16.0.

deband_grain

输出添加的额外颗粒量。帮助掩盖瑕疵。默认值为6.0.

39.141.1.5 色彩调整

一组主观的颜色控制。不太严谨,因此具体效果可能因输入主色域和色彩空间而略有不同。

brightness

亮度提升,范围在-1.01.0之间。默认值为0.0.

contrast

对比度增益,范围在0.016.0之间。默认值为1.0.

saturation

饱和度增益,范围在0.016.0之间。默认值为1.0.

hue

色调偏移(以弧度计),范围在-3.143.14之间。默认值为0.0。这将旋转UV子向量,对RGB输入默认使用 BT.709 系数。

gamma

伽马调整,范围在0.016.0之间。默认值为1.0.

cones

用于色盲模拟的锥模型。接受以下任意组合l, ms。以下是一些示例:

m

色盲-绿视缺陷/绿视盲(影响约3%-4%的人群)

l

色盲-红视缺陷/红视盲(影响约1%-2%的人群)

l+m

全色盲(非常罕见)

l+m+s

失色症(完全失去白天视力,极其罕见)

cone-strength

针对指定锥体的增益因子,定义为cones的范围在0.010.0之间。值为1.0时对色觉没有影响。值为0.0(默认值)模拟完全丧失这些锥体。值高于1.0会放大锥体之间的差异,这可能有助于弥补减弱的色觉。

39.141.1.6 峰值检测

为解决只有静态 HDR10 元数据(或完全无标记)的源问题,libplacebo 使用其内部帧分析计算着色器来实时分析源帧并调整色调映射功能。如果这太慢,或者需要精确的帧级重现结果,建议关闭此功能。

peak_detect

启用HDR峰值检测。忽略静态 MaxCLL/MaxFALL 值,改为使用输入的动态检测。请注意,检测的值不会写回输出帧,而仅用于指导内部色调映射过程。默认打开。

smoothing_period

峰值检测的平滑周期,范围在0.01000.0之间。值越高,峰值检测对输入变化的响应越不灵敏。默认值为100.0.

scene_threshold_low
scene_threshold_high

场景变化检测的上下阈值。以对数刻度表示,范围在0.0100.0之间。默认值分别为5.510.0。将任何一个设置为负值将禁用该功能。

percentile

用于色调映射的帧亮度直方图百分位。默认值为99.995,是相对保守的值。将此设置为100.0将禁用帧直方图测量,改为使用实际峰值亮度进行色调映射。

39.141.1.7 色调映射

本节选项用于控制 libplacebo 处理广色域或 HDR 内容失配时执行色调映射和色域映射的方式。通常情况下,libplacebo 依赖准确的源标记和母版显示器色域信息来产生最佳效果。

gamut_mode

如何处理作为色彩色域映射结果可能出现的超出色域的颜色。

clip

不作调整,直接将超出范围的颜色裁剪到RGB体积内。质量较低但非常快速。

perceptual

感知上柔和裁剪颜色到色域体积。此为默认设置。

relative

相对色彩度硬裁剪。与perceptual类似,但没有柔化区域。

saturation

饱和度映射,直接将基色映射到RGB空间中的基色。不推荐使用,除非是需要在亮度和饱和度显示的人工计算机图形。

absolute

绝对色彩度硬裁剪。不调整白点。

desaturate

将超出色域的颜色硬性去饱和到白色,同时保留亮度。容易导致明亮物体的视觉失真。

darken

线性减低内容亮度以保留饱和细节,随后对剩余的超出色域颜色裁剪。

warn

突出超出色域的像素(通过反转或标记)。

linear

线性减少整个图像的色度,使其适应目标颜色体积。在没有适当母版元数据的 BT.2020 源上小心使用,因为这会导致过度去饱和。

tonemapping

使用的色调映射算法。可用值如下:

auto

基于内部启发式自动选择。这是默认设置。

clip

不执行色调映射,仅对超出范围的颜色裁剪。保留范围内的颜色的完美色彩精度,但完全丢失超出范围的信息。不执行任何黑点调整。不支持配置。

st2094-40

从SMPTE ST 2094-40 附录 B 的 EETF,基于HDR10+动态元数据的贝塞尔曲线进行色调映射。使用的OOTF会根据目标和实际显示峰值亮度的比例进行调整。

st2094-10

从SMPTE ST 2094-10 附录B.2的EETF,考虑输入信号的平均亮度及其最大/最小值。可配置对比度参数影响线性输出段的斜率,默认值为1.0说明没有任何对比度的增加/减少。请注意,这目前尚未包含附录 B.3中定义的主观增益/偏移/伽马控件。

bt.2390

来自 ITU-R 报告 BT.2390 的 EETF,具有线性段的赫米特样条滚降。拐点偏移是可配置的。注意,此参数默认值为1.0,而不是 ITU-R 规范中的值0.5

bt.2446a

ITU-R 报告 BT.2446 方法 A 中的 EETF。设计用于精心制作的 HDR 源。可用于正向和反向色调映射。不支持配置。

spline

由两个多项式构成的简单样条,由单个枢轴点连接。参数给出枢轴点(在 PQ 空间中),默认值为0.30。可用于正向和反向色调映射。

reinhard

简单的非线性全局色调映射算法。参数指定显示峰值的局部对比度系数。本质上,参数为0.5意味着参考白色的亮度是裁剪时的约一半。默认值为0.5,这导致此函数的最简单形式。

mobius

Reinhard 色调映射算法的广义形式,支持近黑色的附加线性斜率。色调映射参数指示线性部分和非线性部分之间的权衡。本质上,对于给定参数x,每个小于x的颜色值将被线性映射,而较高的值将被非线性色调映射。接近1.0的值将使该曲线表现得像clip,而接近0.0的值将使该曲线表现得像reinhard。默认值为0.3,提供了色度准确性和保留色域外细节之间的良好平衡。

hable

由John Hable为《神秘海域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的大小,范围在21024之间。默认值为256。请注意,与peak_detect.

contrast_recovery

结合使用时,该数值会被平方。0.0的值,源图像将分为高频和低频分量,并将部分高频图像添加回色调映射后的输出。可能会对某些HDR源造成过多的振铃伪影,但可以在色调映射后图像中改善主观的锐度和保留的细节。默认值为0.30.

contrast_smoothness

对比度恢复低通滤波内核大小。默认值为3.5。增加或减少此值将显著影响视觉外观。当contrast_recovery禁用时无效。

39.141.1.8 抖动

默认情况下,libplacebo会在必要时进行抖动处理,包括渲染到任何低于16位精度的整数格式。建议始终启用此功能,因为不启用可能导致输出中出现可见的条纹,即使debanding滤镜已启用。如果需要最大的性能,请使用ordered_fixed而不是禁用抖动。

dithering

用于抖动的方法。接受以下值:

none

完全禁用抖动。可能会导致可见的条纹。

blue

使用伪蓝噪声进行抖动。这是默认值。

ordered

可调有序抖动模式。

ordered_fixed

更快的固定大小6有序抖动。无纹理。

white

使用白噪声进行抖动。无纹理。

dither_lut_size

抖动LUT大小,以对数底数2取值范围在18之间。默认值为6,对应的LUT大小为64x64.

dither_temporal

启用时间抖动。默认情况下禁用。

39.141.1.9 自定义着色器

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.141.1.10 调试 / 性能

本节中的所有选项默认关闭。当试图以牺牲质量为代价获得最大性能时,它们可能会有所帮助。

skip_aa

禁用缩小时的抗锯齿。

disable_linear

禁用线性光缩放。

disable_builtin

禁用内置GPU采样(强制使用LUT)。

disable_fbos

强制禁用FBO,导致几乎丧失所有功能,但提供了可能的最大速度。

39.141.2 命令

此滤镜支持几乎所有上述选项作为命令.

39.141.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输入插值为平滑的恒定60fps输出:
    libplacebo=fps=60:frame_mixer=mitchell_clamp
    
  • 将输入转换为标准sRGB格式的JPEG:
    libplacebo=format=yuv420p:colorspace=bt470bg:color_primaries=bt709:color_trc=iec61966-2-1:range=pc
    
  • 使用较高质量的去条纹设置:
    libplacebo=deband=true:deband_iterations=3:deband_radius=8:deband_threshold=6
    
  • 在安装了Mesa的系统上基于CPU运行此滤镜(并禁用最昂贵的选项):
    ffmpeg ... -init_hw_device vulkan:llvmpipe ... -vf libplacebo=upscaler=none:downscaler=none:peak_detect=false
    
  • 在解码器中抑制基于CPU的AV1/H.274胶片颗粒应用程序,而使用此滤镜执行此操作。请注意,只有当帧已经在GPU上,或者您出于其他目的使用libplacebo时,这才是有利的,因为否则VRAM往返的成本将超过任何预期的速度提升。
    ffmpeg -export_side_data +film_grain ... -vf libplacebo=apply_filmgrain=true
    
  • 与VAAPI硬件解码结合以避免通过RAM往返:
    ffmpeg -init_hw_device vulkan -hwaccel vaapi -hwaccel_output_format vaapi ... -vf libplacebo
    

39.142 libvmaf

计算参考/失真输入视频对的VMAF(视频多方法评估融合)评分。

第一个输入是失真视频,第二个输入是参考视频。

通过日志系统打印获得的VMAF分数。

需要Netflix的vmaf库(libvmaf)作为前提条件。安装库后可以使用以下方法启用:./configure --enable-libvmaf.

该滤镜具有以下选项:

model

一个以‘|’分隔符的vmaf模型列表。每个模型可以通过多个参数进行配置。默认值:"version=vmaf_v0.6.1"

feature

一个以‘|’分隔的功能列表。每个功能可以通过多个参数进行配置。

log_path

设置用于存储日志文件的文件路径。

log_fmt

设置日志文件的格式(xml, json, csv, 或 sub)。

pool

设置用于计算vmaf的池化方法。选项有min, harmonic_meanmean(默认)。

n_threads

设置初始化libvmaf时使用的线程数。默认值为0,不使用线程。

n_subsample

设置要使用的帧采样间隔。

该滤镜还支持framesync选项。

39.142.1 示例

  • 在下面的示例中,失真视频distorted.mpg与参考文件reference.mpg.
  • 进行比较。基本用法:
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf=log_path=output.xml -f null -
    
  • 具有多个模型的示例:
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg' -f null -
    
  • 具有多个附加功能的示例:
    ffmpeg -i distorted.mpg -i reference.mpg -lavfi libvmaf='feature=name=psnr|name=ciede' -f null -
    
  • 带有选项和不同容器的示例:
    ffmpeg -i distorted.mpg -i reference.mkv -lavfi "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json" -f null -
    

39.143 libvmaf_cuda

这是libvmaf滤镜的CUDA版本。它仅接受CUDA帧。

需要Netflix的vmaf库(libvmaf)作为前提条件。安装库后可以使用以下方法启用:./configure --enable-nonfree --enable-ffnvcodec --enable-libvmaf.

39.143.1 示例

  • 显示CUVID硬件解码和CUDA缩放的基本用法,与scale_cuda:
    ffmpeg \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i dis.obu \
        -hwaccel cuda -hwaccel_output_format cuda -codec:v av1_cuvid -i ref.obu \
        -filter_complex "
            [0:v]scale_cuda=format=yuv420p[dis]; \
            [1:v]scale_cuda=format=yuv420p[ref]; \
            [dis][ref]libvmaf_cuda=log_fmt=json:log_path=output.json
        " \
        -f null -
    

一起使用。

39.144 limitdiff

使用第二个视频流和可选的第三个视频流应用有限差异滤波器。

threshold

设置允许视频流之间某些差异时使用的阈值。任何低于或等于此阈值的绝对差值都将选择第一个视频流的像素分量。

elasticity

设置在处理视频流时软阈值的弹性。此值乘以第一个值设置第二个阈值。任何大于或等于第二个阈值的绝对差值都将选择第二个视频流的像素分量。对于介于这两个阈值之间的值将在线性插值方式选择第一个和第二个视频流。

reference

启用参考(第三个)视频流处理。默认情况下禁用。如果设置了,此视频流将用于与第一个视频流计算绝对差值。

planes

指定将处理哪些平面。默认为所有可用的平面。

39.144.1 命令

此滤镜支持上述所有选项作为命令除了选项 ‘reference’.

39.145 限幅器

将像素分量值限制在指定范围 [最小值, 最大值]。

该滤镜接受以下选项:

min

下限。默认为输入允许的最低值。

max

上限。默认为输入允许的最高值。

planes

指定哪个平面将被处理。默认为所有可用平面。

39.145.1 命令

此滤镜支持上述所有选项作为命令.

39.146 循环

循环视频帧。

该滤镜接受以下选项:

loop

设置循环次数。设置为 -1 将导致无限循环。 默认值为 0。

size

设置以帧数量计的最大大小。默认值为 0。

start

设置循环的第一帧。默认值为 0。

time

设置循环开始时间,以秒为单位。 仅当名为start的选项被设置时使用-1.

39.146.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.147 一维查找表 (lut1d)

对输入视频应用一维查找表。

该滤镜接受以下选项:

file

设置一维查找表文件名。

当前支持的格式:

cube

Iridas

csp

cineSpace

interp

选择插值模式。

可用值为:

nearest

从最近定义点获取值。

linear

使用线性插值计算值。

cosine

使用余弦插值计算值。

cubic

使用三次插值计算值。

spline

使用样条插值计算值。

39.147.1 命令

此滤镜支持上述所有选项作为命令.

39.148 三维查找表 (lut3d)

对输入视频应用三维查找表。

该滤镜接受以下选项:

file

设置三维查找表文件名。

当前支持的格式:

3dl

AfterEffects

cube

Iridas

dat

DaVinci

m3d

Pandora

csp

cineSpace

interp

选择插值模式。

可用值为:

nearest

从最近定义点获取值。

trilinear

使用定义立方体的 8 个点进行插值。

tetrahedral

使用四面体进行插值。

pyramid

使用棱锥进行插值。

prism

使用棱柱进行插值。

39.148.1 命令

此滤镜支持interp选项作为命令.

39.149 明度键

将某些明度值转为透明。

设置用于透明化的明度值。 默认值为

threshold

Set the luma which will be used as base for transparency. Default value is 0.

tolerance

设置需要抠除的明度值范围。 默认值为0.01.

softness

设置柔和范围。默认值为0。 用于控制从零到完全透明的渐变过渡。

39.149.1 命令

此滤镜支持相同的命令作为选项。 命令接受与对应选项相同的语法。

如果指定表达式无效,则保持当前值。

39.150 查找表 (lut)、lutrgb、lutyuv

为绑定每个像素分量输入值到一个输出值计算查找表,并应用到输入视频。

lutyuv应用查找表到 YUV 的输入视频,lutrgb应用到 RGB 的输入视频。

这些滤镜接受以下参数:

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于 Alpha 分量

r

设置红色分量表达式

g

设置绿色分量表达式

b

设置蓝色分量表达式

a

Alpha 分量表达式

y

设置 Y/明度分量表达式

u

设置 U/Cb 分量表达式

v

设置 V/Cr 分量表达式

每一个都指定用于计算查找表的表达式以处理对应的像素分量值。

与各个c*选项相关的确切分量取决于输入格式。

查找表滤镜需要输入中有 YUV 或 RGB 像素格式,lutrgb需要输入中有 RGB 像素格式,并且lutyuv需要 YUV。

表达式可以包含以下常量和函数:

w
h

输入的宽度和高度。

val

像素分量的输入值。

clipval

输入值,裁剪到最小值-最大值范围。

maxval

像素分量的最大值。

minval

像素分量的最小值。

negval

像素分量值的负值,裁剪到最小值-最大值范围;等同于表达式 "maxval-clipval+minval"。

clip(val)

计算出的值val,裁剪到最小值-最大值范围。

gammaval(gamma)

像素分量值的计算出的伽马校正值,裁剪到最小值-最大值范围。等同于表达式 "pow((clipval-minval)/(maxval-minval)\,gamma)*(maxval-minval)+minval"。

所有表达式默认为 "clipval"。

39.150.1 命令

此滤镜支持与选项相同的命令

39.150.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"
    
  • 在输入上设置一个固定的透明度通道值:
    format=rgba,lutrgb=a="maxval-minval/2"
    
  • 按 0.5 的因子校正亮度伽马:
    lutyuv=y=gammaval(0.5)
    
  • 丢弃亮度的最低有效位:
    lutyuv=y='bitand(val, 128+64+32)'
    
  • 类似 Technicolor 效果:
    lutyuv=u='(val-maxval/2)*2+maxval/2':v='(val-maxval/2)*2+maxval/2'
    

39.151 lut2, tlut2

lut2滤镜接受两个输入流并输出一个流。

tlut2(时间 lut2)滤镜接受一个单一流的两个连续帧。

该滤镜接受以下参数:

c0

设置第一个像素分量表达式

c1

设置第二个像素分量表达式

c2

设置第三个像素分量表达式

c3

设置第四个像素分量表达式,对应于透明度分量

d

设置输出位深度,仅适用于lut2滤镜。默认值为 0, 意味着位深度自动从第一个输入格式中选取。

lut2滤镜也支持framesync选项。

每项都指定了用于计算对应像素分量值查找表的表达式。

与每个c*选项对应的具体分量取决于输入的格式。

表达式可以包含以下常量:

w
h

输入的宽度和高度。

x

第一个像素分量的输入值。

y

第二个像素分量的输入值。

bdx

第一个输入视频的位深度。

bdy

第二个输入视频的位深度。

所有表达式默认为 "x"。

39.151.1 命令

该滤镜支持以上所有选项并作为命令,除了选项d.

39.151.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.152 maskedclamp

使用第二个输入流和第三个输入流对第一个输入流进行裁剪。

返回第一个流的值在第二个输入 流 -undershoot和第三个输入流 +overshoot.

此滤镜接受以下选项:

undershoot

默认值为0.

overshoot

默认值为0.

planes

设置将作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

39.152.1 命令

该滤镜支持以上所有选项并作为命令.

39.153 maskedmax

将第二个和第三个输入流合并到输出流中,使用第二个输入流与第一个输入流之间的绝对差值和 第三个输入流与第一个输入流之间的绝对差值。若第二个绝对差值大于第一个绝对差值,取第二个输入流值, 否则取第三个输入流值。

此滤镜接受以下选项:

planes

设置将作为位图处理的平面,未处理的平面将从第一个流中复制。 默认值为 0xf,所有平面都将被处理。

39.153.1 命令

该滤镜支持以上所有选项并作为命令.

39.154 maskedmerge

使用第三个输入流中的每像素权重将第一个输入流与第二个输入流合并。

第三个流像素分量的值为0表示返回第一个流的像素分量,而最大值(例如8位视频中的255)表示返回第二个流的像素分量。中间值定义了两个输入流的像素分量之间的合并程度。

此滤镜接受以下选项:

planes

设置将作为位图处理的平面,未处理的平面将从第一个流中复制。默认值为0xf,即处理所有平面。

39.154.1 命令

此滤镜支持以上所有选项作为命令.

39.155 maskedmin

通过比较第二输入流和第一个输入流之间的绝对差异,以及第三输入流和第一个输入流之间的绝对差异,合并第二和第三输入流到输出流中。如果第二个绝对差异小于第一个,则选择第二输入流的值,否则选择第三输入流的值。

此滤镜接受以下选项:

planes

设置将作为位图处理的平面,未处理的平面将从第一个流中复制。默认值为0xf,即处理所有平面。

39.155.1 命令

此滤镜支持以上所有选项作为命令.

39.156 maskedthreshold

通过比较两个视频流的绝对差异与固定阈值选择像素。

如果第一个和第二个视频流的像素分量的绝对差异等于或低于用户提供的阈值,则选取第一个视频流的像素分量,否则选择第二个视频流的像素分量。

此滤镜接受以下选项:

threshold

设置在从两个输入视频流的绝对差异中选择像素时使用的阈值。

planes

设置将作为位图处理的平面,未处理的平面将从第二个流中复制。默认值为0xf,即处理所有平面。

mode

设置滤镜操作模式,可以是absdiff。默认值是abs.

39.156.1 命令

此滤镜支持以上所有选项作为命令.

39.157 maskfun

从输入视频创建掩码。

例如,这对在tblend滤镜之后创建运动掩码很有用。

此滤镜接受以下选项:

low

设置低阈值。任何像素分量低于或等于此值将被设置为0。

high

设置高阈值。任何像素分量高于此值的将被设置为当前像素格式允许的最大值。

planes

设置要过滤的平面,默认情况下会过滤所有可用平面。

fill

用此值填充所有帧像素。

sum

设置帧的最大平均像素值。如果所有像素分量的总和高于此平均值,输出帧将完全填充为由填充选项设置的值。通常在与tblend滤镜结合时用于场景变化。

39.157.1 命令

此滤镜支持以上所有选项作为命令.

39.158 mcdeint

应用运动补偿去隔行扫描。

它需要每帧一个字段输入,因此必须与yadif=1/3或类似功能配合使用。

此滤镜接受以下选项:

mode

设置去隔行扫描模式。

它接受以下值之一:

fast
medium
slow

使用迭代运动估计

extra_slow

类似于‘slow’,但使用多个参考帧。

默认值是‘fast’.

parity

设置输入视频假定的帧场序列。它必须是以下值之一:

0, tff

假定上场优先

1, bff

假定下场优先

默认值是‘bff’.

qp

设置由内部编码器使用的块量化参数(QP)。

更高的值应该会使运动矢量场更平滑,但个别矢量不太理想。默认值是1。

39.159 median

从特定由半径定义的矩形中选取中位数像素。

此滤镜接受以下选项:

radius

设置水平半径大小。默认值是1。允许的范围是1到127的整数。

planes

设置要处理的平面。默认值是15,即所有可用平面。

radiusV

设置垂直半径大小。默认值是0。允许的范围是0到127的整数。如果为0,值将从水平radius选项中选取。

percentile

设置中值百分比。默认值是0.5。默认值0.5将始终选取中值,而0将选取最小值,而1将选取最大值。

39.159.1 命令

此滤镜支持与选项相同的命令。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保留当前值。

39.160 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.160.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.161 mestimate

使用块匹配算法估算并导出运动矢量。运动矢量存储在帧附加数据中以供其他滤镜使用。

此滤镜接受以下选项:

method

指定运动估算方法。接受以下值之一:

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强预测分区搜索算法。

umh

非均匀多六边形搜索算法。

默认值为‘esa’.

mb_size

宏块大小。默认16.

search_param

搜索参数。默认7.

39.162 中间均衡器

使用两个视频流应用中间图像均衡效果。

中间图像均衡调整一对图像,使它们具有相同的直方图,同时尽可能保持其动态。 这对例如匹配一对立体摄像头的曝光很有用。

该滤镜有两个输入和一个输出,必须是相同的像素格式,但尺寸可以不同。滤镜的输出是第一个输入调整为两个输入的中间直方图。

这个滤镜接受以下选项:

planes

设置要处理的平面。默认是15,即所有可用平面。

39.163 minterpolate

使用运动插值将视频转换为指定的帧率。

此滤镜接受以下选项:

fps

指定输出帧率。可以是有理数,例如60000/1001。如果fps低于源帧率,则会丢弃帧。默认60.

mi_mode

运动插值模式。接受以下值:

dup

通过复制上一帧或下一帧来插值生成新帧。

blend

混合源帧。插值帧是前一帧和后一帧的平均值。

mci

运动补偿插值。当选择此模式时,以下选项生效:

mc_mode

运动补偿模式。接受以下值:

obmc

重叠块运动补偿。

aobmc

自适应重叠块运动补偿。根据邻近运动向量的可靠性自适应控制窗口加权系数,以减少过度平滑。

默认模式是 ‘obmc’.

me_mode

运动估计模式。接受以下值:

bidir

双向运动估计。对每个源帧进行前向和后向方向上的运动向量估计。

bilat

双边运动估计。直接为插值帧估计运动向量。

默认模式是 ‘bilat’.

me

用于运动估计的算法。接受以下值:

esa

穷举搜索算法。

tss

三步搜索算法。

tdls

二维对数搜索算法。

ntss

新的三步搜索算法。

fss

四步搜索算法。

ds

菱形搜索算法。

hexbs

基于六边形的搜索算法。

epzs

增强预测分区搜索算法。

umh

非均匀多六边形搜索算法。

默认算法是‘epzs’.

mb_size

宏块大小。默认16.

search_param

运动估计搜索参数。默认32.

vsbmc

启用可变尺寸块运动补偿。在对象边界应用较小块大小的运动估计,以减少模糊。默认是0(禁用)。

scd

场景变化检测方法。场景变化会导致运动向量呈随机方向。场景变化检测将插值帧替换为重复帧。对于其他模式可能不需要。接受以下值:

none

禁用场景变化检测。

fdiff

帧差异。比较对应像素值,如果满足scd_threshold则检测到场景变化。

默认方法是‘fdiff’.

scd_threshold

场景变化检测阈值。默认是10..

39.164 混合

将多个视频输入流混合成一个视频流。

以下是接受选项的说明。

inputs

输入的数量。如果未指定,则默认为2。

weights

指定每个输入视频流的权重作为序列。每个权重之间用空格分隔。如果权重的数量小于,最后指定的权重将用于所有未设置的权重。

scale

指定缩放比例,如果设置,它将与每个权重乘以像素值的总和相乘,以得出最终目标像素值。默认scale自动缩放为权重之和。

planes

设置要过滤哪些平面。默认是全部。允许的范围是0到15。

duration

指定如何确定流结束。

longest

最长输入的持续时间。(默认)

shortest

最短输入的持续时间。

first

第一个输入的持续时间。

39.164.1 命令

此滤镜支持以下命令:

weights
scale
planes

语法与具有相同名称的选项相同。

39.165 单色

使用自定义颜色滤镜将视频转换为灰度。

以下是接受选项的说明。

cb

设置色度蓝点。允许范围是-1到1。默认值是0。

cr

设置色度红点。允许范围是-1到1。默认值是0。

size

设置颜色滤镜大小。允许范围是0.1到10。默认值是1。

high

设置高光强度。允许范围是0到1。默认值是0。

39.165.1 命令

此滤镜支持上述所有选项作为命令.

39.166 形态

此滤镜允许应用主要的形态灰度变换,通过在第二输入流中设置任意结构,进行侵蚀和膨胀。

与简单实现和性能大大下降的侵蚀膨胀滤镜相比,速度关键时应使用morpho滤镜。

以下是接受选项的说明:

mode

设置要应用的形态变换,可以是:

erode
dilate
open
close
gradient
tophat
blackhat

默认是erode.

planes

设置要过滤的平面,默认情况下过滤所有平面(不包括Alpha平面)。

structure

设置第二输入流中的结构视频帧将从中处理,可以是first全部。默认值是全部.

morpho过滤器还支持帧同步选项。

39.166.1 命令

此过滤器支持相同的命令作为选项。

39.167 mpdecimate

丢弃与前一个帧差异不大的帧以减少帧率。

此过滤器的主要用途是用于非常低比特率的编码(例如,通过拨号调制解调器流式传输),但理论上它也可用于修复逆向插帧出错的电影。

以下是可接受选项的说明。

max

设置最多可以丢弃的连续帧数(如果为正值)或丢弃帧之间的最小间隔(如果为负值)。如果值为0,则无视先前连续丢弃帧的数量直接丢弃该帧。

默认值是 0。

keep

设置在开始丢弃帧之前可以忽略的最大连续相似帧数。如果值为0,则无视先前连续相似帧的数量直接丢弃该帧。

默认值是 0。

hi
lo
frac

设置丢弃的阈值。

的值hilo是针对 8x8 像素块的,表示实际的像素值差异。阈值为 64 表示每个像素有 1 个单位的差异,或者这种差异以不同方式分布在块中。

如果没有 8x8 块的差异超过hi的阈值,并且没有多于frac块(1表示整个图像)的差异超过lo.

的阈值,则该帧是丢弃候选。hi的默认值是 64*12,lo的默认值是 64*5,而frac的默认值是 0.33。

39.168 msad

获取两个输入视频之间的MSAD(绝对差异总和的平均值)。

此过滤器接受两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式,过滤器才能正常工作。它还假设两个输入具有相同的帧数,并逐帧进行比较。

通过日志系统打印出每帧的分量平均值、最小值和最大值的MSAD。

过滤器将每帧的计算出的MSAD存储在帧元数据中。

此过滤器还支持帧同步选项。

在以下示例中,正在处理的输入文件main.mpg将与参考文件进行比较ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi msad -f null -

39.169 multiply

将第一个视频流像素值与第二个视频流像素值相乘。

该过滤器接受以下选项:

scale

设置应用于第二个视频流的比例。默认值为1。 允许范围从09.

offset

设置应用于第二个视频流的偏移量。默认值为0.5。 允许范围从-11.

planes

指定将处理的输入视频流中的平面。 默认情况下,所有平面都将被处理。

39.169.1 命令

此过滤器支持相同的命令作为选项。

39.170 negate

对输入视频进行取反(反转)。

它接受以下选项:

components

设置要取反的分量。

分量的可用值是:

y
u
v
a
r
g
b
negate_alpha

值为 1 时,取反 alpha 分量(如果存在)。默认值为 0。

39.170.1 命令

此过滤器支持相同的命令作为选项。

39.171 nlmeans

使用非局部均值算法对帧进行降噪。

通过寻找其他具有相似上下文的像素调整每个像素。此上下文相似性通过比较其周围的pxp大小的补丁定义。补丁在rxr的范围内搜索。

注意,搜索区域定义了补丁的中心,这意味着有些补丁会由搜索区域外的像素组成。

过滤器接受以下选项。

s

设置降噪强度。默认值为 1.0。必须在 [1.0, 30.0] 范围内。

p

设置补丁大小。默认值为 7。必须为 1 到 99 之间的奇数。

pc

p相同,但用于色度平面。

默认值是0并表示自动。

r

设置搜索大小。默认值为 15。必须为 1 到 99 之间的奇数。

rc

r相同,但用于色度平面。

默认值是0并表示自动。

39.172 nnedi

使用神经网络边缘引导插值对视频进行去隔行处理。

该过滤器接受以下选项:

weights

必选选项,没有二进制文件过滤器无法工作。 当前文件可在此处找到: https://github.com/dubhater/vapoursynth-nnedi3/blob/master/src/nnedi3_weights.bin

deint

设置去隔行的帧,默认是all。 可以是all或者interlaced.

field

设置操作模式。

可以是以下之一:

af

使用帧标志,双字段。

a

使用帧标志,单字段。

t

仅使用顶字段。

b

仅使用底字段。

tf

使用双字段,顶字段优先。

bf

使用双字段,底字段优先。

planes

设置处理哪个平面,默认情况下滤波器处理所有帧。

nsize

设置每个像素周围局部邻域的大小,供预测神经网络使用。

可以是以下之一:

s8x6
s16x6
s32x6
s48x6
s8x4
s16x4
s32x4
nns

设置预测神经网络中的神经元数量。 可以是以下之一:

n16
n32
n64
n128
n256
qual

控制混合计算最终输出值的不同神经网络预测数量。可以是fast,默认或slow.

etype

设置在预测器中使用的权重集合。 可以是以下之一:

a, abs

权重经过训练以最小化绝对误差

s, mse

权重经过训练以最小化平方误差

pscrn

控制是否使用预筛选器神经网络来决定哪些像素应该由预测器神经网络处理,哪些可以通过简单的立方插值处理。 预筛选器经过训练用于判断像素是否可以通过立方插值处理还是需要预测器神经网络处理。 预筛选器的计算复杂性远低于预测器神经网络。由于大多数像素可以通过立方插值处理,使用预筛选器通常能够大幅加快处理速度。 预筛选器非常准确,因此使用与不使用之间的差异几乎总是难以察觉。

可以是以下之一:

none
original
new
new2
new3

默认值是new.

39.172.1 命令

此滤波器支持与选项相同的命令,除了权重选项外。

39.173 无格式

强制 libavfilter 不使用任何指定的像素格式作为进入下一个滤波器的输入。

它接受以下参数:

pix_fmts

一个由'|'分隔的像素格式名称列表,例如 pix_fmts=yuv420p|monow|rgb24"。

39.173.1 示例

  • 强制 libavfilter 使用一个非yuv420p的格式作为进入 vflip 滤波器的输入:
    noformat=pix_fmts=yuv420p,vflip
    
  • 将输入视频转换为列表中未包含的任何格式:
    noformat=yuv420p|yuv444p|yuv410p
    

39.174 噪声

在视频输入帧上添加噪点。

滤波器接受以下选项:

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.174.1 示例

向输入视频添加时间噪点和均匀噪点:

noise=alls=20:allf=t+u

39.175 规范化

规范化 RGB 视频(即直方图拉伸,对比度拉伸)。 参见:https://en.wikipedia.org/wiki/Normalization_(image_processing)

对于每帧的每个通道,滤波器计算输入范围并将其线性映射到用户指定的输出范围。输出范围默认值为从纯黑到纯白的全动态范围。

可以对输入范围使用时间平滑以减少因小型暗或明物体进入或离开场景引起的闪烁(亮度快速变化)。这类似于视频摄像机上的自动曝光(自动增益控制),并且,如同摄像机,它可能导致视频的过曝光或曝光不足期间。

R、G、B通道可以独立规范化,这可能导致一些颜色偏移,或者可以作为单个通道链接在一起,防止颜色偏移。链接规范化保留色相。独立规范化不能保留色相,因此它可以用于去除某些颜色偏色。独立和链接规范化可以以任意比例结合。

规范化滤波器接受以下选项:

blackpt
whitept

定义输出范围的颜色。最小输入值映射到blackpt。最大输入值映射到whitept。 默认分别为黑色和白色。在blackpt中指定白色,在whitept中指定黑色将生成颜色反转的规范化视频。使用灰色阴影可以减少动态范围(对比度)。在此指定饱和颜色可以创建一些有趣的效果。

smoothing

用于时间平滑的前几个帧数量。每个通道的输入范围使用当前帧和smoothing前几帧的滚动平均值进行平滑。默认值是0(无时间平滑)。

independence

控制独立(颜色偏移)通道规范化与链接(颜色保留)规范化的比例。0.0完全链接,1.0完全独立。默认值为1.0(完全独立)。

strength

滤波器的整体强度。1.0为全强度。0.0是一个相当昂贵的无效操作。默认值为1.0(全强度)。

39.175.1 命令

此滤波器支持与选项相同的命令,除了smoothing选项外。 命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.175.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.176 空值

将视频源不变地传递到输出。

39.177 光学字符识别

光学字符识别

此滤波器使用 Tesseract 进行光学字符识别。要启用此滤波器的编译,需将 FFmpeg 配置为--enable-libtesseract.

它接受以下选项:

datapath

设置 Tesseract 数据的路径。默认是使用安装时设置的路径。

language

设置语言,默认是 "eng"。

whitelist

设置允许的字符白名单。

blacklist

设置禁止的字符黑名单。

滤波器将识别的文本作为帧元数据导出lavfi.ocr.text。 滤波器将识别的单词的置信度作为帧元数据导出lavfi.ocr.confidence.

39.178 OpenCV

使用 libopencv 应用视频变换。

要启用此滤波器,安装 libopencv 库和头文件,并将 FFmpeg 配置为--enable-libopencv.

它接受以下参数:

filter_name

要应用的 libopencv 滤波器的名称。

filter_params

传递给 libopencv 滤波器的参数。如果未指定,则假设默认值。

请参考官方网站 libopencv 文档以获取更精确的信息:http://docs.opencv.org/master/modules/imgproc/doc/filtering.html

支持多个 libopencv 滤波器;详见以下子章节。

39.178.1 膨胀

使用特定的结构元素膨胀图像。 对应于libopencv函数cvDilate.

它接受以下参数:struct_el|nb_iterations.

struct_el表示一个结构元素,语法为:colsxrows+anchor_xxanchor_y/shape

colsrows代表结构元素的列数和行数,anchor_xanchor_y表示锚点,shape表示结构元素的形状。shape必须是“rect”、“cross”、“ellipse”或“custom”。

如果shape的值为“custom”,则它必须接着一个形式为"=filename“的字符串。文件名称filename假定表示一个二进制图像,每个可打印字符对应一个亮像素。当使用一个定制shape时,colsrows将被忽略,而使用读取文件的实际列数和行数。

struct_el的默认值为“3x3+0x0/rect”。 is "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.178.2 腐蚀

使用特定的结构元素腐蚀图像。 对应于libopencv函数cvErode.

它接受以下参数:struct_el:nb_iterations,语法和语义与膨胀滤镜相同。

39.178.3 平滑

对输入视频进行平滑处理。

过滤器接受以下参数:type|param1|param2|param3|param4.

type是要应用的平滑滤镜类型,必须是以下值之一:“blur”、“blur_no_scale”、“median”、“gaussian”或“bilateral”。默认值为“gaussian”。

关于param1, param2, param3param4的含义取决于平滑类型。param1param2接受正整数值或0。param3param4接受浮点值。

param1的默认值为3。其他参数的默认值为0。 is 3. The default value for the other parameters is 0.

这些参数对应于分配给libopencv函数的参数。cvSmooth.

39.179 示波器

2D 视频示波器。

有助于测量空间脉冲、阶跃响应、色度延迟等。

它接受以下参数:

x

设置示波器中心x位置。

y

设置示波器中心y位置。

s

按照帧对角线设置示波器大小。

t

设置示波器倾斜/旋转。

o

设置轨迹的不透明度。

tx

设置轨迹中心x位置。

ty

设置轨迹中心y位置。

tw

按照帧宽度设置轨迹宽度。

th

按照帧高度设置轨迹高度。

c

设置要跟踪的组件。默认情况下,它跟踪前三个组件。

g

绘制轨迹网格。默认情况下启用。

st

绘制统计信息。默认情况下启用。

sc

绘制示波器。默认情况下启用。

39.179.1 命令

该过滤器支持相同命令作为选项。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.179.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.180 叠加

在一个视频上叠加另一个视频。

它需要两个输入并产生一个输出。第一个输入是“主”视频,第二个输入被叠加在其上。

它接受以下参数:

以下是接受选项的描述。

x
y

设置叠加视频在主视频上的x和y坐标的表达式。默认值为“0”。如果表达式无效,则设置为一个巨大的值(意味着叠加不会显示在输出可见区域内)。

eof_action

参见framesync.

eval

设置xy表达式的评估时间。

它接受以下值:

init

仅在过滤器初始化或处理命令时评估一次表达式

frame

为每个输入帧评估表达式

默认值为 ‘frame’.

shortest

参见framesync.

format

设置输出视频的格式。

它接受以下值:

yuv420

强制YUV 4:2:0 8位平面输出

yuv420p10

强制YUV 4:2:0 10位平面输出

yuv422

强制YUV 4:2:2 8位平面输出

yuv422p10

强制YUV 4:2:2 10位平面输出

yuv444

强制YUV 4:4:4 8位平面输出

yuv444p10

强制YUV 4:4:4 10位平面输出

rgb

强制RGB 8位打包输出

gbrp

强制RGB 8位平面输出

auto

自动选择格式

默认值为 ‘yuv420’.

repeatlast

参见framesync.

alpha

设置叠加视频的alpha格式,可以为预乘。默认值为.

这些xy表达式可以包含以下参数。

main_w, W
main_h, H

主输入的宽度和高度。

overlay_w, w
overlay_h, h

叠加输入的宽度和高度。

x
y

计算值xy。对于每个新帧都会重新计算。

hsub
vsub

输出格式的水平和垂直色度子采样值。例如,对于像素格式“yuv422p”hsub为2,vsub为1。

n

输入帧的编号,从0开始

pos

输入帧在文件中的位置;如果未知为NAN;已废弃,不应使用。

t

时间戳,以秒为单位。如果输入时间戳未知,则为NAN。

此过滤器还支持framesync选项。

请注意,n, t变量仅在per frame时可用,当eval设置为 ‘init’.

请注意,帧是按每个输入视频的时间戳顺序获取的,因此,如果它们的初始时间戳不同,最好通过一个setpts=PTS-STARTPTS过滤器使它们在相同的零时间戳开始,就像movie过滤器示例那样。

您可以将多个叠加连接到一起,但应测试这种方法的效率。

39.180.1 命令

此过滤器支持以下命令:

x
y

修改叠加输入的x和y。 该命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持其当前值。

39.180.2 示例

  • 在主视频右下角距离10像素的位置绘制叠加:
    overlay=main_w-overlay_w-10:main_h-overlay_h-10
    

    使用命名选项,上述示例变为:

    overlay=x=main_w-overlay_w-10:y=main_h-overlay_h-10
    
  • 在输入视频左下角插入透明PNG徽标, 使用ffmpeg工具和-filter_complex选项:
    ffmpeg -i input -i logo -filter_complex 'overlay=10:main_h-overlay_h-10' output
    
  • 使用ffmpeg工具插入2个不同的透明PNG徽标(第二个徽标在右下角):
    ffmpeg -i input -i logo1 -i logo2 -filter_complex 'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10' output
    
  • 在主视频顶部添加一个透明的颜色层;WxH必须指定叠加滤镜主输入的大小:
    color=color=red@.3:size=WxH [over]; [in][over] overlay [out]
    
  • 原始视频和经过滤镜处理后的视频(此处为deshake滤镜)并排播放,使用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.181 降噪

应用过完备小波降噪器。

此滤波器接受以下选项:

depth

设置深度。

较大的深度值将对较低频率的分量进行降噪, 但会减慢过滤速度。

必须是范围为 8-16 的整数,默认值为8.

luma_strength, ls

设置亮度强度。

必须是范围为 0-1000 的双精度值,默认值为1.0.

chroma_strength, cs

设置色度强度。

必须是范围为 0-1000 的双精度值,默认值为1.0.

39.182 填充

对输入图像添加填充,并将原始输入放置在 提供的x, y坐标处。

它接受以下参数:

width, w
height, h

指定加上填充后的输出图像尺寸表达式。如果宽度高度的值为 0, 将使用对应的输入尺寸作为输出尺寸。

宽度表达式可以引用高度表达式中设置的值,反之亦然。

默认值为宽度高度为 0。

x
y

指定相对于输出图像的顶部/左侧边框的位置, 输入图像放置在填充区域中的偏移量。

x表达式可以引用y表达式中设置的值,反之亦然。

默认值为xy为 0。

如果xy计算为负数, 它们将被更改,以使输入图像居中于填充区域上。

color

指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)“颜色”部分 ffmpeg-utils 手册.

默认值为颜色为“黑色”。

eval

指定何时评估宽度, 高度, xy表达式。

它接受以下值:

init

仅在过滤器初始化或处理命令时评估表达式一次。

frame

对每帧传入的图像评估表达式。

默认值为‘init’.

aspect

填充到宽高比而不是分辨率。

对于宽度, 高度, x, 和y选项的值会是以下常量组成的表达式:

in_w
in_h

输入视频宽度和高度。

iw
ih

in_win_h.

out_w
out_h

宽度高度表达式指定的输出宽度和高度(填充区域的大小)。

ow
oh

out_wout_h.

x
y

xy表达式指定偏移量,或者如果尚未指定,则为 NAN。

a

iw / ih

sar

输入样本纵横比

dar

输入显示宽高比,与 (iw / ih) * sar

hsub
vsub

水平和垂直色度子样本值。例如,对于像素格式 “yuv422p”hsub是2并且vsub是1。

39.182.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.183 palettegen

为整个视频流生成一个调色板。

它接受以下选项:

max_colors

设置调色板中进行量化的最大颜色数量。 注意:调色板仍会包含256种颜色;未使用的调色板条目将是黑色。

reserve_transparent

创建一个最多含有255种颜色的调色板,并保留最后一种颜色用于透明处理。保留透明色对于GIF优化非常有用。如果未设置,调色板中的最大颜色数量将为256。对于独立图像,您可能希望禁用此选项。 默认启用。

transparency_color

设置用于透明背景的颜色。

stats_mode

设置统计模式。

它接受以下值:

full

计算完整帧的直方图。

diff

仅计算与前一帧不同部分的直方图。如果背景是静态的,这可能有助于更重视输入的运动部分。

single

为每帧计算新的直方图。

默认值是full.

该滤镜还导出帧元数据lavfi.color_quant_ratio (nb_color_in / nb_color_out),您可以用来评估调色板的颜色量化程度。 此信息也可以在info日志级别中看到。

39.183.1 示例

  • 使用以下命令生成视频的代表性调色板ffmpeg:
    ffmpeg -i input.mkv -vf palettegen palette.png
    

39.184 paletteuse

使用调色板对输入视频流进行下采样。

该滤镜需要两个输入:一个视频流和一个调色板。调色板必须是一个256像素的图像。

它接受以下选项:

dither

选择抖动模式。可用的算法包括:

bayer

有序8x8拜耳抖动(确定性)

heckbert

由Paul Heckbert在1982年定义的抖动(简单误差扩散)。注意:这种抖动有时被认为是“错误的”,作为参考包含在内。

floyd_steinberg

Floyd和Steingberg抖动(误差扩散)

sierra2

Frankie Sierra v2抖动(误差扩散)

sierra2_4a

Frankie Sierra v2精简版(误差扩散)

sierra3

Frankie Sierra v3抖动(误差扩散)

burkes

Burkes抖动(误差扩散)

atkinson

Bill Atkinson在Apple计算机开发的Atkinson抖动(误差扩散)

none

禁用抖动。

默认值是sierra2_4a.

bayer_scale

当选择了bayer抖动时,此选项定义纹理的尺度(交叉影的可见度)。取值较低意味着纹理更加明显,减少了色彩带状,取值较高意味着纹理较少明显,但伴随着更多色彩带状。

此选项必须是范围为[0,5]的整数值。默认值为2.

diff_mode

如果设置,定义处理的区域

rectangle

只有变化的矩形区域会被重新处理。这类似于GIF裁剪/偏移压缩机制。此选项在图像仅部分发生变化的情况下有助于提高速度,并且在限制误差扩散范围为包含运动场景的矩形时具有用处(如果场景变化不大,会产生更多确定输出,减少运动噪声并提升GIF压缩效果)。dither to the rectangle that bounds the moving scene (it leads to more deterministic output if the scene doesn’t change much, and as a result less moving noise and better GIF compression).

默认值是none.

new

为每一输出帧提供新的调色板。

alpha_threshold

设置透明性的Alpha阈值。Alpha值超过此阈值将被视为完全不透明,低于此阈值的将被视为完全透明。

此选项必须是范围为[0,255]的整数值。默认值为128.

39.184.1 示例

  • 使用调色板(例如通过palettegen生成)编码一个GIF视频ffmpeg:
    ffmpeg -i input.mkv -i palette.png -lavfi paletteuse output.gif
    

39.185 perspective

校正未垂直于屏幕录制的视频的透视效果。

以下为接受的参数说明。

x0
y0
x1
y1
x2
y2
x3
y3

设置左上角、右上角、左下角和右下角的坐标表达式。 默认值为0:0:W:0:0:H:W:H透视效果将保持不变。如果sense选项被设置为source指定的点将发送到目标的角落。如果sense选项被设置为destination,则源的角落将发送到指定的坐标。

表达式可以使用以下变量:

W
H

视频帧的宽度和高度。

in

输入帧计数。

on

输出帧计数。

interpolation

设置透视校正的插值方法。

它接受以下值:

linear
cubic

默认值为‘linear’.

sense

设置坐标选项的解释方式。

它接受以下值:

0, source

将源中指定点通过给定坐标发送到目标的角落。

1, destination

将来源的角落发送到目标中由指定坐标定义的点。

默认值为‘source’.

eval

设置坐标表达式的评估时机x0,y0,...x3,y3表达式被评估的时间。

它接受以下值:

init

仅在滤镜初始化或处理命令时评估表达式一次。

frame

为每一个到达的帧评估表达式。

默认值为‘init’.

39.186 phase

将隔行扫描视频延迟一个场时间,以改变场顺序。

主要用途是修复使用与电影转视频传输顺序相反的场顺序捕获的PAL电影。

以下为接受的参数说明。

mode

设置相位模式。

它接受以下值:

t

捕获场顺序为顶部优先,传输为底部优先。滤镜将延迟底部场。

b

捕获场顺序为底部优先,传输为顶部优先。滤镜将延迟顶部场。

p

以相同的场序捕获和传输。此模式仅存在于文档中供其他选项引用,但如果您实际选择此模式,滤镜将忠实地不做任何改变。

a

通过字段标志自动确定捕获场序,反转传输场序。 滤镜在每帧基础上选择‘t’和‘b’模式。如果没有字段信息可用,那么这与‘u’.

u

捕获未知或变化场序,反转传输场序。 滤镜通过分析图像在每帧基础上在‘t’和‘b’之间选择,以获得字段之间的最佳匹配。

T

捕获上场优先,传输未知或变化场序。 滤镜通过图像分析在‘t’和‘p’之间进行选择。

B

捕获下场优先,传输未知或变化场序。 滤镜通过图像分析在‘b’和‘p’之间进行选择。

A

通过字段标志确定捕获场序,传输未知或变化场序。 滤镜通过字段标志和图像分析在‘t’, ‘b’和‘p’之间进行选择。如果没有字段信息可用,那么这与‘U’一致。这是默认模式。

U

捕获和传输均为未知或变化场序。 滤镜仅通过图像分析在‘t’, ‘b’和‘p’之间进行选择。

39.186.1 命令

此滤镜支持上述所有选项并作为命令.

39.187 光敏性

减少视频中的各种闪光效果,以帮助癫痫患者。

它接受以下选项:

frames, f

设置过滤时使用的帧数。默认值为 30。

threshold, t

设置检测阈值系数。默认值是 1。 值越低越严格。

skip

设置采样帧时跳过的像素数。默认值为 1。 允许的范围是 1 到 1024。

bypass

保持帧不变。默认是禁用。

39.188 pixdesctest

像素格式描述测试滤镜,主要用于内部测试。输出视频应与输入视频相同。

例如:

format=monow, pixdesctest

可以用于测试monowhite像素格式描述定义。

39.189 pixelize

对视频流应用像素化效果。

滤镜接受以下选项:

width, w
height, h

设置将用于像素化的块尺寸。 默认值为16.

mode, m

设置使用的像素化模式。

可能的值有:

avg
min
max

默认值为avg.

planes, p

设置要过滤的平面。默认是过滤所有平面。

39.189.1 命令

此滤镜支持所有选项并作为命令.

39.190 pixscope

显示颜色通道的采样值。主要用于检查颜色和等级。支持的最小分辨率为 640x480。

滤镜接受以下选项:

x

设置示波器的 X 位置,相对于 X 轴的偏移量。

y

设置示波器的 Y 位置,相对于 Y 轴的偏移量。

w

设置示波器宽度。

h

设置示波器高度。

o

设置窗口的不透明度。此窗口还包含像素区域的统计信息。

wx

设置窗口的 X 位置,相对于 X 轴的偏移量。

wy

设置窗口的 Y 位置,相对于 Y 轴的偏移量。

39.190.1 命令

此滤镜支持相同命令作为选项。

39.191 pp7

应用后处理滤镜7。这是spp滤镜的一种变体,类似于spp = 6,使用7点DCT,其中仅在IDCT之后使用中心样本。

该滤镜接受以下选项:

qp

强制使用固定的量化参数。它接受范围为 0 到 63 的整数。如果未设置,滤镜将使用视频流中的QP(如果可用)。

mode

设置阈值模式。可用的模式有:

hard

设置硬阈值。

soft

设置软阈值(更好的去环效果,但可能更模糊)。

medium

设置中等阈值(良好的效果,默认值)。

39.192 premultiply

对输入视频流应用阿尔法预乘效果,使用第二流的第一平面作为阿尔法。

两个流必须具有相同的尺寸和相同的像素格式。

该滤镜接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认值为 0xf,即所有平面都将被处理。

inplace

处理时不需要第二输入,而是使用输入流的阿尔法平面。

39.193 prewitt

对输入视频流应用Prewitt算子。

该滤镜接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认值为 0xf,即所有平面都将被处理。

scale

设置与过滤结果相乘的值。

delta

设置将添加到滤波结果上的值。

39.193.1 命令

此滤镜支持上述所有选项并作为命令.

39.194 pseudocolor

使用伪色给视频帧着色。

此滤镜接受以下选项:

c0

设置像素第一分量表达式

c1

设置像素第二分量表达式

c2

设置像素第三分量表达式

c3

设置像素第四分量表达式,对应于阿尔法分量

index, i

设置用于改变颜色的基础分量

preset, p

选择一个内置的LUT。默认设置为无。

可用的LUTs:

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.194.1 命令

此过滤器支持上述所有选项为命令.

39.194.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.195 PSNR

获取两个输入视频之间的平均、最大和最小 PSNR(峰值信噪比)。

此过滤器接受两个输入视频,第一个输入被视为"主"源并原样传递到输出。第二个输入用作计算 PSNR 的"参考"视频。

两个视频输入必须具有相同的分辨率和像素格式,此过滤器才能正常工作。同时假定两个输入具有相同数量的帧,它们逐帧进行比较。

通过日志系统打印获得的平均 PSNR。

过滤器存储每帧的累积 MSE(均方误差),在处理结束时对所有帧进行平均,并应用以下公式以获得 PSNR:

PSNR = 10*log10(MAX^2/MSE)

其中,MAX 是每个图像组件最大值的平均值。

以下是接受参数的说明。

stats_file, f

如果指定,过滤器将使用命名文件保存每帧各自的 PSNR。当文件名等于"-"时,数据将发送到标准输出。

stats_version

指定使用的统计文件格式的版本。每种格式的细节如下所述。默认值为 1。

stats_add_max

确定是否将最大值输出到统计日志。默认值为 0。当 stats_version >= 2 时有效。如果设置且 stats_version < 2,过滤器将返回错误。

此过滤器还支持framesync选项。

如果stats_file被选中,打印的文件包含一个:对序列,用于每对比较的帧。

如果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.195.1 示例

  • 例如:
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] psnr="stats_file=stats.log" [out]
    

    在此示例中,处理的输入文件与参考文件进行比较ref_movie.mpg。每帧 PSNR 存储在stats.log.

  • 另一个使用不同容器的示例:
    ffmpeg -i main.mpg -i ref.mkv -lavfi  "[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr" -f null -
    

39.196 pullup

反向逐行扫描(反交错)过滤器,能够处理混合硬交错、24000/1001 fps 的逐帧内容,以及 30000/1001 fps 的逐帧内容。

pullup 过滤器设计为利用未来上下文作出决策。此过滤器是无状态的,因为它不会锁定跟随某种模式,而是向前查看以下场景以识别匹配并重建逐帧。

为了生成具有均匀帧率的内容,请在 pullup 后插入 fps 过滤器,使用fps=24000/1001如果输入帧率为 29.97fps,fps=24对于 30fps 和(罕见的)25fps 交错输入。

过滤器接受以下选项:

jl
jr
jt
jb

这些选项分别设置图像左、右、上和下需忽略的"垃圾"量。左和右以 8 像素为单位,而上和下以 2 行为单位。默认每边为 8 像素。

sb

设置严格断点。将此选项设置为 1 将减少生成偶发错误帧的可能性,但在高运动序列中也可能会导致大量帧被丢弃。相反,将其设置为 -1 将使过滤器更容易匹配字段。这可能有助于处理字段之间略有模糊的视频,但也可能导致输出中有逐行扫描帧。默认值为0.

mp

设置要使用的度量平面。接受以下值:

l

使用亮度平面。

u

使用蓝色色度平面。

v

使用红色色度平面。

此选项可以设置为使用色度平面而不是默认亮度平面进行过滤器计算。这可能会在非常干净的源素材上提高准确性,但更可能会降低准确性,尤其是在出现色度噪音(彩虹效应)或任何灰度视频时。设置mp为色度平面的主要目的是降低 CPU 负载,使 pullup 可以在慢速机器上实时使用。

为了获得最佳结果(输出文件中没有重复的帧),有必要更改输出帧率。例如,反交错 NTSC 输入:

ffmpeg -i input -vf pullup -r 24000/1001 ...

39.197 qp

更改视频量化参数(QP)。

过滤器接受以下选项:

qp

设置量化参数的表达式。

通过 eval API 执行表达式评估,可以包含以下常量等:

已知

如果索引不是 129,则为 1,否则为 0。

qp

从 -129 到 128 开始的连续索引。

39.197.1 示例

  • 某些表达式,例如:
    qp=2+2*sin(PI*qp)
    

39.198 qrencode

使用 libqrencode 库生成二维码(见https://fukuchi.org/works/qrencode/),并将其叠加在当前帧上。

要启用此过滤器的编译,需要配置 FFmpeg。--enable-libqrencode.

二维码是根据提供的文本或文本模式生成的。生成的二维码根据指定选项缩放并叠加在视频输出上。

如果未指定文本,则不会叠加二维码。

此过滤器接受以下选项:

qrcode_width, q
padded_qrcode_width, Q

指定渲染二维码的宽度的表达式,无填充和有填充的。该qrcode_width表达式可以引用padded_qrcode_width表达式设置的值,反之亦然。默认情况下,padded_qrcode_width设置为qrcode_width,意味着没有填充。

这些表达式针对每个新帧进行评估。

参见qrencode 表达式部分以了解详细信息。

x
y

指定用于定位填充二维码左上角的表达式。该x表达式可以引用y表达式设置的值,反之亦然。

默认情况下x设置为0,意味着二维码 放置在输入的左上角。

这些表达式对于每个新帧都会进行评估。

参见qrencode 表达式部分了解详细信息。

case_sensitive, cs

指示 libqrencode 使用区分大小写的编码。默认情况下启用。可以禁用以减少二维码编码的尺寸。

level, l

指定二维码编码的错误纠正级别。纠正级别越高,编码尺寸会增加,但二维码对损坏更加鲁棒。 较低的级别是L.

它接受以下值:

L
M
Q
H
expansion

选择输入文本的展开方式。可以是nonenormal(默认)。参见qrencode 文本展开下方了解详细信息。

text
textfile

定义要渲染的文本。如果未指定,则不会编码二维码 (仅显示一个空的有颜色的框架)。

如果启用展开,则将文本视为文本模板,使用 qrencode的展开机制进行处理。参见qrencode 文本展开下方了解详细信息。

background_color, bc
foreground_color, fc

设置二维码和背景颜色。默认值为前景色是 "black",默认值为背景色是 "white"。

要了解颜色选项的语法,请检查(ffmpeg-utils)“颜色” 部分在 ffmpeg-utils 手册中.

39.198.1 qrencode 表达式

选项设置的表达式包含以下常量和函数。

dar

输入显示纵横比,与 (宽度 / 高度) * sar

duration

当前帧的持续时间,以秒为单位

hsub
vsub

横向和纵向色度子采样值。例如,对于像素格式 "yuv422p"hsub为 2,vsub为 1。

main_h, H

输入高度

main_w, W

输入宽度

n

输入帧数,从 0 开始

pict_type

代表图片类型的数字

qr_w, w

编码二维码的宽度

rendered_qr_w, q
rendered_padded_qr_w, Q

渲染二维码的宽度,带或不带填充。

这些参数允许qQ表达式互相引用,因此您可以例如指定q=3/4*Q.

rand(min, max)

返回介于最小值最大值

sar

输入样本纵横比

t

时间戳以秒表示,如果输入时间戳未知则为 NAN

x
y

绘制文本的 x 和 y 偏移坐标。

这些参数允许xy表达式互相引用,因此您可以例如指定y=x/dar.

39.198.2 qrencode 文本展开

如果expansion设置为none,则文本原样打印。

如果expansion设置为normal(默认值), 将使用以下扩展机制。

反斜杠字符‘\’,后跟任意字符,总是展开为 第二个字符。

形式为%{...}的序列将被展开。花括号中的文本是一个函数名称,可能还带有用冒号‘:’分隔的参数。 如果参数包含特殊字符或分隔符(‘:’或‘}’),则必须进行转义。

注意,作为text选项的值在过滤器参数字符串中、在过滤器图描述中的过滤器参数中以及可能的 shell 中,它们可能必须被 转义多达四级;使用带textfile选项的文本文件可以避免这些问题。

以下功能可用:

n, frame_num

返回帧编号

pts

返回当前帧的展示时间戳。

它最多可以接受两个参数。

第一个参数是时间戳的格式;默认值为flt秒,以微秒精度的小数表示;hms表示为格式化的[-]HH:MM:SS.mmm时间戳,具有毫秒精度。gmtime表示帧时间戳格式化为 UTC 时间;localtime表示帧时间戳格式化为本地时区时间。如果格式设置为hms24hh,时间以 24 小时格式表示(00-23)。

第二个参数是添加到时间戳的偏移量。

如果格式设置为localtimegmtime,可以提供第三个参数:strftimeC 函数格式字符串。默认情况下,YYYY-MM-DD HH:MM:SS格式将被使用。

expr, e

评估表达式的值并以双精度输出。

它必须接受一个指定要评估表达式的参数,接受在qrencode_expressions.

expr_formatted, ef

评估表达式的值并以格式化字符串输出。

第一个参数是所评估的表达式,与上一个功能一样表达式函数。 第二个参数指定输出格式。允许的值为 “x’, ‘X’, ‘d” 和 “u”。 它们的处理方式与printf函数中的处理方式完全相同。 第三个参数是可选的,设置输出占据的位置数。 它可用于从左侧添加零的填充。

gmtime

过滤器运行的时间,以 UTC 表示。 它可以接受一个参数:一个strftimeC 函数格式字符串。 格式字符串扩展为支持变量%[1-6]N其打印秒的小数部分,可选地指定数字的位数。

localtime

过滤器运行的时间,以本地时区表示。 它可以接受一个参数:一个strftimeC 函数格式字符串。 格式字符串扩展为支持变量%[1-6]N其打印秒的小数部分,可选地指定数字的位数。

metadata

帧元数据。需要一个或两个参数。

第一个参数是必需的,指定元数据键。

第二个参数是可选的,指定一个默认值,在未找到或为空的元数据键时使用。

可以通过检查以 TAG 开头的条目来识别可用元数据, 这些条目包含在运行时每个帧部分打印的内容中。ffprobe -show_frames.

在通向 qrencode 滤镜的滤镜中生成的字符串元数据也可用。

rand(min, max)

返回一个介于最小值最大值

39.198.3 示例

  • 生成一个编码指定文本的二维码,使用默认大小,将其覆盖在输入视频的左上角,默认大小:
    qrencode=text=www.ffmpeg.org
    
  • 与上类似,但选择蓝色背景粉色前景:
    qrencode=text=www.ffmpeg.org:bc=pink@0.5:fc=blue
    
  • 将二维码放置在输入视频的右下角:
    qrencode=text=www.ffmpeg.org:x=W-Q:y=H-Q
    
  • 生成一个宽度为 200 像素,且填充后宽度为二维码宽度的 4/3 的二维码:
    qrencode=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成一个填充宽度为 200 像素,且二维码宽度为填充后宽度的 3/4 的二维码:
    qrencode=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 使二维码占输入视频宽度的一部分:
    qrencode=text=www.ffmpeg.org:q=W/5
    
  • 生成一个编码帧编号的二维码:
    qrencode=text=%{n}
    
  • 生成一个编码 GMT 时间戳的二维码:
    qrencode=text=%{gmtime}
    
  • 生成一个编码为浮点数表示的时间戳的二维码:
    qrencode=text=%{pts}
    

39.199 quirc

使用 libquirc 库识别并解码二维码(见https://github.com/dlbeer/quirc/),并将识别出的二维码位置和有效载荷作为元数据打印。

要启用此过滤器的编译,需要用以下配置 FFmpeg--enable-libquirc.

对于输入视频中发现的每个二维码,添加一些带有前缀的元数据条目lavfi.quirc.N,其中N是与二维码相关联的索引,从 0 开始。

以下是每个元数据值的描述:

lavfi.quirc.count

找到的二维码的数量,如果没有找到,则不设置。

lavfi.quirc.N.corner.M.x
lavfi.quirc.N.coreer.M.y

包含二维码的方形边框的四个角的 x/y 位置, 其中M是角的索引,从 0 开始。

lavfi.quirc.N.payload

二维码的有效载荷

39.200 random

从帧缓存中按随机顺序刷新视频帧。 不丢弃任何帧。 受frei0rnervous 滤镜启发。

frames

设置帧缓存的大小,以帧数为单位,范围从2512。默认值为30.

seed

设置随机数生成器的种子,必须是一个介于0UINT32_MAX之间的整数。如果未指定,或明确设置为小于0的值,过滤器将在尽力的基础上尝试使用一个良好的随机种子。

39.201 readeia608

从视频帧的顶部行中读取闭幕字幕 (EIA-608) 信息。

此过滤器为lavfi.readeia608.X.cclavfi.readeia608.X.line添加帧元数据,其中X是包含 EIA-608 数据的行编号(从 0 开始)。以下是每个元数据值的描述:

lavfi.readeia608.X.cc

以十六进制打印的存储为 EIA-608 数据的两个字节。

lavfi.readeia608.X.line

检测并读取到 EIA-608 数据的行号。

此过滤器接受以下选项:

scan_min

设置开始扫描 EIA-608 数据的行号。默认值为0.

scan_max

设置结束扫描 EIA-608 数据的行号。默认值为29.

spw

设置预留用于同步代码检测的宽度比例。 默认值为0.27。允许的范围是[0.1 - 0.7].

chp

启用奇偶校验位检查。如果发生奇偶校验错误,过滤器将输出0x00作为那个字符的值。默认值为 false。

lp

在进一步处理之前对行进行低通滤波。默认启用。

39.201.1 命令

此过滤器支持上述所有选项作为命令.

39.201.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.202 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.202.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.203 remap

使用第 2 个:Xmap 和第 3 个: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.204 去噪

去噪滤镜是一种用于渐进式视频的空间去噪器。

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.205 移除标志

通过使用图像文件确定哪些像素构成标志,抑制电视台标志。通过用邻近像素填充这些像素来工作。

该滤镜接受以下选项:

filename, f

设置过滤器位图文件,可以是libavformat支持的任何图像格式。图像文件的宽度和高度必须与正在处理的视频流匹配。

提供的位图图像中值为零的像素不被视为标志的一部分,非零像素被认为是标志的一部分。如果你使用白色(255)作为标志,黑色(0)作为其余部分,将是安全的。制作过滤器位图时,建议截取可见标志的黑框的屏幕截图,然后使用一次或两次阈值过滤器和腐蚀滤镜。

如果需要,可以手动修复小斑点。请记住,如果标志像素未覆盖,过滤器质量将大大降低。将太多的像素标为标志的一部分不会造成太大伤害,但会增加覆盖图像所需的模糊量,并比必要的破坏更多信息,而额外的像素会在标志较大时减慢速度。

39.206 字段重复

此滤镜使用视频ES头的重复字段标志,并根据其值硬性重复字段。

39.207 反转

反转一个视频剪辑。

警告:此滤镜需要内存来缓冲整个剪辑,因此建议修整。

39.207.1 示例

  • 取一个剪辑的前5秒,并将其反转。
    trim=end=5,reverse
    

39.208 RGB位移

水平和/或垂直移动R/G/B/A像素。

该滤镜接受以下选项:

rh

设置红色水平移动量。

rv

设置红色垂直移动量。

gh

设置绿色水平移动量。

gv

设置绿色垂直移动量。

bh

设置蓝色水平移动量。

bv

设置蓝色垂直移动量。

ah

设置Alpha通道水平移动量。

av

设置Alpha通道垂直移动量。

edge

设置边缘模式,可以是涂抹,默认值,或扭曲.

39.208.1 命令

此滤镜支持上述所有选项作为命令.

39.209 罗伯茨

将罗伯茨交叉算子应用于输入视频流。

该滤镜接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。 默认值为0xf,所有平面都将被处理。

scale

设置与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.209.1 命令

此滤镜支持上述所有选项作为命令.

39.210 旋转

以以弧度表达的任意角度旋转视频。

该滤镜接受以下选项:

以下是可选参数的说明。

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)

完全包含输入视频所需的最小宽度/高度,旋转角度为一个弧度。

这些仅在计算out_wout_h表达式时可用。

39.210.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.210.2 命令

过滤器支持以下命令:

a, angle

设置角度表达式。命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值不变。

39.211 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.212 比例

使用 libswscale 库缩放(调整大小)输入视频。

比例过滤器通过更改输出的样本纵横比,强制使输出显示纵横比与输入相同。

如果输入图像格式与下一个过滤器请求的格式不同,比例过滤器将转换输入为请求的格式。

39.212.1 选项

过滤器接受以下选项,任何 libswscale 缩放器支持的选项,以及任何framesync选项。

参见(ffmpeg-scaler)ffmpeg-scaler 手册完整的缩放器选项列表。

width, w
height, h

设置输出视频尺寸表达式。默认值为输入尺寸。

如果宽度w值为 0,则输入宽度用于输出。如果高度h值为 0,则输入高度用于输出。

如果只有一个值是 -n 且 n >= 1,则比例过滤器将使用一个值,即保持输入图像的纵横比,从其他指定维度计算得来。之后,它会确保计算的维度能被 n 整除,并根据需要调整值。

如果两个值均为 -n 且 n >= 1,则行为将与前面详细说明的两个值都设置为 0 的情况相同。

下面是接受的用于维度表达式的常量列表。

eval

指定何时评估宽度高度表达式。接受以下值:

init

仅在过滤器初始化以及处理命令时评估表达式一次。

frame

为每个传入帧评估表达式。

默认值是‘init’.

interl

设置隔行模式。接受以下值:

1

强制隔行感知缩放。

0

不应用隔行缩放。

-1

根据源帧是否标记为隔行,从而选择是否应用隔行感知缩放。

默认值是‘0’.

flags

设置 libswscale 缩放标识。参见(ffmpeg-scaler)ffmpeg-scaler 手册完整的值列表。如果未显式指定,过滤器将应用默认标识。

param0, param1

设置 libswscale 缩放算法所需的输入参数。参见(ffmpeg-scaler)ffmpeg-scaler 手册完整的文档。如果未显式指定,过滤器将应用空参数。

intent

设置在不同颜色空间之间进行转换时使用的 ICC 渲染意图。接受以下值:

perceptual

使用感性引导的色调和色域映射曲线。映射的具体细节可能随时发生变化,不应作为稳定的参考。此意图推荐用于典型观看环境中最终图像/视频内容的观看。

relative_colorimetric

使用基于颜色的剪辑曲线静态裁剪超出色域的颜色,试图找到色度上最不失真的色域内颜色。此意图执行白点适配和黑点适配。默认值是此意图。此意图推荐在忠实色彩还原至关重要的情况下使用,即使以剪辑为代价。

absolute_colorimetric

硬裁剪超出色域的颜色,不尝试白点或黑点还原。此意图将以 1:1 比例再现色域内颜色在输出显示器上的外观,就像它们在参考显示器上出现的一样,假设输出显示器经过适当校准。

saturation

执行饱和度映射 - 即以尽可能保留原始信号外观的非线性方式,直接将输入色彩范围拉伸到输出色彩范围。此意图推荐用于信号内容评估,因为它不会导致任何剪辑。这大致类似于不进行任何颜色映射,尽管它仍考虑了母版显示器原色和编码 TRC 的任何差异。

size, s

设置视频大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils 手册中的“视频大小”部分.

in_color_matrix
out_color_matrix

设置输入/输出 YCbCr 色彩空间类型。

这允许覆盖自动检测的值,还允许强制指定用于输出和编码器的特定值。

如果未指定,则色彩空间类型取决于像素格式。

可能的值:

auto

自动选择。

bt709

符合国际电信联盟(ITU)建议 BT.709 的格式。

fcc

设置符合美国联邦通信委员会(FCC)法规代码 CFR 第 47(2003)第 73.682(a)条的色彩空间。

bt601
bt470
smpte170m

设置色彩空间符合以下标准:

  • 国际电信联盟无线电通信部门(ITU-R)建议 BT.601
  • ITU-R Rec. BT.470-6 (1998) 系统 B, B1 和 G
  • 电影电视工程师协会(SMPTE)标准 ST 170:2004
smpte240m

设置色彩空间符合 SMPTE 标准 ST 240:1999。

bt2020

设置色彩空间符合 ITU-R BT.2020 非恒定亮度系统。

in_range
out_range

设置输入/输出 YCbCr 样本范围。

这允许覆盖自动检测的值,还允许强制指定用于输出和编码器的特定值。如果未指定,则范围取决于像素格式。可能的值:

auto/unknown

自动选择。

jpeg/full/pc

设置全范围(以 8 位亮度为例为 0-255)。

mpeg/limited/tv

设置“MPEG”范围(以 8 位亮度为例为 16-235)。

in_chroma_loc
out_chroma_loc

设置输入/输出色度样本位置。如果未指定,则默认使用中心位色度。可能的值:

auto, unknown
left
center
topleft
top
bottomleft
bottom
in_primaries
out_primaries

设置输入/输出RGB原色。

允许覆盖自动检测的值,并强制指定用于输出和编码器的特定值。可能的值:

auto

自动选择。这是默认值。

bt709
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
ebu3213
in_transfer
out_transfer

设置输入/输出传输响应曲线(TRC)。

允许覆盖自动检测的值,并强制指定用于输出和编码器的特定值。可能的值:

auto

自动选择。这是默认值。

bt709
bt470m
gamma22
bt470bg
gamma28
smpte170m
smpte240m
linear
iec61966-2-1
srgb
iec61966-2-4
xvycc
bt1361e
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
force_original_aspect_ratio

启用在保持原始纵横比的同时,根据需要减少或增加输出视频宽度或高度。可能的值:

disable

按指定比例缩放视频并禁用此功能。

decrease

输出视频尺寸会自动减少(如有必要)。

increase

输出视频尺寸会自动增加(如有必要)。

此选项的一个有用实例是,当您知道特定设备允许的最大分辨率时,可以使用此选项限制输出视频到该分辨率,同时保留纵横比。例如,设备A允许1280x720播放,而您的视频是1920x800。使用此选项(设置为减少)并在命令行中指定1280x720会使输出变为1280x533。

请注意,这与指定-1wh不同,您仍需为此选项指定输出分辨率以使其发挥作用。

force_divisible_by

确保在与force_original_aspect_ratio一起使用时,输出的宽度和高度都能被指定的整数整除。这与使用-nwh选项中的效果类似。

此选项尊重force_original_aspect_ratio的设置值,相应地增加或减少分辨率。视频的纵横比可能会稍作修改。

如果您需要视频适配或超出使用force_original_aspect_ratio定义的分辨率,同时又有编码器对宽度或高度可整除性限制,此选项可能派上用场。

reset_sar

启用此选项会将输出SAR重置为1。此外,如果用户通过宽度或高度表达式(例如w=-4:h=360w=iw/2:h=-1)或启用force_original_aspect_ratio请求比例缩放,则会考虑输入DAR并将输出缩放为生成方形像素。默认值是false。

选项的值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.

可用。

teval=frame.

可用。

poseval=frame中可用。已弃用,请勿使用。

ref_w, rw
ref_h, rh
ref_a
ref_dar, rdar
ref_n
ref_t
ref_pos

与上面内容相同,但针对第二个参考输入。如果存在任意这些变量,则此过滤器接受两个输入。

39.212.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
    
  • 使用reset_sar使像素变为正方形,并确保生成的分辨率是偶数(某些编解码器要求):
    scale='-2:ih-mod(ih,2):reset_sar=1'
    
  • 按目标精确缩放,但将SAR重置为1:
    scale='400:300:reset_sar=1'
    
  • 缩放到适合400x300以内的偶数尺寸,保留输入的SAR:
    scale='400:300:force_original_aspect_ratio=decrease:force_divisible_by=2'
    
  • 缩放生成正方形像素,尺寸为偶数且适合400x300以内:
    scale='400:300:force_original_aspect_ratio=decrease:force_divisible_by=2:reset_sar=1'
    
  • 将字幕流(sub)缩放到与主视频(main)大小匹配,然后叠加。("scale2ref")
    '[main]split[a][b]; [ref][a]scale=rw:rh[c]; [b][c]overlay'
    
  • 将徽标缩放为视频高度的1/10,同时保持其显示纵横比。
    [logo-in][video-in]scale=w=oh*dar:h=rh/10[logo-out]
    

39.212.3 命令

此过滤器支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。 命令接受与相应选项相同的语法。

如果指定的表达式无效,则保持当前值。

39.213 scale_vt

使用VTPixelTransferSession缩放并转换颜色参数。

过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值为输入的尺寸。

color_matrix

设置输出色彩空间矩阵。

color_primaries

设置输出颜色原色。

color_transfer

设置输出传输特性。

39.214 scharr

对输入视频流应用Scharr算子。

过滤器接受以下选项:

planes

设置要处理的平面,未处理的平面将被复制。默认值为0xf,所有平面都会被处理。

scale

设置将与过滤结果相乘的值。

delta

设置将添加到过滤结果的值。

39.214.1 命令

此过滤器支持上述所有选项作为命令.

39.215 scroll

以恒定速度水平和/或垂直滚动输入视频。

过滤器接受以下选项:

horizontal, h

设置水平滚动速度。默认值为0。允许范围是-1到1。负值改变滚动方向。

vertical, v

设置垂直滚动速度。默认值为0。允许范围是-1到1。负值改变滚动方向。

hpos

设置初始水平滚动位置。默认值为0。允许范围是0到1。

vpos

设置初始垂直滚动位置。默认值为0。允许范围是0到1。

39.215.1 命令

此过滤器支持以下命令:

horizontal, h

设置水平滚动速度。

vertical, v

设置垂直滚动速度。

39.216 scdet

检测视频场景变化。

此过滤器通过在帧之间设置MAFD的帧元数据以及场景得分,并将帧传递到下一个过滤器,使得它们能够利用这些元数据检测场景变化或其他内容。

此外,在检测到场景变化时,该过滤器记录一条消息并设置帧的元数据threshold.

lavfi.scd.mafd对每一帧设置带有MAFD的元数据键值。

lavfi.scd.score对每一帧设置带有场景变化得分的元数据键值以检测场景变化。

lavfi.scd.time对当前过滤帧的时间设置元数据键值,用于通过检测场景变化threshold.

过滤器接受以下选项:

threshold, t

以最大变化百分比设置场景变化检测阈值。 合适的值在[8.0, 14.0]范围内。范围threshold[0., 100.].

默认值为10..

sc_pass, s

设置传递场景变化帧到下一个过滤器的标志。默认值为0如果您只想获取场景变化帧的快照,可以启用它。

39.217 selectivecolor

调整青色、洋红、黄色和黑色(CMYK)到特定颜色范围(如"红色"、"黄色"、"绿色"、"青色"等)。 调整范围由颜色的"纯度"(即颜色的饱和度)定义。

此过滤器类似于Adobe Photoshop的选择性颜色工具。

过滤器接受以下选项:

correction_method

选择颜色校正方法。

可用值有:

absolute

指定的调整值按原样应用(直接加到或减去原始像素分量值)。

relative

指定的调整值相对于原始分量值进行调整。

默认值为absolute.

reds

针对红色像素(红色分量值最大的像素)的调整

yellows

针对黄色像素(蓝色分量值最小的像素)的调整

greens

针对绿色像素(绿色分量值最大的像素)的调整

cyans

针对青色像素(红色分量值最小的像素)的调整

blues

针对蓝色像素(蓝色分量值最大的像素)的调整

magentas

针对洋红色像素(绿色分量值最小的像素)的调整

whites

针对白色像素(所有分量值大于128的像素)的调整

neutrals

针对除纯黑和纯白以外所有像素的调整

blacks

针对黑色像素(所有分量值小于128的像素)的调整

psfile

指定Photoshop选择性色彩文件(.asv)以导入设置。

所有调整设置(reds, yellows等)最多接受4个空格分隔的浮点调整值,范围为[-1,1], 分别用于调整其范围内像素的青色、洋红色、黄色和黑色的量。

39.217.1 示例

  • 在每个绿色区域增加50%的青色并减少33%的黄色,在蓝色区域增加27%的洋红:
    selectivecolor=greens=.5 0 -.33 0:blues=0 .27
    
  • 使用一个Photoshop选择性色彩预设:
    selectivecolor=psfile=MySelectiveColorPresets/Misty.asv
    

39.218 separatefields

separatefields接受一个基于帧的视频输入,并将每帧分为其组成字段, 生成一个新的半高剪辑,具有两倍的帧率和帧数。

此过滤器使用帧中的字段优先信息决定在输出中每对字段中的哪个字段先呈现。 如果判断错误,请使用setfield过滤器放在separatefields过滤器之前。

39.219 setdar, setsar

setdar过滤器为过滤器输出视频设置显示纵横比(Display Aspect Ratio)。

通过更改指定的样本(即像素)纵横比来完成,根据以下公式:

DAR = 水平分辨率 / 垂直分辨率 * SAR

请记住,setdar过滤器不会修改视频帧的像素尺寸。此外,该过滤器设置的显示纵横比可能会被过滤器链中后续的过滤器更改,例如缩放或应用另一个"setdar"或"setsar"过滤器。

setsar过滤器为过滤器输出视频设置样本(即像素)纵横比。

请记住,由于此过滤器的应用,输出显示纵横比将根据上述公式发生变化。

请记住,该过滤器设置的样本纵横比setsar过滤器可能会在过滤器链中的后续过滤器中改变,例如应用了另一种“setsar”或“setdar”过滤器。

它接受以下参数:

r, ratio, dar (setdar only), sar (setsar only)

设置过滤器使用的宽高比。

参数可以是浮点数字符串或一个表达式。如果未指定参数,则默认值为“0”,表示使用与输入相同的值。

max

设置在将表达的宽高比简化为有理数时用于表示分子和分母的最大整数值。默认值为100.

参数sar是一个包含以下常量的表达式:

w, h

输入宽度和高度。

a

w / h.

sar

输入样本宽高比。

dar

输入显示宽高比。它与w / h) * sar.

hsub, vsub

水平和垂直色度子采样值。例如,对于像素格式“yuv422p”hsub是 2,而vsub是 1。

39.219.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.220 setfield

为输出视频帧强制字段设置。

setfield过滤器为输出帧标记隔行扫描类型字段。它不会更改输入帧,只会设置相应的属性,从而影响帧如何被后续过滤器处理(例如fieldorderyadif).

过滤器接受以下选项:

mode

可用值为:

auto

保持相同的字段属性。

bff

将帧标记为底部字段优先。

tff

将帧标记为顶部字段优先。

prog

将帧标记为逐行扫描。

39.221 setparams

为输出视频帧强制帧参数设置。

setparams过滤器为输出帧标记隔行扫描和颜色范围。它不会改变输入帧,只会设置相应的属性,从而影响帧如何被过滤器/编码器处理。

field_mode

可用值为:

auto

保持相同的字段属性(默认值)。

bff

将帧标记为底部字段优先。

tff

将帧标记为顶部字段优先。

prog

将帧标记为逐行扫描。

range

可用值为:

auto

保持相同的颜色范围属性(默认值)。

unspecified, unknown

将帧标记为未指定颜色范围。

limited, tv, mpeg

将帧标记为有限范围。

full, pc, jpeg

将帧标记为全范围。

color_primaries

设置颜色基准。 可用值为:

auto

保持相同的颜色基准属性(默认值)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
film
bt2020
smpte428
smpte431
smpte432
jedec-p22
color_trc

设置颜色传递特性。 可用值为:

auto

保持相同的颜色传递特性(默认值)。

bt709
unknown
bt470m
bt470bg
smpte170m
smpte240m
linear
log100
log316
iec61966-2-4
bt1361e
iec61966-2-1
bt2020-10
bt2020-12
smpte2084
smpte428
arib-std-b67
colorspace

设置颜色空间。 可用值为:

auto

保持相同的颜色空间属性(默认值)。

gbr
bt709
unknown
fcc
bt470bg
smpte170m
smpte240m
ycgco
bt2020nc
bt2020c
smpte2085
chroma-derived-nc
chroma-derived-c
ictcp
chroma_location

设置色度样本位置。 可用值为:

auto

保持相同的色度位置(默认值)。

unspecified, unknown
left
center
topleft
top
bottomleft
bottom

39.222 shear

对输入视频应用剪切变换。

此过滤器支持以下选项:

shx

X方向的剪切系数。默认值为0。 允许范围为-2到2。

shy

Y方向的剪切系数。默认值为0。 允许范围为-2到2。

fillcolor, c

设置用于填充未被变换视频覆盖的输出区域的颜色。有关此选项的一般语法,请参见(ffmpeg-utils)"Color"章节中的ffmpeg-utils手册。 如果选择特殊值“none”,则不会打印背景(例如,当背景从不显示时,这很有用)。

默认值为“black”。

interp

设置插值类型。可以是bilinearnearest。默认值为bilinear.

39.222.1 命令

此过滤器支持上述所有选项作为命令.

39.223 showinfo

为每个输入视频帧显示包含各种信息的行。输入视频不被修改。

此过滤器支持以下选项:

checksum

计算每个平面的校验和。默认启用。

udu_sei_as_ascii

尽可能将用户未注册的SEI数据打印为ascii字符,否则以十六进制格式显示。

显示的行包含一系列形式的键值对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_charlibavutil/avutil.h.

checksum

输入帧所有平面的Adler-32校验和(以十六进制打印)。

plane_checksum

输入帧每个平面的Adler-32校验和(以十六进制打印),以“[c0 c1 c2 c3]".

mean

输入帧的每个平面的像素平均值,以以下格式表示 "[均值0 均值1 均值2 均值3]".

stdev

输入帧的每个平面的像素值的标准差,以以下格式表示 "[标准差0 标准差1 标准差2 标准差3]".

39.224 显示调色板

显示每帧的256色调色板。此滤镜仅适用于pal8像素格式的帧。

它接受以下选项:

s

设置用于表示一个调色板颜色条目的方框大小。默认值是30(用于一个30x30像素方框)。

39.225 重新排列帧

重新排序和/或复制和/或丢弃视频帧。

它接受以下参数:

mapping

设置输入帧的目标索引。 这是一个用空格或'|'分隔的索引列表,用于将输入帧映射到输出帧。索引数也设置了每个索引可能的最大值。 索引'-1'有特殊意义,即丢弃帧。

第一帧的索引是0。默认值是不改变输入。

39.225.1 示例

  • 交换每三个输入帧中的第二帧和第三帧:
    ffmpeg -i INPUT -vf "shuffleframes=0 2 1" OUTPUT
    
  • 交换每十个输入帧中的第十帧和第一帧:
    ffmpeg -i INPUT -vf "shuffleframes=9 1 2 3 4 5 6 7 8 0" OUTPUT
    

39.226 重新排列像素

在视频帧中重新排序像素。

此滤镜接受以下选项:

direction, d

设置重新排列方向。可以是正向或逆向。 默认方向是正向。

mode, m

设置重新排列模式。可以是水平、垂直或块模式。

width, w
height, h

设置重新排列的块大小。在水平重新排列模式下,仅使用宽度部分的大小,在垂直重新排列模式下,仅使用高度部分的大小。

seed, s

设置用于像素重新排列的随机种子。主要用于反向过滤过程来恢复原始输入。 例如,要反向正向重新排列,您需要使用相同的参数 和完全相同的种子,并设置方向为逆向。

39.227 重新排列平面

重新排序和/或复制视频平面。

它接受以下参数:

map0

作为第一个输出平面使用的输入平面的索引。

map1

作为第二个输出平面使用的输入平面的索引。

map2

作为第三个输出平面使用的输入平面的索引。

map3

作为第四个输出平面使用的输入平面的索引。

第一个平面的索引是0。默认值是不改变输入。

39.227.1 示例

  • 交换输入的第二个和平面:
    ffmpeg -i INPUT -vf shuffleplanes=0:2:1:3 OUTPUT
    

39.228 信号统计

评估用于确定与模拟视频媒体的数字化相关问题的各种视觉指标。

默认情况下,滤镜将记录这些元数据值:

YMIN

显示输入帧中包含的最小Y值。表达范围为[0-255]。

YLOW

显示输入帧中第10百分位数的Y值。表达范围为[0-255]。

YAVG

显示输入帧中的平均Y值。表达范围为[0-255]。

YHIGH

显示输入帧中第90百分位数的Y值。表达范围为[0-255]。

YMAX

显示输入帧中包含的最大Y值。表达范围为[0-255]。

UMIN

显示输入帧中包含的最小U值。表达范围为[0-255]。

ULOW

显示输入帧中第10百分位数的U值。表达范围为[0-255]。

UAVG

显示输入帧中的平均U值。表达范围为[0-255]。

UHIGH

显示输入帧中第90百分位数的U值。表达范围为[0-255]。

UMAX

显示输入帧中包含的最大U值。表达范围为[0-255]。

VMIN

显示输入帧中包含的最小V值。表达范围为[0-255]。

VLOW

显示输入帧中第10百分位数的V值。表达范围为[0-255]。

VAVG

显示输入帧中的平均V值。表达范围为[0-255]。

VHIGH

显示输入帧中第90百分位数的V值。表达范围为[0-255]。

VMAX

显示输入帧中包含的最大V值。表达范围为[0-255]。

SATMIN

显示输入帧中包含的最小饱和度值。 表达范围为[0-约181.02]。

SATLOW

显示输入帧中第10百分位数的饱和度值。 表达范围为[0-约181.02]。

SATAVG

显示输入帧中的平均饱和度值。表达范围 为[0-约181.02]。

SATHIGH

显示输入帧中第90百分位数的饱和度值。 表达范围为[0-约181.02]。

SATMAX

显示输入帧中包含的最大饱和度值。 表达范围为[0-约181.02]。

HUEMED

显示输入帧中的色调中位值。表达范围为 [0-360]。

HUEAVG

显示输入帧中的平均色调值。表达范围为 [0-360]。

YDIF

显示当前帧的Y平面的所有值与前一帧对应值的样本值差异的平均值。 表达范围为[0-255]。

UDIF

显示当前帧的U平面的所有值与前一帧对应值的样本值差异的平均值。 表达范围为[0-255]。

VDIF

显示当前帧的V平面的所有值与前一帧对应值的样本值差异的平均值。 表达范围为[0-255]。

YBITDEPTH

显示当前帧中Y平面的位深度。 表达范围为[0-16]。

UBITDEPTH

显示当前帧中U平面的位深度。 表达范围为[0-16]。

VBITDEPTH

显示当前帧中V平面的位深度。 表达范围为[0-16]。

该滤镜接受以下选项:

stat
out

stat指定图像分析的附加形式。out输出具有指定类型像素高亮显示的视频。

两个选项接受以下值:

tout

识别时间异常像素。一个时间异常值是在同一字段中的邻近像素不一样的像素。例如,时间异常值的例子包括视频丢帧、磁头堵塞或录像带跟踪问题的结果。

vrep

识别垂直线重复。垂直线重复包括帧中相似的像素行。在数字生成的视频中垂直线重复通常见到,但在从模拟源数字化的视频中不常见。如果它出现在模拟源数字化视频中,可能表示丢帧补偿器的补偿。

brng

识别超出合法广播范围的像素。

color, c

out选项设置高亮色。默认颜色是 黄色。

39.228.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"
    
  • 播放视频,并在帧上绘制信号统计元数据。
    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.229 签名

计算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.229.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.230 siti

为视频计算空间信息(SI)和时间信息(TI)分数,按ITU-T Rec. P.910(11/21)的定义:多媒体应用的主观视频质量评估方法。可用PDF位于https://www.itu.int/rec/T-REC-P.910-202111-S/en。 请注意,这是对应已被取代推荐的遗留实现。请参考ITU-T Rec. P.910(07/22)的最新版本:https://www.itu.int/rec/T-REC-P.910-202207-I/en

它接受以下选项:

print_summary

如果设置为1,将在控制台打印摘要统计信息。默认是0。

39.230.1 示例

  • 计算SI/TI指标并打印摘要:
    ffmpeg -i input.mp4 -vf siti=print_summary=1 -f null -
    

39.231 smartblur

模糊输入视频但不影响轮廓。

它接受以下选项:

luma_radius, lr

设置亮度半径。选项值必须是在[0.1,5.0]范围内的浮点数,表示用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为1.0。

luma_strength, ls

设置亮度强度。选项值必须是在[-1.0,1.0]范围内的浮点数,用于配置模糊处理。[0.0,1.0]范围内的值将模糊图像,而[-1.0,0.0]范围内的值将锐化图像。默认值为1.0。

luma_threshold, lt

设置用作系数的亮度阈值,以确定像素是否应该被模糊。选项值必须是在[-30,30]范围内的整数。值为0将过滤整个图像,值在[0,30]范围内将过滤平坦区域,值在[-30,0]范围内将过滤边缘。默认值为0。

chroma_radius, cr

设置色度半径。选项值必须是在[0.1,5.0]范围内的浮点数,表示用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为luma_radius.

chroma_strength, cs

设置色度强度。选项值必须是在[-1.0,1.0]范围内的浮点数,用于配置模糊处理。[0.0,1.0]范围内的值将模糊图像,而[-1.0,0.0]范围内的值将锐化图像。默认值为luma_strength.

chroma_threshold, ct

设置用作系数的色度阈值,以确定像素是否应该被模糊。选项值必须是在[-30,30]范围内的整数。值为0将过滤整个图像,值在[0,30]范围内将过滤平坦区域,值在[-30,0]范围内将过滤边缘。默认值为luma_threshold.

alpha_radius, ar

设置Alpha通道半径。选项值必须是在[0.1,5.0]范围内的浮点数,表示用于模糊图像的高斯滤波器的方差(越大越慢)。默认值为luma_radius.

alpha_strength, as

设置Alpha通道强度。选项值必须是在[-1.0,1.0]范围内的浮点数,用于配置模糊处理。[0.0,1.0]范围内的值将模糊图像,而[-1.0,0.0]范围内的值将锐化图像。默认值为luma_strength.

alpha_threshold, at

设置用作系数的Alpha通道阈值,以确定像素是否应该被模糊。选项值必须是在[-30,30]范围内的整数。值为0将过滤整个图像,值在[0,30]范围内将过滤平坦区域,值在[-30,0]范围内将过滤边缘。默认值为luma_threshold.

如果未明确设置色度或Alpha选项,相应的亮度值将被使用。

39.232 sobel

对输入视频流应用Sobel算子。

滤波器接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。默认值是0xf,所有平面都会被处理。

scale

设置乘以滤波结果的值。

delta

设置添加到滤波结果的值。

39.232.1 命令

此滤波器支持上述所有选项作为命令.

39.233 spp

应用一种简单的后处理滤波器,它以多个(或在qualitylevel6所有)偏移量对图像进行压缩和解压缩,并对结果取平均。

滤波器接受以下选项:

quality

设置质量。此选项定义用于平均的级别数量。接受范围是0-6的整数。设置为0时,滤波器将无效。值为6表示最高质量。每增加该值1,速度将降低大约2倍。默认值为3.

qp

强制使用固定量化参数。如果未设置,滤波器将使用视频流中的QP(如果可用)。

mode

设置阈值模式。可用模式为:

hard

设置硬阈值(默认)。

soft

设置软阈值(具有更好的去振铃效果,但可能更模糊)。

use_bframe_qp

如果设置为1,启用使用B帧的QP。使用此选项可能会导致闪烁,因为B帧通常具有较大的QP。默认值为0(未启用)。

39.233.1 命令

此滤波器支持以下命令:

quality, level

设置质量级别。值max可用于设置最大级别,目前为6.

39.234 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模型设置缩放因子。允许的值是2, 34。 默认值为2。对于SRCNN模型,为必要的缩放因子,因为它接受使用双三次插值上采样并具有适当缩放因子的输入。

为了获得完整功能(例如异步执行),请使用dnn_processing滤波器。

39.235 sr_amf

使用AMD高级媒体框架库进行硬件加速,对输入视频进行升级(增加尺寸)。 使用高级算法进行升级,以获得更高的输出质量。 设置输出宽高的方式与scale滤波器相同。

滤波器接受以下选项:

w
h

设置输出视频维度表达式。默认值为输入维度。

允许使用与缩放滤镜。

algorithm

设置用于缩放的算法:

双线性

双线性

双三次

双三次

sr1-0

视频 SR1.0 这是默认值

点采样

点采样

sr1-1

视频 SR1.1

sharpness

控制高清缩放器的锐化程度。该值是范围 [0.0, 2.0] 中的浮点数

format

控制输出的像素格式。默认情况下或未指定时,将使用输入像素格式。

keep-ratio

当输出尺寸的纵横比与输入图像的纵横比不同,强制缩放器保持输入图像的纵横比。 默认值为 false。

fill

指定输出图像的感兴趣区域之外的部分是否用纯色填充。 该区域未填满整个输出表面。

39.235.1 示例

  • 将输入缩放到 720p,保持纵横比,并确保输出为 yuv420p。
    sr_amf=-2:720:format=yuv420p
    
  • 使用算法视频 SR1.1 放大到 4K。
    sr_amf=4096:2160:algorithm=sr1-1
    

39.236 SSIM

获取两个输入视频之间的 SSIM(结构相似性度量)。

此滤镜需要两个输入视频,第一个输入视频被视为“主要”源,并未更改地传递到输出。 第二个输入用作计算 SSIM 的“参考”视频。

两个视频输入必须具有相同的分辨率和像素格式,以使此滤镜正常工作。 此外,它假定两个输入具有相同的帧数,并逐帧进行比较。

滤镜存储每帧计算得出的 SSIM 值。

以下是接受的参数的描述。

stats_file, f

如果指定,滤镜将使用指定的文件名保存每帧的 SSIM 值。当文件名为“-”时, 数据将发送到标准输出。

如果stats_file被选择,打印的文件包含一系列以如下形式的键/值对::对于每一对比较的帧。

以下是每个显示参数的描述:

n

输入帧的连续编号,从1开始

Y, U, V, R, G, B

较帧中的指定成分的 SSIM 值。

All

整个帧的比较 SSIM 值。

dB

与上述相同,但以dB表示。

此滤镜还支持framesync选项。

39.236.1 示例

  • 例如:
    movie=ref_movie.mpg, setpts=PTS-STARTPTS [main];
    [main][ref] ssim="stats_file=stats.log" [out]
    

    在此示例中,正在处理的输入文件与参考文件进行比较。 每帧的 SSIM 值存储在ref_movie.mpgstats_filestats.log.

  • 中。
    ffmpeg -i main.mpg -i ref.mpg -lavfi  "ssim;[0:v][1:v]psnr" -f null -
    
  • 另一个同时使用 PSNR 和 SSIM 的示例:
    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 -
    

使用不同容器的示例:

在不同的立体图像格式之间进行转换。

此滤镜接受以下选项:

in

设置输入的立体图像格式。

可用的输入图像格式值为:

sbsl

并排平行(左眼在左,右眼在右)

sbsr

并排交叉眼(右眼在左,左眼在右)

sbs2l

并排平行,半宽分辨率(左眼在左,右眼在右)

sbs2r

并排交叉眼,半宽分辨率(右眼在左,左眼在右)

abl
tbl

上下格式(左眼在上,右眼在下)

abr
tbr

上下格式(右眼在上,左眼在下)

ab2l
tb2l

上下格式,半高分辨率(左眼在上,右眼在下)

ab2r
tb2r

上下格式,半高分辨率(右眼在上,左眼在下)

al

交替帧(左眼在前,右眼在后)

ar

交替帧(右眼在前,左眼在后)

irl

交替行(左眼在顶部行,右眼从下一行开始)

irr

交替行(右眼在顶部行,左眼从下一行开始)

icl

交替列,左眼优先

icr

交替列,右眼优先

默认值为‘sbsl’.

out

设置输出的立体图像格式。

sbsl

并排平行(左眼在左,右眼在右)

sbsr

并排交叉眼(右眼在左,左眼在右)

sbs2l

并排平行,半宽分辨率(左眼在左,右眼在右)

sbs2r

并排交叉眼,半宽分辨率(右眼在左,左眼在右)

abl
tbl

上下格式(左眼在上,右眼在下)

abr
tbr

上下格式(右眼在上,左眼在下)

ab2l
tb2l

上下格式,半高分辨率(左眼在上,右眼在下)

ab2r
tb2r

上下格式,半高分辨率(右眼在上,左眼在下)

al

交替帧(左眼在前,右眼在后)

ar

交替帧(右眼在前,左眼在后)

irl

交替行(左眼在顶部行,右眼从下一行开始)

irr

交替行(右眼在顶部行,左眼从下一行开始)

arbg

红/蓝灰色立体图像 (左眼红滤镜,右眼蓝滤镜)

argg

红/绿灰色立体图像 (左眼红滤镜,右眼绿滤镜)

arcg

红/青灰色立体图像 (左眼红滤镜,右眼青滤镜)

arch

红/青半色立体图像 (左眼红滤镜,右眼青滤镜)

arcc

红/全色立体图像 (左眼红滤镜,右眼青滤镜)

arcd

红/青颜色优化立体图像,使用最小二乘投影进行杜布瓦优化 (左眼红滤镜,右眼青滤镜)

agmg

绿/洋红灰色立体图像 (左眼绿滤镜,右眼洋红滤镜)

agmh

绿/洋红半色立体图像 (左眼绿滤镜,右眼洋红滤镜)

agmc

绿/洋红全色立体图像 (左眼绿滤镜,右眼洋红滤镜)

agmd

绿/洋红颜色优化立体图像,使用最小二乘投影进行杜布瓦优化 (左眼绿滤镜,右眼洋红滤镜)

aybg

黄/蓝灰色立体图像 (左眼黄滤镜,右眼蓝滤镜)

aybh

黄/蓝半色立体图像 (左眼黄滤镜,右眼蓝滤镜)

aybc

黄/蓝全色立体图像 (左眼黄滤镜,右眼蓝滤镜)

aybd

黄/蓝颜色优化立体图像,使用最小二乘投影进行杜布瓦优化 (左眼黄滤镜,右眼蓝滤镜)

ml

单眼输出(仅左眼)

mr

单眼输出(仅右眼)

chl

棋盘格,左眼优先

chr

棋盘格,右眼优先

icl

交替列,左眼优先

icr

交替列,右眼优先

hdmi

HDMI 帧打包

默认值是 'arcd’.

39.237.1 示例

  • 将输入视频从并排平行格式转换为黄色/蓝色 Dubois 立体格式:
    stereo3d=sbsl:aybd
    
  • 将输入视频从上下(左眼在上,右眼在下)格式转换为并排交叉眼格式。
    stereo3d=abl:sbsr
    

39.238 streamselect,astreamselect

选择视频或音频流。

该滤镜接受以下选项:

inputs

设置输入数量。默认值是 2。

map

设置输入索引以重新映射到输出。

39.238.1 命令

streamselectastreamselect滤镜支持以下命令:

map

设置输入索引以重新映射到输出。

39.238.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.239 字幕

使用 libass 库在输入视频的顶部绘制字幕。

要启用此滤镜的编译,需要借助以下配置选项构建 FFmpeg:--enable-libass。此外还需要通过 libavcodec 和 libavformat 将传入的字幕文件转换为 ASS(高级子站字幕Alpha)格式的字幕文件。

该滤镜接受以下选项:

filename, f

设置字幕文件的文件名。此项为必填。

original_size

指定原始视频的尺寸,即为 ASS 文件所创作的视频。有关此选项的语法,请参阅(ffmpeg-utils)“视频尺寸”部分,在 ffmpeg-utils 手册中。 由于 ASS 的宽高比计算存在缺陷,当宽高比发生变化时,这一点是必要的以正确缩放字体。

fontsdir

设置包含可供滤镜使用字体的目录路径。此处字体将被添加到字体提供程序所使用的字体之外。

alpha

处理 alpha 通道,默认 alpha 通道保持不变。

charenc

设置字幕输入字符编码。subtitles滤镜专用。仅在字符编码不是 UTF-8 时有用。

stream_index, si

设置字幕流索引。subtitles滤镜专用。

force_style

覆盖字幕的默认样式或脚本信息参数。可接受一个包含 ASS 样式格式键值对的字符串,以逗号“,”分隔。KEY=VALUE分隔。

wrap_unicode

根据 Unicode 换行算法进行换行。需要至少 libass 0.17.0 版本(或者 LIBASS_VERSION 0x01600010)andlibass 必须采用 libunibreak 构建。

此选项默认启用,但本地 ASS 除外。

如果未指定第一个键,则假定第一个值指定filename.

例如,若需将文件sub.srt渲染到输入视频的顶部,可使用命令:

subtitles=sub.srt

这相当于:

subtitles=filename=sub.srt

若需渲染文件的默认字幕流video.mkv,使用:

subtitles=video.mkv

若需渲染该文件中的第二个字幕流,使用:

subtitles=video.mkv:si=1

若需使字幕流自sub.srt以 80% 透明蓝色显示DejaVu Serif,使用:

subtitles=sub.srt:force_style='Fontname=DejaVu Serif,PrimaryColour=&HCCFF0000'

39.240 super2xsai

通过 Super2xSaI(缩放和插值)像素艺术缩放算法将输入放大 2 倍并平滑处理。

适用于放大像素艺术图像而不会降低清晰度。

39.241 swaprect

交换视频中的两个矩形对象。

此滤镜接受以下选项:

w

设置对象宽度。

h

设置对象高度。

x1

设置第一个矩形的 x 坐标。

y1

设置第一个矩形的 y 坐标。

x2

设置第二个矩形的 x 坐标。

y2

设置第二个矩形的 y 坐标。

所有表达式在每帧计算一次。

所有选项都是包含以下常量的表达式:

w
h

输入的宽度和高度。

a

等于 /

sar

输入的样本宽高比。

dar

输入的显示宽高比,等于( / ) * 样本宽高比

n

输入帧的编号,从 0 开始。

t

以秒为单位的时间戳。如果输入时间戳未知,则为 NAN。

pos

输入帧在文件中的位置,未知则为 NAN;已弃用,请勿使用

39.241.1 命令

此滤镜支持以上所有选项作为命令.

39.242 swapuv

交换 U 和 V 平面。

39.243 tblend

混合连续的视频帧。

参见混合

39.244 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.245 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.246 阈值

对视频流应用阈值效果。

此滤镜需要四个视频流来执行阈值操作。 第一个流是我们正在处理的流。 第二个流包含阈值,第三个流包含最小值, 最后一个第四流包含最大值。

滤镜接受以下选项:

planes

设置将处理哪些通道,未处理的通道将被复制。 默认值是 0xf,即处理所有通道。

例如,如果第一个流像素的分量值小于第二个阈值流像素分量的阈值, 第三个流的值将被选取,否则将选取第四个流像素分量值。

使用颜色源滤镜可以执行各种类型的阈值处理:

39.246.1 命令

此滤镜支持所有的选项作为命令.

39.246.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.247 缩略图

从给定的一系列连续帧中选择最具代表性的帧。

滤镜接受以下选项:

n

设置要分析的帧批次大小;在一组n帧中,滤镜将从中选择一个,然后处理下一批n帧直到结束。 默认值是100.

log

设置日志级别以显示选定帧的统计信息。 默认值是info.

由于滤镜会跟踪整组帧序列,因此值越大,n值导致的内存占用会越高,因此不推荐使用较高值。

39.247.1 示例

  • 每 50 帧提取一张图片:
    thumbnail=50
    
  • 使用的缩略图创建完整示例ffmpeg:
    ffmpeg -i in.avi -vf thumbnail,scale=300:200 -frames:v 1 out.png
    

39.248 图块

将多个连续帧拼接在一起。

The 拆分滤镜可以反向操作。

滤镜接受以下选项:

layout

COLUMNSxROWS形式设置网格大小。 范围为 UINT_MAX 单元格。 默认值是6x5.

nb_frames

设置给定区域中要渲染的最大帧数。 必须小于或等于wxh。 默认值是0,表示区域将完全被使用。

margin

设置像素的外边框边距。 范围是 0 到 1024。 默认值为0.

padding

设置内边框厚度(即帧之间的像素数)。 对于更高级的边距选项(例如为边缘设置不同的值), 请参考 pad 视频滤镜。 范围是 0 到 1024。 默认值是0.

color

指定未使用区域的颜色。 有关此选项的语法,请查看(ffmpeg-utils)"颜色"一节在 ffmpeg-utils 手册中。 默认值color是 "black"。

overlap

设置在将多个连续帧拼接在一起时重叠的帧数。 该值必须介于0nb_frames - 1之间。 默认值是0.

init_padding

设置在显示第一个输出帧之前最初为空的帧数。 这控制了第一次获取输出帧的时间。 该值必须介于0nb_frames - 1之间。 默认值是0.

39.248.1 示例

  • 为所有关键帧(-skip_frame nokey)生成 8x8 PNG 图块:
    ffmpeg -skip_frame nokey -i file.avi -vf 'scale=128:72,tile=8x8' -an -vsync 0 keyframes%03d.png
    

    The -vsync 0是必要的,以防止ffmpeg重复每个输出帧以适应最初检测到的帧率。

  • 显示5图片在一个3x2帧区域中, 它们之间的距离是7像素,且具有2像素的初始边距, 使用混合的平面和命名选项:
    tile=3x2:nb_frames=5:padding=7:margin=2
    

39.249 倾斜和移位

应用倾斜和移位效果。

当你颠倒时间和空间时会发生什么?

通常,视频由几帧组成,每帧表示不同的 时间瞬间,并展示了场景在被捕捉的 空间内的发展。此滤镜是这种概念的对立面, 灵感来自倾斜和移位摄影。

过滤后的帧包含构成本序列的事件的整个时间线, 这是通过将每帧的一个像素切片放入一个帧中实现的。 然而,由于没有无限宽的帧,这只能做输入帧的宽度, 然后通过在每个随后的帧中移走一列重新组合视频。 为了将空间映射到时间,滤镜还使每个输入帧倾斜, 从而保留运动。这是通过逐步选择每个输入帧的不同 列来完成的。

最终效果是一种反向视差,因此后面的物体移动 得比前面的物体快得多。此视频效果的理想条件是: 要么只有非常少的运动且背景是静止的, 要么有很多运动并且景深非常宽(例如,当在火车 上移动时的广泛全景)。

滤镜接受以下参数:

tilt

倾斜视频同时移动(默认)。当未设置时,视频将滑动 一张静态图像,由每帧的第一列组成。

start

过滤开始时该做什么(见下文)。

end

过滤结束时该做什么(见下文)。

hold

在开始过滤之前应经过多少列。

pad

在结束过滤之前应插入多少列。

通常情况下,过滤器从第一帧开始就会移动和倾斜,并在接收到最后一帧时停止。然而,在开始过滤之前可以保留正常视频,以使效果慢慢融入其中。同样,在最后也可以在视频结束时重建最后一帧视频。或者,也可以在开始和结束时直接使用黑屏。

none

过滤立即开始,并在收到最后一帧时结束。

frame

在处理过程中,前几帧或最后一帧保持完整。

black

在过滤的开始或结束时填充黑色。

39.250 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

绕过已交错的帧,仅调整帧率。

垂直低通过滤和绕过已交错帧只能为mode interleave_topinterleave_bottom.

39.251 tmedian

从多个连续输入视频帧中选择中值像素。

过滤器接受以下选项:

radius

设置中值过滤器的半径。 默认值为1。允许范围为1到127。

planes

设置需要过滤的平面。默认值是15,通过该值处理所有平面。

percentile

设置中值百分位数。默认值是0.5。 默认值为0.5时将始终选择中值值,而0将选择 最小值,1选择最大值。

39.251.1 命令

此过滤器支持以上所有选项作为命令,不包括选项radius.

39.252 tmidequalizer

应用时间中途视频均衡效果。

中途视频均衡会调整一组视频帧使其有相同的直方图,同时尽可能保持其动态。它在例如匹配视频帧序列的曝光时相当有用。

此过滤器接受以下选项:

radius

设置过滤半径。默认值为5。允许范围为1到127。

sigma

设置过滤σ值。默认值为0.5。这控制了过滤的强度。 将此选项设置为0实际上不会产生任何效果。

planes

设置要处理的平面。默认值为15,即所有可用平面。

39.253 tmix

混合连续的视频帧。

以下是接受的选项描述。

frames

要混合的连续帧数量。如果未指定,默认为3。

weights

指定每个输入视频帧的权重。 每个权重用空格分隔。如果权重数量少于帧数, 未设置的权重将使用最后指定的权重。frames last specified weight will be used for all remaining unset weights.

scale

指定缩放比例,如果设置,它将乘以 每个权重与像素值的乘积之和,得出最终的目标 像素值。默认情况下缩放会自动缩放到权重的总和。

planes

设置需要过滤的平面。默认值是全部。允许范围为0到15。

39.253.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.253.2 命令

此过滤器支持以下命令:

weights
scale
planes

语法与同名选项相同。

39.254 tonemap

从不同动态范围映射色调。

此过滤器期望数据为单精度浮点数,因为需要操作(并可能输出)超出范围的值。需要另一过滤器,例如zscale,将结果帧转换为可用格式。

实现的色调映射算法仅适用于线性光,因此输入数据应该事先线性化(并可能正确标记)。

ffmpeg -i INPUT -vf zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p OUTPUT

39.254.1 选项

过滤器接受以下选项。

tonemap

设置要使用的色调映射算法。

可能的值为:

不应用任何色调映射,只去饱和过亮像素。

裁剪

硬裁剪任何超出范围的值。用于在范围内值保持色彩精度同时,失真范围外的值。

线性

将整个参考色域拉伸为显示的线性倍数。

伽马

调整音调曲线之间的对数关系。

Reinhard

通过简单曲线保持整体图像亮度,使用非线性对比度,这会导致细节平滑和颜色精度下降。

Hable

更好地保留暗区和亮区的信息reinhard代价是稍微使一切变暗。当细节保留比颜色和亮度准确性更重要时使用它。

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.255 tpad

临时填充视频帧。

此滤镜接受以下选项:

start

指定输入视频流前的延迟帧数。默认值为0。

stop

指定输入视频流后的填充帧数。 设置为-1以无限期填充。默认值为0。

start_mode

设置添加到流开头的帧类型。 可以是addclone。 使用add添加纯色帧。 使用clone则添加与第一帧相同的克隆帧。 默认值为add.

stop_mode

设置添加到流末尾的帧类型。 可以是addclone。 使用add添加纯色帧。 使用clone则添加与最后帧相同的克隆帧。 默认值为add.

start_duration, stop_duration

指定开始/停止延迟的持续时间。请参见(ffmpeg-utils)ffmpeg-utils(1) 手册中的 Time duration 部分以了解接受的语法。 这些选项覆盖startstop。默认值为0。

color

指定填充区域的颜色。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils 手册中的 "Color" 部分.

默认值为color“black”。

39.256 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

保留纵向几何(当高度 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

默认值为none.

例如顺时针旋转90度并保留纵向布局:

transpose=dir=1:passthrough=portrait

上述命令也可以指定为:

transpose=1:portrait

39.257 trim

裁剪输入,使输出仅包含输入的一部分连续片段。

它接受以下参数:

start

指定要保留部分的开始时间,即具有时间戳start的帧将是输出中的第一帧。

end

指定要丢弃的第一帧的时间,即紧随时间戳end的帧将是输出中的最后一帧。

start_pts

这与start相同,只是此选项以时间基单位而不是秒设置开始时间戳。

end_pts

这与end相同,只是此选项以时间基单位而不是秒设置结束时间戳。

duration

输出的最大持续时间(以秒为单位)。

start_frame

应传递到输出的第一帧的编号。

end_frame

应丢弃的第一帧的编号。

start, end,和duration是以时间持续时间的形式表示的;请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解接受的语法。

请注意,前两组开始/结束选项和duration选项查看帧时间戳,而_frame变量仅简单地计算通过过滤器的帧数。此外,请注意,此过滤器不会修改时间戳。如果希望输出的时间戳从零开始,请在修剪过滤器后插入一个setpts过滤器。

如果设置了多个开始或结束选项,此过滤器会尝试贪婪地保留所有符合至少一个指定限制的帧。为了仅保留同时符合所有限制的部分,可以链式展开多个修剪过滤器。

默认设置保留所有输入数据。因此,可以仅设置例如结束值来保留指定时间之前的所有内容。

示例:

  • 丢弃除输入的第二分钟之外的所有内容:
    ffmpeg -i INPUT -vf trim=60:120
    
  • 仅保留第一秒:
    ffmpeg -i INPUT -vf trim=duration=1
    

39.258 去预乘

使用第二流的第一个平面作为 alpha 通道对输入视频流应用 alpha 去预乘效果。

两个流必须具有相同的尺寸和像素格式。

过滤器接受以下选项:

planes

设置将被处理的平面,未处理的平面将被复制。默认值为 0xf,将处理所有平面。

如果格式有 1 或 2 个组件,则亮度是位 0。 如果格式有 3 或 4 个组件: 对于 RGB 格式,位 0 是绿色,位 1 是蓝色,位 2 是红色; 对于 YUV 格式,位 0 是亮度,位 1 是色度-U,位 2 是色度-V。 如果存在,alpha 通道始终是最后一位。

inplace

不需要第 2 个输入进行处理,而是使用输入流中的 alpha 平面。

39.259 锐化

锐化或模糊输入视频。

它接受以下参数:

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.259.1 示例

  • 应用强亮度锐化效果:
    unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5
    
  • 对亮度和色度参数应用强模糊:
    unsharp=7:7:-2:7:7:-2
    

39.260 拆分图块

将由拼贴图像组成的视频分解为单个图像。

输出视频的帧率是输入视频的帧率乘以图块的数量。

此过滤器是图块.

的逆操作。

layout

设置网格大小(即行和列的数量)。有关此选项的语法,请检查(ffmpeg-utils)ffmpeg-utils 手册中的“视频大小”部分.

39.260.1 示例

  • 从一个垂直堆叠 25 帧的静态图像文件中生成 1 秒钟的视频,例如模拟胶片卷:
    ffmpeg -r 1 -i image.jpg -vf untile=1x25 movie.mkv
    

39.261 超简后期处理

应用一种极慢/极简的后处理过滤器,该过滤器以多种(或 - 在某些情况下为quality级别8- 全部)移位压缩并解压图像并对结果进行平均。

与 spp 的行为不同的是,uspp 实际上使用 libavcodec Snow 对每种情况进行编码和解码,而 spp 使用一种类似于 MJPEG 的简单仅内帧 8x8 DCT。

此过滤器在 ffmpeg 版本 5.0 和 6.0 之间不可用。

过滤器接受以下选项:

quality

设置质量。此选项定义平均的级别数。它接受 0-8 范围内的整数值。如果设置为0,过滤器将没有效果。值为8表明更高的质量。每增加一级别,该值的速度大约会降低 2 倍。默认值是3.

qp

强制常量量化参数。如果未设置,过滤器将使用视频流中的 QP(如果可用)。

codec

使用指定的编解码器代替 snow。

39.262 360 视频

在各种格式之间转换 360 度视频。

过滤器接受以下选项:

input
output

设置输入/输出视频的格式。

可用格式:

e
equirect

等距长方投影。

c3x2
c6x1
c1x6

包含 3x2/6x1/1x6 布局的立方体贴图。

特定格式选项:

in_pad
out_pad

为输入/输出立方体贴图设置填充比例。值以小数表示。

示例值:

0

无填充。

0.01

面大小的 1% 是填充。例如,对于分辨率为 1920x1280 的面,面大小是 640x640,填充每侧将为 3 像素。(640 * 0.01 = 6 像素)

默认值为0。最大值为0.1.

fin_pad
fout_pad

为输入/输出立方体贴图设置固定填充。值以像素表示。

默认值为0。如果大于零,将覆盖其他填充选项。

in_forder
out_forder

设置输入/输出立方体贴图的面的顺序。为每个位选择一个方向。

方向的表示:

r

l

u

d

f

b

默认值为rludfb.

in_frot
out_frot

设置输入/输出立方体贴图的面的旋转。为每个位选择一个角度。

角度的表示:

0

顺时针 0 度

1

顺时针 90 度

2

顺时针 180 度

3

顺时针 270 度

默认值为000000.

eac

等角立方体贴图。

flat
gnomonic
rectilinear

常规视频。

格式特定选项:

h_fov
v_fov
d_fov

设置输出的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

ih_fov
iv_fov
id_fov

设置输入的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

dfisheye

双鱼眼。

格式特定选项:

h_fov
v_fov
d_fov

设置输出的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

ih_fov
iv_fov
id_fov

设置输入的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

barrel
fb
barrelsplit

Facebook的360格式。

sg

立体格式。

格式特定选项:

h_fov
v_fov
d_fov

设置输出的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

ih_fov
iv_fov
id_fov

设置输入的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

mercator

墨卡托格式。

ball

球状格式,给后部明显的失真。

hammer

Hammer-Aitoff地图投影格式。

sinusoidal

正弦地图投影格式。

fisheye

鱼眼投影。

格式特定选项:

h_fov
v_fov
d_fov

设置输出的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

ih_fov
iv_fov
id_fov

设置输入的水平/垂直/对角视野角度。值以度为单位。

如果设置了对角视野角度,它会覆盖水平和垂直视野角度。

pannini

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

Lagrange9插值法。

cube
cubic

双三次插值法。

lanc
lanczos

Lanczos插值法。

sp16
spline16

Spline16插值法。

gauss
gaussian

高斯插值法。

mitchell

Mitchell插值法。

默认值是line.

w
h

设置输出视频分辨率。

默认分辨率取决于格式。

in_stereo
out_stereo

设置输入/输出立体格式。

2d

2D单目

sbs

并排

tb

上下排列

默认值是2d用于输入和输出格式。

yaw
pitch
roll

设置输出视频旋转角度。值以度为单位。

rorder

设置输出视频的旋转顺序。为每个位置选择一项。

y, Y

偏航

p, P

俯仰

r, R

翻滚

默认值是ypr.

h_flip
v_flip
d_flip

水平翻转输出视频(交换左右)/垂直翻转(交换上下)/深度翻转(交换前后)。布尔值。

ih_flip
iv_flip

设置是否输入视频已水平翻转/垂直翻转。布尔值。

in_trans

设置输入视频是否已转置。布尔值,默认禁用。

out_trans

设置输出视频是否需要转置。布尔值,默认禁用。

h_offset
v_offset

设置输出的水平/垂直偏轴偏移。默认设置为0。 允许范围为-1到1。

alpha_mask

在所有未映射像素的alpha平面中建立遮罩,将它们标记为完全透明。布尔值,默认禁用。

reset_rot

重置输出视频的旋转。布尔值,默认禁用。

39.262.1 示例

  • 使用双三次插值将矩形投影视频转换为具有3x2布局和1%填充的立方体图:
    ffmpeg -i input.mkv -vf v360=e:c3x2:cubic:out_pad=0.01 output.mkv
    
  • 提取Equi-Angular Cubemap的背面视图:
    ffmpeg -i input.mkv -vf v360=eac:flat:yaw=180 output.mkv
    
  • 将以并排立体格式呈现的Equi-Angular Cubemap转换为矩形投影顶部-底部立体格式:
    v360=eac:equirect:in_stereo=sbs:in_trans=1:ih_flip=1:out_stereo=tb
    

39.262.2 命令

此滤镜支持上述选项的子集作为命令.

39.263 vaguedenoiser

应用基于小波的去噪器。

它将视频输入中的每一帧转换到小波域,使用 Cohen-Daubechies-Feauveau 9/7 方法。然后对获得的系数进行一些过滤处理,并进行逆小波变换。由于小波的特性,它应能产生较好的平滑效果和降噪效果,而不会模糊画面特征。

此滤镜接受以下选项:

threshold

过滤强度。数值越高,视频过滤效果越强。硬阈值法比软阈值法可以使用更高的阈值而不会导致视频过度过滤。默认值为2。

method

滤镜将使用的过滤方法。

它接受以下值:

hard

所有低于阈值的值将被置零。

soft

所有低于阈值的值将被置零。所有高于阈值的值将被减去阈值。

garrote

缩放或归零系数——介于(更多)软阈值和(较少)硬阈值之间的中间类型。

默认值为 garrote。

nsteps

小波分解图片的次数。图片不能超出分解的限制(典型情况下,对640x480的帧来说是8次——因2^9=512大于480)。有效值为1到32之间的整数。默认值为6。

percent

部分或完全去噪(有限系数收缩),范围从0到100。默认值为85。

planes

要处理的平面列表。默认情况下处理所有平面。

type

滤镜将使用的阈值类型。

它接受以下值:

universal

所有分解的阈值相同。

bayes

阈值还依赖于每个分解系数。

默认值为 universal。

39.264 varblur

使用第二个视频流设置模糊半径应用变量模糊滤镜。 第二个流必须具有相同的尺寸。

此滤镜接受以下选项:

min_r

设置允许的最小半径。允许范围从 0 到 254。默认值为 0。

max_r

设置允许的最大半径。允许范围从 1 到 255。默认值为 8。

planes

设置要处理哪些平面。默认情况下使用所有平面。

varblur滤镜还支持framesync选项。

39.264.1 命令

此滤镜支持上述所有选项作为命令.

39.265 vectorscope

在二维图形中显示2个颜色分量值(称为向量示波器)。

此滤镜接受以下选项:

mode, m

设置向量示波器模式。

它接受以下值:

gray
tint

灰度值在图形上显示,亮度越高表示在图上的某个位置有更多像素具有相同颜色分量值。这是默认模式。

color

灰度值在图形上显示。不存在于视频帧中的周围像素值以设置的两种颜色分量的渐变形式绘制,第三种颜色分量固定。x and y. The 3rd color component is static.

color2

视频帧中实际的颜色分量值显示在图形上。

color3

类似于color2,但相同值的高频率x在图上的频率增加另一个颜色分量的值,默认情况下是亮度值。y on graph increases value of another color component, which is luminance by default values of x and y.

color4

视频帧中实际的颜色显示在图形上。如果两个不同颜色映射到同一位置,则选择图形中不存在颜色分量值更高的颜色。

color5

灰度值在图形上显示。类似于color但选取第三种颜色分量的径向渐变。

x

设置将在 X 轴上表示的颜色分量。默认值为1.

y

设置将在 Y 轴上表示的颜色分量。默认值为2.

intensity, i

设置颜色强度,用于模式:gray、color、color3和color5,以增加代表图中位置频率的颜色分量亮度。

envelope, e
none

没有包络,这是默认值。

instant

瞬间包络,即使最暗的单个像素也能被清晰地突出显示。

peak

保持在图中所示的最大和最小值。而无需持续查看向量示波器,这样您仍然可以发现超出范围的值。

peak+instant

峰值和瞬间包络的组合。

graticule, g

设置要绘制是什么样的网格。

none
green
color
invert
opacity, o

设置网格的不透明度。

flags, f

设置网格标志。

white

绘制白点的网格。

black

绘制黑点的网格。

name

显示颜色点的缩写。

bgopacity, b

设置背景的不透明度。

lthreshold, l

设置未在X或Y轴上表示的颜色分量的低阈值。 低于此值的值将被忽略。默认值为 0。 注意,该值会乘以每个像素分量可能具有的实际最大值。所以以8位输入和0.1低阈值值计算,实际阈值为0.1*255=25。

hthreshold, h

设置未在X或Y轴上表示的颜色分量的高阈值。 高于此值的值将被忽略。默认值为 1。 注意,该值会乘以每个像素分量可能具有的实际最大值。所以以8位输入和0.9高阈值值计算,实际阈值为0.9*255=230。

colorspace, c

设置绘制网格时使用的颜色空间。

auto
601
709

默认值为 auto。

tint0, t0
tint1, t1

设置灰度/色调向量示波器模式的颜色色调。默认情况下两个选项为零。 这意味着没有色调,输出将保持灰色。

39.266 vidstabdetect

分析视频的稳定性/去抖动。执行第1阶段,共2阶段,请参见vidstabtransform以进行第2阶段。

此滤镜生成一个包含相邻帧之间相对平移和旋转转换信息的文件,随后由vidstabtransform滤镜使用。

要启用此滤镜的编译,您需要配置 FFmpeg,如下所示:--enable-libvidstab.

此滤镜接受以下选项:

result

设置用于写入转换信息的文件路径。 默认值为transforms.trf.

shakiness

设置视频的抖动程度以及摄像机的移动速度。它接受一个范围为1到10的整数,值为1表示小抖动,值为10表示强抖动。默认值为5。

accuracy

设置检测过程的精度。它必须是一个范围为1到15的值。值为1表示低精度,值为15表示高精度。默认值为15。

stepsize

设置搜索过程的步长。最小区域以一个像素分辨率扫描。默认值为6。

mincontrast

设置最低对比度。低于此值的局部测量区域将被丢弃。必须是范围为0到1的浮点值。默认值为0.3。

tripod

设置三脚架模式的参考帧号。

启用后,帧间的运动与过滤流中的参考帧(由指定编号标识)进行比较。 目的是补偿静态场景中的所有运动,使摄像机视角绝对静止。

如果值设置为 0,则禁用。从1开始计数帧。

show

在结果帧中显示字段和转换信息。它接受范围0到2的整数。默认值为0,即禁用任何可视化。

fileformat

要写入转换数据文件的格式。 可接受值为

ascii

人类可读的纯文本。

binary

二进制格式,比ascii. (default)

39.266.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.267 vidstabtransform

视频稳定性/去抖动:阶段2,共2阶段, 请参见vidstabdetect以获取第1阶段。

读取每帧的转换信息文件并应用/补偿这些信息。结合vidstabdetect滤镜,这可以用于去抖动视频。另见http://public.hronopik.de/vid.stab这也很重要。 使用锐化滤镜,请参阅下文。

要启用此滤镜的编译,您需要使用以下配置选项配置FFmpeg--enable-libvidstab.

39.267.1 选项

input

设置用于读取变换的文件路径。默认值是transforms.trf.

smoothing

设置用于对相机运动进行低通滤波的帧数(值*2 + 1)。默认值为10。

例如,设置为10意味着使用21帧(过去10帧和未来10帧)来平滑视频中的运动。较大的值会使视频更平稳,但会限制相机的加速(平移/倾斜运动)。0是一个特殊情况,模拟静态相机。

optalgo

设置相机路径优化算法。

接受的值为:

gauss

对相机运动应用高斯核低通滤波(默认)

avg

对变换进行平均

maxshift

设置帧平移的最大像素数。默认值是-1,表示无限制。

maxangle

设置帧旋转的最大角度(以弧度表示,角度*PI/180)。默认值是-1,表示无限制。

crop

指定如何处理由于运动补偿可能出现的边框。

可用的值是:

keep

从上一帧保留图像信息(默认)

black

填充黑色边框

invert

如果设置为1,则反转变换。默认值是0。

relative

如果设置为1,则将变换视为相对前一帧的变换;如果设置为0,则变换为绝对的。默认值是0。

zoom

设置缩放百分比。正值将导致放大效果,负值将导致缩小效果。默认值是0(无缩放)。

optzoom

设置最佳缩放以避免边框。

接受的值为:

0

禁用

1

确定最佳静态缩放值(只有非常强烈的运动会导致边框可见)(默认)

2

确定最佳自适应缩放值(无边框会可见),请参阅zoomspeed

注意,缩放中给出的值会添加到此处计算的值中。

zoomspeed

设置每帧最大缩放百分比(当optzoom设置为2时启用)。范围是0到5,默认值是0.25。

interpol

指定插值类型。

可用的值是:

no

没有插值

linear

仅水平线性插值

bilinear

双向线性插值(默认)

bicubic

双向三次插值(较慢)

tripod

如果设置为1,则启用虚拟三脚架模式,相当于relative=0:smoothing=0。默认值是0。

同时使用tripod选项vidstabdetect.

debug

如果设置为1,则提高日志详细度。同时检测到的全局运动写入临时文件global_motions.trf。默认值是0。

39.267.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.268 垂直翻转

将输入视频进行垂直翻转。

例如,使用以下方式将视频垂直翻转ffmpeg:

ffmpeg -i in.avi -vf "vflip" out.avi

39.269 变帧率检测

检测可变帧率视频。

此滤镜尝试检测输入是可变帧率还是固定帧率。

最终将输出检测到可变增量时间戳(pts)帧的数量和具有固定增量时间戳帧的数量。 如果存在具有可变增量的帧,将显示遇到的最小、最大和平均增量。

39.270 色彩增强

增强或调整饱和度。

此滤镜接受以下选项:

intensity

设置增强强度(正值)或调整强度(负值)。默认值是0。允许范围是-2到2。

rbal

设置红色平衡。默认值是1。允许范围是-10到10。

gbal

设置绿色平衡。默认值是1。允许范围是-10到10。

bbal

设置蓝色平衡。默认值是1。允许范围是-10到10。

rlum

设置红色亮度系数。

glum

设置绿色亮度系数。

blum

设置蓝色亮度系数。

alternate

如果intensity为负值且此值设置为1,则颜色会改变, 否则颜色会变得更不饱和,更偏向灰色。

39.270.1 命令

此滤镜支持所有以上选项作为命令.

39.271 VIF

获取两个输入视频之间的平均视觉信息保真度(VIF)。

此滤镜需要两个输入视频。

两个输入视频必须具有相同的分辨率和像素格式, 此滤镜才能正确工作。此外,它假定两个输入具有相同帧数,一一比较。

获得的平均VIF分数通过日志系统打印。

滤镜存储每帧计算的VIF分数。

此滤镜还支持帧同步选项。

在以下示例中,处理的输入文件main.mpg与参考文件进行比较ref.mpg.

ffmpeg -i main.mpg -i ref.mpg -lavfi vif -f null -

39.272 暗角

制作或反转自然暗角效果。

此滤镜接受以下选项:

angle, a

设置透镜角度表达式为弧度数值。

该值在范围内截断[0,PI/2]

默认值:"PI/5"

x0
y0

设置中心坐标表达式。分别为"w/2""h/2",默认值。

mode

设置前进/后退模式。

可用模式:

forward

距离中心点越远,图像越暗。

backward

距离中心点越远,图像越亮。 这可以用来反转暗角效果,虽然目前没有自动检测来提取镜头angle和其他设置(尚未实现)。它还可以用来创建燃烧效果。

默认值为forward’.

eval

设置表达式的评估模式 (angle, x0, y0).

它接受以下值:

init

在过滤器初始化期间,仅评估表达式一次。

frame

为每个传入帧评估表达式。这种方式比‘init’模式慢得多,因为它需要重新计算所有缩放器,但它允许高级动态表达式。

默认值是‘init’.

dither

设置抖动以减少圆形条带效应。默认值是1(已启用)。

aspect

设置渐晕比例。这一设置可以调整渐晕的形状。 将此值设置为输入的SAR可以根据视频的尺寸生成矩形渐晕。

默认值是1/1.

39.272.1 表达式

alpha, x0y0表达式可以包含以下参数。

w
h

输入宽度和高度

n

输入帧的编号,从0开始

pts

过滤后的视频帧的PTS(显示时间戳),以TB单位表示,若未定义则为NAN

r

输入视频的帧率,若输入帧率未知则为NAN

t

过滤后的视频帧的PTS(显示时间戳), 以秒为单位表示,若未定义则为NAN

tb

输入视频的时间基准

39.272.2 示例

  • 应用简单且强烈的渐晕效果:
    vignette=PI/4
    
  • 制作闪烁的渐晕:
    vignette='PI/4+random(1)*PI/50':eval=frame
    

39.273 vmafmotion

获取视频的平均VMAF运动评分。 它是VMAF的组成度量之一。

通过日志系统打印获取的平均运动评分。

过滤器接受以下选项:

stats_file

如果指定,过滤器将使用命名文件保存每帧与前一帧的运动评分。 如果文件名等于 "-",数据将发送到标准输出。

示例:

ffmpeg -i ref.mpg -vf vmafmotion -f null -

39.274 vpp_amf

对输入视频进行缩放(调整大小),并转换色彩空间、传输特性或色彩基准,使用AMD高级媒体框架库进行硬件加速。 设置输出宽度和高度的方式与scale过滤器相同。

过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值是输入尺寸。

允许与scale过滤器相同的表达式。

scale_type

设置用于缩放的算法:

双线性

双线性

这是默认值。

双三次

双三次

format

控制输出像素格式。默认情况下,或未指定时,将使用输入像素格式。

force_original_aspect_ratio
force_divisible_by

与相同的scale过滤器选项相同。

reset_sar

与相同的scale过滤器选项相同。

color_profile

一次指定所有颜色属性。

接受的值是:

bt601

BT.601

bt709

BT.709

bt2020

BT.2020

trc

指定输出传输特性。

接受的值是:

bt709

BT.709

gamma22

常量伽玛值2.2

gamma28

常量伽玛值2.8

smpte170m

SMPTE-170M

smpte240m

SMPTE-240M

linear

线性

log

LOG

log-sqrt

LOG_SQRT

iec61966-2-4

iec61966-2-4

bt1361-ecg

BT1361_ECG

iec61966-2-1

iec61966-2-1

bt2020-10

BT.2020用于10位内容

bt2020-12

BT.2020用于12位内容

smpte2084

SMPTE2084

smpte428

SMPTE428

arib-std-b67

ARIB_STD_B67

primaries

指定输出色彩基准。

接受的值是:

bt709

BT.709

bt470m

BT.470M

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

film

film

bt2020

BT.2020

smpte428

SMPTE-428

smpte431

SMPTE-431

smpte432

SMPTE-432

jedec-p22

JEDEC P22 磷光体

39.274.1 示例

  • 将输入缩放至720p,保持纵横比并确保输出为yuv420p。
    vpp_amf=-2:720:format=yuv420p
    
  • 升至4K并将色彩配置文件更改为bt2020。
    vpp_amf=4096:2160:color_profile=bt2020
    

39.275 vstack

垂直堆叠输入视频。

所有流必须具有相同的像素格式和相同的宽度。

注意,此过滤器比使用overlaypad过滤器来创建相同输出要快。

该过滤器接受以下选项:

inputs

设置输入流的数量。默认值为2。

shortest

如果设置为1,则在最短输入流结束时强制输出结束。默认值为0。

39.276 w3fdif

对输入视频进行去隔行处理(“w3fdif”代表“Weston 3场去隔行过滤器”)。

基于BBC研发部门Martin Weston描述的过程,并根据BBC研发部门Jim Easterbrook编写的去隔行算法实现,Weston 3场去隔行过滤器使用BBC研发部门计算的过滤系数。

此过滤器使用帧中的场优势信息来决定每对场中的哪一个先放入输出中。如果出现错误,请使用setfield过滤器w3fdif过滤器。

有两组过滤系数,分别称为“简单”和“复杂”。可以通过传递可选参数来设置使用哪组过滤系数:

filter

设置隔行过滤系数。接受以下值之一:

simple

简单的过滤系数集。

complex

更复杂的过滤系数集。

默认值为‘complex’.

mode

采用的隔行模式。接受以下值之一:

frame

每帧输出一个帧。

field

每场输出一个帧。

默认值为field.

parity

输入隔行视频所假定的画面场的排列方式。接受以下值之一:

tff

假定上场优先。

bff

假定下场优先。

auto

启用场优先级的自动检测。

默认值为auto。 如果隔行未知或解码器未导出此信息,将假定上场优先。

deint

指定哪些帧需要去隔行处理。接受以下值之一:

all

对所有帧执行去隔行处理。

interlaced

仅对标记为隔行的帧执行去隔行处理。

默认值为‘all’.

39.276.1 命令

此过滤器支持与选项相同的命令。

39.277 波形

视频波形监视器。

波形监视器绘制颜色分量强度。默认情况下是亮度。波形的每列对应源视频中的像素列。

它接受以下选项:

mode, m

可以是row或者column。默认值为column。 在行模式中,图左侧表示颜色分量值为0,右侧表示值为255。在列模式中,顶部表示颜色分量值为0,底部表示值为255。

intensity, i

设置强度。较小的值可用来找出具有相同亮度的值如何分布在输入行/列上。默认值为0.04。允许的范围为[0, 1]。

mirror, r

设置镜像模式。0表示未镜像,1表示镜像模式。 在镜像模式下,较高的值将在row模式下显示在左侧,在column模式下显示在顶部。默认值为1(镜像)。

display, d

设置显示模式。 接受以下值:

overlay

显示的信息与parade相同,除了表示颜色分量的图形直接相互叠加。

此显示模式可更容易地发现颜色分量重叠区域的相对差异或相似性,例如应该完全相同的中性白色、灰色或黑色。

stack

row模式中并排显示颜色分量的单独图形,或在column模式中上下显示。

parade

column模式中并排显示颜色分量的单独图形,或在row模式中上下显示。

使用此显示模式可以通过比较每个波形的顶部和底部图形的轮廓来轻松发现图像高光和阴影中的颜色偏移。由于白色、灰色和黑色的特征是红色、绿色和蓝色完全相等,因此图片的中性色区域应该显示三个大致相等宽度/高度的波形。如果不是,可以通过调整三个波形的级别轻松进行校正。

默认值为stack.

components, c

设置要显示的颜色分量。默认值为1,表示仅显示亮度或输入为RGB色彩空间时显示红色分量。例如,如果设置为7,将显示所有3种(如果有)的颜色分量。

envelope, e
none

无信封,为默认。

instant

瞬时信封,图形中显示的最小值和最大值即使step值较小时也易于看到。

peak

在时间上保持图形中显示的最小值和最大值。这样您可以不过多关注波形就发现超出范围的值。

peak+instant

峰值和瞬时信封结合在一起。

filter, f
lowpass

无过滤,为默认。

flat

亮度和色度结合在一起。

aflat

与上述类似,但显示蓝色和红色色度之间的差异。

xflat

与上述类似,但使用不同的颜色。

yflat

与上述类似,但再次使用不同的颜色。

chroma

只显示色度。

color

在波形上显示实际颜色值。

acolor

与上述类似,但亮度显示色度值的频率。

graticule, g

设置要显示的刻度盘。

none

不显示刻度盘。

green

显示绿色刻度盘,显示合法广播范围。

orange

显示橙色刻度盘,显示合法广播范围。

invert

显示反转刻度盘,显示合法广播范围。

opacity, o

设置刻度盘不透明度。

flags, fl

设置刻度盘标志。

numbers

在刻度线之上绘制数字。默认启用。

dots

绘制点而不是线。

scale, s

设置用于显示刻度盘的比例。

digital
millivolts
ire

默认是数字式。

bgopacity, b

设置背景不透明度。

tint0, t0
tint1, t1

设置输出的色调。 仅与低通滤波器一起使用,并且当显示不是重叠而输入像素格式不是RGB时。

fitmode, fm

设置视频输出帧的采样长宽比。 可用于配置波形,使其在一个方向上没有过多拉伸。

none

将采样长宽比设置为1/1。

size

将采样长宽比设置为匹配视频输入尺寸

默认值为‘none’.

input

设置要从过滤器中选择的输入格式。 可以是‘all’,用于从所有可用格式中选择,或‘first’,用于选择第一个可用格式。 默认值为‘first’.

39.278 编织与双编织

The weave字段基视频输入,并将每两个连续字段连接成单个帧,生成一个新双高度剪辑,帧率减半,帧数减半。

The doubleweave工作方式相同为weave但不需要减半帧率和帧数。

它接受以下选项:

first_field

设置第一个字段。可用值为:

top, t

将帧设置为顶部字段优先。

bottom, b

将帧设置为底部字段优先。

39.278.1 示例

  • 使用交错视频选择分离场过滤器:
    separatefields,select=eq(mod(n,4),0)+eq(mod(n,4),3),weave
    

39.279 xbr

应用xBR高质量放大滤镜,该滤镜专为像素艺术设计。它遵循一组边缘检测规则,见https://forums.libretro.com/t/xbr-algorithm-tutorial/123.

它接受以下选项:

n

设置缩放维度:22xBR, 33xBR44xBR。 默认值为3.

39.280 xcorrelate

应用第一和第二输入视频流之间的归一化互相关。

第二输入视频流的维度必须小于第一输入视频流。

该过滤器接受以下选项:

planes

设置要处理的平面。

secondary

设置将从第二输入视频流中处理的辅助视频帧,可以是第一个全部。默认值为全部.

xcorrelate过滤器还支持framesync选项。

39.281 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.281.1 示例

  • 从一个输入视频到另一个输入视频的交叉淡入淡出,使用淡入淡出过渡效果,过渡持续2秒,从第5秒开始偏移:
    ffmpeg -i first.mp4 -i second.mp4 -filter_complex xfade=transition=fade:duration=2:offset=5 output.mp4
    

39.282 xmedian

从多个输入视频中选择中值像素。

该过滤器接受以下选项:

inputs

设置输入的数量。 默认值为3。允许范围为3到255。 如果输入数量为偶数,则结果将是两个中值值之间的平均值。

planes

设置要过滤的平面。默认值为15,表示处理所有平面。

percentile

设置中值百分位数。默认值为0.5。 默认值0.5将始终选择中值,而0将选择最小值,而1最大值。

39.282.1 命令

该过滤器支持以上所有选项作为命令,不包括选项inputs.

39.283 xpsnr

获取两个输入视频之间的平均值(跨所有输入帧)和最小值(跨所有颜色平面平均值) 加权感知峰值信噪比(XPSNR)。

XPSNR是一种低复杂度的心理感知失真测量算法,可用于 评估两条视频流或图像之间的差异。这对于客观量化 视频和图像编解码器引起的失真尤其有用,作为 正式主观测试的替代方案。对数XPSNR输出值的范围类似于传统的psnr评估,但更能反映人类对视觉编码质量的印象。 有关XPSNR测量的更多详细信息,实际上代表了PSNR测量的加权变体, 可以在以下免费提供的论文中找到:

  • C. R. Helmrich, M. Siekmann, S. Becker, S. Bosse, D. Marpe, 和 T. Wiegand, "XPSNR: 用于高分辨率视频质量评估的加权感知峰值信噪比的低复杂度扩展," 在 Proc. IEEE Int. Conf. Acoustics, Speech, Sig. Process. (ICASSP), virt./online, May 2020.www.ecodis.de/xpsnr.htm
  • C. R. Helmrich, S. Bosse, H. Schwarz, D. Marpe, 和 T. Wiegand, "研究扩展的感知加权峰值信噪比(XPSNR)对不同分辨率和 比特深度的视频压缩的影响," ITU Journal: ICT Discoveries, vol. 3, no. 1, pp. 65 - 72, May 2020.http://handle.itu.int/11.1002/pub/8153d78b-en

当使用例如此FFmpeg过滤器获取XPSNR评估结果并发布时, 强烈建议引用上述论文作为文档的来源。 该过滤器需要两段输入视频。第一输入被认为是(通常未失真的)参考 源,并保持不变地传递到输出,而第二输入是(失真的)测试信号。 除了比特深度之外,这两个视频输入必须具有相同的像素格式。 此外,为了获得最佳性能,建议将两段输入视频都以YCbCr颜色格式进行比较。

上述所获得的整体XPSNR值通过日志系统打印输出。 对于多色平面的输入,我们建议报告最小XPSNR平均值。

接受以下参数,其行为类似于psnr过滤器的参数:

stats_file, f

如果指定,过滤器将使用指定文件保存每帧和每个颜色平面的XPSNR值。 当文件名等于"-"时,这些数据会发送到标准输出。

该过滤器还支持framesync选项。

39.283.1 示例

  • 对两个1080p HD视频ref_source.yuv和test_video.yuv的XPSNR分析, 它们每秒24帧,颜色格式为4:2:0,比特深度为8,并将结果输出到名为"xpsnr.log"的日志文件中:
    ffmpeg -s 1920x1080 -framerate 24 -pix_fmt yuv420p -i ref_source.yuv -s 1920x1080 -framerate
    24 -pix_fmt yuv420p -i test_video.yuv -lavfi xpsnr="stats_file=xpsnr.log" -f null -
    
  • 对两个2160p UHD视频ref_source.yuv(比特深度为8)和test_video.yuv(比特深度为10)的XPSNR分析, 它们每秒60帧,颜色格式为4:2:0,无日志文件输出:
    ffmpeg -s 3840x2160 -framerate 60 -pix_fmt yuv420p -i ref_source.yuv -s 3840x2160 -framerate
    60 -pix_fmt yuv420p10le -i test_video.yuv -lavfi xpsnr="stats_file=-" -f null -
    

39.284 xstack

将视频输入堆叠成自定义布局。

所有视频流的像素格式必须相同。

过滤器接受以下选项:

inputs

设置输入流的数量。默认值为2。

layout

指定输入的布局。 此选项需要用户明确设置所需的布局配置。 这会设置每个视频输入在输出中的位置。每个输入之间用“|”分隔。 第一个数字表示列,第二个数字表示行。 数字从0开始,用“_”分隔。可选地,可以使用wX和hX, X是从哪个视频输入中获取宽度或高度。 当用“+”分隔时,可以使用多个值。在这种情况下,值将被相加。

注意,如果输入的大小不同,可能会出现间隙,因为并非所有输出视频帧都能填满。 同样,如果他们的位置没有留出足够的空间供邻近视频的完整帧,则视频可能会重叠。

对于两个输入,默认布局为0_0|w0_0(等同于grid=2x1)。在所有其他情况下,用户必须设置布局或网格。 只能设置grid或者layout之一。 同时指定会导致错误。

grid

指定固定大小的输入网格。 此选项用于创建输入流的固定大小网格。设置网格大小格式为COLUMNSxROWS。必须有ROWS * COLUMNS个输入流,并按网格排列,包含ROWS行和COLUMNS列。使用此选项时,每行中的每个输入流必须具有相同的高度,并且所有行必须具有相同的宽度。

如果grid已设置,则inputs选项会被忽略,并隐式设置为ROWS * COLUMNS.

对于两个输入,默认网格为2x1(等同于layout=0_0|w0_0)。在所有其他情况下,用户必须设置布局或网格。 只能设置grid或者layout之一。 同时指定会导致错误。

shortest

如果设置为1,则当最短的输入结束时强制输出终止。默认值为0。

fill

如果设置为有效颜色,所有未使用的像素将以该颜色填充。 默认情况下,fill设置为none,因此被禁用。

39.284.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.285 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.286 yaepblur

应用模糊过滤,同时保留边缘("yaepblur"意为"另一种保边缘模糊滤镜")。 算法描述如下: "J. S. Lee, Digital image enhancement and noise filtering by use of local statistics, IEEE Trans. Pattern Anal. Mach. Intell. PAMI-2, 1980."

它接受以下参数:

radius, r

设置窗口半径。默认值为3。

planes, p

设置要过滤的平面。默认值为仅第一个平面。

sigma, s

设置模糊强度。默认值为128。

39.286.1 命令

此过滤器支持与选项相同的命令

39.287 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.287.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.288 缩放比例

使用z.lib库缩放(调整大小)输入视频:https://github.com/sekrit-twc/zimg. 要启用此过滤器的编译,您需要使用以下配置FFmpeg--enable-libzimg.

zscale过滤器通过更改输出样本纵横比强制输出显示纵横比与输入保持一致。

如果输入图像格式与下一个过滤器请求的格式不同,zscale过滤器会将输入转换为请求的格式。

39.288.1 选项

过滤器接受以下选项。

width, w
height, h

设置输出视频维度表达式。默认值为输入尺寸。

如果宽度w值为0,则输入宽度用于输出。如果高度h值为0,则输入高度用于输出。

如果其中唯有一个值为-n且n >= 1,则zscale过滤器将使用一个维护输入图像纵横比的值,该值从其他指定维度计算而来。之后它会确保计算出的维度可被n整除,并在必要时调整该值。

如果两个值均为-n且n >= 1,则行为将与两个值设置为0完全相同,如前述详细描述。

以下是维度表达式中可接受常量的列表。

size, s

设置视频大小。有关此选项的语法,请查看(ffmpeg-utils)“视频大小”章节中的ffmpeg-utils手册.

dither, d

设置抖动类型。

可能的值是:

有序
随机
误差扩散

默认值为无。

filter, f

设置调整大小的过滤器类型。

可能的值是:

双线性
双立方
样条16
样条36
朗佐

默认值为双线性。

range, r

设置色彩范围。

可能的值是:

输入
有限
完整

默认值与输入相同。

primaries, p

设置色彩基准。

可能的值是:

输入
709
未指定
170m标准
240m标准
2020

默认值与输入相同。

transfer, t

设置传输特性。

可能的值是:

输入
709
未指定
601
线性
2020_10
2020_12
smpte2084标准
iec61966-2-1标准
arib-std-b67标准

默认值与输入相同。

matrix, m

设置色彩空间矩阵。

可能的值是:

输入
709
未指定
470bg标准
170m标准
2020_ncl标准
2020_cl标准

默认值与输入相同。

rangein, rin

设置输入色彩范围。

可能的值是:

输入
有限
完整

默认值与输入相同。

primariesin, pin

设置输入色彩基准。

可能的值是:

输入
709
未指定
170m标准
240m标准
2020

默认值与输入相同。

transferin, tin

设置输入传输特性。

可能的值是:

输入
709
未指定
601
线性
2020_10
2020_12

默认值与输入相同。

matrixin, min

设置输入色彩空间矩阵。

可能的值是:

输入
709
未指定
470bg标准
170m标准
2020_ncl标准
2020_cl标准
chromal, c

设置输出颜色位置。

可能的值是:

输入
居中
左上
顶部
左下
底部
chromalin, cin

设置输入色度位置。

可能的值是:

输入
居中
左上
顶部
左下
底部
npl

设置标称峰值亮度。

param_a

缩放滤波器的参数A。对于双三次是参数“b”,对于lanczos是滤波器抽头的数目。

param_b

缩放滤波器的参数B。对于双三次是参数“c”。

参数的值wh选项是包含以下常量的表达式:

in_w
in_h

输入的宽度和高度

iw
ih

这与in_win_h.

out_w
out_h

输出(缩放后)的宽度和高度

ow
oh

这与out_wout_h

a

iw / ih

sar

输入样本宽高比

dar

输入显示宽高比。由以下计算得出(iw / ih) * sar.

hsub
vsub

水平和垂直输入色度抽样值。例如对于像素格式“yuv422p”hsub是2,vsub是1。

ohsub
ovsub

水平和垂直输出色度抽样值。例如对于像素格式“yuv422p”hsub是2,vsub是1。

39.288.2 命令

此滤镜支持以下命令:

width, w
height, h

设置输出视频尺寸表达式。 此命令接受与对应选项相同的语法。

如果指定的表达式无效,则保持当前值。

40 CUDA 视频滤镜

要启用 CUDA 和/或 NPP 滤镜,请参考以下配置指南:CUDACUDA NPP滤镜。

运行 CUDA 滤镜需要您初始化硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device cuda[=名称][:设备[,键=值...]]

初始化一个类型为cuda的新的硬件设备,名为name,使用给定的设备参数。

-filter_hw_device 名称

将名为name的硬件设备传递给任何滤镜图中的所有滤镜。

有关详细信息请参见https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 在系统上初始化第二个 CUDA 设备并运行 scale_cuda 和 bilateral_cuda 滤镜的示例。
    ./ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -init_hw_device cuda:1 -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
    

由于 CUDA 滤镜专门针对 GPU 内存操作,帧数据有时需要上传(hwupload)到与适当的 CUDA 设备关联的硬件表面,以便进行处理,并在必要时下载(hwdownload)到普通内存中。是否需要hwuploadhwdownload取决于具体的工作流程:

  • 如果输入帧已经位于 GPU 内存中(例如,当使用-hwaccel cuda-hwaccel_output_format cuda)时,可以显式使用hwupload是不需要的,因为数据已经在合适的内存空间中。
  • 如果输入帧位于CPU内存中(例如,软件解码的帧或由基于CPU的滤镜处理的帧),则需要使用hwupload将数据传输到GPU内存,以进行CUDA处理。
  • 如果需要进一步使用软件滤镜处理CUDA滤镜的输出,或者将其保存为GPU编码器不支持的格式,hwdownload则需要将数据传回CPU内存。

请注意,hwupload将数据上传到与软件帧相同布局的表面,所以可能需要在format滤镜紧接在hwupload之前,以确保输入格式正确。同样,hwdownload可能不支持所有的输出格式,因此可能需要在format滤镜紧接在hwdownload后面插入到滤镜图中,以确保兼容性。

40.1 CUDA

以下是当前可用的Nvidia CUDA视频滤镜的描述。

前置条件:

  • 安装Nvidia CUDA Toolkit

注意:如果FFmpeg在配置期间检测到Nvidia CUDA Toolkit,它将自动启用CUDA滤镜,而无需额外的标志。如果您想明确启用它们,可以使用以下选项:

  • 配置FFmpeg--enable-cuda-nvcc --enable-nonfree.
  • 使用以下配置FFmpeg--enable-cuda-llvm附加要求:llvm必须安装lib。

40.1.1 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。

40.1.1.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
    

40.1.2 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.

40.1.3 chromakey_cuda

CUDA加速的YUV色彩空间颜色/色度键滤镜。

此过滤器像普通的色键滤镜一样工作,但作用于CUDA帧。 有关更多详细信息和参数,请参见chromakey.

40.1.3.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
    

40.1.4 colorspace_cuda

CUDA加速的色彩空间滤镜实现。

与软件色彩空间滤镜相比,它在功能上并不完整, 目前仅支持在jpeg/full和mpeg/limited范围之间进行颜色范围转换。

该过滤器接受以下选项:

range

指定输出颜色范围。

接受的值是:

tv

电视(受限)范围

mpeg

MPEG(受限)范围

pc

PC(完全)范围

jpeg

JPEG(完全)范围

40.1.5 overlay_cuda

将一个视频叠加在另一个上。

这是overlay滤镜的CUDA变体。 它仅接受CUDA帧。底层输入像素格式必须匹配。

它有两个输入和一个输出。第一个输入是“主” 视频,第二个输入叠加在其上。

它接受以下参数:

x
y

为叠加视频在主视频上的x和y坐标设置表达式。

它们可以包含以下参数:

main_w, W
main_h, H

主输入宽度和高度。

overlay_w, w
overlay_h, h

叠加输入宽度和高度。

x
y

计算值为xy。它们会为每个新帧进行评估。

n

主输入帧的序号索引,从0开始。

pos

主输入帧在文件中的字节偏移位置,如果未知则为NAN。 已弃用,请勿使用。

t

主输入帧的时间戳,以秒为单位表示,如果未知则为NAN。

两个表达式的默认值均为“0”。

eval

设置xy表达式在何时评估。

接受以下值:

init

在过滤器初始化期间或 处理命令时评估表达式一次。

frame

为每个传入帧评估表达式。

默认值是frame.

eof_action

查看帧同步.

shortest

查看帧同步.

repeatlast

查看帧同步.

此过滤器还支持帧同步选项。

40.1.6 缩放_cuda

使用加速的CUDA内核对输入视频进行缩放(调整大小)并转换(像素格式)。设置输出宽度和高度的方式与缩放过滤器相同。

该过滤器接受以下选项:

w
h

设置输出视频尺寸表达式。默认值为输入尺寸。

允许与缩放过滤器相同的表达式。

interp_algo

设置用于缩放的算法:

最邻近

最近邻居

默认情况下使用,如果输入参数与目标输出匹配。

双线性

双线性

双三次

双三次

这是默认值。

Lanczos

Lanczos

format

控制输出像素格式。默认情况下或未指定时,使用输入像素格式。

过滤器不支持在YUV和RGB像素格式之间的转换。

passthrough

如果设置为0,每帧都会被处理,即使无需转换。这种模式可以将过滤器用作下游帧消费者的缓冲区,该消费者会耗尽有限的解码器帧池。

如果设置为1,帧如果匹配目标输出参数,将原样传递。这是默认行为。

param

算法特定参数。

影响双三次算法的曲线。

force_original_aspect_ratio
force_divisible_by

与相同的缩放过滤器选项工作方式相同。

reset_sar

与相同的缩放过滤器选项工作方式相同。

40.1.6.1 示例

  • 将输入缩放到720p,保持宽高比并确保输出是yuv420p。
    scale_cuda=-2:720:format=yuv420p
    
  • 使用最近邻居算法放大到4K。
    scale_cuda=4096:2160:interp_algo=nearest
    
  • 不要进行任何转换或缩放,但将所有输入帧复制到新分配的帧中。这对于处理过滤器和编码链可能会耗尽解码器帧池的情况很有用。
    scale_cuda=passthrough=0
    

40.1.7 缩略图_cuda

使用CUDA从连续帧序列中选择最具代表性的一帧。

该过滤器接受以下选项:

n

设置要分析的帧批量大小;在一组n帧中,过滤器将从其中挑选一帧,然后处理下一批n帧直到结束。默认值为100.

由于过滤器会追踪整个帧序列,更大的n值会导致更高的内存使用,因此不推荐使用高值。

40.1.7.1 示例

  • 从每n=150帧批次中提取缩略图,每批选择一帧。选中的帧然后用缩放_cuda.
    ./ffmpeg  -hwaccel cuda -hwaccel_output_format cuda  -i ./input.mp4 -vf "thumbnail_cuda=150,scale_cuda=1920:1080,hwdownload,format=nv12" ./output/out%03d.png
    

40.1.8 去隔行_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.

40.2 CUDA NPP

以下是当前可用的NVIDIA性能原语(libnpp)视频过滤器的描述。

前提条件:

  • 安装Nvidia CUDA工具包
  • 安装libnpp

要启用CUDA NPP过滤器:

  • 配置FFmpeg并使用--enable-nonfree --enable-libnpp.

40.2.1 缩放_npp

使用NVIDIA性能原语(libnpp)对CUDA视频帧进行缩放和/或像素格式转换。设置输出宽度和高度的方式与缩放过滤器相同。

接受以下附加选项:

format

输出CUDA帧的像素格式。如果设置为字符串"same"(默认),则保持输入格式。注意,硬件帧的自动格式协商和转换尚未支持。

interp_algo

用于调整大小的插值算法之一。以下值之一:

nn

最邻近。

linear
cubic
cubic2p_bspline

两参数双三次(B=1,C=0)。

cubic2p_catmullrom

2参数三次样条 (B=0, C=1/2)

cubic2p_b05c03

2参数三次样条 (B=1/2, C=3/10)

super

超采样

lanczos
force_original_aspect_ratio

如果需要,启用减少或增加输出视频宽度或高度以保持原始宽高比的功能。可能的值有:

disable

按指定比例缩放视频并禁用此功能。

decrease

如果需要,输出视频的尺寸会被自动减小。

increase

如果需要,输出视频的尺寸会被自动增大。

此选项的一个有用实例是当您知道特定设备的最大允许分辨率时,可以使用此选项限制输出视频的分辨率,同时保留宽高比。例如,设备A允许播放1280x720的视频,而您的视频分辨率是1920x800。使用此选项(设置为减小)并指定1280x720作为命令行参数可使输出分辨率变为1280x533。

请注意,这与为wh指定-1是不同的,您仍需要为此选项指定输出分辨率才能生效。

force_divisible_by

确保输出的宽度和高度都可被给定的整数整除,与force_original_aspect_ratio一起使用时。-n这类似于使用wh选项。

此选项会根据force_original_aspect_ratio设定的值调整分辨率的增加或减少。视频的宽高比可能会稍微修改。

如果您需要让视频在使用force_original_aspect_ratio时符合或超过定义的分辨率,同时还有编码器针对宽度或高度整除性限制的需求,此选项会很方便。

reset_sar

与相同的scale滤镜选项效果相同。

eval

指定何时评估widthheight表达式。它接受以下值:

init

仅在滤镜初始化时或处理命令时评估表达式一次。

frame

为每一帧输入评估表达式。

的值wh选项是包含以下常量的表达式:

in_w
in_h

输入的宽度和高度

iw
ih

这些与in_win_h.

out_w
out_h

输出(缩放后)的宽度和高度

ow
oh

这些与out_wout_h

a

iw / ih

sar

输入采样宽高比

dar

输入显示宽高比。由以下计算得出(iw / ih) * sar.

n

输入帧的(顺序)编号,从0开始。 仅在使用eval=frame.

时可用

输入帧的显示时间戳,以秒为单位表示。 仅在使用eval=frame.

时可用

帧在输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在生成的视频中),则为NaN。 仅在使用eval=frame时可用。 已废弃,请勿使用。

40.2.2 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.

时可用

主输入帧的显示时间戳,以秒为单位表示。 仅在使用eval=frame.

时可用

帧在主输入流中的位置(字节偏移量),如果此信息不可用或无意义(例如,在生成的视频中),则为NaN。 仅在使用eval=frame.

时可用

  • 40.2.2.1 示例
    'scale2ref_npp[b][a];[a][b]overlay_cuda'
    
  • 在叠加之前,将字幕流(b)缩放到与主视频(a)的尺寸一致。
    [logo-in][video-in]scale2ref_npp=w=oh*mdar:h=ih/10[logo-out][video-out]
    

将 logo 缩放到视频高度的1/10,同时保留其显示宽高比。

40.2.3 sharpen_npp

使用 NVIDIA 性能原语(libnpp)执行具有边界控制的图像锐化。

border_type

接受以下额外选项:

replicate

用于帧边界上的采样类型。以下选项之一:

复制像素值。

40.2.4 transpose_npp转置视频滤镜,主要共享相同的选项。

它接受以下参数:

dir

指定转置方向。

可以取以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

passthrough

如果输入几何与指定值匹配,请不要应用转置。它接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何(当高度 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

41 OpenCL 视频滤镜

以下是当前可用的 OpenCL 视频滤镜的描述。

要启用这些滤镜的编译,您需要使用以下配置 FFmpeg--enable-opencl.

运行 OpenCL 滤镜需要您初始化一个硬件设备并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device opencl[=名称][:设备[,键=值...]]

初始化一个新的硬件设备,类型为opencl命名为名称,使用提供的设备参数。

-filter_hw_device 名称

将名为名称的硬件设备传递给任何滤镜图中的所有滤镜。

有关更详细的信息,请参见https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 选择第二个平台上的第一个设备并使用默认参数在其上运行 avgblur_opencl 滤镜的示例。
    -init_hw_device opencl=gpu:1.0 -filter_hw_device gpu -i INPUT -vf "hwupload, avgblur_opencl, hwdownload" OUTPUT
    

由于 OpenCL 滤镜无法访问普通内存中的帧数据,所有帧数据需要先上传到(hwupload)连接到适当设备的硬件表面,然后才能使用,然后下载到(hwdownload)正常内存中。请注意,hwupload将上传到与软件帧具有相同布局的表面,因此可能需要在之前立即添加一个format滤镜,以确保输入格式正确,而hwdownload不支持输出的所有格式——可能需要在图中插入一个额外的format滤镜以确保输出是受支持格式。

41.1 avgblur_opencl

应用平均模糊滤镜。

此滤镜接受以下选项:

sizeX

设置水平半径大小。 范围是[1, 1024],默认值是1.

planes

设置要滤波的平面。默认值是0xf,所有平面都会被处理。

sizeY

设置垂直半径大小。范围是[1, 1024],默认值是0。如果为零,sizeX将使用水平半径值。

41.1.1 示例

  • 使用水平和垂直大小为 3 的平均模糊滤镜,设置输出的每个像素为输入中以其为中心的 7x7 区域的平均值。对于图像边缘的像素,该区域不会扩展超出图像边界,因此不会在计算中使用超出范围的坐标。
    -i INPUT -vf "hwupload, avgblur_opencl=3, hwdownload" OUTPUT
    

41.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的值 对于 luma 和 alpha 平面,以及min(cw,ch)/2的值 对于 chroma 平面。

默认值为luma_radius是 "2"。如果未指定,chroma_radiusalpha_radius默认与luma_radius.

相应的值相同。

w
h

输入宽度和高度(像素)。

cw
ch

输入色度图像的宽度和高度(像素)。

hsub
vsub

水平和垂直色度子采样值。例如,对于像素格式 "yuv422p",hsub是 2,vsub是 1。

luma_power, lp
chroma_power, cp
alpha_power, ap

指定对相应平面应用 boxblur 滤镜的次数。

默认值为luma_power2。如果未指定,chroma_poweralpha_power默认与luma_power.

相应的值相同。

41.2.1 示例

应用 boxblur 滤镜,将输出的每个像素设置为 box 半径luma_radius, chroma_radius, alpha_radius分别用于每个平面。滤镜将luma_power, chroma_power, alpha_power次应用到相应的平面。对于图像边缘的像素,半径不会超出图像边界,因此不会在计算中使用超出范围的坐标。

  • 应用 boxblur 滤镜,将 luma、chroma 和 alpha 半径设置为 2,将 luma、chroma 和 alpha 功率设置为 3。滤镜将在每个图像平面以半径 2 运行 3 次。
    -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 滤镜,将 luma 半径设置为 2,luma 功率设置为 1,chroma 半径设置为 4,chroma 功率设置为 5,alpha 半径设置为 3,alpha 功率设置为 7。

    对于亮度平面,将运行一次2x2的框半径。

    对于色度平面,将以4x4的框半径运行5次。

    对于透明度平面,将以3x3的框半径运行7次。

    -i INPUT -vf "hwupload, boxblur_opencl=2:1:4:5:3:7, hwdownload" OUTPUT
    

41.3 colorkey_opencl

RGB颜色空间的颜色键控。

过滤器接受以下选项:

color

将与透明度替换的颜色。

similarity

与关键颜色的相似度百分比。

0.01仅匹配完全相同的关键颜色,而1.0匹配所有内容。

blend

混合百分比。

0.0使像素完全透明或完全不透明。

较高的值会导致半透明的像素,像素颜色越接近关键颜色,透明度越高。

41.3.1 示例

  • 使输入中每个半绿色像素透明并稍微混合:
    -i INPUT -vf "hwupload, colorkey_opencl=green:0.3:0.1, hwdownload" OUTPUT
    

41.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.

41.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
    

41.5 erosion_opencl

对视频应用腐蚀效果。

此过滤器将像素替换为局部(3x3)的最小值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化范围。范围是[0, 65535]默认值为65535。 如果0,平面将保持不变。

coordinates

指定要参考的像素的标志。 范围是[0, 255]默认值为255,即使用所有八个像素。

定位在x:

1 2 3

的局部3x3坐标区域的标志。

6 7 8

41.5.1 示例

  • 使用threshold0设置为30,threshold1设置为40,threshold2设置为50,coordinates设置为231应用腐蚀过滤器,将输出的每个像素设置为输入中以其为中心的3x3区域之间像素:1、2、3、6、7、8的局部最小值。如果输入像素与局部最小值之间的差异大于相应平面的阈值,输出像素将被设置为输入像素减去相应平面的阈值。
    -i INPUT -vf "hwupload, erosion_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

41.6 deshake_opencl

基于特征点的视频稳定过滤器。

过滤器接受以下选项:

tripod

通过完全防止原始画面中的任何摄像机移动模拟三脚架。默认值为0.

debug

是否在处理后的输出和控制台中显示额外的调试信息。

请注意,为了在控制台中查看调试输出,还需要将-v verbose传递给ffmpeg。

在输出视频中查看点匹配仅支持RGB输入。

默认值为0.

adaptive_crop

是否在边界处进行少量裁剪以减少镜像像素的数量。

默认值为1.

refine_features

是否在亚像素级别细化特征点。

可以关闭此功能以获得轻微的性能提升,但会降低精度。

默认值为1.

smooth_strength

0.01.0.

1.0的相机路径所使用的平滑强度。最大平滑强度值,而小于的值会导致平滑程度降低。

0.0会导致过滤器在逐帧基础上选择自适应平滑强度。

默认值为0.0.

smooth_window_multiplier

控制平滑窗口的大小(缓冲以确定运动信息的帧数)。

平滑窗口的大小通过将视频的帧率乘以此数字来确定。

可接受范围为0.110.0.

更大的值增加了用于确定如何平滑相机路径的运动数据量, 可能改善平滑性,但同时增加了延迟和内存使用。

默认值为2.0.

41.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
    

41.7 dilation_opencl

对视频应用膨胀效果。

此过滤器将像素替换为局部(3x3)的最大值。

它接受以下选项:

threshold0
threshold1
threshold2
threshold3

限制每个平面的最大变化范围。范围是[0, 65535]默认值为65535。 如果0,平面将保持不变。

coordinates

指定要参考的像素的标志。 范围是[0, 255]默认值为255,即使用所有八个像素。

定位在x:

1 2 3

的局部3x3坐标区域的标志。

6 7 8

41.7.1 示例

  • 使用threshold0设置为30,threshold1设置为40,threshold2设置为50,coordinates设置为231应用膨胀过滤器,将输出的每个像素设置为输入中以其为中心的3x3区域之间像素:1、2、3、6、7、8的局部最大值。如果输入像素与局部最大值之间的差异大于相应平面的阈值,输出像素将被设置为输入像素加上相应平面的阈值。
    -i INPUT -vf "hwupload, dilation_opencl=30:40:50:coordinates=231, hwdownload" OUTPUT
    

41.8 nlmeans_opencl

通过OpenCL的非局部均值去噪过滤器,此过滤器接受与nlmeans.

相同的选项。

将一个视频叠加到另一个视频之上。

它接受两个输入并有一个输出。第一个输入是“主”视频,第二个输入叠加在其上。 此过滤器要求所有输入具有相同的内存布局。因此可能需要格式转换。

过滤器接受以下选项:

x

设置叠加视频在主视频上的x坐标。 默认值为0.

y

设置叠加视频在主视频上的y坐标。 默认值为0.

41.9.1 示例

  • 将一个图像LOGO叠加到INPUT视频的左上角。两个输入均为yuv420p格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    
  • 输入的颜色通道具有相同的内存布局,叠加层有额外的alpha平面,例如INPUT是yuv420p,而LOGO是yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_opencl, hwdownload" OUTPUT
    

41.10 pad_opencl

为输入图像添加边距,并将原始输入放置在提供的位置。x, y坐标。

它接受以下选项:

width, w
height, h

指定一个表达式,用于决定添加边距后的输出图像大小。如果widthheight的值为0,则对应的输入尺寸将用于输出。

这个width表达式可以引用由height表达式设置的值,反之亦然。

默认的widthheight值为0。

x
y

指定偏移量,以相对于输出图像的上/左边界,将输入图像放置在填充区域内。

这个x表达式可以引用由y表达式设置的值,反之亦然。

默认的xy值为0。

如果xy计算结果为负数,它们会被修改,以使输入图像居中于填充区域内。

color

指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)"Color" 部分在 ffmpeg-utils 手册中的描述。.

aspect

可以填充到一个宽高比,而不是一个分辨率。

这个width, height, xy选项的值是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与in_win_h.

out_w
out_h

表达式所指定的输出宽度和高度(填充区域的大小)。width and height expressions.

ow
oh

同样适用于out_wout_h.

x
y

xy表达式指定的x和y偏移量,或如果尚未指定则为NAN。

a

同样适用于iw / ih

sar

输入采样的纵横比

dar

输入显示的纵横比,它与iw / ih) * sar

41.11 prewitt_opencl

对输入视频流应用Prewitt算子(https://en.wikipedia.org/wiki/Prewitt_operator)。

该过滤器接受以下选项:

planes

设置要过滤的平面。默认值是0xf,即处理所有平面。

scale

设置一个值,该值将与过滤结果相乘。范围是[0.0, 65535],默认值是1.0.

delta

设置一个值,该值将添加到过滤结果中。范围是[-65535, 65535],默认值是0.0.

41.11.1 示例

  • 使用缩放设置为2,增量设置为10应用Prewitt算子。
    -i INPUT -vf "hwupload, prewitt_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

41.12 program_opencl

使用OpenCL程序过滤视频。

source

OpenCL程序源文件。

kernel

程序中的内核名称。

inputs

过滤器的输入数量。默认为1。

size, s

输出帧的大小。默认为与第一个输入相同。

这个program_opencl过滤器也支持framesync选项。

程序源文件必须包含具有给定名称的内核函数,该内核函数将为输出的每个平面运行一次。每次对平面的运行将作为一个单独的二维全局 NDRange 排列,其中每个将生成的像素都有一个工作项。每个工作项的全局 ID 偏移因此为目标图像中像素的坐标。

内核函数需要接受以下参数:

  • 目标图像,__write_only image2d_t.

    这张图片将成为输出;内核应该写入所有内容。

  • 帧索引,无符号整数.

    这是一个从零开始的计数器,每帧递增一。

  • 源图像,__只读 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));
    }
    

41.13 remap_opencl

使用第2个:X映射和第3个:Y映射输入视频流重新映射像素。

目标位置 (X, Y) 的像素将从源位置 (x, y) 提取,其中 x = Xmap(X, Y),y = Ymap(X, Y)。如果映射值超出范围,目标像素将使用零值。

X映射和Y映射输入视频流必须具有相同的维度。输出视频流将具有X映射/Y映射视频流的维度。 X映射和Y映射输入视频流采用32位浮点像素格式,单通道。

interp

指定用于重新映射像素的插值。 允许值为nearlinear。 默认值为linear.

fill

指定未映射像素的颜色。关于该选项的语法,请参考(ffmpeg-utils)“颜色”部分,位于ffmpeg-utils手册中。默认颜色为black.

41.14 roberts_opencl

对输入视频流应用Roberts交叉算子(https://en.wikipedia.org/wiki/Roberts_cross)。

滤镜接受以下选项:

planes

设置需要过滤的平面。默认值为0xf,即所有平面都被处理。

scale

设置将与过滤结果相乘的值。 范围为[0.0, 65535],默认值为1.0.

delta

设置将添加到过滤结果的值。 范围为[-65535, 65535],默认值为0.0.

41.14.1 示例

  • 应用Roberts交叉算子,设置缩放值为2,增量值为10
    -i INPUT -vf "hwupload, roberts_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

41.15 sobel_opencl

对输入视频流应用Sobel算子(https://en.wikipedia.org/wiki/Sobel_operator)。

滤镜接受以下选项:

planes

设置需要过滤的平面。默认值为0xf,即所有平面都被处理。

scale

设置将与过滤结果相乘的值。 范围为[0.0, 65535],默认值为1.0.

delta

设置将添加到过滤结果的值。 范围为[-65535, 65535],默认值为0.0.

41.15.1 示例

  • 应用Sobel算子,设置缩放值为2,增量值为10
    -i INPUT -vf "hwupload, sobel_opencl=scale=2:delta=10, hwdownload" OUTPUT
    

41.16 tonemap_opencl

通过色调映射执行HDR(PQ/HLG)到SDR的转换。

它接受以下参数:

tonemap

指定要使用的色调映射操作符。与tonemap.

param

中的色调映射选项相同。色调映射算法的调谐。与.

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

默认与输入相同。

41.16.1 示例

  • 将HDR(PQ/HLG)视频转换为bt2020传输特性p010格式,使用线性操作符。
    -i INPUT -vf "format=p010,hwupload,tonemap_opencl=t=bt2020:tonemap=linear:format=p010,hwdownload,format=p010" OUTPUT
    

41.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’。

41.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
    

41.18 xfade_opencl

使用OpenCL通过自定义过渡效果交叉淡入淡出两个视频。

它接受以下选项:

transition

设置可能的过渡效果之一。

custom

选择自定义过渡效果,实际的过渡描述将从source和kernel选项中选取。

fade
wipeleft
wiperight
wipeup
wipedown
slideleft
slideright
slideup
slidedown

默认的过渡效果是fade。

source

用于自定义过渡的OpenCL程序源文件。

kernel

从程序源文件中设置用于自定义过渡的内核名称。

duration

设置视频过渡的持续时间。

offset

相对于第一个视频设置过渡的开始时间。

程序源文件必须包含一个具有指定名称的内核函数,该函数将针对输出的每个平面运行一次。每次对一个平面的运行都以一个单独的2D全局NDRange(每个生成的像素对应一个工作项)进行入队。因此,每个工作项的全局ID偏移就是目标图像中像素的坐标。

内核函数需要接受以下参数:

  • 目标图像,__write_only image2d_t.

    这个图像将成为输出;内核应写入其所有部分。

  • 第一个源图像,__read_only image2d_t。 第二个源图像,__read_only image2d_t.

    这些是每个输入上最新的图像。内核可以从它们中读取以生成输出,但它们不能被写入。

  • 过渡进度,float。此值始终介于0和1之间(包括)。

示例程序:

  • 应用点状帘过渡效果:
    __kernel void blend_images(__write_only image2d_t dst,
                               __read_only  image2d_t src1,
                               __read_only  image2d_t src2,
                               float progress)
    {
        const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
                                   CLK_FILTER_LINEAR);
        int2  p = (int2)(get_global_id(0), get_global_id(1));
        float2 rp = (float2)(get_global_id(0), get_global_id(1));
        float2 dim = (float2)(get_image_dim(src1).x, get_image_dim(src1).y);
        rp = rp / dim;
    
        float2 dots = (float2)(20.0, 20.0);
        float2 center = (float2)(0,0);
        float2 unused;
    
        float4 val1 = read_imagef(src1, sampler, p);
        float4 val2 = read_imagef(src2, sampler, p);
        bool next = distance(fract(rp * dots, &unused), (float2)(0.5, 0.5)) < (progress / distance(rp, center));
    
        write_imagef(dst, p, next ? val1 : val2);
    }
    

42 VAAPI视频滤镜

VAAPI视频滤镜通常与VAAPI解码器和VAAPI编码器一起使用。以下是VAAPI视频滤镜的说明。

为了启用这些滤镜的编译,需要使用以下配置FFmpeg:--enable-vaapi.

要使用vaapi滤镜,您需要正确设置vaapi设备。欲了解更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/VAAPI

42.1 overlay_vaapi

在一个视频的顶部覆盖另一个视频。

它接受两个输入并有一个输出。第一个输入是“主”视频,第二个输入会覆盖在其上。

该滤镜接受以下选项:

x
y

为覆盖视频在主视频上的x和y坐标设置表达式。

默认值为“0”,适用于两个表达式。

w
h

为覆盖视频在主视频上的宽度和高度设置表达式。

默认值为‘overlay_iw’作为‘w’,‘overlay_ih*w/overlay_iw’作为‘h’。

表达式可以包含以下参数:

main_w, W
main_h, H

主输入的宽度和高度。

overlay_iw
overlay_ih

覆盖输入的宽度和高度。

overlay_w, w
overlay_h, h

覆盖输出的宽度和高度。

overlay_x, x
overlay_y, y

覆盖层在主视频内的位置

alpha

设置覆盖视频的透明度。允许的范围是0.0到1.0。较高的值意味着较低的透明度。 默认值是1.0.

eof_action

参见framesync.

shortest

参见framesync.

repeatlast

参见framesync.

此过滤器还支持framesync选项。

42.1.1 示例

  • 将一个LOGO图像覆盖在输入视频的左上角。该滤镜的两个输入都是yuv420p格式。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuv420p, hwupload[b], [a][b]overlay_vaapi" OUTPUT
    
  • 将一个LOGO图像覆盖在距离输入视频左上角偏移(200, 100)的位置。 输入的颜色通道的内存布局相同,但覆盖层有额外的alpha平面,例如输入是yuv420p,而LOGO是yuva420p。
    -i INPUT -i LOGO -filter_complex "[0:v]hwupload[a], [1:v]format=yuva420p, hwupload[b], [a][b]overlay_vaapi=x=200:y=100:w=400:h=300:alpha=1.0, hwdownload, format=nv12" OUTPUT
    

42.2 tonemap_vaapi

执行从HDR到SDR或从HDR到HDR的色调映射。 目前仅接受HDR10作为输入。

它接受以下参数:

format

指定输出像素格式。

默认值为HDR到SDR色调映射的nv12和HDR到HDR色调映射的p010。

primaries, p

设置输出颜色基色。

默认值为HDR到SDR色调映射的bt709,而HDR到HDR色调映射则与输入相同。

transfer, t

设置输出传输特性。

默认值为HDR到SDR色调映射的bt709,而HDR到HDR色调映射则与输入相同。

matrix, m

设置输出颜色空间矩阵。

默认值为HDR到SDR色调映射的bt709,而HDR到HDR色调映射则与输入相同。

display

设置输出的主显示颜色范围。它由一个‘|’分隔的两个值列表组成,每个值之间用空格分隔。它设置显示基色x和y,顺序为G、B、R,然后是白点的x和y,以及标称最小和最大显示亮度。

设置此选项时,将执行HDR到HDR色调映射。

light

设置输出内容亮度水平信息。它接受2个用空格分隔的值,第一个输入是最大亮度水平,第二个输入是最大平均亮度水平。

它对于HDR到SDR色调映射被忽略,对于HDR到HDR色调映射是可选的。

42.2.1 示例

  • 将HDR(HDR10)视频转换为bt2020传输特性p010格式
    tonemap_vaapi=format=p010:t=bt2020-10
    
  • 将HDR视频转换为HDR视频
    tonemap_vaapi=display=7500\ 3000|34000\ 16000|13250\ 34500|15635\ 16450|500\ 10000000
    

42.3 hstack_vaapi

将输入视频水平堆叠。

这是hstack滤镜的VA-API版本,每个输入流的高度可以不同,该滤镜将上/下缩放每个输入,同时保持原始纵横比。

它接受以下选项:

inputs

参见hstack.

shortest

参见hstack.

height

设置输出的高度。如果设置为0,本滤镜将把输出高度设置为第一个输入流的高度。默认值为0。

42.4 vstack_vaapi

将输入视频垂直堆叠。

这是vstack滤镜的VA-API版本,每个输入流的宽度可以不同,该滤镜将上/下缩放每个输入,同时保持原始纵横比。

它接受以下选项:

inputs

参见vstack.

shortest

参见vstack.

width

设置输出的宽度。如果设置为0,本滤镜将把输出宽度设置为第一个输入流的宽度。默认值为0。

42.5 xstack_vaapi

将视频输入堆叠到自定义布局中。

这是 VA-API 的变体xstack滤镜,每个输入流可能有不同的大小,此滤镜会将每个输入流缩放到 给定的输出大小,或者第一个输入流的大小。

它接受以下选项:

inputs

参见xstack.

shortest

参见xstack.

layout

参见xstack。 此外,这允许用户为每个输入流提供输出大小。

xstack_vaapi=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

参见xstack.

grid_tile_size

设置每个输入流的输出大小,当grid设置时。如果未设置此选项,此滤镜将默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看(ffmpeg-utils)“视频大小”部分中的 ffmpeg-utils 手册.

fill

参见xstack.

42.6 pad_vaapi

为输入图像添加填充,并将原始输入放置在 指定的x, y坐标。

它接受以下选项:

width, w
height, h

为带填充的输出图像的大小指定一个表达式。对于宽度高度为 0 的值, 将使用对应的输入大小作为输出大小。

宽度表达式可以引用由高度表达式设置的值,反之亦然。

默认值为宽度高度为 0。

x
y

指定在填充区域内放置输入图像的偏移量, 相对于输出图像的顶部/左侧边界。

x表达式可以引用由y表达式设置的值,反之亦然。

默认值为xy为 0。

如果xy的计算结果为负数,它们将会被更改以使输入图像居中于填充区域。

color

指定填充区域的颜色。有关此选项的语法,请查看(ffmpeg-utils)“颜色”部分中的 ffmpeg-utils 手册.

aspect

根据纵横比填充,而不是分辨率。

对于宽度, 高度, xy选项的值,是包含以下常量的表达式:

in_w
in_h

输入视频的宽度和高度。

iw
ih

这些与in_win_h.

out_w
out_h

输出宽度和高度(填充区域的大小),如由宽度高度表达式指定。

ow
oh

这些与out_wout_h.

x
y

x 和 y 偏移量,如由xy表达式指定,或如果尚未指定则为 NAN。

a

iw / ih

sar

输入采样纵横比

dar

输入显示纵横比,与 (iw / ih) * sar

42.7 drawbox_vaapi

在输入图像上绘制一个彩色框。

它接受以下参数:

x
y

指定框左上角坐标的表达式。默认值为 0。

width, w
height, h

指定框的宽度和高度的表达式;如果为 0,则表示 输入的宽度和高度。默认值为 0。

color, c

指定要绘制的框的颜色。关于此选项的一般语法,请查看(ffmpeg-utils)"颜色"部分在ffmpeg-utils手册中.

thickness, t

设置盒子边缘厚度的表达式。值为fill将创建一个填充的盒子。默认值是3.

请参见下面的已接受常量列表。

replace

值为1时,绘制的盒子的像素将覆盖视频的颜色和alpha像素。默认值是0,它将盒子合成到输入视频中。

参数为x, y, wht是包含以下常量的表达式:

in_h, ih
in_w, iw

输入宽度和高度。

x
y

绘制盒子的x和y偏移坐标。

w
h

所绘制盒子的宽度和高度。

t

所绘制盒子的厚度。

42.7.1 示例

  • 在输入图像的边缘绘制一个黑色盒子:
    drawbox
    
  • 绘制一个红色且透明度为50%的盒子:
    drawbox=10:20:200:60:red@0.5
    

    前一个示例可以指定为:

    drawbox=x=10:y=20:w=200:h=60:color=red@0.5
    
  • 填充盒子为粉红色:
    drawbox=x=10:y=10:w=100:h=100:color=pink@0.5:t=fill
    
  • 绘制一个2像素的红色2.40:1遮罩:
    drawbox=x=-t:y=0.5*(ih-iw/2.4)-t:w=iw+t*2:h=iw/2.4+t*2:t=2:c=red
    

43 Vulkan 视频滤镜

以下是目前可用的Vulkan视频滤镜的说明。

要启用这些滤镜的编译,您需要使用以下命令配置FFmpeg--enable-vulkan--enable-libglslang之一--enable-libshaderc.

运行Vulkan滤镜需要您初始化一个硬件设备,并将该设备传递给任何滤镜图中的所有滤镜。

-init_hw_device vulkan[=名称][:设备[,键=值...]]

初始化一个类型为vulkan的新硬件设备,名为名称,使用提供的设备参数和选项键=值。支持以下选项:

debug

如果设置为1,则开启验证层。

linear_images

分配线性图像。不适用于解码。

disable_multiplane

禁用多平面图像。不适用于解码。

-filter_hw_device 名称

将名为名称的硬件设备传递给任何滤镜图中的所有滤镜。

有关更详细的信息,请参见https://www.ffmpeg.org/ffmpeg.html#Advanced-Video-options

  • 选择第一个设备并在其上运行具有默认参数的nlmeans_vulkan过滤器的示例。
    -init_hw_device vulkan=vk:0 -filter_hw_device vk -i INPUT -vf "hwupload,nlmeans_vulkan,hwdownload" OUTPUT
    

由于Vulkan滤镜无法访问普通内存中的帧数据,所有帧数据需要在使用前上传到与相应设备连接的硬件表面(hwupload),然后下载(hwdownload)回到普通内存。需要注意的是,hwupload将上传到与软件帧相同布局的帧,因此可能需要在它之前直接添加一个format滤镜以正确格式化输入,并且hwdownload不支持输出的所有格式——通常需要在图中立即插入一个额外的format滤镜以获取支持的输出格式。

43.1 avgblur_vulkan

使用Vulkan在GPU上实现的平均模糊滤镜。

滤镜接受以下选项:

sizeX

设置水平半径大小。范围是[1, 32],默认值是3.

sizeY

设置垂直半径大小。范围是[1, 32],默认值是3.

planes

设置要过滤的平面。默认值是0xf,即处理所有平面。

43.2 blend_vulkan

将两个Vulkan帧相互混合。

滤镜接受两个输入流,并输出一个流;第一个输入是"顶部"图层,第二个输入是"底部"图层。默认情况下,当最长的输入终止时输出终止。blend filter takes two input streams and outputs one stream, the first input is the "top" layer and second input is "bottom" layer. By default, the output terminates when the longest input terminates.

以下是接受的选项的说明。

c0_mode
c1_mode
c2_mode
c3_mode
all_mode

为特定像素组件或all_mode情况下的所有像素组件设置混合模式。默认值是normal.

组件模式的可用值是:

normal
multiply

43.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.

43.4 chromaber_vulkan

应用模拟色差的效果。对RGB输入效果最好,但对YCbCr输入也能提供类似效果。

dist_x

水平位移乘数。每个色度像素的位置将从图像中心开始乘以此值。默认值为0.

dist_y

同样,这设置了垂直位移乘数。默认值为0.

43.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)。

43.6 vflip_vulkan

垂直翻转图像。

43.7 hflip_vulkan

水平翻转图像。

43.8 flip_vulkan

在垂直和水平轴上翻转图像。

43.9 gblur_vulkan

对Vulkan帧应用高斯模糊滤镜。

滤镜接受以下选项:

sigma

设置水平西格玛,高斯模糊的标准偏差。默认值为0.5.

sigmaV

设置垂直西格玛,如果为负值将与sigma相同。 默认值为-1.

planes

设置要过滤的平面。默认情况下所有平面都被过滤。

size

设置水平轴上的内核大小。默认值为19.

sizeV

设置垂直轴上的内核大小。默认值为0, 对应于与大小.

43.10 nlmeans_vulkan

使用非局部平均算法对帧去噪,在GPU上通过Vulkan实现。 支持更多的像素格式nlmeansnlmeans_opencl,包括对Alpha通道的支持。

滤镜接受以下选项。

s

设置所有分量的去噪强度。默认值为1.0。必须在范围[1.0, 100.0]内。

p

设置所有平面的块大小。默认值为7。必须为范围[0, 99]内的奇数。

r

设置研究大小。默认值为15。必须为范围[0, 99]内的奇数。

t

设置并行度。默认值为36。必须是范围[1, 168]内的数字。 更大的值可能加快处理速度,但会占用更多VRAM。 较小的值会减慢速度,但减少VRAM使用。 仅在支持原子浮点操作的GPU上(RDNA3+,Ampere+)。

s0
s1
s2
s3

为特定分量设置去噪强度。默认值为1, 等于s。 必须为范围[1, 100]内的奇数。

p0
p1
p2
p3

为特定分量设置块大小。默认值为7, 等于p。 必须为范围[0, 99]内的奇数。

43.11 overlay_vulkan

在一个视频上叠加另一个视频。

它需要两个输入并产生一个输出。第一个输入是“主”视频,第二个输入叠加在其上。 此过滤器要求所有输入使用相同的像素格式。因此,可能需要格式转换。

滤镜接受以下选项:

x

设置叠加视频在主视频上的x坐标。 默认值为0.

y

设置叠加视频在主视频上的y坐标。 默认值为0.

43.12 transpose_vt

将输入视频的行与列转置并可选择翻转。 有关更详细的示例,请参见transpose视频过滤器,其选项大部分相同。

它接受以下参数:

dir

指定转置方向。

可以选择以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

hflip

水平翻转输入视频。

vflip

垂直翻转输入视频。

passthrough

如果输入几何结构与指定值匹配,则不应用转置。接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何(当高度 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

43.13 transpose_vulkan

将输入视频的行与列转置并可选择翻转。 有关更详细的示例,请参见transpose视频过滤器,其选项大部分相同。

它接受以下参数:

dir

指定转置方向。

可以选择以下值:

cclock_flip

逆时针旋转90度并垂直翻转。(默认)

clock

顺时针旋转90度。

cclock

逆时针旋转90度。

clock_flip

顺时针旋转90度并垂直翻转。

passthrough

如果输入几何结构与指定值匹配,则不应用转置。接受以下值:

none

始终应用转置。(默认)

portrait

保留纵向几何(当高度 >= 宽度).

landscape

保留横向几何(当宽度 >= 高度).

44 QSV 视频滤镜

以下是当前可用 QSV 视频滤镜的描述。

要启用这些滤镜的编译,您需要配置 FFmpeg,使用--enable-libmfx--enable-libvpl.

要使用 QSV 滤镜,您需要正确设置 QSV 设备。更多信息,请阅读https://trac.ffmpeg.org/wiki/Hardware/QuickSync

44.1 hstack_qsv

水平堆叠输入视频。

这是hstack滤镜的 QSV 变体,每个输入流可以有不同的高度,此滤镜将调节每个输入流的比例,同时保留原始的宽高比。

它接受以下选项:

inputs

参见hstack.

shortest

参见hstack.

height

设置输出的高度。如果设置为 0,此滤镜将把输出的高度设置为第一个输入流的高度。默认值为 0。

44.2 vstack_qsv

垂直堆叠输入视频。

这是vstack滤镜的 QSV 变体,每个输入流可以有不同的宽度,此滤镜将调节每个输入流的比例,同时保留原始的宽高比。

它接受以下选项:

inputs

参见vstack.

shortest

参见vstack.

width

设置输出的宽度。如果设置为 0,此滤镜将把输出的宽度设置为第一个输入流的宽度。默认值为 0。

44.3 xstack_qsv

将视频输入堆叠为自定义布局。

这是xstack滤镜的 QSV 变体。

它接受以下选项:

inputs

参见xstack.

shortest

参见xstack.

layout

参见xstack此外,这允许用户为每个输入流提供输出大小。

xstack_qsv=inputs=4:layout=0_0_1920x1080|0_h0_1920x1080|w0_0_1920x1080|w0_h0_1920x1080
grid

参见xstack.

grid_tile_size

设置当grid设置时每个输入流的输出大小。如果未设置此选项,此滤镜默认将输出大小设置为第一个输入流的大小。有关此选项的语法,请查看(ffmpeg-utils)“视频大小”部分,位于 ffmpeg-utils 手册中.

fill

参见xstack.

45 视频源

以下是当前可用视频源的描述。

45.1 buffer

缓冲视频帧,并将其提供给滤镜链。

此源主要用于程序化用途,特别是通过以下所定义的接口libavfilter/buffersrc.h.

它接受以下参数:

video_size

指定缓冲视频帧的大小(宽度和高度)。有关此选项语法,请查看(ffmpeg-utils)“视频大小”部分,位于 ffmpeg-utils 手册中.

width

输入视频的宽度。

height

输入视频的高度。

pix_fmt

表示缓冲视频帧像素格式的字符串。可以是一个对应于像素格式的数字,或者是像素格式名称。

time_base

指定缓冲帧的时间戳所假设的时间基准。

frame_rate

指定视频流预期的帧率。

colorspace

表示缓冲视频帧的色彩空间的字符串。可以是一个对应于色彩空间的数字,或者是色彩空间名称。

range

表示缓冲视频帧的色彩范围的字符串。可以是一个对应于色彩范围的数字,或者是色彩范围名称。

pixel_aspect, sar

输入视频的采样(像素)纵横比。

hw_frames_ctx

当使用硬件像素格式时,这应该是描述输入帧的 AVHWFramesContext 引用。

例如:

buffer=width=320:height=240:pix_fmt=yuv410p:time_base=1/24:sar=1

将指示源接受大小为 320x240 且格式为 "yuv410p" 的视频帧,时间戳时间基准为 1/24,并且像素是正方形(1:1 的采样纵横比)。由于名称为 "yuv410p" 的像素格式对应于数字 6(在libavutil/pixfmt.h中检查枚举 AVPixelFormat 定义),此例子等同于:

buffer=size=320x240:pixfmt=6:time_base=1/24:pixel_aspect=1/1

或者,选项可以指定为一个扁平的字符串,但此语法已弃用:

宽度:高度:像素格式:时间基准.分子:时间基准.分母:像素纵横比.分子:像素纵横比.分母

45.2 cellauto

通过基本元胞自动机生成一个模式。

元胞自动机的初始状态可以通过filenamepattern选项定义。如果未指定这些选项,则随机创建初始状态。

每生成一帧,新的一行填充到视频中,行内容为元胞自动机下一代的结果。整个帧填满后的行为由scroll选项定义。

此源接受以下选项:

filename, f

从指定文件读取元胞自动机的初始状态,即起始行。在文件中,每个非空白字符被视为一个存活的单元,换行符将终止该行,文件中的其余字符将被忽略。

pattern, p

从指定字符串读取元胞自动机的初始状态,即起始行。

字符串中的每个非空白字符被视为一个存活的单元,换行符将终止该行,字符串中的其余字符将被忽略。

rate, r

设置视频速率,即每秒生成的帧数。默认值为 25。

random_fill_ratio, ratio

设置初始元胞自动机行的随机填充比率。它是一个介于 0 到 1 的浮点数,默认为 1/PHI。

当指定了文件或模式时,此选项将被忽略。

random_seed, seed

设置用于随机填充初始行的种子,必须是介于 0 和 UINT32_MAX 之间的整数。如果未指定,或明确设置为 -1,滤镜将在尽力而为的基础上尝试使用一个较好的随机种子。

rule

设置元胞自动机规则,它是一个介于 0 到 255 的数字。默认值为 110。

size, s

设置输出视频的大小。有关此选项语法,请查看(ffmpeg-utils)“视频大小”部分,位于 ffmpeg-utils 手册中.

如果filenamepattern被指定,大小默认设置为指定初始状态行的宽度,高度设置为宽度* PHI。

如果size已设置,则它必须包含指定模式字符串的宽度,并且指定的模式将居中于更大的行。

如果未指定文件名或模式字符串,size 值默认为"320x518"(用于随机生成的初始状态)。

scroll

如果设置为1,当输出的所有行都已被填满时,将向上滚动输出。如果设置为0,新生成的行将在底部行填满后立即覆盖顶部行。默认值为1。

start_full, full

如果设置为1,则在输出首帧之前,完全用生成的行填满输出。这是默认行为,要禁用,请将值设置为0。

stitch

如果设置为1,将拼接左右行边缘。这是默认行为,要禁用,请将值设置为0。

45.2.1 示例

  • 从中读取初始状态pattern,并指定输出尺寸为200x400。
    cellauto=f=pattern:s=200x400
    
  • 生成一个宽度为200个单元且填充比为2/3的随机初始行:
    cellauto=ratio=2/3:s=200x200
    
  • 生成由规则18生成的模式,该模式从宽度为100的初始行中心的单个存活单元开始:
    cellauto=p=@:s=100x400:full=0:rule=18
    
  • 指定更复杂的初始模式:
    cellauto=p='@@ @ @@':s=100x400:full=0:rule=18
    

45.3 coreimagesrc

使用苹果OSX上的CoreImage API通过GPU生成的视频源。

此视频源是的一个专门版本coreimage视频滤镜。 在应用的滤镜链开头使用core image生成器来生成内容。

coreimagesrc视频源接受以下选项:

list_generators

列出所有可用生成器及其各自的所有选项,以及可能的最小值和最大值以及默认值。

list_generators=true
size, s

指定源视频的大小。有关此选项的语法,请检查(ffmpeg-utils)“视频大小”部分在ffmpeg-utils手册中。 默认值为320x240.

rate, r

指定源视频的帧率,即每秒生成的帧数。它必须是以下格式的字符串frame_rate_num/frame_rate_den,一个整数,一个浮点数,或者一个有效的视频帧率缩写。默认值为"25"。

sar

设置源视频的采样纵横比。

duration, d

设置源视频的持续时间。请参阅(ffmpeg-utils)时间持续时间部分在ffmpeg-utils(1)手册中的接受语法。

如果未指定,或表达的持续时间为负,则视频应该永远生成。

此外,所有的选项都可用coreimage视频滤镜。 可以使用完整的滤镜链对生成的输入进行进一步处理,而无需CPU主机传输。详情请参阅coreimage文档和示例。

45.3.1 示例

  • 使用CIQRCodeGenerator为FFmpeg主页创建二维码,以下是为苹果标准bash shell提供的完整且转义的命令行:
    ffmpeg -f lavfi -i coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H -frames:v 1 QRCode.png
    

    此示例等同于中的QRCode示例coreimage不需要使用nullsrc视频源。

45.4 ddagrab

通过桌面复制API捕获Windows桌面。

过滤器专门返回D3D11硬件帧,用于GPU上的编码或处理。因此,对于任何种类的软件处理,都需要显式的hwdownload

它接受以下选项:

output_idx

捕获的DXGI输出索引。

通常对应于Windows赋予屏幕的索引减一,因此从0开始。

默认值为输出0。

draw_mouse

是否绘制鼠标光标。

默认值为true。

只影响硬件光标。如果游戏或应用程序渲染它自己的光标,它将始终被捕获。

framerate

桌面捕获的最大帧率——连续帧之间的间隔不会小于帧率的倒数。当dup_frames为真(默认值)且桌面更新不够频繁时,滤镜将复制先前的帧。请注意没有进行背景缓存,因此如果滤镜没有被足够频繁地轮询,则实际帧间间隔可能会显著增大。

默认值为30 FPS。

video_size

指定捕获视频的大小。

默认值为屏幕的全尺寸。

如果比屏幕尺寸小,则从底部/右侧裁剪。

offset_x

捕获视频的水平偏移量。

offset_y

捕获视频的垂直偏移量。

output_fmt

所需的滤镜输出格式。 默认值为8位BGRA。

它接受以下值:

auto

将所有支持的输出格式传递给DDA,由DDA决定使用哪一种。

8bit
bgra

8位格式总是适用,必要时DDA会将其转换为该格式。

10bit
x2bgr10

如果请求但不可用的情况下指定10位格式,滤镜初始化将失败。

dup_frames

当此选项设置为true(默认值)时,滤镜将在桌面未更新时复制帧以维持大致恒定的目标帧率。当此选项设置为false时,滤镜将等待桌面更新(这时帧间间隔可能会显著变化)。

45.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

45.5 gradients

生成多个渐变。

size, s

设置帧尺寸。有关此选项的语法,请检查(ffmpeg-utils)“视频大小”部分在ffmpeg-utils手册中。默认值为"640x480"。

rate, r

设置帧率,表示为每秒的帧数。默认值为"25"。

c0, c1, c2, c3, c4, c5, c6, c7

设置8种颜色。颜色的默认值为随机选择的颜色。

x0, y0, y0, y1

设置渐变线的源点和目标点。如果为负数或超出范围,则选择随机点。

nb_colors, n

设置一次使用的颜色数量。允许范围是2到8。默认值为2。

seed

为选择渐变线点设置种子。

duration, d

设置源视频的持续时间。请参阅(ffmpeg-utils) 时间持续时间部分在ffmpeg-utils(1)手册中的接受语法。

如果未指定或表达的持续时间为负,则视频将被认为是永远生成的。

speed

设置渐变旋转的速度。

type, t

设置渐变的类型。 可用值为:

linear
radial
circular
spiral
square

默认类型是线性.

45.5.1 命令

此源支持上述一些选项作为命令.

45.6 mandelbrot

生成Mandelbrot集合分形,并逐步缩放到通过start_xstart_y.

指定的点。

end_pts

设置终端 PTS 值。默认值为400。

end_scale

设置终端缩放值。 必须是浮点值,默认值为0.3。

inner

设置内部着色模式,即用于绘制曼德博集合内部区域的算法。

它应采用以下值之一:

black

设置黑色模式。

convergence

显示收敛时间。

mincol

根据迭代中最接近原点的点设置颜色。

period

设置周期模式。

默认值是mincol.

bailout

设置逃逸值。默认值为10.0。

maxiter

设置渲染算法执行的最大迭代次数。默认值为7189。

outer

设置外部着色模式。 它应采用以下值之一:

iteration_count

设置迭代计数模式。

normalized_iteration_count

设置归一化迭代计数模式。

默认值是normalized_iteration_count.

rate, r

设置帧率,表达为每秒的帧数。默认值为“25”。

size, s

设置帧大小。此选项的语法详见(ffmpeg-utils)“视频大小”部分,位于ffmpeg-utils手册中默认值为“640x480”。

start_scale

设置初始缩放值。默认值为3.0。

start_x

设置初始x位置。必须是-100到100之间的浮点值。默认值是-0.743643887037158704752191506114774。

start_y

设置初始y位置。必须是-100到100之间的浮点值。默认值是-0.131825904205311970493132056385139。

45.7 mptestsrc

生成各种测试图案,由MPlayer测试过滤器生成。

生成的视频大小固定为512x512。 此源特别适合用于测试编码功能。

此源接受以下选项:

rate, r

指定源视频的帧率,即每秒生成的帧数。必须是以下格式的字符串frame_rate_num/frame_rate_den,一个整数,一个浮点数或一个有效的视频帧率缩写。默认值为“25”。

duration, d

设置源视频的持续时间。详见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分以获取可接受的语法。

如果未指定或表达的持续时间为负,则视频将被无限生成。

test, t

设置测试的编号或名称。支持的测试包括:

dc_luma
dc_chroma
freq_luma
freq_chroma
amp_luma
amp_chroma
cbp
mv
ring1
ring2
all
max_frames, m

设置每次测试生成的最大帧数,默认值为30。

默认值是“all”,它会循环所有测试列表。

一些示例:

mptestsrc=t=dc_luma

将生成“dc_luma”测试图案。

45.8 frei0r_src

提供一个frei0r源。

要启用此过滤器的编译,您需要安装frei0r头文件并使用以下方式配置FFmpeg--enable-frei0r.

此源接受以下参数:

size

生成视频的大小。此选项的语法详见(ffmpeg-utils)“视频大小”部分,位于ffmpeg-utils手册中.

framerate

生成视频的帧率。它可以是以下格式的字符串num/den或一个帧率缩写。

filter_name

加载frei0r源的名称。有关frei0r及如何设置参数的更多信息,请阅读frei0r部分,它位于视频过滤器的文档中。

filter_params

一个以‘|’分隔的参数列表,传递给frei0r源。

例如,生成一个frei0r partik0l源,尺寸200x200,帧率为10,并覆盖在overlay过滤器主输入上:

frei0r_src=size=200x200:framerate=10:filter_name=partik0l:filter_params=1234 [overlay]; [in][overlay] overlay

45.9 life

生成一个生命模式。

此源基于约翰·康威的生命游戏扩展。

源输入代表一个生命网格,每个像素代表一个单元, 该单元可以是两种可能状态之一:活着或死去。 每个单元与其八个邻居互动,这些邻居是水平、垂直或对角线相邻的单元。

在每次交互中,网格根据采用的规则进行演变, 该规则指定邻居活细胞的数量,这些数量将使一个细胞保持活着或诞生。rule选项允许用户指定采用的规则。

此源接受以下选项:

filename, f

设置要从中读取初始网格状态的文件。在文件中, 每个非空白字符被视为一个活细胞,每一行的末尾用换行符分隔。

如果未指定此选项,则初始网格会随机生成。

rate, r

设置视频速率,即每秒生成的帧数。 默认值为25。

random_fill_ratio, ratio

设置初始随机网格的随机填充率。 这是一个从0到1的浮点数值,默认值为1/PHI。 当指定了文件时,此值会被忽略。

random_seed, seed

设置用于填充初始随机网格的种子,必须是0到UINT32_MAX之间的整数。 如果未指定或显式设置为-1,过滤器将在尽力的基础上尝试使用优质的随机种子。

rule

设置生命规则。

规则可以通过以下代码指定:"SNS/BNB", 其中NSNB是0-8范围内的一组数字,NS指定活邻居细胞的数量, 这些数量将使一个存活的细胞保持活着,NB指定活邻居细胞的数量 这些数量将使一个死细胞变成活细胞(即“诞生”)。 "s"和"b"可以分别用来替代"S"和"B"。

或者,一个规则可以通过一个18位整数指定。 高9位用于编码活细胞在每个邻居活细胞数量下的下一个状态, 低位用于指定新细胞“诞生”的规则。更高的位编码更多的邻居活细胞。 例如,数字6153 =(12<<9)+9指定保持活着的规则为12,诞生规则为9,对应于"S23/B03"。

默认值为"S23/B3",这是原始康威生命游戏规则, 它将保持一个细胞活着,如果它有2或3个邻居活细胞, 并且在一个死细胞周围有三个活细胞时诞生一个新细胞。

size, s

设置视频输出的尺寸。此选项的语法详见(ffmpeg-utils)“视频大小”部分,位于ffmpeg-utils手册中.

如果filename已指定,则尺寸默认设置为输入文件的尺寸。 如果size已设置,则必须包含输入文件中指定的尺寸, 并且文件定义的初始网格居中于较大的结果区域。

如果未指定文件名,则尺寸值默认设置为“320x240” (用于随机生成初始网格)。

stitch

如果设置为1,将连接生命网格的左侧与右侧, 并同时连接顶部与底部边缘。默认为1。

mold

设置细胞衰变速度。如果设置了,一个死细胞将从death_colormold_colormold. mold的步长衰变。 可以取0到255的值。

life_color

设置活(或新生)细胞的颜色。

death_color

设置死细胞的颜色。如果mold已设置,则此为第一个颜色,用于表示死细胞。

mold_color

设置衰变颜色,适用于绝对死亡和衰变的细胞。

关于这3个颜色选项的语法,详见(ffmpeg-utils)"颜色"部分在 ffmpeg-utils手册中.

45.9.1 示例

  • 从中读取一个网格pattern,并将其居中于一个300x300像素大小的网格上:
    life=f=pattern:s=300x300
    
  • 生成一个大小为200x200的随机网格,填充比例为2/3:
    life=ratio=2/3:s=200x200
    
  • 为演化随机生成的网格指定自定义规则:
    life=rule=S14/B34
    
  • 使用慢死亡效果(霉菌)的完整示例ffplay:
    ffplay -f lavfi life=s=300x200:mold=10:r=60:ratio=0.1:death_color=#C83232:life_color=#00ff00,scale=1200:800:flags=16
    

45.10 perlin

生成Perlin噪声。

Perlin噪声是一种在空间中具有局部连续性的噪声。 可用于生成在空间和时间上具有连续性的模式, 例如模拟烟雾、流体或者地形。

如果通过octaves选项指定了多个八度,Perlin噪声将作为多项成分的总和生成,每一个成分的频率加倍。在这种情况下,persistence选项指定与前一成分相对于振幅的比率。更多的八度成分能为生成的噪声提供更高频率的细节(例如在生成的地形中由于巨石引起的小规模变化)。

45.10.1 选项

size, s

指定缓存的视频帧的大小(宽和高)。有关此选项的语法,请参阅(ffmpeg-utils)"视频大小"部分在ffmpeg-utils手册中。 默认值为320x240.

rate, r

指定视频流的预期帧率,以每秒帧数表示。默认值为25.

octaves

指定组成噪声的整体成分总数,每个成分的频率加倍。默认值为1.

persistence

设置用于计算下一个八度分量振幅相对于前一个分量振幅的比率。默认值为1.

xscale
yscale

定义一个用于乘以x,y坐标的比例因子。这对于定义沿x或y轴拉伸的模式效果非常有用。默认值为1.

tscale

定义一个用于乘以时间坐标的比例因子。这可以用于更改时间变化的速度。默认值为1.

random_mode

设置用于计算初始模式的随机模式。

支持的值为:

random

计算并使用随机种子。

ken

使用Ken Perlin在原始文章中定义的预定义初始模式,这对于将输出与其他来源进行比较可能有用。

seed

使用指定的值random_seed选项。

默认值为random.

random_seed, seed

random_mode设置为random_seed时,使用此值计算初始模式。默认值为0.

45.10.2 示例

  • 生成单个成分:
    perlin
    
  • 使用7个成分的Perlin噪声,每个成分对总振幅的贡献减半:
    perlin=octaves=7:persistence=0.5
    
  • 将Perlin噪声与lutyuv连接起来以生成黑白效果:
    perlin=octaves=3:tscale=0.3,lutyuv=y='if(lt(val\,128)\,255\,0)'
    
  • 沿y轴拉伸噪声,并将灰度转换为仅红色信号:
    perlin=octaves=7:tscale=0.4:yscale=0.3,lutrgb=r=val:b=0:g=0
    

45.11 qrencodesrc

使用libqrencode库生成QR码(参见https://fukuchi.org/works/qrencode/).

要启用此源的编译,您需要配置FFmpeg,并包含--enable-libqrencode.

QR码由提供的文本或文本模式生成。生成的QR码会根据指定的输出大小选项缩放并放置在视频输出中。

如果未指定任何文本,则不会生成QR码,而是返回一个空的彩色输出。

此源接受以下选项:

qrcode_width, q
padded_qrcode_width, Q

为QR码的渲染宽度指定一个表达式(包括和不包括填充宽度)。qrcode_width表达式可以引用由padded_qrcode_width表达式设置的值,反之亦然。 默认情况下,padded_qrcode_width设置为qrcode_width,这意味着没有填充。

这些表达式仅在源初始化时评估一次。 有关详细信息,请参见qrencode 表达式部分。

请注意,由于一些常量缺失(例如xtn),这些常量仅在为每帧评估表达式时有意义,因此在初始化时不会使用它们。

rate, r

指定源视频的帧率,即每秒生成的帧数。它必须是格式为frame_rate_num/frame_rate_den的字符串,或者是一个整数、浮点数或一个有效的视频帧率缩写。默认值为"25"。

case_sensitive, cs

指示libqrencode使用区分大小写的编码。这是默认启用的。可以禁用此功能以减少QR编码大小。

level, l

指定QR编码的错误纠正级别。错误纠正级别越高,编码大小会增加,但代码对损坏的稳健性会更强。 最低级别是L.

它接受以下值:

L
M
Q
H
expansion

选择输入文本的扩展方式。可以是none,或者normal(默认)。有关详细信息,请参见qrencode 文本扩展部分。

text
textfile

定义要呈现的文本。如果没有指定,则不会编码QR(只生成一个空的彩色帧)。

如果启用了扩展,则该文本被视为文本模板,并使用 qrencode扩展机制处理。有关详细信息,请参见qrencode 文本扩展部分。

background_color, bc
foreground_color, fc

设置QR码和背景颜色。foreground_color的默认值是"黑色",background_color的默认值是"白色"。

有关颜色选项语法的详细信息,请参见(ffmpeg-utils)"颜色" 部分在ffmpeg-utils手册中.

45.11.1 示例

  • 生成一个编码指定文本的QR码,默认大小:
    qrencodesrc=text=www.ffmpeg.org
    
  • 如上,但选择蓝色和粉色作为颜色:
    qrencodesrc=text=www.ffmpeg.org:bc=pink:fc=blue
    
  • 生成一个宽度为200像素且有填充宽度的QR码,使得填充宽度是QR码宽度的4/3:
    qrencodesrc=text=www.ffmpeg.org:q=200:Q=4/3*q
    
  • 生成一个填充宽度为200像素且有填充宽度的QR码,使得QR码宽度是填充宽度的3/4:
    qrencodesrc=text=www.ffmpeg.org:Q=200:q=3/4*Q
    
  • 生成一个编码帧号的QR码:
    qrencodesrc=text=%{n}
    
  • 生成一个编码GMT时间戳的QR码:
    qrencodesrc=text=%{gmtime}
    
  • 生成一个编码以浮点数表示的时间戳的QR码:
    qrencodesrc=text=%{pts}
    

45.12 allrgb, allyuv, color, colorchart, colorspectrum, haldclutsrc, nullsrc, pal75bars, pal100bars, rgbtestsrc, smptebars, smptehdbars, testsrc, testsrc2, yuvtestsrc

allrgb源返回的帧大小为4096x4096,包含所有RGB颜色。

这个allyuv源返回的帧大小为4096x4096,包含所有YUV颜色。

这个color源提供一个均匀着色的输入。

这个colorchart源提供一个色彩检查图表。

这个colorspectrum源提供一个色彩光谱输入。

这个haldclutsrc源提供一个身份的Hald CLUT。另见haldclut滤镜。

这个nullsrc源返回未处理的视频帧。它主要用于分析/调试工具,或作为忽略输入数据的滤镜的来源。

这个pal75bars源生成一个颜色条模式,基于EBU PAL建议,颜色级别为75%。

这个pal100bars源生成一个颜色条模式,基于EBU PAL建议,颜色级别为100%。

这个rgbtestsrc源生成一个RGB测试模式,用于检测RGB与BGR问题。你应该看到红、绿和蓝色从上到下的条纹。

这个smptebars源生成一个颜色条模式,基于SMPTE工程指南EG 1-1990。

这个smptehdbars源生成一个颜色条模式,基于SMPTE RP 219-2002。

这个testsrc源生成一个测试视频模式,显示一个色彩模式、滚动渐变和时间戳。这主要用于测试目的。

这个testsrc2源类似于testsrc,但支持更多的像素格式,而不仅仅是rgb24。这允许它用于其他测试而不需要格式转换。

这个yuvtestsrc源生成一个YUV测试模式。你应该看到从上到下的Y, Cb和Cr条纹。

这些源接受以下参数:

level

指定Hald CLUT的等级,仅适用于haldclutsrc源。等级为N生成一个N*N*NxN*N*N像素的图片,作为3D查找表的身份矩阵。每个组件采用1/(N*N)尺度编码。

color, c

指定源的颜色,仅适用于color源。有关此选项的语法,请查看(ffmpeg-utils)手册中的“颜色”部分.

size, s

指定源视频的大小。有关此选项的语法,请查看(ffmpeg-utils)手册中的“视频大小”部分。 默认值为320x240.

此选项在allrgb, allyuvhaldclutsrc滤镜中不可用。

rate, r

指定生成视频的帧率,即每秒生成的帧数。必须是以下格式的字符串frame_rate_num/frame_rate_den,整数,浮点数或有效视频帧率缩写形式。默认值为"25"。

duration, d

设置生成视频的持续时间。请参阅(ffmpeg-utils)ffmpeg-utils(1)手册中的“持续时间”部分以获取接受的语法。

如果未指定,或表达的持续时间为负值,则视频将被视为永久生成。

由于帧率用作时间基准,包括最后一帧在内的所有帧都将具有其完整的持续时间。如果指定的持续时间不是帧持续时间的倍数,则将向上舍入。

sar

设置生成视频的采样像素宽高比。

alpha

指定背景的alpha值(不透明度),仅适用于testsrc2源。数值必须在0(完全透明)到255(完全不透明,默认值)之间。

decimals, n

设置时间戳中要显示的小数点位数,仅适用于testsrc源。

显示的时间戳值将对应原始时间戳值乘以指定值的10的幂。默认值为0。

type

设置色彩光谱的类型,仅适用于colorspectrum源。可以是以下值之一:

black
white
all
patch_size

设置单个颜色块的大小,仅适用于colorchart源。默认值为64x64.

preset

设置色彩检查器颜色预设,仅适用于colorchart源。

可用值为:

reference
skintones

默认值为reference.

45.12.1 示例

  • 生成一个持续时间为5.3秒、大小为176x144、帧率为每秒10帧的视频:
    testsrc=duration=5.3:size=qcif:rate=10
    
  • 以下图形描述将生成一个红色源,透明度为0.2,大小为"qcif",帧率为每秒10帧:
    color=c=red@0.2:s=qcif:r=10
    
  • 如果输入内容被忽略,nullsrc可以使用。以下命令通过使用geq滤镜来在亮度平面上生成噪点:
    nullsrc=s=256x256, geq=random(1)*255:128:128
    

45.12.2 命令

The color源支持以下命令:

c, color

设置创建图像的颜色。接受与对应color选项相同的语法。

45.13 openclsrc

使用OpenCL程序生成视频。

source

OpenCL程序源文件。

kernel

程序内核名称。

size, s

生成帧的大小。必须设置。

format

用于生成帧的像素格式。必须设置。

rate, r

每秒生成的帧数。默认值为“25”。

有关程序加载如何工作的详细信息,请参阅program_opencl滤镜。

示例程序:

  • 通过从输出图像中像素位置设置像素值来生成一个色彩渐变。(请注意,这将适用于所有像素格式,但生成的输出将有所不同。)
    __kernel void ramp(__write_only image2d_t dst,
                       unsigned int index)
    {
        int2 loc = (int2)(get_global_id(0), get_global_id(1));
    
        float4 val;
        val.xy = val.zw = convert_float2(loc) / convert_float2(get_image_dim(dst));
    
        write_imagef(dst, loc, val);
    }
    
  • 生成一个谢尔宾斯基地毯图案,每帧平移一个像素。
    __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);
    }
    

45.14 sierpinski

生成一个谢尔宾斯基地毯/三角形分形,并随机四处平移。

此源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请查看(ffmpeg-utils)ffmpeg-utils手册中的“视频大小”部分默认值为 "640x480"。

rate, r

设置帧率,以每秒帧数表示。默认值为 "25"。

seed

设置用于随机平移的种子。

jump

设置单次平移目标的最大跳跃距离。允许范围为 1 到 10000。

type

设置分形类型,可以是默认值carpet或者triangle.

45.15 zoneplate

生成一个zoneplate测试视频模式。

该源接受以下选项:

size, s

设置帧大小。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的 "视频大小" 部分。默认值为 "320x240"。

rate, r

设置帧率,以每秒帧数表示。默认值为 "25"。

duration, d

设置源视频的持续时间。参见(ffmpeg-utils)ffmpeg-utils(1)手册中的时间持续时间部分了解可接受的语法。

如果未指定,或者表达的持续时间为负值,视频将默认生成无限时长。

sar

设置源视频的样本纵横比。

precision

设置用于正弦计算的查找表的精度(以位为单位)。默认值为10。允许范围为4到16。

xo

设置输出信号的水平轴偏移量。默认值为0。

yo

设置输出信号的垂直轴偏移量。默认值为0。

to

设置输出信号的时间轴偏移量。默认值为0。

k0

设置零阶常数,添加到信号相位。默认值为0。

kx

设置一阶横轴相位因子倍增器。默认值为0。

ky

设置一阶纵轴相位因子倍增器。默认值为0。

kt

设置一阶时间轴相位因子倍增器。默认值为0。

kxt, kyt, kxy

设置空间轴和时间轴组合的相位因子倍增器。默认值为0。

kx2

设置二阶水平轴相位因子倍增器。默认值为0。

ky2

设置二阶垂直轴相位因子倍增器。默认值为0。

kt2

设置二阶时间轴相位因子倍增器。默认值为0。

ku

设置添加到最终相位以生成信号的色度蓝成分的常数。默认值为0。

kv

设置添加到最终相位以生成信号的色度红成分的常数。默认值为0。

45.15.1 命令

此源支持上述某些选项作为命令.

45.15.2 示例

  • 生成水平彩色正弦波:
    zoneplate=ku=512:kv=0:kt2=0:kx2=256:s=wvga:xo=-426:kt=11
    
  • 生成垂直彩色正弦波:
    zoneplate=ku=512:kv=0:kt2=0:ky2=156:s=wvga:yo=-240:kt=11
    
  • 生成圆形zoneplate:
    zoneplate=ku=512:kv=100:kt2=0:ky2=256:kx2=556:s=wvga:yo=0:kt=11
    

46 视频输出端

以下是当前可用的视频输出端的描述。

46.1 buffersink

缓冲视频帧,并使其在滤镜图形的末端可用。

此输出端主要用于编程使用,特别是通过libavfilter/buffersink.h或选项系统中定义的接口。

它接受一个指向AVBufferSinkContext结构的指针,该结构定义了传入缓冲区的数据格式,并作为不透明参数传递给avfilter_init_filter以完成初始化。

46.2 nullsink

空视频输出端:对输入视频绝对不作任何处理。它主要用作模板,并用于分析/调试工具。

47 多媒体滤镜

以下是当前可用的多媒体滤镜的描述。

47.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

设置显示的音频波持久时间(以帧数量表示)。

47.1.1 命令

滤镜支持上述某些选项作为命令.

47.2 abitscope

将输入音频转换为视频输出,显示音频比特波形。

该滤镜接受以下选项:

rate, r

设置帧率,以每秒帧数表示。默认值为 "25"。

size, s

为输出视频指定大小。有关此选项的语法,请参阅(ffmpeg-utils)ffmpeg-utils手册中的 "视频大小" 部分。。 默认值为1024x256.

colors

指定用空格或“|”分隔的颜色列表,这些颜色将用于绘制音频通道。无法识别或缺失的颜色将替换为白色。

mode, m

设置输出模式。可以是bars或者trace。默认值为bars.

47.3 adrawgraph

使用输入音频元数据绘制图形。

参见drawgraph

47.4 agraphmonitor

参见graphmonitor.

47.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.

47.6 阶段计量器

测量输入音频的相位,并以元数据形式导出lavfi.aphasemeter.phase, 表示当前音频帧的平均相位。默认情况下还可以生成视频输出。音频作为第一个输出直接通过。

如果音频具有不同的声道布局,将重新混合为立体声。相位值范围为[-1, 1]其中-1表示左声道和右声道完全反相,而1表示声道同相。

过滤器接受以下选项,均与其视频输出相关:

rate, r

设置输出帧率。默认值为25.

size, s

设置输出视频大小。有关此选项的语法,请检查(ffmpeg-utils)ffmpeg-utils 手册中的"视频大小"部分. 默认值为800x400.

rc
gc
bc

指定红、绿、蓝的对比度。默认值为2, 71. 允许范围是[0, 255].

mpc

设置用于绘制中值相位的颜色。如果颜色为none即默认值,则不会绘制中值相位值。

video

启用视频输出。默认情况下启用。

47.6.1 相位检测

过滤器还会检测立体声流中的反相和单声道序列。 当序列持续时间超过或等于设置的最短时,它会记录序列开始、结束和持续时间。

过滤器接受以下选项用于此检测:

phasing

启用单声道和反相检测。默认情况下禁用。

tolerance, t

设置用于单声道检测的相位容差,单位为振幅比率。默认值为0. 允许范围是[0, 1].

angle, a

设置用于反相检测的角度阈值,单位为度。默认值为170. 允许范围是[90, 180].

duration, d

设置单声道或反相持续时间直到通知,以秒为单位。默认值为2.

47.6.2 示例

  • 完整示例,使用ffmpeg检测 1 秒的单声道,容差为 0.001:
    ffmpeg -i stereo.wav -af aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001 -f null -
    

47.7 音频矢量示波器

将输入音频转换为视频输出,表示音频矢量 示波器。

该过滤器用于测量立体声音频流声道之间的差异。单声道信号,由相同的左右信号组成,结果是直的垂直线。任何立体声分离都表现为偏离这条线,形成利萨茹图形。 如果出现直线(或偏离它),但它是水平线,则表示左声道和右声道反相。

过滤器接受以下选项:

mode, m

设置矢量示波器模式。

可用值为:

lissajous

旋转 45 度的利萨茹图形。

lissajous_xy

与上相同,但未旋转。

polar

形状类似半圆。

默认值为 ‘lissajous’.

size, s

设置输出视频的大小。有关此选项的语法,请检查(ffmpeg-utils)ffmpeg-utils 手册中的"视频大小"部分. 默认值为400x400.

rate, r

设置输出帧率。默认值为25.

rc
gc
bc
ac

指定红、绿、蓝和 alpha 对比度。默认值为40, 160, 80255. 允许范围是[0, 255].

rf
gf
bf
af

指定红、绿、蓝和 alpha 的渐变。默认值为15, 10, 55. 允许范围是[0, 255].

zoom

设置缩放因子。默认值为1. 允许范围是[0, 10]. 值低于1将自动调整缩放因子到最大可能值。

draw

设置矢量示波器绘图模式。

可用值为:

dot

为每个样本绘制点。

line

在上一个样本和当前样本之间绘制线条。

aaline

在上一个样本和当前样本之间绘制抗锯齿线条。

默认值为 ‘dot’.

scale

指定音频样本的振幅比例。

可用值为:

lin

线性。

sqrt

平方根。

cbrt

立方根。

log

对数。

swap

交换左声道轴与右声道轴。

mirror

镜像轴。

none

无镜像。

x

仅镜像 x 轴。

y

仅镜像 y 轴。

xy

同时镜像两个轴。

47.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]'
    

47.7.2 命令

此筛选器支持上述所有选项作为命令,除去选项sizerate.

47.8 计时测试,计时基准测试

过滤器图的一部分基准测试。

筛选器接受以下选项:

action

开始或停止计时器。

可用值为:

start

获取当前时间,设置为帧元数据(使用键lavfi.bench.start_time),并将帧转发到下一个过滤器。

stop

获取当前时间并从lavfi.bench.start_time输入帧元数据中获取元数据以获得时间差。时间差、平均值、最大值和最小值(分别为t, avg, maxmin)随后打印出来。时间戳以秒为单位表示。

47.8.1 示例

  • 基准测试选择性颜色过滤器:
    bench=start,selectivecolor=reds=-.2 .12 -.49,bench=stop
    

47.9 拼接

将音频和视频流连接起来,一个接一个地拼接。

该过滤器适用于经过同步的音频和视频流片段。所有片段必须具有相同数量的每种类型的流,这也将是输出的流数量。

筛选器接受以下选项:

n

设置片段数。默认值为2。

v

设置输出视频流的数量,也即每个片段中的视频流数量。默认值为1。

a

设置输出音频流的数量,也即每个片段中的音频流数量。默认值为0。

unsafe

激活不安全模式:如果片段格式不同,不失败。

筛选器有v+a输出:首先是v视频输出,然后是a音频输出。

nx(v+a) 输入:首先是第一个片段的输入,按输出顺序排列,然后是第二个片段的输入,依此类推。

相关流的持续时间并不总是完全相同,原因包括编解码器的帧大小或不精确的编辑。因此,相关的同步流(例如视频及其音轨)应同时拼接。拼接过滤器将使用每个片段中最长流的持续时间(除最后一个外),并在必要时用静音填补较短的音频流。

为了使此过滤器正常工作,所有片段必须从时间戳0开始。

所有对应的流在所有片段中必须具有相同的参数;过滤系统将自动为视频流选择一个通用的像素格式,为音频流选择一个通用的样本格式、采样率和声道布局,但其他设置如分辨率必须由用户显式转换。

不同的帧率是可以接受的,但输出会导致可变帧率;请确保对输出文件进行配置以处理它。

47.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
    
  • 拼接两个部分,分别处理音频和视频,使用(amovie)来源,并调整分辨率:
    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]
    

    注意,如果在第一个文件中音频和视频流的持续时间不完全相同,则拼接时会发生不同步。

47.9.2 命令

此过滤器支持以下命令:

next

关闭当前片段并进入下一个片段

47.10 ebur128

EBU R128 扫描过滤器。此过滤器接受一个音频流并分析其响度级别。默认情况下,它以10Hz的频率记录一条消息,其中包括瞬时响度(标识为M)、短时响度(S)、整体响度(I)和响度范围(LRA).

过滤器只能分析样本格式为双精度浮点型的流。输入流将被转换为此规范(如果需要)。用户可能需要在此过滤器之后插入aformat和/或aresample过滤器以获得原始参数。

此过滤器还具有视频输出(请参见video选项)以及实时图表,用于观察响度变化。图形包含上述记录的消息,因此在设置此选项时不会再打印,除非设置了详细的日志记录。主要图形区域包含短时响度(3秒的分析),右侧的量表用于显示瞬时响度(400毫秒),但可以选择配置为显示短时响度(请参见gauge).

绿色区域标记了一个目标响度范围(默认值为-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。如果videometadata选项已设置,它将切换到verbose.

peak

设置峰值模式。

可用模式可以累积(该选项为flag类型)。可能的值包括:

none

禁用任何峰值模式(默认值)。

sample

启用样本峰值模式。

简单峰值模式,查找较高的样本值。它记录一条关于样本峰值的消息(标识为SPK).

true

启用真实峰值模式。

如果启用,峰值查找将在输入流的过采样版本上进行,以提高峰值准确性。它记录一条关于真实峰值和每帧真实峰值的消息(分别标识为TPK)和FTPK)。 此模式需要使用libswresample.

dualmono

将单声道输入文件视为“双单声道”。如果单声道文件用于立体声系统播放,其EBU R128测量将在人感上不正确。如果设置为true此选项将补偿该效果。 多声道输入文件不受此选项影响。

panlaw

设置用于双单声道文件测量的特定声像法则。 此参数是可选的,默认值为-3.01dB。

target

设置用于可视化中的相对零点的目标响度级别(单位:LUFS)。 此参数是可选的,默认值为EBU R128规范中规定的-23LUFS。然而,在线发布的素材可能更喜欢使用-16LUFS的水平 (例如,用于播客或视频平台)。

gauge

设置仪表显示的值。合法值为momentary和 sshortterm。默认情况下,将使用瞬时值,但在某些场景下,观察短期值可能更有用(例如,现场混音)。

scale

设置响度的显示刻度。合法参数为absolute(单位:LUFS) 或relative(单位:LU,相对于目标值)。此项仅影响视频输出,不影响摘要或连续日志输出。

integrated

受测综合响度的只读导出值(单位:LUFS)。

range

受测响度范围的只读导出值(单位:LU)。

lra_low

受测LRA低值的只读导出值(单位:LUFS)。

lra_high

受测LRA高值的只读导出值(单位:LUFS)。

sample_peak

受测采样峰值的只读导出值(单位:dBFS)。

true_peak

受测真峰值的只读导出值(单位:dBFS)。

47.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 -
    

47.11 插入交错, 音频交错

按时间顺序交错来自多个输入的帧。

interleave适用于视频输入,ainterleave适用于音频。

这些滤镜从多个输入读取帧,并将排队最久的帧发送到输出。

输入流必须有明确的、单调递增的帧时间戳值。

为了向输出提交一帧,这些滤镜需要为每个输入排队至少一帧,所以它们无法在某个输入尚未结束并且不会接收输入帧的情况下工作。

例如,考虑一个输入是select滤镜总是丢弃输入帧的情况。 该interleave滤镜会持续从该输入读取,但在输入没有发送结束信号之前,它将无法发送新的帧到输出。

此外,根据输入的同步情况,滤镜会在某个输入接收的帧数多于其他输入且队列已满时丢弃帧。

这些滤镜接受以下选项:

nb_inputs, n

设置不同输入的数量,默认为2。

duration

如何确定流结束。

longest

最长输入的时长。(默认)

shortest

最短输入的时长。

first

第一个输入的时长。

47.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
    

47.12 延迟, 音频延迟

测量滤镜延迟。

报告先前滤镜的滤镜延迟,音频滤镜以音频样本延迟数计算,视频滤镜以视频帧延迟数计算。

在输入流结束时,滤镜将报告前一个运行滤镜中测得的最小和最大延迟。

47.13 元数据, 音频元数据

操作帧的元数据。

此滤镜接受以下选项:

mode

设置滤镜的操作模式。

可以是以下之一:

select

如果同时设置valuekey,选择具有此类元数据的帧。如果仅设置key,选择每一个具有该元数据键的帧。

add

添加新元数据keyvalue。如果键已存在,则不做任何操作。

modify

修改已存在键的值。

delete

如果value被设置,仅删除具有此值的键。否则,删除键。如果key未设置,则删除帧中的所有元数据值。

print

如果找到元数据,打印键及其值。如果key未设置,则打印帧中所有可用的元数据值。

key

设置应用于所有模式的键。对于除printdelete.

value

之外的所有模式必须设置。modify模式中将使用的元数据值需通过此选项设置。这一选项对于add模式是必需的。

function

比较元数据值与value.

所使用的函数。

same_str

值被解释为字符串,当元数据值与value.

starts_with

相同时返回真。value值被解释为字符串,当元数据值以

less

选项字符串开头时返回真。value.

equal

值被解释为浮点数,当元数据值小于value时返回真。

greater

值被解释为浮点数,当value.

expr

与元数据值相等时返回真。expr值被解释为浮点数,当选项

ends_with

表达式计算为真时返回真。value值被解释为字符串,当元数据值以

expr

选项字符串结尾时返回真。function设置在expr设置为

VALUE1, FRAMEVAL

时使用的表达式。 此表达式通过eval API求值,并可包含以下常量:value元数据键的浮点表示值

VALUE2, USERVAL

用户通过value选项提供的value的浮点表示值。

file

如果在print模式中指定,则输出会写入指定的文件中。除了普通的文件名,还可以指定任何可写的URL。文件名“-”是标准输出的简写。如果file选项未设置,输出会以AV_LOG_INFO的日志级别写入日志。

direct

当输出通过文件URL写入时,在打印模式下减少缓冲。.

47.13.1 示例

  • 打印帧中所有具有键lavfi.signalstats.YDIF的元数据值,并且它们的值在0到1之间。
    signalstats,metadata=print:key=lavfi.signalstats.YDIF:value=0:function=expr:expr='between(VALUE1,0,1)'
    
  • 将静音检测输出打印到文件metadata.txt.
    silencedetect,ametadata=mode=print:file=metadata.txt
    
  • 通过文件描述符4,将所有元数据定向到管道。
    metadata=mode=print:file='pipe\:4'
    

47.14 权限, 音频权限

设置输出帧的读/写权限。

这些滤镜主要面向开发者,用于测试过滤器图中的直接路径。

筛选器接受以下选项:

mode

选择权限模式。

它接受以下值:

none

什么都不做。这是默认设置。

ro

将所有输出帧设置为只读。

rw

将所有输出帧设置为可直接写入。

toggle

如果帧是可写的则设置为只读,若是只读则设置为可写。

random

随机设置每个输出帧为只读或可写。

seed

随机模式设置种子,必须是一个介于0UINT32_MAX之间的整数。如果未指定或明确设置为-1,则筛选器将尽力尝试使用一个良好的随机种子。

注意:在权限筛选器和后续筛选器之间插入自动筛选器时,后续筛选器可能无法按预期接收到权限。在权限/权限筛选器之前插入格式音频格式筛选器可以避免此问题。

47.15 实时,实时音频

减缓过滤以大致匹配实时。

这些筛选器将暂停过滤一段可变时间,以使输出速率与输入时间戳匹配。它们类似于re选项到ffmpeg.

它们接受以下选项:

limit

暂停的时间限制。任何超过该时间的暂停将被视为时间戳不连续并重置计时器。默认值为2秒。

speed

处理的速度因子。值必须是大于零的浮点数。值大于1.0将导致比实时处理更快的速度,而值小于1.0则会减慢处理速度。限制会自动相应调整。默认值是1.0。

无法通过这些筛选器实现比可能的处理速度更快的速度。

47.15.1 命令

两个筛选器都支持上述所有选项作为命令.

47.16 分段,音频分段

将单个输入流拆分为多个流。

此筛选器执行与连接筛选器相反的操作。

segment作用于视频帧,asegment作用于音频样本。

此筛选器接受以下选项:

timestamps

由”|”分隔的输出分段时间戳。第一个段将从输入流的开头开始。最后一个段将运行至输入流的末尾。

frames, samples

分割段的确切帧/样本计数。

在所有情况下,每个段前加上’+’将使其相对于前一段进行设置。

47.16.1 示例

  • 将输入音频流拆分为三个输出音频流,第一个存储在起始输入音频流处,第二个存储在第60秒处,最后一个存储在输入音频流第150秒处:
    asegment=timestamps="60|150"
    

47.17 选择,音频选择

选择要传递到输出的帧。

此筛选器接受以下选项:

expr, e

设置表达式,对每个输入帧进行评估。

如果表达式求值为零,则该帧会被丢弃。

如果评估结果为负数或NaN,则帧被发送到第一个输出;否则它被发送到索引为ceil(val)-1的输出,假设输入索引从0开始。

例如值1.2对应于索引为ceil(1.2)-1 = 2-1 = 1的输出,即第二个输出。

outputs, n

设置输出数量。选择的帧要发送到哪个输出取决于评估结果。默认值为1。

表达式可以包含以下常量:

n

从0开始的过滤帧的(连续)编号。

selected_n

从0开始的选择帧的(连续)编号。

prev_selected_n

最后选择帧的连续编号。如果未定义,则为NAN。

TB

输入时间戳的时间基。

pts

过滤帧的PTS(呈现时间戳),以时间基单位表示。如果未定义,则为NAN。

t

过滤帧的PTS,以秒表示。如果未定义,则为NAN。

prev_pts

先前过滤帧的PTS。如果未定义,则为NAN。

prev_selected_pts

最近过滤帧的PTS。如果未定义,则为NAN。

prev_selected_t

最近选择帧的PTS,以秒表示。如果未定义,则为NAN。

start_pts

流中第一个不是NAN的PTS。如果未找到,则保持为NAN。

start_t

流中第一个不是NAN的PTS,以秒表示。如果未找到,则保持为NAN。

pict_type (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

连接解复用器可以通过设置起点和终点选择连接输入文件的一部分,但输出包可能不完全包含在所选间隔内。通过使用此变量,可以跳过连接解复用器生成的未完全包含在所选间隔中的帧。

这是通过将帧PTS与lavf.concat.start_timelavf.concat.duration包元数据值进行比较而实现的,这些值也存在于解码帧中。

变量concatdec_select为-1,如果帧PTS至少为start_time 并且持续时间元数据丢失或者帧PTS小于 start_time + duration;否则为0。如果start_time元数据丢失,则为NaN。

这基本上意味着,如果输入帧的PTS处于连接解复用器设置的间隔内,则该帧会被选中。

iw (video only)

表示输入视频帧的宽度。

ih (video only)

表示输入视频帧的高度。

view (video only)

多视图视频的视图ID。

选择表达式的默认值为"1"。

47.17.1 示例

  • 选择输入中的所有帧:
    select
    

    上面的示例与以下内容相同:

    select=1
    
  • 跳过所有帧:
    select=0
    
  • 仅选择关键帧:
    select='eq(pict_type\,I)'
    
  • 每100帧选择一个帧:
    select='not(mod(n\,100))'
    
  • 仅选择包含在10-20时间间隔中的帧:
    select=between(t\,10\,20)
    
  • 仅选择包含在10-20时间间隔内的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
    

47.18 sendcmd,asendcmd

将命令发送到滤镜图中的滤镜。

这些滤镜会读取命令并将其发送到滤镜图中的其他滤镜。

sendcmd必须插入在两个视频滤镜之间,asendcmd必须插入在两个音频滤镜之间,但除此之外,其行为相同。

可以通过滤镜参数中的commands选项,或通过文件中指定的filename选项的方式来提供命令的具体说明。

这些滤镜接受以下选项:

commands, c

设置要读取并发送到其他滤镜的命令。

filename, f

设置要读取并发送到其他滤镜的命令的文件名。

47.18.1 命令语法

命令的说明由一系列间隔说明组成,其中包含了当与该间隔相关的特定事件发生时要执行的命令列表。发生的事件通常是当前帧时间进入或离开给定时间间隔。

间隔通过以下语法指定:

开始[-结束] 命令;

时间间隔由开始结束时间指定。结束是可选的,默认为最大时间。

当帧时间包含在间隔 [开始, 结束) 中时,当前帧时间被认为在指定间隔内,即当时间大于或等于开始且小于结束.

命令由与该间隔相关的一系列一个或多个命令说明组成,命令之间用“,”分隔。命令说明的语法如下所示:

[标记] 目标 命令 参数

标记是可选的,指定与时间间隔相关的启用发送指定命令的事件类型。必须是一个由“+”或“|”分隔的非空标识符标记序列,并包裹在“[”和“]”之间。

以下标记被识别:

enter

当当前帧的时间戳进入指定间隔时发送命令。换句话说,当前一帧时间戳不在给定间隔内,而当前帧时间戳在时,发送命令。

leave

当当前帧的时间戳离开指定间隔时发送命令。换句话说,当前一帧时间戳在给定间隔内,而当前帧时间戳不在时,发送命令。

expr

发送的命令参数将被解析为表达式,表达式结果作为参数.

表达式通过 eval API 进行解析,表达式可以包含以下常量:

POS

帧在文件中的原始位置,如果当前帧位置未定义,则未定义。已弃用,请勿使用。

PTS

输入中的显示时间戳。

N

视频或音频的输入帧计数,从0开始。

T

当前帧的时间(单位:秒)。

TS

当前命令间隔的开始时间(单位:秒)。

TE

当前命令间隔的结束时间(单位:秒)。

TI

当前命令间隔的插值时间,TI = (T - TS) / (TE - TS)。

W

视频帧宽度。

H

视频帧高度。

如果标记未指定,默认值默认为[enter]

目标指定命令的目标,通常是滤镜类的名称或某个具体滤镜实例的名称。

命令指定目标滤镜的命令名称。

参数是可选的,指定给定命令.

的可选参数列表。# until the end of line, are ignored and can be used to annotate comments.

以下是命令说明语法的简化 BNF 描述:

命令标记  ::= "enter" | "leave"
命令标记组 ::= 命令标记 [(+|"|")命令标记]
命令       ::= ["[" 命令标记组 "]"] 目标 命令 [参数]
命令组      ::= 命令 [,命令组]
区间      ::= 开始[-结束] 命令组
区间组     ::= 区间[;区间组]

47.18.2 示例

  • 在第4秒指定音频的速度变化:
    asendcmd=c='4.0 atempo tempo 1.5',atempo
    
  • 定位到特定的滤镜实例:
    asendcmd=c='4.0 atempo@my tempo 1.5',atempo@my
    
  • 在文件中指定drawtext和hue命令的列表。
    # show text in the interval 5-10
    5.0-10.0 [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=hello world',
             [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=';
    
    # desaturate the image in the interval 15-20
    15.0-20.0 [enter] hue s 0,
              [enter] drawtext reinit 'fontfile=FreeSerif.ttf:text=nocolor',
              [leave] hue s 1,
              [leave] drawtext reinit 'fontfile=FreeSerif.ttf:text=color';
    
    # apply an exponential saturation fade-out effect, starting from time 25
    25 [enter] hue s exp(25-t)
    

    一个允许读取和处理上述命令列表的滤镜图表 存储在文件中test.cmd可以通过以下方式指定:

    sendcmd=f=test.cmd,drawtext=fontfile=FreeSerif.ttf:text='',hue
    

47.19 setpts, asetpts

更改输入帧的PTS(呈现时间戳)。

setpts作用于视频帧,asetpts作用于音频帧。

此过滤器接受以下选项:

expr

用于计算每帧时间戳的表达式。

strip_fps (video only)

一个布尔选项,决定是否取消原始帧率元数据。 若设置为true,请注意,如果输出发送到固定帧率的复用器,则应显式指定合理的帧率。 默认值为false.

此表达式通过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

命令应用后的第一帧时间,或没有命令的第一帧时间。

47.19.1 示例

  • 从零开始计数PTS
    setpts=PTS-STARTPTS
    
  • 应用快进效果:
    setpts=0.5*PTS
    
  • 应用慢动作效果:
    setpts=2.0*PTS
    
  • 设置固定的每秒25帧速率:
    setpts=N/(25*TB)
    
  • 应用±100 TB单位的随机抖动效果:
    setpts=PTS+randomi(0, -100\,100)
    
  • 设置固定的25fps,添加一些抖动:
    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
    

47.19.2 命令

两个过滤器均支持所有上述选项作为命令.

47.20 setrange

为输出视频帧强制颜色范围。

setrange过滤器标记输出帧的颜色范围属性。 它不改变输入帧,仅设置相应属性, 影响后续滤镜如何处理该帧。

此滤镜接受以下选项:

range

可用值为:

auto

保持相同的颜色范围属性。

unspecified, unknown

未指定颜色范围属性。

limited, tv, mpeg

设置颜色范围为有限。

full, pc, jpeg

设置颜色范围为完全。

47.21 settb, asettb

设置用于输出帧时间戳的时间基。这主要用于测试时间基配置。

它接受以下参数:

expr, tb

评估为输出时间基的表达式。

的值是一个表示有理数的算术表达式。该表达式可以包含常量 "AVTB"(默认时间基)、"intb"(输入时间基)和"sr"(采样率,仅音频)。 默认值为"intb"。tb is an arithmetic expression representing a rational. The expression can contain the constants "AVTB" (the default timebase), "intb" (the input timebase) and "sr" (the sample rate, audio only). Default value is "intb".

47.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
    

47.22 showcqt

将输入音频转换为视频输出,表示通过Brown-Puckette常Q变换算法(直接频域系数计算)的对数频谱(但实际变换并不是真正的常Q,Q因子实际是可变/受限的),带有音乐色调刻度,从E0到D#10。

该滤镜接受以下选项:

size, s

指定输出的视频大小。必须为偶数。有关此选项的语法, 请参考在ffmpeg-utils手册的"视频大小"部分。 默认值为1920x1080.

fps, rate, r

设置输出帧率。默认值为25.

bar_h

设置条形图高度。必须为偶数。默认值为-1它会自动计算条形图高度。

axis_h

设置轴高度。必须为偶数。默认值为-1它会自动计算轴高度。

sono_h

设置声谱图高度。必须为偶数。默认值为-1它会自动计算声谱图高度。

fullhd

设置全高清分辨率。此选项已弃用,使用大小, s代替。默认值为1.

sono_v, volume

指定声谱图音量表达式。它可以包含变量:

bar_v

条形_v评估后的表达式

frequency, freq, f

评估的频率

timeclamp, tc

的值时间限制选项

和函数:

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

的值时间钳制选项

和函数:

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

的值时间钳制选项。

默认值是384*tc/(384+tc*f).

count

指定每个视频帧的变换次数。默认值是6。 可接受的范围是[1, 30].

fcount

指定每个像素的变换次数。默认值是0,其会自动计算。可接受范围是[0, 10].

fontfile

指定用于 freetype 绘制坐标轴的字体文件。如果未指定,则使用嵌入字体。请注意,使用字体文件或嵌入字体绘图未实现自定义basefreqendfreq,请使用axisfile选项代替。

font

指定 fontconfig 模式。这优先级低于fontfile。模式中的:可能会被替换为|以避免不必要的转义。

fontcolor

指定字体颜色表达式。这是一个算术表达式,应返回整数值 0xRRGGBB。它可以包含变量:

frequency, freq, f

评估的频率

timeclamp, tc

的值时间钳制选项

和函数:

midi(f)

频率 f 的 MIDI 数字,一些 MIDI 数字:E0(16), C1(24), C2(36), A4(69)

r(x), g(x), b(x)

强度 x 的红、绿和蓝值。

默认值是st(0, (midi(f)-59.5)/12); st(1, if(between(ld(0),0,1), 0.5-0.5*cos(2*PI*ld(0)), 0)); r(1-ld(1)) + b(ld(1)).

axisfile

指定用于绘制坐标轴的图片文件。此选项会覆盖fontfilefontcolor选项。

axis, text

启用/禁用在坐标轴上绘制文本。如果设置为0,则禁用坐标轴绘图,并忽略fontfileaxisfile选项。 默认值是1.

csp

设置色彩空间。可接受的值是:

unspecified

未指定(默认值)

bt709

BT.709

fcc

FCC

bt470bg

BT.470BG 或 BT.601-6 625

smpte170m

SMPTE-170M 或 BT.601-6 525

smpte240m

SMPTE-240M

bt2020ncl

BT.2020 非恒定亮度

cscheme

设置声谱图颜色方案。这是一个浮点值列表,格式为left_r|left_g|left_b|right_r|right_g|right_b。 默认值是1|0.5|0|0|0.5|1.

47.22.1 示例

  • 播放音频同时显示频谱:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt [out0]'
    
  • 与上述相同,但帧速为 30 fps:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=fps=30:count=5 [out0]'
    
  • 以 1280x720 播放:
    ffplay -f lavfi 'amovie=a.mp3, asplit [a][out1]; [a] showcqt=s=1280x720:count=4 [out0]'
    
  • 禁用声谱图显示:
    sono_h=0
    
  • A1 及其谐波:A1、A2、(接近)E3、A3:
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt [out0]'
    
  • 与上述相同,但频率域精确度更高:
    ffplay -f lavfi 'aevalsrc=0.1*sin(2*PI*55*t)+0.1*sin(4*PI*55*t)+0.1*sin(6*PI*55*t)+0.1*sin(8*PI*55*t),
                     asplit[a][out1]; [a] showcqt=timeclamp=0.5 [out0]'
    
  • 自定义音量:
    bar_v=10:sono_v=bar_v*a_weighting(f)
    
  • 自定义伽马,现在光谱与振幅线性相关。
    bar_g=2:sono_g=2
    
  • 自定义 tlength 方程:
    tc=0.33:tlength='st(0,0.17); 384*tc / (384 / ld(0) + tc*f /(1-ld(0))) + 384*tc / (tc*f / ld(0) + 384 /(1-ld(0)))'
    
  • 自定义字体颜色和字体文件,将 C 音符着色为绿色,将其他着色为蓝色:
    fontcolor='if(mod(floor(midi(f)+0.5),12), 0x0000FF, g(1))':fontfile=myfont.ttf
    
  • 使用 fontconfig 自定义字体:
    font='Courier New,Monospace,mono|bold'
    
  • 具有自定义坐标轴的自定义频率范围并使用图片文件:
    axisfile=myaxis.png:basefreq=40:endfreq=10000
    

47.23 showcwt

将输入音频转换为表示频率光谱的输出视频,使用连续小波变换和 Morlet 小波。

该过滤器接受以下选项:

size, s

指定输出的视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"章节,位于 ffmpeg-utils 手册。 默认值是640x512.

rate, r

设置输出帧速率。默认值是25.

scale

设置使用的频率刻度。允许的值是:

linear
log
bark
mel
erbs
sqrt
cbrt
qdrt
fm

默认值是linear.

iscale

设置使用的强度比例。允许的值为:

linear
log
sqrt
cbrt
qdrt

默认值是log.

min

设置输出中将使用的最低频率。 默认为20Hz。

max

设置输出中将使用的最高频率。 默认为20000Hz。实际频率上限取决于输入音频的采样率,并且当设置值超过奈奎斯特频率时会对该值强制执行。

imin

设置输出中将使用的最低强度。

imax

设置输出中将使用的最高强度。

logb

设置在将计算出的幅度值映射到像素值时,亮度强度的对数基数。 允许范围是从01。 默认值为0.0001.

deviation

设置频率偏移。 低于1的值更倾向于频率,高于1的值更倾向于时间。 允许范围是从010。 默认值为1.

pps

设置每秒单行输出的像素数。 允许范围是从11024。 默认值为64.

mode

设置输出视觉模式。允许的值为:

magnitude

显示幅度。

phase

仅显示相位。

magphase

显示幅度和相位的组合。 幅度映射到亮度,相位映射到颜色。

channel

为每个通道幅度显示唯一颜色。

stereo

为立体声差异显示唯一颜色。

默认值是magnitude.

slide

设置输出滑动方法。允许的值为:

replace
scroll
frame
direction

设置输出滑动方法的方向。允许的值为:

lr

方向从左到右。

rl

方向从右到左。

ud

方向从上到下。

du

方向从下到上。

bar

设置条形图显示与显示大小的比例。默认值为0。

rotation

设置颜色旋转,必须在[-1.0, 1.0]范围内。 默认值为0.

47.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

设置处理音频时使用的通道。默认情况下处理所有通道。

47.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

设置输出帧率。

47.26 showspectrum

将输入音频转换为视频输出,表示音频频率谱。

过滤器接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请查看(ffmpeg-utils)"视频大小"部分的ffmpeg-utils手册。 默认值为640x512.

slide

指定频谱应该如何沿窗口滑动。

接受以下值:

replace

样本到达右侧后重新从左侧开始

scroll

样本从右向左滚动

fullframe

仅当样本达到正确的值时才生成帧

rscroll

样本从左向右滚动

lreplace

样本到达左侧后重新从右侧开始

默认值为replace.

mode

指定显示模式。

接受以下值:

combined

所有通道显示在同一行

separate

所有通道显示在单独的行

默认值为‘combined’.

color

指定显示颜色模式。

接受以下值:

channel

每个通道用不同的颜色显示

intensity

每个通道使用相同的配色方案显示

rainbow

每个通道使用彩虹配色方案显示

moreland

每个通道使用莫兰配色方案显示

nebulae

每个通道使用星云配色方案显示

fire

每个通道使用火焰配色方案显示

fiery

每个通道使用炽热配色方案显示

fruit

每个通道使用水果配色方案显示

cool

每个通道使用冷色配色方案显示

magma

每个通道使用岩浆配色方案显示

green

每个通道使用绿色配色方案显示

viridis

每个通道使用维里迪斯配色方案显示

plasma

每个通道使用等离子配色方案显示

cividis

每个通道使用西维迪斯配色方案显示

terrain

每个通道使用地形配色方案显示

默认值为‘channel’.

scale

指定用于计算强度颜色值的比例。

接受以下值:

lin

线性

sqrt

平方根,默认

cbrt

立方根

log

对数

4thrt

4次根

5thrt

5次根

默认值为‘sqrt’.

fscale

指定频率比例。

接受以下值:

lin

线性

log

对数

默认值为‘lin’.

saturation

设置用于显示颜色的饱和度修饰器。负值提供替代色彩方案。0完全没有饱和度。 饱和度必须在[-10.0, 10.0]范围内。 默认值为1.

win_func

设置窗口函数。

接受以下值:

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值为hann.

orientation

设置时间轴相对于频率轴的方向。可以是verticalhorizontal。默认为vertical.

overlap

设置窗口重叠比例。默认值为0。 当值为1时,重叠设置为当前使用的特定窗口函数的推荐大小。

gain

设置用于计算强度颜色值的增益比例。 默认值为1.

data

设置显示的数据类型。可以是magnitude,默认值或phase, 或未包裹的相位:uphase.

rotation

设置颜色旋转,必须在[-1.0, 1.0]范围内。 默认值为0.

start

设置显示频谱图的起始频率。默认值为0.

stop

设置显示频谱图的停止频率。默认值为0.

fps

设置帧率上限。默认值为auto,无限制。

legend

绘制时间、频率轴及图例。默认禁用。

drange

设置用于计算强度颜色值的动态范围。默认值为120 dBFS。 允许范围为10到200。

limit

设置输入音频样本音量的上限,以dBFS为单位。默认值为0 dBFS。 允许范围为-100到100。

opacity

使用带有alpha组件的像素格式输出时设置不透明强度。

用法与showwaves滤镜非常相似;请参阅该部分中的示例。

47.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]'
    

47.27 showspectrumpic

将输入音频转换为一个视频帧,表示音频频谱。

滤镜接受以下选项:

size, s

为输出指定视频尺寸。有关此选项的语法,请查看(ffmpeg-utils)"视频尺寸"部分的ffmpeg-utils手册。 默认值为4096x2048.

mode

指定显示模式。

接受以下值:

combined

所有通道显示在同一行

separate

所有通道显示在单独的行

默认值为‘combined’.

color

指定显示颜色模式。

接受以下值:

channel

每个通道用不同的颜色显示

intensity

每个通道使用相同的配色方案显示

rainbow

每个通道使用彩虹配色方案显示

moreland

每个通道使用莫兰配色方案显示

nebulae

每个通道使用星云配色方案显示

fire

每个通道使用火焰配色方案显示

fiery

每个通道使用炽热配色方案显示

fruit

每个通道使用水果配色方案显示

cool

每个通道使用冷色配色方案显示

magma

每个通道使用岩浆配色方案显示

green

每个通道使用绿色配色方案显示

viridis

每个通道使用维里迪斯配色方案显示

plasma

每个通道使用等离子配色方案显示

cividis

每个通道使用西维迪斯配色方案显示

terrain

每个通道使用地形配色方案显示

默认值为‘intensity’.

scale

指定用于计算强度颜色值的比例。

接受以下值:

lin

线性

sqrt

平方根, 默认

cbrt

立方根

log

对数

4thrt

四次方根

5thrt

五次方根

默认值是‘log’.

fscale

指定频率缩放比例。

该选项接受以下值:

lin

线性

log

对数

默认值是‘lin’.

saturation

设置显示颜色的饱和度修饰符。负值提供备用的颜色方案。0不饱和。饱和度必须在[-10.0, 10.0]范围内。默认值是1.

win_func

设置窗口函数。

它接受以下值:

rect
bartlett
hann
hanning
hamming
blackman
welch
flattop
bharris
bnuttall
bhann
sine
nuttall
lanczos
gauss
tukey
dolph
cauchy
parzen
poisson
bohman
kaiser

默认值是hann.

orientation

设置时间与频率轴的方向,可以是verticalhorizontal。默认值是vertical.

gain

为计算强度颜色值设置缩放增益。默认值是1.

legend

绘制时间和频率轴及图例。默认启用。

rotation

设置颜色旋转,值范围为[-1.0, 1.0]。默认值是0.

start

设置显示频谱的起始频率。默认值是0.

stop

设置显示频谱的结束频率。默认值是0.

drange

设置计算强度颜色值使用的动态范围。默认是120 dBFS。 允许范围为10到200。

limit

设置输入音频样本音量的上限(单位为dBFS)。默认是0 dBFS。 允许范围为-100到100。

opacity

设置使用带有alpha分量的像素格式输出时的不透明度强度。

47.27.1 示例

  • 提取整个音轨的音频频谱图 以1024x1024图片形式表示,使用ffmpeg:
    ffmpeg -i audio.flac -lavfi showspectrumpic=s=1024x1024 spectrogram.png
    

47.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

47.29 showwaves

将输入音频转换为视频输出,表示样本波形。

该滤镜接受以下选项:

size, s

指定输出的视频大小。有关此选项的语法,请查看(ffmpeg-utils) "视频大小"部分,在ffmpeg-utils手册中。 默认值是600x240.

mode

设置显示模式。

可用值为:

point

为每个样本绘制一个点。

line

为每个样本绘制一条垂直线。

p2p

为每个样本绘制一个点,并在它们之间绘制一条线。

cline

为每个样本绘制一条居中的垂直线。

默认值是point.

n

设置打印在同一列上的样本数量。 较大的值将降低帧率。必须是正整数。此选项只能在rate未明确指定时设置。

rate, r

设置(近似)输出帧率。这是通过设置选项n。默认值是"25"。

split_channels

设置是否单独绘制或重叠绘制通道。默认值是0。

colors

设置由'|'分隔的颜色,这些颜色将用于绘制每个通道。

scale

设置幅度比例。

可用值为:

lin

线性。

log

对数。

sqrt

平方根。

cbrt

立方根。

默认为线性。

draw

设置绘制模式。这主要用于设置高n.

可用值为:

scale

为每个绘制的样本缩放像素值。

full

直接绘制每个样本。

默认值是scale.

47.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]
    

47.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.

47.30.1 示例

  • 使用生成整个音频轨迹波形的通道分离表示的1024x800图片ffmpeg:
    ffmpeg -i audio.flac -lavfi showwavespic=split_channels=1:s=1024x800 waveform.png
    

47.31 sidedata, asidedata

删除帧附加数据,或者基于帧附加数据选择帧。

此滤镜接受以下选项:

mode

设置滤镜的工作模式。

可选项包括:

select

选择每个带有附加数据的帧type.

delete

删除type的附加数据。如果type未设置,则删除帧中的所有附加数据。

type

设置用于所有模式的附加数据类型。必须为select模式设置。关于帧附加数据类型的列表,请参阅AVFrameSideDataType枚举libavutil/frame.h。例如,要选择AV_FRAME_DATA_PANSCAN附加数据,你必须指定PANSCAN.

47.32 spectrumsynth

从两个输入视频频谱生成音频,第一个输入流表示跨时间的幅度,第二个表示跨时间的相位。该滤镜将视频中显示的频域转换回音频输出所呈现的时域。

此滤镜主要用于逆转换已处理的showspectrum滤镜输出,但也可以从其他频谱图合成声音。但在这种情况下,如果没有相位数据,结果会很差,因为这种情况下相位数据需要重新创建,通常只是从随机噪声中重新创建。为获得最佳结果,仅使用灰度输出(channel颜色模式在showspectrum滤镜)和log比例用于幅度视频以及lin比例用于相位视频。对于第二个视频生成相位,请使用data选项。输入视频通常应使用fullframe滑动模式,因为这可以节省解码视频所需的资源。

该滤镜接受以下选项:

sample_rate

指定输出音频的采样率,生成频谱时的音频采样率可能有所不同。

channels

设置输入视频频谱中表示的通道数量。

scale

设置生成幅度输入频谱时使用的比例。可以为linlog。默认是log.

slide

设置生成输入频谱时使用的滑动模式。可以为replace, scroll, fullframerscroll。 默认是fullframe.

win_func

设置用于重新合成的窗口函数。

overlap

设置窗口重叠。在范围[0, 1]内。默认是1,这意味着将为选定的窗口函数选择最佳重叠。

orientation

设置输入视频的方向。可以是verticalhorizontal。 默认是vertical.

47.32.1 示例

  • 首先从音频创建幅度和相位视频,假设音频是立体声,采样率为44100,然后将视频频谱重新合成为音频:
    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
    

47.33 split, asplit

将输入分成多个相同的输出。

asplit适用于音频输入,split适用于视频。

滤镜接受一个参数,用于指定输出数量。如果未指定,则默认为2。

47.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
    

47.34 zmq, azmq

接收通过libzmq客户端发送的命令,并将其转发到滤镜网络中的滤镜。

zmqazmq作为传递滤镜运行。zmq必须插入到两个视频滤镜之间,azmq插入到两个音频滤镜之间。两者都可以向任何滤镜类型发送消息。

要启用这些滤镜,你需要安装libzmq库和头文件,并使用以下配置FFmpeg:--enable-libzmq.

关于libzmq的更多信息,可以查看:http://www.zeromq.org/

zmqazmq滤镜作为libzmq服务器工作,通过定义的网络接口接收消息,该网络接口由bind_address(或缩写"b")选项定义。 此选项的默认值是tcp://localhost:5555。你可能需要根据需要修改此值,但不要忘记转义任何‘:’字符(参见滤镜网络转义).

接收的消息格式必须为:

目标 命令 [参数]

目标指定命令的目标,通常是滤镜类的名称或特定滤镜实例的名称。默认滤镜实例名称使用模式‘Parsed_<filter_name>_<index>’, 但你可以通过使用‘filter_name@id语法 (请参见过滤图语法).

命令指定目标过滤器的命令名称。

参数是可选的,用于指定给定命令.

接收到消息后,消息会被处理并将相应的命令注入到过滤图中。根据结果,过滤器将采用以下格式向客户端发送回复:

错误代码 错误原因
消息

消息是可选的。

47.34.1 示例

查看tools/zmqsend用于发送由这些过滤器处理的命令的 ZMQ 客户端示例。

考虑由以下过滤图生成的示例ffplay。 在此示例中,最后一个叠加过滤器有一个实例名。所有其他过滤器将有默认实例名。

ffplay -dumpgraph 1 -f lavfi "
color=s=100x100:c=red  [l];
color=s=100x100:c=blue [r];
nullsrc=s=200x100, zmq [bg];
[bg][l]   overlay     [bg+l];
[bg+l][r] overlay@my=x=100 "

要更改视频左侧的颜色,可以使用以下命令:

echo Parsed_color_0 c yellow | tools/zmqsend

要更改右侧:

echo Parsed_color_1 c pink | tools/zmqsend

要更改右侧的位置:

echo overlay@my x 150 | tools/zmqsend

48 多媒体源

以下是当前可用多媒体源的描述。

48.1 音乐

这与视频源相同,只是它默认选择音频流。

48.2 音视频同步测试

生成音视频同步测试。

生成的流会定期显示闪烁的视频帧并发出音频哔声。 可用于检查音视频同步问题。

它接受以下选项:

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

设置前景色/背景色/附加颜色。

48.2.1 命令

该源支持某些以上选项作为命令.

48.3 视频

从电影容器读取音频和/或视频流。

它接受以下参数:

filename

要读取的资源名称(不一定是文件;它也可以是通过某些协议访问的设备或流)。

format_name, f

指定读取电影所假定的格式,可以是容器或输入设备的名称。如果未指定,格式将根据视频名称或通过探测来猜测。

seek_point, sp

指定以秒为单位的查找点。帧将从此查找点开始输出。该参数用av_strtod计算,因此数值可能带一个 SI 后缀。默认值为 "0"。

streams, s

指定要读取的流。可以指定多个流,用 "+" 分隔。源将按相同顺序具有这么多输出。语法在(ffmpeg) "流说明符" 部分中进行了解释。两个特殊名称 "dv" 和 "da" 分别指定默认(最适合的)视频和音频流。默认是 "dv",如果过滤器被调用为 "音乐",则为 "da"。

stream_index, si

指定要读取的视频流的索引。如果值为 -1,将自动选择最适合的视频流。默认值为 "-1"。已弃用。如果过滤器被称为 "音乐",则会选择音频而不是视频。

loop

指定按顺序将流读取多少次。如果值为 0,流将无限循环。 默认值为 "1"。

请注意,当电影循环时,源时间戳不会改变,因此它会生成非单调增加的时间戳。

discontinuity

指定帧之间的时间差,如果大于该值,则时间点会被视为时间戳不连续,由调整后续时间戳来修复。

dec_threads

指定用于解码的线程数。

format_opts

为打开的文件指定格式选项。格式选项可以指定为=对,用“:”分隔。以下示例展示了如何添加协议白名单和协议黑名单选项:

ffplay -f lavfi
"movie=filename='1.sdp':format_opts='protocol_whitelist=file,rtp,udp\:protocol_blacklist=http'"

它允许在过滤图的主输入上叠加第二个视频,如以下图所示:

input -----------> deltapts0 --> overlay --> output
                                    ^
                                    |
movie --> scale--> deltapts1 -------+

48.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" 的垫,音频连接到名为 "audio" 的垫:
    movie=dvd.vob:s=v:0+#0x81 [video] [audio]
    

48.3.2 命令

电影和音乐支持以下命令:

seek

使用“av_seek_frame”执行查找。 语法为:seek流索引|时间戳|标志

  • 流索引:如果流索引为 -1,则会选择默认流,并且时间戳将从 AV_TIME_BASE 单位自动转换为流特定的 time_base。
  • 时间戳: 时间戳以 AVStream.time_base 单位表示 或如果未指定流,以 AV_TIME_BASE 单位表示。
  • 标志:选择方向和查找模式的标志。
get_duration

以 AV_TIME_BASE 单位获取电影的持续时间。

49 外部库

FFmpeg 可以与许多外部库链接以添加对更多格式的支持。默认情况下不使用这些库,其使用必须通过传递适当的标志明确请求./configure.

49.1 开放媒体联盟(AOM)

FFmpeg 可以使用 AOM 库来进行 AV1 解码和编码。

访问http://aomedia.org/并按照说明安装库。然后传递--enable-libaom到配置以启用它。

49.2 AMD AMF/VCE

FFmpeg 可以使用 AMD 高级媒体框架(AMF)库,利用硬件上的视频编码引擎 (VCE) 加速 H.264 和 HEVC(仅限 Windows)编码。

要启用支持,您必须从https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git.

获取 AMF 框架头文件(版本 1.4.9+)。AMF/在系统包含路径中创建一个AMF/amf/public/include/目录,并将内容复制到该目录中。 然后用--enable-amf.

配置 FFmpeg。初始化 amf 编码器的顺序如下: 1)尝试通过 dx11 初始化(仅限 Windows) 2)尝试通过 dx9 初始化(仅限 Windows) 3)尝试通过 vulkan 初始化

在Linux上使用h.264(AMD VCE)编码器需要安装amdgru-pro版本19.20+和amf-amdgpu-pro包(amdgru-pro包含但不会自动安装)。

该驱动程序可以通过官方AMD驱动程序存档中的amdgpu-pro-install脚本安装。

49.3 AviSynth

FFmpeg可以将AviSynth脚本作为输入进行读取。要启用支持,请在安装头文件后传递--enable-avisynth到配置中,这些头文件由AviSynth+提供。AviSynth+可以配置为仅安装头文件,方式是通过传递-DHEADERS_ONLY:bool=on给标准的基于CMake的构建系统,或使用提供的GNUmakefile.

在Windows上,支持的AviSynth变种为AviSynth 2.6 RC1或更高版本用于32位构建,以及AviSynth+ r1718或更高版本支持32位和64位构建。

在Linux、macOS和BSD下,唯一支持的AviSynth变种是AviSynth+,版本至少为3.5。

2016年,AviSynth+添加了对使用GCC构建的支持。然而,由于Windows调用约定的特殊性,使用32位GCC构建的AviSynth+与典型的32位FFmpeg构建兼容性不佳。

默认情况下,FFmpeg假定与使用MSVC构建的32位AviSynth+兼容,因为这是最广泛使用并具有稳定构建的配置。用户可以通过传递-DAVSC_WIN32_GCC32--extra-cflags配置FFmpeg时启用对32位GCC构建的AviSynth+支持。

64位FFmpeg构建不受影响,可以在不使用任何特殊标志的情况下使用MSVC或GCC构建的AviSynth+。

AviSynth(+)是动态加载的。分发者可以通过构建FFmpeg,并添加--enable-avisynth选项,生成的二进制文件与最终用户是否安装了AviSynth无关。如果最终用户希望使用AviSynth脚本,他们可以安装AviSynth(+),这样的FFmpeg可以找到并使用它来打开脚本。

49.4 Chromaprint

FFmpeg可以使用Chromaprint库生成音频指纹。传递--enable-chromaprint到配置中以启用它。请参阅https://acoustid.org/chromaprint.

49.5 codec2

FFmpeg可以使用codec2库进行codec2解码和编码。目前没有原生解码器,因此必须使用libcodec2进行解码。

访问http://freedv.org/下载"Codec 2 source archive"。使用CMake进行构建和安装。Debian用户可以改为安装libcodec2-dev软件包。一旦安装了libcodec2,可以传递--enable-libcodec2到配置中以启用它。

使用codec2时最简单的方法是使用.c2文件,因为它们包含解码所需的模式信息。要编码这样的文件,请使用.c2文件扩展名并给libcodec2编码器提供-mode选项:ffmpeg -i input.wav -mode 700C output.c2。 播放过程很简单ffplay output.c2。 有关支持的模式列表,请运行ffmpeg -h encoder=libcodec2。 原始codec2文件也支持。 要正确识别它们使用的模式需要作为格式选项进行指定:ffmpeg -f codec2raw -mode 1300 -i input.raw output.wav.

49.6 dav1d

FFmpeg可以使用dav1d库进行AV1视频解码。

访问https://code.videolan.org/videolan/dav1d并按照其中的安装库说明进行操作。然后传递--enable-libdav1d到配置中以启用它。

49.7 davs2

FFmpeg可以使用davs2库进行AVS2-P2/IEEE1857.4视频解码。

访问https://github.com/pkuvcl/davs2并按照其中的安装库说明进行操作。然后传递--enable-libdavs2到配置中以启用它。

libdavs2遵循GNU公共许可证版本2或更高版本(详见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)。要使用它,您必须将FFmpeg的许可升级为GPL。

49.8 uavs3d

FFmpeg可以使用uavs3d库进行AVS3-P2/IEEE1857.10视频解码。

访问https://github.com/uavs3/uavs3d并按照其中的安装库说明进行操作。然后传递--enable-libuavs3d到配置中以启用它。

49.9 Game Music Emu

FFmpeg可以使用Game Music Emu库读取受支持的视频游戏音乐文件格式中的音频。传递--enable-libgme到配置中以启用它。请参阅https://bitbucket.org/mpyne/game-music-emu/overview.

49.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文件。

49.11 Kvazaar

FFmpeg可以使用Kvazaar库进行HEVC编码。

访问https://github.com/ultravideo/kvazaar并按照安装库的说明操作。然后传递--enable-libkvazaar到配置中以启用它。

49.12 LAME

FFmpeg可以使用LAME库进行MP3编码。

访问http://lame.sourceforge.net/并按照安装库的说明操作。然后传递--enable-libmp3lame到配置中以启用它。

49.13 LCEVCdec

FFmpeg可以使用liblcevc_dec库对支持的比特流上的LCEVC增强层进行解码。

访问https://github.com/v-novaltd/LCEVCdec并按照安装库的说明操作。然后传递--enable-liblcevc-dec到配置中以启用它。

LCEVCdec使用BSD-3-Clause-Clear许可证。

49.14 libilbc

iLBC是一种窄带语音编解码器,Google已将其作为WebRTC项目的一部分免费提供。libilbc是一个适合打包的iLBC编解码器的副本。FFmpeg可以使用libilbc库进行iLBC解码和编码。

访问https://github.com/TimothyGu/libilbc并按照安装库的说明操作。然后传递--enable-libilbc到配置中以启用它。

49.15 libjxl

JPEG XL是一种图像格式,旨在长期完全取代传统JPEG。详情请参阅https://jpegxl.info/https://github.com/libjxl/libjxl用于库源代码。你可以传递--enable-libjxl到配置中以启用 libjxl 封装器。

49.16 libvpx

FFmpeg 可以使用 libvpx 库进行 VP8/VP9 的解码和编码。

访问http://www.webmproject.org/并按照安装库的说明进行操作。然后传递--enable-libvpx到配置中以启用它。

49.17 ModPlug

FFmpeg 可以使用来自 Modplug-XMMS 的这个库读取 MOD 类型的音乐文件。参见https://github.com/Konstanty/libmodplug。传递--enable-libmodplug到配置中以启用它。

49.18 OpenCORE、VisualOn 和 Fraunhofer 库

基于 Google Android 源码,OpenCore、VisualOn 和 Fraunhofer 库提供了许多音频编解码器的编码器。

OpenCORE 和 VisualOn 库使用 Apache License 2.0 许可(参见http://www.apache.org/licenses/LICENSE-2.0了解详情),与 LGPL 版本 2.1 和 GPL 版本 2 不兼容。你必须通过传递--enable-version3到配置中升级 FFmpeg 的许可证至 LGPL 版本 3(如果启用了 GPL 组件,则需升级至 GPL 版本 3)才能使用它。

Fraunhofer AAC 库的许可与 GPL 不兼容。因此,对于 GPL 构建,必须传递--enable-nonfree到配置中才能使用它。据我们所知,它与 LGPL 是兼容的。

49.18.1 OpenCORE AMR

FFmpeg 可以使用 OpenCORE 库进行 AMR-NB 的解码/编码和 AMR-WB 的解码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libopencore-amrnb和/或--enable-libopencore-amrwb到配置中以启用它们。

49.18.2 VisualOn AMR-WB 编码库

FFmpeg 可以使用 VisualOn AMR-WBenc 库进行 AMR-WB 编码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libvo-amrwbenc到配置中以启用它。

49.18.3 Fraunhofer AAC 库

FFmpeg 可以使用 Fraunhofer AAC 库进行 AAC 的解码和编码。

访问http://sourceforge.net/projects/opencore-amr/并按照安装库的说明进行操作。然后传递--enable-libfdk-aac到配置中以启用它。

49.18.4 LC3 库

FFmpeg 可以使用 Google LC3 库进行 LC3 的解码与编码。

访问https://github.com/google/liblc3/并按照安装库的说明进行操作。然后传递--enable-liblc3到配置中以启用它。

49.19 OpenH264

FFmpeg 可以使用 OpenH264 库进行 H.264 的解码和编码。

访问http://www.openh264.org/并按照安装库的说明进行操作。然后传递--enable-libopenh264到配置中以启用它。

对于解码,此库比 libavcodec 内置解码器限制更多;目前该库缺乏对解码 B 帧和其他 main/high profile 特性的支持。(目前仅支持约束基线型和 CABAC。)使用它主要用于测试以及利用 Cisco 的专利许可协议(参见http://www.openh264.org/BINARY_LICENSE.txt).

49.20 OpenJPEG

FFmpeg 可以使用 OpenJPEG 库进行 J2K 视频的解码/编码。访问http://www.openjpeg.org/获取库并按照安装说明进行操作。要启用在 FFmpeg 中使用 OpenJPEG,请传递--enable-libopenjpeg./configure.

49.21 rav1e

FFmpeg 可以通过其 C 绑定使用 rav1e(Rust AV1 编码器)进行视频编码。 访问https://github.com/xiph/rav1e/并按照说明构建 C 库。要启用在 FFmpeg 中使用 rav1e,请传递--enable-librav1e./configure.

49.22 SVT-AV1

FFmpeg 可以使用 Scalable Video Technology for AV1 库进行 AV1 编码。

访问https://gitlab.com/AOMediaCodec/SVT-AV1/并按照安装库的说明进行操作。然后传递--enable-libsvtav1到配置中以启用它。

49.23 TwoLAME

FFmpeg 可以使用 TwoLAME 库进行 MP2 编码。

访问http://www.twolame.org/并按照安装库的说明进行操作。然后传递--enable-libtwolame到配置中以启用它。

49.24 VapourSynth

FFmpeg 可以读取 VapourSynth 脚本作为输入。要启用支持,请传递--enable-vapoursynth到配置中。Vapoursynth 通过pkg-config检测。支持版本 42 或更高。 参见http://www.vapoursynth.com/.

由于安全原因,Vapoursynth 脚本不会被自动检测,因此输入格式必须被强制指定。对于 ff* CLI 工具,在输入之前添加-f vapoursynth before the input -i yourscript.vpy.

49.25 x264

FFmpeg 可以使用 x264 库进行 H.264 编码。

访问http://www.videolan.org/developers/x264.html并按照安装库的说明操作。然后传递--enable-libx264到配置中以启用它。

x264 使用 GNU 公共许可证版本 2 或更高(参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html了解详情),你必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

49.26 x265

FFmpeg 可以使用 x265 库进行 HEVC 编码。

访问http://x265.org/developers.html并按照安装库的说明进行操作。然后传递--enable-libx265到配置中以启用它。

x265 使用 GNU 公共许可证版本 2 或更高(参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html详情请参阅),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

49.27 xavs

FFmpeg 可以使用 xavs 库进行 AVS 编码。

访问http://xavs.sf.net/并按照安装该库的说明操作。然后传递--enable-libxavs到配置以启用它。

49.28 xavs2

FFmpeg 可以使用 xavs2 库进行 AVS2-P2/IEEE1857.4 视频编码。

访问https://github.com/pkuvcl/xavs2并按照安装该库的说明操作。然后传递--enable-libxavs2到配置以启用它。

libxavs2 采用 GNU 公共许可证版本 2 或更高版本(参见http://www.gnu.org/licenses/old-licenses/gpl-2.0.html详情请参阅),您必须将 FFmpeg 的许可证升级为 GPL 才能使用它。

49.29 高速基础视频编码器 (XEVE)

FFmpeg 可以使用 XEVE 库进行 EVC 视频编码。

访问https://github.com/mpeg5/xeve并按照安装 XEVE 库的说明操作。然后传递--enable-libxeve到配置以启用它。

49.30 高速基础视频解码器 (XEVD)

FFmpeg 可以使用 XEVD 库进行 EVC 视频解码。

访问https://github.com/mpeg5/xevd并按照安装 XEVD 库的说明操作。然后传递--enable-libxevd到配置以启用它。

49.31 ZVBI

ZVBI 是一个 VBI 解码库,FFmpeg 可用其解码 DVB 文本页面和 DVB 文本字幕。

访问http://sourceforge.net/projects/zapping/并按照安装该库的说明操作。然后传递--enable-libzvbi到配置以启用它。

50 支持的文件格式、编解码器或功能

您可以使用-formats-codecs选项查看完整列表。

50.1 文件格式

FFmpeg 支持通过以下文件格式libavformat库:

名称编码解码备注
3dostrX
4xmX4X Technologies 格式,用于某些游戏。
8088flex TMVX
AAXX用于有声书的 Audible 增强音频格式。
AAXAudible 格式 2、3 和 4,用于有声书。
ACT 语音X包含 G.729 音频
Adobe FilmstripXX
音频 IFF (AIFF)XX
美国激光游戏 MMX多媒体格式,用于诸如 Mad Dog McCree 的游戏。
3GPP AMRXX
Amazing Studio 压缩动画文件X多媒体格式,用于《心灵黑暗》游戏。
Apple HTTP 实时流X
Artworx 数据格式X
Interplay ACMX音频格式,仅用于某些 Interplay 游戏。
ADPX任天堂 Gamecube 上使用的音频格式。
AFCX任天堂 Gamecube 上使用的音频格式。
ADS/SS2XPS2 上使用的音频格式。
APNGXX
ASFXX高级/主动流格式。
ASTXX任天堂 Wii 上使用的音频格式。
AVIXX
AviSynthX
AVRXMac 上使用的音频格式。
AVSXCreature Shock 游戏使用的多媒体格式。
Beam Software SIFFXBeam Software 的一些游戏中使用的音频和视频格式。
Bethesda Softworks VIDXBethesda Softworks 的一些游戏中使用。
二进制文本X
BinkX许多游戏使用的多媒体格式。
Bink 音频X某些游戏使用的仅音频多媒体格式。
Bitmap Brothers JVX在 Z 和 Z95 游戏中使用。
BRPXArgonaut Games 格式。
Brute Force & IgnoranceX在游戏《Flash Traffic: City of Angels》中使用。
BFSTMX在任天堂 WiiU 上使用的音频格式(基于 BRSTM)。
BRSTMX任天堂 Wii 上使用的音频格式。
BW64X64 位广播波。
BWFXX
codec2 (原始)XX必须提供 -mode 格式选项才能正确解码。
codec2 (.c2 文件)XX包含版本和模式信息的头,简化了播放。
CRI ADXXX在游戏机视频游戏中使用的音频格式。
CRI AIXX
CRI HCAX在游戏机视频游戏中使用的音频格式。
Discworld II BMVX
Interplay C93XInterplay 在游戏 Cyberia 中使用。
Delphine Software International CINXDelphine Software 游戏中使用的多媒体格式。
数字语音标准 (DSS)X
CD+GXCD+G 卡拉 OK 光盘使用的视频格式。
Phantom CineX
Commodore CDXLXAmiga CD 视频格式。
核心音频格式XXApple 核心音频格式。
CRC 测试格式X
Creative VoiceXX为 Sound Blaster Pro 创建。
CRYO APCXCRYO Interactive Entertainment 游戏中使用的音频格式。
D-Cinema 音频XX
Deluxe Paint 动画X
DCSTRX
DFAX此格式用于 Chronomaster 游戏
DirectDraw 表面X
DSD 流文件 (DSF)X
DV 视频XX
DXAX此格式用于 Feeble Files 游戏的非 Windows 版本以及重新打包用于 ScummVM 的不同游戏情节。
Electronic Arts cdataX
Electronic Arts 多媒体X用于各种 EA 游戏;文件扩展名如 WVE 和 UV2。
Ensoniq Paris 音频文件X
FFM (FFserver 实时流)XX
Flash (SWF)XX
Flash 9 (AVM2)XX仅解码嵌入的音频。
FLI/FLC/FLX 动画X.fli/.flc 文件
Flash 视频 (FLV)XXMacromedia Flash 视频文件
framecrc 测试格式X
FunCom ISSXFunCom 在 The Longest Journey 等游戏中使用的音频格式。
G.723.1XX
G.726X左右均对齐。
G.729 BITXX
G.729 原始数据X
GENHX用于多种游戏的音频格式。
GIF 动画XX
GXFXX通用交换格式 SMPTE 360M,由 Thomson Grass Valley 播放服务器使用。
HNMX仅支持版本 4,用于 Cryo Interactive 制作的一些游戏。
iCEDraw 文件X
ICOXXMicrosoft Windows ICO
id Quake II CIN 视频X
id RoQXX用于 Quake III, Jedi Knight 2 及其他一些电脑游戏。
IEC61937 封装XX
IFFX互换文件格式
IFVX一种老式 CCTV DVR 使用的格式。
iLBCXX
Interplay MVEX用于多种 Interplay 电脑游戏的格式。
Iterated Systems ClearVideoX仅限I帧
IV8X由IndigoVision 8000视频服务器生成的格式。
IVF (On2)XXlibvpx使用的格式
互联网视频录制X
IRCAMXX
LAFX无限音频格式
LATMXX
LMLM4X用于Linux Media Labs MPEG-4 PCI设备的格式
LOASX包含LATM多路传输AAC音频
LRCXX
LVFX
LXFXVR原始流格式,用于Leitch/Harris的视频服务器。
Magic Lantern视频(MLV)X
MatroskaXX
Matroska音频X
FFmpeg元数据XX文本格式的元数据。
MAXIS XAX用于模拟城市3000;文件扩展名为.xa。
MCAX在Capcom的一些游戏中使用;文件扩展名为.mca。
MD StudioX
合金装备:双蛇X
Megalux FrameX由Megalux Ultimate Paint使用
MobiClip MODSX
MobiClip MOFLEXX
Mobotix .mxgX
Monkey’s AudioX
Motion Pixels MVIX
MOV/QuickTime/MP4XX支持3GP、3GP2、PSP、iPod变体
MP2XX
MP3XX
MPEG-1系统XX多路音频和视频,支持VCD格式
MPEG-PS(程序流)XX亦称VOB支持文件、SVCD和DVD格式
MPEG-TS(传输流)XX亦称DVB传输流
MPEG-4XXMPEG-4是QuickTime的一种变体。
MSFXPS3上使用的音频格式。
Mirillis FIC视频X无光标渲染。
MIDI标准样本转储X
MIME多部分JPEGX
MSN TCP网络摄像头X用于MSN Messenger网络摄像头流。
MTVX
MusepackX
Musepack SV8X
材料交换格式 (MXF)XXSMPTE 377M,供D-Cinema、广播行业使用。
材料交换格式 (MXF),D-10 映射XXSMPTE 386M,D-10/IMX 映射。
NC摄像头视频源XNC (AVIP NC4600) 摄像头流
NIST语音头资源X
电脑语音实验室NSPX
NTT TwinVQ (VQF)X日本电信电话公司TwinVQ。
Nullsoft流视频X
NuppelVideoX
NUTXXNUT开放容器格式
OggXX
Playstation Portable PMPX
便携语音格式X
RK音频 (RKA)X
TechnoTrend PVAX由TechnoTrend DVB PCI板卡使用。
QCPX
原始ADTS (AAC)XX
原始AC-3XX
原始AMR-NBX
原始AMR-WBX
原始APACX
原始APVXX
原始aptXXX
原始aptX HDXX
原始BonkX
原始中国AVS视频XX
原始DFPWMXX
原始DiracXX
原始DNxHDXX
原始DTSXX
原始DTS-HDX
原始E-AC-3XX
原始EVCXX
原始FLACXX
原始 GSMX
原始 H.261XX
原始 H.263XX
原始 H.264XX
原始 HEVCXX
原始 Ingenient MJPEGX
原始 MJPEGXX
原始 MLPX
原始 MPEGX
原始 MPEG-1X
原始 MPEG-2X
原始 MPEG-4XX
原始 NULLX
原始视频XX
原始 id RoQX
原始 OBUXX
原始 OSQX
原始 SBCXX
原始 ShortenX
原始 TAKX
原始 TrueHDXX
原始 VC-1XX
原始 PCM A-lawXX
原始 PCM mu-lawXX
原始 PCM Archimedes VIDCXX
原始 PCM 有符号 8 位XX
原始 PCM 有符号 16 位 大端XX
原始 PCM 有符号 16 位 小端XX
原始 PCM 有符号 24 位 大端XX
原始 PCM 有符号 24 位 小端XX
原始 PCM 有符号 32 位 大端XX
原始 PCM 有符号 32 位 小端XX
原始 PCM 有符号 64 位 大端XX
原始 PCM 有符号 64 位 小端XX
原始 PCM 无符号 8 位XX
原始 PCM 无符号 16 位 大端XX
原始 PCM 无符号 16 位 小端XX
原始PCM,未签名的24位大端序XX
原始PCM,未签名的24位小端序XX
原始PCM,未签名的32位大端序XX
原始PCM,未签名的32位小端序XX
原始PCM,16.8点浮动小端序X
原始PCM,24.0点浮动小端序X
原始PCM,浮点32位大端序XX
原始PCM,浮点32位小端序XX
原始PCM,浮点64位大端序XX
原始PCM,浮点64位小端序XX
RDTX
REDCODE R3DX由RED数字相机使用的文件格式,包含JPEG 2000帧和PCM音频。
RealMediaXX
重定向器X
RedSparkX
Renderware 纹理字典X
Resolume DXVXX仅支持DXT1(普通质量,无Alpha)纹理格式的编码。
RF64X
RL2X由娱乐软件伙伴公司在某些游戏中使用的音视频格式。
RPL/ARMovieX
乐高Mindstorms RSOXX
RSDX
RTMPXX通过发布流到RTMP服务器进行输出。
RTPXX
RTSPXX
样本转储交换X
SAPXX
SBGX
SDNSX
SDPX
SERX
数字图片SGAX
Sega FILM/CPKXX用于许多Sega Saturn游戏机游戏。
Silicon Graphics电影格式X
Sierra SOLX.sol文件用于Sierra在线游戏。
Sierra VMDX用于Sierra CD-ROM游戏。
SmackerX多媒体格式,用于许多游戏。
SMJPEGXX用于某些Loki游戏移植版本。
SMPTE 337M封装X
SmushX用于一些LucasArts游戏的多媒体格式。
索尼OpenMG (OMA)XX用于Sony Sonic Stage和Sony Vegas的软件中的音频格式。
索尼PlayStation STRX
索尼Wave64 (W64)XX
SoX本机格式XX
SUN AU格式XX
SUP原始PGS字幕XX
SVAGX用于Konami PS2游戏的音频格式。
TDSCX
文本文件X
THPX用于任天堂GameCube。
Tiertex Limited SEQXTiertex .seq 文件用于游戏《Flashback》的DOS CD-ROM版本。
True AudioXX
VAGX用于许多索尼PS2游戏的音频格式。
VC-1测试位流XX
Vidvox HapXX
VivoX
VPKX用于索尼PS游戏的音频格式。
Marble WADYX
WAVXX
波形存档器X
WavPackXX
WebMXX
Windows Televison (WTV)XX
《Wing Commander III》电影X用于Origin制作的《Wing Commander III》电脑游戏的多媒体格式。
Westwood Studios音频XX用于Westwood Studios游戏的多媒体格式。
Westwood Studios VQAX用于Westwood Studios游戏的多媒体格式。
宽带单比特数据 (WSD)X
WVEX
Konami XMDX
XMVX微软视频容器,用于Xbox游戏。
XVAGX在PS3上使用的音频格式。
xWMAX微软音频容器,用于XAudio 2。
扩展二进制文本 (XBIN)X
YUV4MPEG 管道XX
Psygnosis YOPX

X表示该列中的功能(编码/解码)是支持的。

50.2 图像格式

FFmpeg 可以针对视频序列的每一帧读取和写入图像。支持以下图像格式:

名称编码解码备注
.Y.U.VXX每个分量一个原始文件
Alias PIXXXAlias/Wavefront PIX 图像格式
动画 GIFXX
APNGXX动画便携网络图形
BMPXXMicrosoft BMP 图像
BRender PIXXArgonaut BRender 3D 引擎图像格式。
CRIXCintel RAW
DPXXX数字图片交换格式
EXRXOpenEXR
FITSXX灵活的图像传输系统
HDRXXRadiance HDR RGBE 图像格式
IMGXGEM 光栅图像
JPEGXX不支持渐进 JPEG。
JPEG 2000XX
JPEG-LSXX
LJPEGX无损 JPEG
Media 100X
MSPXMicrosoft Paint 图像
PAMXXPAM 是带有 alpha 支持的 PNM 扩展。
PBMXX便携位图图像
PCDX光盘照片
PCXXXPC Paintbrush
PFMXX可移植浮点图像
PGMXX便携灰度图像
PGMYUVXXPGM,带有 YUV 4:2:0 格式的 U 和 V 分量
PGXXPGX文件解码器
PHMXX便携式半浮点映射图像
PICXPictor/PC Paint
PNGXX便携式网络图形图像
PPMXX便携式像素图像
PSDXPhotoshop
PTXXV.Flash PTX格式
QOIXX相当不错的图像格式
SGIXXSGI RGB图像格式
Sun RasterfileXXSun RAS图像格式
TIFFXXYUV、JPEG和一些扩展尚不支持。
Truevision TargaXXTarga (.TGA)图像格式
VBNXXVizrt二进制图像格式
WBMPXX无线应用协议位图图像格式
WebPEXWebP图像格式,通过外部库libwebp支持编码
XBMXXX位图图像格式
XFaceXXX-Face图像格式
XPMXX PixMap图像格式
XWDXXX Window Dump图像格式

X表示该列中的功能(编码/解码)已支持。

E表示通过外部库提供支持。

50.3 视频编解码器

名称编码解码备注
4X电影X用于某些电脑游戏。
8088flex TMVX
A64多色X创建用于在Commodore 64(多色模式)播放的视频。
Amazing Studio PAF视频X
American Laser Games MMX用于游戏如Mad Dog McCree。
Amuse Graphics电影X
AMV视频XX用于中国的MP3播放器。
ANSI/ASCII艺术X
Apple中间编解码器X
Apple MJPEG-BX
Apple PixletX
Apple ProResXXfourcc: apch,apcn,apcs,apco,ap4h,ap4x
Apple QuickDrawXfourcc: qdrw
APVX
Argonaut视频X用于一些Argonaut游戏。
华硕v1XXfourcc: ASV1
华硕v2XXfourcc: ASV2
ATI VCR1Xfourcc: VCR1
ATI VCR2Xfourcc: VCR2
Auravision AuraX
Auravision Aura 2X
Autodesk Animator Flic视频X
Autodesk RLEXfourcc: AASC
AV1EE通过外部库libaom、libdav1d、librav1e和libsvtav1支持
Avid 1:1 10-bit RGB PackerXXfourcc: AVrp
AVS(音视频标准)视频X用于游戏《Creature Shock》的视频编码。
AVS2-P2/IEEE1857.4EE通过外部库libxavs2和libdavs2支持
AVS3-P2/IEEE1857.10E通过外部库libuavs3d支持
AYUVXX微软未压缩打包的4:4:4:4
Beam Software VBX
Bethesda VID视频X用于Bethesda Softworks的一些游戏。
Bink视频X
BitJazz SheerVideoX
Bitmap Brothers JV视频X
y41p Brooktree未压缩4:1:1 12-bitXX
Brooktree ProSumer视频Xfourcc: BT20
蛮力与无知X用于游戏《Flash Traffic: City of Angels》。
C93视频X用于游戏《Cyberia》的编解码器。
CamStudioXfourcc: CSCD
CD+GX用于CD+G卡拉OK光盘的视频编解码器
CDXLXAmiga CD视频编解码器
中国AVS视频EXAVS1-P2,JiZhun配置,支持通过外部库libxavs编码
Delphine Software International CIN视频X用于Delphine Software International游戏的编解码器。
Discworld II BMV视频X
CineForm高清XX
Canopus HQX
Canopus HQAX
Canopus HQXX
Canopus无损编解码器X
CD卡通X用于各种Broderbund游戏的编解码器。
CinepakX
Cirrus Logic AccuPakXXfourcc: CLJR
CPiA视频格式X
Creative YUV (CYUV)X
DFAX用于Chronomaster游戏的编解码器。
DiracEX通过本地vc2 (Dirac Pro)编码器支持
Deluxe Paint动画X
DNxHDXX又名SMPTE VC3
Duck TrueMotion 1.0Xfourcc: DUCK
Duck TrueMotion 2.0Xfourcc: TM20
Duck TrueMotion 2.0 RTXfourcc: TR20
DV(数字视频)XX
Dxtory捕获格式X
Feeble Files/ScummVM DXAX最初用于Feeble Files游戏的编解码器。
Electronic Arts CMV视频X用于NHL 95游戏。
Electronic Arts Madcow视频X
Electronic Arts TGV视频X
Electronic Arts TGQ视频X
Electronic Arts TQI视频X
Escape 124X
Escape 130X
EVC / MPEG-5第1部分EE通过外部库libxeve和libxevd支持的编码和解码
FFmpeg视频编解码器#1XX无损编解码器(fourcc: FFV1)
Flash屏幕视频v1XXfourcc: FSV1
Flash屏幕视频v2XX
Flash视频(FLV)XXFlash中使用的Sorenson H.263
FM屏幕捕获编解码器X
Forward未压缩X
FrapsX
Go2MeetingXfourcc: G2M2, G2M3
Go2WebinarX四字符代码: G2M4
Gremlin 数字视频X
H.261XX
H.263 / H.263-1996XX
H.263+ / H.263-1998 / H.263 第二版XX
H.264 / AVC / MPEG-4 AVC / MPEG-4 第10部分EX通过外部库 libx264 和 OpenH264 支持编码
HEVCXX通过外部库 libx265 和 libkvazaar 支持编码
HNM 第4版X
HuffYUVXX
HuffYUV FFmpeg 变体XX
IBM UltimotionX四字符代码: ULTI
id Cinematic 视频X用于 Quake II。
id RoQ 视频XX用于 Quake III、Jedi Knight 2 以及其他电脑游戏。
IFF ILBMXIFF 交错位图
IFF ByteRun1XIFF 行程长度编码位图
Infinity IMM4X
Intel H.263X
Intel Indeo 2X
Intel Indeo 3X
Intel Indeo 4X
Intel Indeo 5X
Interplay C93X用于 Interplay 的游戏 Cyberia。
Interplay MVE 视频X用于 Interplay 的 .MVE 文件。
J2KXX
Karl Morton 的视频编解码器X用于 Worms 游戏的编解码器。
Kega 游戏视频 (KGV1)XKega 模拟器屏幕捕获编解码器。
LagarithX
LCEVC / MPEG-5 LCEVC / MPEG-5 第2部分E通过外部库 liblcevc-dec 支持解码
LCL (无损编解码库) MSZHX
LCL (无损编解码库) ZLIBEE
LEAD MCMPX
LOCOX
LucasArts SANM/SmushX用于 LucasArts 的游戏 / SMUSH 动画。
无损 MJPEGXX
MagicYUV 视频XX
Mandsoft 屏幕捕获编解码器X
Microsoft ATC 屏幕X也被称为Microsoft Screen 3。
Microsoft Expression Encoder屏幕X也被称为Microsoft Titanium Screen 2。
Microsoft RLEXX
Microsoft Screen 1X也被称为Windows Media Video V7 Screen。
Microsoft Screen 2X也被称为Windows Media Video V9 Screen。
Microsoft Video 1X
MimicX用于MSN Messenger Webcam流。
Miro VideoXLXfourcc: VIXL
MJPEG(运动JPEG)XX
Mobotix MxPEG视频X
Motion Pixels视频X
MPEG-1视频XX
MPEG-2视频XX
MPEG-4第2部分XXlibxvidcore可以替代用于编码。
MPEG-4第2部分Microsoft变体版本1X
MPEG-4第2部分Microsoft变体版本2XX
MPEG-4第2部分Microsoft变体版本3XX
Newtek SpeedHQXX
Nintendo Gamecube THP视频X
NotchLCX
NuppelVideo/RTjpegXNuppelVideo文件中使用的视频编码。
On2 VP3X仍处于实验阶段
On2 VP4Xfourcc: VP40
On2 VP5Xfourcc: VP50
On2 VP6Xfourcc: VP60,VP61,VP62
On2 VP7Xfourcc: VP70,VP71
VP8EXfourcc: VP80,通过外部库libvpx支持编码
VP9EX通过外部库libvpx支持编码
Pinnacle TARGA CineWave YUV16Xfourcc: Y216
Q-team QPEGXfourccs: QPEG, Q1.0, Q1.1
QuickTime 8BPS视频X
QuickTime动画(RLE)视频XXfourcc: ’rle ’
QuickTime图形(SMC)XXfourcc: ’smc ’
QuickTime视频(RPZA)XXfourcc: rpza
R10K AJA Kona 10位RGB编解码器XX
R210 Quicktime 无压缩 RGB 10位XX
原始视频XX
RealVideo 1.0XX
RealVideo 2.0XX
RealVideo 3.0X仍远非理想
RealVideo 4.0X
RealVideo 6.0X
Renderware TXD (纹理字典)XRenderware 引擎使用的纹理字典。
RivaTuner 视频Xfourcc: 'RTV1'
RL2 视频X用于 Entertainment Software Partners 的一些游戏中
ScreenPressorX
ScreenpressoX
Screen Recorder Gold 编解码器X
Sierra VMD 视频X用于 Sierra VMD 文件。
硅图运动视频压缩器 1 (MVC1)X
硅图运动视频压缩器 2 (MVC2)X
硅图 RLE 8位视频X
Smacker 视频X用于 Smacker 的视频编码。
SMPTE VC-1X
SnowXX实验性的小波编解码器 (fourcc: SNOW)
索尼 PlayStation MDEC (运动解码器)X
Sorenson 矢量量化器 1XXfourcc: SVQ1
Sorenson 矢量量化器 3Xfourcc: SVQ3
Sunplus JPEG (SP5X)Xfourcc: SP5X
TechSmith 屏幕捕获编解码器Xfourcc: TSCC
TechSmith 屏幕捕获编解码器 2Xfourcc: TSC2
TheoraEX通过外部库 libtheora 支持编码
Tiertex Limited SEQ 视频X在 DOS CD-ROM FlashBack 游戏中使用的编解码器。
Ut 视频XX
v210 QuickTime 无压缩 4:2:2 10位XX
v308 QuickTime 无压缩 4:4:4XX
v408 QuickTime 无压缩 4:4:4:4XX
v410 QuickTime 无压缩 4:4:4 10位XX
VBLE 无损编解码器X
vMix 视频Xfourcc: 'VMX1'
VMware 屏幕编码器/VMware 视频X用于由 VMware 捕获的视频的编解码器。
Westwood Studios VQA(矢量量化动画)视频X
Windows Media 图像X
Windows Media 视频 7XX
Windows Media 视频 8XX
Windows Media 视频 9X无法完全正常工作
Wing Commander III / XanX用于 Wing Commander III 的 .MVE 文件。
Wing Commander IV / XanX用于 Wing Commander IV。
Winnov WNV1X
WMV7XX
YAMAHA SMAFXX
Psygnosis YOP 视频X
yuv4XXlibquicktime 未压缩打包 4:2:0
ZeroCodec 无损视频X
ZLIBXX部分属于 LCL,编码器为实验性
Zip Motion Blocks 视频XX编码器仅在 PAL8 中工作。

X表示该列中的功能(编码/解码)受支持。

E表示支持通过外部库提供。

50.4 音频编解码器

名称编码解码备注
8SVX 指数X
8SVX 斐波那契X
AACEXX通过内部编码器和外部库 libfdk-aac 提供编码支持
AAC+EIX通过外部库 libfdk-aac 提供编码支持
AC-3IXIX
ACELP.KELVINX
ADPCM 4X 电影X
ADPCM Yamaha AICAX
ADPCM AmuseGraphics 电影X
ADPCM Argonaut GamesXX
ADPCM CDROM XAX
ADPCM Creative 技术X16 -> 4, 8 -> 4, 8 -> 3, 8 -> 2
ADPCM Electronic ArtsX用于多款 EA 游戏。
ADPCM Electronic Arts Maxis CDROM XSX用于 Sim City 3000。
ADPCM Electronic Arts R1X
ADPCM Electronic Arts R2X
ADPCM Electronic Arts R3X
ADPCM Electronic Arts XASX
ADPCM G.722XX
ADPCM G.726XX
ADPCM IMA Acorn ReplayX
ADPCM IMA AMVXX用于AMV文件
ADPCM IMA Cunning DevelopmentsX
ADPCM IMA Electronic Arts EACSX
ADPCM IMA Electronic Arts SEADX
ADPCM IMA FuncomX
ADPCM IMA High Voltage Software ALPXX
ADPCM IMA Mobiclip MOFLEXX
ADPCM IMA QuickTimeXX
ADPCM IMA Simon & Schuster InteractiveXX
ADPCM IMA Ubisoft APMXX
ADPCM IMA Loki SDL MJPEGX
ADPCM IMA WAVXX
ADPCM IMA WestwoodX
ADPCM ISS IMAX用于FunCom游戏。
ADPCM IMA DialogicX
ADPCM IMA Duck DK3X用于一些Sega Saturn主机游戏。
ADPCM IMA Duck DK4X用于一些Sega Saturn主机游戏。
ADPCM IMA RadicalX
ADPCM IMA XboxX
ADPCM MicrosoftXX
ADPCM MS IMAXX
ADPCM Nintendo Gamecube AFCX
ADPCM Nintendo Gamecube DTKX
ADPCM Nintendo THPX
ADPCM PlaystationX
ADPCM QT IMAXX
ADPCM SEGA CRI ADXXX用于Sega Dreamcast游戏。
ADPCM Shockwave FlashXX
ADPCM Sound Blaster Pro 2-bitX
ADPCM Sound Blaster Pro 2.6-bitX
ADPCM Sound Blaster Pro 4-bitX
ADPCM VIMAX用于LucasArts SMUSH动画。
ADPCM Konami XMDX
ADPCM Westwood Studios IMAXX用于Westwood Studios游戏,如《命令与征服》。
ADPCM YamahaXX
ADPCM ZorkX
AMR-NBEX通过外部库libopencore-amrnb支持编码
AMR-WBEX通过外部库libvo-amrwbenc支持的编码
Amazing Studio PAF音频X
Apple无损音频XXQuickTime四字符代码’alac’
aptXXX用于蓝牙A2DP
aptX HDXX用于蓝牙A2DP
ATRAC1X
ATRAC3X
ATRAC3+X
ATRAC9X
Bink音频X用于许多游戏中的Bink和Smacker文件。
Bonk音频X
CELTE通过外部库libcelt支持的解码
codec2EE通过外部库libcodec2支持的编码/解码
CRI HCAX
Delphine Software International CIN音频X用于Delphine Software International游戏中的编解码器。
DFPWMXX
数字语音标准 - 标准播放模式(DSS SP)X
Discworld II BMV音频X
COOKX除5.1版本外的所有版本均受支持。
DCA (DTS一致声学)XX支持的扩展: XCh, XXCH, X96, XBR, XLL, LBR (部分支持)
杜比EX
DPCM立方根-精准增量X用于少数游戏。
DPCM GremlinX
DPCM RoQXX用于Quake III, Jedi Knight 2及其他电脑游戏。
DPCM Marble WADYX
DPCM InterplayX用于各种Interplay电脑游戏。
DPCM平方根-精准增量X用于各种游戏。
DPCM Sierra OnlineX用于Sierra Online游戏音频文件。
DPCM SolX
DPCM XanX用于Origin的Wing Commander IV AVI文件。
DPCM Xilam DERFX
DSD (直接流数字),最低有效位优先X
DSD (直接流数字),最高有效位优先X
DSD (直接流数字),最低有效位优先,平面X
DSD (直接流数字),最高有效位优先,平面X
DSP Group TrueSpeechX
DST (直接流传输)X
DV音频X
增强型 AC-3XX
EVRC(增强型可变速率编码)X
FLAC(自由无损音频编码)XIX
FTR 语音X
G.723.1XX
G.729X
GSMEX通过外部库 libgsm 支持编码
GSM 微软变体EX通过外部库 libgsm 支持编码
IAC(Indeo 音频编码器)X
iLBC(互联网低比特率编码器)EEX通过外部库 libilbc 支持编码和解码
IMC(英特尔音乐编码器)X
Interplay ACMX
LC3EE通过外部库 liblc3 支持
MACE(Macintosh 音频压缩/扩展)6:1X
Marian 的 A-pac 音频X
MI-SC4(Micronas SC-4 音频)X
MLP(标准无损打包)XX用于 DVD-Audio 光盘。
Monkey's AudioX
MP1(MPEG 音频层 1)IX
MP2(MPEG 音频层 2)IXIX通过外部库 TwoLAME 支持编码
MP3(MPEG 音频层 3)EIX通过外部库 LAME 支持编码,同时支持 ADU MP3 和 MP3onMP4
MPEG-4 音频无损编码(ALS)X
MobiClip 快速音频X
Musepack SV7X
Musepack SV8X
Nellymoser AsaoXX
On2 AVC(视频编码器的音频)X
OpusEX通过外部库 libopus 支持编码
OSQ(原始音质)X
PCM A-lawXX
PCM mu-lawXX
PCM Archimedes VIDCXX
PCM 有符号 8 位平面XX
PCM 有符号 16 位大端平面XX
PCM 有符号 16 位小端平面XX
PCM 有符号 24 位小端平面XX
PCM 有符号 32 位小端平面XX
PCM 32位浮点大端格式XX
PCM 32位浮点小端格式XX
PCM 64位浮点大端格式XX
PCM 64位浮点小端格式XX
PCM D-Cinema音频签名24位XX
PCM签名8位XX
PCM签名16位大端格式XX
PCM签名16位小端格式XX
PCM签名24位大端格式XX
PCM签名24位小端格式XX
PCM签名32位大端格式XX
PCM签名32位小端格式XX
PCM签名16/20/24位大端格式用于MPEG-TSX
PCM无符号8位XX
PCM无符号16位大端格式XX
PCM无符号16位小端格式XX
PCM无符号24位大端格式XX
PCM无符号24位小端格式XX
PCM无符号32位大端格式XX
PCM无符号32位小端格式XX
PCM SGAX
QCELP / PureVoiceX
QDesign 音乐编码器 1X
QDesign 音乐编码器 2X仍然存在一些失真。
RealAudio 1.0 (14.4K)XXReal 14400比特/秒编码器
RealAudio 2.0 (28.8K)XReal 28800比特/秒编码器
RealAudio 3.0 (dnet)IXXReal低比特率AC-3编码器
RealAudio无损X
RealAudio SIPR / ACELP.NETX
RK音频 (RKA)X
SBC (低复杂性子带编码器)XX用于蓝牙A2DP
ShortenX
Sierra VMD音频X用于Sierra VMD文件。
Smacker音频X
SMPTE 302M AES3音频XX
索尼克XX实验性编解码器
索尼克无损XX实验性编解码器
SpeexEEX通过外部库libspeex支持
TAK(汤姆的无损音频压缩器)X
True Audio (TTA)XX
TrueHDXX用于HD-DVD和蓝光光盘。
TwinVQ(VQF风格)X
VIMAX用于LucasArts SMUSH动画。
ViewQuest VQCX
VorbisEX一个原生但非常原始的编码器存在。
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表示也有一个仅支持整数的版本(确保在没有硬件浮点支持的系统上具有高性能)。

50.5 字幕格式

名称封装解封装编码解码
3GPP 定时文本XX
AQTitleXX
DVBXXXX
DVB 图文电视XE
DVDXXXX
JACOsubXXX
MicroDVDXXX
MPL2XX
MPSub(MPlayer)XX
PGSX
PJS(凤凰)XX
RealTextXX
SAMIXX
Spruce格式(STL)XX
SSA/ASSXXXX
SubRip(SRT)XXXX
SubViewer v1XX
SubViewerXX
TED讲座字幕XX
TTMLXX
VobSub(IDX+SUB)XX
VPlayerXX
WebVTTXXXX
XSUBXX

X表示该功能受支持。

E表示通过外部库提供支持。

50.6 网络协议

名称支持
AMQPE
文件X
FTPX
GopherX
GophersX
HLSX
HTTPX
HTTPSX
IcecastX
MMSHX
MMSTX
管道X
Pro-MPEG FECX
RTMPX
RTMPEX
RTMPSX
RTMPTX
RTMPTEX
RTMPTSX
RTPX
SAMBAE
SCTPX
SFTPE
TCPX
TLSX
UDPX
ZMQE

X表示协议受支持。

E表示通过外部库提供支持。

50.7 输入/输出设备

名称输入输出
ALSAXX
BKTRX
cacaX
DV1394X
Lavfi 虚拟设备X
Linux 帧缓冲区XX
JACKX
LIBCDIOX
LIBDC1394X
OpenALX
OpenGLX
OSSXX
PulseAudioXX
SDLX
Video4Linux2XX
VfW 捕获X
X11 抓取X
Win32 抓取X

X表示输入/输出受支持。

50.8 时间码

编解码器/格式读取写入
AVIXX
DVXX
GXFXX
MOVXX
MPEG1/2XX
MXFXX

51 另请参阅

ffmpeg ffplay, ffprobe, ffmpeg-utils, ffmpeg-scaler, ffmpeg-resampler, ffmpeg-codecs, ffmpeg-bitstream-filters, ffmpeg-formats, ffmpeg-devices, ffmpeg-protocols, ffmpeg-filters

52 作者

FFmpeg 开发者。

有关作者身份的详细信息,请参阅项目的 Git 历史 (https://git.ffmpeg.org/ffmpeg),例如,通过键入命令git log在 FFmpeg 源代码目录中,或浏览在线存储库https://git.ffmpeg.org/ffmpeg.

特定组件的维护者列在文件中MAINTAINERS在源代码树中。

此文档生成于May 24, 2025使用makeinfo.

网站翻译由林建有提供支持