FFPlay专辑

FFplay文档解读-9-解复用器

2018-11-15  本文已影响13人  张芳涛

前言

Github地址:Github
简书地址:简书
专辑地址:FFplay专辑

13.解复用器

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

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

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

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

下面介绍一些当前可用的分路器。

13.1 aa

可听格式2,3和4分路器。

此分路器用于分离Audible Format 2,3和4(.aa)文件。

13.2 applehttp

Apple HTTP Live Streaming分路。

此分离器呈现来自所有变体流的所有AVStreamid字段设置为比特率变量索引号。 通过在AVStreams上设置discard标志(通过在ffplay中按a'v),调用者可以决定实际接收哪些变体流。 流所属的变体的总比特率在名为variant_bitrate的元数据密钥中可用。

13.3 apng

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

此分路器用于解复用APNG文件。 所有标头,但PNG签名,直到(但不包括)第一个fcTL块作为extradata传输。 然后将帧拆分为两个fcTL之间的所有块,或者最后一个fcTLIEND块之间的块。

-ignore_loop bool

如果设置,则忽略文件中的循环变量。

-max_fps int

每秒帧数的最大帧速率(0表示无限制)。

-default_fps int

如果文件中未指定,则以帧/秒为单位的默认帧速率(0表示尽可能快)。

13.4 asf

高级系统格式解复用器。

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

-no_resync_search bool

不要尝试通过查找某个可选的开始代码来重新同步。

13.5 concat

虚级联脚本解复用器。

这个解复用器从文本文件中读取文件列表和其他指令,并将它们一个接一个地解复用,就好像它们的所有数据包已经被多路复用一样。

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

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

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

13.5.1 语法

该脚本是扩展ASCII的文本文件,每行一个指令。 空行,前导空格和以开头的行将被忽略。 以下指令得到承认:

file path

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

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

ffconcat version 1.0

确定脚本类型和版本。 如果为-1,它还将safe选项设置为1

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

duration dur

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

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

inpoint timestamp

在文件的点。 当解复用器打开文件时,它立即寻找指定的时间戳。 寻求完成,以便所有流可以在In点成功呈现。

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

对于每个文件,文件入点之前的数据包将具有小于计算的文件开始时间戳的时间戳(在第一个文件的情况下为负),并且文件的持续时间(如果未由持续时间指令指定)将减少 基于他们指定的In点。

由于在指定的入点之前的潜在数据包,数据包时间戳可能在两个连接文件之间重叠。

outpoint timestamp

文件的出点。 当分路器在任何流中达到指定的解码时间戳时,它将其作为文件结束条件处理,并从所有流中跳过当前和所有剩余的分组。

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

该指令最适用于帧内编解码器和格式,其中所有流都是紧密交错的。 对于非帧内编解码器,通常会在Out point之后获得带有演示时间戳的附加数据包,因此解码后的内容很可能在Out point之后也包含帧。 如果流没有紧密交错,可能无法在Out point之前从所有流中获取所有数据包,并且可能只能解码最早的流直到Out point

文件的持续时间(如果未由duration指令指定)将根据其指定的Out点减少。

file_packet_metadata key=value

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

stream

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

exact_stream_id id

设置流的ID。 如果给出该指令,则将使用子文件中具有相应id的字符串。 这对于MPEG-PS(VOB)文件特别有用,其中流的顺序不可靠。

13.5.2 选项

此分离器接受以下选项:

safe

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

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

默认值为1

如果格式是自动探测的,则-1等于1,否则为0

auto_convert

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

目前,唯一的转换是将h264_mp4toannexb比特流过滤器添加到MP4格式的H.264流中。 如果存在分辨率变化,这尤其必要。

segment_time_metadata

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

13.5.3 示例

13.6 dash

HTTP分路器上的动态自适应流传输。

此分离器显示清单中找到的所有AVStream。 通过在AVStream上设置丢弃标志,调用者可以决定实际接收哪些流。 每个流将来自<Representation>id和带宽属性分别镜像为名为idvariant_bitrate的元数据键。

13.7 flv, live_flv

Adobe Flash视频格式解复用器。

此分路器用于解复用FLV文件和RTMP网络流。 对于实时网络流,如果强制格式化,则可以使用live_flv选项而不是flv来保持时间戳不连续。

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

-flv_metadata bool

根据onMetaData数组内容分配流。

13.8 gif

动画GIF解复用器。

它接受以下选项:

解释
min_delay 设置帧之间的最小有效延迟,以百分之一秒为单位。 范围是0到6000.默认值是2
max_gif_delay 设置帧之间的最大有效延迟,以百分之一秒为单位。 范围是0到65535.默认值是65535(接近11分钟),即规范允许的最大值
default_delay 以百分之一秒为单位设置帧之间的默认延迟。 范围是0到6000.默认值是10
ignore_loop GIF文件可以包含循环一定次数(或无限次)的信息。 如果'ignore_loop'设置为1,则输入中的循环设置将被忽略,并且不会发生循环。 如果设置为0,则将进行循环,并根据GIF循环次数。 默认值为1

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

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

请注意,在上面的示例中,覆盖滤波器的最短选项用于以最短输入文件的长度结束输出视频,在这种情况下为input.mp4,因为此示例中的GIF无限循环。

13.9 hls

HLS解复用器。
它接受以下选项:

live_start_index

段索引以启动实时流(负值来自末尾)。

allowed_extensions

,允许hls访问的文件扩展名的分隔列表。

max_reload

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

http_persistent

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

http_multiple

使用多个HTTP连接下载HTTP段。 默认情况下为HTTP / 1.1服务器启用。

13.10 image2

图像文件解复用器。

此分离器从模式指定的图像文件列表中读取。 模式的语法和含义由选项pattern_type指定。

该模式可以包含后缀,用于自动确定文件中包含的图像的格式。

序列中的所有文件的大小,像素格式和每个图像的格式必须相同。

该分路器接受以下选项:

framerate 

设置视频流的帧速率。 它默认为25

loop

如果设置为1,则循环输入。 默认值为0

PATTERN_TYPE

选择用于解释提供的文件名的模式类型。

pattern_type接受以下值之一。

解释
none 禁用模式匹配,因此视频将仅包含指定的图像。 如果不想从多个图像创建序列,并且文件名可能包含特殊模式字符,则应使用此选项
sequence 选择序列模式类型,用于指定由序列号索引的文件序列。

序列模式可以包含字符串%d%0Nd,其指定表示与模式匹配的每个文件名中的序号的字符的位置。如果使用%d0Nd形式,则表示每个文件名中的数字的字符串为0-填充,N为表示该数字的0-填充数字的总数。可以在模式中使用字符串%%指定文字字符

如果序列模式包含%d%0Nd,则模式指定的文件列表的第一个文件名必须包含start_numberstart_number + start_number_range-1之间包含的数字,并且所有以下数字必须是顺序的。

例如,模式img-%03d.bmp将匹配img-001.bmpimg-002.bmp,...,img-010.bmp等形式的文件名序列。 。模式i %% m %% g-%d.jpg将匹配i%m%g-1.jpgi%m%g-2.jpgi%m%g-2.jpg形式的文件名序列。 ..,i%m%g-10.jpg等。

请注意,模式不一定必须包含%d%0Nd,例如,要转换单个图像文件img.jpeg,可以使用以下命令:

ffmpeg -i img.jpeg img.png
glob 选择glob通配符模式类型。

该模式被解释为glob()模式。 只有在使用globbing支持编译libavformat时才能选择此选项。
glob_sequence (deprecated, will be removed) 选择混合的glob通配符/序列模式。

如果libavformat版本是使用globbing支持编译的,并且提供的模式在%*?[] {}中包含至少一个glob元字符,前面是未转义的,则该模式将被解释为glob()模式 ,否则它被解释为序列模式。

所有glob特殊字符%*?[] {}必须以为前缀。 要转义文字,应使用%%

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

不推荐使用此模式类型,而支持globsequence

默认值为glob_sequence
pixel_format

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

START_NUMBER

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

start_number_range

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

ts_from_file

如果设置为1,则将帧时间戳设置为图像文件的修改时间。 请注意,未提供时间戳的单调性:图像的顺序与没有此选项的顺序相同。 默认值为0.如果设置为2,则将帧时间戳设置为图像文件的修改时间,精确到纳秒级。

video_size

设置要读取的图像的视频大小。 如果未指定,则从序列中的第一个图像文件中猜出视频大小。

13.10.1示例

13.11 libgme

Game Music Emu库是视频游戏音乐文件模拟器的集合。

有关详细信息,请参阅http://code.google.com/p/game-music-emu/

有些文件有多个轨道。 解复用器默认选择第一首曲目。 track_index选项可用于选择不同的曲目。 跟踪索引从0开始。分路器将轨道数导出为轨道元数据条目。

对于非常大的文件,可能必须调整max_size选项。

13.12 libopenmpt

基于libopenmpt的模块分离器

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

有些文件有多个子(tracks),可以使用subsong选项设置。

它接受以下选项:

subsong

设置子索引。 这可以是allauto或子项的索引。 子索引从0开始。默认为auto

默认值是让libopenmpt选择。

 layout

设置通道布局。 有效值为1,24通道布局。 默认值为STEREO

sample_rate

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

13.13 mov/mp4/3gp/QuickTime

QuickTime / MP4解复用器。

该分路器接受以下选项:

enable_drefs

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

use_absolute_path

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

13.14 mpegts

MPEG-2传输流解复用器。

该分路器接受以下选项:

resync_size

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

fix_teletext_pts

使用从图文电视流所属的第一节目的PCR计算的时间戳来覆盖图文电视数据包PTSDTS值,并且不被丢弃。 默认值为1,如果希望图文电视数据包PTSDTS值不受影响,请将此选项设置为0

ts_packetsize

输出选项,以字节为单位承载原始数据包大小 显示检测到的原始数据包大小,不能由用户设置。

scan_all_pmts

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

13.15 mpjpeg

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

该分路器允许读取MJPEG,其中每个帧被表示为multipart / x-mixed-replace流的一部分。

strict_mime_boundary

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

13.16 rawvideo

原始视频解复用器。

该分路器允许人们读取原始视频数据。 由于没有标题指定假定的视频参数,因此用户必须指定它们才能正确解码数据。

该分路器接受以下选项:

framerate

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

pixel_format

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

video_size

设置输入视频大小。 必须明确指定此值。

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

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

13.17 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引用将从读取脚本时的当前时间获取,并且脚本布局将根据该引用被冻结。 这意味着如果直接播放脚本,实际时间将匹配绝对时间戳直到声音控制器的时钟精度,但如果用户以某种方式暂停播放或搜索,则所有时间都将相应地移位。

13.18 tedcaptions

用于TED演讲的JSON字幕。

TED不提供字幕的链接,但可以从页面中猜到它们。 FFmpeg源代码树中的tools / bookmarklets.html文件包含一个用于公开它们的书签。

此分离器接受以下选项:

start_time

设置TED通话的开始时间,以毫秒为单位。 默认值为1500015秒)。 它用于将字幕与可下载视频同步,因为它们包含15s简介。

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

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

猜你喜欢

热点阅读