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

news2024/9/20 12:33:18

        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/sh

OPTIONS="--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 shell

INSTALL_DIR="./../../../build64/"
target_processor='x64'
path=$(which cl)

if cl; then
    echo
else
    echo "please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64'"
    echo "and then launch msys bash shell from there"
    exit 1
fi

if [[ $path  == *$target_processor* ]]; then
    echo
else
    echo "64 bit target not set, please launch 'visual studio command prompt' and run '..\vcvarsall.bat amd64 | x86_amd64 | amd64_x86'"
    exit 1
fi

cmake -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 ]
then
    nmake
fi

nmake 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.coloradmin.cn/o/1952141.html

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

相关文章

企业创建百度百科有什么好处?

现如今,网络越来越发达,网络营销的方法百花齐放,对于企业和品牌来说,想要推广产品,就是提升知名度,让更多的人知道企业和品牌。 而百度现如今在中国的搜索市场上仍是巨头,而在百度上有权威,以及能提升企业知名度的就是百度百科了。 今天&…

Linux基础复习(二)

前言 本文介绍了一下Linux命令行基本操作及网络配置 一、 命令行提示含义 [当前用户主机名 工作目录]$ 若当前用户是root,则最后一个字符为# 否则,最后一个字符为$ 二、常用Linux命令及其解释 修改主机名 一般在创建一台主机后会使用hostname相关命…

《python程序语言设计》第6章13题 数列求和编写一个函数计算

正确代码 def sumNumber(integer_num):print(" i || m(i)")print("-"*30)a 0for i in range(1, integer_num 1):a i / (i 1)print("{:4d} || {:.4f}".format(i, a))sumNumber(20)结果如下

win11 安装 Gradle

一、win11 安装Gradle(7.5.1): 1.1、下载二进制包 Gradle下载页面 1.2、配置环境变量 变量名:GRADLE_HOME 变量值(二进制包解压路径):D:\develop-tool\gradle-7.5.1 变量名:GRADLE_USER_HOME 变量值&a…

qt总结--翻金币案例

完成了一个小项目的在qt5.15.2环境下的运行,并使用NSIS editNSIS打包完成.有待改进之处:增加计时功能,随机且能通关功能,过关后选择下一关功能.打包后仅仅有安装包有图标 安装后应用图标并未改变 在qt .pro中有待改进对qt的基本操作和帮助文档有了基本的认识.对C制作小游戏有了…

Linux-IO操作之fcntl 和 ioctl

fcntl函数,也就是file control,提供了对文件描述符的各种操作。另一个常见的控制文件描述符的属性和行为的系统调用是ioctl,而且ioctl比fcntl能够执行更多的控制。但是,对于控制文件描述符常见的属性和行为,fcntl函数是…

认证中心:基于cookie和session实现单点登陆

流程图 参数 不同域名之下(不同父域名) cookiesessionredis 流程追踪 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数 sso认证中心发现用户未登录,将用户引…

Adobe Photoshop(PS) 2024软件下载(附下载链接)+PS教程

一、简介 Adobe Photoshop 2024(简称PS2024)是全球公认的专业图像处理和设计软件,它为摄影师、设计师和艺术家等创意工作者提供了强大的工具和功能。这款软件是Adobe Creative Cloud创意云桌面程序中心中的明星产品,凭借其出色的…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表,是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷,可以在短时间内快速收集反馈信息。具体效果如下所示: 2、思路 此调查问卷采用服务器客户端的方式进行设计,服…

乐尚代驾八订单执行三

司机到达代驾终点,代驾结束了。结束代驾之后, – 获取额外费用(高速费、停车费等) – 计算订单实际里程(实际与预估有偏差) – 计算代驾实际费用 – 系统奖励 – 分账信息 – 生成最终账单 计算订单…

【计算机网络】RIP路由协议实验

一:实验目的 1:掌握在路由器上配置RIPv2。 二:实验仪器设备及软件 硬件:RCMS交换机、网线、内网网卡接口、Windows 2019操作系统的计算机等。具体为:三层交换机1台、路由器2台。 软件:wireshark软件、记…

Qwen2-Audio:对话式AI突破,让你“声”临其境

阿里巴巴最新推出的音频处理模型Qwen2-Audio,不仅能直接用语音聊天,还能像一位专业的听觉大师一样分析各种声音,功能强大得令人难以置信。 Qwen2-Audio可以通过语音聊天和音频分析两种方式与用户互动,用户无需区分这两种模式&…

请问C语言到底允不允许动态定义数组大小?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「c语言的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 按照谭浩强的第五版C程序设…

vue实现电子签名、图片合成、及预览功能

业务功能:电子签名、图片合成、及预览功能 业务背景:需求说想要实现一个电子签名,然后需要提供一个预览的功能,可以查看签完名之后的完整效果。 需求探讨:后端大佬跟我说,文档我返回给你一个PDF的oss链接…

MySQL客户端命令一节将.sql文件导入MySQL

MySql客户端命令 直接输入SQL语句 使用MySQL客户端连接到服务器之后,可以发送SQL语句到服务器执行,并且以;和\g, \G作为结束不同的结束方式显示内容有所不同** TIPS: ;和\g结尾以表格的形式显示结果\G以行的形式显示结果 在连接到服务器之后…

小程序获取订阅消息状态

uni.getSetting获取用户的当前设置 uni.getSetting({success(res) {console.log(res)} })1. 当withSubscriptions:true的时候,只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息。 2.返回值中的subscriptionsSetting表示…

自动驾驶-机器人-slam-定位面经和面试知识系列05之常考公式推导(02)

这个博客系列会分为C STL-面经、常考公式推导和SLAM面经面试题等三个系列进行更新,基本涵盖了自己秋招历程被问过的面试内容(除了实习和学校项目相关的具体细节)。在知乎和牛客(牛客上某些文章上会附上内推码)也会同步…

【运维自动化-配置平台】模型及模型关联最小化实践

蓝鲸智云配置平台,以下简称配置平台 我们知道主机是配置平台最常见的管控资源对象,在业务拓扑里可以通过划分模块来清晰的可视化管理;那其他资源如何通过配置平台来纳管呢,比如网络设备交换机。场景需求:如何把交换机…

怎么培养政府机关的公文写作能力?

AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量 公文写作千万不能零起步,你有时间慢慢学习,但领导哪有时间等你慢慢进步啊。 如果问写公文有什么捷径,那就不得不靠「AI写作工具…

Study--Oracle-07-ASM相关参数(四)

一、ASM主要进程 1、ASM主要后台进程 ASM实例除了传统的DBWn、LGWR、CKPT、SMON和PMON等进程还包含如下几个新后台进程: 2、牛人笔记 邦德图文解读ASM架构,超详细 - 墨天轮 二、数据库实例于ASM实例之间的交互关系 数据库实例与ASM实例之间的交互关系涉及多个步骤和过程,…