FFMPEG進階系列01-ffplay命令詳解

概述

  1. ffplay是一個基於FFMPEG庫和SDL庫開發的多媒體播放器。它的主要目的是是用來測試FFMPEG的各種API,比如codec/format/filter等等庫。
  2. 掌握ffplay的設計邏輯,對於播放器開發人員提升經驗非常有幫助。嗶哩嗶哩的ijkplayer就是基於ffplay做的二次開發。

    命令格式

    ffplay [options] [input_url]

主要選項

選項 說明
-x width 強制顯示寬帶。
-y height 強制顯示高度。
-s size 幀尺寸 設置顯示幀存儲(WxH格式),僅適用於類似原始YUV等沒有包含幀大小(WxH)的視頻。該參數已經被廢棄,請嘗試用-video_size代替
-fs 以全屏模式啓動。
-an 禁用音頻(不播放聲音)
-vn 禁用視頻(不播放視頻)
-sn 禁用字幕(不顯示字幕)
-ss pos 根據設置的秒進行定位拖動,注意時間單位:比如'55' 55 seconds, '12:03:45' ,12 hours, 03 minutes and 45 seconds, '23.189' 23.189 second
-t duration 設置播放視頻/音頻長度,時間單位如 -ss選項
-bytes 按字節進行定位拖動。
-seek_interval interval 自定義左/右鍵定位拖動間隔(以秒爲單位),默認值爲10秒
-nodisp 關閉圖形化顯示窗口,視頻將不顯示
-noborder 無邊框窗口
-volume vol 設置起始音量。音量範圍[0 ~100]
-f fmt 強制使用設置的格式進行解析。比如-f s16le
-window_title title 設置窗口標題(默認爲輸入文件名)
-loop number 設置播放循環次數
-showmode mode 設置顯示模式,可用的模式值:0 顯示視頻,1 顯示音頻波形,2 顯示音頻頻譜。缺省爲0,如果視頻不存在則自動選擇2
-vf filtergraph 設置視頻濾鏡
-af filtergraph 設置音頻濾鏡
-i input_url input_url

高級選項

選項 說明
-pix_fmt format 格式設置像素格式。此選項已被棄用,有利於私有選項,try -pixel_format
-stats 打印多個回放統計信息,包括顯示流持續時間,編×××參數,流中的當前位置,以及音頻/視頻同步差值。默認情況下處於啓用狀態,要顯式禁用它則需要指定-nostats。
-fast 非標準化規範的多媒體兼容優化
-genpts 生成pts。
-sync type 同步類型 將主時鐘設置爲audio(type=audio),video(type=video)或external(type=ext),默認是音頻爲主時鐘。
-ast audio_stream_specifier 指定音頻流索引,比如-ast 3,播放流索引爲3的音頻流
-vst video_stream_specifier 指定視頻流索引,比如-vst 4,播放流索引爲4的視頻流
-sst subtitle_stream_specifier 指定字幕流索引,比如-sst 5,播放流索引爲5的字幕流
-autoexit 視頻播放完畢後退出。
-exitonkeydown 鍵盤按下任何鍵退出播放
-exitonmousedown 鼠標按下任何鍵退出播放
-codec:media_specifier codec_name 強制使用設置的多媒體×××,media_specifier可用值爲a(音頻), v(視頻)和s字幕。比如-codec:v h265 強制視頻採用h265解碼
-acodec codec_name 強制使用設置的音頻×××進行音頻解碼
-vcodec codec_name 強制使用設置的視頻×××進行視頻解碼
-scodec codec_name 強制使用設置的字幕×××進行字幕解碼
-autorotate 根據文件元數據自動旋轉視頻。默認情況下啓用,若需禁用則使用-noautorotate
-framedrop 如果視頻不同步則丟棄視頻幀。當主時鐘非視頻時鐘時默認開啓。若需禁用則使用 -noframedrop
-infbuf 不限制輸入緩衝區大小。儘可能快地從輸入中讀取儘可能多的數據。播放實時流時默認啓用,如果未及時讀取數據,則可能會丟棄數據。此選項將不限制緩衝區的大小。若需禁用則使用-noinfbuf

播放控制

選項 說明
q, ESC 退出播放
f 全屏切換
p, SPC 暫停
m 靜音切換
9, 0 9減少音量,0增加音量
/, * /減少音量,*增加音量
a 循環切換音頻流
v 循環切換視頻流
t 循環切換字幕流
c 循環切換節目
w 循環切換過濾器或顯示模式
s 逐幀播放
left/right 向後/向前拖動10秒
down/up 向後/向前拖動1分鐘
page down/page up 拖動上一個/下一個。或者如果沒有章節向後/向前拖動10分鐘。
鼠標右鍵單擊 拖動與顯示寬度對應百分比的文件進行播放
鼠標左鍵雙擊 全屏切換

應用範例

播放媒體文件

  1. 打開網絡直播流,可以使用命令
    ffplay -window_title "rtmp stream" rtmp://202.69.69.180:443/webcast/bshdlive-pc
    香港財經頻道
  2. 從2秒播放一個視頻,播放時長爲10秒鐘,播放完成後自動退出ffplay,播放器的窗口標題爲”test time”,
    ffplay -window_title "test time" -ss 2 -t 10 -autoexit test.mp4
  3. 強制使用mp3×××解碼aac的音頻,將會報錯:
    ffplay -acodec mp3 test.mp4

  4. 當視頻流中出現多個Program時,播放Program與常規的播放方式則有所不同,需要指定對應的流,可以通過vst、ast、sst參數指定,例如希望播放Program 13中的音視頻流,則通過如下命令行指定:
    ffplay -vst 4 -ast 5 ~/Movies/movie/ChinaTV-11.ts

    ffplay的數據可視化分析應用

  5. 當播放視頻時體驗×××是如何解碼每個宏塊的,可以使用命令
    ffplay -debug vis_mb_type -window_title "show vis_mb_type" -ss 20 -t 10 -autoexit Titanic.ts
    顯示窗口內容
    原圖

宏塊圖
在輸出的視頻信息中,可以看到不同顏色的方塊,下面來說明一下這些顏色代表着什麼信息:
image.png

  1. 通過ffplay查看B幀預測與P幀預測信息,希望將信息在窗口中顯示出來,使用命令
    ffplay -vismv pf Titanic.ts
    顯示效果如圖
    FFMPEG進階系列01-ffplay命令詳解
    image.png
    通過圖中的箭頭可以看到p幀運動估計的信息
    而vismv參數則是用來顯示圖像解碼時的運動向量信息的,參數可以設置三種類型的運動向量信息顯示
    FFMPEG進階系列01-ffplay命令詳解
    這個vismv參數將會在未來被替換掉,未來更多的是使用codecview這個filter來進行設置,如上面
    圖像,也可以通過下面這條命令完成
    ffplay -flags2 +export_mvs Titanic.ts -vf codecview=mv=pf+bf+bb
    FFMPEG進階系列01-ffplay命令詳解

  2. 當播放音頻文件時,不確定文件的聲音是否正常,噪聲數據等分析,可以直接使用ffplay播放音頻文件,播放的時候將會把解碼後的音頻數據以音頻波形顯示出來:
    ffplay -showmode 1 Titanic.ts
    音頻波形

過濾器(filter)

在多媒體處理中,filter的意思是被編碼到輸出文件之前用來修改輸入文件內容的一個軟件工具。比如:視頻翻轉,旋轉,縮放等。
語法:[input_link_label1] [input_link_label1]... filter_name=parameters [output_link_label1] [output_link_label2] ...
過濾器圖link label:是標記過濾器的輸入或輸出名稱

  1. 視頻過濾器-vf
    • 將原視頻按順時針旋轉90度
      ffplay -i test.mp4 -vf transpose=1
    • 將原視頻垂直翻轉
      ffplay -i test.mp4 -vf vflip transpose=1
    • 將以下兩個效果疊加
      ffplay -i test.mp4 -vf vflip,transpose=1
  2. 音頻過濾器-af
    • 實現快速播放,聲音速度是原始速度的1.5倍
      ffplay -i test.mp4 -af atempo=1.5

待續 尚未完成

資源

可用RTMP鏈接

香港衛視,rtmp://live.hkstv.hk.lxdns.com/live/hks (最近測試已不能連接)
香港財經,rtmp://202.69.69.180:443/webcast/bshdlive-pc
韓國GoodTV,rtmp://mobliestream.c3tv.com:554/live/goodtv.sdp
韓國朝鮮日報,rtmp://live.chosun.gscdn.com/live/tvchosun1.stream
美國1,rtmp://ns8.indexforce.com/home/mystream
美國2,rtmp://media3.scctv.net/live/scctv_800
美國中文電視,rtmp://media3.sinovision.net:1935/live/livestream

多種測試碼流

http://samples.mplayerhq.hu/

參考

https://wenku.baidu.com/view/296eefcaf90f76c661371af1.html

更多資料,更多分享

音視頻技術交流羣1 已滿
音視頻技術交流羣2 已滿
音視頻技術交流羣3 羣號782508536

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章