目录
- 1 说明
- 2 格式选项
- 3 个解复用器
- 4 个复用器
- 4.1a64
- 4.2 广告
- 4.3 爱夫
- 4.4 阿尔卑斯山
- 4.5 磅
- 4.6 视频
- 4.7 色谱图
- 4.8 CRC
- 4.9 破折号
- 4.10 先进先出
- 4.11 电影
- 4.12 帧校验
- 4.13 帧哈希
- 4.14框架md5
- 4.15 动图
- 4.16 哈希
- 4.17 小时
- 4.18 ICO
- 4.19 图片2
- 4.20 马特罗斯卡
- 4.21 MD5
- 4.22 mov、mp4、ismv
- 4.23mp3
- 4.24 mpegts
- 4.25 mxf、mxf_d10、mxf_opatom
- 4.26 空
- 4.27螺母
- 4.28 奥格
- 4.29 原始复用器
- 4.29.1 交流3
- 4.29.2 adx
- 4.29.3 aptx
- 4.29.4 aptx_hd
- 4.29.5 AVS2
- 4.29.6 cavsvideo
- 4.29.7 编解码器2raw
- 4.29.8 数据
- 4.29.9 狄拉克
- 4.29.10 dnxhd
- 2011年4月29日 数据传输服务
- 4.29.12 eac3
- 13年4月29日
- 4.29.14 g722
- 15.4.29g723_1
- 4.29.16 g726
- 17.29.4 G726le
- 4.29.18 GSM
- 4.29.19 h261
- 4.29.20 h263
- 4.29.21 h264
- 22 年 4 月 29 日
- 23.29.4 m4v
- 24.29.24 mjpeg
- 4.29.25 MLP
- 4.29.26 mp2
- 4.29.27 mpeg1视频
- 4.29.28 mpeg2视频
- 4.29.29 奥布
- 4.29.30 原始视频
- 31 年 4 月 29 日
- 4.29.32 真高清
- 33年4月29日 VC1
- 4.30 段、stream_segment、ssegment
- 4.31 平滑流式传输
- 4.32 流哈希
- 4.33三通
- 4.34 webm_块
- 4.35 webm_dash_manifest
- 5 元数据
- 6 另请参阅
- 7 位作者
1 说明
本文档描述了 libavformat 库提供的支持的格式(复用器和解复用器)。
2 格式选项
libavformat 库提供了一些通用的全局选项,可以在所有复用器和解复用器上进行设置。此外,每个复用器或解复用器可以支持所谓的私有选项,这些选项特定于该组件。
可以通过在 FFmpeg 工具中
指定 -选项 值AVFormatContext
来设置选项,或者通过在选项中显式设置值或使用libavutil/opt.h用于编程使用的 API。
支持的选项列表如下:
- avioflags flags (input/output)
可能的值:
- ‘direct’
减少缓冲。
- probesize integer (input)
设置探测大小(以字节为单位),即要分析以获取流信息的数据大小。较高的值将能够检测更多信息(以防信息分散到流中),但会增加延迟。必须是不小于32的整数,默认为5000000。
- max_probe_packets integer (input)
设置探测编解码器时缓冲数据包的最大数量。默认值为 2500 个数据包。
- packetsize integer (output)
设置数据包大小。
- fflags flags
设置格式标志。有些是针对有限数量的格式实现的。
输入文件的可能值:
- ‘discardcorrupt’
丢弃损坏的数据包。
- ‘fastseek’
对某些格式启用快速但不准确的搜索。
- ‘genpts’
如果存在 DTS,则生成缺失的 PTS。
- ‘igndts’
如果设置了 PTS,则忽略 DTS。nofillin 凝固后呈惰性。
- ‘ignidx’
忽略索引。
- ‘nobuffer’
减少初始输入流分析期间缓冲带来的延迟。
- ‘nofillin’
不要填写数据包字段中可以精确计算的缺失值。
- ‘noparse’
禁用 AVParsers,这
+nofillin
也是需要的。- ‘sortdts’
尝试通过 DTS 交错输出数据包。目前,仅适用于带有索引的 AVI。
输出文件的可能值:
- ‘autobsf’
根据输出格式的要求自动应用比特流过滤器。默认启用。
- ‘bitexact’
仅写入与平台、构建和时间无关的数据。这可确保文件和数据校验和在平台之间可重复且匹配。它的主要用途是回归测试。
- ‘flush_packets’
立即写出数据包。
- ‘shortest’
在最短流的末尾停止复用。可能需要增加 max_interleave_delta 以避免在 EOF 之前刷新较长的流。
- seek2any integer (input)
如果设置为 1,则允许在支持时在分路器级别上查找非关键帧。默认值为 0。
- analyzeduration integer (input)
指定分析多少微秒来探测输入。较高的值将能够检测到更准确的信息,但会增加延迟。默认为 5,000,000 微秒 = 5 秒。
- cryptokey hexadecimal string (input)
设置解密密钥。
- indexmem integer (input)
设置用于时间戳索引的最大内存(每个流)。
- rtbufsize integer (input)
设置用于缓冲实时帧的最大内存。
- fdebug flags (input/output)
打印具体的调试信息。
可能的值:
- ‘ts’
- max_delay integer (input/output)
设置最大复用或解复用延迟(以微秒为单位)。
- fpsprobesize integer (input)
设置用于探测 fps 的帧数。
- audio_preload integer (output)
设置音频数据包应提前交错的微秒数。
- chunk_duration integer (output)
为每个块设置微秒。
- chunk_size integer (output)
设置每个块的大小(以字节为单位)。
- err_detect, f_err_detect flags (input)
设置错误检测标志。
f_err_detect
已弃用,只能通过该ffmpeg
工具使用。可能的值:
- ‘crccheck’
验证嵌入的 CRC。
- ‘bitstream’
检测比特流规范偏差。
- ‘buffer’
检测不正确的比特流长度。
- ‘explode’
检测到小错误时中止解码。
- ‘careful’
考虑那些违反规范并且在野外未被视为错误的事情。
- ‘compliant’
将所有不符合规范的情况视为错误。
- ‘aggressive’
考虑一个理智的编码器不应该将其视为错误的事情。
- max_interleave_delta integer (output)
设置交错的最大缓冲持续时间。持续时间以微秒表示,默认为 10000000(10 秒)。
为了确保所有流正确交错,libavformat 将等待,直到每个流至少有一个数据包,然后才将任何数据包实际写入输出文件。当某些流“稀疏”时(即连续数据包之间存在较大间隙),这可能会导致过度缓冲。
该字段指定多路复用队列中第一个数据包和最后一个数据包的时间戳之间的最大差异,高于该值的 libavformat 将输出一个数据包,无论它是否已将所有流的数据包排队。
如果设置为 0,libavformat 将继续缓冲数据包,直到每个流都有一个数据包,无论缓冲数据包之间的最大时间戳差异如何。
- use_wallclock_as_timestamps integer (input)
如果设置为 1,则使用挂钟作为时间戳。默认值为 0。
- avoid_negative_ts integer (output)
-
可能的值:
- ‘make_non_negative’
移动时间戳以使它们非负。另请注意,这仅影响前导负时间戳,而不影响非单调负时间戳。
- ‘make_zero’
移动时间戳,使第一个时间戳为 0。
- ‘auto (default)’
在目标格式需要时启用转换。
- ‘disabled’
禁用时间戳移位。
启用移位后,所有输出时间戳都会移位相同的量。与没有移动的情况相比,音频、视频和字幕的不同步和相对时间戳差异得以保留。
- skip_initial_bytes integer (input)
如果设置为 1,则设置在读取标头和帧之前要跳过的字节数。默认值为 0。
- correct_ts_overflow integer (input)
如果设置为 1,则更正单个时间戳溢出。默认值为 1。
- flush_packets integer (output)
每个数据包后刷新底层 I/O 流。默认为-1(自动),这意味着底层协议将决定,1 启用它,并具有减少延迟的效果,0 禁用它,并且在某些情况下可能会增加 IO 吞吐量。
- output_ts_offset offset (output)
设置输出时间偏移。
偏移量必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
该偏移量由复用器添加到输出时间戳中。
指定正偏移意味着相应的流将延迟offset中指定的持续时间。默认值为
0
(意味着不应用偏移)。- format_whitelist list (input)
“,”分隔允许的多路分配器列表。默认情况下,所有内容都是允许的。
- dump_separator string (input)
分隔符用于分隔命令行上打印的有关流参数的字段。例如,要使用换行符和缩进分隔字段:
ffprobe -dump_separator " " -i ~/videos/matrixbench_mpeg2.mpg
- max_streams integer (input)
指定最大流数。这可用于拒绝由于大量流而需要太多资源的文件。
- skip_estimate_duration_from_pts bool (input)
使用 PTS 计算时跳过输入持续时间的估计。目前适用于MPEG-PS 和MPEG-TS。
- strict, f_strict integer (input/output)
指定如何严格遵守标准。
f_strict
已弃用,只能通过该ffmpeg
工具使用。可能的值:
- ‘very’
严格遵守较旧的更严格版本的规范或参考软件
- ‘strict’
严格遵守规范中的所有内容,无论后果如何
- ‘normal’
- ‘unofficial’
允许非官方扩展
- ‘experimental’
允许非标准化的实验性事物、实验性(未完成/正在进行中/未经过充分测试)解码器和编码器。注意:实验性解码器可能会带来安全风险,请勿使用它来解码不受信任的输入。
2.1 Format stream specifiers
格式流说明符允许选择一个或多个与特定属性匹配的流。
流说明符的确切语义是由
avformat_match_stream_specifier()
在
libavformat/avformat.h标头并记录在
ffmpeg(1) 手册的 (ffmpeg)Stream 说明符部分中。
3 个解复用器
解复用器是 FFmpeg 中的配置元素,可以从特定类型的文件中读取多媒体流。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的解复用器。您可以使用配置选项列出所有可用的选项--list-demuxers
。
您可以使用configure 选项禁用所有解复用器
--disable-demuxers
,并使用该选项有选择地启用单个解复用器,或者使用该选项禁用它。
--enable-demuxer=DEMUXER
--disable-demuxer=DEMUXER
ff* 工具的选项-demuxers
将显示已启用的解复用器列表。用于-formats
查看已启用的解复用器和复用器的组合列表。
下面是一些当前可用的解复用器的描述。
3.1 aa
音频格式 2、3 和 4 解复用器。
该解复用器用于解复用 Audible Format 2、3 和 4 (.aa) 文件。
3.2 aac
原始音频数据传输流 AAC 解复用器。
该解复用器用于解复用包含单个 AAC 流以及其中的任何 ID3v1/2 或 APE 标签的 ADTS 输入。
3.3 apng
动画便携式网络图形解复用器。
该解复用器用于解复用 APNG 文件。所有标头(除 PNG 签名外)直至(但不包括)第一个 fcTL 块都作为额外数据传输。然后帧被分割为两个 fcTL 块之间或最后一个 fcTL 和 IEND 块之间的所有块。
- -ignore_loop bool
如果设置了,则忽略文件中的循环变量。默认启用。
- -max_fps int
最大帧速率(以每秒帧数为单位)。默认值 0 不施加任何限制。
- -default_fps int
当文件中未指定任何内容时,默认帧速率以每秒帧数为单位(0 表示尽可能快)。默认值为 15。
3.4 asf
高级系统格式解复用器。
该解复用器用于解复用 ASF 文件和 MMS 网络流。
- -no_resync_search bool
不要尝试通过查找特定的可选起始代码来重新同步。
3.5 concat
虚拟串联脚本解复用器。
该解复用器从文本文件中读取文件和其他指令的列表,并将它们一个接一个地解复用,就好像它们的所有数据包都被复用在一起一样。
文件中的时间戳经过调整,以便第一个文件从 0 开始,并且下一个文件从前一个文件结束的位置开始。请注意,这是全局完成的,如果所有流的长度不完全相同,则可能会导致间隙。
所有文件必须具有相同的流(相同的编解码器、相同的时基等)。
每个文件的持续时间用于调整下一个文件的时间戳:如果持续时间不正确(例如,因为它是使用比特率计算的或因为文件被截断),则可能会导致伪影。该
duration
指令可用于覆盖每个文件中存储的持续时间。
3.5.1 语法
该脚本是一个扩展 ASCII 格式的文本文件,每行一个指令。空行、前导空格和以“#”开头的行将被忽略。以下指令得到认可:
file path
要读取的文件的路径;特殊字符和空格必须用反斜杠或单引号转义。
所有后续与文件相关的指令都适用于该文件。
ffconcat version 1.0
确定脚本类型和版本。
为了使 FFmpeg 自动识别格式,该指令必须完全按原样显示在脚本的第一行(没有额外的空格或字节顺序标记)。
duration dur
文件的持续时间。该信息可以从文件中指定;如果文件中的信息不可用或不准确,则在此处指定可能会更有效或有帮助。
如果为所有文件设置了持续时间,则可以在整个串联视频中进行搜索。
inpoint timestamp
就文件而言。当解复用器打开文件时,它会立即查找指定的时间戳。完成查找后,所有流都可以在入点处成功呈现。
该指令最适合帧内编解码器,因为对于非帧内编解码器,您通常会在实际入点之前获得额外的数据包,并且解码的内容很可能也包含入点之前的帧。
对于每个文件,文件入点之前的数据包的时间戳将小于计算的文件开始时间戳(第一个文件的情况下为负),并且文件的持续时间(如果指令未指定)将
duration
根据在他们指定的入点上。由于指定入点之前存在潜在数据包,因此两个串联文件之间的数据包时间戳可能会重叠。
outpoint timestamp
文件的出点。当解复用器在任何流中达到指定的解码时间戳时,它会将其作为文件结束条件进行处理,并跳过所有流中的当前数据包和所有剩余数据包。
出点是排他的,这意味着解复用器不会输出解码时间戳大于或等于出点的数据包。
该指令最适合所有流紧密交错的帧内编解码器和格式。对于非帧内编解码器,您通常会在出点之后获得带有呈现时间戳的附加数据包,因此解码内容很可能也包含出点之后的帧。如果您的流不是紧密交错的,您可能无法在出点之前从所有流中获取所有数据包,并且您可能只能解码出点之前的最早的流。
文件的持续时间(如果指令未指定
duration
)将根据其指定的出点而减少。file_packet_metadata key=value
文件数据包的元数据。将为每个文件包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。该指令已弃用,请
file_packet_meta
改用。file_packet_meta key value
文件数据包的元数据。将为每个文件包设置指定的元数据。您可以多次指定此指令以添加多个元数据条目。
option key value
访问、打开和探测文件的选项。可以多次出现。
stream
在虚拟文件中引入流。所有后续与流相关的指令都适用于最后引入的流。必须设置一些流属性才能识别子文件中的匹配流。如果脚本中未定义流,则复制第一个文件中的流。
exact_stream_id id
设置流的id。如果给出该指令,则将使用子文件中具有相应 id 的字符串。这对于 MPEG-PS (VOB) 文件特别有用,因为其中流的顺序不可靠。
stream_meta key value
流的元数据。可以多次出现。
stream_codec value
流的编解码器。
stream_extradata hex_string
字符串的额外数据,以十六进制编码。
chapter id start end
添加一章。id是唯一标识符,可能很小且连续。
3.5.2 选项
该分路器接受以下选项:
- safe
如果设置为 1,则拒绝不安全的文件路径和指令。如果文件路径不包含协议规范并且是相对的,并且所有组件仅包含可移植字符集中的字符(字母、数字、句点、下划线和连字符)并且组件开头没有句点,则该文件路径被认为是安全的。
如果设置为 0,则接受任何文件名。
默认值为 1。
- auto_convert
如果设置为 1,则尝试对数据包数据执行自动转换以使流可连接。默认值为 1。
目前,唯一的转换是将 h264_mp4toannexb 比特流过滤器添加到 MP4 格式的 H.264 流中。如果分辨率发生变化,这一点尤其必要。
- segment_time_metadata
如果设置为 1,则每个数据包将包含lavf.concat.start_time和 lavf.concat.duration数据包元数据值,它们是串联输出中各个文件段的 start_time 和持续时间(以微秒为单位)。仅当根据 concat 文件已知持续时间元数据时,才会设置持续时间元数据。默认值为 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 解复用器上的动态自适应流。
该分路器显示清单中找到的所有 AVStream。通过在 AVStreams 上设置丢弃标志,调用者可以决定实际接收哪些流。每个流分别镜像名为“id”和“variant_bitrate”的元数据键的id
和bandwidth
属性
<Representation>
。
3.6.1 选项
该分路器接受以下选项:
- cenc_decryption_key
16 字节密钥(十六进制),用于解密使用 ISO 通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。
3.7 ea
Electronic Arts 多媒体格式解复用器。
各种 Electronic Arts 游戏均使用此格式。
3.7.1 选项
- merge_alpha bool
-
通常,VP6 Alpha 通道(如果存在)作为辅助视频流返回,通过设置此选项,您可以使解复用器返回除普通视频之外还包含 Alpha 通道的单个视频流。
3.8 imf
可互操作的主格式解复用器。
该解复用器呈现 IMF 组合中的音频和视频流,如SMPTE ST 2067-2中所指定。
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
如果-assetmaps
未指定,解复用器会查找名为的文件
资产映射.xml与 CPL 位于同一目录中。
3.9 flv, live_flv, kux
Adobe Flash 视频格式解复用器。
该解复用器用于解复用 FLV 文件和 RTMP 网络流。对于实时网络流,如果强制格式化,则可以使用 live_flv 选项而不是 flv 来避免时间戳不连续。KUX是优酷平台上使用的flv变体。
ffmpeg -f flv -i myfile.flv ... ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
- -flv_metadata bool
根据 onMetaData 数组内容分配流。
- -flv_ignore_prevtag bool
忽略前一个标签值的大小。
- -flv_full_metadata bool
输出onMetadata的所有上下文。
3.10 gif
动画 GIF 解复用器。
它接受以下选项:
- min_delay
设置帧之间的最小有效延迟(以百分之几秒为单位)。范围是 0 到 6000。默认值为 2。
- max_gif_delay
设置帧之间的最大有效延迟(以百分之一秒为单位)。范围是 0 到 65535。默认值是 65535(近十一分钟),这是规范允许的最大值。
- default_delay
设置帧之间的默认延迟(以百分之一秒为单位)。范围是 0 到 6000。默认值为 10。
- ignore_loop
GIF 文件可以包含循环一定次数(或无限次)的信息。如果忽略循环设置为1,则来自输入的循环设置将被忽略并且不会发生循环。如果设置为0,则会发生循环,并根据GIF循环次数。默认值为 1。
例如,使用覆盖过滤器,将无限循环的 GIF 放置在另一个视频上:
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
请注意,在上面的示例中,覆盖过滤器的最短选项用于以最短输入文件的长度结束输出视频,在本例中为输入.mp4因为本例中的 GIF 无限循环。
3.11 hls
HLS 解复用器
Apple HTTP 直播流解复用器。
该解复用器呈现来自所有变体流的所有 AVStream。id字段被设置为比特率变体索引号。通过在 AVStreams 上设置丢弃标志(通过在 ffplay 中按“a”或“v”),调用者可以决定实际接收哪个变体流。流所属变体的总比特率可在名为“variant_bitrate”的元数据键中找到。
它接受以下选项:
- live_start_index
开始直播流的分段索引(负值从末尾开始)。
- prefer_x_start
如果它在播放列表中,则更喜欢使用 #EXT-X-START 而不是 live_start_index。
- allowed_extensions
',' 分隔的允许 hls 访问的文件扩展名列表。
- max_reload
尝试重新加载不足列表的最大次数。默认值为 1000。
- m3u8_hold_counters
m3u8刷新无新段时加载的最大次数。默认值为 1000。
- http_persistent
使用持久 HTTP 连接。仅适用于 HTTP 流。默认启用。
- http_multiple
使用多个 HTTP 连接来下载 HTTP 段。默认情况下为 HTTP/1.1 服务器启用。
- http_seekable
使用 HTTP 部分请求来下载 HTTP 段。0 = 禁用,1 = 启用,-1 = 自动,默认为自动。
- seg_format_options
使用以 分隔的键=值对列表设置媒体片段分路器的选项
:
。- seg_max_retry
发生错误时重新加载段的最大次数,当不需要在网络错误时跳过段时很有用。默认值为 0。
3.12 image2
图像文件解复用器。
该解复用器从由模式指定的图像文件列表中读取。模式的语法和含义由选项pattern_type指定。
该模式可以包含用于自动确定文件中包含的图像的格式的后缀。
序列中所有文件的每个图像的大小、像素格式和格式必须相同。
该分路器接受以下选项:
- framerate
设置视频流的帧速率。默认为 25。
- loop
如果设置为 1,则循环输入。默认值为 0。
- pattern_type
选择用于解释提供的文件名的模式类型。
pattern_type接受以下值之一。
- none
禁用模式匹配,因此视频将仅包含指定的图像。如果您不想从多个图像创建序列并且您的文件名可能包含特殊模式字符,则应该使用此选项。
- sequence
选择序列模式类型,用于指定按序号索引的文件序列。
序列模式可以包含字符串“%d”或“%0 N d”,它指定表示模式匹配的每个文件名中的序号的字符的位置。如果使用“%d0 N d”形式,则每个文件名中表示数字的字符串都用 0 填充,N是表示该数字的 0 填充数字的总数。可以使用字符串“%%”在模式中指定文字字符“%”。
如果序列模式包含“%d”或“%0 N d”,则该模式指定的文件列表的第一个文件名必须包含start_number和 start_number + start_number_range -1 之间的数字,并且所有后续数字都必须为顺序的。
例如,模式“img-%03d.bmp”将匹配以下形式的文件名序列img-001.bmp,img-002.bmp, ..., img-010.bmp, ETC。; 模式“i%%m%%g-%d.jpg”将匹配以下形式的文件名序列我%m%g-1.jpg, 我%m%g-2.jpg, ...,我%m%g-10.jpg, ETC。
请注意,该模式不一定包含“%d”或“%0 N d”,例如转换单个图像文件 img.jpeg你可以使用命令:
ffmpeg -i img.jpeg img.png
- glob
选择全局通配符模式类型。
模式被解释为
glob()
模式。仅当 libavformat 编译时支持通配符时,此选项才可选。- glob_sequence (deprecated, will be removed)
选择混合的通配符/序列模式。
如果您的 libavformat 版本是使用 globbing 支持进行编译的,并且提供的模式至少包含一个 glob 元字符,其中前面有一个
%*?[]{}
未转义的“%”,则该模式将被解释为模式glob()
,否则将被解释为序列模式。所有全局特殊字符
%*?[]{}
必须以“%”为前缀。要转义文字“%”,您应使用“%%”。例如,该模式
foo-%*.jpeg
将匹配所有以“foo-”为前缀并以“.jpeg”结尾的文件名,并将foo-%?%?%?.jpeg
匹配所有以“foo-”为前缀、后跟三个字符的序列并以“.jpeg”结尾的文件名”。此模式类型已弃用,取而代之的是glob和 sequence。
默认值为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,将向输入中找到的元数据添加两个额外字段,使它们也可用于其他过滤器(有关示例,请参阅绘图文本过滤器)。默认值为 0。额外字段描述如下:
- lavf.image2dec.source_path
对应于正在读取的输入文件的完整路径。
- lavf.image2dec.source_basename
对应于正在读取的文件的名称。
3.12.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
3.13 libgme
Game Music Emu 库是视频游戏音乐文件模拟器的集合。
请参阅https://bitbucket.org/mpyne/game-music-emu/overview了解更多信息。
它接受以下选项:
- track_index
设置要解复用的轨道的索引。解复用器只能导出一首曲目。轨道索引从 0 开始。默认是选择第一条轨道。曲目数量导出为曲目元数据条目。
- sample_rate
设置导出曲目的采样率。范围是 1000 到 999999。默认值为 44100。
- max_size (bytes)
解复用器将整个文件缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来又充当可读取文件大小的上限。默认值为 50 MiB。
3.14 libmodplug
基于 ModPlug 的模块解复用器
请参阅https://github.com/Konstanty/libmodplug
它将导出一个 2 通道 16 位 44.1 kHz 音频流。或者,pal8
可以导出带有或不带有打印元数据的 16 色视频流。
它接受以下选项:
- noise_reduction
应用一个简单的低通滤波器。可以是 1(打开)或 0(关闭)。默认值为 0。
- reverb_depth
设置混响量。范围 0-100。默认值为 0。
- reverb_delay
设置延迟(以毫秒为单位),限制为 40-250 毫秒。默认值为 0。
- bass_amount
应用低音扩展,又名 XBass 或 megabass。范围是 0(安静)到 100(大声)。默认值为 0。
- bass_range
设置截止频率,即低音频率的上限。范围为 10-100 Hz。默认值为 0。
- surround_depth
应用杜比定向逻辑环绕声效果。范围是 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
,pattern
和row
。- video_stream
生成视频流。可以是 1(打开)或 0(关闭)。默认值为 0。
- video_stream_w
以“字符”为单位设置视频帧宽度,其中 1 个字符表示 8 个像素。范围为 20-512。默认值为 30。
- video_stream_h
以“字符”为单位设置视频帧高度,其中 1 个字符表示 8 个像素。范围为 20-512。默认值为 30。
- video_stream_ptxt
打印视频流上的元数据。包括
speed
、tempo
、order
、pattern
和 (时间以毫秒为单位)row
。ts
可以是 1(打开)或 0(关闭)。默认值为 1。
3.15 libopenmpt
基于 libopenmpt 的模块解复用器
请参阅https://lib.openmpt.org/libopenmpt/了解更多信息。
有些文件有多个子歌曲(曲目),可以使用副歌 选项。
它接受以下选项:
- subsong
设置子歌曲索引。这可以是“全部”、“自动”或子歌曲的索引。子歌曲索引从 0 开始。默认值为“自动”。
默认值是让libopenmpt选择。
- layout
设置通道布局。有效值为 1、2 和 4 通道布局。默认值为立体声。
- sample_rate
设置 libopenmpt 输出的采样率。范围从 1000 到 INT_MAX。默认值是 48000。
3.16 mov/mp4/3gp
Quicktime 文件格式和 ISO/IEC 基本媒体文件格式的解复用器(ISO/IEC 14496-12 或 MPEG-4 第 12 部分、ISO/IEC 15444-12 或 JPEG 2000 第 12 部分)。
注册扩展名:mov、mp4、m4a、3gp、3g2、mj2、psp、m4b、ism、ismv、isma、f4v
3.16.1 选项
该分路器接受以下选项:
- enable_drefs
启用外部轨道加载,默认禁用。理论上,启用此功能可能会在某些用例中泄漏信息。
- use_absolute_path
允许通过绝对路径加载外部轨道,默认情况下禁用。启用此功能会带来安全风险。仅当已知来源非恶意时才应启用它。
- seek_streams_individually
查找时,单独识别每个流中最近的点,并从识别的点解复用该流中的数据包。与从一开始就线性解复用相比,这可能会导致不同的数据包序列。默认为 true。
- ignore_editlist
忽略任何编辑列表原子。默认情况下,解复用器会修改流索引以反映编辑列表所描述的时间线。默认为 false。
- advanced_editlist
修改流索引以反映编辑列表描述的时间线。
ignore_editlist
必须设置为 false 才能使该选项生效。如果两者ignore_editlist
都设置为 false,则仅修改流索引的开头以反映编辑列表描述的初始停留时间或开始时间戳。默认为 true。- ignore_chapters
不要解析章节。这包括 GoPro“HiLight”标签/时刻。请注意,仅当输入可查找时才会解析章节。默认为 false。
- use_mfra_for
对于可查找的分段输入,从媒体片段随机访问框(如果存在)设置片段的起始时间戳。
可以使用以下选项:
- ‘auto’
自动检测是否将mfra时间戳设置为PTS或DTS (默认)
- ‘dts’
将 mfra 时间戳设置为 DTS
- ‘pts’
将 mfra 时间戳设置为 PTS
- ‘0’
不要使用 mfra 框设置时间戳
- use_tfdt
对于分段输入,将片段的起始时间戳设置为
baseMediaDecodeTime
from thetfdt
box。默认是启用的,这会优先使用tfdt
DTS框来设置。禁止使用earliest_presentation_time
包装盒中的产品sidx
。mfra
在任何一种情况下,如果可用且use_mfra_for
设置为 pts 或 dts, 则将使用框中的时间戳。- export_all
将udta框中无法识别的框导出为元数据条目。框类型的前四个字符被设置为键。默认为 false。
- export_xmp
将XMP_框和uuid框的全部内容导出为带有 key 的字符串
xmp
。请注意,如果export_all
设置了此选项而未设置此选项,则XMP_ box 的内容仍会导出,但带有 keyXMP_
。默认为 false。- activation_bytes
解密 Audible AAX 和 AAX+ 文件所需的 4 字节密钥。请参阅下面的 Audible AAX 小节。
- audible_fixed_key
用于处理 Audible AAX/AAX+ 文件的固定键。它已预先设置,因此无需指定。
- decryption_key
16 字节密钥(十六进制),用于解密使用 ISO 通用加密(CENC/AES-128 CTR;ISO/IEC 23001-7)加密的文件。
- max_stts_delta
有时可能会有意在 trak 的 stts 框中写入非常高的样本增量,但通常它们会被错误写入,或者在被视为有符号 32 位整数时用于存储负值以进行 dts 校正。此选项允许用户设置一个上限,超过该上限,增量将被限制为 1。如果转换为 int32 时为负,则大于该限制的值将用于调整向前的 dts。
单位是轨道时间尺度。范围是 0 到 UINT_MAX。默认值
UINT_MAX - 48000*10
允许对 48 kHz 音频流进行长达 10 秒的 dts 校正,同时适应 99.9% 的uint32
范围。- interleaved_read
在解复用器级别交错来自多个轨道的数据包。对于交错严重的文件,这可以防止因不同轨道中的数据包之间的较大间隙而导致的播放问题,因为 MOV/MP4 没有数据包放置要求。但是,由于在轨道之间进行查找,这可能会导致对非常糟糕的交错文件进行过度查找,因此禁用它可能会阻止 I/O 问题,但会影响播放。
3.16.2 有声 AAX
Audible AAX 文件是加密的 M4B 文件,可以通过指定 4 字节激活密钥来解密。
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
3.17 mpegts
MPEG-2 传输流解复用器。
该分路器接受以下选项:
- resync_size
设置查找新同步的大小限制。默认值为 65536。
- skip_unknown_pmt
对于 PAT 中未定义的程序,跳过 PMT。默认值为 0。
- fix_teletext_pts
使用根据图文电视流所属且不被丢弃的第一个节目的 PCR 计算出的时间戳来覆盖图文电视数据包 PTS 和 DTS 值。默认值为 1,如果您希望图文电视数据包 PTS 和 DTS 值保持不变,请将此选项设置为 0。
- ts_packetsize
输出选项携带原始数据包大小(以字节为单位)。显示检测到的原始数据包大小,用户无法设置。
- scan_all_pmts
扫描并合并所有 PMT。该值为-1到1之间的整数(-1表示自动设置,1表示启用,0表示禁用)。默认值为-1。
- merge_pmt_versions
当 PMT 版本更新并且基本流移动到不同的 PID 时,重新使用现有流。默认值为 0。
- max_packet_size
设置解复用器发出的数据包的最大大小(以字节为单位)。超过此大小的有效负载被分成多个数据包。范围是 1 到 INT_MAX/2。默认值为 204800 字节。
3.18 mpjpeg
MJPEG 封装在多部分 MIME 解复用器中。
该解复用器允许读取 MJPEG,其中每个帧都表示为 multipart/x-mixed-replace 流的一部分。
- strict_mime_boundary
默认实现对多部分 MIME 边界检测应用宽松的标准,以防止大量现有端点不生成正确的 MIME MJPEG 流而出现回归。通过将其设置为 1 来打开此选项将导致对边界值进行更严格的检查。
3.19 rawvideo
原始视频解复用器。
该解复用器允许读取原始视频数据。由于没有指定假定视频参数的标头,因此用户必须指定它们才能正确解码数据。
该分路器接受以下选项:
- framerate
设置输入视频帧速率。默认值为 25。
- pixel_format
设置输入视频像素格式。默认值为
yuv420p
。- video_size
设置输入视频大小。该值必须明确指定。
例如读取原始视频文件输入.raw,假设
ffplay
像素格式为rgb24
、视频大小为320x240
、帧速率为每秒 10 个图像,请使用以下命令:
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
3.20 sbg
SBaGen 脚本分解器。
该解复用器读取 SBaGen http://uazu.net/sbagen/使用的脚本语言 来生成双耳节拍会话。SBG 脚本如下所示:
-SE a: 300-2.5/3 440+4.5/0 b: 300-2.5/0 440+4.5/3 off: - NOW == a +0:07:00 == b +0:14:00 == a +0:21:00 == b +0:30:00 off
SBG 脚本可以混合绝对和相对时间戳。如果脚本仅使用绝对时间戳(包括脚本开始时间)或仅使用相对时间戳,则其布局是固定的,并且转换很简单。另一方面,如果脚本混合使用两种时间戳,则相对时间戳的NOW引用将从读取脚本时的当前时间获取,并且脚本布局将根据该引用冻结。这意味着,如果直接播放脚本,实际时间将与声音控制器的时钟精度的绝对时间戳相匹配,但如果用户以某种方式暂停播放或搜索,所有时间将相应地移动。
3.21 tedcaptions
用于TED 演讲的 JSON 标题。
TED 没有提供标题链接,但可以从页面中猜出。文件工具/bookmarklets.htmlFFmpeg 源代码树中包含一个书签来公开它们。
该分路器接受以下选项:
- start_time
设置 TED 演讲的开始时间(以毫秒为单位)。默认值为 15000(15 秒)。它用于将字幕与可下载视频同步,因为它们包含 15 秒的介绍。
示例:将字幕转换为大多数玩家都能理解的格式:
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
3.22 vapoursynth
Vaporsynth 包装器。
出于安全考虑,Vapoursynth 脚本不会被自动检测,因此必须强制输入格式。对于 ff* CLI 工具,请-f vapoursynth
在输入之前添加-i yourscript.vpy
.
该分路器接受以下选项:
- max_script_size
解复用器将整个脚本缓冲到内存中。调整此值以设置最大缓冲区大小,这反过来又充当可以读取的脚本大小的上限。默认值为 1 MiB。
4 个复用器
复用器是 FFmpeg 中的配置元素,允许将多媒体流写入特定类型的文件。
当您配置 FFmpeg 构建时,默认情况下会启用所有支持的复用器。您可以使用配置选项列出所有可用的复用器--list-muxers
。
您可以使用configure选项禁用所有复用器
,并使用选项/
--disable-muxers
选择性地启用/禁用单个复用器。
--enable-muxer=MUXER
--disable-muxer=MUXER
ff* 工具的选项-muxers
将显示已启用的复用器列表。用于-formats
查看已启用的解复用器和复用器的组合列表。
下面是一些当前可用的复用器的描述。
4.1 a64
用于 Commodore 64 视频的 A64 复用器。接受单个a64_multi
或a64_multi5
编解码器视频流。
4.2 adts
音频数据传输流复用器。它接受单个 AAC 流。
4.2.1 选项
它接受以下选项:
- write_id3v2 bool
允许在流的开头写入 ID3v2.4 标签。默认为禁用。
- write_apetag bool
允许在流末尾写入 APE 标签。默认为禁用。
- write_mpeg2 bool
启用将 ADTS 帧头中的 MPEG 版本位设置为 1,表示 MPEG-2。默认值为 0,表示 MPEG-4。
4.3 aiff
音频交换文件格式复用器。
4.3.1 选项
它接受以下选项:
- write_id3v2
设置为 1 时启用 ID3v2 标签写入。默认值为 0(禁用)。
- id3v2_version
选择ID3v2版本进行写入。目前仅支持版本 3 和 4(又名 ID3v2.3 和 ID3v2.4)。默认为版本 4。
4.4 alp
用于 HighVoltage Software 的 Lego Racers 游戏音频的复用器。它接受不超过 2 个通道且采样率不超过 44100 Hz 的单个 ADPCM_IMA_ALP 流。
扩展名:tun、pcm
4.4.1 选项
它接受以下选项:
- type type
设置文件类型。
- ‘tun’
将文件类型设置为音乐。采样率必须为 22050 Hz。
- ‘pcm’
将文件类型设置为 sfx。
- ‘auto’
根据输出文件扩展名设置文件类型。
.pcm
结果类型为pcm
其他类型tun
已设置。(默认)
4.5 asf
高级系统格式复用器。
请注意,Windows Media Audio (wma) 和 Windows Media Video (wmv) 也使用此复用器。
4.5.1 选项
它接受以下选项:
- packet_size
设置复用器数据包大小。通过调整此设置,您可以减少数据碎片或复用器开销,具体取决于您的源。默认值为 3200,最小值为 100,最大值为 64k。
4.6 avi
音频视频交错复用器。
4.6.1 选项
它接受以下选项:
- reserve_index_space
为文件头中每个流的 OpenDML 主索引保留指定的字节数。默认情况下,如果第一个主索引中没有剩余空间,则附加主索引将嵌入数据包中,并作为索引链链接在一起。此索引结构可能会在某些用例中导致问题,例如第三方软件严格依赖 OpenDML 索引规范或文件查找速度缓慢时。在文件头中保留足够的索引空间可以避免这些问题。
所需的索引空间取决于输出文件的大小,并且应该约为每 GB 16 字节。当省略此选项或将其设置为零时,将猜测必要的索引空间。
- write_channel_mask
将通道布局掩码写入音频流标头。
默认情况下启用此选项。禁用通道掩码在特定情况下很有用,例如,将多个音频流合并为一个以与仅支持 AVI 中单个音频流的软件兼容时(请参阅 (ffmpeg-filters)ffmpeg-filters 手册中的“amerge”部分))。
- flipped_raw_rgb
如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。
4.7 chromaprint
色谱指纹仪。
该复用器将音频数据提供给 Chromaprint 库,后者为所提供的音频数据生成指纹。请参阅https://acoustid.org/chromaprint
它需要最多 2 个通道的单个签名本机字节序 16 位原始音频流。
4.7.1 选项
- silence_threshold
检测静音的阈值。范围从 -1 到 32767,其中 -1 禁用静音检测。静音检测只能与算法的版本 3 一起使用。必须禁用静音检测才能与 AcoustID 服务一起使用。默认值为-1。
- algorithm
指纹算法的版本。范围是 0 到 4。版本 3 启用静音检测。默认值为 1。
- fp_format
输出指纹的格式为。接受以下选项:
- ‘raw’
二进制原始指纹
- ‘compressed’
二进制压缩指纹
- ‘base64’
Base64 压缩指纹(默认)
4.8 crc
CRC(循环冗余校验)测试格式。
该复用器计算并打印所有输入音频和视频帧的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。
复用器的输出由以下形式的单行组成: CRC=0x CRC,其中CRC是一个用 0 填充的十六进制数,包含所有已解码输入帧的 CRC 的 8 位数字。
另请参见framecrc复用器。
4.8.1 示例
例如计算输入的 CRC,并将其存储在文件中 输出CRC:
ffmpeg -i INPUT -f crc out.crc
您可以使用以下命令将 CRC 打印到 stdout:
ffmpeg -i INPUT -f crc -
ffmpeg
您可以通过指定音频和视频编解码器和格式来选择每帧的输出格式。例如,要计算转换为 PCM 无符号 8 位的输入音频和转换为 MPEG-2 视频的输入视频的 CRC,请使用以下命令:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
4.9 dash
基于 HTTP 的动态自适应流 (DASH) 复用器,根据 MPEG-DASH 标准 ISO/IEC 23009-1:2014 创建片段和清单文件。
欲了解更多信息,请参阅:
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specation
它为每个流创建 MPD 清单文件和段文件。
段文件名可能包含与 SegmentTemplate 一起使用的预定义标识符,如标准第 5.3.9.4.4 节中定义的那样。可用标识符为“$RepresentationID$”、“$Number$”、“$Bandwidth$”和“$Time$”。除了标准标识符之外,还支持 ffmpeg 特定的“$ext$”标识符。当指定时,ffmpeg 会将文件名中的 $ext$ 替换为 muxing 格式的扩展名,例如 mp4、webm 等,
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \ -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline \ -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 \ -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 \ -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" \ -f dash /path/to/out.mpd
- seg_duration duration
设置以秒为单位的段长度(可以设置小数值)。当启用 use_template且禁用use_timeline时,该值被视为平均分段持续时间,并且被视为所有其他用例的最小分段持续时间。
- frag_duration duration
设置段内片段的长度(以秒为单位)(可以设置小数值)。
- frag_type type
设置分片的间隔类型。
- window_size size
设置清单中保留的最大段数。
- extra_window_size size
设置从磁盘删除之前保留在清单之外的最大段数。
- remove_at_exit remove
完成后启用 (1) 或禁用 (0) 删除所有段。
- use_template template
启用 (1) 或禁用 (0) 使用 SegmentTemplate 而不是 SegmentList。
- use_timeline timeline
在 SegmentTemplate 中启用 (1) 或禁用 (0) 使用 SegmentTimeline。
- single_file single_file
启用 (1) 或禁用 (0) 将所有段存储在一个文件中,并使用字节范围进行访问。
- single_file_name file_name
用于 baseURL 的 DASH 模板名称。意味着single_file设置为“1”。在模板中,“$ext$”被替换为特定于段格式的文件扩展名。
- init_seg_name init_name
用于初始化段的 DASH 模板名称。默认为“init-stream$RepresentationID$.$ext$”。“$ext$”被替换为特定于段格式的文件扩展名。
- media_seg_name segment_name
用于媒体片段的 DASH 模板名称。默认值为“chunk-stream$RepresentationID$-$Number%05d$.$ext$”。“$ext$”被替换为特定于段格式的文件扩展名。
- utc_timing_url utc_url
将返回 ISO 格式的 UTC 时间戳的页面的 URL。示例:“https://time.akamai.com/?iso”
- method method
使用给定的 HTTP 方法创建输出文件。一般设置为PUT或POST。
- http_user_agent user_agent
覆盖 HTTP 标头中的 User-Agent 字段。仅适用于 HTTP 输出。
- http_persistent http_persistent
使用持久 HTTP 连接。仅适用于 HTTP 输出。
- hls_playlist hls_playlist
还生成 HLS 播放列表文件。主播放列表是使用文件名hls_master_name生成的。为每个流生成一个媒体播放列表文件,文件名为 media_0.m3u8、media_1.m3u8 等。
- hls_master_name file_name
HLS 主播放列表名称。默认为“master.m3u8”。
- streaming streaming
启用 (1) 或禁用 (0) 输出的块流模式。在块流模式下,每一帧将是形成块的moof片段。
- adaptation_sets adaptation_sets
将流分配给 AdaptationSet。语法为“id=x,streams=a,b,c id=y,streams=d,e”,其中 x 和 y 是自适应集的 ID,a、b、c、d 和 e 是自适应集的索引。映射的流。
要将所有视频(或音频)流映射到 AdaptationSet,可以使用“v”(或“a”)而不是 ID 作为流标识符。
如果未定义分配,则默认为每个流的 AdaptationSet。
可选语法为“id=x,seg_duration=x,frag_duration=x,frag_type=type,descriptor=descriptor_string,streams=a,b,c id=y,seg_duration=y,frag_type=type,streams=d,e”并且依此类推,描述符对于 ISO/IEC 23009-1:2014/Amd.2:2015 定义的方案很有用。例如,-adaptation_sets "id=0,descriptor=<SupplementalProperty schemaIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/> ,流=v”。请注意,描述符字符串应该是自闭合 xml 标记。seg_duration、frag_duration 和 frag_type 覆盖每个适应集的全局选项值。例如, -adaptation_sets "id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a" type_id 将适配集标记为包含流用于参考适应集的技巧模式。例如,-adaptation_sets“id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1”
- timeout timeout
设置套接字 I/O 操作的超时。仅适用于 HTTP 输出。
- index_correction index_correction
启用 (1) 或禁用 (0) 段索引校正逻辑。仅当启用use_template且禁用 use_timeline时适用 。
启用后,逻辑会监视段索引的流。如果流的段索引值不在预期的实时位置,则逻辑将更正该索引值。
通常,直播用例中需要此逻辑。在长时间运行流媒体期间,网络带宽波动很常见。每次波动都会导致段索引落后于预期的实时位置。
- format_options options_list
使用单独的 key=value 参数列表设置容器格式 (mp4/webm) 选项
:
。包含特殊字符的值:
必须进行转义。- global_sidx global_sidx
写入全局 SIDX 原子。仅适用于单文件、mp4 输出、非流模式。
- dash_segment_type dash_segment_type
可能的值:
- auto
如果设置此标志,则将根据流编解码器选择短划线段文件格式。这是默认模式。
- mp4
如果设置此标志,则破折号段文件将采用 ISOBMFF 格式。
- webm
如果设置此标志,则破折号段文件将采用 WebM 格式。
- ignore_io_errors ignore_io_errors
忽略打开和写入期间的 IO 错误。对于使用网络输出进行长时间运行很有用。
- lhls lhls
启用低延迟 HLS(LHLS)。添加带有当前段 URI 的 #EXT-X-PREFETCH 标记。hls.js 玩家正在尝试标准化开放的 LHLS 规范。草案规范可在 https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md 中找到。此选项尝试遵守上述开放规范。它自动启用流媒体和hls_playlist选项。这是一个实验性功能。
注意:这不是 Apple 版本的 LHLS。请参阅https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
- ldash ldash
通过限制某些元素的存在和值来启用低延迟 Dash。
- master_m3u8_publish_rate master_m3u8_publish_rate
每隔指定数量的分段间隔重复发布主播放列表。
- write_prft write_prft
在支持的流上写入生产者参考时间元素。这还可以在底层复用器中写入 prft 框。仅当启用utc_url选项时适用。默认情况下它设置为自动,在这种情况下,复用器将尝试仅在需要它的模式下启用它。
- mpd_profile mpd_profile
设置一个或多个清单配置文件。
- http_opts http_opts
要传递给底层 HTTP 协议的以 : 分隔的 key=value 选项列表。仅适用于 HTTP 输出。
- target_latency target_latency
设置服务的预期目标延迟(以秒为单位)(可以设置小数值)。仅当启用了Streaming和write_prft选项时才适用。这是客户可以用来测量服务延迟的信息字段。
- min_playback_rate min_playback_rate
设置适当的最低播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。
- max_playback_rate max_playback_rate
设置适当的最大播放速率,以便客户端正常播放时自动调整播放延迟和缓冲区占用率。
- update_period update_period
设置动态内容的 mpd 更新周期。单位是第二位。
4.10 fifo
fifo 伪复用器允许通过使用先进先出队列并在单独的线程中运行实际复用器来分离编码和复用器。这与tee复用器结合使用特别有用,可用于将数据发送到具有不同可靠性/写入速度/延迟的多个目的地。
API 用户应该注意,在其 AVFormatContext 中使用的回调函数(interrupt_callback、io_open 和 io_close)必须是线程安全的。
如果队列已满或输出失败,fifo 复用器的行为是可选择的,
- 可以根据实时或处理流的时间,透明地重新启动输出,并在重试之间设置可配置的延迟。
- 编码可以在临时故障期间被阻止,或者在 fifo 队列填满的情况下继续透明地丢弃数据包。
- fifo_format
指定格式名称。如果无法从输出名称后缀猜测出来,则很有用。
- queue_size
指定队列的大小(数据包数量)。默认值为 60。
- format_opts
指定底层复用器的格式选项。Muxer 选项可以指定为由“:”分隔的 键=值对列表。
- drop_pkts_on_overflow bool
如果设置为 1 (true),万一 fifo 队列已满,数据包将被丢弃而不是阻塞编码器。这使得可以在不延迟输入的情况下继续流式传输,但代价是省略部分流。默认情况下,此选项设置为 0(假),因此在这种情况下,编码器将被阻止,直到复用器处理一些数据包并且它们都不会丢失。
- attempt_recovery bool
如果发生故障,请尝试恢复输出。这在与网络输出一起使用时特别有用,因为它可以透明地重新启动流式传输。默认情况下,此选项设置为 0 (false)。
- max_recovery_attempts
设置连续不成功恢复尝试的最大次数,在此之后输出将永久失败。默认情况下,此选项设置为 0(无限制)。
- recovery_wait_time duration
上一次恢复尝试失败后,下一次恢复尝试之前的等待时间。默认值为 5 秒。
- recovery_wait_streamtime bool
如果设置为 0 (false),则在等待恢复尝试时使用实际时间(即,将在至少 recovery_wait_time 秒后尝试恢复)。如果设置为 1 (true),则会考虑已处理流的时间(即,将在省略 流的至少recovery_wait_time秒后尝试恢复)。默认情况下,此选项设置为 0 (false)。
- recover_any_error bool
如果设置为 1 (true),则无论导致失败的错误类型如何,都将尝试恢复。默认情况下,此选项设置为 0 (false),并且在出现某些(通常是永久性)错误的情况下,即使attempt_recovery设置为 1, 也不会尝试恢复 。
- restart_with_keyframe bool
指定从队列溢出或故障恢复后是否等待关键帧。默认情况下,此选项设置为 0 (false)。
- timeshift duration
缓冲指定数量的数据包并延迟写入输出。请注意, queue_size必须足够大才能存储时移数据包。输入结束时,fifo 缓冲区会以实时速度刷新。
4.10.1 示例
- 将某些内容流式传输到 rtmp 服务器,即使在临时故障(网络中断)的情况下也继续以实时速率处理流,并尝试无限期地每秒恢复流式传输。
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv -map 0:v -map 0:a -drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 rtmp://example.com/live/stream_name
4.11 flv
Adobe Flash 视频格式混合器。
该复用器接受以下选项:
- flvflags flags
可能的值:
- ‘aac_seq_header_detect’
根据音频流数据放置 AAC 序列头。
- ‘no_sequence_end’
禁用序列结束标记。
- ‘no_metadata’
禁用元数据标签。
- ‘no_duration_filesize’
当元数据中的持续时间和文件大小在流末尾等于零时,禁用它们。(习惯不可寻求的生活流)。
- ‘add_keyframe_index’
用于方便查找;特别是对于 HTTP 伪流。
4.12 framecrc
每个数据包 CRC(循环冗余校验)测试格式。
该复用器计算并打印每个音频和视频数据包的 Adler-32 CRC。默认情况下,在计算 CRC 之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频。
复用器的输出由每个音频和视频数据包的一行组成,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
CRC是一个用 0 填充的 8 位十六进制数,包含数据包的 CRC。
4.12.1 示例
例如计算音频和视频帧的 CRC 输入,转换为原始音视频数据包,并存储在文件中输出CRC:
ffmpeg -i INPUT -f framecrc out.crc
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framecrc -
使用ffmpeg
,您可以在通过指定音频和视频编解码器计算每个数据包的 CRC 之前选择音频和视频帧编码的输出格式。例如,要计算转换为 PCM 无符号 8 位的每个已解码输入音频帧以及转换为 MPEG-2 视频的每个已解码输入视频帧的 CRC,请使用以下命令:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
另请参见crc复用器。
4.13 framehash
每个数据包哈希测试格式。
该复用器计算并打印每个音频和视频数据包的加密哈希值。这可用于逐个数据包的相等性检查,而无需单独对每个数据包进行二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由每个音频和视频数据包的一行组成,格式如下:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
hash是一个十六进制数,表示数据包的计算哈希值。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
4.13.1 示例
计算音频和视频帧的 SHA-256 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出sha256:
ffmpeg -i INPUT -f framehash out.sha256
要使用 MD5 哈希函数将信息打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f framehash -hash md5 -
另请参见哈希复用器。
4.14 framemd5
每个数据包的 MD5 测试格式。
这是framehash muxer 的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。
4.14.1 示例
计算音频和视频帧的 MD5 哈希值输入,转换为原始音视频数据包,并存储在文件中 输出.md5:
ffmpeg -i INPUT -f framemd5 out.md5
要将信息打印到标准输出,请使用以下命令:
ffmpeg -i INPUT -f framemd5 -
4.15 gif
动画 GIF 混合器。
它接受以下选项:
- loop
设置循环输出的次数。使用
-1
for 无循环,0
for 无限循环(默认)。- final_delay
在最后一帧之后强制延迟(以厘秒表示)。每帧结束时都会有延迟,直到下一帧为止。默认值为
-1
,这是一个特殊值,用于告诉复用器重新使用之前的延迟。如果出现循环,您可能需要自定义此值以标记暂停。
例如,要对循环 10 次的 gif 进行编码,循环之间有 5 秒的延迟:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
注意1:如果你想将帧提取到单独的GIF文件中,你需要强制image2 muxer:
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
注2:GIF格式具有非常大的时基:因此两帧之间的延迟不能小于一厘秒。
4.16 hash
哈希测试格式。
该复用器计算并打印所有输入音频和视频帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由以下形式的单行组成: algo = hash,其中algo是表示所使用的哈希函数的短字符串,hash是表示计算的哈希值的十六进制数。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
4.16.1 示例
计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:
ffmpeg -i INPUT -f hash out.sha256
要将 MD5 哈希打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f hash -hash md5 -
另请参见framehash muxer。
4.17 hls
Apple HTTP Live Streaming 复用器,根据 HTTP Live Streaming (HLS) 规范对 MPEG-TS 进行分段。
它创建一个播放列表文件和一个或多个片段文件。输出文件名指定播放列表文件名。
默认情况下,复用器为生成的每个段创建一个文件。这些文件与播放列表具有相同的名称,后跟序列号和 .ts 扩展名。
确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。
例如,要使用以下命令转换输入文件ffmpeg
:
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 输出0.ts,输出1.ts,输出2.ts, ETC。
另请参阅分段复用器,它提供了分段器的更通用和灵活的实现,并且可用于执行 HLS 分段。
4.17.1 选项
该复用器支持以下选项:
- hls_init_time duration
设置初始目标段长度。默认值为0。
持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。
在第一个 m3u8 列表上经过该时间后,将在下一个关键帧处剪切片段。初始播放列表填满后,
ffmpeg
将在持续时间等于hls_time
- hls_time duration
设置目标段长度。默认值为 2。
持续时间必须是持续时间规范,请参阅ffmpeg-utils(1) 手册中的 (ffmpeg-utils)持续时间部分。该时间过后,将在下一个关键帧处剪切片段。
- hls_list_size size
设置播放列表条目的最大数量。如果设置为 0,列表文件将包含所有段。默认值为 5。
- hls_delete_threshold size
hls_flags delete_segments
设置删除之前保留在磁盘上的未引用段的数量。增加此值以允许客户端继续下载播放列表中最近引用的片段。默认值为 1,这意味着早于该值的段hls_list_size+1
将被删除。- hls_start_number_source
#EXT-X-MEDIA-SEQUENCE
根据指定源开始播放列表序号( )。除非hls_flags single_file
设置,否则它还指定片段和字幕文件名的起始序列号的来源。在任何情况下,如果hls_flags append_list
设置并读取的播放列表序列号大于指定的起始序列号,则该值将用作起始值。它接受以下值:
- generic (default)
根据start_number选项值设置起始序列号。
- epoch
起始编号为自纪元 (1970-01-01 00:00:00) 以来的秒数
- epoch_us
起始编号为自纪元 (1970-01-01 00:00:00) 以来的微秒数
- datetime
开始编号将基于当前日期/时间 YYYYmmddHHMMSS。例如20161231235759。
- start_number number
当hls_start_number_source值为generic
#EXT-X-MEDIA-SEQUENCE
时,从指定编号开始播放列表序号 ( ) 。(这是默认情况。)除非设置,否则它还会指定片段和字幕文件名的起始序列号。默认值为 0。hls_flags single_file
- hls_allow_cache allowcache
显式设置客户端是否可以 (1) 或不得 (0) 缓存媒体片段。
- hls_base_url baseurl
将baseurl附加到播放列表中的每个条目。对于生成具有绝对路径的播放列表很有用。
请注意,每个片段的播放列表序列号必须是唯一的,并且不要与可以循环的片段文件名序列号混淆,例如,如果裹选项已指定。
- hls_segment_filename filename
设置段文件名。除非
hls_flags single_file
设置, 否则文件名将用作带有段号的字符串格式:ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 文件000.ts,文件001.ts,文件002.ts, ETC。
文件名可以包含完整路径或相对路径规范,但只有没有任何路径信息的文件名部分才会包含在 m3u8 段列表中。如果指定相对路径,则创建的段文件的路径将相对于当前工作目录。当设置strftime_mkdir时,filename的整个扩展值将被写入m3u8段列表中。
当
var_stream_map
设置两个或多个变体流时, 文件名模式必须包含字符串“%v”,该字符串指定变体流索引在生成的段文件名中的位置。ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
此示例将生成播放列表片段文件集: 文件_0_000.ts,文件_0_001.ts,文件_0_002.ts等以及 文件_1_000.ts,文件_1_001.ts,文件_1_002.ts, ETC。
字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中,但仅出现在其中之一中。(此外,%v 可能会在最后一个子目录或文件名中多次出现。)如果目录名称中存在字符串 %v,则在扩展目录名称模式后将创建子目录。这使得能够在子目录中创建与不同变体流相对应的段。
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ -hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
此示例将生成播放列表片段文件集: vs0/file_000.ts,vs0/file_001.ts,vs0/file_002.ts等以及 vs1/file_000.ts,vs1/file_001.ts,vs1/file_002.ts, ETC。
- strftime
在文件名上使用 strftime()可以用本地时间扩展段文件名。段号在此模式下也可用,但要使用它,您需要指定 secondary_level_segment_index hls_flag 且 %%d 将作为说明符。
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-1455569023.ts,文件-20160215-1455569024.ts等。 注意:在某些系统/环境中,
%s
说明符不可用。请参阅strftime()
文档。ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
此示例将生成播放列表,输出.m3u8和段文件: 文件-20160215-0001.ts,文件-20160215-0002.ts, ETC。
- strftime_mkdir
与 -strftime_mkdir 一起使用,它将创建在filename中扩展的所有子目录。
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
本示例将创建一个目录201560215(如果不存在),然后生成播放列表,输出.m3u8和段文件: 20160215/文件-20160215-1455569023.ts,20160215/文件-20160215-1455569024.ts, ETC。
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
此示例将创建一个目录层次结构 2016/02/15(如果其中任何一个不存在),然后生成播放列表,输出.m3u8和段文件: 2016/02/15/文件-20160215-1455569023.ts,2016/02/15/文件-20160215-1455569024.ts, ETC。
- hls_segment_options options_list
使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值
:
必须进行转义。- hls_key_info_file key_info_file
使用key_info_file中的信息进行段加密。key_info_file的第一行指定写入播放列表的密钥 URI。密钥 URL 用于在播放期间访问加密密钥。第二行指定在加密过程中用于获取密钥的密钥文件的路径。密钥文件被读取为二进制格式的 16 个八位字节的单个打包数组。可选的第三行将初始化向量 (IV) 指定为十六进制字符串,用于代替段序列号(默认)进行加密。对key_info_file的更改将导致使用新密钥/IV 进行分段加密,并在播放列表中添加新密钥 URI/IV 的条目(如果
hls_flags periodic_rekey
已启用)。关键信息文件格式:
key URI key file path IV (optional)
关键 URI 示例:
http://server/file.key /path/to/file.key file.key
关键文件路径示例:
file.key /path/to/file.key
实施例四:
0123456789ABCDEF0123456789ABCDEF
关键信息文件示例:
http://server/file.key /path/to/file.key 0123456789ABCDEF0123456789ABCDEF
shell 脚本示例:
#!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > file.key echo $BASE_URL/file.key > file.keyinfo echo file.key >> file.keyinfo echo $(openssl rand -hex 16) >> file.keyinfo ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \ -hls_key_info_file file.keyinfo out.m3u8
- -hls_enc enc
启用 (1) 或禁用 (0) AES128 加密。启用后,生成的每个片段都会被加密,并且加密密钥将保存为播放列表名称.key。
- -hls_enc_key key
用于加密段的 16 字节密钥,默认情况下它是随机生成的。
- -hls_enc_key_url keyurl
如果设置,则将在播放列表中的密钥文件名 前面添加keyurl (而不是baseurl) 。
- -hls_enc_iv iv
每个段的 16 字节初始化向量,而不是自动生成的向量。
- hls_segment_type flags
可能的值:
- ‘mpegts’
以 MPEG-2 传输流格式输出片段文件。这与所有 HLS 版本兼容。
- ‘fmp4’
以分段 MP4 格式输出分段文件,类似于 MPEG-DASH。fmp4 文件可以在 HLS 版本 7 及更高版本中使用。
- hls_fmp4_init_filename filename
将文件名设置为片段文件头文件,默认文件名是初始化.mp4。
使用
-strftime 1
on filename以本地时间扩展段文件名。ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
这将产生像这样的 init 1602678741_init.mp4
- hls_fmp4_init_resend
每次 m3u8 文件刷新后重新发送 init 文件,默认为0。
当
var_stream_map
设置两个或多个变体流时, 文件名模式必须包含字符串“%v”,该字符串指定变体流索引在生成的初始化文件名中的位置。字符串“%v”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得能够在子目录中创建与不同变体流相对应的初始化文件。- hls_flags flags
可能的值:
- ‘single_file’
如果设置了此标志,复用器会将所有片段存储在单个 MPEG-TS 文件中,并将使用播放列表中的字节范围。通过这种方式生成的 HLS 播放列表的版本号将为 4。例如:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
将生成播放列表,输出.m3u8,和一个单独的段文件, 输出.ts。
- ‘delete_segments’
从播放列表中删除的片段文件将在一段等于片段持续时间加上播放列表持续时间的时间后被删除。
- ‘append_list’
将新段追加到旧段列表的末尾,并
#EXT-X-ENDLIST
从旧段列表中删除 。- ‘round_durations’
将播放列表文件段信息中的持续时间信息舍入为整数值,而不是使用浮点。如果没有其他功能需要使用更高的 HLS 版本,那么这将允许 ffmpeg 输出 HLS 版本 2 m3u8。
- ‘discont_start’
将
#EXT-X-DISCONTINUITY
标签添加到播放列表中第一个片段信息之前。- ‘omit_endlist’
不要将
EXT-X-ENDLIST
标签附加到播放列表的末尾。- ‘periodic_rekey’
hls_key_info_file
将定期检查指定的文件并检测加密信息的更新。请务必自动替换此文件,包括包含 AES 加密密钥的文件。- ‘independent_segments’
添加
#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’
当 strftime 打开时,除了日期/时间值之外,还可以在 hls_segment_filename 表达式中使用段索引作为 %%d。要获取带有尾随零的固定宽度数字,可以使用 %%0xd 格式,其中 x 是所需的宽度。
- ‘second_level_segment_size’
当 strftime 打开时,除了日期/时间值之外,还可以在 hls_segment_filename 表达式中使用段大小(以字节为单位)作为 %%s。要获取带有尾随零的固定宽度数字,可以使用 %%0xs 格式,其中 x 是所需的宽度。
- ‘second_level_segment_duration’
当 strftime 打开时,除了日期/时间值之外,还可以在 hls_segment_filename 表达式中使用段持续时间(以微秒计算)作为 %%t。要获取带有尾随零的固定宽度数字,可以使用 %%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
这将产生如下所示的段: 段_20170102194334_0003_00122200_0000003000000.ts,段_20170102194334_0004_00120072_0000003000000.tsETC。
- ‘temp_file’
仅在段完成后才将段数据写入 filename.tmp 并重命名为 filename。提供片段的网络服务器可以配置为拒绝对 *.tmp 的请求,以防止在将正在进行的片段添加到 m3u8 播放列表之前访问它们。此标志还会影响 m3u8 播放列表文件的创建方式。如果设置了此标志,则所有播放列表文件将写入临时文件并在完成后重命名,与处理片段类似。但是,无论此标志如何,具有
file
协议和类型 (hls_playlist_type
) 以外的播放列表vod
始终会写入临时文件。如果值不为零,则 主播放列表文件 (master_pl_name
)(如果有file
)始终会写入临时文件,无论此标志如何。master_pl_publish_rate
- hls_playlist_type event
#EXT-X-PLAYLIST-TYPE:EVENT
在 m3u8 标头中发出。军队 hls_列表大小至 0;播放列表只能附加到。- hls_playlist_type vod
#EXT-X-PLAYLIST-TYPE:VOD
在 m3u8 标头中发出。军队 hls_列表大小至 0;播放列表不得更改。- method
使用给定的 HTTP 方法创建 hls 文件。
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
本示例将使用 HTTP PUT 方法将所有 mpegts 分段文件上传到 HTTP 服务器,并
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”可能出现在文件名中或包含该文件的最后一个目录名中。如果目录名称中存在该字符串,则在展开目录名称模式后将创建子目录。这使得可以在子目录中创建变体流。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/out_%v.m3u8
此示例创建两个 hls 变体流。第一个变体流将包含比特率 1000k 的视频流和比特率 64k 的音频流,第二变体流将包含比特率 256k 的视频流和比特率 32k 的音频流。这里,将创建两个文件名为 out_0.m3u8 和 out_1.m3u8 的媒体播放列表。如果您想要一些有意义的文本而不是结果名称中的索引,您可以为每个或某些变体指定名称,如下例所示。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ http://example.com/live/out_%v.m3u8
此示例创建两个 hls 变体流,如上一个示例所示。但在这里,将创建文件名为 out_my_hd.m3u8 和 out_my_sd.m3u8 的两个媒体播放列表。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ http://example.com/live/out_%v.m3u8
此示例创建三个 hls 变体流。第一个变体流将是视频比特率 1000k 的纯视频流,第二个变体流将是比特率 64k 的纯音频流,第三个变体流将是比特率 256k 的纯视频流。这里,将创建文件名为 out_0.m3u8、out_1.m3u8 和 out_2.m3u8 的三个媒体播放列表。
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/vs_%v/out.m3u8
此示例在子目录中创建变体流。此处,第一个媒体播放列表创建于http://example.com/live/vs_0/out.m3u8第二个位于http://example.com/live/vs_1/out.m3u8。
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
此示例创建两个仅音频和两个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个仅音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到两个仅视频变体流音频组名称为“aud_low”和“aud_high”。
默认情况下,会创建一个包含所有编码流的 hls 变体。
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
此示例创建两个仅音频和一个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个纯音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到一个纯视频变体流音频组名称为“aud_low”,并且音频组的默认统计信息为“否”或“是”。
默认情况下,会创建一个包含所有编码流的 hls 变体。
ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
此示例创建两个仅音频和一个仅视频变体流。除了主播放列表中每个变体流的 #EXT-X-STREAM-INF 标签之外,还为两个纯音频变体流添加 #EXT-X-MEDIA 标签,并将它们映射到一个纯视频变体流音频组名称为“aud_low”,音频组的默认状态为 NO 或 YES,一个音频语言名为 ENG,另一种音频语言名为 CHN。
默认情况下,会创建一个包含所有编码流的 hls 变体。
ffmpeg -y -i input_with_subtitle.mkv \ -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ -b:a:0 256k \ -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle" \ -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ 10 -master_pl_publish_rate 10 -hls_flags \ delete_segments+discont_start+split_by_time ./tmp/video.m3u8
此示例在主播放列表中添加带有 webvtt 字幕组名称“subtitle”的
#EXT-X-MEDIA
标签。TYPE=SUBTITLES
请确保输入文件至少有一个文本字幕流。- cc_stream_map
指定不同隐藏式字幕组及其属性的映射字符串。隐藏式字幕流组由空格分隔。预期的字符串格式类似于“ccgroup:<组名称>,instreamid:<INSTREAM-ID>,语言:<语言代码> ....”。“ccgroup”和“instreamid”是强制属性。“语言”是一个可选属性。通过在字符串中提供相同的“ccgroup”名称,使用此选项配置的隐藏式字幕组将映射到不同的变体流
var_stream_map
。如果var_stream_map
未设置,则第一个可用的 ccgroupcc_stream_map
将映射到输出变体流。下面给出了这两个用例的示例。ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \ -master_pl_name master.m3u8 \ http://example.com/live/out.m3u8
此示例在主播放列表中添加
#EXT-X-MEDIA
标签 withTYPE=CLOSED-CAPTIONS
,组名称为“cc”,语言为“en”(英语),INSTREAM-ID 为“CC1”。此外,它还CLOSED-CAPTIONS
为输出变体流添加组名称“cc”的属性。ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -a53cc:0 1 -a53cc:1 1\ -map 0:v -map 0:a -map 0:v -map 0:a -f hls \ -cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \ -var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8
此示例在主播放列表中为 INSTREAM-ID“CC1”和“CC2”添加两个
#EXT-X-MEDIA
标签。TYPE=CLOSED-CAPTIONS
此外,它还CLOSED-CAPTIONS
为两个输出变体流添加组名称“cc”的属性。- master_pl_name
使用给定名称创建 HLS 主播放列表。
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
此示例创建名为 master.m3u8 的 HLS 主播放列表,并发布在 http://example.com/live/
- master_pl_publish_rate
每隔指定数量的分段间隔重复发布主播放列表。
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \ -hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8
此示例创建名为 master.m3u8 的 HLS 主播放列表,并每隔 30 段(即每隔 60 秒)重复发布它。
- http_persistent
使用持久 HTTP 连接。仅适用于 HTTP 输出。
- timeout
设置套接字 I/O 操作的超时。仅适用于 HTTP 输出。
- ignore_io_errors
忽略打开、写入和删除期间的 IO 错误。对于使用网络输出进行长时间运行很有用。
- headers
设置自定义 HTTP 标头,可以覆盖内置的默认标头。仅适用于 HTTP 输出。
4.18 ico
ICO 文件混合器。
微软的图标文件格式(ICO)有一些需要注意的严格限制:
- 任何维度的大小不能超过 256 像素
- 只能存储 BMP 和 PNG 图像
- 如果使用 BMP 图像,则它必须是以下像素格式之一:
BMP Bit Depth FFmpeg Pixel Format 1bit pal8 4bit pal8 8bit pal8 16bit rgb555le 24bit bgr24 32bit bgra
- 如果使用 BMP 图像,则必须使用 BITMAPINFOHEADER DIB 标头
- 如果使用PNG图像,则必须使用rgba像素格式
4.19 image2
图像文件混合器。
图像文件复用器将视频帧写入图像文件。
输出文件名由模式指定,该模式可用于生成按顺序编号的文件系列。该模式可以包含字符串“%d”或“%0 N d”,该字符串指定表示文件名中编号的字符的位置。如果使用“%0 N d”形式,则表示每个文件名中的数字的字符串将用 0 填充为N 位。可以使用字符串“%%”在模式中指定文字字符“%”。
如果模式包含“%d”或“%0 N d”,则指定的文件列表的第一个文件名将包含数字 1,后面的所有数字将是连续的。
该模式可能包含一个后缀,用于自动确定要写入的图像文件的格式。
例如,模式“img-%03d.bmp”将指定以下形式的文件名序列img-001.bmp,img-002.bmp, ..., img-010.bmp等。模式“img%%-%d.jpg”将指定以下形式的文件名序列img%-1.jpg,img%-2.jpg, ...,img%-10.jpg, ETC。
图像混合器支持 .YUV 图像文件格式。这种格式的特殊之处在于,每个图像帧由三个文件组成,分别对应 YUV420P 分量。要读取或写入此图像文件格式,请指定“.Y”文件的名称。复用器将根据需要自动打开“.U”和“.V”文件。
4.19.1 选项
- frame_pts
如果设置为 1,则使用 pkt->pts 中的 pts 扩展文件名。默认值为 0。
- start_number
从指定的数字开始序列。默认值为 1。
- update
如果设置为 1,文件名将始终被解释为文件名,而不是模式,并且相应的文件将不断被新图像覆盖。默认值为 0。
- strftime
如果设置为 1,则使用 中的日期和时间信息扩展文件名
strftime()
。默认值为 0。- atomic_writing
将输出写入临时文件,写入完成后该临时文件将重命名为目标文件名。默认为禁用。
- protocol_opts options_list
将协议选项设置为以 : 分隔的 key=value 参数列表。包含特殊字符的值
:
必须进行转义。
4.19.2 示例
以下示例展示了如何用于ffmpeg
创建文件序列img-001.jpeg,img-002.jpeg,...,每秒从输入视频中拍摄一张图像:
ffmpeg -i in.avi -vsync cfr -r 1 -f image2 'img-%03d.jpeg'
请注意ffmpeg
,使用 时,如果未使用选项指定格式
-f
且输出文件名指定图像文件格式,则自动选择 image2 muxer,因此前面的命令可以写为:
ffmpeg -i in.avi -vsync cfr -r 1 'img-%03d.jpeg'
另请注意,该模式不一定包含“%d”或“%0 N d”,例如创建单个图像文件 img.jpeg从输入视频开始,您可以使用以下命令:
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
这时间选项允许您使用日期和时间信息扩展文件名。检查该函数的文档strftime()
以了解语法。
例如,要从“%Y-%m-%d_%H-%M-%S”模式生成图像文件,可以使用
strftime()
以下命令:ffmpeg
ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
您可以使用当前帧的 PTS 设置文件名:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg
一个更复杂的示例是每秒将桌面内容直接发布到 WebDAV 服务器:
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
4.20 matroska
Matroska 容器混合器。
该复用器实现 matroska 和 webm 容器规范。
4.20.1 元数据
该复用器中可识别的元数据设置是:
- title
设置为单个曲目提供的标题名称。这将映射到作为附件写入的流的 FileDescription 元素。
- language
在 Matroska 语言表单中指定曲目的语言。
语言可以是 3 个字母的书目 ISO-639-2 (ISO 639-2/B) 形式(例如法语的“fre”),也可以是与语言专业的国家/地区代码混合的语言代码(例如“fre- ca”代表加拿大法语)。
- stereo_mode
在单个视频轨道中设置两个视图的立体 3D 视频布局。
认可以下值:
- ‘mono’
视频不是立体声
- ‘left_right’
两个视图并排排列,左眼视图在左侧
- ‘bottom_top’
两个视图均按上下方向排列,左眼视图在底部
- ‘top_bottom’
两个视图均按上下方向排列,左眼视图在顶部
- ‘checkerboard_rl’
每个视图均以棋盘交错图案排列,左眼视图排在第一位
- ‘checkerboard_lr’
每个视图均以棋盘交错图案排列,右眼视图排在第一位
- ‘row_interleaved_rl’
每个视图由基于行的交错构成,右眼视图是第一行
- ‘row_interleaved_lr’
每个视图由基于行的交错构成,左眼视图是第一行
- ‘col_interleaved_rl’
两个视图都以基于列的交错方式排列,右眼视图是第一列
- ‘col_interleaved_lr’
两个视图都以基于列的交错方式排列,左眼视图是第一列
- ‘anaglyph_cyan_red’
所有帧均采用浮雕格式,可通过红青色滤镜查看
- ‘right_left’
两个视图并排排列,右眼视图在左侧
- ‘anaglyph_green_magenta’
所有帧均采用浮雕格式,可通过绿色-洋红色滤镜查看
- ‘block_lr’
双眼并列,左眼视角优先
- ‘block_rl’
双眼并列,右眼视角优先
例如,可以使用以下命令行创建 3D WebM 剪辑:
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
4.20.2 选项
该复用器支持以下选项:
- reserve_index_space
默认情况下,该复用器将用于查找的索引(Matroska 术语中称为提示)写入文件末尾,因为它无法提前知道在文件开头为索引留出多少空间。然而,对于某些用例(例如可以进行搜索但速度较慢的流式传输),将索引放在文件的开头很有用。
如果此选项设置为非零值,则复用器将在文件头中保留给定的空间量,然后在复用完成时尝试在其中写入提示。如果保留空间不足,则不会写入任何 Cues,文件将被最终确定,并且写入预告片将返回错误。大多数用例的安全大小应为每小时 50kB 左右的视频。
请注意,仅当输出可查找时才会写入提示,否则此选项将不起作用。
- cues_to_front
如果设置,复用器将在必要时通过移动主数据将索引写入文件的开头。这可以与 Reserve_index_space 结合使用,在这种情况下,只有在最初保留的空间不足时才会移动数据。
如果输出不可查找,则忽略此选项。
- default_mode
此选项控制如何设置输出轨道的 FlagDefault。它影响玩家默认播放的曲目。默认模式是 '直通'。
- ‘infer’
每个具有默认配置的轨道都会设置 FlagDefault。此外,对于每种类型的轨道(音频、视频或字幕),如果不存在具有该类型默认配置的轨道,则该类型的第一个轨道将被标记为默认轨道(如果存在)。这确保了以合理的方式设置默认标志,即使输入源自缺乏默认轨道概念的容器。
- ‘infer_no_subs’
此模式与 infer 相同,只是如果不存在具有默认配置的字幕轨道,则不会将任何字幕轨道标记为默认。
- ‘passthrough’
在此模式下,当且仅当在相应流的处置中设置了 AV_DISPOSITION_DEFAULT 标志时,才会设置 FlagDefault。
- flipped_raw_rgb
如果设置为 true,则存储原始 RGB 位图的正高度,这表示位图是自下而上存储的。请注意,此选项不会翻转位图,必须事先手动完成,例如使用 vflip 滤镜。默认值为false,表示位图自上而下存储。
4.21 md5
MD5测试格式。
这是哈希复用器的一个变体。与该复用器不同,它默认使用 MD5 哈希函数。
4.21.1 示例
计算转换为原始音频和视频的输入的 MD5 哈希值,并将其存储在文件中输出.md5:
ffmpeg -i INPUT -f md5 out.md5
您可以使用以下命令将 MD5 打印到 stdout:
ffmpeg -i INPUT -f md5 -
4.22 mov, mp4, ismv
MOV/MP4/ISMV(平滑流)复用器。
mov/mp4/ismv 复用器支持分段。+faststart
通常,MOV/MP4 文件将所有数据包的所有元数据存储在一个位置(写在文件末尾,可以通过添加到-movflags
或使用该工具将其移动到开头以便更好地播放)qt-faststart
。
分片文件由许多片段组成,其中数据包和有关这些数据包的元数据存储在一起。写入分段文件的优点是,即使写入中断,文件也可解码(而普通 MOV/MP4 如果未正确完成则无法解码),并且在写入很长的文件时需要较少的内存(因为写入普通 MOV /MP4 文件将有关内存中每个数据包的信息存储到文件关闭为止)。缺点是与其他应用程序的兼容性较差。
通过设置定义如何将文件切成片段的选项之一来启用分段:
-frag_duration
、-frag_size
、
-min_frag_duration
和。如果指定了多个条件,则当满足指定条件之一时,片段将被剪切。例外情况是,必须满足任何其他条件才能适用。
-movflags +frag_keyframe
-movflags +frag_custom
-min_frag_duration
4.22.1 选项
- frag_duration duration
创建持续时间为微秒的片段。
- frag_size size
创建包含最多size字节的有效负载数据的片段。
- min_frag_duration duration
不要创建短于持续时间微秒的片段。
- movflags flags
设置各种复用开关。可以使用以下标志:
- ‘frag_keyframe’
在每个视频关键帧处开始一个新片段。
- ‘frag_custom’
允许调用者通过调用使用
av_write_frame(ctx, NULL)
到目前为止写入的数据包来写入片段来手动选择何时剪切片段。(这仅对集成 libavformat 的其他应用程序有用,而不是来自ffmpeg
.)- ‘empty_moov’
直接在文件开头写入初始 moov 原子,而不描述其中的任何样本。通常,mdat/moov 对被写入文件的开头,就像普通的 MOV/MP4 文件一样,仅包含文件的一小部分。设置此选项后,没有初始 mdat 原子,并且 moov 原子仅描述轨道但持续时间为零。
写入 ismv(平滑流)文件时隐式设置此选项。
- ‘separate_moof’
为每个轨道编写一个单独的 moof(电影片段)原子。通常,所有轨道的数据包都写入 moof 原子中(效率稍高),但设置此选项后,复用器会为每个轨道写入一对 moof/mdat,从而更容易分离轨道。
写入 ismv(平滑流)文件时隐式设置此选项。
- ‘skip_sidx’
跳过 sidx 原子的写入。当 sidx Atom 导致的比特率开销较高时,此选项可用于不强制使用 sidx Atom 的情况。当启用 global_sidx 标志时,该选项将被忽略。
- ‘faststart’
运行第二遍,将索引(moov 原子)移动到文件的开头。该操作可能需要一段时间,并且在碎片输出等各种情况下不起作用,因此默认情况下不启用。
- ‘rtphint’
将 RTP 提示轨道添加到输出文件。
- ‘disable_chpl’
禁用 Nero 章节标记 (chplatom)。通常,Nero 章节和 QuickTime 章节轨道都会写入该文件。设置此选项后,将仅写入 QuickTime 章节轨道。当使用某些标记程序(例如 mp3Tag 2.61a 和 iTunes 11.3)重新处理文件时,Nero 章节可能会导致失败,其他版本很可能也会受到影响。
- ‘omit_tfhd_offset’
不要在 tfhd 原子中写入任何绝对的 base_data_offset。这避免了将片段绑定到文件/流中的绝对字节位置。
- ‘default_base_moof’
与 omit_tfhd_offset 类似,此标志避免在 tfhd 原子中写入绝对 base_data_offset 字段,而是通过使用新的 default-base-is-moof 标志来实现。该标志是 14496-12:2012 期间新增的。这可以使片段在某些情况下更容易解析(避免将轨道片段位置计算基于前一个轨道片段的隐式末尾)。
- ‘negative_cts_offsets’
允许使用 CTTS 框的版本 1,其中 CTS 偏移量可以为负。这使得初始样本的 DTS/CTS 为零,并减少了某些情况下对编辑列表的需求,例如具有 B 帧的视频轨道。此外,还可以轻松遵守 DASH-IF 互操作性指南。
写入 ismv(平滑流)文件时隐式设置此选项。
- moov_size bytes
在文件开头为 moov 原子保留空间,而不是将 moov 原子放在文件末尾。如果预留空间不足,复用将会失败。
- write_tmcd
指定
on
强制写入时间码轨道、off
禁用它并auto
仅为 mov 和 mp4 输出写入时间码轨道(默认)。- write_btrt bool
强制或禁用在轨道的 stsd 框中写入比特率框。该框包含轨道的解码缓冲区大小(以字节为单位)、最大比特率和平均比特率。如果无法计算这些值,则将跳过该框。默认为
-1
或auto
,仅在 MP4 模式下写入该框。- write_prft
写入生产者时间参考框 (PRFT),并为 PRFT 框中的 NTP 字段指定时间源。将值设置为 '挂钟' 将时间源指定为挂钟时间并且 '分' 将时间源指定为输入数据包的 PTS 值。
将值设置为 '分' 仅适用于实时编码用例,其中 PTS 值设置为源处的挂钟时间。例如,具有 Decklink 捕获源的编码用例,其中视频点和 音频点被设置为 '绝对挂钟'。
- empty_hdlr_name bool
启用以跳过在框中写入名称
hdlr
。默认为false
.- movie_timescale scale
设置写在影片标题框中 (
mvhd
) 的时间刻度。范围是 1 到 INT_MAX。默认值为 1000。- video_track_timescale scale
设置用于视频轨道的时间刻度。范围是 0 到 INT_MAX。如果设置为
0
,则时间刻度将根据本机流时基自动设置。默认值为 0。
4.22.2 示例
使用此复用器可以将平滑流内容实时推送到 IIS 上的发布点。例子:
ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
4.23 mp3
MP3 复用器写入具有以下可选功能的原始 MP3 流:
- 开头的 ID3v2 元数据标头(默认启用)。支持版本 2.3 和 2.4,
id3v2_version
私有选项控制使用哪一个(3 或 4)。设置id3v2_version
为 0 会完全禁用 ID3v2 标头。复用器支持将附加图片(APIC 帧)写入 ID3v2 标头。图片以带有单个数据包的视频流的形式提供给复用器。这些流可以有任意数量,每个流对应一个 APIC 帧。流元数据将标题和评论分别标记为 APIC描述和图片类型。请参阅 http://id3.org/id3v2.4.0-frames了解允许的图片类型。
请注意,APIC 帧必须在开始时写入,因此复用器将缓冲音频帧,直到获取所有图片。因此,建议尽快提供图片,以避免过度缓冲。
- ID3v2 标头(如果存在)之后的 Xing/LAME 帧。默认情况下启用它,但仅当输出可查找时才会写入。
write_xing
可以使用 private 选项来禁用它。 该帧包含可能对解码器有用的各种信息,例如音频持续时间或编码器延迟。 - 文件末尾的旧 ID3v1 标记(默认情况下禁用)。它可以通过 private 选项启用
write_id3v1
,但由于其功能非常有限,因此不建议使用。
例子:
编写一个带有 ID3v2.3 header 和 ID3v1 footer 的 mp3:
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
要将图片附加到 mp3 文件,请使用以下命令选择音频和图片流map
:
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1 -metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
编写一个“干净”的 MP3,没有任何额外的功能:
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
4.24 mpegts
MPEG 传输流复用器。
该复用器实施 ISO 13818-1 和 ETSI EN 300 468 的一部分。
mpegts muxer 中可识别的元数据设置为service_provider
和service_name
。如果未设置,则默认为
service_provider
'FFmpeg' 的默认值
service_name
是 '服务01'。
4.24.1 选项
复用器选项有:
- mpegts_transport_stream_id integer
设置 '传输流ID'。这标识了 DVB 中的转发器。默认为
0x0001
.- mpegts_original_network_id integer
设置 '原始网络 ID'。这是 DVB 中网络的唯一标识符。它的主要用途是通过路径'来唯一标识服务Original_Network_ID、Transport_Stream_ID'。默认为
0x0001
.- mpegts_service_id integer
设置 '服务ID',在 DVB 中也称为节目。默认为
0x0001
.- mpegts_service_type integer
设置程序'服务类型'。默认为
digital_tv
. 接受以下选项:- ‘hex_value’
0x01
介于和之间的任何十六进制值0xff
,如 ETSI 300 468 中所定义。- ‘digital_tv’
数字电视服务。
- ‘digital_radio’
数字广播服务。
- ‘teletext’
图文电视服务。
- ‘advanced_codec_digital_radio’
高级编解码器数字广播服务。
- ‘mpeg2_digital_hdtv’
MPEG2 数字高清电视服务。
- ‘advanced_codec_digital_sdtv’
高级编解码器数字标清电视服务。
- ‘advanced_codec_digital_hdtv’
高级编解码器数字高清电视服务。
- mpegts_pmt_start_pid integer
设置 PMT 的第一个 PID。默认为
0x1000
,最小值为0x0020
,最大值为0x1ffa
。该选项在 PMT PID 固定的 m2ts 模式下无效0x0100
。- mpegts_start_pid integer
设置基本流的第一个 PID。默认为
0x0100
,最小值为0x0020
,最大值为0x1ffa
。此选项在基本流 PID 固定的 m2ts 模式下无效。- mpegts_m2ts_mode boolean
如果设置为 ,则启用 m2ts 模式
1
。默认值是-1
禁用 m2ts 模式。- muxrate integer
设置恒定的复用率。默认为变码率。
- pes_payload_size integer
设置最小 PES 数据包负载(以字节为单位)。默认为
2930
.- mpegts_flags flags
设置 mpegts 标志。接受以下选项:
- ‘resend_headers’
在写入下一个数据包之前重新发送 PAT/PMT。
- ‘latm’
对 AAC 使用 LATM 打包。
- ‘pat_pmt_at_frames’
在每个视频帧重新发送 PAT 和 PMT。
- ‘system_b’
符合系统 B (DVB),而不是系统 A (ATSC)。
- ‘initial_discontinuity’
将每个流的初始数据包标记为不连续性。
- ‘nit’
发出 NIT 表。
- ‘omit_rai’
禁用随机访问指示符的写入。
- mpegts_copyts boolean
如果值设置为 ,则保留原始时间戳
1
。默认值为-1
,这会导致时间戳移位,使其从 0 开始。- omit_video_pes_length boolean
省略视频数据包的 PES 数据包长度。默认值为
1
(真)。- pcr_period integer
覆盖默认的 PCR 重传时间(以毫秒为单位)。Default
-1
表示自动确定 PCR 间隔:CBR 流使用 20 ms,VBR 流使用小于 100 ms 的帧持续时间的最高倍数。- pat_period duration
PAT/PMT 表之间的最长时间(以秒为单位)。默认为
0.1
.- sdt_period duration
SDT 表之间的最长时间(以秒为单位)。默认为
0.5
.- nit_period duration
NIT 表之间的最长时间(以秒为单位)。默认为
0.5
.- tables_version integer
设置 PAT、PMT、SDT 和 NIT 版本(默认
0
,有效值为 0 到 31(含))。此选项允许更新流结构,以便标准消费者可以检测到更改。为此,请重新打开输出AVFormatContext
(如果使用 API)或重新启动ffmpeg
实例,循环更改 表版本价值:ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ... ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111 ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111 ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111 ...
4.24.2 示例
ffmpeg -i file.mpg -c copy \ -mpegts_original_network_id 0x1122 \ -mpegts_transport_stream_id 0x3344 \ -mpegts_service_id 0x5566 \ -mpegts_pmt_start_pid 0x1500 \ -mpegts_start_pid 0x150 \ -metadata service_provider="Some provider" \ -metadata service_name="Some Channel" \ out.ts
4.25 mxf, mxf_d10, mxf_opatom
MXF 复用器。
4.25.1 选项
复用器选项有:
- store_user_comments bool
设置是否应存储用户评论(如果可用)或从不存储。IRT D-10 不允许用户评论。因此,默认情况下是为 mxf 和 mxf_opatom 编写它们,但不为 mxf_d10 编写它们
4.26 null
空复用器。
该复用器不会生成任何输出文件,它主要用于测试或基准测试目的。
例如,要对解码进行基准测试,ffmpeg
您可以使用以下命令:
ffmpeg -benchmark -i INPUT -f null out.null
请注意,上述命令不会读取或写入输出为空
文件,但语法需要指定输出文件ffmpeg
。
或者,您可以将命令编写为:
ffmpeg -benchmark -i INPUT -f null -
4.27 nut
- -syncpoints flags
更改 nut 中同步点的使用:
- default use the normal low-overhead seeking aids.
- none do not use the syncpoints at all, reducing the overhead but making the stream non-seekable;
不建议使用此选项,因为生成的文件对损坏非常敏感并且无法进行查找。一般来说,同步点的开销可以忽略不计。请注意,-0
write_index
可用于禁用所有不断增长的数据表,从而允许使用有限的内存复用无限的流,并且没有这些缺点。- timestamped extend the syncpoint with a wallclock field.
none和timestamped标志是实验性的 。
- -write_index bool
最后写索引,默认是写索引。
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
4.28 ogg
Ogg 容器混合器。
- -page_duration duration
首选页面持续时间(以微秒为单位)。复用器将尝试创建大约持续时间微秒长的页面。这允许用户在查找粒度和容器开销之间进行折衷。默认值为 1 秒。值 0 将填充所有段,使页面尽可能大。在大多数情况下,值为 1 将有效地每页使用 1 个数据包,以额外的容器开销为代价提供较小的查找粒度。
- -serial_offset value
用于设置流序列号的序列值。将其设置为不同且足够大的值可确保生成的 ogg 文件可以安全地链接。
4.29 raw muxers
原始复用器接受与指定编解码器匹配的单个流。它们不存储时间戳或元数据。除非另有说明,识别的扩展名与复用器名称相同。
4.29.1 交流3
杜比数字 (Dolby Digital),也称为 AC-3、音频。
4.29.2 adx
CRI 中间件 ADX 音频。
当输出可查找并且计数可以存储在 32 位中时,该复用器将在第一个数据包开头附近写出总样本计数。
4.29.3 aptx
aptX(蓝牙音频处理技术)音频。
4.29.4 aptx_hd
aptX HD(蓝牙音频处理技术)音频。
扩展:aptxhd
4.29.5 AVS2
AVS2-P2/IEEE1857.4 视频。
扩展名: avs, avs2
4.29.6 cavsvideo
中国AVS(音频视频标准)视频。
扩展:cavs
4.29.7 编解码器2raw
编解码器 2 音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f codec2raw
。
4.29.8 数据
数据复用器接受具有任何类型的任何编解码器的单个流。必须使用-map
ffmpeg CLI 工具的选项来选择输入流。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f data
。
4.29.9 狄拉克
BBC 狄拉克视频。Dirac Pro 编解码器是一个子集,标准化为 SMPTE VC-2。
扩展名:drc、vc2
4.29.10 dnxhd
狂热的 DNxHD 视频。它被标准化为 SMPTE VC-3。接受 DNxHR 流。
扩展名: dnxhd, dnxhr
2011年4月29日 数据传输服务
DTS 相干声学 (DCA) 音频。
4.29.12 eac3
杜比数字+ (Dolby Digital Plus),也称为增强型 AC-3 音频。
13年4月29日
MPEG-5 基本视频编码 (EVC)/EVC/MPEG-5 第 1 部分 EVC 视频。
扩展:evc
4.29.14 g722
ITU-T G.722 音频。
15.4.29g723_1
ITU-T G.723.1 音频。
扩展:tco、rco
4.29.16 g726
ITU-T G.726 大端(“左对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726
。
17.29.4 G726le
ITU-T G.726 小端(“右对齐”)音频。
没有注册扩展名,因此必须提供格式名称,例如使用 ffmpeg CLI 工具-f g726le
。
4.29.18 GSM
全球移动通信音频系统。
4.29.19 h261
ITU-T H.261 视频。
4.29.20 h263
ITU-T H.263 / H.263-1996、H.263+ / H.263-1998 / H.263 版本 2 视频。
4.29.21 h264
ITU-T H.264 / MPEG-4 第 10 部分 AVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。
扩展名:h264、264
22 年 4 月 29 日
ITU-T H.265 / MPEG-H 第 2 部分 HEVC 视频。如果比特流处于长度前缀模式,则应将其转换为附件 B 语法。
扩展名:hevc、h265、265
23.29.4 m4v
MPEG-4 第 2 部分视频。
24.29.24 mjpeg
运动 JPEG 视频。
扩展名:mjpg、mjpeg
4.29.25 MLP
Meridian Lossless Packing,也称为 Packed PCM、音频。
4.29.26 mp2
MPEG-1 音频第二层音频。
扩展名:mp2、m2a、mpa
4.29.27 mpeg1视频
MPEG-1 第 2 部分视频。
扩展名:mpg、mpeg、m1v
4.29.28 mpeg2视频
ITU-T H.262/MPEG-2 第 2 部分视频。
扩展名:m2v
4.29.29 奥布
AV1 低开销开放比特流单元复用器。时间定界符 OBU 将被插入到流的所有时间单元中。
4.29.30 原始视频
原始未压缩视频。
扩展名:yuv、rgb
31 年 4 月 29 日
蓝牙 SIG 低复杂度子带编解码器音频。
扩展名:sbc、msbc
4.29.32 真高清
杜比 TrueHD 音频。
扩展名:thd
33年4月29日 VC1
SMPTE 421M / VC-1 视频。
4.30 segment, stream_segment, ssegment
基本流分段器。
该复用器将流输出到许多持续时间几乎固定的单独文件。输出文件名模式可以以类似于image2 的方式设置,或者通过使用strftime
模板(如果时间选项已启用。
stream_segment
是复用器的一个变体,用于写入流输出格式,即不需要全局标头,并且建议用于输出(例如,MPEG 传输流段)。
ssegment
是 的较短别名stream_segment
。
每个片段都以所选参考流的关键帧开始,该关键帧通过参考流选项。
请注意,如果您希望对视频文件进行精确分割,则需要使输入关键帧与分段器期望的精确分割时间相对应,否则分段复用器将使用指定开始后下一个找到的关键帧来开始新分段时间。
分段复用器最适合单个恒定帧速率视频。
(可选)它可以通过设置选项segment_list来生成已创建段的列表。列表类型由 segment_list_type选项指定。段列表中的条目文件名默认设置为相应段文件的基名。
另请参阅hls muxer,它为 HLS 分段提供了更具体的实现。
4.30.1 选项
分段复用器支持以下选项:
- increment_tc 1|0
如果设置为
1
,则在每个片段之间增加时间码 如果选择此选项,则输入需要在第一个视频流中具有时间码。默认值为0
。- reference_stream specifier
设置引用流,由字符串说明符指定。如果说明符设置为
auto
,则自动选择引用。否则它必须是指定参考流的流说明符(请参阅 ffmpeg 手册中的“流说明符”一章)。默认值为auto
。- segment_format format
覆盖内部容器格式,默认情况下通过文件扩展名猜测。
- segment_format_options options_list
使用 : 分隔的 key=value 参数列表设置输出格式选项。包含特殊字符的值
:
必须进行转义。- segment_list name
还生成一个名为name的列表文件。如果未指定,则不会生成列表文件。
- segment_list_flags flags
设置影响段列表生成的标志。
目前它支持以下标志:
- ‘cache’
允许缓存(仅影响 M3U8 列表文件)。
- ‘live’
允许生成实时友好的文件。
- segment_list_size size
更新列表文件,使其包含最多size 的 段。如果为 0,列表文件将包含所有段。默认值为 0。
- segment_list_entry_prefix prefix
在每个条目前面添加前缀。对于生成绝对路径很有用。默认情况下不应用前缀。
- segment_list_type type
选择列表格式。
认可以下值:
- ‘flat’
为创建的段生成一个平面列表,每行一个段。
- ‘csv, ext’
为创建的段生成一个列表,每行一个段,每行匹配格式(逗号分隔值):
segment_filename,segment_start_time,segment_end_time
segment_filename是复用器根据提供的模式生成的输出文件的名称。如果需要,可应用 CSV 转义(根据 RFC4180)。
segment_start_time和segment_end_time指定段的开始和结束时间(以秒为单位)。
后缀为
".csv"
或 的列表文件".ext"
将自动选择此格式。'分机' 已被弃用,取而代之的是 '数据集'。
- ‘ffconcat’
为创建的段生成 ffconcat 文件。可以使用 FFmpeg concat demuxer读取生成的文件。
后缀为
".ffcat"
或 的列表文件".ffconcat"
将自动选择此格式。- ‘m3u8’
生成扩展的 M3U8 文件,版本 3,符合 http://tools.ietf.org/id/draft-pantos-http-live-streaming。
带有后缀的列表文件
".m3u8"
将自动选择此格式。
如果未指定,则从列表文件名后缀猜测类型。
- segment_time time
将分段持续时间设置为time,该值必须是持续时间规范。默认值为“2”。另请参阅 分段次数选项。
请注意,分割可能不准确,除非您在给定时间强制参考流关键帧。请参阅下面的介绍性通知和示例。
- min_seg_duration time
将最小分段持续时间设置为time,该值必须是持续时间规范。这可以防止复用器以低于该值的持续时间结束片段。仅对 有效
segment_time
。默认值为“0”。- segment_atclocktime 1|0
如果设置为“1”,则从 00:00 点开始按固定时钟时间间隔进行分割。中指定的时间值分段时间用于设置分割间隔的长度。
例如与分段时间设置为“900”可以在 12:00、12:15、12:30 等时间创建文件。
默认值为“0”。
- segment_clocktime_offset duration
使用时将分段分割时间延迟指定的时长 时钟时间段。
例如与分段时间设置为“900”并且 分段时钟时间偏移设置为“300”,这使得可以在 12:05、12:20、12:35 等创建文件。
默认值为“0”。
- segment_clocktime_wrap_duration duration
仅当数据包在分段时钟时间后的指定持续时间内到达复用器时,强制分段器才启动新分段。通过这种方式,您可以使分段器更能适应向后本地时间跳跃,例如闰秒或从夏令时过渡到标准时间。
默认值是最大可能的持续时间,这意味着无论自上次时钟时间以来经过的时间如何,都会开始一个新的段。
- segment_time_delta 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
指定分割点列表。times包含逗号分隔的持续时间规范列表,按升序排列。另请参阅分段时间选项。
- segment_frames frames
指定分割视频帧编号的列表。帧包含以逗号分隔的整数列表,按升序排列。
此选项指定每当找到参考流关键帧并且该帧的序号(从 0 开始)大于或等于列表中的下一个值时就开始一个新段。
- segment_wrap limit
一旦达到limit,就环绕段索引。
- segment_start_number number
设置第一段的序号。默认为
0
.- strftime 1|0
使用该
strftime
函数定义要写入的新段的名称。如果选择此选项,则输出段名称必须包含strftime
函数模板。默认值为0
。- break_non_keyframes 1|0
如果启用,则允许片段在关键帧以外的帧上开始。当关键帧之间的时间不一致时,这会改善某些玩家的行为,但可能会使其他玩家的情况变得更糟,并且可能会在搜索过程中导致一些奇怪的情况。默认为
0
.- reset_timestamps 1|0
在每个段的开头重置时间戳,以便每个段将以接近零的时间戳开始。它的目的是简化生成的片段的播放。可能不适用于某些复用器/编解码器组合。
0
默认 设置为。- initial_offset offset
指定应用于输出数据包时间戳的时间戳偏移。该参数必须是持续时间规范,默认为 0。
- write_empty_segments 1|0
如果启用,如果在段通常跨越的时间段内没有数据包,则写入一个空段。否则,该段将被下一个写入的数据包填充。默认为
0
.
确保在编码时需要封闭的 GOP 并设置 GOP 大小以适合您的片段时间限制。
4.30.2 示例
- 重新混合文件内容MKV到段列表
out-000.nut,输出-001.nut等,并将生成的段列表写入输出列表:
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut
- 分段输入并设置输出分段的输出格式选项:
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4
- 根据
segment_times选项指定的分割点对输入文件进行分段:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut
- 使用
ffmpeg
强制关键帧 与片段选项一起强制输入中关键帧位于指定位置的选项分段时间增量考虑到设置关键帧时间时可能进行的舍入操作。ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
为了在输入文件上强制关键帧,需要进行转码。
- 通过根据指定的帧编号序列分割输入文件来对输入文件进行分段分段帧选项:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut
- 转换MKV
libx264
使用和编码器到 TS 段aac
:ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts
- 对输入文件进行分段,并创建一个 M3U8 实时播放列表(可用作实时 HLS 源):
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ -segment_list_flags +live -segment_time 10 out%03d.mkv
4.31 smoothstreaming
Smooth Streaming muxer 生成一组适合传统 Web 服务器服务的文件(清单、块)。
- window_size
指定清单中保留的片段数量。默认 0(保留全部)。
- extra_window_size
指定从磁盘删除之前保留在清单之外的片段数量。默认 5。
- lookahead_count
指定先行片段的数量。默认 2。
- min_frag_duration
指定最小片段持续时间(以微秒为单位)。默认 5000000。
- remove_at_exit
指定完成后是否删除所有片段。默认 0(不删除)。
4.32 streamhash
每个流哈希测试格式。
该复用器基于每个流计算并打印所有输入帧的加密哈希。这可以用于相等检查,而无需进行完整的二进制比较。
默认情况下,在计算哈希之前,音频帧会转换为带符号的 16 位原始音频,视频帧会转换为原始视频,但也可以使用显式转换为其他编解码器的输出。时间戳被忽略。它默认使用 SHA-256 加密哈希函数,但支持其他几种算法。
复用器的输出由每个流一行组成,格式为: streamindex、streamtype、algo = hash,其中 streamindex是映射流的索引,streamtype是指示流类型的单个字符,algo是表示流的短字符串使用的哈希函数,哈希是表示计算出的哈希值的十六进制数。
- hash algorithm
使用字符串算法指定的加密哈希函数。支持的值包括
MD5
、murmur3
、RIPEMD128
、RIPEMD160
、RIPEMD256
、RIPEMD320
、SHA160
、SHA224
、SHA256
(默认)SHA512/224
、SHA512/256
、SHA384
、SHA512
、CRC32
和adler32
。
4.32.1 示例
计算转换为原始音频和视频的输入的 SHA-256 哈希值,并将其存储在文件中输出sha256:
ffmpeg -i INPUT -f streamhash out.sha256
要将 MD5 哈希打印到 stdout,请使用以下命令:
ffmpeg -i INPUT -f streamhash -hash md5 -
4.33 tee
tee 复用器可用于将相同的数据写入多个输出,例如文件或流。例如,它可用于通过网络传输视频并同时将其保存到磁盘。
ffmpeg
它与向命令行工具指定多个输出不同。使用 Tee 复用器,音频和视频数据将仅被编码一次。对于传统的多个输出,会启动多个并行编码操作,这可能是一个非常昂贵的过程。直接使用 libavformat API 时,tee 复用器没有用,因为这样可以将相同的数据包直接提供给多个复用器。
由于 tee muxer 不代表任何特定的输出格式,因此 ffmpeg 无法自动选择输出流。因此,所有用于输出的流都必须使用 指定-map
。请参阅下面的示例。
某些编码器可能需要不同的选项,具体取决于输出格式;自动检测不能与 tee muxer 一起使用,因此需要明确指定它们。主要的例子是全局标题旗帜。
从输出在提供给复用器的文件名中指定,并用“|”分隔。如果任何从属名称包含“|” 分隔符、前导空格或尾随空格或任何特殊字符,这些字符必须进行转义(请参阅ffmpeg-utils(1) 手册中的“引用和转义”部分)。
4.33.1 选项
- use_fifo bool
如果设置为 1,从机输出将使用fifo 复用器在单独的线程中进行处理。这允许补偿输出的不同速度/延迟/可靠性并设置透明恢复。默认情况下此功能处于关闭状态。
- fifo_options
传递给 fifo 伪复用器实例的选项。请参阅先进先出。
可以为每个从属设备指定复用器选项,方法是将它们作为 方括号之间用“:”分隔的键=值对列表前置。如果选项值包含特殊字符或“:”分隔符,则必须对它们进行转义;请注意,这是第二级转义。
还认可以下特殊选项:
- f
指定格式名称。如果无法从输出 URL 猜出,则为必需。
- bsfs[/spec]
指定要应用于指定输出的比特流过滤器列表。
通过将流说明符附加到由 分隔的选项,可以指定给定的比特流过滤器适用于哪些流
/
。spec必须是流说明符(请参阅格式流说明符)。如果未指定流说明符,则比特流过滤器将应用于输出中的所有流。如果输出包含无法应用比特流过滤器的流,例如应用于
h264_mp4toannexb
包含音频流的输出,这将导致输出操作失败。比特流过滤器的选项必须以 的形式指定
opt=value
。可以指定多个比特流过滤器,用“,”分隔。
- use_fifo bool
这允许覆盖单个从属复用器的 tee 复用器 use_fifo 选项。
- fifo_options
这允许覆盖单个从属复用器的 tee 复用器 fifo_options。请参阅先进先出。
- select
选择应映射到从属输出的流,由流说明符指定。如果未指定,则默认为所有映射的流。如果输出格式不接受所有映射流,这将导致输出操作失败。
,
您可以使用多个流说明符,以逗号 ( )分隔,例如:a:0,v
- onfail
指定输出失败时的行为。可以将其设置为
abort
(默认)或ignore
。abort
如果该从站输出出现故障,将导致整个过程失败。ignore
将忽略此输出的故障,因此其他输出将继续而不受影响。
4.33.2 示例
- 对某些内容进行编码,并将其存档在 WebM 文件中,并通过 UDP 将其作为 MPEG-TS 进行流式传输:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 如上所述,但即使输出到本地文件失败(例如本地驱动器已满)也继续流式传输:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/"
- 用于
ffmpeg
对输入进行编码,并将输出发送到三个不同的目的地。比特流过滤dump_extra
器用于按照 MPEG-TS 格式的要求将额外数据信息添加到所有输出视频关键帧数据包中。选择的选项应用于输出.aac为了使其仅包含音频数据包。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac"
- 如上所述,但仅选择
a:1
音频输出流。请注意,必须执行二级转义,因为“:”是用于分隔选项的特殊字符。ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
4.34 webm_chunk
WebM 实时块复用器。
该复用器将 WebM 标头和块写为单独的文件,可供通过 DASH 支持 WebM Live 流的客户端使用。
4.34.1 选项
该复用器支持以下选项:
- chunk_start_index
第一个块的索引(默认为 0)。
- header
将写入初始化数据的标头的文件名。
- audio_chunk_duration
每个音频块的持续时间(以毫秒为单位)(默认为 5000)。
4.34.2 示例
ffmpeg -f v4l2 -i /dev/video0 \ -f alsa -i hw:0 \ -map 0:0 \ -c:v libvpx-vp9 \ -s 640x360 -keyint_min 30 -g 30 \ -f webm_chunk \ -header webm_live_video_360.hdr \ -chunk_start_index 1 \ webm_live_video_360_%d.chk \ -map 1:0 \ -c:a libvorbis \ -b:a 128k \ -f webm_chunk \ -header webm_live_audio_128.hdr \ -chunk_start_index 1 \ -audio_chunk_duration 1000 \ webm_live_audio_128_%d.chk
4.35 webm_dash_manifest
WebM DASH 清单混合器。
该复用器实现 WebM DASH Manifest 规范来生成 DASH 清单 XML。它还支持 DASH 直播流的清单生成。
欲了解更多信息,请参阅:
- WebM DASH 规范:https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specation
- ISO DASH 规范:http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
4.35.1 选项
该复用器支持以下选项:
- adaptation_sets
该选项具有以下语法:“id=x,streams=a,b,c id=y,streams=d,e”,其中 x 和 y 是适应集的唯一标识符,a、b、c、d 和e是相应音频和视频流的索引。使用此选项可以添加任意数量的适应集。
- live
将其设置为 1 以创建直播 DASH 清单。默认值:0。
- chunk_start_index
第一个块的起始索引。这将进入 '起始编号' 的属性段模板' 清单中的元素。默认值:0。
- chunk_duration_ms
每个块的持续时间(以毫秒为单位)。这将进入 '期间' 的属性段模板' 清单中的元素。默认值:1000。
- utc_timing_url
将返回 ISO 格式的 UTC 时间戳的页面的 URL。这将进入 '价值' 的属性UTC时间' 清单中的元素。默认值:无。
- time_shift_buffer_depth
保证任何表示可用的最小移位缓冲区时间(以秒为单位)。这将进入 '时移缓冲区深度' 的属性MPD' 元素。默认值:60。
- minimum_update_period
清单的最短更新周期(以秒为单位)。这将进入 '最小更新周期' 的属性MPD' 元素。默认值:0。
4.35.2 示例
ffmpeg -f webm_dash_manifest -i video1.webm \ -f webm_dash_manifest -i video2.webm \ -f webm_dash_manifest -i audio1.webm \ -f webm_dash_manifest -i audio2.webm \ -map 0 -map 1 -map 2 -map 3 \ -c copy \ -f webm_dash_manifest \ -adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \ manifest.xml
5 元数据
FFmpeg 能够将媒体文件中的元数据转储到简单的 UTF-8 编码的类似 INI 的文本文件中,然后使用元数据复用器/解复用器将其加载回来。
文件格式如下:
- 文件由一个标头和许多元数据标记组成,这些元数据标记分为多个部分,每个部分占一行。
- 标头是一个 ';FF元数据' 字符串,后跟版本号(现在为 1)。
- 元数据标签的形式为 '键=值'
- 紧随标题之后的是全局元数据
- 在全局元数据之后,可能存在包含每流/每章元数据的部分。
- 节以括号中的大写节名称(即 STREAM 或 CHAPTER)开始('[',']') 并以下一部分或文件结尾结束。
- 在章节部分的开头可能有一个可选的时基用于开始/结束值。它的形式必须是 '时基 = num / den',其中num和den是整数。如果时基丢失,则假定开始/结束时间以纳秒为单位。
接下来,章节部分必须包含章节开始和结束时间,格式为 '开始=数字','结束=数字',其中num是正整数。
- 空行和以 ' 开头的行;' 或者 '#' 被忽略。
- 包含特殊字符('=',';','#','\' 和换行符)必须用反斜杠转义 '\'。
- 请注意元数据中的空格(例如 '富=酒吧') 被认为是标签的一部分(在上面的示例中,键是 '富',值为'酒吧')。
ffmetadata 文件可能如下所示:
;FFMETADATA1 title=bike\\shed ;this is a comment artist=FFmpeg troll team [CHAPTER] TIMEBASE=1/1000 START=0 #chapter ends at 0:01:00 END=60000 title=chapter \#1 [STREAM] title=multi\ line
通过使用 ffmetadata 复用器和解复用器,可以将元数据从输入文件提取到 ffmetadata 文件,然后使用编辑后的 ffmetadata 文件将文件转码为输出文件。
提取 ffmetadata 文件ffmpeg如下:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
从 FFMETADATAFILE 文件重新插入已编辑的元数据信息可以通过以下方式完成:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
6 另请参阅
ffmpeg , ffplay , ffprobe , libavformat
7 位作者
FFmpeg 开发人员。
git log
有关作者身份的详细信息,请参阅项目的 Git 历史记录 (https://git.ffmpeg.org/ffmpeg),例如通过在 FFmpeg 源目录中键入命令
,或浏览https://git 的在线存储库。 ffmpeg.org/ffmpeg。
文件中列出了特定组件的维护者 维护者在源代码树中。
本文档于2023 年 11 月 17 日使用makeinfo 生成。
由telepoint.bg提供的托管