首页 > 其他分享 >Win11+ VS2022编译 FFmpeg6.0 静态库

Win11+ VS2022编译 FFmpeg6.0 静态库

时间:2023-08-17 16:55:38浏览次数:58  
标签:FFmpeg6.0 libavutil git lib 编译 VS2022 pragma Win11 include

目录

编译前言

编译作为自己持有的稳定版本 用来练习,网上的编译环境太杂太乱了,目前有个开源项目致力解决ffmpeg编译的问题,暂时拿来用,如果这个项目不维护或者坏了,再考虑其他。

为什么项目编译?

编译作为自己持有的稳定版本 用来练习

前期准备

使用github 上 开源项目的解决方案编译
ShiftMediaProject

环境配置

先创建代码目录,作者建议的。

*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 克隆代码

image.png
这里因为我已经git 拉到本地过了,所以报错,不影响。

ffmpeg外部库

代码拉取完毕后 ,如果一切顺利,/vs2022/source/FFmpeg/SMP目录可以查看readme.txt,里面介绍了如何编译配置整个项目,包括外部库:x264、x264、vpx等,可以使用脚本下载,路径vs2022\source\FFmpeg\SMP\project_get_dependencies.bat,感兴趣可以看一下他这个bash脚本,它会按照脚本中配置的外部库名字按顺序拉取。如果万一下载失败 ,可以根据输出日志跟脚本内容排查问题,手动下载或者重新运行脚本。运行情况如下:
image.png

好了经过漫长的下载与数次.//project_get_dependencies.bat,所有的库也都下下来了。
image.png

额外的编译选项-for渲染

根据readme.txt先在/vs2022/msvc/下创建include目录,include里创建glAMF两个目录,用来放openglnv-codecAMF的头文件。

git clone https://github.com/KhronosGroup/OpenGL-Registry.git
git clone https://github.com/KhronosGroup/EGL-Registry.git
git clone https://github.com/FFmpeg/nv-codec-headers.git
git clone https://github.com/GPUOpen-LibrariesAndSDKs/AMF.git

image.png

opengl (需要glext)

  • a. OpenGL-Registry\api\GL\ 里的glext.hwglext.h放入 /vs2022/msvc/include/gl/
  • b. EGL-Registry\api\KHR 将KHR整个文件夹放入/vs2022/msvc/include/

ffnvcodec (需要nv-codec-headers)

  • a. nv-codec-headers\include里的ffnvcodec目录复制到/vs2022/msvc/include

AMF sdk头文件

  • a. AMF\amf\public\include里的两个文件夹复制到/vs2022/msvc/include/AMF

编译工具链

配置 NASMYASM,这两个是汇编的编译工具

nasm

git clone https://github.com/ShiftMediaProject/VSNASM/releases/download/0.9/VSNASM.zip

yasm

git clone https://github.com/ShiftMediaProject/VSYASM/releases/download/0.7/VSYASM.zip

同样我们查看脚本可知它会根据不同VS的大版本去做适配安装,我们的是VS2022,vs17,如果有报错可以往这方面去排查。
执行安装
image.png

开始编译

到这一步,所有的准备工作基本完成,打开工程文件
FFMpeg/SMP/ffmpeg_deps.sln
image.png

step1. 选择编译类型 Debug/Release Dll/lib

这里我们先选择的Debug,因为只是练习用,需要调试什么的。
接下来就是直接生成了,生成时间稍微有点长,我这里10分钟左右,而且中间果不其然出现了错误。
让我们来分析一下:
在libavcodec 编译的过程中提示找不到好几个宏 都是NV_ENC_PARAMS打头的,我们找一下他的同类型,大概是这么一个枚举类型

image.png

,这里我们替换一下ffnvcode的版本,退回到5月份的版本,跟ffmpeg6r1保持一致

image.png

重新生成就能成功了。
image.png

lib库在`/msvc/lib/x64下面,我们可以看到生成的各种lib库
image.png

step2. 打包SDK

把上述生成的include、lib打包带走,直接放到应用的项目下就可以直接用了
image.png

验证

#ifndef __FFPLAYER_H__
#define __FFPLAYER_H__

#include <iostream> 
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libswscale/swscale.h"
#include "libswresample/swresample.h"
#include "libavutil/avassert.h"
#include "libavutil/error.h"
#include "libavutil/avutil.h"
#include "libavutil/ffversion.h"
#include "libavutil/imgutils.h"
#include "libavutil/channel_layout.h"
#include "libavutil/opt.h"
#include "libavutil/mathematics.h"
#include "libavutil/timestamp.h"
}
#include <Windows.h>
#include <string.h>
#include <math.h>
#ifdef _DEBUG
#pragma comment(lib, "libavformatd.lib")
#pragma comment(lib, "libavutild.lib"
#pragma comment(lib, "libavcodecd.lib")
#pragma comment(lib, "libavdeviced.lib")
#pragma comment(lib, "libavfilterd.lib")
#pragma comment(lib, "libswscaled.lib")
#pragma comment(lib, "libswresampled.lib")
#else
#pragma comment(lib, "libavformat.lib")
#pragma comment(lib, "libavutil.lib")
#endif
...
...
...
#endif  //__FFPLAYER_H__

image.png
结果如下,我们在这里输出了ffmpeg的编译配置,可以看到 其他的一些基础库都是 enable的状态,说明都编进去了,本次编译宣告成功。如需要在项目中使用到这些外部库诸如x265之类的,在项目中加上这些库的lib连接就可以。
image.png

结尾

如果上述方式失效了,要回到手动编译配置的老路子,脏路子,也不用慌,相信经过这些配置编译的历程,作为开发者的您也能轻松应对,处变不惊,将正确的东西放到正确的篮子里面。

最后,祝您在开发者波澜壮阔的coding生活里一切顺利~

本文原创https://macrocyborg.site/article/07ab4b09-2b01-42c4-8faf-6c15c70b368a 转载请注明链接

参考链接

1.CSDN令狐掌门

2.Shift Media Project

3.FFMPEG官方git仓库

标签:FFmpeg6.0,libavutil,git,lib,编译,VS2022,pragma,Win11,include
From: https://www.cnblogs.com/dionysius/p/ffmpeg_compile.html

相关文章

  • 界面组件Telerik UI for WinForms R2 2023——拥有VS2022暗黑主题
    TelerikUIforWinForms拥有适用WindowsForms的110多个令人惊叹的UI控件。所有的UIforWinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。TelerikUIforWinFormsR22023于今年6月份发布,此版本中集成了备受期......
  • 解决VS2022工程中多个含main()函数源码文件同时编译问题
    做编程练习时,我常常将源码文件放在一个工程中管理,写出的每个源码文件中都包含一个main()函数。于是出现这样的问题:于是生成失败。这是因为,在VS2022中,一个工程里只能有一个入口函数main()。这样的要求对于一个完整的工程来说其实也比较合理,但是对我来说很不方便。于是,通过以......
  • Win11一键修改右键菜单大法 仅需3行命令
    1.打开终端或者CMD,输入以下命令:reg.exeadd"HKEY_CURRENT_USER\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f/ve2.重启资源管理器taskkill/f/imexplorer.exestartexplorer.exe3.搞定原创作者:Minerval-知乎链接:https://www.......
  • C++简单动态链接库的创建和引用(VS2022)
    原文:https://blog.csdn.net/XianLiangcheese/article/details/127125135总结在前:创建dll:1.打开VS2022,创建一个“动态链接库”新项目2.建立一个需要导出的类3.编辑导出类里面的内容,其中需要在导出的方法,也就是在外面引用的方法,只需要在其类型声明前面加上“__declspec(dllexport)......
  • 解决方案 | 预装win11如何退回win10?
    1、问题刚买的新电脑预装win11,我之前用的是win10(推送win11不下5次,就是不装),我的建议是但凡你一直在用win10不要抱有任何幻想装win11。即使自认为比较懂得调教电脑的人在经历一些折腾后,仍觉得用着win11不方便。枚举几个例子:①win11右键是折叠菜单(也就是二级菜单),几乎99%情况下需要点......
  • win11怎么关闭病毒和威胁防护?
    win11怎么关闭病毒和威胁防护?随着Windows11的发布,微软为我们带来了许多新功能和改进,其中包括更强大的病毒和威胁防护功能。有时候您可能希望关闭这些功能,以便获得更好的性能或者使用其他第三方安全软件。win11怎么关闭病毒和威胁防护?步骤1打开“设置”应用程序首先,点击Win11任务......
  • 最完美WIN11_Pro_22H2.22621.2213软件选装纯净版VIP51.5
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_Pro_22H2.22621.2213。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22621.2213。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • VS2022 打开旧项目缺乏.net 4.5.1 & .net 4.5.2 依赖问题
    我操作系统是WIN10,.NET已经安装到最高4.8了。估计不给装4.5。按照网上提示,下载一个nuget包,解压后复制到系统相关位置,问题解决。1、首先从Microsoft.NETFramework.ReferenceAssemblies.net45下载一个依赖包https://www.nuget.org/packages/microsoft.netframework.referenceasse......
  • Win11程序卸载(更新)后右键-打开方式仍然存在,如何清除
    清除方法:1、打开注册表Win+r打开运行窗口,输入【regedit】回车后就打开了注册表。2、在注册表输入下面的内容。计算机\HKEY_CLASSES_ROOT\Applications3、找到你已删除应用的名字,点删除即可。 ......
  • 转载 | win11右键改为win10的bat命令(以及恢复方法bat)
    原文来自这里:https://blog.51cto.com/knifeedge/5340751 版权归:IT利刃出鞘  本质上就是写入注册表。 一、右键菜单改回Win10(展开)1.新建文件:win11右键展开.bat2.填写脚本内容regadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\Inproc......