ffmpeg(4)-Windows环境下编译ffmpeg之后进行调用

439 阅读4分钟

1、Windows下编译ffmpeg

其他的文档不用参考,直接使用下面这个,很简单,结果也正确 安装MSYS2 msys2是一款跨平台编译套件,它模拟linux编译环境,支持整合mingw32和mingw64,能很方便的在windows上对一些开源的linux工程进行编译运行。 类似的跨平台编译套件有:msys,cygwin,mingw

优势:

相对于 cygwin 和 msys 等环境,它支持 pacman 包管理器,这意味着你可以很方便的安装所需要的软件包和开发库,而不需要自己去找源码编译 支持多种编译环境,可以很方便的整合 mingw 和 clang,自身也是基于cygwin的一个简单开发环境,可以通过 pacman 包管理器很方便的安装对应编译环境的开发库。msys2的安装目录结构如下: 为什么要安装MSYS2呢?因为ffmpeg对windows不够友好。

点击这里MSYS2进入官网,按如下步骤进行操作:

image.png

image.png

安装路径可自选:

image.png

image.png

image.png

配置 建议打开MSYS2 MINGW64进行以下所有步骤。

image.png

如果你用的默认的MSYS2 MSYS也就是我最开始的方式也没关系,请听我继续道来。

可以看到我最开始就用的MSYS2 MSYS:

执行命令

pacman -S mingw-w64-x86_64-toolchain:

image.png

敲回车继续:

image.png

接下来执行命令

pacman -S base-devel:

image.png

用MSYS2 MSYS的问题在于有些包搜索不到,导致有些命令用不了。

接下来可以看到我用MSYS2 MINGW64重新执行了之前的两个命令:

pacman -S mingw-w64-x86_64-toolchain

image.png

pacman -S base-devel:

image.png

重新安装过后,我们可以发现常用的linux命令都能使用了,gcc,make,ls,ar等等。

image.png

安装pkg-config 执行命令:

pacman -S mingw-w64-x86_64-pkg-config

pacman -S mingw-w64-x86_64-zlib

image.png

安装好后F:\msys2\mingw64\bin目录下应该有 pkg-config.exe文件:

image.png

如果没有,进入:download.gnome.org/binaries/wi…

image.png

解压后在bin目录会发现pkg-config.exe,把它解压移到F:\msys2\mingw64\bin里,每个人的路径可能不一样。

image.png

接下来安装glib_2.24.2-2_win64.zip:download.gnome.org/binaries/wi…

解压后将 libglib-2.0-0.dll复制移到F:\msys2\mingw64\bin里,每个人的路径可能不一样。

image.png

最后将F:\msys2\mingw64\bin添加到Path环境变量,每个人的路径可能会不一样。

还可以新建系统变量PKG-CONFIG-PATH,值为F:\msys2\mingw64\lib\pkgconfig,注意每个人的路径可能会不一样。

编译ffmpeg 进入官网:www.ffmpeg.org/download.ht…

image.png

解压后我将它放在的路径为F:\ffmpeg

接下来打开MSYS2 MINGW64进入ffmpeg源码的目录,并执行:

./configure --prefix=../ffmpeg_buildout --disable-static --enable-shared --enable-version3 --disable-ffplay --enable-ffmpeg --disable-x86asm

image.png

应该会等好几分钟,我就是这样。千万不可慌张。

接下来编译,依次执行:

make -j4
make install -j4

这两步终端会输出很多东西,也需要好一会,学会等待。

image.png

image.png

至此你会发现ffmpeg同级路径会出现一个ffmpeg_builtout目录,其里面有如下目录:

image.png

并且可以找到ffmpeg.exe文件,初步断定编译成功。

接下来可以这么处理,删掉ffmpeg目录,将ffmpeg_builtout目录改名为ffmpeg,并将F:\ffmpeg\bin添加到环境变量Path里,因为ffmpeg.exe在这个路径里。

最后就可以打开终端执行ffmpeg -version查看是否安装成功啦:

image.png

至此ffmpeg编译成功。

2、Windows使用VSCode调用ffmpeg

免不了需要调试ffmpeg的代码,然后再去编译静态或者动态库,所以需要使用IDE,这里选择VSCode,因为它跨端,在Windows、MAC、Linux上都可以使用。 环境说明:

1Windows11
2VSCode
3、刚刚编译好的FFmpeg,注意FFmpeg跟前面的MSYS2不在一个路径,我是自己定义的路径

image.png

第一步:打开VScode,安装需要的各种插件

image.png

第二步:创建一个.c文件main.c,其他文件是没有的,除了.vscode下面的文件不用创建以外,其他的结构我是自己写的

image.png

main.c的内容如下:

#include <stdio.h>
#include <libavutil/log.h>  // 引入 FFmpeg 日志头文件

int main() {
    av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL, AV_LOG_INFO, "Hello FFmpeg Log!\n");
    return 0;
}

此时你会发现,找不到 <libavutil/log.h>,通过点击quick fix,可以跳转到c_cpp_properties.json文件下面,这个是配置环境使用的

image.png

然后配置自己的FFmpeg下面的include资源和gcc路径

image.png

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "E:/common_code/videoProject/ffmpeg_source/ffmpeg_buildout/include/**"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "intelliSenseMode": "gcc-x64",
            "compilerPath": "D:/MSYS2/mingw64/bin/gcc.exe" /*放着你的第二步下载好的mingw64文件下的g++.exe路径*/
        }
    ],
    "version": 4
}

此时可以找到<libavutil/log.h>了。

然后找到Terminal下面的Run Task,创建一个task之后(可以随便选),然后使用下面的内容替换一下

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "Build C",
            "type": "shell",
            "command": "gcc",
            "args": [
                "-g",
                "-I", "E:/common_code/videoProject/ffmpeg_source/ffmpeg_buildout/include",  // 显式指定头文件路径,换成你自己的路径
                "-L", "E:/common_code/videoProject/ffmpeg_source/ffmpeg_buildout/lib",    // 换成你自己的路径
                "${workspaceFolder}/src/main.c",
                "-o",
                "${workspaceFolder}/bin/main.exe",
                "-lavutil",                  // 链接 libavutil.dll.a
                "-luser32",                  // Windows 系统库
                "-lsecur32"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

这时候可以编译了,Ctrl+Shift+B编译完成后,会在bin下生成exe文件

image.png

进入到Vscode的命令行输入区域,运行exe文件./bin/main.exe,运行成功

image.png