音视频技术应用(1)-使用VS2019来编译FFmpeg 环境搭建

一. 安装并配置msys2

这个工具主要用于模拟linux端的一些命令和指令。
下载地址:

msys2-x86_64-20210725_2.exe 

链接: https://pan.baidu.com/s/1zOzoNzAt85KrccERo_9RQg 提取码: n64t 

下载完成后双击exe进行安装,安装时间可能很长,请耐心等待安装结束。

然后打开VS2019的命令行工具,选择:x86 Native Tools Command Prompt for VS 2019, 右击以管理员权限运行:

 注意:最好以管理员权限运行,否则后续在执行nmake install 指令时可能会发生错误,切记。

点击打开, cd 到msys2 安装的目录, 执行 msys2_shell.cmd -mingw32, 启动msys2的32位运行环境:

  在新启动的msys2中执行 cl, 看是否能找到cl 编译器,如果提示:bash: cl: 未找到命令

则说明msys 控制台系统中并没有共享我们本地的VS2019的运行环境,因此需要将 VS2019的运行环境添加到 msys 的控制台系统当中,目的要保证能在msys的环境中要能运行VS2019的控制台。

打开刚才msys2的解压路径,找到:msys2_shell.cmd 文件,打开:

找到:

rem set MSYS2_PATH_TYPE=inherit

将其修改为:

set MSYS2_PATH_TYPE=inherit

允许msys 继承外部的环境变量:

 关闭msys2的控制台窗口,然后重新在 VS2019的控制台窗口中执行:msys2_shell.cmd -mingw32

 打开msys的控制台窗口后,再次执行cl, 若遇到乱码则是因为字符编码不一致导致的,可以右击msys2的标题栏,依次选择“Options”-"Text", 分别修改Locale 和 Character set 为 “zh_CN” 和 “UTF-8”

修改完毕后,回到msys的控制台,再次执行cl,这样就不会有乱码了:

 到此为止,我们就已经把msys的环境装好了,并且已经包含了cl的命令行工具。

 二. msys2  依赖环境安装

这里我们主要使用pacman来安装编译依赖工具,pacman 有点类似于ubuntu下的apt, 或是centos下的yum。

2.1 安装汇编工具

主要是在编译x264和ffmepg时会用到,如果不安装,在config中需要禁用汇编。

安装 nasm

打开msys 控制台窗口,执行 pacman -S nasm , 注意 S 大写

 安装yasm

一个汇编工具,在编译x264 和 ffmpeg 时会用到,如果不安装,则需要在config中去禁用汇编。

 安装 make cmake

项目编译工具,必须要安装,cmake 用于生成项目文件

 安装 diffutils

比较工具,ffmpeg configure 生成 makefile 时会用到。

  安装 pkg-config

库配置工具,编译x264, x265 时会用到

 安装 git

版本控制工具,从版本库下载源码时会用到

 如果下载过慢,可添加清华大学开源镜像站的源,参考链接:MSYS2 镜像使用帮助, https://mirrors.tuna.tsinghua.edu.cn/help/msys2/

三. 安装并配置cmake
为了保险起见,这里最好使用独立的cmake 程序来执行后面的编译。

cmake 下载地址:

链接: https://pan.baidu.com/s/1BjR6SY1u0eWihu2AqdpXfA 提取码: mbty 

下载完毕后将其解压到任意目录,并在Windows的环境变量中配置cmake 的路径:

 四. 编译x264

首先下载x264 源码:

链接: https://pan.baidu.com/s/1R8TdXirYYqah_V_i18z_5Q 提取码: 4gpv 

下载完毕后将其解压到 msys 的home 目录下:

回到msys 终端,cd x264当前目录,修改编译工具为 cl ,并将其编译成动态链接库的形式 (若不指定默认则为GCC)

  使用 make -j16 命令开始编译

  等待编译结束

  编译完成后,使用 make install 命令进行安装:

  打开 usrlocallibpkgconfigx264.pc, 可以看到该文件已描述了编译完成后的x264的库文件,头文件所在路径,以及库的调用方式。

 至此x264 库编译完毕。

 五. 编译x265

首先下载x265 源码:

链接: https://pan.baidu.com/s/1yLAk82uDy51dXOufMJe3rA 提取码: qu8q 

将下载完成的压缩包解压到 msys的 home 目录下:

x265 源码给出了各个环境下的编译脚本:

PS: 这里注意不要使用 msys2 当中的cmake, 因为msys-cl 目录下生成的make-Makefiles.sh 文件是VS调用的Makefile文件,而不是make的,并且稍候要使用nmake来进行编译。

通过 where cmake 查看当前cmake安装路径

如果发现 msys的 usr/bin目录下已经包含cmake, 则将其改名:

  

 修改完毕后,切换到 x265的编译目录:

 执行 ./make-Makefiles.sh 开始编译:

 等待编译结束....

 然后使用 nmake install 指令进行安装:

 可以看到编译完成的x265库被安装到了C盘的Program Files目录下,这里为了使用方便将其拷贝到 msys的 usr/local 路径当中,与之前编译的 x264库保持一致。

找到x265库的安装路径:

 选中所有文件,将其拷贝到 msys 的 usr/local 目录下:

 由于 x265的 库文件路径已发生变化,所以需要对其路径进行更新:

打开 x265的 pc文件,位于:usr/local/lib/pkgconfig 目录

 打开x265.pc 文件,将红框内容

 修改成:

 这样的话x265就编译完了,并且路径也配置过了。

六. 编译fdk-aac

用于aac格式的编码

首先下载fdk-aac的源码:

链接: https://pan.baidu.com/s/13pff3Jk8-UKwlahdslcvTQ 提取码: ug5c 

下载完毕后将其解压到 msys 的 home 目录下:

可以看到,fdk-aac的源码库已经提供了VC编译的Makefile,因此就不需要再借助msys控制台环境来编译了,直接在VS的控制台环境下编译即可,打开VS 的控制台,并且切换到fdk-aac的源码目录:

执行:nmake -f Makefile.vc 开始编译:

编译完毕后,执行:nmake -f Makefile.vc prefix=.install install 将编译完成的库拷贝到fdk-aac的install目录下:

下一步我们将整个编译完成的所有文件全部拷贝到之前用于存放x264,x265的 usr/local 目录下:

这样就添加了fdk-aac的支持,不过有一个问题就是刚才编译生成的fdk-aac 并没有像先前编译x264,x265一样生成pkgconfig:

下面我们手动的为编译好的fdk-aac 库添加 pkgconfig:

回到 fdk-aac的源码目录:home/fdk-aac, 

 找到 fdk-aac.pc.in 文件,将其拷贝到 刚才添加的 usr/local/lib/pkgconfig 目录下,并重命名为:fdk-aac.pc

打开fdk-aac.pc 文件,仿照 x264.pc, 将其文件内容由:

修改为:

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: Fraunhofer FDK AAC Codec Library
Description: AAC codec library
Version:
Libs: -L${libdir} -lfdk-aac
Libs.private:
Cflags: -I${includedir}

这样的话我们就生成了一个fdk-aac 的pkgconfig的配置项。aac就全部编译完成了。

七. 编译ffmpeg

这里编译的是ffmpeg4.3 版本, ffmpeg4.3 版本下载:
链接: https://pan.baidu.com/s/19XftM8VX8u_DioyIU7HP-Q 提取码: bzgf 

同样,先将解压后的ffmpeg 4.3 目录拷贝到 msys 的home 目录下:

ffmpeg 在 windows 中的编译还是需要用到 msys2, 并且ffmpeg编译要先生成Makefile, 接下来我们为编译作准备,先生成 Makefile

生成Makefile 的代码如下:

CC=cl.exe ./configure --prefix=./install --toolchain=msvc --enable-shared --disable-programs --disable-ffplay --disable-ffmpeg --disable-ffprobe --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265

参数说明:

参数说明:
--prefix=./install                   指定输出的目录是在当前目录的install目录下
--toolchain=msvc                   指定编译工具链为vs

--enable-shared                   编译为动态链接库

--disable-programs                不编译工具
--disable-ffply
--disable-ffmpeg
--disable-ffprobe

--enable-libx264                  支持x264
--enable-libx265                  支持x265
--enable-gpl                    支持h264协议,x264 x265 必备

--enable-libfdk-aac --enable-nonfree         支持aac音频编码 aac 必须包含-enable-nonfree

在msys的控制台窗口中切换到 ffmpeg-4.3目录下,执行上述指令尝试生成Makefile

点回车确认后可能需要一些时间,因为ffmpeg内部有一些测试工具,如果中途出现问题,可以打开ffmpeg的源码目录,找到ffbuild目录中的config.log, 里面详细记录了失败的详细原因。

比如我现在开始执行后,控制台就返回一条错误消息:

提示我libfdk-aac 这个库找不到。我们打开 config.log:

它说找不到fdk-aac/aacenc_lib.h这个头文件。但是我们打开 usr/local/include/fdk-aac 这个目录,发现是有 fdk-aac/aacenc_lib.h 这个头文件的,这是为什么呢?这是因为我们先前在usr/local/lib目录中存放的pkgconfig文件没有被找到,为了让msys能够顺利找到pkgconfig, 我们需要把pkgconfig 剪切到 msys64/mingw32/lib 目录下,因为我们启动的是mingw32的环境,所以它会到这个目录下去找。

剪切完毕后,我们再次回到msys的控制台窗口,再次执行刚才的指令:

这次又报了libx264没有找到,我们打开ffbuild目录下的 config.log,滑到末尾,发现是:

找不到libx264.lib, 无法执行链接,我们打开先前编译好的libx264的 lib 目录:

注意到没有libx264.lib 这个文件,现在的名字叫 libx264.dll.lib, 我们将 libx264.dll.lib 重命名为 libx264.lib, 再次执行刚才的指令:

修改完毕后再次执行刚才的指令:

这次又提示 ERROR: x265 not found using pkg-config, 我们再打开 config.log:

这次的提示跟上次差不多,也是链接错误,找不到 x265.lib, 我们打开x265 的lib 目录:

将libx265.lib 重命名成 x265.lib:

再次执行刚才的指令:

这次终于可以顺利生成Makefile了。

接下来我们执行 make -j16  开始编译:

 编译过程可能有点长,视机器配置而定,我的电脑大约用了3分钟完成编译:

最后我们再执行 make install , 将编译完成的文件安装到 当前目录的install 目录下。install 目录之前已经指定过了。

等待install 结束,打开 ffmpeg 目录下的install 目录:

出现上述的图示就说明 ffmpeg 库已经全部编译完成了。

<完>

原文地址:https://www.cnblogs.com/yongdaimi/p/15496963.html