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”,如下:

win10 下编译ffmpeg3.36.tar.gz_第1张图片

否则,会报错。

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”,把包含这个字符的行用“//”注释掉或者把里面的汉字删除, 否则在编译中会报错。

win10 下编译ffmpeg3.36.tar.gz_第2张图片

        (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

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

win10 下编译ffmpeg3.36.tar.gz_第3张图片

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)编译结果:

        编译成功后,如下所示:

win10 下编译ffmpeg3.36.tar.gz_第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博客

你可能感兴趣的:(windows)