Win11+ VS2022编译 FFmpeg6.0 静态库

编译前言

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

网上有使用cygwin版本,在把ffmpeg作为静态库依赖的时候要添加iconv等其他的库,非常麻烦,有很长的打包链条,编译出来的库不能独自成军。

网上其他的编译环境也太杂太乱了,目前有个开源项目致力解决ffmpeg编译的问题,暂时拿来用,如果这个项目不维护或者坏了,再考虑其他。

如果图片看不了可以去原文章地址看win11编译ffmpeg

为什么编译ffmpeg?

编译作为自己持有的稳定版本 用来练习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 克隆代码

!http://img.macrocyborg.site/notion/ffmpeg_01.png

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

ffmpeg外部库

代码拉取完毕后 ,如果一切顺利,/vs2022/source/FFmpeg/SMP目录可以查看readme.txt,里面介绍了如何编译配置整个项目,包括外部库:x264、x264、vpx等,可以使用脚本下载,路径

vs2022\\source\\FFmpeg\\SMP\\project_get_dependencies.bat,感兴趣可以看一下他这个bash脚本,它会按照脚本中配置的外部库名字

按顺序

拉取。如果万一下载失败 ,可以根据输出日志跟脚本内容排查问题,手动下载或者重新运行脚本。运行情况如下:

!http://img.macrocyborg.site/notion/ffmpeg_02.png

好了经过漫长的下载与数次执行./project_get_dependencies.bat

,所有的库也都下下来了。

!http://img.macrocyborg.site/notion/webrtc_202308161606196.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>

!http://img.macrocyborg.site/notion/webrtc_202308161617777.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,如果有报错可以往这方面去排查。
执行安装

!http://img.macrocyborg.site/notion/ffmpeg_20230817.png

开始编译

到这一步,所有的准备工作基本完成,打开工程文件

FFMpeg/SMP/ffmpeg_deps.sln

!https://img.macrocyborg.site/notion/ffmpeg20230817.png

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

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

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171436.png

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

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171438234.png

重新生成就能成功了。

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171440847.png

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

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171442765.png

step2. 打包SDK

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

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171446839.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__

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171514273.png

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

!https://img.macrocyborg.site/obsidian/ffmpeg_202308171513976.png

结尾

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

最后,感谢你的阅读,若能带来些许启发就更好了,与君共勉。

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

参考链接

1.CSDN令狐掌门

2.Shift Media Project

3.FFMPEG官方git仓库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用MSYS2和VS2015编译FFmpeg,你可以按照以下步骤进行操作: 1. 首先,你需要下载并安装MSYS2。你可以从官方网站https://www.msys2.org/下载MSYS2安装程序。 2. 安装完成后,打开MSYS2的命令行界面,并运行以下命令来安装必要的工具:pacman -S make gcc diffutils 3. 为了避免和MSVC的link.exe程序冲突,你需要将C:\msys64\usr\bin\link.exe重命名为C:\msys64\usr\bin\link_orig.exe。 4. 下载YASM(The Yasm Modular Assembler),你可以从官方网站https://www.tortall.net/projects/yasm/wiki/Download下载YASM。将下载的yasm--win64.exe重命名为yasm.exe,并将其拷贝至MSYS2的安装目录(比如C:\msys64)。 5. 现在你可以下载FFmpeg的源代码。你可以从官方GitHub仓库https://github.com/FFmpeg/FFmpeg下载FFmpeg的源码。 6. 打开MSYS2的命令行界面,并切换到FFmpeg源码所在的目录。 7. 运行以下命令来配置FFmpeg编译选项:./configure --toolchain=msvc --arch=x86_64 --enable-yasm --enable-asm --enable-shared --disable-static 8. 配置完成后,你可以运行make命令来开始编译FFmpeg。请注意,编译过程可能会比较耗时,请耐心等待。 9. 编译完成后,你可以使用编译好的库来进行你的项目开发。 总结一下,使用MSYS2和VS2015编译FFmpeg的步骤包括安装MSYS2、安装必要的工具、重命名link.exe、下载YASM、下载FFmpeg源码、配置编译选项、运行make命令进行编译。希望以上信息对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用msys64+vs2019在编译ffmpeg](https://download.csdn.net/download/ihmhm12345/13116875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用MSYS2 + VS2022编译FFmpeg](https://blog.csdn.net/powang2011/article/details/122724685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值