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://www.mzph.cn/bicheng/50745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua 游戏架构 之 游戏 AI (四)ai_autofight_find_target

定义一个名为 ai_autofight_find_target 的类,继承自 ai_base 类。 lua 游戏架构 之 游戏 AI (一)ai_base-CSDN博客文章浏览阅读237次。定义了一套接口和属性,可以基于这个基础类派生出具有特定行为的AI组件。例如,可…

大数据-50 Redis 分布式锁 乐观锁 Watch SETNX Lua Redisson分布式锁 Java实现分布式锁

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Docker+consul容器服务的更新与发现

1、Consul概述 (1)什么是服务注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点…

Spark实时(三):Structured Streaming入门案例

文章目录 Structured Streaming入门案例 一、Scala代码如下 二、Java 代码如下 三、以上代码注意点如下 Structured Streaming入门案例 我们使用Structured Streaming来监控socket数据统计WordCount。这里我们使用Spark版本为3.4.3版本,首先在Maven pom文件中导…

在 Spring Boot 中使用 Filters 实现请求过滤和预处理

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 什么是过滤器 过滤器(Filter)是一种在Web应用中用于拦截和处理HTTP请求和响应的对象。 在Java Web开发中,过滤器是实现特定功能,如认证、日志记录和字符编码处…

X-AnyLabeling标注软件使用方法

第一步 下载 官方X-AnyLabeling下载地址 github:X-AnyLabeling 第二步 配置环境 使用conda创建新的虚拟环境 conda create -n xanylabel python3.8进入环境 conda activate xanylabel进入X-AnyLabeling文件夹内,运行下面内容 依赖文件系统环境运行环…

MyBatisPlus复习

目录 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具,hutool工具 逻辑删除 枚举处理器 Json处理器 分页 自定义sql swagger工具 IService批量新增 代码生成器 DB静态工具,hutool工具 逻辑删除 枚举处理器 Json处理器 分页

ks滑块验证码逆向分析与python识别

文章目录 1. 写在前面3. 接口分析3. 算法实现 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

大模型技术:发展历程、经典模型、微调与应用[更新中...]

文章目录 一、预训练语言模型发展历程二、经典的Pre-trained任务2.1 Masked Language Modeling2.2 Next Sentence Prediction 三、Task-specific Fine-tuning 任务3.1 Single-text Classification (单句分类)3.2 Sentence-pair Classification (句子匹配/成对分类)3.3 Span Tex…

谷粒商城实战笔记-71-商品服务-API-属性分组-前端组件抽取父子组件交互

文章目录 一,一次性创建所有的菜单二,开发属性分组界面1,左侧三级分类树形组件2,右侧分组列表3,左右两部分通信3.1 子组件发送数据3.2,父组件接收数据 Vue的父子组件通信父组件向子组件传递数据子组件向父组…

【BUG】已解决:The above exception was the direct cause of the following exception:

The above exception was the direct cause of the following exception: 目录 The above exception was the direct cause of the following exception: 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c…

【杰理蓝牙开发】AC695x 音频部分

本文主要记录 杰理蓝牙audio接口的使用,包括ADC和DAC原理的介绍和API接口的使用。 【杰理蓝牙开发】AC695x 音频部分 0. 个人简介 && 授权须知1. ADC【音频数据采集】硬件部分1.1 单片机引脚1.2 硬件电路设计1.3 MIC 输入通路解释 2. 【DAC】音频信号编解码…

Super 4PCS配准算法

Nicolas Mellado,CNRS(Centre national de la recherche scientifique,法国国家科学研究中心)的研究员,在IRIT(Institut de Recherche en Informatique de Toulouse,图卢兹计算机科学研究所&…

SAPUI5基础知识20 - 对话框和碎片(Dialogs and Fragments)

1. 背景 在 SAPUI5 中,Fragments 是一种轻量级的 UI 组件,类似于视图(Views),但它们没有自己的控制器(Controller)。Fragments 通常用于定义可以在多个视图中重用的 UI 片段,从而提…

linux系统安装pytorch_中文地址命名实体识别案例

命名实体有关文章参考这篇文章 中文地址命名实体识别训练和预测 win10系统安装cuda环境参考这篇文章 搭建Pytorch的GPU环境超详细 1、下载python https://www.python.org/downloads/release/python-368/ 2、下载python包 https://pypi.org/search/?q=transformers 1、搜…

如何录制电脑内部声音?全方位介绍电脑录音软件:8款在线录音!(2024重新整理)

如何录制电脑内部声音?不管是娱乐圈还是现实生活,【录音】这个功能的重要性不言而喻。而电脑录音已在影视配音、音视频剪辑、会议记录、在线教育等多个领域发光发热! 本文将为您推荐8款电脑录音软件,并详细介绍电脑录音的多种方式…

Python番外篇:变量是盒子还是标签

引言 前面通过几十篇文章,大概把Python的一些比较实用的基础做了一些介绍,学会这些,基本能应付日常的小的需求开发了,写一些小工具,提高工作的处理效率。 接下来,准备开始进入一个新的篇章,也…

C#如何引用dll动态链接库文件的注释

1、dll动态库文件项目生成属性中要勾选“XML文档文件” 注意:XML文件的名字切勿修改。 2、添加引用时XML文件要与DLL文件在同一个目录下。 3、如果要是添加引用的时候XML不在相同目录下,之后又将XML文件复制到相同的目录下,需要删除引用&am…

当设计模式牵手LLM

模版方法模式 何为模版设计模式 想象一下 如果我们要泡一杯茶 我们要循序渐进地 煮水温杯注水浸茶茶水入杯加点配料 如此,泡茶的工序就完成了,那么模板方法模式,相信各位也有了一定的概念:定义了一个算法的骨架,而…

UDP的报文结构及其注意事项

1. 概述 UDP(User Datagram Protocol)是一种无连接的传输层协议,它提供了一种简单的数据传输服务,不保证数据的可靠传输。在网络通信中,UDP通常用于一些对实时性要求较高、数据量较小、传输延迟较低的应用&#xff0c…