1 编译安装FFmpeg+libx264

1.1 安装yasm或者nasm

libx264需要yasm或者nasm进行编译,所以需要安装yasm或者nasm的对应版本,一般是nasm 2.13。

安装yasm

sudo apt-get install yasm

安装nasm

sudo apt-get install nasm

1.2 安装pkg-config

如果未安装pkg-config时,在使用ffmpeg的编译文件./configure编译ffmpge时会出现

WARNING: pkg-config not found, library detection may fail.
WARNING: using libx264 without pkg-config

警告,这个时候需要使用

sudo apt install pkg-config

安装pkg-config,重新编译ffmpeg即可消除这个警告。

至于pkg-config的作用就是为了返回已安装库的头文件,库文件等信息,方便其他库依赖当前库时可以很快的找到这个库。比如后续在OpenCV中使用读取视频cv::VideoCapture就需要依赖ffmpeg的库,而OpenCV的库寻找就是通过pkg-config的方式寻找ffmpeg库。

具体的pkg-config的作用可参考:

1.3 编译安装libx264

使用以下命令编译安装libx264

git clone http://git.videolan.org/git/x264.git
cd x264/
./configure --enable-shared
make
sudo make install

1.4 ffmpeg编译安装

1.4.1 下载ffmpeg

在官网下载ffmpge,下载地址为:http://ffmpeg.org/download.html#releases

从这个链接获取更老的版本:http://ffmpeg.org/olddownload.html

往下拉,找到自己需要的ffmpeg版本,这里以ffmpge4.4.1版本为例

Ubuntu编译安装FFmpeg+libx264以及编译+安装Opencv+FFmpeg保姆教程-StubbornHuang Blog

如果是命令行直接使用

wget http://ffmpeg.org/releases/ffmpeg-4.4.1.tar.xz

下载到本地。

或者可以从这个网站获取ffmpeg所有版本的下载链接:https://www.johnvansickle.com/ffmpeg/old-releases/

Ubuntu编译安装FFmpeg+libx264以及编译+安装Opencv+FFmpeg保姆教程-StubbornHuang Blog

1.4.2 解压缩

xz -d ffmpeg-4.4-arm64-static.tar.xz
tar xvf ffmpeg-4.4-arm64-static.tar

1.4.3 编译安装

ffmpeg的编译工具./configure的详细参数请参考:https://www.stubbornhuang.com/2053/

在解压缩的目录下使用以下命令编译ffmpeg

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-libx264 --enable-gpl --pkgconfigdir=/usr/share/pkgconfig
make
sudo make install

根据编译工具./configure的详细参数,以上命令的意义为设置ffmpeg的安装路径为/usr/local/ffmpeg,构建ffmpge动态库,不够减ffmpeg静态库,不构建ffmpeg文档,启用x264编解码。另外这里设置了参数--pkgconfigdir,在安装的时候将ffmpeg的pkgconfig的相关文件拷贝到路径/usr/share/pkgconfig,设置这个参数的目的主要是为了在后续编译OpenCV+ffmpeg的时候可以找到ffmpge库的相关信息。这里可参考:https://www.cnblogs.com/haiyang21/p/11029303.html

1.4.4 配置ffmpeg环境变量

配置ffmpeg动态库路径

sudo nano /etc/ld.so.conf.d/ffmpeg.conf
在ffmpeg.conf文件中添加一行:/usr/local/ffmpeg/lib

# 生效
sudo ldconfig

配置ffmpeg系统环境变量

sudo nano /etc/profile

# 在该文件中增加一行:
export PATH=$PATH:/usr/local/ffmpeg/bin

# 生效
source /etc/profile

拷贝ffmpge pkgconfig文件到系统的目录下

sudo cp /usr/local/ffmpeg/lib/pkgconfig/*  /usr/share/pkgconfig

或者

sudo cp /usr/local/ffmpeg/lib/pkgconfig/*  /usr/lib

都可以。

1.4.5 测试ffmpeg是否安装成功

使用

ffmpge --version

如果可以正确打印出信息,则说明ffmpeg安装成功。

2 编译安装Opencv+FFmpeg

2.1 下载OpenCV

官网下载地址:https://opencv.org/releases/

这里以OpenCV3.4.10为例

Ubuntu编译安装FFmpeg+libx264以及编译+安装Opencv+FFmpeg保姆教程-StubbornHuang Blog

如果是命令行则使用

wget https://github.com/opencv/opencv/archive/3.4.10.zip

将源码下载到本地。

2.2 编译OpenCV

2.2.1 解压缩

unzip ./3.4.10.zip

2.2.2 编译OpenCV

解压缩完成之后,使用以下命令

mkdir bin
cd bin
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_FFMPEG=ON -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF ..
make
sudo make install

在解压缩文件夹下创建文件夹bin,进入新建的bin文件夹下,使用cmake命令编译。上述的cmake命令设置编译模式为Release,设置OpenCV的安装路径为/usr/loacl,设置启用ffmpeg混编,设置不编译example,设置不编译test。

安装完成之后的include的路径为:

/usr/local/include

lib路径为:

/usr/local/lib

2.2.3 OpenCV编译时找不到ffmpeg

如果前面ffmpeg没有安装成功、动态库没配置、环境变量没配置、以及pkgconfig拷贝到指定的系统目录,在进行opencv+ffmpge混编时,使用cmake生成makefiles文件时会出现如下ffmpeg库没有被找到的问题

--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      NO
--       avcodec:                   NO
--       avformat:                  NO
--       avutil:                    NO
--       swscale:                   NO
--       avresample:                NO
--     GStreamer:                   NO
--     libv4l/libv4l2:              NO
--     v4l/v4l2:                    linux/videodev2.h

那么这个时候需要着重检查是否正确的将ffmpge的pkgconfig文件正确的拷贝到了/usr/share/pkgconfig目录下,因为OpenCV是使用pkg-lib 去check 的,需要将ffmpeg的一些pc文件复制一份到 /usr/share/pkgconfig,假设ffmpge的安装路径为/usr/local/ffmpge,则使用以下命令进行拷贝:

sudo cp /usr/local/ffmpeg/lib/pkgconfig/* /usr/share/pkgconfig

然后仔细检查ffmpeg的环境变量是否设置正确,以及动态库路径是否设置正确。设置完成之后,重新cmake即可,如果看到

--   Video I/O:
--     DC1394:                      NO
--     FFMPEG:                      Yes
--       avcodec:                   Yes
--       avformat:                  Yes
--       avutil:                    Yes
--       swscale:                   Yes
--       avresample:                Yes
--     GStreamer:                   NO
--     libv4l/libv4l2:              NO
--     v4l/v4l2:                    linux/videodev2.h

则说明成功找到了ffmpeg,即可使用make进行编译。

2.2.4 配置opencv环境变量

配置opencv动态库路径

sudo nano /etc/ld.so.conf.d/opencv.conf
在opencv.conf文件中添加一行:/usr/local/opencv3/lib64/

# 生效
sudo ldconfig -v

拷贝opencv pkgconfig文件到系统的目录下

sudo cp /usr/local/opencv3/lib64/pkgconfig/opencv.pc /usr/share/pkgconfig/

2.2.5 测试opencv是否安装成功

pkg-config --modversion opencv

参考链接