ffmpeg整體介紹

  先整體介紹一下FFmpeg,後面有時間了,再分類介紹一些工具,如轉碼、濾鏡、視頻截斷與合併等功能。本文分以下幾個章節來介紹。html

1.FFmpeg是什麼?linux

  它的官網爲:https://ffmpeg.org/,由Fabrice Bellard(法國著名程序員Born in 1972)於2000年發起建立的開源項目。該人是個牛人,在不少領域都有很大的貢獻。git

  FFmpeg是多媒體領域的萬能工具。只要涉及音視頻領域的處理,基本上沒有它作不了的事情!通俗點講,從視頻錄製、視頻編輯再到播放,它都能作!程序員

  最近比較火的抖音,還有國內的一些視頻點播廠商,像愛奇藝、騰訊視頻、優酷視頻,還有播放器,像QQ影音、暴風影音等,都離不開它!不然很是痛苦!爲何呢?github

  由於又要招一大幫人來把多媒體領域內的基礎工具(音視頻編解碼器、文件格式和協議庫、濾鏡庫等等)實現掉。web

2.FFmpeg的版權問題如何?編程

  它是一個開源、免費、跨平臺的視頻和音頻流方案,屬於自由軟件,採用LGPL或GPL許可證。而LGPL或GPL許可證又要求,基於該許可證進行開發的代碼,也有義務和責任GPL你的代碼,不管是你直接使用它的代碼,仍是不修改代碼而連接它的庫。數據結構

  不少廠商,尤爲國內的,都不太care版權問題,以至於上了恥辱柱。一些播放器,像KMPlayer(韓國的)、Potplayer、暴風影音、QQ影音等,使用了ffmpeg但沒開源,還有一些視頻直播短視頻類的,像tiktok客戶端,也使用了ffmpeg的庫。函數

  FFmpeg有恥辱柱公示欄,但目前已下線。從歷史記錄裏,咱們依然能夠看到這些名單,但這個名單到2014年就中止更新了,不知道出於何種緣由。工具

3.FFmpeg工具包括什麼?

  FFmpeg包含的工具衆多。通俗來講,例如錄製,從採集到編碼再到封裝,它都能幹!例如視頻播放,從解封裝到解碼再到輸出,它也能幹。例如給視頻加各類濾鏡(水印,字幕等等),對它來講也都是小菜一碟。再好比視頻編解碼格式的轉碼,還有文件格式的轉換,對它來講,都不在話下。

  從專業角度上,以功能分類,它包含了以下幾個庫(ffmpeg -h命令能夠查看):

libavutil —— 基礎工具庫,用於輔助多媒體編程。例如,數學函數、字符串操做、內存管理相關、數據結構相關、錯誤碼及錯誤處理、日誌輸出,以及其餘輔助信息(好比密鑰、哈希值、宏、庫版本、常量等)。

libavcodec ——音頻、視頻的編碼和解碼庫,這是它的強項,不少codec都是從頭開發,包含不少類型的編解碼器!

libavformat ——文件格式和協議庫,例如不少視頻文件名都是以.mp四、.mkv、.avi後綴名結尾,該庫包含衆多用於文件封裝(錄製時)和解封裝(播放時)的庫。

libavdevice ——輸入和輸出的設備庫,例如mic採集pcm數據,或pcm數據輸出到聲卡,視頻幀輸出渲染相關(又須要依賴SDL庫,只有檢測到SDL庫才能編譯相關的代碼,例如ffplay編譯出就須要依賴更底層的SDL庫)。

libavfilter ——音視頻濾鏡庫,例如音頻裏的變聲不變調、變調不變聲,視頻領域內的添加水印、去水印、添加logo等,功能由該庫完成。

libswscale ——圖像格式轉換庫,例如視頻幀的縮放、色彩空間轉換等。

libswresample ——音頻重採樣庫。

libpostproc ——視頻後處理庫。

4.下載時幾個版本介紹(只針對win平臺)

  去官網下載,能夠下載三種類型(目前好像已不按照這種方式提供了)的壓縮包:Dev版本、Static版本、Shared版本。

  「Dev版本」,提供:dll庫+頭文件。這個是已經編譯出來的動態庫(window下是dll,對應於linux下的so,上面列出來的按功能各有一個動態庫),供第三方作二次開發,開發者的代碼中引用提供的頭文件,編譯時連接這些dll庫,便可讓本身的exe跑起來。

  「static版本」,只包含編譯出來的exe文件(其實就三個——ffmpeg/ffplay/ffprobe),不包含各類動態庫(由於各類庫已經打包進了exe文件中,這致使了這些exe文件的size很是大)。這個版本是爲懶人準備的,直接拿來就能夠跑,不用去解決各類編譯及依賴問題。注意,裏面不單單集成了由FFmpeg源碼編譯出來的東西,還集成了以外的內容(各類第三方庫)。例如經常使用的x264編碼器,本不屬於FFmpeg所維護的範圍,但其能夠將其集成到ffmpeg.exe中。還有顯示的SDL2,也被集成到ffplay.exe中。參考連接

  「shared版本」,提供:dll庫+exe可執行文件。其中dll庫和exe文件的size都很小。注意測試exe文件時,dll庫路徑要加載進系統環境變量中,不然執行時會致使連接庫找不到而中止。

相關文章
相關標籤/搜索