1. 程式人生 > >FFMPEG進階系列01-ffplay命令詳解

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