Ubuntu编译安装FFmpeg+libx264以及编译+安装Opencv+FFmpeg保姆教程
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的作用可参考:
- https://www.cnblogs.com/sddai/p/10266624.html
- https://blog.csdn.net/DeliaPu/article/details/102843395
1.3 编译安装libx264
使用以下命令编译安装libx264
git clone http://git.videolan.org/git/x264.git
cd x264/
./configure --enable-shared
make
sudo make install
安装之后include路径为
/usr/local/include
安装之后的lib路径为
/usr/local/lib
安装后pkgconfig路径为
/usr/local/lib/pkgconfig
将x264 pkgconfig文件到系统的目录下
sudo cp /usr/local/lib/pkgconfig/x264.pc /usr/lib/pkgconfig
或者
sudo cp /usr/local/lib/pkgconfig/x264.pc /usr/share/pkgconfig
或者修改系统环境变量(推荐方式),之后的ffmpeg或者opencv的pkg文件也安装到目录/usr/local/lib/pkgconfig下,通过这种方式就可以实现pkg的集中管理
vim /etc/profile
#增加下面的行
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
# 生效
source /etc/profile
配置x264动态库环境
nano /etc/ld.so.conf.d/x264.conf
在文件中添加一行:/usr/local/lib
# 生效
sudo ldconfig
1.4 ffmpeg编译安装
1.4.1 下载ffmpeg
在官网下载ffmpge,下载地址为:http://ffmpeg.org/download.html#releases
从这个链接获取更老的版本:http://ffmpeg.org/olddownload.html
或者用这个链接:http://ffmpeg.org/releases/
往下拉,找到自己需要的ffmpeg版本,这里以ffmpge4.4.1版本为例
如果是命令行直接使用
wget -c http://ffmpeg.org/releases/ffmpeg-4.4.1.tar.gz
下载到本地。
或者可以从这个网站获取ffmpeg所有版本的下载链接:https://www.johnvansickle.com/ffmpeg/old-releases/
1.4.2 解压缩
tar xvf ffmpeg-4.4.1.tar.gz
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/local/lib/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
可以使用
configure --help
查看configure的可使用参数的含义,下面列举几个经常用到的:
- --prefix:ffmpeg的安装目录,默认为/usr/local
- --bindir:二进制安装目录,默认为prefix/bin
- --libdir:静态库安装目录,默认为prefix/lib
- --shlibdir:动态库安装目录,默认为系统的动态库目录,也就是LIBDIR变量
- --pkgconfigdir:pkg文件安装目录,默认为LIBDIR/lib,pkg 是用来给第三方软件找到 FFmpeg 静态库,动态库,比如opencv
- --disable-static,--enable-shared,这两个选项分别是 禁止生成静态库 跟 生成动态库。FFmpeg 默认会生成静态库,但是他不能同时生成静态库跟动态库,如果你启动了 --enable-shared,那就只会生成动态库,不会生成静态库。如果你需要同时用到静态库跟动态库,那就需要编译两次
- --enable-small:把 FFmpeg 的体积减少
- --disable-programs:不生成 ffmpeg.exe ,ffplay.exe ,ffprobe.exe 可执行文件。只生成静态库或者动态库。也可以单独指定某个 exe 不生成,例如 --disable-ffplay
- --disable-doc:不编译生成文档,可以节省编译时间
部分选项可看下面的截图:
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 FFMPEG_HOME=/usr/local/ffmpeg/bin
export PATH=$PATH:$FFMPEG_HOME
# 生效
source /etc/profile
拷贝ffmpge pkgconfig文件到系统的目录下
sudo cp /usr/local/ffmpeg/lib/pkgconfig/* /usr/share/pkgconfig
或者
sudo cp /usr/local/ffmpeg/lib/pkgconfig/* /usr/lib/pkgconfig
都可以。
不过还是推荐使用修改环境变量的方式。
1.4.5 测试ffmpeg是否安装成功
使用
ffmpge -version
如果可以正确打印出信息,则说明ffmpeg安装成功。
或者使用进行检查
pkg-config --modversion libavcodec
pkg-config --modversion libavdevice
pkg-config --modversion libavfilter
pkg-config --modversion libavformat
pkg-config --modversion libavutil
pkg-config --modversion libpostproc
pkg-config --modversion libswresample
pkg-config --modversion libswscale
2 编译安装Opencv+FFmpeg
2.1 下载OpenCV
官网下载地址:https://opencv.org/releases/
这里以OpenCV3.4.10为例
如果是命令行则使用
wget -c 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 build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv -D WITH_FFMPEG=ON -D BUILD_EXAMPLES=OFF -D BUILD_DOCS=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D WITH_TBB=ON -D WITH_OPENMP=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
make
sudo make install
在解压缩文件夹下创建文件夹build,进入新建的build文件夹下,使用cmake命令编译。
上述的cmake命令中参数意义为:
- CMAKE_BUILD_TYPE=RELEASE:设置编译模式为Release
- CMAKE_INSTALL_PREFIX=/usr/local/opencv:指定安装路径为/usr/local/opencv
- WITH_FFMPEG=ON:启用ffmpeg混编
- BUILD_EXAMPLES=OFF:不生成例子
- BUILD_DOCS=OFF:不生成文档
- BUILD_TESTS=OFF:不生成测试用例
- WITH_TBB=ON:启用TBB
- WITH_OPENMP=ON:启用OpenMP
- WITH_EIGEN=ON:启用Eigen
- OPENCV_GENERATE_PKGCONFIG=ON:生成pkg文件
安装完成之后的include的路径为:
/usr/local/opencv/include
lib路径为:
/usr/local/opencv/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
默认pkg-config只会在/usr/share/pkgconfig/、/usr/lib/pkgconfig/ 、/usr/lib64/pkgconfig/目录下寻找*.pc
文件,如果这个时候出现找不到ffmpeg的情况就是没有找到ffmpge相关的所有pc文件,所以最好的方式还是1.3节中的方式,修改PKG_CONFIG_PATH
环境变量,将ffmpge的pkg文件所在目录增加到该环境变量中,比如
vim /etc/profile
#增加下面的行
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
# 生效
source /etc/profile
第1.4.3节中配置ffmpeg的configure时指定了--pkgconfigdir=/usr/local/lib/pkgconfig
,所以就将这个文件路径增加到PKG_CONFIG_PATH
环境变量即可。
设置完成之后,重新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/opencv/lib
# 生效
sudo ldconfig
拷贝opencv pkgconfig文件到系统的目录下
这个路径不同也是看安装时opencv.pc
所在的路径是哪一个,下面两种情况我都遇到过。
sudo cp /usr/local/opencv/lib/pkgconfig/opencv.pc /usr/share/pkgconfig/
sudo cp /usr/local/opencv/lib/pkgconfig/opencv4.pc /usr/share/pkgconfig/
或者
sudo cp /usr/local/opencv/lib/pkgconfig/opencv.pc /usr/lib/pkgconfig/
sudo cp /usr/local/opencv/lib/pkgconfig/opencv4.pc /usr/lib/pkgconfig/
或者拷贝到/usr/local/lib/pkgconfig
,因为前面配置了PKG_CONFIG_PATH
环境变量。
2.2.5 测试opencv是否安装成功
pkg-config --modversion opencv*
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Ubuntu编译安装FFmpeg+libx264以及编译+安装Opencv+FFmpeg保姆教程
原文链接:https://www.stubbornhuang.com/2058/
发布于:2022年03月24日 14:09:10
修改于:2023年09月13日 11:42:48
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52