概要

ffprobe [options] [input_url]

描述

ffprobe从多媒体流收集信息,然后以人可读和机器可读的方式打印出来。

例如,它可用于检查多媒体流使用的容器的格式以及其中包含的每个媒体流的格式和类型。

如果在输入中指定了url, ffprobe将尝试打开并探测url内容。如果无法打开url或将其识别为多媒体文件,则返回一个肯定的退出码。

ffprobe可以作为独立应用程序使用,也可以与文本过滤器结合使用,文本过滤器可以执行更复杂的处理,例如统计处理或绘图。

选项用于列出ffprobe支持的一些格式,或指定要显示哪些信息,以及设置ffprobe显示信息的方式。

ffprobe输出被设计成可以被文本过滤器轻松解析,它由所选写入器定义的表单的一个或多个部分组成,由print_format选项指定。

节可以包含其他嵌套的节,并通过名称(其他节可以共享)和唯一名称标识。参见部分的输出。

存储在容器或流中的元数据标签被识别并以相应的“FORMAT”、“STREAM”或“PROGRAM_STREAM”部分打印出来。

选项

流说明符

参见ffmpeg

一般选项

参见ffmpeg

AV选项

参见ffmpeg

主要选项

选项参数说明
-fformat强制格式使用。
-unit显示显示值的单位。
-prefix对显示的值使用SI前缀。除非使用“-byte_binary_prefix”选项,否则所有前缀都是十进制的。
-byte_binary_prefix强制对字节值使用二进制前缀。
-sexagesimal使用六十进制格式HH:MM:SS。时间值为微秒。
-pretty修饰显示值的格式,它对应于选项“-unit -prefix -byte_binary_prefix -sexagesimal”。
-of, -print_formatwriter_name[=writer_options]设置输出打印格式。
writer_name指定写入器的名称,writer_options指定传递给写入器的选项。
例如,要打印JSON格式的输出,请指定:
-print_format json
有关可用输出打印格式的详细信息,请参阅下面的作者部分。
-sections打印节结构和节信息,然后退出。输出并不意味着要由机器进行解析。
-select_streamsstream_specifier仅选择stream_specifier指定的流。这个选项只影响与流相关的选项(例如show_streams, show_packet等)。
例如,只显示音频流,您可以使用命令:
ffprobe -show_streams -select_streams a INPUT
仅显示索引为1的视频流中的视频包:
ffprobe -show_packets -select_streams v:1 INPUT
-show_data以十六进制和ASCII转储的形式显示有效负载数据。再加上-show_packet,它将转储数据包的数据。加上-show_streams,它将转储编解码器引渡。
转储被打印为“data”字段。它可能包含换行符。
-show_data_hashalgorithm显示负载数据的散列,对于带-show_packet的数据包和带-show_streams的编解码器引渡。
-show_error显示在尝试探测输入时发现的错误信息。
错误信息打印在名为“error”的部分中。
-show_format显示有关输入多媒体流的容器格式的信息。
所有容器格式信息都打印在名为“format”的区域内。
-show_format_entryname与-show_format类似,但只打印容器格式信息的指定条目,而不是全部。此选项可能被多次给出,然后所有指定的条目将被显示。
不赞成使用此选项,请使用show_entries。
-show_entriessection_entries设置要显示的条目列表。
根据以下语法指定条目。section_entries包含一个由:分隔的节条目列表。每个节条目由一个节名称(或唯一名称)组成,后面可选地后跟该节本地的条目列表,用分隔。
如果指定了节名,但是后面跟着no =,那么所有条目以及包含的所有节都会打印到输出。否则,只打印本地部分条目列表中指定的条目。特别是,如果指定了=,但是本地条目列表为空,那么该部分将不会显示任何条目。
注意,本地部分条目的指定顺序在输出中没有得到遵守,通常的显示顺序将保留。
形式语法由:
LOCAL_SECTION_ENTRIES ::= SECTION_ENTRY_NAME[,LOCAL_SECTION_ENTRIES]
SECTION_ENTRY ::= SECTION_NAME[=[LOCAL_SECTION_ENTRIES]]
SECTION_ENTRIES ::= SECTION_ENTRY[:SECTION_ENTRIES]
例如,要仅显示每个流的索引和类型,以及数据包的PTS时间、持续时间和流索引,可以指定参数:
packet=pts_time,duration_time,stream_index : stream=index,codec_type
要显示“format”小节中的所有条目,但只显示“stream”小节中的编解码器类型,请指定参数:
format : stream=codec_type
要显示流和格式部分中的所有标签:
stream_tags : format_tags
在流部分中仅显示title标签(如果可用):
stream_tags=title
-show_packets显示包含在输入多媒体流中的每个数据包的信息。
每个数据包的信息打印在一个名为“PACKET”的专用部分中。
-show_frames显示包含在输入多媒体流中的每一帧和副标题的信息。
每一帧的信息都被打印在一个名为“FRAME”或“SUBTITLE”的专用部分中。
-show_logloglevel根据loglevel中设置的值显示解码器关于每一帧的日志记录信息(参见-loglevel)。这个选项需要-show_frames。
每个日志消息的信息都打印在名为“LOG”的专用部分中。
-show_streams显示包含在输入多媒体流中的每个媒体流的信息。
每个媒体流信息都打印在名为“STREAM”的专用部分中。
-show_programs显示包含在输入多媒体流中的有关程序及其流的信息。
每个媒体流信息都打印在一个名为“PROGRAM_STREAM”的专用部分中。
-show_chapters显示有关章节存储格式的信息。
每一章都印在一个专门的章节中,并命名为“CHAPTER”。
-count_frames计算每个流的帧数,并在相应的流部分报告。
-count_packets计算每个流的包数,并在相应的流部分中报告它。
-read_intervalsread_intervals只读取指定的间隔。read_interval必须是一个由","分隔的间隔规范序列。ffprobe将查找到间隔起始点,并从该起始点继续读取。
每个间隔由两个可选部分指定,以“%”分隔。
第一部分指定间隔的起始位置。它被解释为绝对位置,或者如果它前面有“+”字符,则被解释为与当前位置的相对偏移量。如果没有指定第一部分,则在读取此间隔时将不执行任何查找。
第二部分指定间隔结束位置。它被解释为绝对位置,或者如果它前面有“+”字符,则被解释为与当前位置的相对偏移量。如果偏移量规范以“#”开始,它将被解释为从间隔开始读取的包数(不包括刷新包)。如果没有指定第二部分,程序将读取直到输入结束。
注意,查找是不准确的,因此实际的间隔起始点可能与指定的位置不同。另外,当指定了间隔持续时间时,绝对结束时间的计算方法是将持续时间添加到通过查找文件找到的间隔起始点,而不是添加到指定的起始值。
形式语法由:
INTERVAL ::= [START|+START_OFFSET][%[END|+END_OFFSET]]
INTERVALS ::= INTERVAL[,INTERVALS]
下面是几个例子。
查找到时间10,读取数据包直到找到查找点后20秒,然后查找到位置01:30(1分30秒),读取数据包直到位置01:45。
在寻求位置01:23后只读42个包:
01:23%+#42
只阅读开始的前20秒:
%+20
从开始读到位置02:30:
%02:30
-show_private_data, -private显示私有数据,即取决于所显示的特定元素的格式的数据。这个选项在默认情况下是启用的,但是您可能需要为特定的用途禁用它,例如在创建符合xsd的XML输出时。
-show_program_version显示与程序版本相关的信息。
版本信息在名为“PROGRAM_VERSION”的区域中打印。
-show_library_versions显示与图书馆版本相关的信息。
每个库的版本信息都打印在名为“LIBRARY_VERSION”的部分中。
-show_versions显示与程序和库版本相关的信息。这相当于同时设置-show_program_version和-show_library_versions选项。
-show_pixel_formats显示FFmpeg支持的所有像素格式的信息。
每种格式的像素格式信息都打印在名为“PIXEL_FORMAT”的区域中。
-bitexact强制精确输出,用于产生不依赖于特定构建的输出。
-iinput_url读input_url。

写入器

一个写入器定义了ffprobe采用的输出格式,并将用于打印输出的所有部分。

写入器可以接受一个或多个参数,参数指定要采用的选项。选项被指定为键=值对的列表,用“:”分隔。

所有写入器都支持以下选项:

选项参数说明
string_validation, sv设置字符串验证模式。
可以接受以下值。
‘fail’:如果在输入中发现无效的字符串(UTF-8)序列或代码点,编写器将立即失败。这对于验证输入元数据特别有用。
‘ignore’:任何验证错误都将被忽略。这可能会导致错误的输出,特别是对于json或xml编写器。
‘replace’:编写器将用string_validation_replacement指定的字符串替换无效的UTF-8序列或代码点。
默认值是“replace”。
string_validation_replacement, svr设置替换字符串用于string_validation被设置为’ replace '的情况。
如果没有指定该选项,编写器将假定为空字符串,也就是说,它将从输入字符串中删除无效序列。

下面是对当前可用写入器的描述。

default

默认格式。

列印表格各部分:

[SECTION]
key1=val1
...
keyN=valN
[/SECTION]

元数据标记在相应的格式、STREAM或PROGRAM_STREAM部分中打印为一行,并以字符串“TAG:”作为前缀。

下面是可接受选项的描述。

选项参数说明
nokey, nk如果设置为1,则指定不打印每个字段的键。默认值为0。
noprint_wrappers, nw如果设置为1,则指定不打印节标题和页脚。默认值为0。

compact, csv

Compact和CSV格式。

csv写入器相当于compact,但是支持不同的默认值。

每个部分打印在一行上。如果没有指定选项,输出形式如下:

section|key1=val1| ... |keyN=valN

元数据标签以对应的“format”或“stream”部分打印。如果输出元数据标签键,则以字符串“tag:”作为前缀。

下面是可接受选项的描述。

选项参数说明
item_sep, s指定用于分隔输出行的字段的字符。它必须是一个单独的可打印字符,默认为“
nokey, nk如果设置为1,则指定不打印每个字段的键。它的默认值是0(对于csv编写器来说是1)。
escape, e设置转义模式使用,默认为“c”(csv写入器为“csv”)。
它可以假设下列值之一:
c:执行c转义。字符串包含一个换行符(\n),回车(\r),一个标签(\t),一种饲料(‘\f),转义字符(“\”)或项目分隔符SEP使用类似c的格式转义,因此换行符转换为序列’\n’,回车符转为’\r’,’‘转为’\‘再将分隔符SEP转换为’ \SEP ‘。
csv:执行RFC4180中描述的类似于csv的转义。包含换行符(’\n’)、回车符(’\r’)、双引号(’"’)或SEP的字符串被括在双引号中。
none:不执行转义。
print_section, p如果值为1,则禁用它,并将值设置为0。默认值为1。

flat

flat格式。

一种自由格式的输出,其中每行都包含一个显式的key=value,比如"streams.stream.3.tag.foo=bar"。输出是shell转义的,因此只要分隔符是字母数字字符或下划线,就可以直接嵌入到sh脚本中(请参阅sep_char选项)。

下面是可接受选项的描述。

选项参数说明
sep_char, s分隔符用于分隔章节、节名、id和打印字段键中的潜在标签。
默认值是’ . '。
hierarchical, h指定节名规范是否应该是分层的。如果设置为1,并且当前章节中有多个章节,那么章节名称将以章节名称作为前缀。值为0将禁用此行为。
默认值为1。

ini

INI格式输出。

以INI格式打印输出。

通过了下列公约:

  • 所有键和值都是UTF-8
  • '.'是子组分隔符
  • 换行符,’\t’, ‘\f’, '\b’和下面的字符进行转义
  • '\'是转义字符
  • '#'是注释指示器
  • '='是键/值分隔符
  • ':'不使用,但通常解析为键/值分隔符

这个编写器以键=值对列表的形式接受选项,以’:'分隔。

下面是可接受选项的描述。

选项参数说明
hierarchical, h指定节名规范是否应该是分层的。如果设置为1,并且当前章节中有多个章节,那么章节名称将以章节名称作为前缀。值为0将禁用此行为。
默认值为1。

json

基于JSON格式。

每个部分都使用JSON符号打印。

下面是可接受选项的描述。

选项参数说明
compact, c如果设置为1,则使压缩输出,即每个部分将打印在一行上。默认值为0。

有关JSON的更多信息,请参见http://www.json.org/

xml

基于XML的格式。

XML输出在XML模式描述文件ffprobe中进行描述。在FFmpeg数据adir中安装的xsd。

模式的更新版本可以从url http://www.ffmpeg.org/schema/ffprobe.xsd检索到,它将重定向到提交到FFmpeg开发源代码树中的最新模式。

注意,发出的输出将符合ffprobe。只有当没有指定特殊的全局输出选项(unit、prefix、byte_binary_prefix、sexagesimal等)时,才使用xsd模式。

下面是可接受选项的描述。

选项参数说明
fully_qualified, q如果设置为1,则指定输出是否应该完全限定。默认值为0。这对于生成可通过XSD文件进行验证的XML文件是必需的。
xsd_strict, x如果设置为1,则执行更多检查以确保输出符合XSD。默认值为0。此选项自动将fully_qualified设置为1。

有关XML格式的更多信息,请参见https://www.w3.org/XML/。

时间码

ffprobe支持时间码提取:

  • MPEG1/2时间码是从GOP中提取的,可以在视频流的详细信息中找到(-show_streams,请参阅timecode)。
  • MOV时间码是从tmcd轨道中提取的,所以可以在tmcd流元数据中使用(-show_streams,参见TAG:timecode)。
  • DV、GXF和AVI时间码都可以在格式元数据中使用(-show_format,参见TAG:timecode)。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐