FFmpeg使用手冊 - ffplay 的常用命令
在編譯FFmpeg源代碼時,如果系統中包含了SDL-1.2版本時,會默認將ffplay編譯生成出來,如果不包含SDL-1.2或者版本不是SDL-1.2時,無法生成ffplay文件,所以,生成如果想使用ffplay進行流媒體播放測試,是需要安裝SDL-1.2的。
通常使用ffplay作為播放器,其實ffplay不但可以做播放器,同樣可以作為很多圖像化音視頻數據的分析根據,通過ffplay可以看到視頻圖像的運動估計方向,音頻數據的波形等,在本節將會有更多的參數進行介紹並舉例。
6.1 ffplay 常用參數
ffplay不僅僅是播放器,同時也是測試ffmpeg的codec引擎,format引擎,以及filter引擎的工具,並且也可以做可視化的媒體參數分析,可以通過ffplay --help 進行查看:
如上圖,大多數是前面已經介紹過的參數,還有些是未介紹過的
參數
說明
X
強制設置視頻顯示窗口的寬度
y
強制設置視頻顯示窗口的高度
S
設置視頻顯示的寬高
fs
強制全屏顯示
an
屏蔽音頻
vn
屏蔽視頻
Sn
屏蔽字幕
ss
根據設置的秒進行定位拖動
t
設置播放視頻/音頻長度
Bytes
設置定位拖動的策略,0為不可拖動,1為可拖動,-1為自動
Nodisp
關閉圖形化顯示窗口
f
強制使用設置的格式進行解析
window_title
設置顯示窗口的標題
af
設置音頻的濾鏡
Codec
強制使用設置的codec進行解碼
autorotate
自動旋轉視頻
常見參數可以手動進行嘗試:
如果希望從視頻的第30秒開始播放,播放10秒鐘的文件,則可以使用如下命令
#ffplay -ss 30 -t 10 input.mp4
如果希望視頻播放時播放器的窗口顯示標題為自定義標題,則使用如下命令
ffplay -window_title "Hello World, This is a sample" output.mp4
顯示窗口如下圖:
例如使用ffplay打開網絡直播流,可以使用命令
# ffplay -window_title "播放測試" rtmp://up.v.test.com/live/stream
如圖播放的視頻為實時網絡直播視頻流。
根據上圖可以看到播放器播放的窗口標題已經顯示為自定義設置的內容。
基本參數介紹完畢,下面進一步介紹ffplay的高級一些的參數。
6.2 ffplay高級參數
通過使用ffplay –help參數看到幫助信息比較多,其中包含了高級參數介紹,下面詳細介紹一下
參數
說明
ast
設置將要播放的音頻流
vst
設置將要播放的視頻流
sst
設置將要播放的字幕流
Stats
輸出多媒體播放狀態
Fast
非標准化規范的多媒體兼容優化
sync
音視頻同步設置可設置根據音頻視頻進行參考,視頻時間參考,或者外部擴展時間進行參考
autoexit
多媒體播放完畢自動退出ffplay,ffplay默認播放完畢不退出播放器
exitonkeydown
當有按鍵按下事件產生時退出ffplay
exitonmousedown
當有鼠標按鍵事件產生時退出ffplay
loop
設置多媒體文件循環播放次數
framedrop
當CPU資源占用過高時,自動丟幀
infbuf
設置無極限的播放器buffer,這個選項常見於實時流媒體播放場景
vf
視頻濾鏡設置
acodec
強制使用設置的音頻解碼器
vcodec
強制使用設置的視頻解碼器
scodec
強制使用設置的字幕解碼器
下面根據這些參數與前面介紹過的一些參數進行組合:
例如從20秒播放一個視頻,播放時長為10秒鐘,播放完成後自動退出ffplay,播放器的窗口標題為”Hello World”,為了確認播放時長正確,可以通過系統命令time查看命令運行時長
#time ffplay -window_title "Hello World" -ss 20 -t 10 -autoexit output.mp4
該命令執行完畢之後輸出如下:
real0m10.783s
user0m8.401s
sys0m0.915s
例如強制使用H264解碼器解碼mpeg4的視頻,將會報錯:
# ffplay -vcodec h264 output.mp4
使用h264的解碼器解碼mpeg4時會得到no frame的錯誤,視頻也解析不出來。
前面舉過的例子中,看到比較多的是單節目的流,下面舉一個多節目的流,常見於**行業的視頻:
當視頻流中出現多個Program時,播放Program與常規的播放方式則有所不同,需要指定對應的流,可以通過vst、ast、sst參數指定,例如希望播放Program 13中的音視頻流,則通過如下命令行指定:
#ffplay -vst 4 -ast 5 ~/Movies/movie/ChinaTV-11.ts
播放效果如圖:
通過Program 13中的信息可以看到該流名稱為service_name對應的值是CCTV 9,而指定音視頻流播放之後播放出來的圖像也能夠與之對應。
如果使用ffplay播放視頻時希望加載字幕文件,則可以通過加載ASS或者SRT字幕文件來解決,下面舉一個加載SRT字幕的例子,首先編輯SRT字幕文件,內容如下:
然後通過filter將字幕文件加載如播放數據中,使用命令
# ffplay -window_title "Test Movie" -vf "subtitles=input.srt" output.mp4
通過這條命令可以看到播放的效果如下
6.3 ffplay的數據可視化分析應用
使用ffplay除了可以播放視頻流媒體文件之外,還可以作為可視化的視頻流媒體分析工具,例如當播放音頻文件時,不確定文件的聲音是否正常,噪聲數據等分析,可以直接使用ffplay播放音頻文件,播放的時候將會把解碼後的音頻數據以音頻波形顯示出來:
#ffplay -showmode 1 output.mp3
從圖中可以看到,音頻的播放時的波形可以通過振幅顯示出來,可以用來看到音頻的播放情況。
例如當播放視頻時體驗解碼器是如何解碼每個宏塊的,可以使用命令
# ffplay -debug vis_mb_type -window_title "show vis_mb_type" -ss 20 -t 10 -autoexit output.mp4
顯示窗口內容
在輸出的視頻信息中,可以看到不同顏色的方塊,下面來說明一下這些顏色代表著什麼信息:
顏色
宏塊類型條件
說明
IS_PCM (MB_TYPE_INTRA_PCM)
無損(原始采樣不包含預測信息)
(IS_INTRA && IS_ACPRED) || IS_INTRA16x16
16x16幀內預測
IS_INTRA4x4
4x4幀內預測
IS_DIRECT
無運動向量處理(B幀分片)
IS_GMC && IS_SKIP
16x16跳宏塊(P或B幀分片)
IS_GMC
全局運動補償(與H264無關)
!USES_LIST(1)
參考過去的信息(P或B幀分片)
!USES_LIST(0)
參考未來的信息(B幀分片)
USES_LIST(0) && USES_LIST(1)
參考過去和未來信息(B幀分片)
例如通過ffplay查看B幀預測與P幀預測信息,希望將信息在窗口中顯示出來,使用命令
# ffplay -vismv pf output.mp4
顯示效果如圖
通過圖中的箭頭可以看到p幀運動估計的信息
而vismv參數則是用來顯示圖像解碼時的運動向量信息的,參數可以設置三種類型的運動向量信息顯示
參數
說明
pf
P幀向前運動估計顯示
bf
B幀向前運動估計顯示
bb
B幀向後運動估計顯示
這個vismv參數將會在未來被替換掉,未來更多的是使用codecview這個filter來進行設置,如上面圖像,也可以通過下面這條命令完成
# ffplay -flags2 +export_mvs -ss 40 ~/Movies/objectC/facebook.mp4 -vf codecview=mv=pf+bf+bb