如何在WIN10下使用VS2019编译FFMPEG库文件以及FFPLAY.EXE、FFMPEG.EXE和FFPROB.EXE

如何在win10下使用vs2019编译FFMpeg库文件以及ffplay.exe、ffmpeg.exe和ffprob.exe

简单介绍

这里在win10的64位系统中编译了最新的ffmpeg的库文件及它自带的工具ffplay、ffmpeg和ffprob程序,代码全部采用最新版本。这样编译后我们可以使用vs2019的IDE下直接进行调试ffmpeg工具软件,使学习ffmpeg的架构及音视频播放器原理更加容易。官方指导文档可参看Platform Specific Information页面。

方法步骤

  1. 安装VS2019

首先进入VS官网下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 下载VS2019程序文件,执行安装程序进行安装。安装后可以得到msvc的交叉编译环境,该toolchain用于在msys2下编译ffmpeg。

以社区版VS2019为例,下载后会得到文件vs_community.exe,如果想进行离线安装需使用命令行运行vs_community.exe --layout c:\vslayout --lang zh-CN,基中layout参数后为要下载安装包的放置文件夹,lang参数后为要下载程序的语言版本,下载完成后进入设置的安装包文件夹下运行安装,如c:\vslayout\vs_community.exe。

  1. 安装msys2

MSYS2上下载msys2,安照网站上的步骤安装完成。安装路径最好不要有中文或空格,避免以后使用出现编码问题。安装后运行安装目录的msys2_shell.cmd,输入指令,其中#号为注释可不添:

 -Syu

#更新核心依赖包

pacman -Su

#通过pkgconf安装通用msys2的 packages软件包

pacman -S make pkgconf diffutils

#安装mingw的packages软件包和toolchains工具组件

# 下面这个是64位版本

# pacman -S mingw-w64-x86_64-nasm mingw-w64-x86_64-gcc mingw-w64-x86_64-SDL2

# 下面这个是32位版本

pacman -S mingw-w64-i686-nasm mingw-w64-i686-gcc mingw-w64-i686-SDL2

  1. 下载ffmpeg源码及SDL(ffplay是基于它显示的库文件

http://ffmpeg.org/download.html上下载ffmpeg源码。解压的ffmpeg源码文件夹放置msys2目录下的home文件夹中。

在http://www.libsdl.org/download-2.0.php下载SDL2开发用库文件。下载后解压待用。

SDL2的目录结构,其中dll和lib在lib文件夹中,头文件在include文件夹中,编译ffplay时需要。

  1. 启动msys2 编译环境

进入msys2安装路径,在其中创建msys_vs2019.bat批处理文件。编辑文件内容:

set MSYS2_PATH_TYPE=inherit

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat"

msys2_shell.cmd -mingw64

其中call后面为自己的vs安装路径,如果想编译64位库需要把vcvars32.bat改为vcvars64.bat文件。

在msys2安装路径找到msys2\usr\bin\link.exe文件改下文件名,因为会和vc的link.exe重名。完成后双击msys_vs2019.bat启动msys2。

如果编译器显示乱码在msys2环境右键点击options设置下text的编码为gbk与window系统编码保持一致。

  1. 使ffmpeg可使用x264编码

进入x264, the best H.264/AVC encoder - VideoLAN 下载x264编码源码。

把解压的x264文件夹放至msys2的home目录中,启动后使用cd ../x264命令进入文件夹。

gcc 编译libx264 (.a .dll)

运行mingw32.exe

开始设置编译方式:

./configure --prefix=./vs2019_x86_build --host=mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def

参数说明:

--enable-static 编译静态库

--enable-shared 编译动态库

--extra-ldflags=-Wl,--output-def=libx264.def 生成def文件

--host=mingw32 指定编译器,该项必填

--prefix=./vs2019_x86_build 生成文件位置

执行编译命令

make -j4

参数说明:j4为使用4核处理,该参数可不写将使用默认方式编译

编译完成后执行最后的生成

make install

以上编译完成后会生成def、 dll及.a文件。

#复制def文件至输出lib文件夹中

cp ./libx264.def ./vs2019_x86_build/lib/

#进入lib文件夹

cd vs2019_x86_build/lib/

#若要生成64位lib文件则输入如下命令:

#lib /machine:X64 /def:libx264.def

#若要生成32位lib文件则输入如下命令:

lib /machine:i386 /def:libx264.def

执行后得到libx264.lib,然后将vs2019_x86_build/bin文件夹中的libx264-XXX.dll改名或者复制一份为libx264.dll。

msvc编译libx264(.lib .dll)

在msys2中输入代码进行编译,输入代码设置编译:

CC=cl ./configure --enable-static --enable-shared --prefix=./vs2019_x86_build

参数说明:CC=cl 使用VS方式编译

开始编译

make -j4

安装编译

make install

要用生成的lib编译ffmpeg要使用动态x264库,需要将vs2019_x86_build/lib中的libx264.dll.lib改名为libx264.lib,本身的静态的libx264.lib可改名、删掉或放置其它地方。

  1. 编译ffmpeg的静态库和动态库

使用msys2进入ffmpe源码目录,我放在msys2的home中ffmpeg文件夹中进入指令如下:

cd ../ffmpeg

开始设置编译方式:

./configure --enable-shared --enable-static --toolchain=msvc --prefix=./vs2019_x32 --enable-postproc --enable-gpl --enable-avresample --enable-libx264 --extra-cflags=-I/home/x264/vs2019_x86_build/include --extra-ldflags=-LIBPATH:/home/x264/vs2019_x86_build/lib

参数说明:

--toolchain=msvc 指定VS为工具组件

-enable-postproc --enable-gpl --enable-avresample 需要集成的功能

--enable-libx264 集成h264编码

--extra-cflags=-I/home/x264/vs2019_x86_build/include 指定h264头文件位置

--extra-ldflags=-LIBPATH:/home/x264/vs2019_x86_build/lib 指定h264库文件位置

该命令执行会有一些等待时间,过会后将会出现配置过程数据显示,直到全部配置完成。

完成后查看ffmpeg\config.hffmpeg\ffbuild\config.mak这两个文件编码是否为utf8,如果不是要对其转换成utf8编码。

转换完成保存后执行编译命令

make -j4

编译完成后执行最后的生成

make install

全部执行完成后进入输出指定文件夹,这里是vs2019_x32,可以看到如下文件,这些就是编译好的全部ffmpeg的静态库和动态库。

其中bin里面为lib和dll文件,lib文件夹中是def文件,include文件夹为头文件,share是一些预设和示例。

  1. 使用VS2019编译ffplay

打开vs2019创建新的空项目

把ffmpeg源码中的config.h文件和fftools文件夹中的ffplay.c,cmdutils.c,cmdutils.h三个文件都复制到到vs新建项目中,修改config.h文件编码为GBK编码并在其中有中文的地方前加上u8符号,保证显示不会乱码。

添上以上四个文件至VS创建的ffplay项目中。

完成后把ffmpeg编译好的库和SDL2的库头文件及库文件目录添加进项目。

拷贝ffmpeg和sdl中的所有dll文件至项目路径下

然后把所有的依赖项lib配置进项目。

项目需保持Unicode字符集

常规SDL检查改为否

屏蔽两个出错的头文件

打包编译即可完成。

添加要使用的命令参数,便可开始运行跟踪调试。

  1. 使用VS2019编译ffprobe

仿照编译ffplay的方法,使用vs2019创建一个空的项目,加入ffmpeg源码中的config.h及fftools目录下的cmdutilsc,cmdutils.h,ffprobe.c这四个文件。设置头文件目录及lib目录,加入依赖lib库文件。具体方法参照ffplay进行设置,这里不需要SDL2库了,可以去除,其它设置都是一样的。

屏蔽掉报错的头文件,设置config.h线程HAVE_THREADS值从1改为0。保存后编译即可通过。

  1. 使用VS2019编译ffmpeg

仿照编译ffprobe的方法,创建一个空的项目,按之前方法设置项目属性,最后加入ffmpeg源码中的config.h和fftools目录下的cmdutilsc,cmdutils.h,ffmpeg.c,ffmpeg.h,ffmpeg_filter.c,ffmpeg_hw.c,ffmpeg_opt.c以及ffmpeg源码中目录下的compat\atomics\win32\stdatomic.h,共九个文件。

config.h和cmdutils.h这两个文件和ffprobe一样的修改方式。

打开ffmpeg.h屏蔽线程头文件。

接下来修改ffmpeg.c文件,首先打开文件,屏蔽指定头文件

修改本地加载stdatomic.h,把<>符号改为””号。

然后在这里加入如下代码

具体代码可进入对应的头文件中找到。

修改完成后进行编译,成功后就可以使用了。

因集成了x264编码,需要将x264.dll文件也放进来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值