首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

FFmpeg 實戰手冊:ffprobe 核心參數與多媒體流分析全攻略

     編輯:Java 綜合教學

前言:ffprobe 是什麼?

FFmpeg 套件中,ffmpeg 負責轉碼、推流,而 ffprobe 專司多媒體文件探測與信息提取。它能解析封裝格式、流結構、幀級細節、包數據,是調試音視頻、分析碼流結構的利器。

核心參數速查

常用參數眾多,建議先執行 ffprobe --help 瀏覽全貌。下文通過實戰案例講解高頻用法。

實戰案例精講

5.2.1 show_packets:逐包解析媒體流

輸出以 PACKET 標籤包裹,關鍵字段包括:

  • codec_type:視頻/音頻/字幕
  • stream_index:流索引
  • pts/pts_time:顯示時間戳
  • dts/dts_time:解碼時間戳
  • duration/duration_time:包時長
  • size:包大小
  • pos:文件偏移量
  • flags:關鍵幀標記(如 K 表示 I 幀)

搭配 show_data 可查看包原始十六進制數據,配合 pos 字段可精確定位文件偏移處的原始碼流,適合深度碼流分析。

5.2.2 show_format:封裝格式與全局信息

輸出以 FORMAT 標籤包裹,可獲取:

  • 封裝格式(如 mov,mp4,m4a,3gp,3g2,mj2 共用標識)
  • 流數量、起始時間、總時長、文件大小、整體碼率

例如 WMV 文件會顯示 format_name=asf 並包含兩個流(音視頻)。

5.2.3 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 等圖形化工具,實現命令行下的幀級可視化分析。

5.2.4 show_streams:流級編碼參數

輸出以 STREAMS 標籤包裹,涵蓋:

  • 編碼器名稱(codec_name)、全稱(codec_long_name)、Profile/Level
  • 視頻:分辨率、像素格式、幀率(r_frame_rate、avg_frame_rate)、碼率、時間基(time_base)、總幀數(nb_frames)
  • 音頻:採樣率、聲道數、樣本格式等

5.3 多種輸出格式:讓數據好用

print_format(或 -of)支持多種結構化輸出,便於腳本解析或可視化:

  • XML:層級結構清晰
  • INI:鍵值對扁平化
  • Flat:扁平鍵值,適合 grep
  • JSON:Web 前端友好,現代首選
  • CSV:可直接導入 Excel 繪圖分析碼率、幀大小波動

示例:ffprobe -show_frames -of csv=input.mp4 > frames.csv,再用 Excel 繪製幀大小曲線,效果媲美專業分析軟件。

5.4 流選擇器 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% 的碼流分析需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved