win10 下编译ffmpeg3.36.tar.gz

所需工具:

  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博客

相关推荐
n***85941 小时前
嵌入式 UI 开发的开源项目推荐
windows·开源·开源软件
小袁搬码2 小时前
Windows中指定路径安装DockerDesktop
windows·docker·容器·docker desktop
系统之家装机大师10 小时前
Win11 22H2/23H2系统11月可选更新KB5046732发布!
windows·电脑
系统之家装机大师10 小时前
微软发布Win11 24H2系统11月可选更新KB5046740!
windows·电脑
戎梓漩12 小时前
windows下安装curl,并集成到visual studio
ide·windows·visual studio
蓝田~14 小时前
观察者模式和订阅模式
windows·观察者模式
梓仁沐白21 小时前
ubuntu+windows双系统切换后蓝牙设备无法连接
windows·ubuntu
九鼎科技-Leo1 天前
什么是 WPF 中的依赖属性?有什么作用?
windows·c#·.net·wpf
Yang.991 天前
基于Windows系统用C++做一个点名工具
c++·windows·sql·visual studio code·sqlite3
我不瘦但很逗1 天前
Windows下使用DBeaver连接云数据库(MySQL)
数据库·windows