1 前言
此方法可支持读写 H264/H265编码的视频
2 环境准备
-
官网下载 msys 安装
建议默认路径安装,避免不必要的麻烦
-
打开MSYS2 MSYS命令行
-
打开后,能看见下图中的MSYS标记
-
在MSYS 命令行上执行下面命令安装依赖库,安装的时候建议每个命令执行两次,避免第一次安装失败
下载依赖库# 更新软件包 pacman -Syu pacman -Su pacman -S diffutils make pkg-config pacman -S --needed base-devel mingw-w64-x86_64-toolchain pacman -S binutils automake autotools
-
下面是部分安装过程
rotina@DESKTOP-VE0INQ8 MSYS ~ $ pacman -S diffutils make pkg-config yasm nasm resolving dependencies... looking for conflicting packages... Packages (5) diffutils-3.8-3 make-4.3-3 nasm-2.15.05-1 pkgconf-1.8.0-1 yasm-1.3.0-2 Total Download Size: 1.47 MiB Total Installed Size: 7.29 MiB :: Proceed with installation? [Y/n] Y :: Retrieving packages... pkgconf-1.8.0-1-x86_64 58.4 KiB 36.1 KiB/s 00:02 [###############################] yasm-1.3.0-2-x86_64 312.1 KiB 108 KiB/s 00:03 [###############################] make-4.3-3-x86_64 466.2 KiB 159 KiB/s 00:03 [###############################] nasm-2.15.05-1-x86_64 302.9 KiB 94.8 KiB/s 00:03 [###############################] diffutils-3.8-3-x86_64 362.2 KiB 68.1 KiB/s 00:00 [###############################] 100%al (4/5) 1475.1 KiB 114 KiB/s 00:00 [##############################-] diffutils-3.8-3-x86_64 362.2 KiB 64.2 KiB/s 00:06 [###############################] Total (5/5) 1501.8 KiB 59.6 KiB/s 00:25 [###############################]
:: Processing package changes... (1/5) installing diffutils [#############################] 100% (2/5) installing make [#############################] 100% (3/5) installing pkgconf [#############################] 100% (4/5) installing yasm [#############################] 100% (5/5) installing nasm [#############################] 100% :: Running post-transaction hooks... (1/1) Updating the info directory file...
-
安装完成后关闭退出
-
在操作之前需要去msys安装目录下 找到link.exe 将其暂时改名,不然会和MSVC的link.exe冲突,导致编译失败
-
然后打开一个windows普通命令行
-
执行下列命令,
加载MSVC环境,并且继承到mingw64 上
在编译和链接的时候用MSVC的,而不是gcc# 切换到msys安装目录 cd c:\msys64 # vs2022 的路径 call "D:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" # vs2019 的路径 call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" # 别的依葫芦画瓢 # 设置MSYS2的庆东方式为继承 set MSYS2_PATH_TYPE=inherit # 打开一个 MSYS2 MINGW64 命令行 msys2_shell.cmd -mingw64
-
执行完后会新开一个 MSYS2 MINGW64 的命令行,如下图
-
这时候分别在两个命令行上执行 cl,得到相同的输出即表明操作成功
-
同时在两个命令行上敲 link ,查看输出是否一致,若如果不一致,则应该是忘记更改名字了,关闭当前所有命令行重新执行即可
-
最后查看lib路径是否正确, 能看到MSVC的路径即可
-
到此编译环境已经准备完毕
下面开始编译
3 编译
- 继续在刚才的 MSYS2 MINGW64 命令行上执行
这里我编译的路径为$HOME/lib/ffmpeg_build
根据自己的路径,请自行修改,或者不改
# 添加环境变量
# 之后所有操作都需要在这个命令行上进行
export prefix="$HOME/lib/ffmpeg_build"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$prefix/lib"
export PATH="$PATH:$prefix/bin"
# 设置代理地址,不设置的话,下载会很慢
# 如果没有代理环境,就不要执行下面两行
export http_proxy=127.0.0.1:4780
export https_proxy=127.0.0.1:4780
# 设置编译附加参数
export CFLAGS="$CFLAGS -fPIC"
export CPPFLAGS="$CPPFLAGS -fPIC"
3.1 编译 libx264
# 继续在刚才的命令行上执行
cd $HOME
mkdir -p $HOME/lib/ffmpeg_sources
cd $HOME/lib/ffmpeg_sources
# 下载源码, 如果这一步下载失败了,建议去下载压缩包继续编译
git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
# 设置使用MSVC 的 cl 编译器,类似于linux下的gcc
export CC=cl
./configure --prefix="$prefix" --enable-shared --enable-pic
make -j4 install
# 编译完成后,查看生成的x264文件
ls $HOME/lib/ffmpeg_build/bin
ls $HOME/lib/ffmpeg_build/lib
# 修改名字 否则后面编译ffmpeg时报错 ERROR: libx264 not found
mv $HOME/lib/ffmpeg_build/lib/libx264.dll.lib $HOME/lib/ffmpeg_build/lib/libx264.lib
3.2 编译 libx265
如果本机没有安装 cmake-gui
先去下载安装
# 继续在刚才的命令行上执行
# 切回编译目录
cd $HOME/lib/ffmpeg_sources
# 克隆x265
git clone https://bitbucket.org/multicoreware/x265_git.git
# 下载完成后 直接使用 `cmake-gui` 编译
# 设置 install 路径 为 $prefix
echo $prefix
3.3 编译 ffmpeg
ffmpeg 下载页面
我这里选择的是 ffmpeg-4.4.tar.gz
下载完成后将其放置 $HOME/lib/ffmpeg_sources
目录下
# 继续在刚才的命令行上执行
# 切回编译目录
cd $HOME/lib/ffmpeg_sources
ls
tar zxf ffmpeg-4.4.tar.gz
cd ffmpeg-4.4
# 这两行不能少,不然报错 ERROR: libx264 not found 找不到 x264 x265
export PATH="$prefix/bin:$PATH"
export PKG_CONFIG_PATH="$prefix/lib/pkgconfig"
# 配置
# 这里我们只加了 x264 x265 别的依赖库可自行编译
./configure \
--prefix="$prefix" \
--extra-cflags="-I$prefix/include" \
--extra-ldflags="-L$prefix/lib" \
--extra-libs=-lm \
--bindir="$prefix/bin" \
--enable-gpl \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree \
--disable-yasm \
--enable-pic \
--disable-debug \
--enable-avresample \
--enable-shared
# 如果报错 ERROR: libx264 not found 的话
# 有两种可能,上面已经提过到了,请详细查看
# 最后编译安装
make -j4 install
# 编译完成后,查看生成的ffmpeg文件
ls $HOME/lib/ffmpeg_build/bin
ls $HOME/lib/ffmpeg_build/lib
- 至此ffmpeg已经编译完成
可在$HOME/lib/ffmpeg_build/bin
目录下 执行ffmpeg
查看版本等信息
或者转码生成一个h264编码的视频# test.avi 为原始视频 # output.mp4 为转码的视频 ffmpeg -i test.avi -vcodec libx264 -preset ultrafast -b:v 2000k output.mp4
4 编译 opencv
-
opencv 的编译方法比较简单
请注意
需要在在刚才的命令行上执行cmake-gui
才行
因为刚才的命令行上有很多环境变量,在上面执行cmake-gui
时,也会继承当前命令行上的所有环境变量, 后面在查找ffmpeg时能很轻松的找到,并且链接的是我们刚刚编译的ffmpeg,以及对应的x264,x265库 -
此方法不需要修改opencv的源代码,即可编译成功
-
configure 完成后,即可查看到已经成功查找到刚刚编译的ffmpeg了,如下图