一材失、編譯
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 里找到摊趾。