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.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章