CentOS 上編譯 FFmpeg (264 & 265 & aac & opus)

一材失、編譯

1.1 Reference

官網(wǎng):https://ffmpeg.org/
Guide: https://trac.ffmpeg.org/wiki

1.2 FFmpeg Source Code Structure

? libavutil: 一些簡(jiǎn)化編程的函數(shù)的庫(kù),包括 隨機(jī)數(shù)的生成肄方、數(shù)據(jù)結(jié)構(gòu)疤剑、數(shù)學(xué)公式,以及多媒體核心組件
? libavcodec: audio/video codecs 的編解碼庫(kù)
? libavformat: 各種多媒體容器格式的 demuxers & muxers 的庫(kù)
? libavdevice: 媒體輸入輸出設(shè)備與各種常見媒體軟件框架之間的交互的庫(kù)
? libavfilter: 音頻阳似、視頻骚勘、字幕的濾鏡處理框架庫(kù)
? libswscale: 執(zhí)行高優(yōu)化的圖像縮放、色域或像素格式轉(zhuǎn)換 等功能的庫(kù)
? libswresample: 執(zhí)行高優(yōu)化的音頻 重采樣障般、重矩陣调鲸、和采樣格式轉(zhuǎn)換 等功能的庫(kù)
? libavcodec provides implementation of a wider range of codecs.
? libavformat implements streaming protocols, container formats and basic I/O access.
? libavutil includes hashers, decompressors and miscellaneous utility functions.
? libavfilter provides a mean to alter decoded Audio and Video through chain of filters.
? libavdevice provides an abstraction to access capture and playback devices.
? libswresample implements audio mixing and resampling routines.
? libswscale implements color conversion and scaling routines.

1.3 Pre-install FFmpeg

  • 創(chuàng)建一個(gè)用于學(xué)習(xí) FFmpeg 的目錄, say $HOME/learning
cd $HOME/learning
# ffmpeg_sources 放置所有下載的源碼
mkdir ffmpeg_sources 
# ffmpeg_build 用于生成文件和libraries
mkdir ffmpeg_build 
# bin 放置所有生成的二進(jìn)制文件,包括 ffmpeg, ffprobe, x264, x265
mkdir bin
  • 安裝基礎(chǔ)依賴
sudo yum -y install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
  • NASM
    組裝器挽荡,加速構(gòu)建
cd ffmpeg_sources
curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2
tar xjvf nasm-2.15.05.tar.bz2
cd nasm-2.15.05
sudo sh autogen.sh
./configure --prefix="$HOME/learning/ffmpeg_build" --bindir="$HOME/learning/bin"
make -j4
sudo make install
  • YASM
    用于支持 FFmpeg 中的匯編優(yōu)化
cd ffmpeg_sources
curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="$HOME/learning/ffmpeg_build" --bindir="$HOME/learning/bin"
make -j4
sudo make install
  • glib(坑多藐石,建議跳過(guò)直接安裝 pkgconfig)
    用于編譯 pkgconfig,安裝過(guò)程比較曲折定拟,建議編譯 pkgconfig 可以使用內(nèi)置 glib 于微,就可以跳過(guò)這一步
cd ffmpeg_sources
curl -O -L http://ftp.gnome.org/pub/GNOME/sources/glib/2.54/glib-2.54.3.tar.xz
xz -d glib-2.54.3.tar.xz
tar -xvf glib-2.54.3.tar
cd glib-2.54.3
./configure --enable-libmount=no
sudo make -j4
sudo make install

注:./configure 過(guò)程中遇到的問題,參考 https://blog.csdn.net/windeal3203/article/details/76608248
若遇到 “No package 'libffi' found”

sudo yum -y install libffi-devel

若遇到 “No package 'libpcre' found”

curl -O -L https://sourceforge.net/projects/pcre/files/pcre/8.41/pcre-8.41.zip
unzip pcre-8.41.zip
cd pcre-8.41
./configure --enable-utf8 --enable-unicode-properties
sudo make -j4
sudo make install

若遇到“error: *** Could not find libmount”

sudo yum -y install libmount-devel.x86_64
# 如果安裝成功了還是提示無(wú)法找到 libmount青自,configure glib 的時(shí)候增加 --enable-libmount=no 選項(xiàng)株依,影響未知
  • pkgconfig
    用于檢測(cè)可以編進(jìn) FFmpeg 的 libraries
cd ffmpeg_sources
curl -O -L https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz
tar xzvf pkg-config-0.29.2.tar.gz
cd pkg-config-0.29.2
./configure --with-internal-glib
sudo make -j4
sudo make install

若遇到“error: Either a previously installed pkg-config or "glib-2.0 >= 2.16" could not be found”,./configure 增加 --with-internal-glib 選項(xiàng)延窜,使用用內(nèi)置 glib

  • libx264
    視頻 H264 編碼器恋腕,要求 ffmpeg 編譯的 configure 選項(xiàng)有 --enable-gpl --enable-libx264
cd ffmpeg_sources
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PKG_CONFIG_PATH="$HOME/learning/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/learning/ffmpeg_build" --bindir="$HOME/learning/bin" --enable-static
make -j4
sudo make install
  • libx265
    視頻 H265 編碼器,要求 ffmpeg 編譯的 configure 選項(xiàng)有 --enable-gpl --enable-libx265
cd ffmpeg_sources
git clone https://bitbucket.org/multicoreware/x265_git --depth 1
cd ./x265_git/build/linux
sudo cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/learning/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source
make -j4
sudo make install
  • libfdk_aac
    AAC 音頻編碼器逆瑞,要求 ffmpeg 編譯的 configure 選項(xiàng)有 --enable-libfdk_aac 和 --enable-nonfree
cd ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
# git 拉代碼特別慢的情況下荠藤,可以直接下載 sourceforge 的打包版本
# wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz
# tar xzvf fdk-aac-2.0.1.tar.gz
# cd fdk-aac-2.0.1
autoreconf -fiv
./configure --prefix="$HOME/learning/ffmpeg_build" --disable-shared
make -j4
sudo make install
  • libopus
    OPUS 音頻編碼器,要求 ffmpeg 編譯的 configure 選項(xiàng)有 --enable-libopus
cd ffmpeg_sources
curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
tar xzvf opus-1.3.1.tar.gz
cd opus-1.3.1
./configure --prefix="$HOME/learning/ffmpeg_build" --disable-shared
make -j4
sudo make install

1.4 Compile FFmpeg with x264, x265, aac and opus

cd ffmpeg_sources
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/learning/bin:$PATH" PKG_CONFIG_PATH="$HOME/learning/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/learning/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/learning/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/learning/ffmpeg_build/lib" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="$HOME/learning/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libopus \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
make -j4
sudo make install
hash -d ffmpeg

若 ./configure 遇到:ERROR: x265 not found using pkg-config获高,查看 ffbuild/config.log 發(fā)現(xiàn)是"Perhaps you should add the directory containing `x265.pc'"問題時(shí)哈肖,在 $HOME/learning/bin/ffmpeg_build/lib/pkgconfig 路徑下自己寫一個(gè) x265.pc,內(nèi)容如下:

prefix=$HOME/learning/ffmpeg_build
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: x265
Description: H.265/HEVC encoder library
Version: 3.5
Libs: -L${libdir} -lx265
Libs.private: -lstdc++ -lm -ldl -lpthread
Cflags: -I${includedir}

再執(zhí)行 ./configure 即可念秧。
至此淤井,支持視頻 264&265 音頻 opus&aac 編解碼的 ffmpeg & ffprobe 就編譯完成了,可以在 $HOME/learning/bin 里找到摊趾。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末币狠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子砾层,更是在濱河造成了極大的恐慌漩绵,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢为,死亡現(xiàn)場(chǎng)離奇詭異渐行,居然都是意外死亡轰坊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門祟印,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肴沫,“玉大人,你說(shuō)我怎么就攤上這事蕴忆〔遥” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵套鹅,是天一觀的道長(zhǎng)站蝠。 經(jīng)常有香客問我,道長(zhǎng)卓鹿,這世上最難降的妖魔是什么菱魔? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮吟孙,結(jié)果婚禮上澜倦,老公的妹妹穿的比我還像新娘。我一直安慰自己杰妓,他們只是感情好藻治,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巷挥,像睡著了一般桩卵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倍宾,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天雏节,我揣著相機(jī)與錄音,去河邊找鬼凿宾。 笑死矾屯,一個(gè)胖子當(dāng)著我的面吹牛兼蕊,可吹牛的內(nèi)容都是我干的初厚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼孙技,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼产禾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起牵啦,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亚情,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后哈雏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楞件,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衫生,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了土浸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罪针。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖黄伊,靈堂內(nèi)的尸體忽然破棺而出泪酱,到底是詐尸還是另有隱情,我是刑警寧澤还最,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布墓阀,位于F島的核電站,受9級(jí)特大地震影響拓轻,放射性物質(zhì)發(fā)生泄漏斯撮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一扶叉、第九天 我趴在偏房一處隱蔽的房頂上張望吮成。 院中可真熱鬧,春花似錦辜梳、人聲如沸粱甫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)茶宵。三九已至,卻和暖如春宗挥,著一層夾襖步出監(jiān)牢的瞬間乌庶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工契耿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞒大,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓搪桂,卻偏偏與公主長(zhǎng)得像透敌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子踢械,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容