rs1 ccbwd
FFmpeg源碼下載肯定是優先去官網下載:官網 ffmpeg.org/download.ht…
打開官網如下:
可以選擇直接下載,或者git命令直接克隆一份,作為開發人員一般都喜歡選擇git克隆的方式,這樣方便后續更新。
3. FFmpeg編譯,安裝
3.1 在Mac下編譯安裝FFmpeg3.1.1 brew 方式安裝
在mac下面可以很方便的使用brew install ffmpeg命令直接安裝ffmpeg,如果是新手這樣安裝比較方便快捷,但是這么安裝有個弊端就是不能定制化,如果隨著你對FFmpeg的深入,你需要使用一些其他的工具,就需要手動編譯安裝了,通過源碼編譯的方式,我們可以自己選擇定制化。
我們可以先輸入brew search ffmpeg
3.1.2 源碼編譯 方式安裝
首先需要下載ffmpeg, 從官網http://ffmpeg.org/download.html下載然后是編譯ffmpeg 只需要執行下面3條命令即可:
- ./configure -prefix=/usr/local/ffmpeg -enable-debug=3
- make -j 4
- make install
接下來我們分別執行這3條語句:
- 執行./configure --prefix=/usr/local/ffmpeg --enable-debug=3 一般我們默認安裝在/usr/local/ffmpeg路徑下,這個路徑可以自由設定,這里我們需要開啟debug功能,后面要用到
我們下看看我們下載好的源碼目錄
你也可以使用./configure --help來查看怎么配置
會打印如下所有選項:
上面包括了很多配置參數,隨著我們對ffmpeg的深入,我們也會慢慢了解這些配置參數,剛開始我們只需要知道我們關心的就好了。
例如我們不記得了禁止編譯static怎么寫的,我們這樣查詢一下:
同樣我們可以查詢一下share相關的
這里我設置configure時禁止編譯靜態庫,開啟動態庫,如下:
執行
輸入上面命令后回車,會等待一段時間,這個時候腳本在查詢系統所有匹配的庫,如果有不匹配的會有提示,如下圖,我的配置會報一個錯誤:
由于我的電腦沒有安裝yasm庫,所以需要先安裝一下:安裝yasm編譯器。安裝方法如下:
- 下載:yasm的下載鏈接
- 解壓:把下載下來的壓縮包進行解壓
- 切換路徑: cd yasm-1.3.0
- 執行配置: ./configure
- 編譯:make
- 安裝:make install(提示:Permission denied,就執行sudo make install)
下面我們下來安裝yasm編譯器 (1)下載:yasm的下載鏈接 如果上面的鏈接下載比較慢,可以從我的百度云盤下載: 鏈接:pan.baidu.com/s/1oGMcX4HY… 密碼:m1k2
相關學習資料推薦,點擊下方鏈接免費報名,先碼住不迷路~】
音視頻免費學習地址:FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發
【免費分享】音視頻學習資料包、大廠面試題、技術視頻和學習路線圖,資料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以點擊788280672加群免費領取~
(2) 解壓,這里需要用到本篇博客開篇的準備知識的解壓命令tar -zxvf yasm-1.3.0.tar
(3)切換路徑:cd yasm-1.3.0
(4)執行配置:./configure
(5)編譯:make
(6)安裝:make install(提示:Permission denied,就執行sudo make install)
安裝了yasm編譯器后,我們從新運行一下configure配置:
如果沒有報錯,則會打印了下面信息:
這樣我們已經成功配置了FFmpeg,接下來執行編譯
- 執行make -j 4 這里命令的意思是增加4個內核,并行編譯,這樣提高編譯速度 執行make命令后,接下來需要等待比較長的時間等編譯完成,需要耐心
增加權限后,就可以安裝成功了。
這樣就成功安裝到了/usr/local/ffmpeg 目錄下面了,我們切換到這個目錄查看一下
我們可以看到有四個子目錄:bin, include, lib, share
- bin目錄:存放所有ffmpeg的工具庫
- include目錄: 存放ffmpeg庫的所有頭文件
- lib目錄:ffmepg生成的動態庫或靜態庫
- share目錄:存放文檔相關內容和一些demo實例
我們接下來可以進入bin目錄執行命令:
正常會有三個子目錄,由于我這里沒有安裝ffplay所以少了一個ffplay這是為什么呢?
因為ffplay實際上是客戶端ffplay.c的C程序編譯出來的,該ffplay.c需要依賴avdevice模塊,而avdevice模塊使用了sdl的API,如果你的PC上沒有sdl(1.x版本,最常用的是1.2.0版本),那么ffplay就會編譯不出來了,所以要想編譯出命令行工具ffplay,首先的編譯基礎庫 sdl
- Mac OS 安裝sdl 庫
如果沒有安裝brew的話,要先安裝Homebrew
等待一段時間,就安裝好了,
然后執行命令:
等待下載并且安裝完畢之后,重新執行上述FFmpeg的配置和安裝步驟,待make install結束之后,再去bin目錄下就可以找到命令行工具ffplay了。
- 安裝完成之后接下來一個很重要的事情就是配置環境變量,如果沒有配置,你直接執行ffmpeg命令是會報錯的
如果你配置環境變量,則需要每次帶上全路徑,如下:
接下來配置環境變量
執行命令
在配置文件加入ffmpeg的bin文件夾路徑:
然后輸入:wq保存退出,再執行下面命令讓剛配置的環境變量生效:
在ubuntu操作系統上可以很容易的跟Mac電腦上執行brew install ffmpeg一樣可以一行命令執行 通過執行apt 安裝如下:
這個的弊端也是無法定制化,如果要定制化還是要手動編譯源碼安裝
安裝完成后,我們可以執行ffmpeg -version測試是否安裝成功
Centos 操作系統下安裝
- 需安裝Nux Dextop Yum 源, 由于CentOS沒有官方FFmpeg rpm軟件包。但是,我們可以使用第三方YUM源(Nux Dextop)完成此工作。
CentOS 7下:
然后
- 官網下載:ffmpeg.org/download.ht… 這里下載最新版本
- 解壓安裝包
跟上面mac源碼安裝類似,先進行configure配置,配置過程可能報錯,如報下面錯誤:
則說明yasm編譯器沒有安裝或者太老了,需要先安裝新的yasm匯編器。可以使用--disable-yasm禁用這個選項編譯,yasm是一款匯編器,并且是完全重寫了nasm的匯編環境,接收nasm和gas語法,支持x86和amd64指令集,所以這里安裝一下yasm即可
- Linux下安裝yasm 跟Mac下安裝相似,都是先下載源碼,然后配置,編譯,安裝
官網下載:yasm.tortall.net/Download.ht…下載后解壓,安裝
安裝成功后,還是和mac安裝ffmpeg一樣,需要重新配置FFmpeg:
/opt/ffmpeg 是配置的安裝目錄,可以自己配置路徑
- 然后make進行編譯
安裝
make install會把ffmpeg相關執行程序、頭文件、lib庫安裝在/opt/ffmpeg/下
- 安裝完成后可以進入/opt/ffmpeg/查看
發現有bin,include,lib,share這4個目錄bin是ffmpeg主程序二進制目錄 include是C/C++頭文件目錄 lib是編譯好的庫文件目錄 share是文檔目錄
- 我們可以進入bin目錄執行./ffmpeg -version, 查看當前版本的詳細信息 可能會報錯:
原因是lib目錄未加載到鏈接到系統庫中 系統ld目錄列表在/etc/ld.so.conf中,打開文件會發現, 里面引用了/etc/ld.so.conf.d/下面所有的.conf文件,比如mariadb-x86_64.conf解決上面報錯,需要創建一個文件并寫入lib路徑即可執行命令:vim /etc/ld.so.conf.d/ffmpeg.conf
- 然后添加一行內容:/opt/ffmpeg/lib
- 之后保存并退出,然后執行 ldconfig使配置生效,
- 再次執行./ffmpeg -version 顯示就正常了
正常會打印如下信息
接下來需要配置環境變量 使用命令vim /etc/profile:編輯寫入↓
然后執行命令source /etc/profile:使修改后的配置文件生效
- 檢測ffmpeg是否安裝成功 執行which ffmpeg 查看安裝路徑
3.3 在Window下編譯安裝FFmpeg
3.3.1 Window編譯工具介紹
window下編譯FFmpeg相對復雜一下,需要借助Cygwin或MinGW來編譯,可以通過MinGW+ MSYS2 或者 VS+ MSYS2來編譯ffmpegCygwin(Cygnus Windows)實際上相當于在window安裝了一個軟件來模擬linux系統MinGW(Minimalist GNU for Windows)是完全模仿了linux的編譯工具,相對于將linux的編譯工具移植到 window,基于window系統api進行編譯,需要提供額外的工具配合使用VS就是 window開發很熟悉了MSYS2(Minimal SYStem 2)3.3.2 Window如何編譯ffmpegWindow編譯ffmpeg主要有下面三種方式
- Cygwin直接安裝使用: Cygwin編譯跟linux編譯一模一樣的,Cygwin完全就像一個虛擬機模擬了linux操作系統。Cygwin實際上是做了一層linux的api到windows 的api的轉換。
但是這樣編譯出來的ffmpeg的exe程序需要掛在一個Cygwin.dll庫才可以運行,因為它有一層轉換,所以性能對比原始的window程序有一些損耗。
- MinGW + MSYS2 : 官方推薦的方式,這種編譯出來的就是原生的window程序,不需要和Cygwin一樣需要加載一個動態庫了。
它的編譯方式實際上和linux是一致的
- VS + MSYS2: 這種就是采用類linux的編譯,只是把里面的工具鏈換成了VS的工具,但是這種方式生成ffplay比較麻煩。
所以一般都選擇MinGW + MSYS2 : 官方推薦的方式3.3.2.1 Cygwin 編譯FFmpeg
在windows下安裝 ffmpeg 的最好方式就是使用 Cygwin 。 Cygwin 是什么呢?簡單的說,就是在 Windows上裝了一個Linux模擬器。然后你可以在這個模擬器上按照Linux的方式操作 Windows系統。因此,Windows安裝了 Cygwin 之后,你就把它當Linux用就可以了。首先,到 Cygwin 官網下載 Cygwin 的可執行程序 setup-x86_64.exe。當然,它是 64位的,如果你現在還在用 32位的,那請在 Cygwin官網上找 32位對應的版本。
- 首先要安裝Cygwin
下載軟件后開始安裝
選擇系統的網絡連接方式,跟虛擬機類似
選擇鏡像安裝
選擇鏡像的對應包
然后選擇我們需要的安裝包安裝,我這里選擇 Debug, Devel這兩個必須的
此外還需要選擇網絡
還需要添加wget
此外我們選擇一個sdl的庫
為了后面編譯出ffplay庫,最好把下面的紅框里面都選上
以上就是一個最小的安裝了
需要確保安裝了下面這些工具
- gcc
- g++
- make
- cmake
- automake
- gdb
- nasm
- yasm
- wget
選好之后繼續下一步
等待安裝完成
然后點擊圖標打開
可以看到一個linux的控制臺,如果在window下學習linux命名,就可以在這個控制臺練習
這樣你就可以敲入linux命令了
如果我們要訪問window下的D:盤,可以像下面這樣訪問:
- 然后要安裝apt-cyg: 這個實際就是Cygwin下的apt工具
apt-cyg與 Ubuntu系統中的 apt一樣特別好用,而且使用的方式與 apt也是一個樣子的。
我們可以在Cygwin下執行下面的命令就好了
然后執行命令
安裝好apt-cyg后,就可以用 apt-cyg instal xxx這樣來安裝了我們的包了跟Mac下使用brew install xxx一樣爽歪歪。
接下來安裝pkg-config工具 在Windows系統下,一般不會默認安裝該工具,所以在Windows下做實驗的同學大都會遇到明明已經裝了某個庫,但仍然找不到該庫的情況。其原因就是沒有安裝 pkg-config這個工具。 首先確認是否已經將 pkg-config工具安裝好了。可以執行下面的命令:
如果提示沒有安裝,則先將該工具安裝好,安裝命令如下:
- 安裝好了上面的工具后,接下來就是下載ffmpeg源碼了,從官網:ffmpeg.org/download.ht…
然后就是安裝了,安裝方式跟mac,linux一樣
- 輸入命令:./configure --prefix=/usr/local/ffmpeg 配置環境
- 執行命令:make -j 4 編譯源碼
- 執行命令:make install 安裝
下載源碼通過http直接下載或者git下載
這里我使用git方式,先創建一個ffmpeg目錄,然后Git clone代碼
下載好源碼后,進入目錄,然后配置configure
配置完成報告如下:
此時make文件已經生成好了,我們輸入make -j 4執行編譯
這個編譯過程比較長,耐心等待
最好執行make install 安裝
安裝好之后,我們可以進入/usr/local/ffmpeg目錄查看
我們可以看到四個目錄:bin,include,lib,share接下來,我們進入bin目錄:
可以看到三個exe文件,ffmpeg.exe, ffplayer.exe, ffprobe.exe
我們可以執行ffmpeg.exe
- 接下來也需要配置環境變量,不然每次要帶全路徑
輸入命令:vi ~/.bashrc 編輯配置文件
按快捷鍵“Shift+G”跳到文件末尾,在配置文件末尾插入:export PATH=/usr/local/ffmpeg/bin:$PATH
然后按esc鍵,退出編輯模式,輸入:wq 保存退出
然后,我們輸入source ~/.bashrc使配置文件生效
最好我們輸入env | grep PATH來測試配置文件是否生效
配置好環境變量后,我們直接輸入ffmpeg.exe就可以找到了
雖然有了apt-cyg這個神器,但它目前只能安裝Linux下的一些常用命令,像我們編譯時需要的 x264, x265這些庫它是無法找到的。
所以這些庫需要我們自己來編譯
- 編譯yasm
- 下載源碼:wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
- 解壓:tar zxvf yasm-1.3.0.tar.gz
- 切換到目錄:cd yasm-1.3.0
- 配置選項:./configure
- 編譯安裝:make && sudo make install
- 編譯fdk-aac
- 下載源碼:wget https://jaist.dl.sourceforge.net/project/opencore-amr/fdk-aac/fdk-aac-0.1.6.tar.gz
- 解壓:tar xvf fdk-aac-0.1.6.tar.gz
- 切換到目錄: cd fdk-aac-0.1.6
- 配置選項:./configure
- 編譯安裝:make && sudo make install
- 安裝lame
- 下載源碼:wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
- 解壓:tar -xzf lame-3.99.5.tar.gz
- 切換到目錄:cd lame-3.99.5
- 配置選項:./configure
- 編譯安裝:make && sudo make install
注:編譯lame可能遇到的問題:
- 問題一: 在Cygwin下安裝 lame的時候遇到執行 ./configure 失敗的情況。如 "error: cannot guess build type; you must sepcify one",對這個問題可以通過下面的步驟來解決: 安裝automake。可以通過 which automake來確認automake 是否已經安裝。如果沒有安裝,可以通使用 apt-cyg install automake進行安裝。 確認automake當前版本。可執行automake --version獲取當前automake的版本號。 將 lame目錄下的 config.guess文件替換為 /usr/share/automake-version下的config.guess 文件。 此時,再執行./configure進就可以下成功了。
- 問題二: make時出現 "error: '_O_BINARY' undeclared (first use in this function)"的錯誤,解決辦法如下: 打開出錯文件 vi ./frontend/lametime.c 將下面這段代碼注釋掉 /* #elif defined __CYGWIN setmod(fileno(fp), _O_BINARY); */ 再執行make就可以成功了。
- 安裝nasm
- 下載源碼:wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.gz
- 解壓:tar xvf nasm-2.13.03.tar.gz
- 切換到目錄:cd nasm-2.13.03
- 配置選項:./configure
- 編譯安裝:make && sudo make install
- 安裝x264
- 下載源碼: wget mirror.yandex.ru/mirrors/ftp… bunzip2 last_x264.tar.bz2
- 解壓:tar -vxf last_x264.tar
- 切換到目錄:cd last_x264
- 配置選項:./configure --enable-static --enable-shared --disable-asm --disable-avs
- 編譯安裝: make && sudo make install
- 安裝ffmpeg
- 下載源碼:wget -c https://ffmpeg.org/releases/ffmpeg-4.0.2.tar.bz2
- 解壓:bunzip2 ffmpeg-4.0.2.tar.bz2
- 切換到目錄:cd ffmpeg-4.0.2
- 配置選項:./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-small --arch=x86_64 --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared
- 編譯安裝:make && sudo make install
FFmpeg編譯的問題:
- 問題一:找不到 fdk-aac庫 在編譯ffmpeg時,有可能會報找不到fdk_aac庫的錯誤。此時我們應該設置一下 PKG_CONFIG_PATH,指定ffmpeg到哪里找我們安裝好的庫。 上面通過源碼安裝的庫,默認地址為/usr/local/lib下面,當然你可以通過./configure 中的–prefix參數改變這個目錄。 如果使用默認路徑的話,可以通過下面的命令來指定編譯時去哪里找庫export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 如果你改變了默認路徑,則將后面的 /usr/local/lib/pkgconfig修改為你變更后的路徑/xxx/.../lib/pkgconfig即可。
參考:李超大神的博客和視頻:www.imooc.com/article/247…原文 鏈接:https://juejin.cn/post/6844904160739999757