FFmpeg使用手冊 - ffprobe 的常用命令
在FFMpeg套件中,出了ffmpeg還有ffprobe,ffprobe主要用來查看多媒體文件的信息,下面看一下ffprobe中常見的基本命令.
5.1 ffprobe 常用參數
ffprobe常用參數比較多,可以用過ffprobe --help來查看詳細的信息:

5.2 下面重點聚幾個例子:
5.2.1使用show_packets查看多媒體報信息:

show_packets查看的多媒體包信息使用PACKET標簽所包括起來,其中包含的信息主要如下:
codec_type: 多媒體類型,例如視頻包,音頻包等;
stream_index: 多媒體的stream索引;
pts: 多媒體的顯示時間值
pts_time: 根據不同格式計算過後的多媒體的顯示時間
dts: 多媒體解碼時間值
dts_time: 根據不同格式計算過後的多媒體解碼時間
duration: 多媒體包占用的時間值
duration_time: 根據不同格式計算過後的多媒體包占用的時間值
size: 多媒體包的大小
pos: 多媒體包所在的文件偏移位置
flags: 多媒體包標記,關鍵包與非關鍵包的標記
packets包中除了以上的字段和信息外,還可以通過show_data與show_packets組合來顯示包中的具體的數據:

圖中看到了多媒體包中包含的數據,初始信息為0000 01b6 51e0 47ff,那麼我們可以根據圖中的pos,也就是文件偏移位置查看,根據圖中,pos的值為3273,通過轉換為16進制,位置為0x00000cc9,與data的數據是可以對應的:

通過ffprobe讀取packets來進行對應的數據分析,使用show_packets與show_data配合可以更加精確的分析。
5.2.2除了packets與data外,ffprobe還可以分析多媒體的封裝格式,通過show_format參數可以查看多媒體的封裝格式,封裝可是使用FORMAT標簽括起來顯示:

通過讀取format信息,可以看到這個視頻文件只有一個流通道,起始時間是0.000000,長度為85.867000,文件大小為2377700字節,碼率為221523字節每秒,這個文件有可能是一個mov、有可能是mp4、有可能是m4a、有可能是3gp、有可能是3g2、也有可能是mj2,之所以ffprobe會這麼輸出,是因為這幾種封裝格式在ffmpeg中所識別的標簽基本相同,所以才會這麼多種顯示方式,而其他種封裝格式不一定是這樣的,下面我們再看一個wmv的封裝格式

這個input.wmv文件中包含兩個流通道,文件封裝格式為asf。
5.2.3通過ffprobe的show_frame的參數可以查看視頻文件中的幀信息,輸出的幀信息使用FRAME標簽括起來

通過-show_frame參數查看到如圖的信息,能夠看到每一幀的信息,下面介紹一下重要的信息
屬性
說明
值
media_type
幀的類型(視頻、音頻、字幕等)
video
stream_index
幀所在的索引區域
0
Key_frame
是否是關鍵幀
1
Pkt_pts
Frame包的pts
0
Pkt_pts_time
Frame包的pts的時間顯示
0.000000
Pkt_dts
Frame包的dts
0
Pkt_dts_time
Frame包的dts的時間顯示
0.000000
Pkt_duration
Frame包的時長
1024
Pkt_duration_tine
Frame包的時長時間顯示
0.066667
Pkt_pos
Frame包所在文件的偏移位置
44
Width
幀顯示的寬度
608
height
幀顯示的高度
320
Pix_fmt
幀的圖像色彩格式
Yuv420p
Pict_type
幀類型
I
在windows下常用的Elecard Stream Eye打開查看mp4時,會看到很直觀的幀類型顯示,每一幀的判斷,用ffprobe的pict_type同樣可以看到,每一幀的大小,也同樣可以通過ffprobe的pkt_size看到,pict_type可以或得到視頻的幀是I幀、P幀或者B幀。
通過-show_streams參數可以查看到多媒體文件中的流信息,流的信息使用STREAMS標簽括起來:

如圖所示,可以看到流的信息:
屬性
說明
值
Index
流所在的索引區域
0
Codec_name
編碼名
Mpeg4
Codec_long_name
編碼全名
MPEG-4 part 2
profile
編碼的profile
Simple Profile
level
編碼的level
1
Has_b_frames
包含B幀信息
0
Codec_tyoe
編碼類型
Video
Codec_time_base
編碼的時間戳計算基礎單位
1/15
Pix_fmt
圖像顯示圖像色彩格式
Yuv420p
Coded_width
圖像的寬度
608
Coded_height
圖像的高度
320
Codec_tag_string
編碼的標簽數據
Mp4v
除了以上這些信息,還有更多信息

下面再介紹一下圖中這些信息
屬性
說明
值
R_frame_rate
實際幀率
15/1
Avg_frame_rate
平均幀率
15/1
Time_base
時間基數(用來做timestamp計算)
1/15360
Bit_rate
碼率
220914
Max_bit_rate
最大碼率
220914
Nb_frames
幀數
1288
5.3 ffprobe使用前面的參數可以獲得到對應的key-value,但是閱讀起來因習慣不同所以有的人認為方便,有的人認為不方便,這樣就需要用到ffprobe的print_format參數來進行相應的格式輸出,下面舉幾種輸出的例子:
5.3.1XML格式輸出:

5.3.2ini格式輸出

5.3.3flat格式輸出

5.3.4json格式輸出

5.3.5csv格式輸出

通過各種格式輸出,可以使用對應的繪圖方式繪制出可視化的圖形:
csv格式輸出後使用excel打開表格形式

將表格中的數據以圖形方式繪制出來

圖形繪制出來的時候,可以看到對應的圖形與Elecard Stream Eye基本相同。
5.4 如果只查看音頻流或視頻流,使用select_streams參數即可,例如只查看視頻流的frames信息:
ffprobe -show_frames -select_streams v -ofxml input.mp4
命令行執行後可以看到輸出的信息如下,全部為視頻的frames信息: