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

相关推荐
非凡ghost12 小时前
猫眼浏览器(Chrome内核增强版浏览器)官方便携版
前端·网络·chrome·windows·软件需求
熊文豪17 小时前
Windows安装RabbitMQ保姆级教程
windows·分布式·rabbitmq·安装rabbitmq
搬砖的小码农_Sky17 小时前
Windows操作系统上`ping`命令的用法详解
运维·网络·windows
Kiri霧1 天前
Rust模式匹配详解
开发语言·windows·rust
程序设计实验室1 天前
使用命令行删除 Windows 网络映射驱动器
windows
用户31187945592181 天前
Windows 电脑安装 XTerminal 1.25.1 x64 版(带安装包下载关键词)
windows
Logintern091 天前
windows如何设置mongodb的副本集
数据库·windows·mongodb
Chandler241 天前
一图掌握 操作系统 核心要点
linux·windows·后端·系统
ajassi20001 天前
开源 C# 快速开发(十七)进程--消息队列MSMQ
windows·开源·c#
Python私教1 天前
5分钟上手 MongoDB:从零安装到第一条数据插入(Windows / macOS / Linux 全平台图解)
windows·mongodb·macos