ffprobe查看多媒体流音视频详情
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
参考
- http://ffmpeg.org/about.html
- http://ffmpeg.org/ffprobe.html
- ffprobe获取视频帧信息中的pkt_pts、pkt_pts_time
- python,ffprobe获取视频信息
- 使用ffprobe进行音视频流的分析
以上是关于ffprobe查看多媒体流音视频详情的主要内容,如果未能解决你的问题,请参考以下文章