700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > FFmpeg - Windows下使用MSYS2和VS编译FFmpeg

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

时间:2023-06-08 19:26:23

相关推荐

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

文章目录

0. 说明1. 安装MSYS21.1 下载1.2 安装2. 下载FFmpeg及其他源码3. 编译配置依赖库3.1 打开一个新的MSYS2终端3.2 编译x2643.3 编译 x2653.4 编译 fdk-aac3.5 SDL24. 编译FFmpeg4.1 编译问题5. 其他6. 参考

0. 说明

这里介绍的是手动编译FFmpeg。

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

1. 安装MSYS2

1.1 下载

下载地址: MSYS2

1.2 安装

(1) 使用默认安装目录安装,安装在目录c:\msys64;

(2) 安装完成后,打开MSYS,执行下面两步更新数据:

pacman -Syupacman -Su

(3)安装其他工具包:

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

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

2. 下载FFmpeg及其他源码

FFmpeg地址:git clone /ffmpeg.git ffmpegx264地址:git clone /videolan/x264.gitx265地址:git clone /multicoreware/x265_git.gitfdk-aac地址:git clone /mstorsjo/fdk-aac.git

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

3. 编译配置依赖库

3.1 打开一个新的MSYS2终端

(1)修改msys2_shell.cmd文件

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

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

msys2_shell.cmd -mingw64

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

3.2 编译x264

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

cd ~/resources/x264/CC=cl ./configure --enable-sharedmake -j4make install

3.3 编译 x265

首先查询cmake路径:

whereis cmake

需要修改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//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

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

编译:

cd ~/resources/x265_git/build/msys-cl/./make-Makefiles-64bit.shnmake install

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

把这个目录下的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-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,并配置。

下载地址:/download-2.0.php

下载VC版本

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

按照以下操作配置:

(1)配置sdl2对msvc可见

在MSYS2控制台执行(注意目录得使用Windows格式 C://…而非 /c/…):

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

例如,我这里这样填的:

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

(2)配置sdl2对pkg-config可见

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

prefix=你的sdl2所在目录(目录格式/c/...而非C://...)libdir=${prefix}/lib/x64这里注意你用的是x64还是x86includedir=${prefix}/includeName: sdl2Description: sdl2Version: 2.0.22你下载的版本Libs: -L${libdir} -lsdl2

例如:

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

参数说明:

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

make -j4make install

执行比较慢,执行完成后,生成下列文件,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);

5. 其他

FFmpeg官网有已经编译好的库文件: /download.html

6. 参考

Windows10 使用MSYS2和VS编译FFmpeg源代码-测试通过

VS+Msys2 编译ffmpeg

音视频技术应用(1)-使用VS来编译FFmpeg 环境搭建

Windows + MSVC环境编译ffmpeg

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。