在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.1 XML格式輸出:
5.3.2 ini格式輸出
5.3.3 flat格式輸出
5.3.4 json格式輸出
5.3.5 csv格式輸出
通過各種格式輸出,可以使用對應的繪圖方式繪製出可視化的圖形: csv格式輸出後使用excel打開表格形式
將表格中的數據以圖形方式繪製出來
圖形繪製出來的時候,可以看到對應的圖形與Elecard Stream Eye基本相同。
5.4 如果只查看音頻流或視頻流,使用select_streams參數即可,例如只查看視頻流的frames信息:
ffprobe -show_frames -select_streams v -of xml input.mp4
命令行執行後可以看到輸出的信息如下,全部爲視頻的frames信息:
本文參與騰訊雲自媒體分享計劃,歡迎正在閱讀的你也加入,一起分享。
發表於 2019-03-05