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