看本教程前,推荐先看一下视频的讲解,本文最后面的参考文献中有一个 b 站的视频,讲的不错,也可以自行搜索。
编译软件需要:源代码和编译工具
(源代码比较容易获取,也不会遇到太多问题,主要是编译工具的安装和使用会遇到各种问题)
本教程需要你提前安装好 visual studio 。
1. 源代码
直接 百度、谷歌或者 github 里面搜索就好了。
这边给个目前的网站: https://www.ffmpeg.org/ 如下图所示。
如果代码不熟悉怎么下载的可以去 b 站搜索, ffmpeg 如何在 windows 中编译,视频看起来会直观一点。
2. 工具使用
Windows 下有 3 种方式编译 ffmpeg。分别是基于 Cygwin环境, 基于msys2+mingw 和 msys2+visual studio 的方式。(好像也可以在其他平台交叉编译,比如在 Linux 平台下编译 windows 版本)
网上用的比较多的是 mysys2 + mingw,本文也是用的该方式。
采用该方式进行编译,也会遇到两种方式,一种是自行下载安装 MinGW 和 msys2(如https://blog.csdn.net/zhouyongku/article/details/44961447),一种是 下载 msys2 再用命令自动下载MinGW 等工具。
本文采用第 2 种方式,即先下载msys2 再用命令自动下载MinGW 等工具。该方式比较简单,且用户跟着操作成功的概率会更大。
2.1mys2 下载
直接搜 msys2 就好了,现在的网站是 https://www.msys2.org/
下载之后默认安装就行。
2.2 插件安装
安装完这个软件,相当于模拟了一个 Linux 系统,然后需要在这个系统安装一些软件。
打开 msys2 执行下面的语句。安装了 make、gcc、 diffutils、 yasm 和 pkg-config 软件。
pacman -S make gcc diffutils yasm pkg-config
2.3 配置修改
之后打开 C:\msys64\msys2_shell.cmd (与你的安装路径相关,如果是默认安装是这个路径)
rem set MSYS2_PATH_TYPE=inherit
这句更改成set MSYS2_PATH_TYPE=inherit
然后保存,如下图所示。(rem 代表注释的意思)
把这句话打开的意思是使用 windows 环境变量
2.4 设置编译器和链接器
2.4.1 链接器设置
有两种方法:
2.4.1 方法1
打开 msys2_shell.cmd 和 2.3是同一个文件,然后加一句(根据安装的 visual studio 版本和位置进行修改路径)
call “C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat”
然后运行,最下面这个应用
2.4.2 方法2
执行 visual studio 的 x86_64 Cross Tools
执行 C:\msys64\msys2_shell.cmd
2.4.2修改链接器
由于 msys 自带 link.exe 和 vs 中的链接器重名,需要将其改成其他名字
2.4.3测试配置是否成功
查看cl和link工具是不是VS2019中的 (cl 是编译器 link 是链接器)
2.5 配置编译设置
之后 cd 到 ffmpeg 源码目录
MSYS 中的路径的表示方式是 linux 形式的,所以要写成下面的形式(“/f/” 代表 f盘)
执行下面命令,配置编译的设置
./configure --toolchain=msvc --enable-shared --prefix=host
大概意思是 ./configure 是 ffmpeg 脚本名字, --toolchain=msvc 使用 vistual studio 的工具链进行编译 --enable-shared 编出来的是共享库,即 .dll 文件;–prefix=host 输出的目录名是 host。
执行该命令是,控制台是没有反应的,可以在 ffbuild 中看 config.log 文件,执行是会把日志打在这个文件里面,直接看文件大小变化就可以知道目前是在执行命令了。
2.6 编译
最后进行编译
make -j4&&make install
就可以在 host (2.5里面设置的路径)路径里面看见生成的文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/7663f79f389b48fc840cd1eebab02a37.png)
3. 其他库安装
3.调试源码
如果想调试源码,只需要将 pdb 文件和 dll 都放到执行文件同一目录下,进行编译就行了。
参考文献:
https://www.bilibili.com/video/BV1VE411K766?from=search&seid=18116917797625156309&spm_id_from=333.337.0.0
https://blog.csdn.net/lvchunhua/article/details/80579588
https://blog.csdn.net/u011595231/article/details/17244109