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

相关推荐
路由侠内网穿透3 天前
本地部署 GPS 跟踪系统 Traccar 并实现外部访问
运维·服务器·网络·windows·tcp/ip
研华嵌入式3 天前
如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?
arm开发·windows·嵌入式硬件
带娃的IT创业者3 天前
Windows 平台上基于 MCP 构建“文心一言+彩云天气”服务实战
人工智能·windows·文心一言·mcp
csdn_aspnet3 天前
Windows Node.js 安装及环境配置详细教程
windows·node.js
摇滚侠3 天前
java语言中,list<String>转成字符串,逗号分割;List<Integer>转字符串,逗号分割
java·windows·list
Source.Liu3 天前
【Pywinauto库】12.2 pywinauto.element_info 后端内部实施模块
windows·python·自动化
Source.Liu3 天前
【Pywinauto库】12.1 pywinauto.backend 后端内部实施模块
开发语言·windows·python·自动化
私人珍藏库3 天前
[Windows] FileOptimizer v17.1.0_一款文件批量压缩工具
windows·批量压缩
掘根3 天前
【CMake】List
windows·microsoft·list
TToolss3 天前
删除文件夹里的网盘图标
windows