vs2019编译ffmpeg源码为静态库动态库【完整步骤、亲测可行】


  ffmpeg大概从两年前版本开始,不再提供编译好的lib,dll,需要开发者自己编译,在linux下编译ffmpeg可能相对简单,windows稍微复杂点,很多文章介绍使用msys2编译,但是绝大多数都是无法正确编译出lib, 而且也只是加上了x264, 然而ffmpeg支持的依赖库很多,用命令行,一个命令写错就编译失败了,本篇博客介绍如何使用vs2019编译最新的ffmpeg源码,可以编译为静态库、动态库,支持x64和win32版本,例如下面是我的vs2019 编译结果:
在这里插入图片描述
lib库路径
在这里插入图片描述

  我的编译方式不是网上的那种windows linux环境编译,之前我也是参照那种方式编译,结果要么编译的是.a库,vs2019链接失败, 要么就是编译成.dll, 由于项目里需要使用ffmpeg静态链接,因为用不到ffmpeg的所有API, 编译静态库后,自己再封装一个dll使用,这样安装包会小很多,相信大家在很多软件里也看到了libffmpeg.dll这种文件, 这就是自己封装的dll, 不是ffmpeg原始库。
  由于ffmpeg的依赖库太多,用msys64这种方式编译,如果少参数,可能就编译不全,大部分的fmpeg windows编译教程一大堆错误,根本无法编译,而且由于msys64的linux环境和windows visual studio环境差异大,c/c++编译器还会冲突,还需要改link.exe等文件的名字等操作,比较复杂,而且编译时还有各种乱七八糟的错误,耗时费力。
  本篇采用github的开源项目ShiftMediaProject来编译,开发环境Win11 64bit、VS2019,测试了多台电脑后,全部一次通过,没有任何错误。
  很多人评论源码无法下载完全,导致无法编译成功,下面提供ffmpeg vs2019工程全部代码。

  链接:https://pan.baidu.com/s/1l8An7FJiuTvLuyM9ccz3wQ
  提取码:7kqi

  代码下载之后,按照下面第4步进行编译即可。如果有可靠的网络环境,可以自己手动下载,具体步骤如下:

1、ffmpeg代码clone

  在clone代码之前,创建代码目录,例如创建ffmpeg_vs2019目录,在该目录里再创建两个目录,msvc,source,为什么要这样创建,这是项目作者的建议,照着做就可以。

*OutputDir is the "Output Directory" specified in the project properties. 
The default value of OutputDir is "..\..\msvc" relative to the FFmpeg source directory. An example of the expected 
directory structure is:
    -  msvc          (OutputDir)
    -> source
        - FFmpeg
        - ..Any other libraries source code..

  进入source目录,打开git bash克隆代码
  项目地址:https://github.com/ShiftMediaProject/FFmpeg
  代码克隆

git clone https://github.com/ShiftMediaProject/FFmpeg.git

  clone完毕大概355M,如果网络环境不好,可能会clone failed。

2、ffmpeg依赖库下载

  ffmpeg clone结束后,在ffmpeg_vs2019\source\FFmpeg\SMP目录有个readme.txt介绍了如何编译配置整个项目,比如需要x264、265、vpx等开源,可以手动去ShiftMediaProject里clone, 或者运行脚本clone, 建议使用脚本clone,比较节省时间,方法如下:
  在路径 ffmpeg_vs2019\source\FFmpeg\SMP 里打开git bash, 执行
./project_get_dependencies.bat
  如下图
在这里插入图片描述
  如果网路不好,第一次可能clone失败,可以继续执行该命令。

3、其它文件下载

  先在ffmpeg_vs2019/msvc里创建include目录,include里创建gl、AMF这两个目录,待会儿需要存放opengl、egl、nv-codec、AMF的头文件。

(1)opengl头文件

  opengl仓库 https://github.com/KhronosGroup/OpenGL-Registry
  代码克隆:

git clone https://github.com/KhronosGroup/OpenGL-Registry.git

  找到OpenGL-Registry\api\GL里的glext.h 和 wglext.h放到目录:ffmpeg_vs2019\msvc\include\gl

(2)EGL头文件

  EGL仓库 https://github.com/KhronosGroup/EGL-Registry
  代码克隆:

git clone https://github.com/KhronosGroup/EGL-Registry.git

  找到EGL-Registry\api\KHR,复制KHR目录到ffmpeg_vs2019\msvc\include

(3)nv-codec 头文件

git clone https://github.com/FFmpeg/nv-codec-headers.git

  将nv-codec-headers\include里的ffnvcodec目录复制到ffmpeg_vs2019\msvc\include

(4)AMF 头文件

  AMP仓库 https://github.com/GPUOpen-LibrariesAndSDKs/AMF
  clone代码

git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git

  将AMF\amf\public\include里的两个文件夹复制到ffmpeg_vs2019\msvc\include\AMF

4、配置NASM、YASM

NASM下载地址:

  https://github.com/ShiftMediaProject/VSNASM/releases/tag/0.7
  如下图
在这里插入图片描述

YASM下载地址:

  https://github.com/ShiftMediaProject/VSYASM/releases

  将下载的VSNASM和VSYASM解压后放到
ffmpeg_vs2019\msvc目录。
  找到vs2019的命令行工具,
在这里插入图片描述

右键用管理员模式运行,cd到相应的路径,执行安装脚本,如下图
在这里插入图片描述

5、开始编译ffmpeg

  做好以上步骤后,用vs2019打开SMP目录的ffmpeg_deps.sln,一个47个项目,该工程对静态库、动态库、win32、x64都做了配置,很方便,如下图:
在这里插入图片描述

  例如我想编译x64版本的lib,不要dll,选择Debug x64,F7编译,19:11开始编译,19:30编译结束,大概20分钟,这只是Debug版本,编译Release估计还要20分钟, 例如我的生成结果:
在这里插入图片描述
  lib库路径
在这里插入图片描述
  以上生成的是debug lib,该项目对debug生成的文件加了后缀d, release的没有,比较好区分,可以看到libavformatd.lib有137M大小,在使用的不需要dll, 链接lib即可。
  如何使用这些lib呢,需要头文件,头文件目录如下:
在这里插入图片描述
  可以将上面路径的lib、include直接拷贝走,当作sdk.

  生成的ffmpeg.exe在如下目录
在这里插入图片描述
  可以看到ffmpegd.exe有90多M, 这种是静态编译的结果,使用时不需要依赖dll.

6、创建项目验证ffmpeg lib

  有了include、lib,创建vs2019 c++控制台项目,配置好include、lib, 就可以写代码了,例如获取ffmpeg代码版本:

/*

ffmpeg lib 测试程序

*/

#include <iostream>

extern "C"
{
#include "libavformat/avformat.h"
}

#ifdef _DEBUG
#pragma comment(lib, "libavformatd.lib")
#pragma comment(lib, "libavutild.lib")
#else
#pragma comment(lib, "libavformat.lib")
#pragma comment(lib, "libavutil.lib")
#endif

using namespace std;

int main()
{
    cout << av_version_info() << endl;

    return 0;
}

运行结果
在这里插入图片描述

  如果想调试ffmpeg代码,把pdb文件带上,放到lib所在的目录就可以跟踪到ffmpeg源码了,如下图:
在这里插入图片描述

7、哪些项目用到了ffmpeg

  除了使用lib开发,也可以用dll, 修改编译选项位DebugDLL/ReleasdDLL即可,FFmpeg是开源项目,国内大部分的软件都进入了FFmpeg耻辱柱,没办法,音视频仅此一个伟大的集大成开源项目,很多软件都是编译ffmpeg lib后,自己封装dll,例如:

  腾讯会议
在这里插入图片描述

  迅雷
在这里插入图片描述

  也不是专指这两个项目,99%的音视频项目应该都会用到ffmpeg, 例如视频客户端优酷、爱奇艺、腾讯视频,格式工厂、QQ、微信、钉钉等。

  当然在开发时,如果需要265,vpx的支持也是可以的,在开发时带上相应的lib即可,如下图:
在这里插入图片描述

要在VS2019编译FFmpeg,你需要按照以下步骤进行操作: 1. 下载FFmpeg源代码:你可以从FFmpeg的官方网站(https://ffmpeg.org/)或者GitHub仓库(https://github.com/FFmpeg/FFmpeg)下载最新的源代码。 2. 安装MSYS2:FFmpeg使用MSYS2作为构建环境,因此你需要先安装MSYS2。你可以从官方网站(https://www.msys2.org/)下载最新的安装程序,并按照提示进行安装。 3. 打开MSYS2:安装完成后,打开MSYS2的命令行终端。 4. 更新MSYS2:在MSYS2的命令行终端中,运行以下命令更新系统: ``` pacman -Syu ``` 5. 安装所需的依赖项:使用以下命令安装构建FFmpeg所需的依赖项: ``` pacman -S mingw-w64-x86_64-toolchain nasm git ``` 6. 配置环境变量:将MSYS2的bin目录添加到系统的PATH环境变量中。默认情况下,MSYS2的bin目录位于C:\msys64\usr\bin。 7. 克隆FFmpeg源代码:在MSYS2的命令行终端中,使用以下命令克隆FFmpeg的源代码: ``` git clone https://github.com/FFmpeg/FFmpeg.git ``` 8. 进入FFmpeg目录:使用cd命令进入FFmpeg源代码的目录: ``` cd FFmpeg ``` 9. 配置编译选项:使用以下命令配置编译选项(可以根据需要进行调整): ``` ./configure --prefix=/usr/local --enable-shared --disable-static ``` 10. 编译和安装:使用以下命令开始编译和安装FFmpeg: ``` make make install ``` 11. 完成:编译完成后,你可以在/usr/local目录下找到生成的FFmpeg可执行文件和库文件。 请注意,编译FFmpeg可能需要一些时间,并且可能会因为系统配置和依赖项的不同而出现问题。如果遇到任何错误,请参考FFmpeg的官方文档或寻求帮助。
评论 59
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令狐掌门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值