2021-10-22 14:07:04 +08:00
|
|
|
|
# 编译FFmpeg
|
2021-10-21 10:51:00 +08:00
|
|
|
|
|
2021-10-22 14:07:04 +08:00
|
|
|
|
省略下载或同步源代码步骤,需要的源代码内容见[FFmpeg官方编译Wiki](https://trac.ffmpeg.org/wiki/CompilationGuide) 。为了后面编译动态库,编译时需要加上`-fPIC`参数。
|
2021-10-21 10:51:00 +08:00
|
|
|
|
|
|
|
|
|
## 编译需要的容器
|
|
|
|
|
|
|
|
|
|
```commandline
|
|
|
|
|
docker run -it -d --privileged=true --name centos7 -p 2333:22 centos:7 /usr/sbin/init
|
|
|
|
|
docker exec -it centos7 bash
|
|
|
|
|
```
|
|
|
|
|
|
2021-10-22 14:07:04 +08:00
|
|
|
|
## 编译
|
|
|
|
|
|
2021-10-21 10:51:00 +08:00
|
|
|
|
```shell
|
|
|
|
|
# 编译需要的环境
|
|
|
|
|
yum install autoconf automake bzip2 bzip2-devel freetype-devel gcc gcc-c++ git libtool make pkgconfig zlib-devel
|
|
|
|
|
|
|
|
|
|
# 解压源码
|
|
|
|
|
tar xzvf ffmpeg_sources.tar.gz
|
|
|
|
|
cd ~/ffmpeg_sources
|
|
|
|
|
|
2021-10-22 14:07:04 +08:00
|
|
|
|
# 解压
|
2021-10-21 10:51:00 +08:00
|
|
|
|
tar xjvf nasm-2.15.05.tar.bz2
|
|
|
|
|
tar xzvf yasm-1.3.0.tar.gz
|
|
|
|
|
tar xzvf lame-3.100.tar.gz
|
|
|
|
|
tar xzvf opus-1.3.1.tar.gz
|
2021-10-22 14:07:04 +08:00
|
|
|
|
tar zxvf libvpx.tar.gz -m # -m 强制时间同步
|
2021-10-21 10:51:00 +08:00
|
|
|
|
tar zxvf ffmpeg-4.4.tar.gz
|
|
|
|
|
tar zxvf x264-stable.tar.gz
|
|
|
|
|
mv x264-stable x264
|
|
|
|
|
tar zxvf x265_git.tar.gz
|
|
|
|
|
tar zxvf fdk-aac.tar.gz
|
|
|
|
|
|
2021-10-22 14:07:04 +08:00
|
|
|
|
# 安装cmake
|
2021-10-21 10:51:00 +08:00
|
|
|
|
./cmake-3.21.3-linux-x86_64.sh --prefix=/usr/local
|
|
|
|
|
mv /usr/local/cmake-3.21.3-linux-x86_64 /usr/local/cmake
|
2021-10-22 14:07:04 +08:00
|
|
|
|
|
|
|
|
|
# 添加编译需要的环境变量
|
2021-10-21 10:51:00 +08:00
|
|
|
|
echo "export PATH=\$PATH:/usr/local/cmake/bin" >> ~/.bashrc
|
2021-10-22 14:07:04 +08:00
|
|
|
|
echo "export PATH=\$HOME/bin:\$PATH" >> ~/.bashrc
|
|
|
|
|
echo "export PKG_CONFIG_PATH=\$HOME/ffmpeg_build/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc
|
2021-10-21 10:51:00 +08:00
|
|
|
|
source ~/.bashrc
|
|
|
|
|
|
|
|
|
|
# 编译nasm
|
|
|
|
|
cd ~/ffmpeg_sources/nasm-2.15.05
|
|
|
|
|
./autogen.sh
|
2021-10-21 17:36:10 +08:00
|
|
|
|
CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译yasm
|
|
|
|
|
cd ~/ffmpeg_sources/yasm-1.3.0
|
2021-10-21 17:36:10 +08:00
|
|
|
|
CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin"
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译x264
|
|
|
|
|
cd ~/ffmpeg_sources/x264
|
2021-10-22 14:07:04 +08:00
|
|
|
|
./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --extra-cflags=-fPIC
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译x265
|
|
|
|
|
cd ~/ffmpeg_sources/x265_git/build/linux
|
2021-10-21 17:36:10 +08:00
|
|
|
|
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off -DCMAKE_C_FLAGS=-fPIC -DCMAKE_CXX_FLAGS=-fPIC ../../source
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译fdk-aac
|
|
|
|
|
cd ~/ffmpeg_sources/fdk-aac
|
|
|
|
|
autoreconf -fiv
|
2021-10-21 17:36:10 +08:00
|
|
|
|
CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译lame
|
|
|
|
|
cd ~/ffmpeg_sources/lame-3.100
|
2021-10-21 17:36:10 +08:00
|
|
|
|
CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译opus
|
|
|
|
|
cd ~/ffmpeg_sources/opus-1.3.1
|
2021-10-21 17:36:10 +08:00
|
|
|
|
CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$HOME/ffmpeg_build" --disable-shared
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译vpx
|
|
|
|
|
cd ~/ffmpeg_sources/libvpx
|
2021-10-21 17:36:10 +08:00
|
|
|
|
./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm --extra-cflags=-fPIC --extra-cxxflags=-fPIC
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
|
|
|
|
|
|
|
|
|
# 编译ffmpeg
|
2021-10-21 17:36:10 +08:00
|
|
|
|
cd ~/ffmpeg_sources/ffmpeg-4.4
|
2021-10-22 14:07:04 +08:00
|
|
|
|
./configure \
|
2021-10-21 10:51:00 +08:00
|
|
|
|
--prefix="$HOME/ffmpeg_build" \
|
|
|
|
|
--pkg-config-flags="--static" \
|
2021-10-21 17:36:10 +08:00
|
|
|
|
--extra-cflags="-I$HOME/ffmpeg_build/include -fPIC" \
|
|
|
|
|
--extra-cxxflags="-fPIC" \
|
2021-10-21 10:51:00 +08:00
|
|
|
|
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
|
|
|
|
|
--extra-libs=-lpthread \
|
|
|
|
|
--extra-libs=-lm \
|
|
|
|
|
--bindir="$HOME/bin" \
|
|
|
|
|
--enable-gpl \
|
|
|
|
|
--enable-libfdk_aac \
|
|
|
|
|
--enable-libfreetype \
|
|
|
|
|
--enable-libmp3lame \
|
|
|
|
|
--enable-libopus \
|
|
|
|
|
--enable-libvpx \
|
|
|
|
|
--enable-libx264 \
|
|
|
|
|
--enable-libx265 \
|
|
|
|
|
--enable-nonfree \
|
|
|
|
|
--enable-shared
|
|
|
|
|
make -j6 && make install
|
|
|
|
|
```
|
2021-10-22 14:07:04 +08:00
|
|
|
|
|
|
|
|
|
如果`./configure`时去掉`--enable-shared`参数将会编译静态库。但使用FFmpeg编译的静态库的时候需要注意:**链接动态库**时要加上`-Wl,-Bsymbolic`选项,这个参数告诉链接器遇到重名符号时优先链接本地符号[^1]。否则将会出现错误:
|
|
|
|
|
|
|
|
|
|
```text
|
|
|
|
|
libavcodec.a(vc1dsp_mmx.o): relocation R_X86_64_PC32 against symbol `ff_pw_9' can not be used when making a shared object; recompile with -fPIC
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
# 编译OpenCV[^2]
|
2021-10-21 10:51:00 +08:00
|
|
|
|
|
|
|
|
|
```shell
|
2021-10-22 14:07:04 +08:00
|
|
|
|
yum install wget unzip
|
|
|
|
|
wget https://github.com/opencv/opencv/archive/4.5.3.zip
|
|
|
|
|
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.3.zip -O 4.5.3_contrib.zip
|
|
|
|
|
unzip 4.5.3.zip
|
|
|
|
|
unzip 4.5.3_contrib.zip
|
|
|
|
|
cp -frap opencv_contrib-4.5.3/ opencv-4.5.3/
|
|
|
|
|
cd opencv-4.5.3/
|
2021-10-21 10:51:00 +08:00
|
|
|
|
mkdir build && cd build
|
2021-10-22 14:07:04 +08:00
|
|
|
|
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF -DWITH_FFMPEG=ON -DCMAKE_SHARED_LINKER_FLAGS=-Wl,-Bsymbolic ../
|
2021-10-21 10:51:00 +08:00
|
|
|
|
make -j6 && make install
|
2021-10-21 13:47:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2021-10-22 14:07:04 +08:00
|
|
|
|
OpenCV 4.5.3 的FFmpeg的视频模块需要修改一处源代码,将OpenCV源码目录下的`modules/videoio/src/cap_ffmpeg_hw.hpp`文件939行`s_stream_ = std::istringstream(accel_list);`修改为`s_stream_.str(accel_list);`。
|
|
|
|
|
|
|
|
|
|
[^1]: 编译安装ffmpeg+OpenCV的时候的注意点 https://www.licc.tech/article?id=78
|
|
|
|
|
|
|
|
|
|
[^2]: Installation in Linux https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
|