1. 程式人生 > >FFmpeg簡介以及命令工具使用

FFmpeg簡介以及命令工具使用

最近要了解FFmpeg裡面的技術細節問題,所以在讀《FFmpeg從入門到精通這本書》,後面會有一些列的文章來筆記實踐具體的技術細節問題。

FFmpeg安裝

關於在Mac下的FFmpeg的安裝之前的文章有提到過檢視這裡我就使用命令進行了安裝但是這樣預設安裝完後會有一些庫和工具沒有安裝上。我這篇文章安裝的時候FFmpeg還是3.4.2的版本,在寫這篇文章的時候已經是4.0的版本了。
於是我使用更新命令更新到了4.0版本:

brew upgrade ffmpeg

於是在目錄下面有兩個版本的FFmpeg了並且安裝的4.0版本的工具庫是這樣的:




連我們以後要使用的ffplay這個工具都沒有,怎麼處理呢?我這樣做來生成這個工具命令的。
brew reinstall ffmpeg --
with-sdl2

可以通過命令列brew info ffmpeg檢視它可以帶一些什麼引數,看了之後一目瞭然知道後面要用到什麼庫就來重新安裝一下。

因為在安裝FFmpeg的時候在後面可以帶引數,所以我重新安裝了一下ffmpeg並且帶了一個可以使用ffplay工具的引數–with-sdl2,等待安裝完成在bin目錄下面看到了ffplay這個命令啦。

當然我們也可以通過不使用brew工具來進行安裝,使用手動編譯的方式來使用FFmpeg參考之前的文章:檢視
配置好了之後可以通過命令ffmpeg -h檢視支援的一些常用的命令操作。例如檢視支援的解碼支援:

ffmpeg -decoders

FFmpeg工具使用基礎

這裡我們主要了解三個主要的FFmpeg工具:

  • ffmpeg:做音視訊編解碼方便使用,很多轉碼也是使用ffmpeg,可以通過ffmpeg –help檢視它支援的基礎資訊,還有高階引數的檢視使用ffmpeg –help long要一次檢視所以的引數可以使用ffmpeg –help full
  • ffprobe:進行音視訊資料分析的常用引數
  • ffplay:播放音視訊的時候的一系列操作命令

ffmpeg

ffmpeg基礎常用命令

  • ffmpeg -formats
    使用ffmpeg轉碼的時候,有時候會遇到無法解析的視訊檔案或者無法生成視訊檔案,可以通過這個命令檢視是否支援對應的檔案格式。

  • ffmpeg -codecs
    檢視支援的編碼器和解碼器,例如檢視是否支援H.264編解碼器。

  • ffmpeg -filters
    檢視FFmpeg支援哪些濾鏡

  • ffmpeg -h muxer=flv
    檢視FLV封裝器的引數支援,同理檢視編解碼器的引數支援為ffmpeg -h encoder=h264

  • ffmpeg -i input.mp4 -f mp3 -vn output.mp3
    從MP4中提取出mp3音訊檔案

ffmpeg封裝轉換

ffmpeg封裝轉換功能在AVFormat模組中,通過libavformat庫進行Mux和Demux
ffmpeg編解碼功能通過AVCodec來完成,通過libavcodec庫進行Encode和Decode

下面列舉一個進行視訊檔案封裝與編碼的例子:

ffmpeg -i ~/Movies/i_am_you.rmvb -vcodec mpeg4 -b:v 200k -r 15 -an ~/Movies/output.mp4

輸出資訊如下:




- 轉封裝格式從RMVB為MP4格式
- 視訊編碼從RV40轉為MPEG4格式
- 視訊位元速率從1531kbit/s轉為200kbit/s
- 視訊幀率從24fps轉為15fps
- 轉碼後的檔案不包含音訊(-an 引數)

ffprobe

ffprobe是多媒體資訊檢視工具,主要用來檢視多媒體檔案資訊,可以通過ffprobe –help檢視詳細的幫助資訊。列舉幾個常見的命令

  • ffprobe -show_packets filename
    檢視多媒體資料包資訊

  • ffprobe -show_data filename
    檢視多媒體檔案資料內容 可以和上面的命令組合檢視每個包的具體二進位制資料ffprobe -show_data -show_packets filename

  • ffprobe -show_format filename
    檢視檔案封裝格式

  • ffprobe -show_frames filename
    檢視視訊檔案中的幀資訊

  • ffprobe -show_streams filename
    檢視多媒體檔案中的流資訊

  • ffprobe -show_streams -select_streams v -of xml filename
    使用select_stream可以檢視音訊(a)視訊(v)字幕(s)的資訊 -of xml 以xml形式來顯示

ffplay

ffplay在FFmpeg中常用來作為播放器,其實同樣可以通過很多音視訊資料的圖形化分析,可以看到視訊影象的運動估計方向,音訊資料的波形等

ffplay常用引數

通過命令ffplay –help來檢視支援的一些列引數

ffplay使用示例

  • ffplay -ss 30 -t 10 filename
    視訊從30秒開始播放,播放十秒鐘

  • ffplay -window_title “Hello Lyman” filename
    視訊播放時的播放器視窗顯示標題為自定義標題

  • ffplay rtmp://live.hkstv.hk.lxdns.com/live/hks
    開啟網路直播流

  • time ffplay -window_title “Hello Lyman” -ss 20 -t 10 -autoexit filename
    從20秒播放一個視訊,播放時長為10秒,播放完成後自動退出,播放視窗標題為 Hello Lyman,通過time來檢視命令執行時長

  • ffplay -window_title “Hello Lyman” -vf “subtitles=input.srt” output.mp4
    通過filter將字幕檔案載入到播放資料中。我在執行完這條命令後出現錯誤no such filter subtitles 大概意思是沒有字幕的filter 於是我執行命令brew reinstall ffmpeg --with-libass把字幕庫編譯進來
    但是最後這條命令還是執行出錯了出錯原因為:

Unable to open ~/Movies/input2.srt
Error initializing filter 'subtitles' with args '~/Movies/input2.srt'

不知道是不是我這個字幕有問題 但是我在網上下載了字幕還是有問題
- ffplay -showmode 1 filename.mp3
播放音訊的時候將會把解碼後的音訊資料以音訊波形的形式顯示出來

  • ffplay -vismv pf filename
    檢視B幀預測與P幀預測資訊測試失敗