音視頻流的結(jié)構(gòu)的分析對(duì)進(jìn)行音視頻的處理或者對(duì)直播過(guò)程中的直播流的卡頓等情況的分析處理起到了至關(guān)重要的作用。目前剛剛開(kāi)始接觸這塊兒搜变,還是個(gè)小白,這里根據(jù)平時(shí)使用到的一些ffprobe的命令進(jìn)行一些總結(jié),以作備忘:
ffprobe常用的參數(shù)比較多内边,如果想知道具體的可以使用ffprobe --help來(lái)查看一些詳細(xì)的命令。
我目前涉及到的主要是查看視頻流的時(shí)間戳待锈、編碼格式漠其,主要用得到的命令如下:
- ** 使用 -show_frames 參數(shù)查看視頻中的幀信息:**
{
"media_type": "video",
"stream_index": 1,
"key_frame": 0,
"pkt_pts": 27275,
"pkt_pts_time": "45.458333",
"pkt_dts": 27274,
"pkt_dts_time": "45.456667",
"best_effort_timestamp": 27275,
"best_effort_timestamp_time": "45.458333",
"pkt_duration": 20,
"pkt_duration_time": "0.033333",
"pkt_pos": "4519791",
"pkt_size": "970",
"width": 568,
"height": 320,
"pix_fmt": "yuv420p",
"pict_type": "B",
"coded_picture_number": 1364,
"display_picture_number": 0,
"interlaced_frame": 0,
"top_field_first": 0,
"repeat_pict": 0
},
-show_frames打印出來(lái)的信息都是幀相關(guān)的,包括視頻幀和音頻幀竿音,其中主要的數(shù)據(jù)及其含義如下:
key_frame:是否是關(guān)鍵幀
pkt_pts:幀的pts數(shù)值
pkt_pts_time:通過(guò)time_base計(jì)算出來(lái)的顯示時(shí)間
pkt_dts:幀的dts數(shù)值
pkt_dts_time:通過(guò)time_base計(jì)算出來(lái)的dts時(shí)間
pict_type:幀類型(I和屎、B、P)
-
使用 -show_streams 參數(shù)查看視頻中的流信息:
"index": 1,
"codec_name": "h264",
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
"profile": "Main",
"codec_type": "video",
"codec_time_base": "464/27825",
"codec_tag_string": "avc1",
"codec_tag": "0x31637661",
"width": 568,
"height": 320,
"coded_width": 568,
"coded_height": 320,
"has_b_frames": 0,
"sample_aspect_ratio": "0:1",
"display_aspect_ratio": "0:1",
"pix_fmt": "yuv420p",
"level": 30,
"color_range": "tv",
"color_space": "bt709",
"color_transfer": "bt709",
"color_primaries": "bt709",
"chroma_location": "left",
"refs": 1,
"is_avc": "true",
"nal_length_size": "4",
"r_frame_rate": "30000/1001",
"avg_frame_rate": "27825/928",
"time_base": "1/600",
"start_pts": 0,
"start_time": "0.000000",
"duration_ts": 29696,
"duration": "49.493333",
"bit_rate": "705282",
"bits_per_raw_sample": "8",
"nb_frames": "1484",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0,
"timed_thumbnails": 0
},
"tags": {
"creation_time": "2016-12-22T03:35:39.000000Z",
"language": "und",
"handler_name": "Core Media Video"
}
以上便是打印出來(lái)的信息春瞬,主要的就是編碼格式柴信、原始數(shù)據(jù)格式、time_base和碼率等信息是使用較多的宽气。 - ** 使用 -show_packets 參數(shù)查看包信息:**
{
"codec_type": "video",
"stream_index": 1,
"pts": 28676,
"pts_time": "47.793333",
"dts": 28675,
"dts_time": "47.791667",
"duration": 20,
"duration_time": "0.033333",
"size": "1199",
"pos": "4737832",
"flags": "__"
},
同上随常,主要輸出的都是關(guān)于流類型和pts、dts等信息萄涯。
上面的參數(shù)可以獲得音視頻相關(guān)的各種參數(shù)绪氛,但是顯示的可能比較亂,所以可以使用下面的參數(shù)進(jìn)行輸出的格式化:
-of 或者 -print_format + compact/csv/flat/ini/json/xml
同時(shí)窃判,可以通過(guò)使用如下參數(shù)進(jìn)行視頻流或者音頻流的選擇:
-select_streams + a(音頻) / v(視頻)
利用好這個(gè)工具钞楼,可以在進(jìn)行音視頻編解碼的時(shí)候?qū)r(shí)間戳等信息進(jìn)行更好的校對(duì);同時(shí)在進(jìn)行音視頻流卡頓的分析的時(shí)候也很有用處袄琳,比如可以通過(guò)觀察pts等信息查看是否有時(shí)間戳回退等問(wèn)題的存在询件。
后續(xù)如果有新的收獲還會(huì)繼續(xù)更新。