ffprobe查看多媒体流音视频详情

ffprobe查看多媒体流音视频详情

ffprobe是一个简单的多媒体流解析器,可以查看多媒体流音视频详情;

1. ffprobe简介

ffprobe从多媒体流中收集信息,并以人机可读的方式进行打印。

例如,它可以用来检查多媒体流使用的容器的格式,以及其中包含的每个媒体流的格式和类型。
如果在输入中指定了url,ffprobe将尝试打开并探测url内容。如果无法打开url或无法将其识别为多媒体文件,则返回积极的退出代码。

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

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

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

节可以包含其他嵌套节,并通过名称(可能由其他节共享)和唯一名称进行标识。

存储在容器或流中的元数据标记被识别并打印在相应的“格式”、“流”或“程序流”部分。

  • 如果没有另外指定,所有数字选项都接受一个表示数字的字符串作为输入,该字符串后面可能跟有一个SI单位前缀,例如:“K”、“M”或“G”。

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

  • 不带参数的选项是布尔选项,并将相应的值设置为true。通过在选项名称前加上“否”,可以将它们设置为false。例如,使用“-nofoo”会将名为“foo”的布尔选项设置为false。

2. stream specifier(流说明符)

有些选项适用于每个流,例如比特率或编解码器。流说明符用于精确指定给定选项所属的流。

流说明符是一个字符串,通常附加在选项名之后,并用冒号分隔。例如——-codec:a:1 ac3包含a:1流说明符,表示该说明符与第二个音频流相匹配。因此,它将为第二个音频流选择ac3编解码器。

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

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

流说明符的可能形式有:

  • stream_index
    将流与此索引匹配。例如,-threads:14将第二个流的线程数设置为4。如果stream_index用作额外的流说明符(见下文),则它会从匹配的流中选择流编号stream_index。流编号基于libavformat检测到的流的顺序,除非还指定了程序ID。在这种情况下,它基于程序中流的顺序。

  • stream_type[:additional_stream_specifier]
    流_类型是以下类型之一:v视频,a音频,s字幕,d数据,t附件,v匹配所有视频流,V仅匹配未附加图片、视频缩略图或封面艺术的视频流。
    如果使用了附加的_stream_,那么它将匹配具有此类型且与附加的_stream_匹配的流。否则,它将匹配指定类型的所有流。

  • p:program_id[:additional_stream_specifier]
    将程序中的流与id program_id进行匹配。如果使用了附加的_stream_说明符,则它将匹配程序中的流,并匹配附加的_stream_说明符。

  • #stream_id or i:stream_id
    按流id匹配流(例如MPEG-TS容器中的PID)。

  • m:key[:value]
    将流与具有指定值的元数据标记键相匹配。如果未给定值,则将包含给定标记的流与任何值匹配。

  • u
    匹配具有可用配置的流,必须定义- codec 编解码器,并且必须提供视频尺寸(video dimension)或音频采样率(audio sample rate)等基本信息。
    请注意,在ffmpeg中,按元数据匹配只适用于输入文件。

3. 命令行demo

  • -select_streams stream_specifier
    仅选择stream_specifier指定的流。此选项仅影响与流相关的选项(例如,show_streams, show_packets等)。

例如,仅显示音频流信息:

ffprobe -show_streams -select_streams a INPUT

仅显示属于索引为1的视频流的视频数据包详情:

ffprobe -show_packets -select_streams v:1 INPUT
  • -of, -print_format writer_name[=writer_options]
    设置输出打印格式
    -of 同 -print_format (可设置的格式有: default, compact, csv, flat, ini, json, xml)
    writer_name指定编写器的名称,writer_options指定要传递给编写器的选项。

例如,以JSON格式打印输出:

-print_format json
  • -show_packets
    显示输入多媒体流中包含的每个数据包的信息。
    每个数据包的信息都打印在一个名为“PACKET”的专用部分中。

  • -show_frames
    显示输入多媒体流中包含的每个帧和字幕的信息。
    每一帧的信息都打印在一个名为“frame”或“SUBTITLE”的专用部分中。

  • -show_log loglevel
    根据loglevel中设置的值显示来自解码器的关于每个帧的日志信息(请参阅-loglevel)。此选项需要-show_frames。
    每个日志消息的信息都打印在一个名为“log”的专用部分中。

  • -show_streams
    显示输入多媒体流中包含的每个媒体流的信息。
    每个媒体流信息都打印在一个名为“STREAM”的专用部分中。

  • -count_frames
    计算每个流的帧数,并在相应的流部分报告它。

  • -show_format
    显示有关输入多媒体流的容器格式的信息。
    所有容器格式信息都打印在名为“FORMAT”的部分中。

4. 查看format,frames获取每一帧照片的时间

查看视频流的每一帧的详情,并输出xml,到文件E:\mat\videos.xml

ffprobe.exe -show_frames -select_streams v -of xml E:\test_demo.mp4 >E:\mat\videos.xml

查看视频流的每一帧的详情,只输出key_frame,pict_type,pkt_pts,pkt_pts_time 字段

ffprobe.exe -show_entries frame=key_frame,pict_type,pkt_pts,pkt_pts_time -select_streams v -of xml E:\test_demo.mp4 >E:\mat\videos.xml

查看视频流的每一帧的pkt_pts_time字段及format信息

ffprobe.exe -show_format -show_entries frame=pkt_pts_time,format -select_streams v -of xml E:\test_demo.mp4 >>E:\mat\videos.xml

key_frame:是否是关键帧
pkt_pts:帧的pts数值
pkt_pts_time:通过time_base计算出来的显示时间
pkt_dts:帧的dts数值
pkt_dts_time:通过time_base计算出来的dts时间
pict_type:帧类型(I、B、P)

参考

猜你喜欢

转载自blog.csdn.net/qq_40985985/article/details/124687819
今日推荐