Windosw下Visual Studio2022编译FFmpeg(支持x264、x265、fdk-acc)

        FFmpeg 7.0 版本移除了 6.0 之前已弃用的 API,无法向下兼容。所以编译的版本选择FFmpeg 6.1.1。

一、安装Visual Studio2022

可参考另外一篇文章:Windows安装Visual Studio2022 + QT5.15开发环境_qt5.15.2 vs2022-CSDN博客

 二、安装MSYS2

下载地址:https://www.msys2.org/

 

百度网盘链接:https://pan.baidu.com/s/1DWarXxYEXn5HsLPc32eY_g?pwd=imcs 
提取码:imcs 

安装完成之后,先把安装⽬录(默认路径 c:\msys64下的msys2_shell.cmd中注释掉的 rem set MSYS2_PATH_TYPE=inherit 改成 set MSYS2_PATH_TYPE=inherit ,这是为了将vs的环境继 承给MSYS2

 添加国内镜像,下载源码用

修改C:\msys64\etc\pacman.d中mirrorlist.msys,在## Primary下面添加清华大学的源镜像

Server = https://mirrors.tuna.tsinghua.edu.cn/msys/$arch/

三、安装编译环境
 1、右键使用管理员身份打开x64 Native Tools Command Prompt for VS 2022

 

进入msys64的安装目录,执行msys2_shell.cmd -use-full-path

 

这样会打开MSYS2 的终端:  

 

 MSYS2窗口打开后,先把基本的环境安装好

#pacman -Syu 一键安装和升级所有的库
pacman -Syu
#安装编译ffmpeg所需的包
pacman -S gcc
pacman -S make
pacman -S pkg-config
pacman -S diffutils
pacman -S yasm
pacman -S nasm#避免与msvc的link冲突
mv /usr/bin/link.exe /usr/bin/link.exe.bak
2、安装git:

pacman -S git

3、下载源码
  • x264地址:git clone http://git.videolan.org/git/x264.git 或  git clone https://code.videolan.org/videolan/x264.git
  • x265地址:git clone https://bitbucket.org/multicoreware/x265_git.git
  • fdk-aac地址:git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git

 ffmpeg下载地址往后看(此处可忽略)

新建D:\build文件夹并将源代码复制至此

四、编译依赖库 
1、编译x264 

--enable-shared:编译成动态库(建议)

--enable-static:编译成静态库

D:\build\x264目录下新建build.sh(-j 线程数量,根据自己电脑情况调整)

#!/bin/shOPTIONS="--enable-shared"BUILD_DIR="./../build64"CC=cl ./configure $OPTIONS --prefix=$BUILD_DIR/make -j16
make install
make clean

在msys2窗口中cd进入x264目录编译

cd /d/build/x264
sh build.sh

编译完后输出如下文件 :

2、编译x265 

D:\build\x265_git\build\msys-cl目录下修改make-Makefiles-64bit.sh

#!/bin/sh
# This is to generate visual studio builds with required environment variables set in this shell, useful for ffmpeg integration
# Run this from within an MSYS bash shellINSTALL_DIR="./../../../build64/"
target_processor='x64'
path=$(which cl)if cl; thenecho
elseecho "please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64'"echo "and then launch msys bash shell from there"exit 1
fiif [[ $path  == *$target_processor* ]]; thenecho
elseecho "64 bit target not set, please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64 | x86_amd64 | amd64_x86'"exit 1
ficmake -G "NMake Makefiles" -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4"  ../../source
if [ -e Makefile ]
thennmake
finmake install

在msys2窗口中cd进入x265_git/build/msys-cl目录编译

cd /d/build/x265_git/build/msys-cl
sh make-Makefiles-64bit.sh

编译完后输出如下文件 :

3、编译fdk-aac

安装cmake-gui,下载地址:

https://cmake.org/download/

点击Finish,然后修改输出目录

用Visual Studio2022(有问题请用管理员权限)打开生成的工程fdk-aac.sln

 

依次编译生成fdk-aac、INSTALL 

编译完成后输出如下: 

 

4、编译SDL2 (ffplay需要,不编译ffplay请跳过)

git clone --depth 1 https://github.com/libsdl-org/SDL.git -b SDL2 

Visual Studio2022(用管理员权限)打开生成的工程SDL2.sln

  依次编译生成SDL2、INSTALL

五、编译FFmpeg 

修改D:\build\build64\lib\pkgconfig内的fdk-aac.pc、x264.pc、x265.pc、sdl2.pc内prefix值

 

进入目录D:\build\build64\lib,将 libx264.dll.lib 重命名为 libx264.lib ,libx265.lib 重命名为 x265.lib 

下载FFmpeg源码

方式一:git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git -b release/6.1

方式二:下载地址:https://ffmpeg.org/download.html#releases 

修改fftools/opt_common.c 源码文件, 注释掉 CC_IDENT 所在行,如下所示: 

static void print_program_info(int flags, int level)
{const char *indent = flags & INDENT? "  " : "";av_log(NULL, level, "%s version " FFMPEG_VERSION, program_name);if (flags & SHOW_COPYRIGHT)av_log(NULL, level, " Copyright (c) %d-%d the FFmpeg developers",program_birth_year, CONFIG_THIS_YEAR);av_log(NULL, level, "\n");//av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);av_log(NULL, level, "%sconfiguration: " FFMPEG_CONFIGURATION "\n", indent);
}

 修改fftools/ffprobe.c 源码文件, 注释掉 CC_IDENT 所在行,如下所示: 

static void ffprobe_show_program_version(WriterContext *w)
{AVBPrint pbuf;av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED);writer_print_section_header(w, NULL, SECTION_ID_PROGRAM_VERSION);print_str("version", FFMPEG_VERSION);print_fmt("copyright", "Copyright (c) %d-%d the FFmpeg developers",program_birth_year, CONFIG_THIS_YEAR);//print_str("compiler_ident", CC_IDENT);print_str("configuration", FFMPEG_CONFIGURATION);writer_print_section_footer(w);av_bprint_finalize(&pbuf, NULL);
}

在msys中切换到ffmpeg目录 

cd /d/build/ffmpeg/

配置pkg-config 

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/d/build/buil64d/lib/pkgconfig 

CC=cl ./configure --prefix=/d/build/build64/ffmpeg \
--toolchain=msvc \
--arch=x64 \
--enable-cross-compile \
--enable-gpl \
--enable-nonfree \
--enable-libfdk-aac \
--enable-libx264 \
--enable-libx265 \
--enable-filter=delogo \
--enable-debug \
--disable-optimizations \
--enable-shared \
--enable-sdl2 \
--extra-cflags="-I/d/build/build64/include" \
--extra-ldflags="-L/d/build/build64/lib"

编译:make -j16

安装:make install

生成动态库及可执行程序即大功告成。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3268880.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

宝塔Docker部署Nuxt3 BBS项目

体验地址 BBS:http://bbs.sourcebyte.vip Nuxt3:https://nuxt.com.cn BBS项目介绍 BBS是开源字节最新研发的社区项目,包含产品中心,需求墙,工具,资讯4大板块。 1、产品中心:开源字节有众多…

Kafka知识总结(分区机制+压缩机制+拦截器+副本机制)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 分区机制 分区策略 分区策略是决定生产者将消息发送到哪个分区的…

MySQL 存储

关系型数据库是基于关系模型的数据库, 而关系模型是通过二维表来保存的,所以关系型数据库中的数据的村方式就是行列组成的表,每一列代表一个字段,每一行代表一条记录。表可以看作某个实体的集合,实体之间存在的联系需要…

【区块链】如何发行自己的加密货币到以太坊测试网络,remixIDE发行自己的数字货币

如何发行自己的加密货币到以太坊测试网络 环境 reminx在线编辑器:https://remix.ethereum.org/安装有小狐狸钱包插件(MetaMask) 如何部署代币? 创建一个名字叫做HelloMyToken.sol的文件。编写好智能合约,这边我要发…

bug+测试用例

bug的概念: 1.当且仅当规格说明是存在的并且正确,程序与规格说明之间的不匹配才是错误。 2.当需求规格说明书没有提到的功能,判断标准以最终用户为准;当程序没有实现其最终用户合理预期的功能要求时,就是软件错误 bug…

大模型算法面试题(十三)

本系列收纳各种大模型面试题及答案。 1、领域模型词表扩增是不是有必要的? 领域模型词表扩增是否必要,取决于多个因素,主要包括以下几个方面: 领域复杂性:如果领域本身非常复杂,包含大量专业术语、缩写、行业特定表达…

mybatis插入mysql数据:中文乱码

1.问题描述 中文字段乱码&#xff0c;不能正常显示 2.解决方法 猜测是未指定编码造成的&#xff0c;在配置文件mybatis-config.xml添加配置。 <environment id"development"><transactionManager type"JDBC"/><dataSource type"POO…

golang设置远程调试

1. 目标机器构建安装dlv https://github.com/go-delve/delve go build之后将编译号的dlv命令路径添加到PATH里 2. 目标机器下载源代码并且运行dlv dlv debug --headless --listen:2345 --api-version2 --accept-multiclient 3.本机添加go remote 4. 设置断点即可

web前端开发一、VScode环境搭建

1、VScode安装live server插件&#xff0c;写完代码后&#xff0c;保存就会在浏览器自动更新&#xff0c;不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 &#xff01; 4、选择第一个&#xff0c;然后回车&#xff0c;就会自动输入html的标准程序 5、…

Python酷库之旅-第三方库Pandas(047)

目录 一、用法精讲 166、pandas.Series.max方法 166-1、语法 166-2、参数 166-3、功能 166-4、返回值 166-5、说明 166-6、用法 166-6-1、数据准备 166-6-2、代码示例 166-6-3、结果输出 167、pandas.Series.mean方法 167-1、语法 167-2、参数 167-3、功能 167…

Mysql中如何实现两列的值互换?给你提供些思路。

文章目录 Mysql中如何实现两列的值互换1、第一感觉此sql应该能处理问题了2、需要一个地方存要替换的值&#xff0c;不然两列搞不定。2.1 加第三列&#xff1f;&#xff08;能解决&#xff0c;但是看起来呆呆&#xff09;2.2 上临时表&#xff08;搞点弯路走走&#xff09; 示例…

【VSCode实战】Golang无法跳转问题竟是如此简单

上一讲【VSCode实战】Go插件依赖无法安装 – 经云的清净小站 (skycreator.top)&#xff0c;开头说到了在VSCode中Golang无法跳转的问题&#xff0c;但文章的最后也没给出解决方案&#xff0c;只解决了安装Go插件的依赖问题。 解决了插件依赖问题&#xff0c;无法跳转的问题也离…

接口测试之测试原则、测试用例、测试流程详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、接口的介绍 软件测试中&#xff0c;常说的接口有两种&#xff1a;图形用户接口&#xff08;GUI&#xff0c;人与程序的接口&#xff09;、应用程序编程接口&…

LK漏感值在网络变压器测试中是否有很大的作用?

今天客户一个产品异常问题&#xff0c;就是说LK漏感值严重超标产品规格书参数&#xff0c;今天我们讲讲这个参数在网络变压器其中的影响。LK漏感值在网络变压器的测试和性能评估中扮演着重要的角色。漏感&#xff0c;或称为漏磁场感抗&#xff0c;是指变压器中不参与主要能量传…

卷积的意义及其派生(一)

1.卷积的意义 1.1从LTI的角度看 卷积最开始其实是信号处理中用来描述线性移不变系统Linear time-invariant systems的。线性&#xff0c;表明可以叠加&#xff0c;信号可以拆分成脉冲的响应&#xff1b;时不变&#xff0c;指信号不随着时间的迁移改变&#xff0c;意味着能量守…

机器学习(五) -- 无监督学习(1) --聚类1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;7&#xff09; --SVM2 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 无监督学习&#xff08;1&#xff09; --聚类2 前言 tips&#xff1a;标题前有“***”的内容…

Python酷库之旅-第三方库Pandas(048)

目录 一、用法精讲 171、pandas.Series.nlargest方法 171-1、语法 171-2、参数 171-3、功能 171-4、返回值 171-5、说明 171-6、用法 171-6-1、数据准备 171-6-2、代码示例 171-6-3、结果输出 172、pandas.Series.nsmallest方法 172-1、语法 172-2、参数 172-3、…

驾驭代码的无形疆界:动态内存管理揭秘

目录 1.:为什么要有动态内存分配 2.malloc和free 2.1:malloc 2.2:free 3.calloc和realloc 3.1:calloc 3.1.1:代码1(malloc) 3.1.2:代码2(calloc) 3.2:realloc 3.2.1:原地扩容 3.2.2:异地扩容 3.2.3:代码1(原地扩容) 3.2.3:代码2(异地扩容) 4:常见的动态内存的错误…

【算法】傅里叶变换

一、引言 傅里叶变换是一种在信号处理、图像处理、通信等领域中广泛应用的数学工具。它可以将信号从时域转换到频域&#xff0c;从而揭示信号的频率成分。 二、算法原理 傅里叶变换的基本思想是将一个时域信号分解为多个不同频率的正弦和余弦波的叠加。对于连续信号&#xff0c…

【轻量化神经网络的MCU部署/边缘计算:基于GD32H7】开源GD32AI-ModelZoo工具的完善与详细使用说明

本文档将对gd32ai-modelzoo中的使用方法进行更加细致的介绍。并对原博主提供的gd32ai-modelzoo部分代码进行了修改&#xff0c;使其可以更加顺利地运行。 原开源工程地址&#xff1a;https://github.com/HomiKetalys/gd32ai-modelzoo 原作者博客&#xff1a;https://mbb.eet-ch…