FFmpeg - Windows下使用MSYS2和VS编译FFmpeg

本文详细指导如何在MSYS2环境下安装、配置和编译FFmpeg,涉及x264、x265、fdk-aac和SDL2库的编译过程,以及解决可能遇到的问题和官方预编译库的选择。
摘要由CSDN通过智能技术生成
文章目录

0. 说明

FFmpeg编译很辛苦,刚开始学习FFmpeg没必要自己编译FFmpeg,它的官网有编译好的FFmpeg下载,直接下载使用就行。等待FFmpeg学有所成后,需要修改FFmpeg的时候再编译。
下载FFmpeg官网编译好的库,请参考第5节。

这里介绍的是手动编译FFmpeg。
另外可以看看 Shift Media Project,提供了一键下载依赖并编译的方法。查看我写的另外一篇文章:FFmpeg - Windows下使用ShiftMediaProject方法编译FFmpeg

1. 安装MSYS2

1.1 下载

下载地址: MSYS2

在这里插入图片描述

1.2 安装

(1) 使用默认安装目录安装,安装在目录 c:\msys64;
(2) 安装完成后,打开MSYS,执行下面两步更新数据:

pacman -Syu
pacman -Su
  • 1
  • 2

在这里插入图片描述

在这里插入图片描述

(3)安装其他工具包:

pacman -S make cmake diffutils pkg-config nasm yasm git
  • 1

找到MSYS2 MSYS这个应用,打开,会出现一个终端:

在这里插入图片描述

在这里插入图片描述


 

2. 下载FFmpeg及其他源码

  • FFmpeg地址:git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
  • x264地址:git clone https://code.videolan.org/videolan/x264.git
  • x265地址:git clone https://bitbucket.org/multicoreware/x265_git.git
  • fdk-aac地址:git clone https://github.com/mstorsjo/fdk-aac.git

MSYS2终端,创建一个resources目录,在这个目录下使用git下载:

在这里插入图片描述

在这里插入图片描述


 

3. 编译配置依赖库

3.1 打开一个新的MSYS2终端

(1)修改msys2_shell.cmd文件

在这里插入图片描述

在这里插入图片描述

(2)右键使用管理员身份打开适用于VS 2017的x64本机工具(英文:x64 Native Tools Command Prompt for VS 2017)”

在这里插入图片描述

打开 适用于VS 2017的x64本机工具 的终端后,进入msys64的安装目录,执行

msys2_shell.cmd -mingw64
  • 1

在这里插入图片描述

这样会打开一个新的 MSYS2 的终端:

在这里插入图片描述

3.2 编译x264

MSYS2终端中,进入x264的下载目录,编译(编译成动态库):(指令中的 -j4 可以根据自己电脑性能改成自己电脑最大线程 比如: -j16 等)

cd ~/resources/x264/
CC=cl ./configure --enable-shared
make -j4
make install
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

在这里插入图片描述

3.3 编译 x265

首先查询cmake路径:

whereis cmake
  • 1

在这里插入图片描述

需要修改 x265_git\build\msys-cl\make-Makefiles-64bit.sh 文件两处地方:

在这里插入图片描述
(1)把原文件中的 amd64 改为 x64,如果不改,则编译的时候报: 64 bit target not set, please launch ‘visual studio command prompt’ and run ‘…\vcvarsall.bat amd64 | x86_amd64 | amd64_x86’ 的错误;
(2)把 cmake 改为全路径,这个路径是通过上面的whereis cmake指令查到的,比如我这里是这样的:

"/c/Program Files (x86)/Microsoft Visual Studio/2017/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin/cmake.exe" -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4"  ../../source
  • 1

如果不改的话, 会报 CMake Error: Could not create named generator NMake Makefiles 的错误

编译:

cd ~/resources/x265_git/build/msys-cl/
./make-Makefiles-64bit.sh
nmake install
  • 1
  • 2
  • 3

编译安装完后,安装到了这个目录:

在这里插入图片描述

把这个目录下的binincludelib下的文件分别拷贝到 /usr/local/bin/usr/local/include/usr/local/lib目录下

在这里插入图片描述

然后把 /usr/local/lib/pkgconfig/x265.pc 文件中的第一行修改为:prefix=/usr/local

在这里插入图片描述
 

3.4 编译 fdk-aac

fdk-aac的编译是在Windows下使用cmake编译的。

很多网上的老的编译教程中fdk-aac的源码目录中有个Makefile.vc的文件,但是新的版本没有了。下面使用Windows下CMake的编译方法:

首先,下载Windows版本的 CMake安装(下载地址:Download CMake

在这里插入图片描述

安装完后, 打开 cmake-gui

在这里插入图片描述

在这里插入图片描述

点击Configure之后,选择你安装的Visual Studio版本,选择x64或者win32(我要编译64位的,就选择x64)

在这里插入图片描述

configure完成后,会出现下面这些配置项,更改 CMAKE_INSTALL_PREFIX 为 msys64安装目录下的 /usr/local ,然后再次点击 Configure, 之后点击 Generate

在这里插入图片描述

之后在build目录会生成 fdk-aac.sln,使用Visual studio 打开 fdk-aac.sln

在这里插入图片描述

在这里插入图片描述

编译完后, 选择 INSTALL 编译

在这里插入图片描述

完成后, 可以看到编译后的文件都自动生成在了指定的目录:

在这里插入图片描述

修改fdk-aac.pc文件,把prefix改为 /usr/local

在这里插入图片描述

3.5 SDL2

如果需要编译ffplay,则需要下载SDL2,并配置。
下载地址:https://www.libsdl.org/download-2.0.php
下载VC版本

在这里插入图片描述

下载解压后,我放到了C盘:

在这里插入图片描述

按照以下操作配置:
(1)配置sdl2对msvc可见
在MSYS2控制台执行(注意目录得使用Windows格式 C://…而非 /c/…):

export INCLUDE=$INCLUDE";sdl2头文件目录"
export LIB=$LIB";sdl2库文件目录"
  • 1
  • 2

例如,我这里这样填的:

export INCLUDE=$INCLUDE";C:\SDL2-2.0.22\include"
export LIB=$LIB";C:\SDL2-2.0.22\lib\x64"
  • 1
  • 2

(2)配置sdl2对pkg-config可见
在 /mingw64/lib/pkgconfig(在MSYS终端使用指令 echo $PKG_CONFIG_PATH 查询到的目录) 新建一个名为 sdl2.pc 的文件,编写规则为:

prefix=你的sdl2所在目录(目录格式/c/...而非C://...)
libdir=${prefix}/lib/x64	这里注意你用的是x64还是x86
includedir=${prefix}/include

Name: sdl2
Description: sdl2
Version: 2.0.22 你下载的版本
Libs: -L${libdir} -lsdl2

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

例如:

在这里插入图片描述



 

4. 编译FFmpeg

编译之前,修改两个lib文件名

在这里插入图片描述

将 /usr/local/lib 目录下的 pkgconfig文件夹 拷贝到 /mingw64/lib 目录下 (如果是32位的,拷贝到 mingw32/lib 目录)

在这里插入图片描述

在MSYS2终端中执行:

CC=cl.exe ./configure --prefix=./install --toolchain=msvc --arch=x64 --enable-shared --enable-sdl2  --enable-gpl --enable-libx264 --enable-libx265 --enable-libfdk-aac --enable-nonfree
  • 1

参数说明:

参数说明
–prefix=./install指定输出的目录是在当前目录的install目录下
–toolchain=msvc指定编译工具链为vs
–arch=x64编译64位,不加这项则编译32位
–enable-shared编译为动态链接库
–enable-sdl2如果要编译ffplay则需要sdl2
–enable-libx264支持x264
–enable-libx265支持x265
–enable-gpl支持h264协议,x264 x265 必备
–enable-libfdk-aac支持aac音频编码
–enable-nonfreeaac 必须包含-enable-nonfree

在这里插入图片描述

然后执行: (指令中的 -j4 可以根据自己电脑性能改成自己电脑最大线程 比如: -j16 等)

make -j4
make install
  • 1
  • 2

执行比较慢,执行完成后,生成下列文件,FFmpeg就编译完成了 :

在这里插入图片描述

注意: 如果拷贝给其他人使用,需要把 x264x265fdk-aacsdl2 这些库一起拷贝
例如:

在这里插入图片描述

4.1 编译问题

编译FFmepg时可能会报这样的错误:

在这里插入图片描述
fftools/ffprobe.c(3047): error C2001: 常量中有换行符
我就把这一行ffprobe.c的3047行打印字符给注释了,两处代码:

//av_log(NULL, level, "%sbuilt with %s\n", indent, CC_IDENT);
//print_str("compiler_ident", CC_IDENT);
  • 1
  • 2



 

5. FFmpeg官网动态库下载

FFmpeg官网有已经编译好的库文件: Download FFmpeg

在这里插入图片描述
Gyan.dev和BtbN都提供了FFmpeg的预编译版本。
Gyan.dev通常使用MSVC编译器,而BtbN使用MinGW编译器。因此,Gyan.dev的版本可能会更符合Windows标准,而BtbN的版本可能会更加开放和跨平台。

这里以 Gyan.dev的版本为例:

在这里插入图片描述
各个版本的区别介绍

  • essential 就是简版,只包含ffmpeg.exe、ffplay.exe、ffprobe.exe
  • full版 也是只包含ffmpeg.exe、ffplay.exe、ffprobe.exe,但是比essential版本包含的功能更多
  • full-shared版 不仅包含ffmpeg.exe、ffplay.exe、ffprobe.exe,还包含开发所需要的dll和lib,这使得开发者可以使用FFmpeg的功能实现自己的应用程序或集成FFmpeg到自己的项目中。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

下载后解压,文件目录如下:
在这里插入图片描述

bin目录添加到环境变量
在这里插入图片描述
在这里插入图片描述

接下来在打开命令终端 执行: ffmpeg -version

在这里插入图片描述


 

6. 参考

Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
VS2019+Msys2 编译ffmpeg
音视频技术应用(1)-使用VS2019来编译FFmpeg 环境搭建
Windows + MSVC环境编译ffmpeg

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用MSYS2VS2015编译FFmpeg,你可以按照以下步骤进行操作: 1. 首先,你需要下载并安装MSYS2。你可以从官方网站https://www.msys2.org/下载MSYS2安装程序。 2. 安装完成后,打开MSYS2的命令行界面,并运行以下命令来安装必要的工具:pacman -S make gcc diffutils 3. 为了避免和MSVC的link.exe程序冲突,你需要将C:\msys64\usr\bin\link.exe重命名为C:\msys64\usr\bin\link_orig.exe。 4. 下载YASM(The Yasm Modular Assembler),你可以从官方网站https://www.tortall.net/projects/yasm/wiki/Download下载YASM。将下载的yasm--win64.exe重命名为yasm.exe,并将其拷贝至MSYS2的安装目录(比如C:\msys64)。 5. 现在你可以下载FFmpeg的源代码。你可以从官方GitHub仓库https://github.com/FFmpeg/FFmpeg下载FFmpeg的源码。 6. 打开MSYS2的命令行界面,并切换到FFmpeg源码所在的目录。 7. 运行以下命令来配置FFmpeg编译选项:./configure --toolchain=msvc --arch=x86_64 --enable-yasm --enable-asm --enable-shared --disable-static 8. 配置完成后,你可以运行make命令来开始编译FFmpeg。请注意,编译过程可能会比较耗时,请耐心等待。 9. 编译完成后,你可以使用编译好的库来进行你的项目开发。 总结一下,使用MSYS2VS2015编译FFmpeg的步骤包括安装MSYS2、安装必要的工具、重命名link.exe、下载YASM、下载FFmpeg源码、配置编译选项、运行make命令进行编译。希望以上信息对你有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用msys64+vs2019在编译ffmpeg](https://download.csdn.net/download/ihmhm12345/13116875)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用MSYS2 + VS2022编译FFmpeg](https://blog.csdn.net/powang2011/article/details/122724685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值