FFmpeg 套件中,ffmpeg 負責轉碼、推流,而 ffprobe 專司多媒體文件探測與信息提取。它能解析封裝格式、流結構、幀級細節、包數據,是調試音視頻、分析碼流結構的利器。
常用參數眾多,建議先執行 ffprobe --help 瀏覽全貌。下文通過實戰案例講解高頻用法。
show_packets:逐包解析媒體流輸出以 PACKET 標籤包裹,關鍵字段包括:
codec_type:視頻/音頻/字幕stream_index:流索引pts/pts_time:顯示時間戳dts/dts_time:解碼時間戳duration/duration_time:包時長size:包大小pos:文件偏移量flags:關鍵幀標記(如 K 表示 I 幀)搭配 show_data 可查看包原始十六進制數據,配合 pos 字段可精確定位文件偏移處的原始碼流,適合深度碼流分析。
show_format:封裝格式與全局信息輸出以 FORMAT 標籤包裹,可獲取:
mov,mp4,m4a,3gp,3g2,mj2 共用標識)例如 WMV 文件會顯示 format_name=asf 並包含兩個流(音視頻)。
show_frames:幀級詳細信息輸出以 FRAME 標籤包裹,關鍵屬性表:
| 屬性 | 說明 | 示例值 |
|---|---|---|
| media_type | 幀類型 | video |
| stream_index | 流索引 | 0 |
| key_frame | 是否關鍵幀 | 1 |
| pict_type | 幀類型 | I / P / B |
| width / height | 分辨率 | 608 / 320 |
| pix_fmt | 像素格式 | yuv420p |
| pkt_pts / pkt_dts | 時間戳 | 0 |
| pkt_duration_time | 幀時長(秒) | 0.066667 |
| pkt_pos | 文件偏移 | 44 |
此功能可替代 Elecard Stream Eye 等圖形化工具,實現命令行下的幀級可視化分析。
show_streams:流級編碼參數輸出以 STREAMS 標籤包裹,涵蓋:
codec_name)、全稱(codec_long_name)、Profile/Levelr_frame_rate、avg_frame_rate)、碼率、時間基(time_base)、總幀數(nb_frames)print_format(或 -of)支持多種結構化輸出,便於腳本解析或可視化:
示例:ffprobe -show_frames -of csv=input.mp4 > frames.csv,再用 Excel 繪製幀大小曲線,效果媲美專業分析軟件。
select_streams僅分析特定流,避免輸出噪音:
-select_streams v:僅視頻流-select_streams a:僅音頻流-select_streams v:0:第一條視頻流示例:ffprobe -show_frames -select_streams v -of json input.mp4
ffprobe 是音視頻開發者的「X 光機」。掌握 show_packets、show_frames、show_streams、show_format 四大核心子命令,配合 -of json/csv 輸出,即可覆蓋 90% 的碼流分析需求。