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

news2024/9/28 9:34:20

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

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

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

3) 运行MSYS2 w64

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

5) 当窗口关闭时,重新打开mysys2 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之前的要完成依赖库编译,也是同样方法的,基本思想可以理解mysys2环境是一个Linux环境,minGW工具链就是该Linux默认的编译工具连,按照Linux编译思路编译即可。更多更新信息请关注公众号:AV_Chat

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

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

相关文章

JavaScript函数

目录 定义函数 调用函数 函数参数 函数返回值 匿名函数 箭头函数 使用JavaScript编程时,函数是一种非常有用的编程结构,用于执行特定的任务并返回结果。函数可以重复使用,因此您只需编写一次代码,即可在需要时多次调用该代码…

深入解析dubbo的延迟暴露

一、引子 最近搭建了一个新的Java工程,主要是提供dubbo服务给其他业务用的。突然想起之前dubbo服务都会配置延迟暴露来解决平滑发布的问题,但是好像现在新的Java项目都没有配置延迟暴露了,觉得很奇怪,所以去研究了一下关于dubbo延…

Delete `␍`eslint(prettier/prettier) in vscode 的解决方案

错误描述从 Github 仓库拉取代码,使用 vscode 打开,页面报错,每一行都爆红 (如下图)问题原因由于历史原因,windows下和linux下的文本文件的换行符不一致。Windows在换行的时候,使用了换行符CRLF…

ROG配置ubuntu20.04.5双系统要点

win11ubuntu20.04.5 1. BIOS设置 开机长按F2进入bios设置,修改advanced参数: boot -> 关闭fast bootsecurity -> 关闭secure boot设置VMD controller为Disabled(其他电脑是修改硬盘的SATA和ACHI模式)。但是改了之后windo…

【大数据离线开发】8.1 Hive介绍和架构

Hive:数据分析引擎 了解 大数据的终极目标: 使用SQL语句来处理大数据 Hadoop的体系架构中: Hive:支持SOLPig:支持PiqLatin Spark的体系架构中: Spark SQL:类似Hive,支持SOL、支持DSL 另一个:Impala 8.1 什么是Hive? 起源自f…

Linux 离线安装Ruby和RubyGems环境

文章目录简介1. 安装GCC环境2. 安装ruby3. 安装 RubyGems4. 安装 redis-xxx.gem提示:以下是本篇文章正文内容,Redis系列学习将会持续更新 简介 在学习 Redis 集群对这几个词的概念和关系感混乱,故在此对其梳理。 Ruby 是什么? 它…

鼠标更换指针图案和更改typora的主题

鼠标更换指针图案 由此偶然看见好几个朋友都使用了新的图案替换掉了原有的鼠标图案,今天寻思自己也换一个图案 主要是觉得鼠标大一点儿会好看一些,所以就找了一些教程 官方教程,小的变动 当然最多的是官方教程,如果你只是想要…

Web Spider Ast-Hook 浏览器内存漫游 - 数据检索

文章目录一、资源下载二、通过npm安装anyproxy模块三、anyproxy的介绍以及基本使用1. anyproxy的功能介绍2. anyproxy的基本使用四、给浏览器挂代理五、实操极验demo案例总结提示:以下是本篇文章正文内容,下面案例可供参考 一、资源下载 Github&#x…

性能优化之node中间件耗时

背景 中间件在node框架中是很基本的套件,使用不当很容易对页面性能造成影响。除了node服务端外,前端做的SSR项目也要特别重视这块 哪些场景会造成中间件耗时特别严重? 罪魁祸首是:await阻塞 举个例子: 1.如何得到 …

稀疏特征和密集特征

在机器学习中,特征是指对象、人或现象的可测量和可量化的属性或特征。特征可以大致分为两类:稀疏特征和密集特征。 稀疏特征 稀疏特征是那些在数据集中不连续出现的特征,并且大多数值为零。稀疏特征的示例包括文本文档中特定单词的存在或不存…

高性能 Message ToJavaBean 工具 【easy.server.mapper】

easy.server.mapper 介绍 后端开发中&#xff0c;消息转换常见问题 Map 中的数据 转换成实体Bean数组 中的数据 转换成实体BeanServet 中的 param 转换成实体Bean 以上的三个问题是最常见的消息转换困扰。 以Map 举例 常见做法是 手动转换 Map<String,Object> da…

stm32f407探索者开发板(二十三)——定时器中断实验

文章目录一、通用定时器知识回顾1.1 时钟的选择1.2 内部时钟的选择1.3 计数器模式二、常用寄存器和库函数配置2.1 计数器当前值寄存器CNT2.2 预分频寄存器TIMx_PSC2.3 自动重装载寄存器&#xff08;TIMx_ARR)2.4 控制寄存器1&#xff08;TIMx_CR1&#xff09;2.5 DMA中断使能寄…

基因净化车间装修设计方案SICOLAB

基因净化车间的设计方案应该根据实际需求进行定制&#xff0c;以下是一些规划建设要点和洁净设计要注意的事项&#xff1a;一、净化车间规划建设要点&#xff1a;&#xff08;1&#xff09;基因车间的面积应该根据实验项目的规模进行规划&#xff0c;包括充足的操作区域和足够的…

华为OD机试题,用 Java 解【DNA 序列】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

自动化测试selenium

目录 一、为什么引入自动化测试&#xff1f; 二、为什么选择selenium作为自动化测试工具&#xff1f; 三、环境部署 四、什么是驱动&#xff1f;驱动的工作原理&#xff1f; 五、selenium的基础语法 元素定位 元素操作 点击元素 模拟键盘输入 清除对象输入的文本…

vue-draggable浏览器拖拽event事件对象拖动时 DragEvent path undefined

场景&#xff1a; 在做组件拖拽过程中&#xff0c;需要获取到触发元素冒泡过程中的所有元素&#xff0c;所以使用了event.path属性。在Chrome下正常运行&#xff0c;但是在FireFox下测试时发现&#xff0c;完犊子&#xff0c;失效了&#xff0c;通过问题排查&#xff0c;发现了…

开源运维监控工具WGCLOUD - 功能概述及架构介绍(理论篇)

一、项目简介 开源运维监控系统WGCLOUD&#xff0c;基于springboot和golang开发&#xff0c;可以监控各种设备&#xff08;物理机&#xff0c;云主机&#xff0c;虚拟机等都可以&#xff0c;安卓也可以&#xff09;。 二、实现功能 支持windows和redHat、centos、ubuntu、deb…

ASEMI低压MOS管20N06参数,20N06体积,20N06大小

编辑-Z ASEMI低压MOS管20N06参数&#xff1a; 型号&#xff1a;20N06 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;60V 栅源电压&#xff08;VGS&#xff09;&#xff1a;20V 漏极电流&#xff08;ID&#xff09;&#xff1a;20A 功耗&#xff08;PD&#xff0…

【设计模式】 工厂模式介绍及C代码实现

【设计模式】 工厂模式介绍及C代码实现 背景 在软件系统中&#xff0c;经常面临着创建对象的工作&#xff1b;由于需求的变化&#xff0c;需要创建的对象的具体类型经常变化。 如何应对这种变化&#xff1f;如何绕过常规的对象创建方法(new)&#xff0c;提供一种“封装机制”来…

宝塔搭建实战php悟空CRM前后端分离源码-vue前端篇(二)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享了悟空CRM server端在宝塔部署的方式&#xff0c;但是由于前端是用vue开发的&#xff0c;如果要额外开发新的功能&#xff0c;就需要在本地运行、修改、打包重新发布到宝塔才能实现功能更新&…