ffplay 是 FFmpeg 專案內建的簡易媒體播放器,雖然介面樸素,卻是驗證編解碼器、封裝格式、濾鏡鏈路以及進行音視訊資料視覺化分析的利器。本文系統整理其常用參數、進階選項與實戰視覺化應用場景。
編譯 FFmpeg 時需系統安裝 SDL 1.2 開發套件(libsdl1.2-dev),否則 ffplay 不會被建構。現代系統多已升級至 SDL 2,若需使用 ffplay 可考慮安裝相容套件或改用 ffplay 的 SDL 2 移植版本。
| 參數 | 功能說明 |
|---|---|
-x <W> | 強制設定視訊顯示寬度 |
-y <H> | 強制設定視訊顯示高度 |
-s <WxH> | 同時設定寬高(如 640x480) |
-fs | 全螢幕播放 |
-an | 停用音訊軌 |
-vn | 停用視訊軌 |
-sn | 停用字幕軌 |
-ss <sec> | 跳轉至指定秒數開始播放 |
-t <sec> | 限制播放時長 |
-window_title <str> | 自訂視窗標題 |
-autoexit | 播放結束自動退出 |
-loop <n> | 循環播放 n 次 |
-framedrop | CPU 過載時自動丟幀 |
-infbuf | 無限緩衝區(適合即時串流) |
# 從第 30 秒開始播放 10 秒
ffplay -ss 30 -t 10 input.mp4
# 自訂視窗標題播放 RTMP 直播流
ffplay -window_title "直播測試" rtmp://example.com/live/stream
# 組合進階參數:指定位置、時長、自動退出、計時驗證
time ffplay -window_title "測試" -ss 20 -t 10 -autoexit output.mp4
對於包含多個 Program 的傳輸流(如 IPTV、衛星訊號),需指定音視訊流索引:
# 播放 Program 13 對應的第 4 條視訊流與第 5 條音訊流
ffplay -vst 4 -ast 5 ~/Movies/ChinaTV-11.ts
可先用 ffprobe 分析流結構,確認 service_name 與流索引對應關係。
# 載入 SRT 字幕檔
ffplay -window_title "電影" -vf "subtitles=input.srt" output.mp4
ffplay -showmode 1 audio.mp3
解碼後的 PCM 資料以波形圖呈現,可快速判斷靜音段、削波失真、雜訊底噪等問題。
-debug vis_mb_type)顯示 H.264/AVC 幀內宏塊預測模式分布:
INTRA_PCM 無損原始取樣INTRA_16x16 / INTRA_ACPRED 16×16 幀內預測INTRA_4x4 4×4 幀內預測DIRECT B 幀無運動向量SKIP / GMC 跳過/全域運動補償指令範例:
ffplay -debug vis_mb_type -window_title "MB類型" -ss 20 -t 10 -autoexit video.mp4
-vismv / codecview 濾鏡)# 舊版參數(將棄用)
ffplay -vismv pf video.mp4 # P 幀前向運動向量
ffplay -vismv bf video.mp4 # B 幀前向
ffplay -vismv bb video.mp4 # B 幀後向
# 新版推薦寫法(通用濾鏡)
ffplay -flags2 +export_mvs -vf "codecview=mv=pf+bf+bb" video.mp4
箭頭方向與長度直觀反映運動估計精度與方向,是視訊編碼品質分析、動作偵測演算法驗證的重要工具。
| 參數 | 適用場景 |
|---|---|
-sync audio | 以音訊時鐘為基準(預設) |
-sync video | 以視訊時鐘為基準 |
-sync ext | 以外部時鐘為基準 |
-fast | 非標準相容模式,犧牲正確性換取速度 |
-exitonkeydown | 按鍵即退出,適合自動化測試腳本 |
-exitonmousedown | 滑鼠點擊即退出 |
ffplay 遠不止一個播放器,它是 FFmpeg 生態系中「所見即所得」的除錯儀表板。掌握其視覺化參數,能讓開發者在無需撰寫分析程式的情況下,快速定位編碼效率瓶頸、同步偏移、丟幀原因等核心問題。