windows下msys2编译64位的ffmpeg源码

news2024/10/6 6:44:18

目前遇到过两次需求,需要编译ffmpeg源码。网上下载的编译好的源码里面可能不全,很多时候需要自行编译源码。本文介绍自行编译ffmpeg64位源码(32位通过相似的方式为编译成功,不知道原因)


环境:

  • 2023.5.4下载的最新版msys2
  • ffmpeg 4.3.2源码
  • windows操作系统

首先需要msys2软件和ffmpeg源码

链接:https://pan.baidu.com/s/1j9121MdJQVkkkET_KPPH-g?pwd=8fr6
提取码:8fr6
–来自百度网盘超级会员V4的分享

其中包含我已编译好的库


1.下载msys2(该软件用于在windows上模拟linux环境)

2.更新msys2下载源

找到msys2的安装目录,默认安装名是msys64,这里我因为自己的需要改成了msys2,以我的路径为例D:\1c++\msys2\etc\pacman.d,到pacman.d的文件夹下,可能你的文件数量和我的截图数量不一样,但不重要,看下图这三个文件

image-20230505092151608

打开配置文件,把Primary下面的部分注释掉,换上新的源(只换Primary的那部分即可)

image-20230505092003334

mirrorlist.mingw64 文件(因为是编译64位的ffmpeg源码,所以本质上只需更新该文件即可, mirrorlist.mingw32 和mirrorlist.msys可不更新),这里我是放了两个下载源,清华大学的下载源失效了就用第二个下载源,谁在前,就默认使用哪个下载源

## 清华大学
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64
## 中科大
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64

3.打开mingw64.exe

image-20230504145135490

先更新msys2的秘钥(这一步是防止在下载软件包的时候报错)

pacman -S msys2-keyring

使用命令,更新升级软件

pacman -Syu

所有操作y即可,更新可能需要一段时间。输入最后一个y可能端口会退出,重新打开即可

image-20230504145924992

4.通过以下命令,逐个安装(如果-S提示出错,就用-Sy安装,即尝试pacman -Sy mingw-w64-x86_64-toolchain)

# 编译工具链
pacman -S mingw-w64-x86_64-toolchain
 
pacman -S mingw-w64-x86_64-yasm
 
pacman -S mingw-w64-x86_64-SDL2
 
pacman -S mingw-w64-x86_64-fdk-aac
 
pacman -S mingw-w64-x86_64-x264
 
pacman -S mingw-w64-x86_64-x265
 
# 需要单独安装make
pacman -S make

我安装的软件包是比较多的,但也比较全,读者可根据自己的需求去选择。这里的安装,尤其是toolchain和x264的安装如果报错,则重新从步骤3更新msys2的秘钥(我在装的过程中,x264出现小的报错,但并未影响。)

5.在mingw中进入源码目录下,注意路径中的斜杠(这里的命令都应是linux命令行的格式)

image-20230504153131374

image-20230504153209801

6.用一下命令开始编译,编译后的库放在了msys2的安装目录的/usr/local/ffmpeg目录下(我这里选择编译的库较多,但比较全。读者可自行选择)

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --enable-gpl  --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265

image-20230504153539260

这里会卡住好一会,耐心等待命令行提示,只要不报error就没事(这里我等了20分钟,测试发现不同电脑的速度不同,快的话大概10分钟就可以了)

最后进行编译和安装

make -j8 && make install

-j8好像是指cpu的核数,这里不加也行,即可以直接make && make install,这里短则10分钟,长则一小时都有可能

编译结束后会对编译的库和文件进行检查,若未出现明显的ERROR字样,则编译成功

image-20230505092324510

image-20230505093347582

出现类似这样的话则失败了

image-20230505092432532

7.编译好后,在msys2安装目录\usr\local\ffmpeg下有对应的动态库和静态库文件

image-20230505092748023

此时bin目录中的ffmpeg、ffprobe、ffplay还是没法使用的,因为缺少相关的dll,需要从MSYS2安装目录/mingw64/bin中拷贝,或者将MSYS2安装目录/mingw64/bin配置到环境变量Path中。

需要拷贝的dll有:libwinpthread-1、SDL2、zlib1.dll、liblzma-5、libbz2-1、libiconv-2、libgcc_s_seh-1、libstdc+±6、libx265、libx264-159、libfdk-aac-2。

因为拷贝起来比较麻烦,所以我打算在环境变量里配置一下(环境变量第一条是自行编译的库的bin目录,第二条是mingw64/bin中的一些库)

image-20230505094312041

测试一下ffmpeg的版本

image-20230505094213672


码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

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

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

相关文章

团队密码管理器Passbolt的安装

老苏下载了吴恩达联手 OpenAI 推出的 Prompt for developer 课程,总长度大概在一个半小时左右,可以让我们学习正确的 ChatGPT Prompt 工程 虽然课程对话是英文,但有中文字幕,课程地址:https://www.aliyundrive.com/s/…

[Gitops--9]微服务项目sangomall代码配置修改及资源清单文件

微服务项目sangomall代码配置修改及资源清单文件 1. 中间件的地址 1.1 Nacos 集群外 nacos-server.intra.com 192.168.31.211集群内 nacos-server.sangomall.svc.cluster.local. nacos-server.sangomall.svc.cluster.local.:88481.2 Redis 集群内 redis.sangomall.svc.c…

ipad有必要用手写笔吗?电容笔和Apple pencil区别

与Apple Pencil最大的不同之处,在于普通的电容笔并不具备着重力压感,而是会给人一种倾斜的压感。如果不是频繁作画,那就用一支普通的电容笔。这种电容笔不但可以用于办公室,也可以用于记笔记、做练习。再说了,一支苹果…

深入理解 Linux 内核(二)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 深入理解 Linux 内核(二) Linux 设备驱动程序 Linux设备驱动开发详解 文章目录 系列文章目录五、定时测量1、时钟和定时器电路2、Linux 计时体系结构(1)计时体系机构的数据…

200G 400G光模块介绍

200G 光模块封装有2种,分别是QSFP56和QSFP-DD。 200G QSFP56有2种光模块,第一种是200G QSFP56 SR4,第二种是200G QSFP56 FR。 200G QSFP56 SR4的封装形式是QSFP56,速率是200G,波长是850nm,最远传输距离是10…

儿童书写台灯哪个牌子比较好?盘点护眼学生用台灯品牌排行

想要拥有一个健康的视力对于我们多么重要,日常生活多么不便利,就是像家里孩子考学时视力也是对于未来专业选择的一个阻碍。 想要孩子不吃近视的苦,从小就要开始抓孩子对于视力和眼睛的呵护。 养成好习惯必须保持一个正确的学习姿势&#xff…

redis 持久化 RDB + AOF

redis 持久化 RDB AOF 1.redis持久化----两种方式 RDB(Redis DataBase)和AOF(Append Only File) RDB,简而言之,就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上 AOF&am…

视频剪辑学习 pr 中视频

2023年中视频学习计划,学习资料全套视频。全网一手资料,有意者V: 第一章- 基础知识 第二章- 素材获取 第三章- 文案创作及搬运改写 第四章- 智能配音与自己配音修音 第五章- 剪辑基础快速入门 手机剪映零基础快速入门 电脑剪映零基础快速入门…

360SEO 360搜索引擎算法的基础知识

360搜索引擎是中国的一家互联网搜索引擎公司,由奇虎360公司推出。作为中国互联网领域的知名品牌之一,它的搜索算法一直备受关注和研究。那360搜索引擎有哪些算法的基础知识呢? 一、概述 360搜索引擎算法是一个非常庞大、复杂的系统&#xff…

科研人的利器:利用New Bing五分钟读完一篇论文

大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,拉你进群。 New Bing『新必应』是微软一款集成了ChatGPT的搜索引擎,它以聊天的方式来进行信息搜索,这不同过去几十年通过对话框搜索信…

Linux之yum原(三)

最近学习Linux,利用 yum 下载软件的时候,总是报错: 错误:为仓库 appstream 下载元数据失败 : Cannot prepare internal mirrorlist: No URLs in mirrorlist因此小编决定更换一下 yum 源,小编用的是 CentOS8.5.2111&am…

Scala Option类型,异常处理,IO,高阶函数

Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…

记录-对象有哪些继承方式

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 原型链 温故而知新: 构造函数、原型和实例的关系:  每个构造函数都有一个原型对象,原型有一个属性指回构造函数,实例有一个内部指针指向原型。 思考…

【Java校招面试】基础知识(六)——计算机网络

目录 前言一、TCP协议 / UDP协议二、HTTP协议后记 前言 本篇主要介绍计算机网络的相关内容。 “基础知识”是本专栏的第一个部分,本篇博文是第六篇博文,如有需要,可: 点击这里,返回本专栏的索引文章点击这里&#xf…

Leetcode303. 区域和检索 - 数组不可变

Every day a leetcode 题目来源&#xff1a;303. 区域和检索 - 数组不可变 解法1&#xff1a;暴力 代码&#xff1a; class NumArray { public:vector<int> v;NumArray(vector<int> &nums){v nums;}int sumRange(int left, int right){int sum 0;for (in…

ChatGPT镜像网站【免费白嫖】

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT&#xff08;Generative Pretrained Transformer&#xff09;模型的聊天机器人&#xff0c;它可以对用户提出的问题做出回答&#xff0c;同时还能够进行精准的语言理解和回复&#xff0c;较好地满足了人们与机器人之间…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

[架构之路-183]-《软考-系统分析师》-13-系统设计 - 高内聚低耦合详解、图解以及技术手段

目录 第1章 什么是高内聚低耦合 1.1 概念 1.2 目的 1.3 什么时候需要进行高内聚低耦合 1.4 什么系统需要关注高内聚、低耦合 第2章 分类 2.1 内聚的分类 2.2 耦合的分类 第3章 增加高内聚降低耦合度的方法 3.1 增加高内聚 3.2 降低耦合度 第1章 什么是高内聚低耦…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…

cmd 批量ping命令

cmd 批量ping命令 1、批量ping 1个网段2、批量ping多个网段 1、批量ping 1个网段 ping 1个网段 for /l %X in (2,1,254) do (ping -n 2 10.1.2.%X && echo 10.1.2.%X >> ok.txt || echo 10.1.2.%X >> no.txt)命令说明&#xff1a; %l 表示在(2,1,254) 按…