目錄
一、下載FFmpeg的編譯源碼
二、編譯源碼
三、ffmpeg工具結構解析
1、bin目錄
2、include庫
3、lib庫
四、注意事項
五、可能出現的一些問題
1、某些工具未安裝/版本過久
2、缺少pkg-config工具
3、缺少ffmplay
????????FFmpeg 是一個開源的跨平臺音視頻處理工具集,它包含了一系列的程序、庫和工具,用于錄制、轉換和流處理音視頻文件和流媒體。
一、下載FFmpeg的編譯源碼
? ? ? ? 進入網站:http://ffmpeg.org/download.html
????????
????????在網站中先擇git地址進行下載。如果git下載比較慢,也可以將選擇瀏覽器下載后轉移到Linux虛擬機中或直接在Ubuntu的內置瀏覽器中進行下載。
二、編譯源碼
????????執行下述命令:
./configure --prefix=/usr/local/ffmpeg --enable-debug=3 --enable-ffplay
sudo make -j 4
sudo make install
? ? ? ? 如果編譯成功,那么將會在安裝路徑/user/local/ffmpeg下出現如下子目錄
三、ffmpeg工具結構解析
? ? ? ? 下面我們來看一下安裝好的ffmpeg中的這些子目錄中我們需要使用到的東西
bin:
bin
目錄一般存放可執行文件(binaries),即程序的二進制文件。在 FFmpeg 中,這個目錄存放了ffmpeg
、ffplay
、ffprobe
等命令行工具的可執行文件。當你在終端中輸入命令時,系統會在這個目錄中查找對應的可執行文件來執行命令。include:
include
目錄通常存放頭文件(header files),這些文件包含了程序接口的聲明和定義,供開發者在自己的程序中引用和調用。在 FFmpeg 中,這個目錄存放了各個模塊的頭文件,如libavcodec
、libavformat
等模塊的頭文件,允許開發者在自己的代碼中使用 FFmpeg 的功能。lib:
lib
目錄一般存放庫文件(libraries),這些文件包含了程序在編譯時鏈接的代碼和函數。在 FFmpeg 中,這個目錄存放了各個模塊的靜態庫文件(如.a
文件)和動態庫文件(如.so
文件),供開發者在自己的應用程序中鏈接使用 FFmpeg 提供的功能。share:
share
目錄通常存放共享文件(shared data),這些文件可以被多個程序或者用戶共享使用。在 FFmpeg 中,這個目錄可能包含一些共享的配置文件、文檔或者其他資源文件,幫助用戶更好地使用和理解 FFmpeg 的功能和特性。
1、bin目錄
????????重點主要在于bin目錄下的三個工具
ffmpeg:
ffmpeg
是 FFmpeg 項目中最主要的命令行工具之一,用于音視頻的錄制、轉換以及流處理。- 它支持從多種輸入源(文件、攝像頭、網絡流等)讀取音視頻數據,然后可以對其進行編解碼、過濾、轉碼等操作,最后將處理后的結果輸出到文件或者流媒體服務器中。
ffplay:
ffplay
是 FFmpeg 提供的一個簡單音視頻播放器,基于 SDL(Simple DirectMedia Layer)庫。- 它能夠播放多種音視頻格式,支持快進、快退、循環播放等基本功能,是調試和測試音視頻文件的方便工具。
ffprobe:
ffprobe
是 FFmpeg 提供的音視頻流分析工具,用于分析媒體文件或者流的詳細信息。- 它可以提取音視頻文件的元數據(如分辨率、編碼格式、幀率、比特率等),幫助用戶了解和分析媒體文件的特性和結構。
2、include庫
? ? ? ? 用于后續的二次開發
libavcodec:
- 這是 FFmpeg 中最重要的模塊之一,包含了各種音視頻編解碼器。
libavcodec
提供了將音頻和視頻數據編碼和解碼的功能。例如,它支持將視頻從一種格式轉換為另一種格式,如將 H.264 編碼的視頻轉換為 MPEG-2 編碼的視頻。- FFmpeg 中的許多命令行工具和應用程序都依賴于
libavcodec
來處理音視頻編解碼任務。libavdevice:
- 這個模塊包含了各種設備的輸入和輸出支持代碼。
libavdevice
允許 FFmpeg 支持不同的音視頻輸入和輸出設備,如攝像頭、音頻輸入設備、視頻捕獲卡等。- 例如,使用
libavdevice
可以從攝像頭捕獲視頻數據或從麥克風捕獲音頻數據。libavfilter:
libavfilter
模塊實現了音視頻過濾器框架。- 這個模塊允許用戶應用各種音視頻過濾器來處理音視頻流。過濾器可以用來進行裁剪、縮放、旋轉、去噪、水印等操作。
- FFmpeg 中的
ffmpeg
命令行工具通過libavfilter
支持將一個或多個過濾器應用到輸入音視頻流,并將輸出寫入到文件或者流媒體服務器。libavformat:
libavformat
提供了音視頻格式的封裝和解封裝功能。- 這個模塊允許 FFmpeg 支持從各種音視頻格式中讀取數據,以及將音視頻數據封裝為不同的格式,如 MP4、AVI、FLV 等。
- 通過
libavformat
,FFmpeg 能夠處理從本地文件到網絡流媒體的廣泛應用場景。libavutil:
libavutil
是一個工具庫,提供了各種用于音視頻處理的工具函數。- 這個模塊包含了用于數學運算、數據結構操作、字節操作、日志、時間處理等功能的工具函數。
- 許多 FFmpeg 的其他模塊都依賴于
libavutil
中的函數來實現它們的功能。libswresample:
libswresample
提供了音頻重采樣功能。- 這個模塊用于將音頻數據從一個采樣率或格式轉換為另一個采樣率或格式,以便匹配特定的音頻設備或格式要求。
- FFmpeg 中處理音頻流時經常需要使用
libswresample
來進行采樣率調整或格式轉換。libswscale:
libswscale
提供了視頻圖像縮放和顏色空間轉換的功能。- 這個模塊可以將視頻幀從一種像素格式轉換為另一種像素格式,以及進行圖像大小的縮放和裁剪。
- FFmpeg 使用
libswscale
來處理視頻流中的圖像縮放、格式轉換以及色彩空間的轉換,例如將 RGB 格式的圖像轉換為 YUV 格式。
3、lib庫
libavcodec.a:
libavcodec.a
是 FFmpeg 中的靜態鏈接庫,包含了各種音視頻編解碼器的實現代碼。靜態庫在編譯時會被直接鏈接到應用程序中,使得應用程序在運行時不再需要動態加載。libavdevice.a:
libavdevice.a
是包含各種音視頻輸入和輸出設備支持代碼的靜態鏈接庫。它允許應用程序通過 FFmpeg 訪問和操作音視頻設備,如攝像頭、音頻輸入設備等。libavfilter.a:
libavfilter.a
包含音視頻過濾器框架的實現代碼。這個庫允許應用程序使用各種過濾器對音視頻流進行處理,如裁剪、縮放、旋轉、去噪等操作。libavformat.a:
libavformat.a
包含音視頻格式封裝和解封裝的實現代碼。它允許應用程序讀取和寫入各種音視頻格式的文件和流媒體。libavutil.a:
libavutil.a
是 FFmpeg 的實用工具函數庫的靜態鏈接庫。它包含了各種常用的工具函數,用于數學運算、數據結構操作、日志處理等。libswresample.a:
libswresample.a
包含音頻重采樣功能的實現代碼。它允許應用程序將音頻數據從一個采樣率或格式轉換為另一個采樣率或格式。libswscale.a:
libswscale.a
包含視頻圖像縮放和顏色空間轉換功能的實現代碼。它允許應用程序對視頻幀進行大小縮放、像素格式轉換以及色彩空間轉換。pkgconfig:
pkgconfig
目錄包含了用于 pkg-config 工具的配置文件。這些文件允許開發者在編譯和鏈接應用程序時,通過 pkg-config 查詢 FFmpeg 庫的編譯和鏈接選項。
四、注意事項
????????如果需要關閉靜態庫,打開動態庫,可以在第一條命令的末尾再添加下述命令
--disable-static --enable-shared
? ? ? ? 在編譯過程中,如果對于一些參數的意義不太清楚,可以通過下述命令來查看命令的含義
./configure -help | grep "需要查看的參數名"
五、可能出現的一些問題
1、某些工具未安裝/版本過久
執行下述命令:
sudo apt update
sudo apt upgrade
sudo apt install nasm
2、缺少pkg-config工具
這里其實和上述問題處理一樣
sudo apt install pkg-config
3、缺少ffmplay
如果安裝結束發現bin目錄下沒有ffmplay,那就需要先安裝,再重新執行第二部分的內容
sudo apt install libsdl2-dev