ETJava Beta | Java    注册   登录
  • 搜索:
  • Windows10使用MSYS2和VS2019编译FFmpeg详解

    发表于      阅读(1)     博客类别:Crawler     转自:https://www.cnblogs.com/zhaoweiwei/p/18386877/win10_ffmpeg
    如有侵权 请联系我们删除  (页面底部联系我们)  

    1 环境准备

    1.1 安装Visual Studio 2019

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

    1.2 安装msys2

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

    https://www.msys2.org/

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

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

    # 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 1
    Server = 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 2
    Server = 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
    # See https://www.msys2.org/dev/mirrors
    
    ## Primary
    Server = 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 1
    Server = 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 2
    Server = 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
    # See https://www.msys2.org/dev/mirrors
    
    ## Primary
    Server = 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 1
    Server = 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 2
    Server = 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 一键安装和升级所有的库。

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

    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 指令时可能会发生权限不足的问题,切记)。

    关于几个选项的选择

    如果是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信息,则说明编译器配置成功。

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

    可以看到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:

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

    2 FFMPEG编译

    2.1 源码下载

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

    2.2 编译依赖库

    2.2.1  编译SDL

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

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

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

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

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

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

    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-shared make -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/migwbuild
    make
    make install

    2.2.4 编译x265

    首先下载x265源码

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

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

    编辑文件/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.sh
    nmake install

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

    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配置文件内容如下:

    # sdl pkg-config source file
    
    prefix=/usr/local/sdl2
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir=${prefix}/include
    
    Name: sdl2
    Description: 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.0
    Requires.private: 
    Conflicts:
    Libs: -L${libdir}   -lSDL2 
    Libs.private:  -lSDL2-static  -lkernel32 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lversion -luuid -ladvapi32 -lsetupapi -lshell32 -ldinput8
    Cflags: -I${includedir} -I${includedir}/SDL2 
    sdl2.pc
    prefix=/usr/local/x264
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir=${prefix}/include
    
    Name: x264
    Description: H.264 (MPEG4 AVC) encoder library
    Version: 0.164.3191
    Libs: -L${exec_prefix}/lib -llibx264 
    Libs.private: 
    Cflags: -I${prefix}/include -DX264_API_IMPORTS
    x264.pc
    prefix=/usr/local/fdk-aac
    exec_prefix=${prefix}
    libdir=${exec_prefix}/lib
    includedir=${prefix}/include
    
    Name: Fraunhofer FDK AAC Codec Library
    Description: AAC codec library
    Version: 2.0.3
    Libs: -L${libdir} -lfdk-aac 
    Libs.private: -lm 
    Cflags: -I${includedir}
    fdk-aac.pc
    prefix=/usr/local/x265
    exec_prefix=${prefix}/bin
    libdir=${prefix}/lib
    includedir=${prefix}/include
    
    Name: x265
    Description: H.265/HEVC video encoder
    Version: 3.4
    Libs: -L${libdir} -llibx265
    Libs.private: 
    Cflags: -I${includedir}
    x265.pc

    2.3 编译ffmpeg 

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

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

    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

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

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

    那么需要修改fftools/cmdutils.c源码文件, 将第1153行注释掉,原因是CC_IDENT标识未定义引起的, 如下所示:

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

    至此编译完成,后续会介绍通过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=DIR Darwin 已安装目标的目录名称

    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=level 0(默认),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=PATH libfuzzer 的路径
    –ignore-tests=TESTS 被忽略的测试
    –enable-linux-perf 启用 Linux 性能监视器 API
    –disable-large-tests 禁用使用大量内存的测试

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

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

    https://juejin.cn/post/7076719206573539336