Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (2024)

1.1安装Visual Studio 2019

这个步骤相对比较简单,不再详细说明。

1.2 安装msys2

首先需要安装msys2环境以及相关的编译依赖项, 官方网址为:

https://www.msys2.org/

在官网下载好 安装程序后,直接按照提示安装即可。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (1)

安装好后需要将下载库的地址更换为国内源,否则下载速度可能会极慢,甚至失败。配置文件位于:C:\msys64\etc\pacman.d,分别将mirrorlist.mingw32、mirrorlist.mingw64、mirrorlist.msys三个配置文件的首选Server的地址,更换为清华大学及中科大镜像

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (2)

# See https://www.msys2.org/dev/mirrors## Primary## 清华大学Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/## 中科大Server = https://mirrors.ustc.edu.cn/msys2/mingw/i686/Server = https://mirror.msys2.org/mingw/i686/Server = https://repo.msys2.org/mingw/i686/## Tier 1Server = https://mirror.umd.edu/msys2/mingw/i686/Server = https://mirror.yandex.ru/mirrors/msys2/mingw/i686/Server = https://download.nus.edu.sg/mirror/msys2/mingw/i686/Server = https://mirror.accum.se/mirror/msys2.org/mingw/i686/Server = https://ftp.nluug.nl/pub/os/windows/msys2/builds/mingw/i686/Server = https://ftp.osuosl.org/pub/msys2/mingw/i686/Server = https://mirror.internet.asn.au/pub/msys2/mingw/i686/Server = https://mirror.selfnet.de/msys2/mingw/i686/Server = https://mirrors.dotsrc.org/msys2/mingw/i686/Server = https://mirrors.bfsu.edu.cn/msys2/mingw/i686/Server = https://mirror.nju.edu.cn/msys2/mingw/i686/Server = https://repo.extreme-ix.org/msys2/mingw/i686/Server = https://mirror.clarkson.edu/msys2/mingw/i686/Server = https://quantum-mirror.hu/mirrors/pub/msys2/mingw/i686/Server = https://mirror.archlinux.tw/MSYS2/mingw/i686/Server = https://fastmirror.pp.ua/msys2/mingw/i686/## Tier 2Server = https://ftp.cc.uoc.gr/mirrors/msys2/mingw/i686/Server = https://mirror.jmu.edu/pub/msys2/mingw/i686/Server = https://mirrors.piconets.webwerks.in/msys2-mirror/mingw/i686/Server = https://www2.futureware.at/~nickoe/msys2-mirror/mingw/i686/Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/mingw/i686/Server = https://mirrors.bit.edu.cn/msys2/mingw/i686/Server = https://mirrors.aliyun.com/msys2/mingw/i686/Server = https://mirror.iscas.ac.cn/msys2/mingw/i686/Server = https://mirrors.cloud.tencent.com/msys2/mingw/i686/

mirrorlist.mingw32

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (3)

# See https://www.msys2.org/dev/mirrors## PrimaryServer = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/Server = https://mirrors.ustc.edu.cn/msys2/mingw/x86_64/Server = https://mirror.msys2.org/mingw/x86_64/Server = https://repo.msys2.org/mingw/x86_64/## Tier 1Server = https://mirror.umd.edu/msys2/mingw/x86_64/Server = https://mirror.yandex.ru/mirrors/msys2/mingw/x86_64/Server = https://download.nus.edu.sg/mirror/msys2/mingw/x86_64/Server = https://mirror.accum.se/mirror/msys2.org/mingw/x86_64/Server = https://ftp.nluug.nl/pub/os/windows/msys2/builds/mingw/x86_64/Server = https://ftp.osuosl.org/pub/msys2/mingw/x86_64/Server = https://mirror.internet.asn.au/pub/msys2/mingw/x86_64/Server = https://mirror.selfnet.de/msys2/mingw/x86_64/Server = https://mirrors.dotsrc.org/msys2/mingw/x86_64/Server = https://mirrors.bfsu.edu.cn/msys2/mingw/x86_64/Server = https://mirror.nju.edu.cn/msys2/mingw/x86_64/Server = https://repo.extreme-ix.org/msys2/mingw/x86_64/Server = https://mirror.clarkson.edu/msys2/mingw/x86_64/Server = https://quantum-mirror.hu/mirrors/pub/msys2/mingw/x86_64/Server = https://mirror.archlinux.tw/MSYS2/mingw/x86_64/Server = https://fastmirror.pp.ua/msys2/mingw/x86_64/## Tier 2Server = https://ftp.cc.uoc.gr/mirrors/msys2/mingw/x86_64/Server = https://mirror.jmu.edu/pub/msys2/mingw/x86_64/Server = https://mirrors.piconets.webwerks.in/msys2-mirror/mingw/x86_64/Server = https://www2.futureware.at/~nickoe/msys2-mirror/mingw/x86_64/Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/mingw/x86_64/Server = https://mirrors.bit.edu.cn/msys2/mingw/x86_64/Server = https://mirrors.aliyun.com/msys2/mingw/x86_64/Server = https://mirror.iscas.ac.cn/msys2/mingw/x86_64/Server = https://mirrors.cloud.tencent.com/msys2/mingw/x86_64/

mirrorlist.mingw64

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (4)

# See https://www.msys2.org/dev/mirrors## PrimaryServer = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/Server = https://mirrors.ustc.edu.cn/msys2/msys/$arch/Server = https://mirror.msys2.org/msys/$arch/Server = https://repo.msys2.org/msys/$arch/## Tier 1Server = https://mirror.umd.edu/msys2/msys/$arch/Server = https://mirror.yandex.ru/mirrors/msys2/msys/$arch/Server = https://download.nus.edu.sg/mirror/msys2/msys/$arch/Server = https://mirror.accum.se/mirror/msys2.org/msys/$arch/Server = https://ftp.nluug.nl/pub/os/windows/msys2/builds/msys/$arch/Server = https://ftp.osuosl.org/pub/msys2/msys/$arch/Server = https://mirror.internet.asn.au/pub/msys2/msys/$arch/Server = https://mirror.selfnet.de/msys2/msys/$arch/Server = https://mirrors.dotsrc.org/msys2/msys/$arch/Server = https://mirrors.bfsu.edu.cn/msys2/msys/$arch/Server = https://mirror.nju.edu.cn/msys2/msys/$arch/Server = https://repo.extreme-ix.org/msys2/msys/$arch/Server = https://mirror.clarkson.edu/msys2/msys/$arch/Server = https://quantum-mirror.hu/mirrors/pub/msys2/msys/$arch/Server = https://mirror.archlinux.tw/MSYS2/msys/$arch/Server = https://fastmirror.pp.ua/msys2/msys/$arch/## Tier 2Server = https://ftp.cc.uoc.gr/mirrors/msys2/msys/$arch/Server = https://mirror.jmu.edu/pub/msys2/msys/$arch/Server = https://mirrors.piconets.webwerks.in/msys2-mirror/msys/$arch/Server = https://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/msys/$arch/Server = https://mirrors.bit.edu.cn/msys2/msys/$arch/Server = https://mirrors.aliyun.com/msys2/msys/$arch/Server = https://mirror.iscas.ac.cn/msys2/msys/$arch/Server = https://mirrors.cloud.tencent.com/msys2/msys/$arch/

mirrorlist.msys

运行C:\msys64\msys2.exe,在命令行通过pacman -Syu一键安装和升级所有的库。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (5)

在编译过程中可能会遇到还缺少某些其他库的问题, 直接根据提示安装就可以。比如可能还需要安装的库如下:

pacman -S make cmake          #常规编译工具pacman -S yasm              #汇编工具pacman -S nasm              #汇编工具pacman -S pkg-config          #库配置工具,编译支持x264和x265会用到pacman -S mingw-w64-x86_64-gcc    #编译工具
pacman -S diffutils           #比较工具,ffmpeg configure 生成makefile时用到
pacman -S git              #源码下载工具

1.3 配置VC环境

首先,为了使msys2访问windows PATH环境变量,需要在msys2安装目录中找到脚本文件msys2_shell.cmd,使用任何编辑器将其打开,将rem set MSYS2_PATH_TYPE=inherit修改为set MSYS2_PATH_TYPE=inherit,即删除rem注释继承系统环境变量。

其次,在windows开始菜单中找到Visual Studio 2019,右击“x64_x86 Cross Tools Command Prompt For VS 2019”,选择以管理员身份运行(最好以管理员权限运行,否则后续在执行make install 指令时可能会发生权限不足的问题,切记)。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (6)

关于几个选项的选择

如果是32位Windows, 想编译32位的FFmpeg, 建议选择:x86 Native Tools Command Prompt;

如果是64位Windows, 想编译64位的FFmpeg, 建议选择:x64 Native Tools Command Prompt

如果是32位Windows, 想编译64位的FFmpeg, 建议选择:x86_x64 Cross Tools Command Prompt

如果是64位Windows, 想编译32位的FFmpeg, 建议选择:x64_x86 Cross Tools Command Prompt

具体请参见微软官网:Use the Microsoft C++ toolset from the command line

我的操作系统是Win10 64位,需要编译的是32位的FFmpeg,所以选择的是:x64_x86 Cross Tools Command Prompt For VS 2019

然后,cd到C:\msys64,32位方式运行msys2_shell.cmd(msys2_shell.cmd -mingw64会以64位方式运行msys2),启用MinGW运行环境,此时在弹出的msys2命令窗口中输入cl,输出MSVC信息,则说明编译器配置成功。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (7)

在msys窗口中分别输入which cl和which link查看当前编译器和链接器的位置:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (8)

可以看到cl编译器的位置是正确的,link链接器的位置是不正确的,这是因为目前找到的链接器默认为MSYS的链接器,MSYS默认也携带了一个名为link.exe的链接器(在:msys安装目录/usr/bin/link.exe),它与Visual Studio 自带的link.exe发生了冲突,这会影响之后构建系统的构建(在我的编译过程中就是因为忽略了这个问题,导致编译过程异常缓慢,而且生成的dll文件无法使用),我们这里一定要确定使用的是Visual Studio自带的link.exe。找到MSYS自带的link.exe, 将它改成别的名字,比如我将其重命名为link.exe_back。再次输入which link:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (9)

可以看到link.exe已经为Visual Studio目录下link.exe。

2.1 源码下载

源码可以由https://github.com/FFmpeg/FFmpeg/tagsFFmpeg官网下载,如本人下载的是最新版的4.3版本。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (10)

2.2 编译依赖库

2.2.1编译SDL

首先从github上获取SDL源码,命令如下:

git clone https://github.com/libsdl-org/SDL.gitcd SDLgit checkout release-2.30.0

需要注意的是,SDL现在已经发布了3.0版本,而ffmpeg目前只能用SDL2版本,所以在拉取代码后,需要切换到2.30.0这个版本。

下载好 SDL2 源码后,我们需要使用CMake为其生成VS工程,所以我们首先到这里下载CMake,并将其安装到Windows系统上。之后打开 CMake-GUI,在 CMake-GUI 中指定SDL2源码所在路径以及编译后的输出路径,随后执行Configure,随后配置如下

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (11)

随后保持默认配置,Generate VS2019工程。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (12)

有了VS工程,可以通过VS2019来编译SDL了。编译好的SDL会保存到指定输出目录的Release或Debug目录下,而我们希望输出的路径则是/usr/local/sdl2/lib,需要在指定输出目录下创建 lib 目录,并将SDL2.lib和SDL2.dll文件拷贝到lib目录下。同时在lib目录下创建 pkgconfig目录,将sdl2.pc文件拷贝到该目录中。此外,我们还要修改 sdl2.pc 中的内容,将其中的库路径修改为指定的输出路径,最终完整的目录结构如下所示:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (13)

2.2.2编译x264

与SDL一样我们也要先获取其源码,可以通过下面的命令获取x264源码:

git clone https://code.videolan.org/videolan/x264.git

源码获取到后,可以直接在MSYS2环境下编译出Windows下可用的动态库,具体步骤如下:

cd x264 # 在MSYS2中进入x264源码目录
pacman -S automake autoconf libtool # 安装生成Makefile的工具CC=cl ./configure --prefix=/usr/local/x264 --enable-sharedmake -j 4 && make install

通过上面的命令就可以将x264编译出来了。x264编译好后,其输出的目录结构与SDL2是一样的,在/usr/local/x264中包括了include、lib、bin等目录。要特别强调的一点是,我们需要将lib目录下的libx264.dll.lib文件名修改为libx264.lib,否则ffmpeg编译时会报 “无法找到该库” 的错误。

2.2.3 编译fdk-aac

fdk-aac的编译与SDL类似,它同样要使用CMake生成VS工程文件,之后再通过VS编译该库。首先,通下面的的命令获取fdk-aac源码:

git clone https://github.com/mstorsjo/fdk-aac.git

之后,通过CMake生成VS工程文件,具体执行步骤请参考 SDL 生成 VS 工程的步骤,这里就不再重复了。
接下来,使用VS2019编译fdk-aac,编译好的库同要会被放到Release或Debug目录下,因此我们必须像处理SDL库一样,需要手工组织fdk-aac的输出目录树。至此fdk-aac就算编译好了。

在编译fdk-aac时有个特殊情况,就是使用CMake的方式无法产生include头文件(这也有可能是我哪块执行的不对)。为了解决这个问题,又用MSYS2+mingw的方式重新编译了一遍fdk-aac,这种方式是可以生成include头文件的,然后将生成的头文件手动拷贝到了/usr/local/fdk-aac目录下即可。

./autogen.sh./configure --prefix=/c/work/Opensource/ffmpegbuild/fdk-aac/migwbuildmakemake install

2.2.4编译x265

首先下载x265源码

git clone https://github.com/videolan/x265.git

查询VS2019 cmake路径查询VS2019 cmake路径,执行whereis cmake

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (14)

编辑文件/c/work/Opensource/ffmpegbuild/x265/build/msys-cl/make-Makefiles.sh,修改其中cmake.exe为VC版绝对路径,否则会使用默认msys2中的cmake,即将:

cmake -G "NMake Makefiles" -DCMAKE_CXX_FLAGS="-DWIN32 -D_WINDOWS -W4 -GR -EHsc" -DCMAKE_C_FLAGS="-DWIN32 -D_WINDOWS -W4" ../../source

修改为:

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

进入源码目录,执行以下3个命令完成编译

cd /home/source/x265/build/msys-cl/./make-Makefiles.shnmake install

执行nmake install之后可见x265被编译至C:/Program Files (x86)/x265/目录,我们需要将其复制至msys2的/usr/local/目录,并修改相应的x256.pc文件中的路径

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (15)

2.2.5 ffmpeg使用编译好的库

首先,我们要设置环境变量PKG_CONFIG_PATH,通过它告诉FFmpeg上述几个库从哪儿可以找到,具体的设置方法如下:

在msys2窗口运行命令pacman -S vim,安装vim,vim ~/.bashrc编辑该文件,在~/.bashrc中设置环境变量

export PKG_CONFIG_PATH=/usr/local/sdl2/lib/pkgconfig:/usr/local/x264/lib/pkgconfig:/usr/local/fdk-aac/lib/pkgconfig:/usr/local/x265/lib/pkgconfig:$PKG_CONFIG_PATH

然后执行命令source ~/.bashrc让环境变量生效。四个库pkgconfig配置文件内容如下:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (16)

# sdl pkg-config source fileprefix=/usr/local/sdl2exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includeName: sdl2Description: Simple DirectMedia Layer is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer.Version: 2.30.0Requires.private: Conflicts:Libs: -L${libdir} -lSDL2 Libs.private: -lSDL2-static -lkernel32 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lversion -luuid -ladvapi32 -lsetupapi -lshell32 -ldinput8Cflags: -I${includedir} -I${includedir}/SDL2 

sdl2.pc

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (17)

prefix=/usr/local/x264exec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includeName: x264Description: H.264 (MPEG4 AVC) encoder libraryVersion: 0.164.3191Libs: -L${exec_prefix}/lib -llibx264 Libs.private: Cflags: -I${prefix}/include -DX264_API_IMPORTS

x264.pc

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (18)

prefix=/usr/local/fdk-aacexec_prefix=${prefix}libdir=${exec_prefix}/libincludedir=${prefix}/includeName: Fraunhofer FDK AAC Codec LibraryDescription: AAC codec libraryVersion: 2.0.3Libs: -L${libdir} -lfdk-aac Libs.private: -lm Cflags: -I${includedir}

fdk-aac.pc

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (19)

prefix=/usr/local/x265exec_prefix=${prefix}/binlibdir=${prefix}/libincludedir=${prefix}/includeName: x265Description: H.265/HEVC video encoderVersion: 3.4Libs: -L${libdir} -llibx265Libs.private: Cflags: -I${includedir}

x265.pc

2.3 编译ffmpeg

进入到ffmpeg源码解压目录,执行./configure --help即可查看所有支持的编译参数:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (20)

可以看到,原生支持的编译参数有很多,我们这里只关注下列部分,通过对下列参数的配置即可完成裁剪功能。

Individual component options:--disable-everything 禁用下方的所有组件--disable-encoder=NAME 禁用指定的编码器--enable-encoder=NAME 启用指定的编码器--disable-encoders 禁用所有编码器--disable-decoder=NAME 禁用指定的解码器--enable-decoder=NAME 启用指定的解码器--disable-decoders 禁用所有解码器--disable-hwaccel=NAME 禁用硬件加速(硬件解码)--enable-hwaccel=NAME 启用硬件加速--disable-hwaccels 禁用所有硬件加速--disable-muxer=NAME 禁用指定的封装器--enable-muxer=NAME 启用指定的封装器--disable-muxers 禁用所有封装器--disable-demuxer=NAME 禁用指定的解封装器--enable-demuxer=NAME 启用指定的封装器--disable-demuxers 禁用所有解封装器--enable-parser=NAME 启用指定的解析器--disable-parser=NAME 禁用指定的解析器--disable-parsers 禁用所有的解析器--enable-bsf=NAME 启用指定的比特流过滤器(bitstream filter)--disable-bsf=NAME 禁用指定的比特流过滤器--disable-bsfs 禁用所有比特流过滤器--enable-protocol=NAME 启用指定的协议(这里的协议就是TCP/UDP/FILE)--disable-protocol=NAME 禁用指定的协议--disable-protocols 禁用所有的协议--enable-indev=NAME 启用指定的输入设备--disable-indev=NAME 禁用指定的输入设备--disable-indevs 禁用所有的输入设备--enable-outdev=NAME 启用指定的输出设备--disable-outdev=NAME 禁用指定的输出设备--disable-outdevs 禁用所有输出设备--disable-devices 禁用所有设备--enable-filter=NAME 启用指定的过滤器--disable-filter=NAME 禁用指定的过滤器--disable-filters 禁用所有过滤器

简单介绍一下上面的几个选项:

  • encoder:对应的就是编码器,比如需要将mp3格式转换成aac格式,在转换后就必然会用到aac格式的编码器;
  • decoder:对应的就是解码器,同上,如果要转换成aac格式,就必须先要将mp3格式进行解码,这就会用到mp3格式的解码器。
  • muxer:对应的就是封装器,主要用于生成最终的封装格式,不同的音视频格式都有其固定的文件内容格式,方便播放器对其进行识别和解析。
  • demuxer:对应的就是解封装器,比如一个MP4封装格式可以同时容纳H264编码格式的视频和AAC编码格式的音频,如果要取出其中的音频,就需要根据一定的规则去查找音频所在的流。
  • protocol:文件协议,FFmpeg 不仅可以支持本地音视频文件的读取和写入,也可以支持网络流媒体的读取和写入,比如你想在本地观看一个网络电视,那么你可以在FFmpeg中传入这个网络电视的http/rtsp/rtmp地址,这样就可以实现本地播放了。
  • parser:解析并填充内部数据结构,如:AVCodecParser, 这个和decoder 一般是搭配使用的。

这里列出的是一些常用的编译选项,完整的编译选项请参考:附录一:《FFmpeg 编译参数总结》。

本人在编译时使用如下编译选项:

./configure --prefix=./buildout --toolchain=msvc --disable-doc --enable-shared --enable-libx264 --enable-gpl --enable-libfdk-aac --enable-nonfree --enable-libx265 --enable-sdl--enable-ffplay --disable-debug

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (21)

其中增加最后一个配置选项--disable-debug,是因为在没有这个选项的情况下,编译会卡死在生成avcodec.dll库时,提示“正在创建库 libavcodec/avcodec.lib 和对象 libavcodec/avcodec.exp”,该文章也遇到这个问题,但是微软官方也没有给出解决方案,不清楚是不是只有在特定版本的VS2019(本人为community版本)中才能复现该问题,所以暂时增加--disable-debug取消调试信息生成。

之后执行make命令进行编译。在编译过程中,假如出现如下错误[error C2065: “slib”: 未声明的标识符]:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (22)那么需要修改fftools/cmdutils.c源码文件, 将第1153行注释掉,原因是CC_IDENT标识未定义引起的, 如下所示:

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (23)

后续编译过程中遇见类似的编译错误,请按相同办法处理。编译完成后执行make install,将会将可执行程序、库文件、头文件等安装到指定目录。

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (24)

至此编译完成,后续会介绍通过vcpkg直接安装ffmpeg的方法以及一个基于ffmpeg的简单播放器实例。

附录一:FFmpeg 编译参数汇总

1.1 Help options 帮助选项

参数参数作用
–help打印显示帮助信息
–quiet禁止显示信息输出
–list-decoders显示所有可用的解码器
–list-encoders显示所有可用的编码器
–list-hwaccels显示所有可用的硬件加速器
–list-demuxers显示所有可用的解复用器
–list-muxers显示所有可用的复用器
–list-parsers显示所有可用的解析器
–list-protocols显示所有可用的协议
–list-bsfs显示所有可用的比特流过滤器
–list-indevs显示所有可用的输入设备
–list-outdevs显示所有可用的输出设备
–list-filters显示所有可用的过滤器

1.2 Standard options 标准选项

参数参数作用
–logfile=FILE记录测试并输出到 指定文件FILE ,默认为ffbuild/config.log
–disable-logging不记录配置调试信息
–fatal-warnings如果生成任何配置警告,则失败
–prefix=PREFIX安装在指定路径PREFIX,默认为/usr/local
–bindir=DIR在指定路径DIR 中安装二进制文件,默认为PREFIX/bin
–datadir=DIR在指定路径DIR中安装数据文件,默认为PREFIX/share/ffmpeg
–docdir=DIR在指定路径DIR中安装文档,默认为PREFIX/share/doc/ffmpeg
–libdir=DIR在指定路径安装库,默认为PREFIX/lib
–shlibdir=DIR在指定路径安装共享库,默认为LIBDIR,即PREFIX/lib
–incdir=DIR在指定路径安装包含文件,默认为PREFIX/include
–mandir=DIR在指定路径安装手册页,默认为PREFIX/share/man
–pkgconfigdir=DIR在指定路径安装pkg-config 文件,默认为LIBDIR/pkgconfig
–enable-rpath使用rpath允许在不属于动态链接器搜索路径的路径中安装库链接程序时使用rpath(小心使用)
–install-name-dir=DIRDarwin 已安装目标的目录名称

1.3 Licensing options 证书选项

参数参数作用
–enable-gpl允许使用GPL代码,编译的库和二进制文件处于GPL许可下,默认为否
–enable-version3升级(L)GPL到版本3,默认为否
–enable-nonfree允许使用非自由代码,并且二进制文件将不可再分发,默认为否

1.4 Configuration options 配置选项

参数参数作用
–disable-static不构建静态库,默认为否
–enable-shared构建共享动态库,默认为否
–enable-small优化大小而不是速度
–disable-runtime-cpudetect禁用在运行时检测 CPU 功能(较小的二进制文件)
–enable-gray启用全灰度支持(较慢的颜色)
–disable-swscale-alpha在 swscale 中禁用 alpha 通道支持
–disable-all禁用构建组件、库和程序
–disable-autodetect禁用自动检测到的外部库,默认为否

1.5 Program options 程序选项

参数参数作用
–disable-programs不构建命令行程序
–disable-ffmpeg禁用 ffmpeg 构建
–disable-ffplay禁用 ffplay 构建
–disable-ffprobe禁用 ffprobe 构建

1.6 Documentation options 文档选项

参数参数作用
–disable-doc不构建文档
–disable-htmlpages不构建 HTML 文档页面
–disable-manpages不构建手册文档页面
–disable-podpages不构建 POD 文档页面
–disable-txtpages不构建文本文档页面

1.7 Component options 组件选项

参数参数作用
–disable-avdevice禁用 libavdevice 构建
–disable-avcodec禁用 libavcodec 构建
–disable-avformat禁用 libavformat 构建
–disable-swresample禁用 libswresample 构建
–disable-swscale禁用 libswscale 构建
–disable-postproc禁用 libpostproc 构建
–disable-avfilter禁用 libavfilter 构建
–enable-avresample启用 libavresample 构建(已弃用),默认为否
–disable-pthreads禁用 pthreads [自动检测]
–disable-w32threads禁用 Win32 线程 [自动检测]
–disable-os2threads禁用 OS/2 线程 [自动检测]
–disable-network禁用网络支持 ,默认为否
–disable-dct禁用 DCT 代码
–disable-dwt禁用 DWT 代码
–disable-error-resilience禁用错误恢复代码
–disable-lsp禁用 LSP 代码
–disable-lzo禁用 LZO 解码器代码
–disable-mdct禁用 MDCT 代码
–disable-rdft禁用 RDFT 代码
–disable-fft禁用 FFT 代码
–disable-faan禁用浮点 AAN (I)DCT 代码
–disable-pixelutils在 libavutil 中禁用像素工具

1.8 Individual component options 独立组件选项

参数参数作用
–disable-everything禁用下面列出的所有组件
–disable-encoder=NAME禁用指定NAME的编码器
–enable-encoder=NAME启用指定NAME的编码器
–disable-encoders禁用所有编码器
–disable-decoder=NAME禁用指定NAME的解码器
–enable-decoder=NAME启用指定NAME的解码器
–disable-decoders禁用所有解码器
–disable-hwaccel=NAME禁用指定NAME的硬件
–enable-hwaccel=NAME启用指定NAME的硬件
–disable-hwaccels禁用所有 hwaccels
–disable-muxer=NAME禁用指定NAME的复用器
–enable-muxer=NAME启用指定NAME的复用器
–disable-muxers禁用所有复用器
–disable-demuxer=NAME禁用指定NAME的解复用器
–enable-demuxer=NAME启用指定NAME的解复用器
–disable-demuxers禁用所有解复用器
–enable-parser=NAME启用指定NAME的解析器
–disable-parser=NAME禁用指定NAME的解析器
–disable-parsers禁用所有解析器
–enable-bsf=NAME启用指定NAME的比特流过滤器
–disable-bsf=NAME禁用指定NAME的比特流过滤器
–disable-bsfs禁用所有比特流过滤器
–enable-protocol=NAME启用指定NAME协议
–disable-protocol=NAME禁用指定NAME协议
–disable-protocols禁用所有协议
–enable-indev=NAME启用指定NAME的输入设备
–disable-indev=NAME禁用指定NAME的输入设备
–disable-indevs禁用输入设备
–enable-outdev=NAME启用指定NAME的输出设备
–disable-outdev=NAME禁用指定NAME的输出设备
–disable-outdevs禁用输出设备
–disable-devices禁用所有设备
–enable-filter=NAME启用指定NAME的过滤器名称
–disable-filter=NAME禁用指定NAME的过滤器名称
–disable-filters禁用所有过滤器

1.9 External library support 扩展库支持

使用以下任何选项将允许 FFmpeg 链接到相应的外部库。 如果满足所有其他依赖项并且未明确禁用它们,则依赖于该库的所有组件都将启用。 例如。 --enable-libopus 将启用与 libopus 的链接并允许构建 libopus 编码器,除非使用 --disable-encoder=libopus 明确禁用它。

请注意,只有系统库会被自动检测。 所有其他外部库必须显式启用。

另请注意,以下帮助文本描述了库本身的用途,并非它们的所有功能都必须由 FFmpeg 使用。

参数参数作用
–disable-alsa禁用 ALSA 支持 [自动检测]
–disable-appkit禁用 Apple AppKit 框架 [自动检测]
–disable-avfoundation禁用 Apple AVFoundation 框架 [自动检测]
–enable-avisynth启用读取 AviSynth 脚本文件 [否]
–disable-bzlib禁用 bzlib [自动检测]
–disable-coreimage禁用 Apple CoreImage 框架 [自动检测]
–enable-chromaprint使用 chromaprint 启用音频指纹识别,默认为否
–enable-frei0r启用 frei0r 视频过滤 ,默认为否
–enable-gcrypt启用 gcrypt,需要 rtmp(t)e 支持,如果未使用 openssl、librtmp 或 gmp则默认为否
–enable-gmp启用 gmp,需要 rtmp(t)e 支持,如果未使用 openssl 或 librtmp则默认为否
–enable-gnutls启用 gnutls,需要 https 支持,如果未使用 openssl、libtls 或 mbedtls则默认为否
–disable-iconv禁用 iconv [自动检测]
–enable-jni启用 JNI 支持,默认为否
–enable-ladspa启用 LADSPA 音频过滤,默认为否
–enable-libaom通过 libaom 启用 AV1 视频编码/解码,默认为否
–enable-libaribb24通过 libaribb24 启用 ARIB 文本和字幕解码,默认为否
–enable-libass启用 libass 字幕渲染,需要字幕,默认为否
–enable-libbluray使用 libbluray 启用蓝光阅读,默认为否
–enable-libbs2b启用 bs2b DSP 库,默认为否
–enable-libcaca使用 libcaca 启用文本显示,默认为否
–enable-libcelt通过 libcelt 启用 CELT 解码,默认为否
–enable-libcdio启用使用 libcdio 抓取音频 CD,默认为否
–enable-libcodec2使用 libcodec2 启用 codec2 编码/解码,默认为否
–enable-libdav1d通过 libdav1d 启用 AV1 解码,默认为否
–enable-libdavs2通过 libdavs2 启用 AVS2 解码,默认为否
–enable-libdc1394使用 libdc1394和libraw1394启用IIDC-1394 抓取
–enable-libfdk-aac通过 libfdk-aac 启用 AAC 解码/编码,默认为否
–enable-libflite通过 libflite 启用 flite(语音合成)支持,默认为否
–enable-libfontconfig启用 libfontconfig,对 drawtext 过滤器有用,默认为否
–enable-libfreetype启用 libfreetype,drawtext 过滤器需要,默认为否
–enable-libfribidi启用 libfribidi,改进 drawtext 过滤器,默认为否
–enable-libglslang启用 GLSL->SPIRV 编译通过 libglslang,默认为否
–enable-libgme通过 libgme 启用游戏音乐 Emu,默认为否
–enable-libgsm通过 libgsm 启用 GSM 解码/编码,默认为否
–enable-libiec61883通过 libiec61883 启用 iec61883,默认为否
–enable-libilbc通过 libilbc 启用 iLBC 解码/编码,默认为否
–enable-libjack启用 JACK 音频声音服务器,默认为否
–enable-libklvanc启用内核实验室 VANC 处理,默认为否
–enable-libkvazaar通过 libkvazaar 启用 HEVC 编码,默认为否
–enable-liblensfun启用 lensfun 镜头校正,默认为否
–enable-libmodplug通过 libmodplug 启用 ModPlug,默认为否
–enable-libmp3lame通过 libmp3lame 启用 MP3 编码,默认为否
–enable-libopencore-amrnb通过 libopencore-amrnb 启用 AMR-NB 解码/编码,默认为否
–enable-libopencore-amrwb通过 libopencore-amrwb 启用 AMR-WB 解码,默认为否
–enable-libopencv通过 libopencv 启用视频过滤,默认为否
–enable-libopenh264通过 OpenH264 启用 H.264 编码,默认为否
–enable-libopenjpeg通过 OpenJPEG 启用 JPEG 2000 解码/编码,默认为否
–enable-libopenmpt启用通过 libopenmpt 解码跟踪的文件,默认为否
–enable-libopenvino启用 OpenVINO 作为 DNN 模块后端,默认为否
–enable-libopus通过 libopus 启用 Opus 解码/编码,默认为否
–enable-libpulse通过 libpulse 启用 Pulseaudio 输入,默认为否
–enable-librabbitmq启用 RabbitMQ 库,默认为否
–enable-librav1e通过 rav1e 启用 AV1 编码,默认为否
–enable-librist通过 librist 启用 RIST,默认为否
–enable-librsvg通过 librsvg 启用 SVG 光栅化,默认为否
–enable-librubberband启用橡皮筋过滤器所需的橡皮筋,默认为否
–enable-librtmp通过 librtmp 启用 RTMP[E] 支持,默认为否
–enable-libshine通过 libshine 启用定点 MP3 编码,默认为否
–enable-libsmbclient通过 libsmbclient 启用 Samba 协议,默认为否
–enable-libsnappy启用 Snappy 压缩,需要 hap 编码,默认为否
–enable-libsoxr启用libsoxr 重采样,默认为否
–enable-libspeex通过 libspeex 启用 Speex 解码/编码,默认为否
–enable-libsrt通过 libsrt 启用 Haivision SRT 协议,默认为否
–enable-libssh通过 libssh 启用 SFTP 协议,默认为否
–enable-libsvtav1通过 SVT 启用 AV1 编码,默认为否
–enable-libtensorflow启用TensorFlow作为基于DNN的过滤器的DNN模块后端,默认为否
–enable-libtesseract启用 Tesseract,ocr 过滤器需要,默认为否
–enable-libtheora通过 libtheora 启用 Theora 编码,默认为否
–enable-libtls如果未使用openssl、gnutls或mbedtls,则启用https支持所需的LibreSSL,默认为否
–enable-libtwolame通过 libttwolame 启用 MP2 编码,默认为否
–enable-libuavs3d通过 libuavs3d 启用 AVS3 解码,默认为否
–enable-libv4l2启用 libv4l2/v4l-utils,默认为否
–enable-libvidstab使用 vid.stab 启用视频稳定,默认为否
–enable-libvmaf通过 libvmaf 启用 vmaf 过滤器,默认为否
–enable-libvo-amrwbenc通过 libvo-amrwbenc 启用 AMR-WB 编码,默认为否
–enable-libvorbis通过 libvorbis 启用 Vorbis 编码/解码,默认为否
–enable-libvpx通过 libvpx 启用 VP8 和 VP9 解码/编码,默认为否
–enable-libwebp通过 libwebp 启用 WebP 编码,默认为否
–enable-libx264通过 x264 启用 H.264 编码,默认为否
–enable-libx265通过 x265 启用 HEVC 编码,默认为否
–enable-libxavs通过 xavs 启用 AVS 编码,默认为否
–enable-libxavs2通过 xavs2 启用 AVS2 编码,默认为否
–enable-libxcb使用 XCB 启用 X11 抓取 [自动检测]
–enable-libxcb-shm启用 X11 抓取 shm 通信 [自动检测]
–enable-libxcb-xfixes启用 X11 抓取鼠标渲染 [自动检测]
–enable-libxcb-shape启用 X11 抓取形状渲染 [自动检测]
–enable-libxvid通过 xvidcore 启用 Xvid 编码,存在原生 MPEG-4/Xvid 编码器,默认为否
–enable-libxml2使用 C 库 libxml2 启用 XML 解析,默认为否
–enable-libzimg启用 z.lib,zscale 过滤器需要,默认为否
–enable-libzmq启用通过 libzmq 传递消息,默认为否
–enable-libzvbi通过 libzvbi 启用图文电视支持,默认为否
–enable-lv2启用 LV2 音频过滤,默认为否
–disable-lzma禁用 lzma [自动检测]
–enable-decklink启用 Blackmagic DeckLink I/O 支持,默认为否
–enable-mbedtls如果未使用openssl、gnutls或libtls,则启用https支持所需的mbedTLS,默认为否
–enable-mediacodec启用 Android MediaCodec 支持,默认为否
–enable-mediafoundation通过 MediaFoundation 启用编码
–enable-libmysofa启用 libmysofa,需要 soflizer 过滤器,默认为否
–enable-openal启用 OpenAL 1.1 捕获支持,默认为否
–enable-opencl启用 OpenCL 处理,默认为否
–enable-opengl启用 OpenGL 渲染,默认为否
–enable-openssl如果未使用gnutls、libtls 或 mbedtls,则启用https支持所需的openssl,默认为否
–enable-pocketsphinx启用 PocketSphinx,asr 过滤器需要,默认为否
–disable-sndio禁用 sndio 支持 [自动检测]
–disable-schannel禁用 SChannel SSP,需要 TLS 支持[自动检测]
–disable-sdl2禁用 sdl2 [自动检测]
–disable-securetransport禁用安全传输,需要 TLS 支持
–enable-vapoursynth启用 VapourSynth 解复用器,默认为否
–enable-vulkan启用 Vulkan 代码,默认为否
–disable-xlib禁用 xlib [自动检测]
–disable-zlib禁用 zlib [自动检测]

以下库提供各种硬件加速功能:

参数参数作用
–disable-amf禁用 AMF 视频编码代码 [自动检测]
–disable-audiotoolbox禁用 Apple AudioToolbox 代码 [自动检测]
–enable-cuda-nvcc启用 Nvidia CUDA 编译器,默认为否
–disable-cuda-llvm使用 clang, 禁用 CUDA 编译[自动检测]
–disable-cuvid禁用 Nvidia CUVID 支持 [自动检测]
–disable-d3d11va禁用 Microsoft Direct3D 11 视频加速代码 [自动检测]
–disable-dxva2禁用 Microsoft DirectX 9 视频加速代码 [自动检测]
–disable-ffnvcodec禁用动态链接的 Nvidia 代码 [自动检测]
–enable-libdrm启用 DRM 代码 (Linux),默认为否
–enable-libmfx通过 libmfx 启用英特尔 MediaSDK(AKA 快速同步视频)代码,默认为否
–enable-libnpp启用基于 Nvidia Performance Primitives 的代码,默认为否
–enable-mmal通过 MMAL 启用 Broadcom 多媒体抽象层 (Raspberry Pi) ,默认为否
–disable-nvdec禁用 Nvidia 视频解码加速(通过 hwaccel)[自动检测]
–disable-nvenc禁用 Nvidia 视频编码代码 [自动检测]
–enable-omx启用 OpenMAX IL 代码,默认为否
–enable-omx-rpi为 Raspberry Pi 启用 OpenMAX IL 代码 ,默认为否
–enable-rkmpp启用瑞芯微媒体处理平台代码 ,默认为否
–disable-v4l2-m2m禁用 V4L2 mem2mem 代码 [自动检测]
–disable-vaapi禁用视频加速 API(主要是 Unix/Intel)代码 [自动检测]
–disable-vdpau禁用适用于 Unix 代码的 Nvidia Video Decode 和 Presentation API [自动检测]
–disable-videotoolbox禁用 VideoToolbox 代码 [自动检测]

1.10 Toolchain options 工具链选项

参数参数作用
–arch=ARCH选择架构
–cpu=CPU选择所需的最小CPU(影响指令选择,可能会在较旧的 CPU 上崩溃)
–cross-prefix=PREFIX编译工具使用 PREFIX
–progs-suffix=SUFFIX程序名后缀
–enable-cross-compile假设使用了交叉编译器
–sysroot=PATH交叉构建树的根
–sysinclude=PATH交叉构建系统头文件的位置
–target-os=OS编译器目标 OS
–target-exec=CMD目标上运行可执行文件的命令
–target-path=DIR在目标上查看构建目录的路径
–target-samples=DIR目标样本目录的路径
–tempprefix=PATH强制固定目录/前缀而不是 mktemp 进行检查
–toolchain=NAME根据 NAME 设置工具默认值
–nm=NM使用 nm 工具 NM [nm -g]
–ar=AR使用存档工具 AR [ar]
–as=AS使用汇编器 AS
–ln_s=LN_S使用符号链接工具 LN_S [ln -s -f]
–strip=STRIP使用剥离工具STRIP [strip]
–windres=WINDRES使用windows资源编译器WINDRES [windres]
–x86asmexe=EXE使用 nasm 兼容的汇编程序 EXE [nasm]
–cc=CC使用 C 编译器 CC [gcc]
–cxx=CXX使用 C 编译器 CXX [g++]
–objcc=OCC使用 ObjC 编译器 OCC [gcc]
–dep-cc=DEPCC使用依赖生成器 DEPCC [gcc]
–nvcc=NVCC使用 Nvidia CUDA 编译器 NVCC 或 clang
–ld=LD使用链接器 LD
–pkg-config=PKGCONFIG使用 pkg-config 工具 PKGCONFIG [pkg-config]
–pkg-config-flags=FLAGS将附加标志传递给 pkgconf
–ranlib=RANLIB使用ranlib RANLIB
–doxygen=DOXYGEN使用 DOXYGEN 生成 API doc [doxygen]
–host-cc=HOSTCC使用主机 C 编译器 HOSTCC
–host-cflags=HCFLAGS在为主机编译时使用 HCFLAGS
–host-cppflags=HCPPFLAGS在为主机编译时使用 HCPPFLAGS
–host-ld=HOSTLD使用主机链接器 HOSTLD
–host-ldflags=HLDFLAGS链接主机时使用 HLDFLAGS
–host-extralibs=HLIBS链接主机时使用库 HLIBS
–host-os=OS编译器主机操作系统
–extra-cflags=ECFLAGS将 ECFLAGS 添加到 CFLAGS
–extra-cxxflags=ECFLAGS将 ECFLAGS 添加到 CXXFLAGS
–extra-objcflags=FLAGS将 FLAGS 添加到 OBJCFLAGS
–extra-ldflags=ELDFLAGS将 ELDFLAGS 添加到 LDFLAGS
–extra-ldexeflags=ELDFLAGS将 ELDFLAGS 添加到 LDEXEFLAGS
–extra-ldsoflags=ELDFLAGS将 ELDFLAGS 添加到 LDSOFLAGS
–extra-libs=ELIBS添加 ELIBS
–extra-version=STRING版本字符串后缀
–optflags=OPTFLAGS覆盖优化相关的编译器标志
–nvccflags=NVCCFLAGS覆盖 nvcc 标志
–build-suffix=SUFFIX库名后缀
–enable-pic构建与位置无关的代码
–enable-thumb编译 Thumb 指令集
–enable-l使用链接时优化
–env=“ENV=override”覆盖环境变量

1.11 Advanced options 高级选项

参数参数作用
–malloc-prefix=PREFIX前缀 malloc 和带有 PREFIX 的相关名称
–custom-allocator=NAME使用支持的自定义分配器
–disable-symver禁用符号版本控制
–enable-hardcoded-tables使用硬编码表而不是运行时生成
–disable-safe-bitstream-reader在位读取器中禁用缓冲区边界检查(更快,但可能会崩溃)
–sws-max-filter-size=N swscale使用的最大过滤器大小 ,默认为256

1.12 Optimization options 优化选项

参数参数作用
–disable-asm禁用所有程序集优化
–disable-altivec禁用 AltiVec 优化
–disable-vsx禁用 VSX 优化
–disable-power8禁用 POWER8 优化
–disable-amd3dnow禁用 3DNow!优化
–disable-amd3dnowext禁用 3DNow!扩展优化
–disable-mmx禁用 MMX 优化
–disable-mmxext禁用 MMXEXT 优化
–disable-sse禁用 SSE 优化
–disable-sse2禁用 SSE2 优化
–disable-sse3禁用 SSE3 优化
–disable-ssse3禁用 SSSE3 优化
–disable-sse4禁用 SSE4 优化
–disable-sse42禁用 SSE4.2 优化
–disable-avx禁用 AVX 优化
–disable-xop禁用 XOP 优化
–disable-fma3禁用 FMA3 优化
–disable-fma4禁用 FMA4 优化
–disable-avx2禁用 AVX2 优化
–disable-avx512禁用 AVX-512 优化
–disable-aesni禁用 AESNI 优化
–disable-armv5te禁用 armv5te 优化
–disable-armv6禁用 armv6 优化
–disable-armv6t2禁用 armv6t2 优化
–disable-vfp禁用 VFP 优化
–disable-neon禁用 NEON 优化
–disable-inline-asm禁用内联汇编
–disable-x86asm禁用独立 x86 程序集
–disable-mipsdsp禁用 MIPS DSP ASE R1 优化
–disable-mipsdspr2禁用 MIPS DSP ASE R2 优化
–disable-msa禁用 MSA 优化
–disable-msa2禁用 MSA2 优化
–disable-mipsfpu禁用浮点 MIPS 优化
–disable-mmi禁用龙芯 SIMD 优化
–disable-fast-unaligned考虑未对齐访问缓慢

1.13 开发人员选项

参数参数作用
–disable-debug禁用调试符号
–enable-debug=LEVEL设置调试级别
–disable-optimizations禁用编译器优化
–enable-extra-warnings启用更多编译器警告
–disable-stripping禁用剥离可执行文件和共享库
–assert-level=level0(默认),1或2,断言测试的数量,2 会导致运行时变慢
–enable-memory-poisoning用任意数据填充堆未初始化的分配空间
–valgrind=VALGRIND通过 valgrind 运行“make fate”测试以检测内存泄漏和错误,使用指定的 valgrind 二进制文件。不能与 --target-exec 结合使用
–enable-ftrapv陷阱算术溢出
–samples=FATE测试样本的路径位置
–enable-neon-clobber-test检查 NEON 寄存器的破坏(应该是仅用于调试目的)
–enable-xmm-clobber-test检查 XMM 寄存器的破坏(仅限 Win64;应仅用于调试目的)
–enable-random随机启用/禁用组件
–enable-random=LIST随机启用/禁用特定组件,LIST 是一个逗号分隔的列表 NAME[:PROB] 条目,其中 NAME 是一个组件(group) 和 PROB 相关的概率 名称(默认 0.5)。
–random-seed=VALUE–enable/disable-random 的种子值
–disable-valgrind-backtrace在 Valgrind 下不打印回溯(仅适用于 --disable-optimizations 构建)
–enable-ossfuzz启用构建模糊器工具
–libfuzzer=PATHlibfuzzer 的路径
–ignore-tests=TESTS被忽略的测试
–enable-linux-perf启用 Linux 性能监视器 API
–disable-large-tests禁用使用大量内存的测试

本博文部分内容参考如下文章,特此感谢:

https://www.cnblogs.com/yongdaimi/p/16619804.html

https://juejin.cn/post/7076719206573539336

Windows10使用MSYS2和VS2019编译FFmpeg详解 - weiwei22844 - 博客园 (2024)

References

Top Articles
Formula for Slope—Overview, Equation, Examples — Mashup Math
6.5: Understanding the Slope of a Line
Laura Loomer, far-right provocateur who spread 9/11 conspiracy theory, influencing Trump as he searches for a message | CNN Politics
O Riley Auto Parts Near Me
Ender Dragon Pet Hypixel Skyblock
ᐅ eGirl Kleidung kaufen: Wie ein eGirl aussehen so funktionierts!
Hardheid van drinkwater - Waterbedrijf Groningen
Craigslist Cassopolis Mi
Why are you the best candidate for financial advisor position?
Who is on the FBI Most Wanted list cryptocurrency?
Abcm Corp Training Reliaslearning
Nazir Afzal on the BBC: ‘Powerful predators were allowed to behave terribly on an industrial level’
Yogabella Babysitter
Craigslist Richmond Va
20 of the Funniest Obituaries That Will Have You Dying Laughing
Watchseries To New Domain
Thomas Funeral Home Sparta Nc
Grand Rapids Herald-Review Obituaries
Dealer 360 Login Generac
Flappy Bird Cool Math Games
Chlamydia - Chlamydia - MSD Manual Profi-Ausgabe
Fd Photo Studio New York
Which Expression Is Equivalent To Mc016-1.Jpg
Brise Stocktwits
American Flat Track Season Resumes At Orange County Fair Speedway - FloRacing
The Professor Tape 1 Prof Snow Myvidster
Baddiehub Cover
Only Murders In The Building Wiki
Davias Grille
Student Exploration Gravity Pitch
Nc Scratch Off Left
Lids Locker Room Vacaville Photos
Bollywood Movies 123Movies
Shellys Earth Materials
Game8 Genshin Impact
The Abduction of Heather Teague
Aerospace Engineering | Graduate Degrees and Requirements
Craigslist Cars And Trucks By Owner Seattle
Age Of Attila's Rain Crossword
Vernon Autoplex
Riverwood Family Services
Withers Not In Sarcophagus
Arialectra Baby Alien
JetBlue, Spirit end $3.8 billion merger agreement after losing antitrust suit
Bloxburg Bedroom Ideas That Will Make Your Kid's Jaw Drop
iPhone reconditionné
Tses Orts.com
Atlanta Farm And Garden By Owner
Toxic Mold Attorney Near Me How To File A Toxic Mold Lawsuit Sample Complaint In Apartment Mold Case
Motorsports Nation | Powersports Dealer in Waterford, CT
Akc Eo Tryouts 2022
Gemini Home Entertainment Wiki
Latest Posts
Article information

Author: Prof. Nancy Dach

Last Updated:

Views: 6310

Rating: 4.7 / 5 (77 voted)

Reviews: 84% of readers found this page helpful

Author information

Name: Prof. Nancy Dach

Birthday: 1993-08-23

Address: 569 Waelchi Ports, South Blainebury, LA 11589

Phone: +9958996486049

Job: Sales Manager

Hobby: Web surfing, Scuba diving, Mountaineering, Writing, Sailing, Dance, Blacksmithing

Introduction: My name is Prof. Nancy Dach, I am a lively, joyous, courageous, lovely, tender, charming, open person who loves writing and wants to share my knowledge and understanding with you.