FFmpeg 格式文档

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

目录

1 描述

本文档描述了由 libavformat 库提供的支持的格式(复用器和解复用器)。

2 格式选项

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

选项可以通过指定 -选项 来设置,或者通过显式设置值来AVFormatContext选项或使用libavutil/opt.hAPI 以编程方式使用。

支持的选项列表如下:

avioflags 标志 (输入/输出)

可能的值:

direct

减少缓冲。

probesize 整数 (输入)

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

max_probe_packets 整数 (输入)

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

packetsize 整数 (输出)

设置数据包大小。

fflags 标志

设置格式标志。某些格式对这些标志的实现有限。

输入文件的可能值:

discardcorrupt

丢弃损坏的数据包。

fastseek

启用快速但不准确的某些格式的查找。

genpts

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

igndts

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

ignidx

忽略索引。

nobuffer

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

nofillin

请勿填写可精确计算的数据包字段中的缺失值。

noparse

禁用 AVParsers,这需要+nofillin也。

sortdts

尝试通过 DTS 交错输出包。目前,仅适用于具有索引的 AVI。

输出文件的可能值:

autobsf

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

bitexact

仅编写与平台、构建和时间无关的数据。 这确保了文件和数据校验和的可重复性,并在不同平台之间一致。 其主要用途是用于回归测试。

flush_packets

立即写出数据包。

shortest

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

seek2any 整数 (输入)

如果设置为1,则允许在支持的情况下在解复用器级别跳转到非关键帧。默认值为0。

analyzeduration 整数 (输入)

指定分析输入的微秒数。更高的值将允许检测更精确的信息,但会增加延迟。默认值为5000000微秒=5秒。

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

设置解密密钥。

indexmem 整数 (输入)

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

rtbufsize 整数 (输入)

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

fdebug 标志 (输入/输出)

打印特定的调试信息。

可能的值:

ts
max_delay 整数 (输入/输出)

设置最大复用或解复用延迟(微秒)。

fpsprobesize 整数 (输入)

设置用于探测 fps 的帧数。

audio_preload 整数 (输出)

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

chunk_duration 整数 (输出)

为每个块设置微秒数。

chunk_size 整数 (输出)

为每个块设置字节数。

err_detect, f_err_detect 标志 (输入)

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

可能的值:

crccheck

验证嵌入的 CRC。

bitstream

检测比特流规范的偏差。

buffer

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

explode

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

careful

将违反规范且未见过的内容视为错误。

compliant

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

aggressive

将提供合理代码器不应做的内容视为错误。

max_interleave_delta 整数 (输出)

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

为了确保所有流都正确交错,libavformat将在实际写入任何数据包之前等待每个流至少有一个数据包。当某些流是"稀疏的"(即,连续数据包之间的间隙较大)时,这可能导致过度缓冲。

此字段指定数据包队列中的第一和最后数据包时间戳的最大差异,如果超出该值,libavformat将输出一个数据包,无论是否已为所有流排队一个数据包。

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

use_wallclock_as_timestamps 整数 (输入)

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

avoid_negative_ts 整数 (输出)

可能的值:

make_non_negative

移动时间戳以使它们成为非负值。 请注意,这仅影响领先的负时间戳,而不影响非单调负时间戳。

make_zero

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

auto (default)

启用移动以符合目标格式的要求。

disabled

禁用时间戳的移动。

启用移动时,所有输出时间戳均按相同数量移动。与未移动相比,音频、视频和字幕的不同步及相对时间戳差异都得以保留。

skip_initial_bytes 整数 (输入)

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

correct_ts_overflow 整数 (输入)

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

flush_packets 整数 (输出)

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

output_ts_offset 偏移量 (输出)

设置输出时间偏移。

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

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

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

format_whitelist 列表 (输入)

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

dump_separator 字符串 (输入)

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

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

指定最大流数量。这可用于拒绝对资源需求过高的文件,其原因是流数量太多。

skip_estimate_duration_from_pts 布尔值 (输入)

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

duration_probesize 整数 (输入)

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

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

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

可能的值:

very

严格符合较老、更严格版本的标准或参考软件。

strict

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

normal
unofficial

允许非官方扩展

experimental

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

2.1 格式流说明符

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

流说明符的具体语义由avformat_match_stream_specifier()声明的函数libavformat/avformat.h头文件中定义并记录在ffmpeg(1)手册中的(FFmpeg)Stream specifiers章节.

3 解复用器

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

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

使用`configure`选项可以禁用所有解复用器,--disable-demuxers并通过选项有选择地启用单个解复用器--enable-demuxer=DEMUXER或通过选项禁用它--disable-demuxer=DEMUXER.

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

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

3.1 aa

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

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

3.2 aac

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

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

3.3 apng

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

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

-ignore_loop 布尔值

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

-max_fps 整数

帧率的最大值,以每秒帧数表示。默认值0表示无限制。

-default_fps 整数

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

3.4 asf

高级系统格式解复用器。

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

-no_resync_search 布尔值

不要试图通过寻找某个可选的开始代码进行重新同步。

3.5 concat

虚拟拼接脚本解复用器。

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

文件中的时间戳经过调整后,第一个文件从0开始,每个后续文件从前一个文件结束的地方开始。注意,这是全局调整的,可能会导致如果所有流长度不完全相同则产生间隙。

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

每个文件的持续时间用于调整下一文件的时间戳:如果持续时间不正确(例如它基于比特率计算或文件被截断),可能会导致伪影。`dur`指令可用于重写每个文件中的持续时间。duration directive can be used to override the duration stored in each file.

3.5.1 语法

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

file 路径

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

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

ffconcat version 1.0

识别脚本类型和版本。

为使FFmpeg能自动识别格式,该指令必须准确无误地出现在脚本的第一行(无额外空格或字节顺序标记)。

duration 持续时间

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

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

inpoint 时间戳

文件的起点。当解复用器打开文件时,它会立即定位到指定的时间戳。定位是为了确保在起点所有流都能够成功呈现。

此指令最适合于帧内编码的编解码器,因为对于非帧内编码的大多数流来说,您通常会在指定起点之前获得额外数据包,并且解码内容很可能也包括在起点之前的帧。

对于每个文件,在文件起点之前的数据包时间戳将少于文件的计算开始时间戳(对于第一个文件为负值),并且文件的持续时间(如果未通过`dur`指令指定)将基于它们指定的起点减少。duration由于指定的起点之前可能有数据包,两个拼接文件之间的数据包时间戳可能会重叠。

Because of potential packets before the specified In point, packet timestamps may overlap between two concatenated files.

outpoint 时间戳

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

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

此指令最适合于帧内编码的编解码器和所有流紧密交错的格式。对于非帧内编码的大多数流,通常会在终点之后获得额外的带演示时间戳的包,因此解码内容可能还会包含终点之后的帧。如果您的流不是完全交错的,您可能无法在终点之前获取所有流的所有包,并且可能只能解码最早的流直至终点。

文件的持续时间(如果未通过`dur`指令指定)将基于它们指定的终点减少。duration directive) will be reduced based on their specified Out point.

file_packet_metadata 键=值

文件的数据包的元数据。指定的元数据将设置为每个文件包。您可以多次指定此指令以添加多个元数据条目。 此指令已弃用,请使用`key`和`value`代替。file_packet_meta instead.

file_packet_meta

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

option

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

stream

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

exact_stream_id 标识符

设置流的id。 如果给了此指令,则子文件中对应id的字符串将被使用。 这对于MPEG-PS(VOB)文件尤其有用,因为流的顺序不可靠。

stream_meta

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

stream_codec

流的编解码器。

stream_extradata 十六进制字符串

以十六进制编码的流额外数据。

chapter 标识符 开始 结束

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

3.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数据包元数据值,这些值分别是拼接输出中各个文件段的start_time和duration,以微秒表示。只有在根据拼接文件能够知道持续时间时才设置持续时间元数据。 默认值是0。

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

3.6 dash

动态自适应HTTP流媒体解复用器。

此解复用器展示清单中找到的所有AV流。 通过在AV流上设置丢弃标志,调用者可以决定应该接收哪些流。 每个流都反映来自idbandwidth的属性,<Representation>作为命名为 "id" 和 "variant_bitrate" 的元数据键。

3.6.1 选项

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

cenc_decryption_key

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

3.7 dvdvideo

DVD视频解复用器,由libdvdnav和libdvdread驱动。

可以直接将DVD标题,特别是顺序PGC导入到转换管道中。菜单资产,如背景视频或音频,也可以通过菜单的坐标(尽力而为)进行解复用。 目前不支持搜索。

接受块设备(DVD驱动器)、ISO文件和目录结构。 通过在这些输入之前加上``激活。-f dvdvideo in front of one of these inputs.

此解复用器没有任何类型的解密代码。使用加密的DVD时需自行处理,并且不应期望此方面的支持。

底层播放由libdvdnav处理,结构解析由libdvdread处理。 FFmpeg必须以支持GPL库的构建以及配置开关`--enable-libdvdnav and --enable-libdvdread.

您需要提供所需的“标题编号”或确切的PGC/PG坐标。 许多开源DVD播放器和工具可以帮助提供此信息。 如果未指定,解复用器将默认使用标题1,这对许多光盘有效。 但是,由于格式的灵活性,建议手动检查。许多磁盘可能会被奇怪或无效的头文件格式化。

如果输入是一个真实的DVD驱动器,请注意某些驱动器在读取磁盘的坏扇区时可能会静默失败,返回随机位,这实际上是损坏的数据。这在老化或劣化的磁盘上尤为明显。 检测损坏将需要第二次检查和完整性检查。这不是FFmpeg的问题。

3.7.1 背景

DVD-Video 不是传统意义上可以直接访问的线性容器格式。它允许对无头 VOB 文件中存储的复杂且精心复合的 MPEG-PS 流进行程序化播放。对最终用户而言,这些流简单地称为"标题",但实际逻辑播放顺序由标题中的一个或多个 "PGC"(程序组链)定义。PGC 又由多个 "PG"(程序)组成,这些是实际的视频片段(通常按顺序排列)。PGC 结构以及流布局和元数据存储在需要解析的 IFO 文件中。以更容易理解的术语来说,PGC 可以看作播放列表。

实际的 DVD 播放器依赖于通过菜单的用户 GUI 交互和内部虚拟机来驱动解复用方向。通常情况下,用户会通过菜单导航或者自动被重定向到自己选择的 PGC。在此过程中以及后续播放时,DVD 播放器的内部虚拟机还会维护一个状态并执行指令,从而在播放中跳转到不同的扇区。这就是为什么 libdvdnav 会被涉及,因为对光盘上的 MPEG-PS 数据块(VOBs)的线性读取在许多情况下不足以生成正确的顺序。

还有许多其他 DVD 结构(相当长的话题)这里将不讨论。特别是 NAV 数据包由此解复用器处理,用于构建精准的时间轴,但不会作为流输出。对于一个好的高层次理解,请参考:https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures

3.7.2 选项

这个解复用器接受以下选项:

title 整数

要播放的标题编号。如果pgcpg未设置,则必须设置。菜单不适用。默认值为 0(自动),目前仅选择第一个可用标题(标题 1)并通知用户相关影响。

chapter_start 整数

开始的章节或 PTT(标题的一部分)编号。菜单不适用。默认值为 1。

chapter_end 整数

结束的章节或 PTT(标题的一部分)编号。菜单不适用。默认值为 0,这是一个特殊值,表示在最后可能的章节处结束。

angle 整数

视频角度编号,本质上是指 VOBs 中交替帧组成的额外视频流。不适用于菜单。默认值为 1。

region 整数

用于播放的地区码。一些光盘可能会使用此默认播放在不同地区的特定角度。此选项不会影响实际 DVD 驱动器的地区码,如果作为输入使用。菜单不适用。默认值是 0,表示"全球"。

menu 布尔值

解复用菜单资产而不是导航标题。需要精确的菜单坐标(menu_lu, menu_vts, pgc, pg)。默认值为 false。

menu_lu 整数

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

menu_vts 整数

菜单所在的 VTS,或为 0 如果它是 VMG 菜单(根层级)。默认值为 0,VMG 菜单。

pgc 整数

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

pg 的值自动解析。

整数pgc开始播放的入口 PG,与title结合使用。设置的替代title。当前不支持章节标记。默认值是 0,从

preindex 的值自动解析,或者从菜单的开头(PG 1)开始。

布尔值pgcpg。菜单不适用。默认值是 0,即 false。

trim bool

布尔值

3.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> ...
    
  • Open only chapter 5 from title 1 from a given DVD structure:
    ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ...
    
  • 从给定的 DVD 结构中仅打开标题 1 的章节 5:
    ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
    

使用语言 1 从 VTS 1 的菜单解复用,从 PGC 1 开始,在 PG 1 开头:

Electronic Arts Multimedia 格式解复用器。

此格式被多款 Electronic Arts 游戏使用。

3.8.1 选项

merge_alpha 布尔值

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

3.9 imf

互操作主格式解复用器。

此解复用器会显示在 IMF 组成(Composition)中找到的音频和视频流,如SMPTE ST 2067-2.

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

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

3.10 flv, live_flv, kux

Adobe Flash 视频格式解复用器。

此解复用器用于解复用 FLV 文件和 RTMP 网络流。对于实时网络流,如果强制设置格式,可以使用 live_flv 选项而不是 flv 来处理时间戳不连续的情况。KUX 是 Youku 平台使用的 FLV 变体。

ffmpeg -f flv -i myfile.flv ...
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
-flv_metadata bool

根据 onMetaData 数组内容分配流。

-flv_ignore_prevtag bool

忽略先前标签值的大小。

-flv_full_metadata bool

输出 onMetadata 的所有上下文。

3.11 gif

动画 GIF 解复用器。

它接受以下选项:

min_delay

设置帧之间的最小有效延迟,以百分之一秒为单位。范围是 0 至 6000。默认值为 2。

max_gif_delay

设置帧之间的最大有效延迟,以百分之一秒为单位。范围是 0 至 65535。默认值是 65535(将近 11 分钟),规定的最大值。

default_delay

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

ignore_loop

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

例如,使用 overlay 滤镜,将一个无限循环的 GIF 放到另一个视频上:

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

Note that in the above example the shortest option for overlay filter is used to end the output video at the length of the shortest input file, which in this case is input.mp4在上例中,overlay 滤镜使用了最短选项,使输出视频的长度等于最短输入文件的长度,此处为

因为这个例子中的 GIF 无限循环。

HLS 解复用器

Apple HTTP Live Streaming 解复用器。

This demuxer presents all AVStreams from all variant streams. The id field is set to the bitrate variant index number. By setting the discard flags on AVStreams (by pressing ’a’ or ’v’ in ffplay), the caller can decide which variant streams to actually receive. The total bitrate of the variant that the stream belongs to is available in a metadata key named "variant_bitrate".

It accepts the following options:

live_start_index

启动实时流使用段索引(负值为结束的索引)。

prefer_x_start

#EXT-X-START 如果存在于 playlist 中,则优先使用,而不是 live_start_index。

allowed_extensions

’,’ separated list of file extensions that hls is allowed to access.

max_reload

尝试重新加载不足列表的最大次数。默认值为 1000。

m3u8_hold_counters

刷新但没有新增段时加载 m3u8 的最大次数。默认值为 1000。

http_persistent

Use persistent HTTP connections. Applicable only for HTTP streams. Enabled by default.

http_multiple

Use multiple HTTP connections for downloading HTTP segments. Enabled by default for HTTP/1.1 servers.

http_seekable

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

seg_format_options

Set options for the demuxer of media segments using a list of key=value pairs separated by :.

seg_max_retry

在错误时重新加载段的最大次数,用于网络错误时不希望跳过段。默认值是 0。

3.13 image2

图像文件解复用器。

此解复用器从一个图像文件列表中读取这些文件,这些文件由一个模式指定。模式的语法和含义由选项pattern_type.

The pattern may contain a suffix which is used to automatically determine the format of the images contained in the files.

The size, the pixel format, and the format of each image must be the same for all the files in the sequence.

This demuxer accepts the following options:

framerate

Set the frame rate for the video stream. It defaults to 25.

loop

pattern_type

pattern_type

选择用于解释指定文件名的模式类型。

pattern_type accepts one of the following values.

none

禁用模式匹配,因此视频将仅包含指定的图像。如果你不希望从多个图像制作序列,并且你的文件名可能包含特殊模式字符,你应该使用此选项。

sequence

Select a sequence pattern type, used to specify a sequence of files indexed by sequential numbers.

A sequence pattern may contain the string "%d" or "%0Nd", which specifies the position of the characters representing a sequential number in each filename matched by the pattern. If the form "%d0Nd" is used, the string representing the number in each filename is 0-padded and N is the total number of 0-padded digits representing the number. The literal character ’%’ can be specified in the pattern with the string "%%".

If the sequence pattern contains "%d" or "%0Nd", the first filename of the file list specified by the pattern must contain a number inclusively contained between start_number and start_number+start_number_range-1, and all the following numbers must be sequential.

例如模式 "img-%03d.bmp" 将匹配形如img-001.bmp, img-002.bmp, ..., img-010.bmp, etc.; the pattern "i%%m%%g-%d.jpg" will match a sequence of filenames of the form i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg等的文件名。

Note that the pattern must not necessarily contain "%d" or "%0Nd", for example to convert a single image file img.jpeg you can employ the command:

ffmpeg -i img.jpeg img.png
glob

选择一个 glob 通配符模式类型。

The pattern is interpreted like a glob() pattern. This is only selectable if libavformat was compiled with globbing support.

glob_sequence (不推荐使用,将被移除)

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

If your version of libavformat was compiled with globbing support, and the provided pattern contains at least one glob meta character among %*?[]{}在未转义的"%"之前,它会将模式解释为glob()模式,否则它会被解释为序列模式。

所有的glob特殊字符%*?[]{}必须以"%"作为前缀。要转义字面"%",你需要使用"%%"。

例如,该模式foo-%*.jpeg将匹配所有以"foo-"为前缀并以".jpeg"结尾的文件名,而foo-%?%?%?.jpeg将匹配所有以"foo-"为前缀,后跟三个字符,并以".jpeg"结尾的文件名。

这种模式类型已不推荐使用,建议改用globsequence.

默认值为glob_sequence.

pixel_format

设置读取图像时的像素格式。如果未指定,则从序列中的第一个图像文件猜测像素格式。

start_number

设置从图像文件模式匹配中开始读取的文件索引。默认值为0。

start_number_range

设置检查图像序列中第一个图像文件时的索引间隔范围,从start_number开始。默认值为5。

ts_from_file

如果设置为1,将会把帧时间戳设置为图像文件的修改时间。请注意,不保证时间戳的单调性:图像的顺序与未设置此选项时一致。默认值为0。 如果设置为2,将会把帧时间戳设置为图像文件的修改时间,并精确到纳秒。

video_size

设置读取图像时的视频尺寸。如果未指定,则从序列中的第一个图像文件中猜测视频尺寸。

export_path_metadata

如果设置为1,将向输入中找到的元数据添加两个额外字段,使其他滤镜也可以使用这些字段(参见drawtext滤镜示例)。默认值为0。下面描述了额外字段:

lavf.image2dec.source_path

对应于正在读取的输入文件的完整路径。

lavf.image2dec.source_basename

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

3.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" glob模式匹配的图像文件,即所有以".png"为后缀的文件:
    ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
    

3.14 libgme

Game Music Emu库是一个集合了视频游戏音乐文件仿真器的库。

https://bitbucket.org/mpyne/game-music-emu/overview了解更多信息。

它接受以下选项:

track_index

设置要解复用的曲目索引。解复用器只能导出一个曲目。 曲目索引从0开始。默认是选择第一个曲目。曲目数量作为tracks元数据条目导出。

sample_rate

设置导出曲目的采样率。范围是1000到999999。默认值是44100。

max_size (字节)

解复用器会将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小, 从而对可以读取的文件大小设置上限。 默认值为50 MiB。

3.15 libmodplug

基于ModPlug模块的解复用器

https://github.com/Konstanty/libmodplug

它将导出一个双通道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

应用Dolby 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。

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

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

3.17.1 选项

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

enable_drefs

启用外部曲目的加载,默认为禁用。 启用此功能在某些使用情况下可能会泄露信息。

use_absolute_path

允许通过绝对路径加载外部曲目,默认为禁用。 启用此功能会造成安全风险。仅在确定源为非恶意时应启用。

seek_streams_individually

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

ignore_editlist

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

advanced_editlist

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

ignore_chapters

不要解析章节。这包括GoPro的'HiLight'标签/时刻。请注意,仅在输入是可寻时才会解析章节。默认值为false。

use_mfra_for

对于可寻的分段输入,从媒体片段随机访问箱设置片段的起始时间戳(如果存在)。

可用的选项如下:

auto

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

dts

将mfra时间戳设置为DTS

pts

将mfra时间戳设置为PTS

0

不要使用mfra箱来设置时间戳

use_tfdt

对于分段输入,将片段的起始时间戳设置为baseMediaDecodeTime来自tfdt箱。 默认已启用,这将优先使用tfdt箱设置DTS。禁用以使用earliest_presentation_time来自sidx箱。 无论哪种情况,如果mfra箱中有可用时间戳并且use_mfra_for设置为pts或dts,则会使用该时间戳。

export_all

udta箱内导出未识别的箱作为元数据条目。箱类型的前四个字符设置为键。默认值为false。

export_xmp

将整个XMP_箱和uuid箱的内容导出为一个以键为xmp的字符串。请注意,如果export_all已设置且此选项未设置,则XMP_箱的内容仍会导出,但键为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箱中写入的非常高的样本差值可能有时是正常的,但通常是写入错误,或用于在当作有符号的32位整数处理时存储负值进行dts校正。此选项允许用户设置上限,超出该值的差值将被截断为1。如果在转换为int32时为负值,则用于调整后续的dts。

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

interleaved_read

在解复用器级别将多个轨道的包交织起来。对于交织不良的文件,这可以防止由于不同轨道包之间出现大间隙而导致的播放问题,因为MOV/MP4没有数据包放置要求。 然而,这可能会导致非常交织不良的文件出现过多的寻道问题,因为在轨道之间进行寻道,以禁用它可能会防止I/O问题,但会以播放为代价。

3.17.2 Audible AAX

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

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

3.18 mpegts

MPEG-2传输流解复用器。

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

resync_size

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

skip_unknown_pmt

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

fix_teletext_pts

使用PCR(程序时钟参考)计算的时间戳覆盖teletext数据包的PTS和DTS值,以程序的第一个未丢弃的teletext流为基准。默认值为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字节。

3.19 mpjpeg

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

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

strict_mime_boundary

默认实现对多部分MIME边界检测应用宽松标准,以防止与产生不正确MIME MJPEG流的众多现有终端产生回归问题。将此选项设置为1会对边界值进行更严格的检查。

3.20 rawvideo

原始视频解复用器。

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

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

framerate

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

pixel_format

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

video_size

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

例如,要读取一个rawvideo文件input.raw使用ffplay,假设像素格式为rgb24,视频大小为320x240,帧速率为每秒10帧,请使用以下命令:

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

3.21 rcwt

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

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

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

3.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用于相对时间戳的参考时间将取自脚本读取时的当前时间,脚本布局将根据该参考时间冻结。这意味着如果直接播放脚本,实际时间将与绝对时间戳匹配(精确到声音控制器的时钟精度),但如果用户暂停播放或跳转,所有时间将相应地偏移。

3.23 tedcaptions

用于TED演讲的JSON字幕.

TED不提供字幕的链接,但可以从页面中推测。文件tools/bookmarklets.html在FFmpeg源代码树中包含一个书签工具以显示它们。

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

start_time

设置TED演讲的开始时间(以毫秒为单位)。默认值为15000(15秒)。用于将字幕与可下载视频同步,因为它们包含一个15秒的介绍部分。

示例:将字幕转换为大多数播放器都可以理解的格式:

ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt

3.24 vapoursynth

Vapoursynth封装器。

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

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

max_script_size

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

3.25 w64

Sony Wave64音频解复用器。

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

max_size

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

3.26 wav

RIFF Wave音频解复用器。

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

max_size

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

4 多路复用器

多路复用器是FFmpeg中配置的元素,允许将多媒体流写入特定类型的文件。

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

可以使用配置选项禁用所有多路复用器--disable-muxers并通过选项选择性启用/禁用单个多路复用器--enable-muxer=多路复用器 / --disable-muxer=多路复用器.

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

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

4.1 原始多路复用器

本节涵盖原始多路复用器。它们接受符合指定编解码器的单一流。它们不存储时间戳或元数据。识别的扩展名与多路复用器名称相同,除非另有说明。

它包括以下多路复用器。用于从输出扩展名中自动选择多路复用器的媒体类型和最终扩展名也会显示。

ac3 音频

Dolby Digital,又名AC-3。

adx 音频

CRI Middleware ADX音频。

当输出可寻址且样本总数可存储在32位内时,此多路复用器将在第一个数据包的开头附近写出样本总数。

aptx 音频

aptX(适用于蓝牙的音频处理技术)

aptx_hd 音频 (aptxdh)

aptX HD(适用于蓝牙的音频处理技术)音频

avs2 视频 (avs, avs2)

AVS2-P2(音视频标准-第二代-第2部分)/ IEEE 1857.4视频

avs3 视频 (avs3)

AVS3-P2(音视频标准-第三代-第2部分)/ IEEE 1857.10视频

cavsvideo 视频 (cavs)

中国AVS(音视频标准-第一代)

codec2raw 音频

编码2音频。

未注册扩展名,因此必须提供格式名称,例如通过ffmpeg命令行工具。-f codec2raw.

data 任何

通用数据多路复用器。

此多路复用器接受包含任何类型的单一编解码器的流。输入流必须通过-map选项选择,与ffmpeg命令行工具一起使用。

未注册扩展名,因此必须提供格式名称,例如通过ffmpeg命令行工具。-f data.

dfpwm 音频 (dfpwm)

原始DFPWM1a(动态滤波脉冲宽度调制)音频多路复用器。

dirac 视频 (drc, vc2)

BBC Dirac视频。

Dirac Pro编解码器是一个子集,并被标准化为SMPTE VC-2。

dnxhd 视频 (dnxhd, dnxhr)

Avid DNxHD视频。

它被标准化为SMPTE VC-3。接受DNxHR流。

dts 音频

DTS一致声学(DCA)音频。

eac3 音频

Dolby Digital Plus,也称为增强AC-3。

evc 视频 (evc)

MPEG-5 Essential Video Coding (EVC) / EVC / MPEG-5部分1 EVC视频。

g722 音频

ITU-T G.722音频。

g723_1 音频 (tco, rco)

ITU-T G.723.1音频。

g726 音频

ITU-T G.726大端格式("左对齐")音频。

未注册扩展名,因此必须提供格式名称,例如通过ffmpeg命令行工具。-f g726.

g726le 音频

ITU-T G.726小端格式("右对齐")音频。

未注册扩展名,因此必须提供格式名称,例如通过ffmpeg命令行工具。-f g726le.

gsm 音频

全球移动通信系统音频。

h261 视频

ITU-T H.261视频。

h263 视频

ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263版本2视频。

h264 视频 (h264, 264)

ITU-T H.264 / MPEG-4部分10 AVC视频。如果是长度前缀模式,位流将被转换为Annex B语法。

hevc 视频 (hevc, h265, 265)

ITU-T H.265 / MPEG-H部分2 HEVC视频。如果是长度前缀模式,位流将被转换为Annex B语法。

m4v 视频

MPEG-4部分2视频。

mjpeg 视频 (mjpg, mjpeg)

运动JPEG视频。

mlp 音频

Meridian无损包装,也称为打包PCM。

mp2 音频 (mp2, m2a, mpa)

MPEG-1音频层II。

mpeg1video 视频 (mpg, mpeg, m1v)

MPEG-1部分2视频。

mpeg2video 视频 (m2v)

ITU-T H.262 / MPEG-2部分2视频。

obu 视频

AV1低开销开放比特流单元多路复用器。

所有流的时间单元中都将插入时间分隔符OBU。

rawvideo 视频 (yuv, rgb)

原始未压缩视频。

sbc 音频 (sbc, msbc)

蓝牙SIG低复杂度子带编解码器音频。

truehd 音频 (thd)

杜比TrueHD音频。

vc1 视频

SMPTE 421M / VC-1视频。

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

4.2 原始PCM多路复用器。

本节涵盖原始PCM(脉冲编码调制)音频多路复用器。

它们接受符合指定编解码器的单一流。它们不存储时间戳或元数据。识别的扩展名与多路复用器名称相同。

其中包括以下多路复用器。可选的其他扩展名用于从输出扩展名中自动选择多路复用器也显示在括号中。

alaw (al)

PCM A律编码。

f32be

PCM 32位浮点数大端。

f32le

PCM 32位浮点数小端。

f64be

PCM 64位浮点数大端。

f64le

PCM 64位浮点数小端。

mulaw (ul)

PCM μ律编码。

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。

4.3 MPEG-1/MPEG-2程序流多路复用器。

本节涵盖属于MPEG-1和MPEG-2系统系列的格式。

MPEG-1系统格式(也称为ISO/IEC 11172-1或MPEG-1节目流)已被采用为VCD(视频光盘)中存储媒体轨道的格式。

MPEG-2系统标准(也称为ISO/IEC 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'多路复用器相同,但有一些差异。

4.3.1 选项。

muxrate rate

设置用户定义的复用率,以比特/秒表示。如果未指定,则使用自动计算的复用率。默认值为0.

preload delay

设置初始解复用-解码延迟,以微秒为单位。默认值为500000.

4.4 MOV/MPEG-4/ISOMBFF多路复用器。

本节涵盖属于QuickTime / MOV系列的格式,包括MPEG-4第14部分格式和ISO基础媒体文件格式(ISOMBFF)。这些格式基于ISO基础媒体文件格式(ISOMBFF)共享一个通用结构。

MOV格式最初是为Apple QuickTime使用而开发的。后来被用作MPEG-4第1部分(后来为第14部分)格式的基础,也称为ISO/IEC 14496-1。然后该格式被推广为ISOMBFF,也称为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 类似,但仅包含音频流,通常用于苹果 iPod 设备。

ismv

Microsoft IIS(互联网信息服务)平滑流媒体音频/视频(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 设备上播放文件。

4.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,它必须被满足才能使任何其他条件生效。

4.4.2 选项

brand brand_string

覆盖主要品牌。

empty_hdlr_name bool

启用以跳过在hdlrbox 中写入名称。默认值是false.

encryption_key key

以十六进制格式设置媒体加密密钥。

encryption_kid kid

以十六进制格式设置媒体加密密钥标识符。

encryption_scheme scheme

配置加密方案,可选值是‘none’,和‘cenc-aes-ctr

frag_duration duration

创建片段,这些片段的持续时间是duration微秒。

frag_interleave number

在片段内交织样本(最大连续样本数,数值越低交织越紧,但开销更大。默认值为0

frag_size size

创建包含最多size字节有效负载数据的片段。

iods_audio_profile profile

指定音频配置文件 atom 的 iods 数字(从 -1 到 255),默认值是-1

iods_video_profile profile

指定视频配置文件 atom 的 iods 数字(从 -1 到 255),默认值是-1

ism_lookahead num_entries

为 ISM 文件指定前视条目数(从 0 到 255),默认值是0

min_frag_duration duration

不创建持续时间短于duration微秒的片段。

moov_size bytes

为 moov atom 在文件的开头预留空间,而不是将 moov atom 放置到文件的末尾。如果预留的空间不足,复用将失败。

mov_gamma gamma

为 gama atom 指定伽马值(作为小数值,从 0 到 10),默认值为0.0,必须与+ movflags

movflags flags 一起设置。

设置各种复用开关。可以使用以下标志:

cmaf

写入 CMAF(共用媒体应用格式)兼容的分片 MP4 输出。

dash

写入 DASH(基于 HTTP 的动态自适应流媒体)兼容的分片 MP4 输出。

default_base_moof

与‘omit_tfhd_offset’标志类似,此标志避免在 tfhd atom 中写入绝对 base_data_offset 字段,而是使用新的 default-base-is-moof 标志代替。此标志从 14496-12:2012 起新增。这可以在某些情况下使片段更容易解析(避免基于前一个轨道片段的隐式结束来计算轨道片段位置)。

delay_moov

延迟写入初始 moov,直到切割第一个片段或第一个片段刷新。

disable_chpl

禁用 Nero 章节标记(chpl atom)。通常情况下,同时会将 Nero 章节和 QuickTime 章节轨道写入文件。启用此选项后,将仅写入 QuickTime 章节轨道。Nero 章节可能会导致文件在某些标记程序(如 mp3Tag 2.61a 和 iTunes 11.3)的重新处理过程中失败,其他版本也可能受到影响。

faststart

运行第二次通过,将索引(moov atom)移到文件的开头。此操作可能需要一些时间,并且在某些情况下可能无法使用,例如分片输出,因此默认情况下未启用。

frag_custom

允许调用方通过调用av_write_frame(ctx, NULL)手动选择何时切割片段,以写入目前为止写入的数据包的片段。(这仅对集成 libavformat 的其他应用程序有用,而不是从ffmpeg.)

frag_discont

信号指示下一个片段不连续于较早的片段。

frag_every_frame

每帧切割片段。

frag_keyframe

在每个视频关键帧开始一个新的片段。

global_sidx

在文件开头写入一个全局 sidx 索引。

isml

创建一个实时平滑流媒体源(推送到发布点)。

negative_cts_offsets

启用 CTTS box 的版本 1,在该版本中 CTS 偏移可以为负数。这使得初始样本的 DTS/CTS 值为零,并减少某些情况(如具有 B 帧的视频轨道)对编辑列表的需求。此外,简化了与 DASH-IF 互操作性指南的符合性。

在写入‘ismv’(平滑流媒体)文件时,隐式设置此选项。

omit_tfhd_offset

不要在 tfhd atoms 中写入任何绝对 base_data_offset。这避免了将片段与文件/流中的绝对字节位置绑定。

prefer_icc

如果写入 colr atom,则优先使用存在于流数据包侧数据中的 ICC 配置文件。

rtphint

将 RTP 暗示轨道添加到输出文件。

separate_moof

为每个轨道单独写入一个 moof(电影片段) atom。通常情况下,所有轨道的数据包都写入单个 moof atom(效率稍高),但启用此选项后,复用器为每个轨道写入一个 moof/mdat 对,使轨道更容易分离。

skip_sidx

跳过写入 sidx atom。如果由于 sidx atom 导致的比特率开销较高,此选项可用于 sidx atom 不是强制要求的情况。当启用‘global_sidx’标志时,此选项将被忽略。

skip_trailer

跳过为分片文件写入 mfra/tfra/mfro 尾部。

use_metadata_tags

使用 mdta atom 写入元数据。

write_colr

即使颜色信息未指定,也写入 colr atom。此标志是实验性的,可能会重命名或更改,请勿在脚本中使用。

write_gama

写入已弃用的 gama atom。

hybrid_fragmented

为恢复性——作为一个分片文件写入输出文件。这允许在写入过程中读取中间文件(特别是,如果写入过程未正常中止)。写入完成时,文件将转换为常规的非分片文件,这更兼容且允许更容易和更快速地寻找。

如果写入中止,中间文件可以手动重复用以获取已写入的非分片文件。

movie_timescale scale

设置在电影头 atom (mvhd) 中写入的时间刻度。范围是 1 到 INT_MAX。默认值是1000.

rtpflags flags

将 RTP 暗示轨道添加到输出文件。

可以使用以下标志:

h264_mode0

为 RTP 中的 H.264 使用模式 0。

latm

对于 AAC,使用 MP4A-LATM 封装而不是 MPEG4-GENERIC。

rfc2190

对于 H.263,使用 RFC 2190 封装而不是 RFC 4629。

send_bye

完成时发送 RTCP BYE 数据包。

skip_rtcp

不发送 RTCP 发送者报告。

skip_iods bool

跳过写入 iods atom(默认值是true)

use_editlist bool

使用编辑列表(默认值是auto)

use_stream_ids_as_track_ids bool

使用流 id 作为轨道 id(默认值是false)

video_track_timescale scale

为视频轨道设置时间刻度。范围是0到 INT_MAX。如果设置为0,时间刻度根据原生流时间基自动设置。默认值是0.

write_btrt bool

强制或禁用在轨道的 stsd box 中写入比特率框。该框包含轨道的解码缓冲大小(以字节为单位)、最大比特率和平均比特率。如果无法计算这些值,该框将被跳过。默认值是-1auto,仅在 MP4 模式下写入该框。

write_prft option

用指定的时间源为 PRFT 框内的 NTP 字段写入制作者时间参考框(PRFT)。值设置为‘wallclock’表示时间源为墙钟时间,设置为‘pts’表示时间源为输入数据包的 PTS 值。

write_tmcd bool

指定on强制写入时间码轨道,off禁用它,auto仅对 mov 和 MP4 输出写入时间码轨道(默认值)。

设置值为‘pts’仅适用于实时编码使用场景,其中 PTS 值在源端设置为墙钟时间。例如,使用 Decklink 捕获源的编码场景,其中video_ptsaudio_pts设置为‘abs_wallclock’.

4.4.3 示例

  • 实时推送平滑流媒体内容到 IIS 的发布点,使用‘ismv’复用器,并使用ffmpeg:
    ffmpeg -re <正常的输入/转码选项> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
    

4.5 a64

A64 Commodore 64 视频复用器。

此复用器接受单个a64_multia64_multi5编解码器视频流。

4.6 ac4

原始 AC-4 音频复用器。

此复用器接受单个ac4音频流。

4.6.1 选项

write_crc bool

启用时,为每个数据包写入 CRC 校验到输出文件,默认值是false

4.7 adts

音频数据传输流复用器。

它接受单个 AAC 流。

4.7.1 选项

write_id3v2 bool

启用在流开始处写入 ID3v2.4 标签。默认值为禁用。

write_apetag bool

启用在流结束处写入 APE 标签。默认值为禁用。

write_mpeg2 bool

启用将 ADTS 数据帧头中的 MPEG 版本位设置为 1,表示 MPEG-2。默认值为 0,表示 MPEG-4。

4.8 aea

MD STUDIO 音频复用器。

此复用器接受单个 ATRAC1 音频流,具有一个或两个频道和 44100Hz 的采样率。

由于 AEA 支持存储曲目标题,此复用器还会将流的元数据中的标题写入容器。

4.9 aiff

音频交换文件格式复用器。

4.9.1 选项

write_id3v2 bool

启用 ID3v2 标签写入(设置为 1)。默认值为 0(禁用)。

id3v2_version bool

选择要写入的 ID3v2 版本。目前仅支持版本 3 和 4(即 ID3v2.3 和 ID3v2.4)。默认是版本 4。

4.10 alp

High Voltage Software 的 Lego Racers 游戏音频复用器。

它接受单个 ADPCM_IMA_ALP 流,通道数不超过 2,且采样率不高于 44100 Hz。

扩展名:tun, pcm

4.10.1 选项

type type

设置文件类型。

type接受以下值:

tun

将文件类型设置为音乐。必须具有 22050 Hz 的采样率。

pcm

将文件类型设置为 sfx。

auto

根据输出文件扩展名设置文件类型。.pcm结果是pcm否则文件类型是tun被设置。(默认值)

4.11 amr

3GPP AMR(自适应多速率)音频复用器。

它接受包含AMR NB流的单一音频流。

4.12 amv

AMV(动作媒体视频)格式复用器。

4.13 apm

育碧Rayman 2 APM音频复用器。

它接受一个ADPCM IMA APM音频流。

4.14 apng

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

它接受一个APNG视频流。

4.14.1 选项

final_delay delay

强制在每次重复的最后一帧之后延迟,以秒为单位。默认值为0.0.

plays repetitions

指定内容播放的次数,0导致无限循环,用1则没有循环。

4.14.2 示例

  • 使用ffmpeg生成一个具有2次重复并在第一次重复后延迟半秒的APNG输出:
    ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
    

4.15 argo_asf

Argonaut Games ASF音频复用器。

它接受一个ADPCM音频流。

4.15.1 选项

version_major version

覆盖文件主版本,指定为一个整数,默认值为2

version_minor version

覆盖文件次版本,指定为一个整数,默认值为1

name name

将文件名嵌入文件中,如果未指定,则使用输出文件名。名称被截断为8个字符。

4.16 argo_cvg

Argonaut Games CVG音频复用器。

它接受一个单通道22050Hz的ADPCM音频流。

Theloopandreverb选项在标头中设置相应的标志,可以稍后检索以相应地处理音频流。

4.16.1 选项

skip_rate_check bool

跳过采样率检查(默认是false)

loop bool

设置循环标志(默认是false)

reverb boolean

设置混响标志(默认是true)

4.17 asf, asf_stream

高级/活动系统(或流)格式音频复用器。

asf_stream’ 变体应选择用于流媒体。

请注意,Windows Media Audio(wma)和Windows Media Video(wmv)也使用此复用器。

4.17.1 选项

packet_size size

将复用器数据包大小设置为字节数。通过调整此设置,您可以减少数据碎片化或复用器开销,具体取决于您的来源。默认值为3200,最小值为100,最大值为64Ki.

4.18 ass

ASS/SSA(SubStation Alpha)字幕复用器。

它接受一个ASS字幕流。

4.18.1 选项

ignore_readorder bool

立即写入对话事件,即使它们是无序的,默认值是false,否则它们将被缓存直到找到预期时间事件。

4.19 ast

AST(音频流)复用器。

此格式用于在一些Nintendo Wii游戏中播放音频。

它接受一个音频流。

Theloopstartandloopend选项可用于定义文件的一个部分,以供播放器遵守这些选项循环播放。

4.19.1 选项

loopstart start

指定循环开始位置,以毫秒为单位,从-1INT_MAX,如果设置了-1则未指定循环(默认值为-1),且loopend值被忽略。

loopend end

指定循环结束位置,以毫秒为单位,从0INT_MAX,默认值为0,如果设置了0它假定为总流时长。

4.20 au

SUN AU音频复用器。

它接受一个音频流。

4.21 avi

音频视频交错复用器。

AVI是一种由微软开发的专有格式,后来通过Open DML规格正式指定。

由于播放器实现的不同,可能需要设置一些选项以确保生成的输出可以在目标播放器上正确播放。

4.21.1 选项

flipped_raw_rgb bool

如果设置为true,为原始RGB位图存储正高度,表示位图是从下往上存储的。请注意,此选项不会翻转位图,必须提前手动完成,例如通过‘vflip’滤镜。默认值为false并表示位图从上往下存储。

reserve_index_space size

为文件标头内的每个流的OpenDML主索引预留指定字节数空间。默认情况下,如果第一个主索引中没有剩余空间,额外的主索引将嵌入到数据包中,并链接在一起形成索引链。此索引结构可能会在某些用例中引起问题,例如完全依赖于OpenDML索引规范的第三方软件或文件定位速度慢的情况。在文件标头中预留足够的索引空间可以避免这些问题。

所需的索引空间取决于输出文件的大小,每GB应约为16字节。当忽略此选项或将其设置为零时,将猜测必要的索引空间。

默认值为0.

write_channel_mask bool

将通道布局掩码写入音频流标头中。

此选项默认启用。在特定场景中,例如将多个音频流合并为一个以兼容仅支持AVI中单一音频流的软件时,禁用通道掩码可能是有用的(参见(ffmpeg-filters)在ffmpeg-filters手册中的"amerge"部分。).

4.22 avif

AV1(开放媒体联盟视频编码1)图像格式复用器。

这个复用器存储使用AV1编解码器编码的图像。

它接受一个或两个视频流。如果提供两个视频流,第二个视频流应包含存储有alpha蒙版的单平面。

如果提供多个图像,生成的输出将被视为动画AVIF,并且可以通过loop选项指定循环次数。

这是基于开放媒体联盟的规范,URL为https://aomediacodec.github.io/av1-avif.

4.22.1 选项

loop count

动画AVIF循环的次数,0指定无限循环,默认值为0

movie_timescale timescale

设置写入电影标头框中的时基(mvhd)。范围为1到INT_MAX。默认值为1000.

4.23 avm2

ShockWave Flash(SWF)/ ActionScript虚拟机2(AVM2)格式复用器。

它接受一个音频流,一个视频流或两者。

4.24 bit

G.729(.bit)文件格式复用器。

它接受一个G.729音频流。

4.25 caf

苹果CAF(核心音频格式)复用器。

它接受一个音频流。

4.26 codec2

Codec2音频复用器。

它接受一个codec2音频流。

4.27 chromaprint

Chromaprint指纹复用器。

要启用此滤镜的编译,您需要使用以下配置FFmpeg。--enable-chromaprint.

此复用器向Chromaprint库提供音频数据,为提供的音频数据生成指纹。见:https://acoustid.org/chromaprint

它接受一个最多2通道的本机字节序16位原始音频流。

4.27.1 选项

algorithm version

选择用于指纹算法的版本。范围为04。版本3启用静音检测。默认值为1.

fp_format format

指纹的输出格式。接受以下选项:

base64

Base64压缩指纹(默认)

compressed

二进制压缩指纹

raw

二进制原始指纹

silence_threshold threshold

检测静音的阈值。范围从-132767,其中-1禁用静音检测。只有使用算法版本3时才可使用静音检测。

对AcoustID服务的使用必须禁用静音检测。默认值为-1.

4.28 crc

CRC(循环冗余校验)复用器。

此复用器计算并打印所有输入音频和视频帧的Adler-32 CRC。默认情况下,音频帧在计算CRC之前被转换为有符号16位原始音频,视频帧被转换为原始视频。

复用器的输出由一行组成,格式为: CRC=0xCRC,其中CRC是一个用0填充到8位的十六进制数字,包含所有解码输入帧的CRC。

另见framecrc复用器。

4.28.1 示例

  • 使用ffmpeg来计算输入的CRC,并将其存储在文件中out.crc:
    ffmpeg -i INPUT -f crc out.crc
    
  • 使用ffmpeg通过以下命令将CRC打印到stdout:
    ffmpeg -i INPUT -f crc -
    
  • 您可以通过ffmpeg通过指定音频和视频编解码器和格式来选择每帧的输出格式。例如,要计算转换为PCM无符号8位音频并转换为MPEG-2视频的视频输入的CRC,可使用以下命令:
    ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
    

4.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等等。

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

将一个适配集标记为包含用于用于Trick Mode的流,参考的适配组。

一些示例值如下,供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 type

设置DASH段文件的类型。

可能的值:

auto

DASH段文件的格式将基于流编解码器选取。这是默认模式。

mp4

DASH段文件将为ISOBMFF/MP4格式。

webm

DASH段文件将为WebM格式。

extra_window_size size

设置manifest外保留的最大段数,在移除文件之前。

format_options options_list

:-分隔的键值对的列表设置容器格式(mp4/webm)选项。包含:特殊字符的值必须进行转义。

frag_duration duration

设置段内片段的时长,以秒为单位。也可以设置小数值。

frag_type 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_opts

指定一个由:-分隔的键值选项列表,传递给底层HTTP协议。仅适用于HTTP输出。

http_persistent 布尔值

使用持久性HTTP连接。仅适用于HTTP输出。

http_user_agent user_agent

覆盖HTTP头中的User-Agent字段。仅适用于HTTP输出。

ignore_io_errors 布尔值

忽略打开和写入期间的IO错误。适用于网络输出长时间运行。这默认是禁用的。

index_correction 布尔值

启用或禁用段索引校正逻辑。仅适用当use_template启用且use_timeline禁用时。这默认是禁用的。

启用该逻辑后,它将监控段索引的流动。如果流的段索引值未在预期的实时位置,则逻辑将校正该索引值。

通常,此逻辑在实时流媒体使用场景中是需要的。在长时间运行的流媒体中,网络带宽波动很常见。每次波动可能会导致段索引落后于预期的实时位置。

init_seg_name init_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选项。这是一个实验性功能。

注意:这不是Apple版本的LHLS。请参阅https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis

master_m3u8_publish_rate segment_intervals_count

每隔指定的分段间隔重复发布主播放列表。

max_playback_rate rate

设置用于自动调整客户端在正常播放期间的延迟和缓冲占用的最大播放速率。

media_seg_name segment_name

用于媒体片段的DASH模板名称。默认为chunk-stream$RepresentationID$-$Number%05d$.$ext$. $ext$将替换为片段格式特定的文件扩展名。

method method

使用指定的HTTP方法来创建输出文件。通常设置为PUTPOST.

min_playback_rate rate

设置用于自动调整客户端在正常播放期间的延迟和缓冲占用的最小播放速率。

mpd_profile flags

设置一个或多个MPD清单配置文件。

可能的值:

dash

MPEG-DASH ISO基础媒体文件格式实时配置文件

dvb_dash

DVB-DASH配置文件

默认值为dash.

remove_at_exit 布尔值

启用或禁用完成后移除所有片段。这默认是禁用的。

seg_duration duration

按秒(可以设置小数值)设置片段长度。此值在use_template选项启用且use_timeline选项禁用时视为平均片段持续时间,而在所有其他情况下则视为最小片段持续时间。

默认值为5.

single_file 布尔值

启用或禁用将所有片段存储在一个文件中,并通过字节范围进行访问。这默认是禁用的。

可以使用single_file_name选项指定单个文件名。如果未指定,则假定使用清单文件的基本名称以及输出格式扩展名。

single_file_name file_name

用于清单baseURL元素的DASH模板名称。意味着single_file选项设置为true。在模板中,$ext$将替换为片段格式特定的文件扩展名。

streaming 布尔值

启用或禁用输出的分块流模式。在分块流模式中,每帧将是一个moof片段,构成一个分块。这默认是禁用的。

target_latency target_latency

为服务设置目标延迟时间(可以设置小数值)。仅适用于当streamingwrite_prft选项启用时。这是一个信息性的字段,客户端可以使用它来测量服务的延迟。

timeout timeout

设置用于套接字I/O操作的超时时间,以秒为单位(可以设置小数值)。仅适用于HTTP输出。

update_period 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 size

设置保留在清单中的最大片段数,丢弃最旧的片段。这对于实时流媒体很有用。

如果值为0,则所有片段都会保留在清单中。默认值为0.

write_prft write_prft

在支持的流上写入生产者参考时间元素。这还启用在底层复用器中写入prft盒。仅适用于当utc_url选项启用时。默认设置为auto,在这种情况下,复用器会尝试仅在需要的模式下启用此功能。

4.29.2 示例

使用实时输入源生成DASH输出ffmpeg.

从输入文件生成两个多媒体流,都包含通过‘libx264’编码的视频流和通过‘libfdk_aac’编码的音频流。第一个多媒体流包含800k码率的视频和默认速率的音频,第二个包含缩放为320x170像素的300k视频以及重新采样为22005 Hz的音频。

选项仅保留最后5个片段,每片段默认为5秒。window_size option keeps only the latest 5 segments with the default duration of 5 seconds.

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

4.30 daud

D-电影音频复用器。

它接受一个由‘pcm_24daud’编码并重新采样到96000 Hz的6声道音频流。

4.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个样本)的包。

4.31 dv

DV(数字视频)复用器。

它接受正好一个‘dvvideo’视频流和最多两个‘pcm_s16’音频流。更多约束由视频属性定义,这些属性必须符合DV视频支持的配置文件以及帧速率。

4.31.1 示例

使用ffmpeg转换输入:

ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv

4.32 ffmetadata

FFmpeg元数据复用器。

此复用器将流元数据写入‘ffmetadata’格式。

参见(ffmpeg-formats)元数据章节了解有关此格式的信息。

4.32.1 示例

使用ffmpeg从输入文件提取元数据到metadata.ffmeta文件中,格式为‘ffmetadata’:

ffmpeg -i INPUT -f ffmetadata metadata.ffmeta

4.33 fifo

FIFO(先进先出)复用器。

fifo’伪复用器允许通过使用先进先出队列分离编码和复用,并在单独的线程中运行实际复用器。

这与tee复用器结合使用尤其有用,并可用于以不同的可靠性/写入速度/延迟发送数据到多个目标。

目标复用器可以从输出名称中选择,也可以通过fifo_format选项指定。

当队列满了或输出失败(例如如果一个包无法写入到输出)时,‘fifo’复用器的行为是可选择的:

  • 输出可以用基于实时或处理流时间的可配置的延迟在透明地重新启动。
  • 在临时故障期间可以阻塞编码,或者在FIFO队列满的情况下透明地丢弃包以继续处理。

API用户应意识到回调函数(interrupt_callback, io_openio_close)在其AVFormatContext使用时必须是线程安全的。

4.33.1 选项

attempt_recovery 布尔值

如果发生故障,尝试恢复输出。这在与网络输出一起使用时尤其有用,因为它能够透明地重新开始流媒体。默认情况下,此选项设置为false.

drop_pkts_on_overflow 布尔值

如果设置为true,当FIFO队列满的情况下,包将被丢弃而不是阻塞编码器。这允许继续流媒体而不延迟输入,但代价是省略部分流媒体。默认情况下,此选项设置为false,所以在这种情况下编码器将被阻塞直到复用器处理一些包且没有丢失包。

fifo_format format_name

指定格式名称。如果无法从输出名称后缀中猜测出来,这会非常有用。

format_opts options

为底层复用器指定格式选项。复用器选项可以用包含=对的列表并以‘:’分隔指定。

max_recovery_attempts count

设置连续不成功恢复尝试的最大次数。在达到该次数后,输出将永久失败。默认情况下,此选项设置为0(无限制)。

queue_size 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 duration

在上一次不成功的恢复尝试后指定下一次恢复尝试时的等待时间(以秒为单位)。默认值为5.

restart_with_keyframe 布尔值

指定在从队列溢出或故障中恢复后是否等待关键帧。此选项默认设置为false

timeshift duration

缓冲指定数量的数据包并延迟写入输出。请注意,queue_size选项的值必须足够大以存储用于时移的数据包。在输入结束时,fifo缓冲区以实时速度刷新。

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

4.34 film_cpk

Sega film (.cpk)复用器。

此格式曾作为几款Sega游戏的内部格式使用。

有关Sega film文件格式的更多信息,请访问http://wiki.multimedia.cx/index.php?title=Sega_FILM.

它最多接受一个‘cinepak’或原始视频流,并且最多一个音频流。

4.35 影片条

Adobe Filmstrip 多路复用器。

此格式由一些Adobe工具用于存储生成的影片条导出。它接受单一原始视频流。

4.36 FITS

灵活图像传输系统(FITS)多路复用器。

此图像格式用于存储天文数据。

有关格式的更多信息,请访问https://fits.gsfc.nasa.gov.

4.37 FLAC

原始 FLAC 音频多路复用器。

此多路复用器仅接受一个FLAC音频流。此外,可以添加带有属性‘attached_pic’.

4.37.1 选项

write_header 布尔类型

如果设置为true,则写入文件头,默认值为true

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

4.38 FLV

Adobe Flash 视频格式多路复用器。

4.38.1 选项

flvflags 标志

可能的值:

aac_seq_header_detect

根据音频流数据放置AAC序列头。

no_sequence_end

禁用序列结束标记。

no_metadata

禁用元数据标记。

no_duration_filesize

在流结束时禁用元数据中为零的持续时间和文件大小(用于不可寻址的实时流)。

add_keyframe_index

用于便于寻址;特别是针对HTTP伪流。

4.39 framecrc

每数据包CRC(循环冗余校验)测试格式。

此多路复用器计算并打印每个音频和视频数据包的Adler-32 CRC。默认情况下,音频帧会转换为有符号16位原始音频,视频帧转换为原始视频后再计算CRC。

多路复用器的输出由每个音频和视频数据包的以下形式的行组成:

流索引, 数据包解码时间戳, 数据包显示时间戳, 数据包持续时间, 数据包大小, 0xCRC

CRC是一个用零填充到8位的十六进制数字,包含数据包的CRC。

4.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多路复用器。

4.40 framehash

每数据包哈希测试格式。

此多路复用器计算并打印每个音频和视频数据包的加密哈希。这可用于逐数据包的相等性检查,而无需对每个数据包逐一进行二进制比较。

默认情况下,音频帧会转换为有符号16位原始音频,视频帧会转换为原始视频后计算哈希,但显式转换为其他编解码器的输出也可使用。 默认情况下使用SHA-256加密哈希函数,但支持其他几种算法。

多路复用器的输出由每个音频和视频数据包的以下形式的行组成:

流索引, 数据包解码时间戳, 数据包显示时间戳, 数据包持续时间, 数据包大小, 哈希

哈希是一个表示计算所得数据包哈希的十六进制数字。

hash 算法

使用由字符串指定的加密哈希函数算法。 支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32adler32.

4.40.1 示例

要计算INPUT中音频和视频帧的SHA-256哈希,将其转换为原始音频和视频数据包,并存储到文件中out.sha256:

ffmpeg -i INPUT -f framehash out.sha256

要将使用MD5哈希函数的信息打印到标准输出,请使用以下命令:

ffmpeg -i INPUT -f framehash -hash md5 -

另请参阅哈希多路复用器。

4.41 framemd5

每数据包MD5测试格式。

这是framehash多路复用器的一个变体。与该多路复用器不同,它默认为使用MD5哈希函数。

4.41.1 示例

要计算INPUT中音频和视频帧的MD5哈希,将其转换为原始音频和视频数据包,并存储到文件中out.md5:

ffmpeg -i INPUT -f framemd5 out.md5

要将信息打印到标准输出,请使用以下命令:

ffmpeg -i INPUT -f framemd5 -

另请参阅framehashmd5多路复用器。

4.42 gif

动画GIF多路复用器。

注意,GIF格式有一个非常大的时间基:两帧之间的延迟因此不能小于1毫秒。

4.42.1 选项

loop 布尔类型

设置输出循环的次数。使用-1表示不循环,0表示无限循环(默认)。

final_delay 延迟

强制设置最后一帧后的延迟(以百分之一秒为单位)。每帧 接续有一个到下一帧的延迟。默认值为-1,这是一个特殊值,告诉多路复用器重用前一个延迟。在循环的情况下,您可能希望自定义此值以标记暂停。

4.42.2 示例

编码一个循环10次,循环之间延迟5秒的GIF:

ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif

注意1:如果您希望将帧提取为单独的GIF文件,需要强制使用image2多路复用器:

ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"

4.43 gxf

通用交换格式(GXF)多路复用器。

GXF由Grass Valley Group开发,然后被SMPTE标准化为SMPTE360M,并在SMPTE RDD 14-2007中扩展以包含高清晰度视频分辨率。

它最多接受一个带有‘mjpeg’、‘mpeg1video’、‘mpeg2video’或‘dvvideo’编解码器的视频流,并带有‘512x480’或‘608x576’分辨率的多个48000Hz码率和‘pcm16_le’.

4.44 hash

哈希测试格式。

此多路复用器计算并打印所有输入音频和视频帧的加密哈希。这可以用于相等性检查,而不用进行完整的二进制比较。

默认情况下,音频帧会转换为有符号16位原始音频,视频帧转换为原始视频后计算哈希,但显式转换为其他编解码器的输出也可使用。 时间戳被忽略。它默认使用SHA-256加密哈希函数,但支持其他几种算法。

多路复用器的输出由以下形式的单行组成:算法=哈希,其中算法是一个表示所用哈希函数的简短字符串,而哈希是一个表示计算所得哈希的十六进制数字。

hash 算法

使用由字符串指定的加密哈希函数算法。 支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32adler32.

4.44.1 示例

要计算输入转换为原始音频和视频后的SHA-256哈希,并将其存储到文件中out.sha256:

ffmpeg -i INPUT -f hash out.sha256

要将MD5哈希打印到标准输出,请使用以下命令:

ffmpeg -i INPUT -f hash -hash md5 -

另请参阅framehash多路复用器。

4.45 hds

HTTP动态流(HDS)多路复用器。

HTTP动态流(HDS)是一种由Adobe开发的自适应比特率流方法。 HDS通过HTTP连接传输MP4视频内容。HDS既可用于点播流,也可用于实时流。

此多路复用器会在指定目录中创建一个.F4M(Adobe Flash媒体清单文件)清单,每个流一个.abst(Adobe引导文件),以及段文件。

这些文件需要通过HTTPS被HDS播放器访问,才能在生成的流中播放。

4.45.1 选项

extra_window_size 整数

清单外保留的片段数,超过后从磁盘删除

min_frag_duration 微秒

最小片段持续时间(以微秒为单位),默认值为1秒(10000000)

remove_at_exit 布尔类型

设置为true

window_size 整数

清单中保留的片段数,如果设置为非0的值。默认情况下所有片段保留在输出目录中

4.45.2 示例

使用ffmpeg实时速率生成HDS文件到output.hds目录:

ffmpeg -re -i INPUT -f hds -b:v 200k output.hds

4.46 hls

苹果HTTP直播流(HLS)多路复用器,根据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,等等。

另请参阅segment多路复用器,它提供了一个更通用和灵活的分段实现,并可用于进行HLS分段。

4.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 选项列表

使用键值对通过':'分隔的列表格式设置输出选项。包含:特殊字符的值必须进行转义。

hls_key_info_file 密钥信息文件

使用密钥信息文件中的信息进行分段加密。密钥信息文件的第一行指定写入播放列表的密钥URI。密钥URL用于在播放时访问加密密钥。第二行指定用于在加密过程中获取密钥的密钥文件路径。密钥文件以二进制格式作为一个包含16个字节的数组读取。可选的第三行指定十六进制的初始化向量(IV),用于替代用于加密的分段序列号(默认使用序列号)。更改密钥信息文件将导致使用新密钥/IV的分段加密,并在播放列表中为新密钥URI/IV创建条目,如果hls_flags periodic_rekey启用了。

密钥信息文件格式:

密钥URI
密钥文件路径
IV (optional)

示例密钥URIs:

http://server/file.key
/path/to/file.key
file.key

示例密钥文件路径:

file.key
/path/to/file.key

示例IV:

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 Transport Stream格式。这与所有版本的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

如果设置了此标志,muxer将所有分段存储在单个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并在分段完成后重命名为文件名。

提供分段的Web服务器可以配置以拒绝对*.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主流标签,并对两个变体打上group映射'音频组'。
    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'。确保输入文件至少有一个文本字幕流。
    ffmpeg -y -i input_with_subtitle.mkv \
     -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \
     -b:a:0 256k \
     -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \
     -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \
     -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \
     10 -master_pl_publish_rate 10 -hls_flags \
     delete_segments+discont_start+split_by_time ./tmp/video.m3u8
    
cc_stream_map 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 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 count

每经过指定数量的片段间隔,重复发布主播放列表。

例如:

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 bool

使用持久性HTTP连接。仅用于HTTP输出。

timeout timeout

为socket I/O操作设置超时时间。仅用于HTTP输出。

ignore_io_errors bool

在打开、写入和删除期间忽略I/O错误。对于具有网络输出的长时间运行很有用。

headers headers

设置自定义HTTP头,可以覆盖内置的默认头。仅用于HTTP输出。

4.47 iamf

沉浸式音频模型和格式(IAMF)复用器。

IAMF用于在流媒体和离线应用中提供沉浸式音频内容。这些应用包括互联网音频流、多播/广播服务、文件下载、游戏、通信、虚拟和增强现实等。在这些应用中,音频可以在广泛的设备上播放,例如耳机、手机、平板电脑、电视、音响条、家庭影院系统、大屏幕等。

此格式由开放媒体联盟设计和推广。

有关此格式的更多信息,请参阅https://aomedia.org/iamf/.

4.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像素格式。

4.49 ilbc

互联网低比特率编解码器(iLBC)原始复用器。

它接受一个‘ilbc’音频流。

4.50 image2, image2pipe

图片文件复用器。

image2’复用器将视频帧写入图片文件。

输出文件名由模式指定,可以用于生成连续编号的文件系列。 模式可以包含字符串"%d"或"%0Nd",此字符串指定文件名中表示编号的字符的位置。如果使用格式"%0Nd",每个文件名中的数字字符串将填充为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’复用器相同的选项,但忽略模式验证和扩展,因为它应该写入命令输出而不是实际存储的文件。

4.50.1 选项

frame_pts bool

如果设置为1,用包的PTS(展示时间戳)扩展文件名。默认值为0。

start_number count

从指定的编号开始序列。默认值为1。

update bool

如果设置为1,文件名始终仅解释为一个文件名,而不是模式,并且相应的文件将被新图片连续覆盖。默认值为0。

strftime bool

如果设置为1,用日期和时间信息从strftime()扩展文件名。默认值为0。

atomic_writing bool

将输出写入临时文件,一旦完成写入,将临时文件重命名为目标文件名。默认禁用。

protocol_opts options_list

设置协议选项作为一个键值对以:-分隔列表。值中包含:特殊字符必须被转义。

4.50.2 示例

  • 使用ffmpeg创建一系列文件img-001.jpeg, img-002.jpeg,...,每秒从输入视频获取一帧图片:
    ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
    

    注意,与ffmpeg一起使用时,如果未使用-f选项指定格式,并且输出文件名指定图片文件

    ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
    

    格式,image2复用器会自动选择,因此之前的 命令可以写为:Nd",例如要从输入视频的开头创建img.jpeg还需注意的是,模式不一定必须包含"%d"或 "%0

    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
    

4.51 ircam

伯克利 / IRCAM / CARL声音文件系统(BICSF)格式复用器。

伯克利/IRCAM/CARL声音格式,开发于1980年代,是由包括 在UC圣地亚哥的计算机音频研究实验室(CARL)开发的csound系统、 在巴黎的声学/音乐研究与协调研究所(IRCAM)开发的IRCAM声音文件系统、 以及伯克利快速文件系统合并而成。

最初作为伯克利/IRCAM/CARL声音文件系统的一部分开发, 一套应用于伯克利UNIX系统的音频应用程序文件系统程序。它在学术音乐研究中心中特别受欢迎, 并曾多次用于生成早期电脑生成的音频作品。

此复用器接受包含PCM数据的单个音频流。

4.52 ivf

On2 IVF复用器。

IVF格式由On2 Technologies(前身为Duck公司)开发,用于存储自行开发的编解码器。

此复用器接受单个‘vp8’, ‘vp9’,或‘av1’视频流。

4.53 jacosub

JACOsub字幕格式复用器。

此复用器接受单个‘jacosub’字幕流。

有关此格式的更多信息,请查看http://unicorn.us.com/jacosub/jscripts.html.

4.54 kvag

Simon & Schuster Interactive VAG复用器。

此定制的VAG容器由一些Simon & Schuster Interactive游戏使用,例如 “Real War”和 “Real War: Rogue States”。

此复用器接受单个‘adpcm_ima_ssi’音频流。

4.55 lc3

蓝牙SIG低复杂性通信编解码器音频(LC3),或ETSI TS 103 634低复杂性通信编解码器加(LC3plus)。

此复用器接受单个‘lc3’音频流。

4.56 lrc

LRC歌词文件格式复用器。

LRC(LyRiCs缩写)是一种计算机文件格式,用于将歌曲歌词与音频文件(如MP3、Vorbis或MIDI)同步。

此复用器接受单个‘subrip’或‘text’字幕流。

4.56.1 元数据

下列元数据标签会转换为匹配格式的元数据:

title
album
artist
author
creator
encoder
encoder_version

如果未显式设置‘encoder_version’,将自动设置为libavformat版本。

4.57 matroska

Matroska容器复用器。

此复用器实现了matroska和webm容器规范。

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

4.57.2 选项

reserve_index_space 大小

默认情况下,此复用器会在文件末尾写入供搜索用的索引(在Matroska术语中称为线索cues),因为无法预先知道在文件开头需要多少空间留给索引。但对于某些用例,例如可以搜索但搜索速度较慢的流媒体,将索引放在文件开头会更实用。

如果将此选项设置为非零值,复用器将保留大小字节大小的空间在文件头中,并在复用完成时尝试将线索写入该部分。如果保留的空间不够,将不会写入线索,文件会最终完成,写入尾部时返回错误。大多数情况下,安全的大小是每小时视频约50kB。

请注意,仅在输出可搜索时才写入线索,如果不可搜索,此选项将无效。

cues_to_front 布尔值

如果设置为true,复用器将在必要时通过重新排列主数据将索引写入文件开头。这可以与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 布尔值

在每个一级元素内写入CRC32元素。默认设置为true。此选项对WebM无效。

default_mode 模式

控制输出轨道的FlagDefault设置方式。 它影响播放器默认应播放哪些轨道。默认模式为‘passthrough’.

infer

每个具有默认状态的轨道都会被设置为FlagDefault。此外,对于每种类型的轨道(音频、视频或字幕),如果没有该类型的轨道具有默认状态,则该类型的第一个轨道(如果存在)将标记为默认。这保障即使输入源自缺乏默认轨道概念的容器,也能以合理方式设置默认标志。

infer_no_subs

该模式与infer相同,但如果没有具有默认状态的字幕轨道,则不会将任何字幕轨道标记为默认。

passthrough

在此模式下,仅当AV_DISPOSITION_DEFAULT标志设置在相应流的标志中时,FlagDefault才会设置。

4.58 md5

MD5测试格式。

这是hash复用器的一种变体。与该复用器不同的是,它默认使用MD5哈希函数。

另请参阅hashframemd5复用器。

4.58.1 示例

  • 计算转换为原始音频和视频的输入文件的MD5哈希,并将其存储在文件中out.md5:
    ffmpeg -i INPUT -f md5 out.md5
    
  • 将MD5哈希打印到标准输出:
    ffmpeg -i INPUT -f md5 -
    

4.59 microdvd

MicroDVD字幕格式复用器。

此复用器接受单个‘microdvd’字幕流。

4.60 mmf

合成音乐移动应用程序格式(SMAF)复用器。

SMAF是一种Yamaha为便携式电子设备(如手机和个人数字助理)指定的音乐数据格式。

此复用器接受单个‘adpcm_yamaha’音频流。

4.61 mp3

MP3复用器写入包含以下可选功能的原始MP3流:

  • 在开头的ID3v2元数据头(默认为启用)。支持版本2.3和2.4,id3v2_version私有选项控制使用的版本(3或4)。设置id3v2_version为0完全禁用ID3v2头。

    复用器支持将附带图片(APIC帧)写入ID3v2头。图片以包含单个数据包的视频流形式提供给复用器。这些流可以是任意数量的,每个对应一个单独的APIC帧。流元数据标签标题注释映射到APIC描述图片类型分别。请参阅http://id3.org/id3v2.4.0-frames了解允许的图片类型。

    请注意,APIC帧必须在开头写入,因此在获得所有图片前,复用器会缓存音频帧。因此建议尽早提供图片以避免过多缓存。

  • 在ID3v2头(如果存在)之后是一个Xing/LAME帧。默认启用,但仅在输出可搜索时写入。write_xing私有选项可用于禁用它。该帧包含可能对解码器有用的各种信息,例如音频持续时间或编码器延迟。
  • 文件末尾的一个传统ID3v1标签(默认禁用)。可通过write_id3v1私有选项启用,但由于其功能非常有限,不建议使用。

示例:

写入带有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

4.62 mpegts

MPEG传输流复用器。

此复用器实现了ISO 13818-1以及部分ETSI EN 300 468。

mpegts复用器中识别的元数据设置是service_providerservice_name。如果未设置,service_provider默认为‘FFmpeg’,service_name默认为‘Service01’.

4.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 整数

设置PMT的起始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间隔将自动确定:20毫秒用于CBR流,最高的帧持续时间倍数(小于100ms)用于VBR流。

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

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

4.63 mxf, mxf_d10, mxf_opatom

MXF复用器。

4.63.1 选项

复用器选项包括:

store_user_comments 布尔值

设置是否存储用户评论(如果有)或从不存储。IRT D-10不允许存储用户评论。因此,默认情况下mxf和mxf_opatom会写入它们,而mxf_d10则不会。

4.64 null

Null复用器。

此复用器不会生成任何输出文件,主要用于测试或基准评估。

例如,要测试解码性能,可使用以下命令:ffmpeg您可以使用以下命令:

ffmpeg -benchmark -i INPUT -f null out.null

注意,上述命令不会读或写out.null文件,但指定输出文件是ffmpeg语法的要求。

或者,您可以将命令写为:

ffmpeg -benchmark -i INPUT -f null -

4.65 nut

-syncpoints 标志

更改nut中syncpoint的使用:

默认 use the normal low-overhead seeking aids.
do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;

不建议使用此选项,因为所得的文件对损坏非常敏感,并且无法进行搜索。此外,从syncpoints引入的开销通常是微不足道的。请注意,-write_index0 可用于禁用所有增长数据表,允许使用有限内存复用无尽流,同时避免这些缺点。

带时间戳 extend the syncpoint with a wallclock field.

The 带时间戳标志是实验性的。

-write_index 布尔值

在末尾写入索引,默认情况下会写入索引。

ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor

4.66 ogg

Ogg容器复用器。

-page_duration 持续时间

首选页面持续时间,以微秒为单位。复用器将尝试创建大约为持续时间的页面。这允许用户在搜索粒度和容器开销之间进行折中。默认值为1秒。值为0将填充所有段,使页面尽可能大。值为1在大多数情况下实际上将使用1个数据包每页,从而提供小的搜索粒度,但代价是增加了容器开销。

-serial_offset

从中设置流序列号的序列值。设置为不同且足够大的值可确保生成的ogg文件可安全链接。

4.67 rcwt

RCWT(带时间的原始字幕)是一种ccextractor原生格式,这是一个常用的用于处理608/708闭路字幕(CC)源的开源工具。 它可以用于归档原始提取的CC比特流并生成源文件以供以后处理或转换。此格式允许ccextractor和FFmpeg之间的互操作性,易于解析,并可用于创建CC演示的备份。

此复用器执行截至2024年3月的规范,该规范自2014年4月以来保持稳定且未改变。

此复用器在处理RCWT时将有一些与ccextractor复用RCWT方式不同的细微差别。 到目前为止,在使用ccextractor处理输出时未发现兼容性问题,但使用效果可能会有所不同, 并且输出内容不会完全逐位匹配。

可以在这里找到RCWT的免费规范:https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT

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

4.68 segment, stream_segment, ssegment

基本流分段器。

此复用器将流输出到多个几乎固定时长的独立文件。输出文件名模式可以像image2一样进行设置,或者通过使用strftime模板, 如果启用了strftime选项。

stream_segment是用于写入流输出格式的复用器变体,即无需全局头部的格式, 并推荐用于输出例如MPEG传输流段。ssegment是的简短别名stream_segment.

每个段都从所选参考流的关键帧开始, 通过reference_stream选项设置。

请注意,如果希望视频文件的切分准确, 需要使输入关键帧对应于分段器期望的精确分割时间, 否则复用器将在指定的开始时间后碰到的下一个关键帧处启动新段。

分段复用器最适合于单一恒定帧率的视频。

可选地,通过设置segment_list选项,它可以生成已创建段的列表。段列表的类型由segment_list_type选项指定。段列表中的条目文件名默认设置为相应段文件的基本名称。

另请参阅hls复用器,它为HLS分段提供了更具体的实现。

4.68.1 选项

分段复用器支持以下选项:

increment_tc 1|0

如果设置为1,则在每个分段之间递增时间码。 如果选择该选项,输入必须具有第一个视频流中的时间码。默认值为0.

reference_stream 说明符

根据字符串设置参考流说明符。 如果说明符设置为auto,则自动选择参考流。否则, 它必须是一个流说明符(请参阅ffmpeg手册中的“流说明符”章节), 明确指定参考流。默认值为auto.

segment_format 格式

覆盖内部容器格式,默认情况下通过文件名扩展名猜测。

segment_format_options 选项列表

使用用冒号分隔的key=value参数列表设置输出格式选项。 值中包含:特殊字符的必须转义。

segment_list 名称

同时生成一个名为name的列表文件。如果未指定,则不生成列表文件。

segment_list_flags 标志

设置影响段列表生成的标志。

它目前支持以下标志:

cache

允许缓存(仅影响M3U8列表文件)。

live

允许生成适合直播的文件。

segment_list_size 大小

更新列表文件,使其最多包含size段。如果为0,列表文件将包含所有段。默认值为0。

segment_list_entry_prefix 前缀

为每个条目添加前缀prefix。它对生成绝对路径很有用。默认情况下未应用前缀。

segment_list_type 类型

选择列出格式。

识别以下值:

flat

为生成的段生成平面列表,每段一行。

csv, ext

为生成的段生成一个列表,每段一行, 每行格式为(逗号分隔的值):

段文件名,段开始时间,段结束时间

段文件名是根据提供的模式由复用器生成的输出文件的名称。如果需要,应用RFC4180定义的CSV转义。

段开始时间段结束时间指定以秒表示的段的开始和结束时间。

后缀为".csv"".ext"的列表文件将自动选择此格式。

ext’已弃用,建议改用‘csv’.

ffconcat

为生成的段生成一个ffconcat文件。生成的文件 可使用FFmpeg合并解复用器读取。

具有后缀为".ffcat"".ffconcat"的列表文件将自动选择此格式。

m3u8

生成符合http://tools.ietf.org/id/draft-pantos-http-live-streaming的版本3扩展M3U8文件。http://tools.ietf.org/id/draft-pantos-http-live-streaming.

后缀为".m3u8"的列表文件将自动选择此格式。

如果未指定类型,则从列表文件名后缀中猜测。

segment_time 时间

将分段持续时间设置为时间,值必须是持续时间规范。默认值为"2"。 另请参阅segment_times选择。

请注意,除非您强制参考流的关键帧位于给定时间, 分割可能不准确。请参阅以下的介绍性说明和示例。

min_seg_duration 时间

将最小分段持续时间设置为时间,值必须是持续时间规范。这防止复用器以低于此值的持续时间结束分段。 仅对segment_time有效。 默认值为"0"。

segment_atclocktime 1|0

如果设置为"1",则从00:00开始的常规时间间隔拆分。 在设置拆分间隔长度时使用时间值。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"。

当指定了增量后,如果关键帧的PTS满足以下关系,将开始新的片段:

PTS >= start_time - time_delta

此选项在分割始终在GOP边界上分割的视频内容时非常有用, 如果在指定的分割时间之前找到关键帧。

特别是可以与ffmpeg选项强制关键帧结合使用。由强制关键帧指定的关键帧时间可能由于舍入问题而不准确,因此关键帧时间可能正好 设置在指定时间之前。对于恒定帧率视频,值为1/(2*帧率)可以应对指定时间与强制关键帧.

segment_times 时间

指定拆分点列表。时间包含逗号分隔的持续时间规范列表,按升序排列。另请参阅segment_time选项。

segment_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大小以适合段时间限制。

4.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选项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
    

4.69 smoothstreaming

Smooth Streaming复用器生成一组适合使用常规Web服务器提供服务的文件(清单、片段)。

window_size

指定清单中保留的片段数。默认值为0(保留所有)。

extra_window_size

指定清单外保留的片段数,超过后将从磁盘上删除。默认值为5。

lookahead_count

指定前瞻片段数量。默认值为2。

min_frag_duration

指定最小片段持续时间(以微秒为单位)。默认值为5000000。

remove_at_exit

指定完成时是否删除所有片段。默认值为0(不删除)。

4.70 streamhash

每流哈希测试格式。

此复用器对所有输入帧基于每流计算并打印加密哈希。 这可用于进行一致性检查,而无需进行完全的二进制比较。

默认情况下,音频帧在计算哈希之前转换为签名的16-bit原始音频,视频帧转换为原始视频,但也可以使用明确转换为其他编解码器的输出。 时间戳被忽略。默认情况下使用SHA-256加密哈希函数,但支持多种其他算法。

复用器的输出由每条流的一行组成,格式为:流索引,流类型,算法=哈希,其中流索引是映射流的索引,流类型是指示流类型的单个字符,算法是表示使用的哈希函数的短字符串,哈希是一个十六进制数字,表示计算出的哈希值。

hash 算法

使用由字符串指定的加密哈希函数算法支持的值包括MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256(默认值),SHA512/224, SHA512/256, SHA384, SHA512, CRC32adler32.

4.70.1 示例

计算输入转换为原始音频和视频的 SHA-256 哈希,并将其存储在文件中out.sha256:

ffmpeg -i INPUT -f streamhash out.sha256

使用以下命令将 MD5 哈希打印到标准输出:

ffmpeg -i INPUT -f streamhash -hash md5 -

另请参阅哈希帧哈希复用器。

4.71 tee

tee 复用器可用于将相同的数据写入多个输出,比如文件或流。它可以用于例如通过网络流式传输视频并同时将其保存到磁盘。

它与在ffmpeg命令行工具中指定多个输出不同。使用 tee 复用器,音频和视频数据将仅编码一次。使用常规的多个输出操作,会启动多个并行编码操作,这可能会是一个非常耗费资源的过程。直接使用 libavformat API 时,tee 复用器没有实际意义,因为此时可以直接将相同的数据包传递给多个复用器。

由于 tee 复用器不代表任何特定的输出格式,ffmpeg 无法自动选择输出流。因此必须使用-map明确指定所有用于输出的流。参见下方的示例。

某些编码器可能需要根据输出格式选择不同的选项;该选择无法通过 tee 复用器的自动检测功能完成,因此需要明确指定。主要的示例是global_header标志。

子输出会在提供给复用器的文件名中指定,以“|”分隔。如果任何子名称包含“|”分隔符、前导或尾随空格或任何特殊字符,则必须进行转义(参见(ffmpeg-utils) ffmpeg-utils(1) 手册中的“引用和转义”部分).

4.71.1 选项

use_fifo bool

如果设置为 1,则子输出将在使用fifo复用器的情况下以单独线程进行处理。这允许补偿不同的速度/延迟/可靠性输出并设置透明恢复。默认情况下,此功能已关闭。

fifo_options

传递给 fifo 伪复用器实例的选项。参见fifo.

复用器选项可以为每个子复用器指定,在方括号中以“:=对”形式列出。如果选项值包含特殊字符或‘:’分隔符,则必须进行转义;注意,这是第二级转义。

以下特殊选项也会被识别:

f

指定格式名称。如果无法从输出 URL 中猜测,则需要指定。

bsfs[/spec]

指定要应用到给定输出的比特流过滤器列表。

可以通过将流指定符附加到选项并由/. spec必须是流指定符(参见格式流指定符).

如果未指定流指定符,所有比特流过滤器都将应用到输出中的所有流。这会导致该输出操作失败,例如输出中包含一个无法应用比特流过滤器的流,例如h264_mp4toannexb应用到包含音频流输出的情况。

比特流过滤器的选项必须以opt=value.

多个比特流过滤器可以用 ',' 分隔指定。

use_fifo bool

允许单独覆盖 tee 复用器对于单个子复用器的 use_fifo 选项。

fifo_options

允许单独覆盖 tee 复用器对单个子复用器的 fifo_options 选项。参见fifo.

select

选择要映射到子输出的流,使用流指定符指定。如果未明确指定,默认为所有映射流。这会导致输出操作失败,如果输出格式无法接受所有映射流。

您可能使用以逗号 (,) 分隔的多个流指定符,例如:a:0,v

onfail

指定输出失败时的行为。此选项可以为abort(默认值)或ignore. abort在发生子输出失败时将导致整个进程失败。ignore在此输出发生失败时将被忽略,因此其他输出将继续并不会受影响。

4.71.2 示例

  • 编码内容并保存到 WebM 文件同时将其作为 MPEG-TS 流通过 UDP 进行流式传输:
    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"
    

4.72 webm_chunk

WebM 实时块复用器。

此复用器将 WebM 头和块文件以独立文件写出,可以被支持通过 DASH 实时流的客户端消费。

4.72.1 选项

此复用器支持以下选项:

chunk_start_index

第一个块的索引(默认值为 0)。

header

写入初始化数据的头文件名。

audio_chunk_duration

每个音频块的持续时间,以毫秒为单位(默认值为 5000)。

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

4.73 webm_dash_manifest

WebM DASH 清单复用器。

此复用器实现 WebM DASH 清单规范以生成 DASH 清单 XML。它也支持 DASH 实时流的清单生成。

有关更多信息,请参阅:

4.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”属性中列出。默认值:0。SegmentTemplate’ element in the manifest. Default: 0.

chunk_duration_ms

每个块的持续时间,以毫秒为单位。这将在清单中元素的“duration”属性中列出。默认值:1000。SegmentTemplate’ element in the manifest. Default: 1000.

utc_timing_url

返回 ISO 格式 UTC 时间戳的页面 URL。这将在清单中元素的“value”属性中列出。默认值:无。UTCTiming’ element in the manifest. Default: None.

time_shift_buffer_depth

最小时间(以秒为单位)移位缓存保证任何表示均可用。这将在元素的“timeShiftBufferDepth”属性中列出。默认值:60。MPD’ element. Default: 60.

minimum_update_period

清单的最小更新时间(以秒为单位)。这将在清单中元素的“minimumUpdatePeriod”属性中列出。默认值:0。MPD’ element. Default: 0.

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

5 元数据

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

文件格式如下:

  1. 文件由一个头和若干元数据标签组成,分成若干节,每节单独占一行。
  2. 头是一个“;FFMETADATA”字符串,后跟一个版本号(目前为1)。
  3. 元数据标签形式为“key=value
  4. 头后会紧接着是全局元数据
  5. 全局元数据之后可能会有带有流/章节元数据的节。
  6. 一个节以大写的节名开头(即 STREAM 或 CHAPTER),用括号‘[’, ‘])’括起来,结束于下一节或文件末尾。
  7. 章节节开头可能有一个可选时基用于开始/结束值。时基必须是形式‘TIMEBASE=num/den’,其中numden是整数。如果没有时基,则假定开始/结束时间为纳秒。

    接着章节节必须包含形式为‘START=num’, ‘END=num’的章节开始和结束时间,其中num是正整数。

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

一个 ffmetadata 文件可能如下所示:

;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team

[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line

通过使用 ffmetadata 复用器和解复用器,可以将输入文件中的元数据提取到 ffmetadata 文件中,然后使用经过编辑的 ffmetadata 文件将文件转码为输出文件。

使用ffmpeg提取 ffmetadata 文件的过程如下:

ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE

重新插入来自 FFMETADATAFILE 文件的编辑过的元数据信息的过程如下:

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

6 参见

ffmpeg, ffplay, ffprobe, libavformat

7 作者

FFmpeg 开发者。

有关作者信息的详细内容,请查看项目的 Git 历史记录(https://git.ffmpeg.org/ffmpeg),例如,通过键入命令git log在 FFmpeg 源代码目录下,或浏览在线代码库,网址为https://git.ffmpeg.org/ffmpeg.

特定组件的维护者列表可见于源代码树中的文件MAINTAINERS

该文档由makeinfo.

托管由telepoint.bg 提供。