msys2+minGW方案编译ffmpeg的最佳实践

news2024/11/20 1:36:39

一、Win10 64bit编译环境的建立

1)从http://www.msys2.org/下载 msys2-x86_64-xxx.exe

2) 安装msys2到默认路径 C:\msys64\

3) 运行MSYS2 w64

4)执行 pacman -Syu 更新系统当出现提示时,选择y

5) 当窗口关闭时,重新打开msys2 w64 环境,如步骤3

6)再次执行 pacman -Su 当出现提示时,选择y

二、安装其他组件

1)pacman -S make //安装make命令工具

2)pacman -S diffutils //安装比较工具

3)pacman -S yasm //安装yasm汇编语言编译器,ffmpeg使用SIMD汇编指令进行加速

4)pacman -S mingw-w64-x86_64-gcc //64bit的mingw编译器

5)pacman -S mingw-w64-i686-gcc //32bit 的mingw编译器

6)pacman -S mingw-w64-x86_64-gtk3 //64bit的gtk库

7)pacman -S mingw-w64-i686-gtk3/32bit的gtk库

8)pacman -S nasm//安装汇编语言编译器,x264使用SIMD汇编指令进行加速

以上主要安装make工具,yasm,nasm汇编器(ffmpeg和x264使用了SIMD之类加速),gcc编译器,gtk图像框架。

三、下载pkg-config工具

pkg-config 工具在编译时可以根据xxx.pc查找对应的头文件和库。PC文件一般原理如下:

1. 把你的pc文件,直接放到/usr/lib/…默认路径下。

2. 把你的pc文件的路径写到PKG_CONFIG_PATH环境变量里。

比如,你可以在/etc/.bashrc的文件末尾添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/test/ffmpeg_build/lib/pkgconfig

export PKG_CONFIG_PATH

那么,pkg-config就会到/home/test/ffmpeg_build/lib/pkgconfig寻找*.pc文件

一般pkg-config 通过 pkg-config xxx –libs –cflags xxx就是你要找得库,通过xxx.pc可以分析该库头文件和库文件在哪个目录

比如查找 pkg-config libavcodec --libs --cflags

1)下载64bit工具

http://ftp.gnome.org/pub/gnome/binaries/win64/dependencies/pkg-config_0.23-2_win64.zip

解压 pkg-config.exe to C:\msys64\mingw64\bin

2)下载32bit工具

http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-config_0.26-1_win32.zip

解压 pkg-config.exe to E:\msys64\mingw32\bin

四、拷贝intl.dll到以下文件夹

1)cd C:\msys64\mingw32\bin

2)cp libintl-8.dll intl.dll

3)cd C:\msys64\mingw64\bin

4)cp libintl-8.dll intl.dll

intl.dll 库是Windows系统很重要库,缺少它可能软件运行会异常。

五、下载源代码并编译

1)从ffmpeg官网下载源代码到C:\mycode

2)从 C:\msys64\中运行msys2_shell.cmd -mingw64

3) cd C:\mycode\ffmepg

4)执行编译即可

六、本文为了方便,写了一个脚本。

1)编译64bit

a) 从 C:\msys64\中运行msys2_shell.cmd -mingw64

b) ./ffmpeg-build-win release 64

2)编译32bit

a) 从 C:\msys64\中运行msys2_shell.cmd -mingw32

b) ./ffmpeg-build-win release 32

如上图所示编译成功,非常顺利。

七、总结

在编译ffmpeg之前的要完成依赖库编译,也是同样方法的,基本思想可以理解msys2环境是一个Linux环境,minGW工具链就是该Linux默认的编译工具连,按照Linux编译思路编译即可。更多更新信息请关注公众号:AV_Chat

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

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

相关文章

九龙证券|美股创年内最大周跌幅!美联储官员密集发声!波音重挫近5%

当地时刻2月24日,美股三大指数收盘明显跌落。道指跌1.02%,标普500指数跌1.05%,纳指跌1.69%。 大型科技股普跌,微软、亚马逊跌超2%。波音大跌4.8%,居道指跌幅榜首位,公司因机身部件有问题再次暂停向用户交付…

zabbix4.0-动作-邮件告警

目录 1、创建动作Actions 动作触发流程 创建一个动作 2、配置 Media types 媒介类型,添加一个发件邮箱来发送告警邮件 3、配置 Users Media,添加一个收件邮箱来接收告警邮件 4、更改一个触发器表达式来触发动作Action,最终发送告警邮…

【数据库】MongoDB数据库详解

目录 一,数据库管理系统 1, 什么是数据库 2,什么是数据库管理系统 二, NoSQL 是什么 1,NoSQL 简介 2,NoSQL数据库 3,NoSQL 与 RDBMS 对比 三,MongoDB简介 1, MongoDB 是什…

Python入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

前言 本文罗列了了python零基础入门到精通的详细教程,内容均以知识目录的形式展开。 第一章:python基础之markdown Typora软件下载Typora基本使用Typora补充说明编程与编程语言计算机的本质计算机五大组成部分计算机三大核心硬件操作系统 第二章&…

【LeetCode】剑指 Offer 15. 二进制中1的个数 p100 -- Java Version

题目链接:https://leetcode.cn/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/?favoritexb9nqhhg 1. 题目介绍(15. 二进制中1的个数) 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回…

Systemverilog覆盖率的合并和计算方式

在systemverilog中,对于一个covergroup来说,可能会有多个instance,我们可能需要对这些instance覆盖率进行操作。 只保存covergroup type的覆盖率,不需要保存instance-specified的覆盖率coverage type和instance-specified的覆盖率…

SVM支持向量机理解_KKT条件_拉格朗日对偶_SMO算法

目录 一、支持向量机基本型(线性可分) 1.1 问题描述 1.2 参考资料 二、KKT条件 2.1 KKT条件的几个部分 2.1.1 原始条件 2.1.2 梯度条件 2.1.3 松弛互补条件 2.2 参考资料 三、对偶形式 四、SMO算法 五、线性不可分情形 六、核函数 一、支持…

TimeWheel时间轮算法原理及实现(附源码)

时间轮算法原理及实现前言1.时间轮核心2.简单定时器3.任务队列4.优化任务队列5.简单时间轮6.多层时间轮前言 在各种业务场景中,我们总是会需要一些定时进行一些操作,这些操作可能是需要在指定的某个时间点操作,也可能是每过一个固定的时间间隔后进行操作,这就要求我们需要有一个…

【蓝桥OJ—C语言】高斯日记、马虎的算式、第39级台阶

文章目录高斯日记马虎的算式第39级台阶总结高斯日记 题目: 大数学家高斯有个好习惯:无论如何都要记日记。 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210。 后来人们知道&am…

You Only Need 90K Parameters to Adapt Light 论文阅读笔记

这是BMVC2022的论文,提出了一个轻量化的局部全局双支路的低光照图像质量增强网络,有监督。 思路是先用encoder f(⋅)f(\cdot)f(⋅)转到raw-RGB域,再用decoder gt(⋅)g_t(\cdot)gt​(⋅)模拟ISP过程转到sRGB域。虽然文章好像没有明确指出&…

【蓝牙mesh】Network协议层介绍

【蓝牙mesh】Network协议层介绍 Network层简介 上一章节我们讲解了蓝牙Mesh中Lower层的功能和数据格式。 Lower层的数据往下传输就到了网络层(Network Layer)。网络层定义了收到Lower层的数据后,如何对其进行判断、封装、加密、认证&#xf…

学习(mianshi)必备-ClickHouse高性能查询/写入和常见注意事项(五)

目录 一、ClickHouse高性能查询原因-稀疏索引 二、ClickHouse高性能写入-LSM-Tree存储结构 什么是LSM-Tree 三、ClickHouse的常见注意事项和异常问题排查 一、ClickHouse高性能查询原因-稀疏索引 密集索引: 在密集索引中,数据库中的每个键值都有一个索引记录&…

Amazon S3 服务15岁生日快乐!

2021年3月14日,作为第一个发布的服务,Amazon S3 服务15周岁啦!在中国文化里,15岁是个临界点,是从“舞勺之年”到“舞象之年”的过渡。相信对于 Amazon S3 和其他的云服务15周岁也将是其迎接更加美好未来的全新起点。亚…

【论文解读】如何使用1B参数的小模型吊打GPT3.5

大型语言模型 (LLM) 通过利用思维链 (CoT) 提示生成中间推理链作为推断答案的基本原理,在复杂推理上表现出了令人印象深刻的性能。 然而现有的 CoT 研究主要集中在语言模态上。 我们提出 Multimodal-CoT(多模态思维链推理模型),它…

利用steam搬砖信息差赚钱,单账号200+,小白也能轻松上手!

现在很多人在做互联网而且也赚到钱了,但还是有很多人赚不到钱,这是为什么? 这里我不得不说一个词叫做赛道,也就是选择,选择大于努力,项目本身大于一切,90%的人都觉得直播带货赚钱,但…

VSCode配置(一)Remote SSH

插件安装 Remote-SSHRemote Explorer 可以完成下面任务 连接远程服务器(支持rsa key的认证登陆),并访问文件结构可以经过中转机(跳转机)访问内网机器,进行IP穿透可以建立tunnel,将本地端口映…

弱监督论文阅读:P2BNet算法笔记

标题:Point-to-Box Network for Accurate Object Detection via Single Point Supervision 会议:ECCV2022 论文地址:https://link.springer.com/10.1007/978-3-031-20077-9_4 官方代码:http://www.github.com/ucas-vg/P2BNet 作者…

2023年网络安全竞赛——Python渗透测试PortScan.py

端口扫描Python渗透测试:需求环境可私信博主获取 任务环境说明: 服务器场景:PYsystem0041服务器场景操作系统:未知服务器场景FTP用户名:anonymous 密码:空1. 从靶机服务器的FTP上下载PortScan.py,编辑Python程序PortScan.py,实现

操作系统核心知识点整理--内存篇

操作系统核心知识点整理--内存篇按段对内存进行管理内存分区内存分页为什么需要多级页表TLB解决了多级页表什么样的缺陷?TLB缓存命中率高的原理是什么?段页结合: 为什么需要虚拟内存?虚拟地址到物理地址的转换过程段页式管理下程序如何载入内存?页面置…

NCNN Conv量化详解1

1. NCNN的Conv量化计算流程 正常的fp32计算中,一个Conv的计算流程如下: 在NCNN Conv进行Int8计算时,计算流程如下: NCNN首先将输入(bottom_blob)和权重(weight_blob)量化成INT8,在INT8下计算卷积,然后反量化到fp32,再和未量化的bias相加,得到输出(top_blob) 输入和…