win10 下编译ffmpeg3.36.tar.gz

news2024/11/17 1:55:27

所需工具:

  1.         win10
  2.         ffmpeg3.36.tar.gz。 或其他版本,下载地址:Index of /releases
  3.         msys2。 下载地址:http://www.msys2.org。
  4.         Visual Studio 2017。

1. 安装MSYS

        MSYS2像是windows下的一个子系统,它把windows里面的命令进行封装,并穿上了一层linux命令的外衣,使得在msys中可以使用linux命令,但实际执行的是windows的命令。

        下载后,按照提示进行安装。我是直接安装在E盘:E:/MSYS2。

1.1)修改msys的镜像源

        目标文件为"msys64\etc\pacman.d\mirrorlist.msys",将内容改为:

##
## MSYS2 repository mirrorlist
##
 
## Primary
## msys2.org
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/

然后保存。

1.2)配置msys2的cmd.

        使用记事本或Notepad++打开 msys2 安装目录下的 "msys2_shell.cmd" 文件,将里面的 "rem set MSYS2_PATH_TYPE=inherit" 改成 "set MSYS2_PATH_TYPE=inherit",然后点击保存。

1.3)下载编译ffmpeg需要的工具

        主要需要:make, gcc, diffutils, yasm, pkg-config, 这四个工具。

        双击"msys2_shell.cmd"文件,打开 shell 窗口,在 shell 中输入下面命令:

pacman -S make gcc diffutils yasm pkg-config

        pacman 是msys下的安装api的工具。 

1.4) 修改"E:\Windows Kits\10\Include\10.0.17763.0\um\winsock.h"代码

        这应该是安装VS2017时配置的文件夹,大家可以找找自己放在什么位置。用notepad++打开winsock.h, 在首行添加“#include<winsock2.h>”,如下:

否则,会报错。

2. 编译ffmpeg

 2.1)修改ffmpeg代码

         cd  到 ffmpeg 源码目录进行编译。我是把ffmpeg源码文件夹放在了msys里面的home文件夹下,具体路径为:E:\MSYS2\home\wzg16\ffmpeg。

        (1)修改"ffmpeg/config.h"

        用notepad++打开"ffmpeg/config.h",搜索“CC_IDENT”,把包含这个字符的行用“//”注释掉或者把里面的汉字删除, 否则在编译中会报错。

        (2)修改 "E:\MSYS2\home\wzg16\ffmpeg\ffprobe.c"

        用notepad++打开ffmpeg\ffprobe.c,搜索“CC_IDENT”,把包含这个字符的行用“//”注释掉,一共是一行:

//print_str("compiler_ident", CC_IDENT); // 我的这一句在2968行
        (3)修改 "E:\MSYS2\home\wzg16\ffmpeg\cmdutils.c"

        用notepad++打开ffmpeg\cmdutils.c,搜索“CC_IDENT”,把包含这个字符的行用“//”注释掉,一共是一行:

//av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);//第1119行
        (3)不修改会带来以下错误。

        如果以上两行代码不注释,会在编译过程中带来以下error,错误原因是CC_IDENT宏没有被定义。

fftools/ffprobe.c(3047): error C2001: 常量中有换行符
...


fftools/cmdutils.c(1119): error C2065: “slib”: 未声明的标识符
fftools/cmdutils.c(1119): error C2296: “%”: 非法,左操作数包含“char [138]”类型
fftools/cmdutils.c(1119): error C2059: 语法错误:“数字上的错误后缀”
fftools/cmdutils.c(1119): error C2059: 语法错误:“%”
fftools/cmdutils.c(1119): error C2017: 非法的转义序列
fftools/cmdutils.c(1119): error C2001: 常量中有换行符
fftools/cmdutils.c(1150): error C2143: 语法错误: 缺少“)”(在“*”的前面)
fftools/cmdutils.c(1150): error C2143: 语法错误: 缺少“{”(在“*”的前面)
...

2.2)打开VS2017的cmd,进入msys

        点击电脑的开始菜单,依次找到 "Visual Studio 2017" -> "x86 Native Tools Command Prompt For VS 2017)"(x86编译出来的库是32位,x64编译出来的是64位的)。

        在弹出的窗口中,输入"mys2_shell.cmd"。

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v16.6.5
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'
 
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community>msys2_shell.cmd

        此时会打开一个新的窗口,如下图所示:

2.3)开始编译

        编译命令如下:

./configure  --toolchain=msvc  --enable-shared --prefix=windows
make -j 12             # -j 12 表示12线程 # 如果不执行步骤2.1,这里会报错。
make install

        编译命令中,--prefix=windows,用于指定了编译结果的存放目录在ffmpeg源码文件夹下,创建了一个名为“windows”的文件夹

2.4)编译结果:

        编译成功后,如下所示:

  • bin :该目录存放了 dll 和 lib 文件,例如:avcodec.lib、avcodec-58.dll
  • include:该目录存放了头文件,例如:libavcodec/avcodec.h
  • lib:该目录存放了 pkgconfig 文件
  • share:该目录存放了一些示例代码,例如:muxing.c
     

参考:

【FFmpeg笔记】04-Win10编译ffmpeg4.2.1(For Windows)_win10 安装ffmpeg4.2-CSDN博客

VS2015编译ffmpeg 3.4.2报错“slib”: 未声明的标识符_vs2017 编译的ffmpeg “slib”: 未声明的标识符-CSDN博客

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

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

相关文章

`.NET Web`新人入门必学项目`EarthChat`

.NET Web新人入门必学项目EarthChat EarthChat是一个基于.NET 7的实战项目&#xff0c;EarthChat提供了很多的最佳实践&#xff0c;EarthChat的目标也是成为一个很多人都喜欢的大型聊天业务系统&#xff0c;并且将结合SKAI大模型进行打造智能业务系统&#xff0c;在EarthChat中…

05_es分布式搜索引擎1

一、初始elasticsearch 1.elasticsearch简单介绍 ①什么是elasticsearch&#xff1f; 开源的分布式搜索引擎&#xff0c;实现海量数据搜索&#xff0c;日志统计&#xff0c;分析&#xff0c;系统监控等功能 ②什么是elastic stack&#xff1f; 是以elasticsearch为核心的技…

【COMP304 LEC4 LEC5】

LEC 4 1. Truth-Functionality Propositional logic 的connectives&#xff08;连接词&#xff09;are truth-functional 但是&#xff0c;有时候的描述不是true-functional的&#xff0c;比如&#xff1a;"Knowing that", "It is necessary that",&quo…

微信小程序开发-微信支付退款功能【附有完整代码】

之前有写过详细的微信支付功能&#xff1a;微信支付 我们使用weixin-java-pay的jar包等&#xff0c;配置上的流程同微信支付&#xff0c;可以看上面的文章。 退款使用的WxPayService类的refundV3方法。使用该方法需要在微信支付配置的基础上加上&#xff1a;apiclient_key.pem…

Linux期末复习——多线程编程

线程概述 线程基本编程 函数说明 pthread_create(): 创建线程&#xff0c;成功返回0pthread_exit(): 主动退出线程&#xff0c;成功返回0pthread_join(): 挂起线程等待结束&#xff0c;成功返回0pthread_cancel在别的线程中终止另一个线程的执行&#xff0c;成功返回0 示例…

sql文件批处理程序-java桌面应用

项目效果&#xff1a; 支持sql文件夹批处理&#xff0c;选中文件夹或者sql文件 支持测试连接&#xff0c;可以校验数据库配置 支持报错回显&#xff0c;弹出报错文件名以及问题语句 支持在程序中修改错误语句&#xff0c;用户可以选择保存修改内容继续执行或不保存修改只执行…

线性代数 第四章 线性方程组

一、矩阵形式 经过初等行变换化为阶梯形矩阵。当&#xff0c;有解&#xff1b;当&#xff0c;有非零解。 有解&#xff0c;等价于 可由线性表示 克拉默法则&#xff1a;非齐次线性方程组中&#xff0c;系数行列式&#xff0c;则方程组有唯一解&#xff0c;且唯一解为 其中是…

TestCenter测试管理工具

estCenter&#xff08;简称TC&#xff09;一款广受好评的测试管理工具&#xff0c;让测试工作更规范、更有效率&#xff0c;实现测试流程无纸化&#xff0c;测试数据资产化。 产品概述 TC流程图 产品功能 一、案例库 案例库集中化管理&#xff0c;支持对测试用例集中管理&…

Gartner报告 | Mendix再次成为低代码领导者!Mendix在愿景完整性和执行能力领域的排名最为靠前。

本文作者: Hans de Visser, Mendix 首席产品官 在最新发布的2023 Gartner魔力象限图™ 中对于企业级低代码应用程序平台&#xff0c;Gartner指出&#xff0c;企业IT领导者需要满足“应用程序开发向更高抽象级别迈进的步伐&#xff0c;并采用低代码平台来加速应用程序开发。” 此…

【华为】路由器以PPPoE拨号接入广域网

组网需求 用户希望以PPPoE拨号方式接入广域网&#xff0c;如图1所示&#xff0c;Router作为PPPoE客户端&#xff0c;得到PPPoE服务器的认证后获得IP地址&#xff0c;实现用户接入互联网的需求。内网网关地址&#xff08;即VLANIF1接口的IP地址&#xff09;为10.137.32.1/24。 …

N-131基于jsp,ssm物流快递管理系统

开发工具&#xff1a;eclipse&#xff0c;jdk1.8 服务器&#xff1a;tomcat7.0 数据库&#xff1a;mysql5.7 技术&#xff1a; springspringMVCmybaitsEasyUI 项目包括用户前台和管理后台两部分&#xff0c;功能介绍如下&#xff1a; 一、用户(前台)功能&#xff1a; 用…

UE5 Android下载zip文件并解压缩到指定位置

一、下载是使用市场的免费插件 二、解压缩是使用市场的免费插件 三、Android路径问题 windows平台下使用该插件没有问题&#xff0c;只是在Android平台下&#xff0c;只有使用绝对路径才能进行解压缩&#xff0c;所以如何获得Android下的绝对路径&#xff1f;增加C文件获得And…

生态扩展:Flink Doris Connector

生态扩展&#xff1a;Flink Doris Connector 官网地址&#xff1a; https://doris.apache.org/zh-CN/docs/dev/ecosystem/flink-doris-connector flink的安装&#xff1a; tar -zxvf flink-1.16.0-bin-scala_2.12.tgz mv flink-1.16.0-bin-scala_2.12.tgz /opt/flinkflink环境…

【c++|opencv】二、灰度变换和空间滤波---5.中值滤波

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 1. 中值滤波 #include<iostream> #include<opencv2/opencv.hpp> #include"Salt.h"using namespace cv; using namespace std;voi…

NEFU离散数学实验4-数论

相关概念 离散数学中的数论相关概念和公式如下&#xff1a; 1.最大公约数(GCD)&#xff1a;两个整数a和b的最大公约数是能够同时整除a和b的最大正整数&#xff0c;记作GCD(a, b)。 2.最小公倍数(LCM)&#xff1a;两个整数a和b的最小公倍数是能够同时整除a和b的最小正整数&#…

MySQL-Galera-Cluster集群详细介绍

目录 一、什么是Mysql集群&#xff1f;1.单节点mysql存在的常见问题2.mysql集群介绍3.Mysql集群的优点和风险 二、Mysql集群的一些疑问1.mysql的AB复制和Galera Cluster有什么区别&#xff1f;2.什么情况下适用AB复制&#xff0c;什么情况下使用Galera cluster&#xff1f;3.可…

给出n个字母(a-z),找出出现次数最多的字母并输出。(附ASCII码表)

Result01&#xff1a; 两层for循环枚举&#xff0c;时间复杂度为O(N2)&#xff0c;空间复杂度O(1)。 //暴力解&#xff1a;public static char Result01(char[] chars) {int maxNums 0;//保存最大出现次数int index 0;//记录出现次数最多的元素在数组中的下标for (int i …

初识【Java类和对象】

目录 1.面向对象的初步认知 1.1什么是面向对象? 1.2面向对象与面向过程 2.类定义和使用 2.1简单认识类 2.2类的定义格式 3.类的实例化 3.1什么是实例化 3.2类和对象的说明 4.this引用 4.1为什么要有this的引用 4.2什么是this引用 4.3this引用的特性 &#x1…

3 — NLP 中的标记化:分解文本数据的艺术

一、说明 这是一个系列文章的第三篇文章&#xff0c; 文章前半部分分别是&#xff1a; 1 — NLP 的文本预处理技术2 — NLP中的词干提取和词形还原&#xff1a;文本预处理技术 在本文中&#xff0c;我们将介绍标记化主题。在开始之前&#xff0c;我建议您阅读我之前介绍…