4.1 FFmpeg编译选项配置
一、不同场景的编译选项
1.1 源码调试场景
开启debug和禁用strip,防止代码优化,避免源码调试时乱跳。
# 生成Makefile
./configure \
--prefix=$(pwd)/../install_mingw \
--enable-gpl \
--enable-debug=3 \
--disable-optimizations \
--disable-asm \
--disable-stripping \
--enable-nonfree \
--enable-shared# 编译 安装
make -j8
make install
1.2 支持x264、fdk-aac、mp4
./configure \
--prefix=$(pwd)/../ffmpeg_build \
--disable-everything \
--disable-programs \
--disable-doc \
--disable-zlib \
--disable-debug \
--disable-neon \
--enable-pic \
--enable-memalign-hack \
--enable-gpl \
--enable-libx264 \
--enable-nonfree \
--enable-libfdk-aac \
--enable-encoder=aac,libfdk_aac \
--enable-encoder=aac,libx264 \
--enable-decoder=aac,aac_latm,h264 \
--enable-demuxer=aac,asf,ffmetadata,h264,mp3 \
--enable-muxer=adts,h264,mp4,pcm_s16le \
--enable-parser=aac,aac_latm,h264 \
--enable-protocol=file \
--extra-cflags="-I$(pwd)/../3rdparty_mingw/include" \
--extra-ldflags="-L$(pwd)/../3rdparty_mingw/lib"# 编译 安装
make -j8
make install
1.3 支持x264、x265、fdk-aac、lame、mp4、flv
./configure \
--prefix=$(pwd)/../ffmpeg_build \
--disable-everything \
--disable-programs \
--disable-doc \
--disable-zlib \
--disable-debug \
--enable-shared \
--enable-muxer=mp4,flv,mp3,wav \
--enable-demuxer=mp4,mov,mp3,aac \
--enable-encoder=libx264,libx265,libfdk_aac,libmp3lame \
--enable-decoder=aac,h264,hevc,mp3 \
--enable-protocol=file,http \
--enable-filter=aresample \
--enable-bsf=aac_adtstoasc \
--enable-gpl \
--enable-nonfree \
--enable-libx264 \
--enable-libx265 \
--enable-libfdk-aac \
--enable-libmp3lame \
--extra-cflags="-I$(pwd)/../3rdparty_mingw64/include" \
--extra-ldflags="-L$(pwd)/../3rdparty_mingw64/lib"# 编译 安装
make -j8
make install
二、参数讲解
2.1 组件禁用与启用
减小库大小原则:先关闭所有组件,再开启自己需要的功能。
禁用选项:
编译选项 | 描述 | 禁用的组件示例 |
---|---|---|
--disable-everything | 禁用所有组件 | 所有编码器、解码器、muxer、demuxer、协议、滤镜、设备、解析器、位流滤镜等 |
--disable-avdevice | 禁用所有输入、输出设备 | v4l2、alsa、pulse、directshow、decklink、x11grab 等 |
--disable-encoders | 禁用所有编码器 | libx264、libx265、aac、mp3、vp8、vp9、huffyuv、mpeg2video 等 |
--disable-decoders | 禁用所有解码器 | h264、hevc、mpeg2video、mp3、aac、vp8、vp9、flac、pcm_s16le 等 |
--disable-muxers | 禁用所有 muxer | mp4、avi、mkv、flv、mov、webm、mpegts、hls 等 |
--disable-demuxers | 禁用所有 demuxer | mp4、avi、mkv、flv、mov、webm、mpegts、rtsp 等 |
--disable-parsers | 禁用所有 parser | h264、hevc、mpegvideo、mpeg4audio、aac、vp9、vp8 等 |
--disable-bsfs | 禁用所有 bitstream filters | h264_mp4toannexb、aac_adtstoasc、hevc_mp4toannexb、vp9_superframe 等 |
--disable-filters | 禁用所有 filters | scale、crop、overlay、vflip、hflip、drawtext、equalizer、volume 等 |
--disable-protocols | 禁用所有 protocols | file、http、https、rtmp、rtsp、ftp、udp、tcp、srt 等 |
--disable-network | 禁用网络 | http、https、rtmp、rtsp、ftp、udp、tcp、srt 等网络相关协议 |
--disable-programs | 禁止生成程序 | ffmpeg、ffplay、ffprobe 等可执行程序 |
启用选项:
编译选项 | 描述 | 启用组件示例 |
---|---|---|
--enable-encoder=NAME | 启用指定编码器 | libx264, libx265, aac, mp3, vp8, vp9, mpeg2video |
--enable-decoder=NAME | 启用指定解码器 | h264, hevc, mpeg2video, mp3, aac, vp8, vp9, flac |
--enable-hwaccel=NAME | 启用指定硬件加速 | h264_vaapi, hevc_nvenc, mpeg2_vdpau, vp9_dxva2 |
--enable-muxer=NAME | 启用指定 muxer | mp4, avi, mkv, flv, mov, webm, mpegts, hls |
--enable-demuxer=NAME | 启用指定 demuxer | mp4, avi, mkv, flv, mov, webm, mpegts, rtsp |
--enable-parser=NAME | 启用指定 parser | h264, hevc, mpegvideo, mpeg4audio, aac, vp9, vp8 |
--enable-bsf=NAME | 启用指定 bitstream filter | h264_mp4toannexb, aac_adtstoasc, hevc_mp4toannexb, vp9_superframe |
--enable-protocol=NAME | 启用指定协议 | file, http, https, rtmp, rtsp, ftp, udp, tcp, srt |
--enable-indev=NAME | 启用指定输入设备 | v4l2, alsa, pulse, dshow, decklink, x11grab |
--enable-outdev=NAME | 启用指定输出设备 | alsa, pulse, sdl, xv, opengl |
--enable-filter=NAME | 启用指定滤镜 | scale, crop, overlay, vflip, hflip, drawtext, equalizer, volume |
举例:
# 只启用flv、mp4、mp3、aac
./configure \
--prefix=$(pwd)/../ffmpeg_build \
--disable-everything \
--enable-shared \
--enable-muxer=mp4,flv,mp3,wav \
--enable-demuxer=mp4,mov,mp3,aac
2.2 第三方库编译选项
类别 | 编译选项 | 描述 |
---|---|---|
音频 | --enable-libspeex --enable-encoder=speex --enable-decoder=speex | 启用 Speex 音频编解码支持 |
--enable-libopus --enable-encoder=opus --enable-decoder=opus | 启用 Opus 音频编解码支持 | |
--enable-libfdk-aac --enable-gpl --enable-encoder=aac --enable-decoder=aac | 启用 Fraunhofer FDK AAC 音频编解码支持 | |
--enable-libmp3lame --enable-encoder=mp3lame | 启用 LAME MP3 音频编码支持 | |
视频 | --enable-libopenh264 --enable-encoder=libopenh264 --enable-decoder=openh264 | 启用 OpenH264 视频编解码支持 |
--enable-libx264 --enable-nonfree --enable-encoder=libx264 | 启用 x264 视频编码支持 | |
--enable-libx265 --enable-encoder=libx265 | 启用 x265 H.265 视频编码支持 | |
--enable-libvpx --enable-encoder=libvpx_vp8 --enable-decoder=vp8 --enable-encoder=libvpx_vp9 --enable-decoder=vp9 | 启用 VP8/VP9 视频编解码支持 | |
--enable-libwebp --enable-encoder=libwebp --enable-decoder=webp | 启用 WebP 图像编解码支持 | |
--enable-libopenjpeg --enable-encoder=libopenjpeg --enable-decoder=jp2k | 启用 OpenJPEG JPEG 2000 编解码支持 | |
框架 | --enable-mediacodec --enable-hwaccel=mediacodec | 启用 Android MediaCodec 硬件加速支持 |
--disable-avfoundation | 禁用 macOS AVFoundation 框架支持 | |
流媒体协议 | --enable-librtmp --enable-protocol=rtmp | 启用 RTMP 流媒体协议支持 |
--enable-libsrt --enable-protocol=srt | 启用 SRT 流媒体协议支持 | |
加密 | --enable-openssl --enable-protocol=https --enable-protocol=tls | 启用 OpenSSL 加密协议支持 |
--enable-libtls --enable-protocol=tls | 启用 LibreSSL TLS 加密协议支持 | |
--enable-mbedtls --enable-protocol=https --enable-protocol=tls | 启用 mbedTLS 加密协议支持 | |
--enable-gnutls --enable-protocol=https --enable-protocol=tls | 启用 GnuTLS 加密协议支持 | |
其他 | --disable-sdl2 | 禁用 SDL2 输出支持 |
--enable-libopencv --enable-filter=opencv | 启用 OpenCV 计算机视觉滤镜支持 | |
--enable-libfreetype --enable-filter=drawtext | 启用 FreeType 字体渲染支持 | |
--enable-libfontconfig --enable-filter=drawtext | 启用 Fontconfig 字体配置支持 | |
--enable-libfribidi --enable-filter=drawtext | 启用 FriBidi 双向文本渲染支持 | |
设备 | --disable-alsa | 禁用 ALSA 音频设备支持 |
--enable-libv4l2 --enable-indev=v4l2 | 启用 Video4Linux2 视频捕获支持 | |
--enable-openal --enable-outdev=openal | 启用 OpenAL 音频输出支持 |
--enable-libx264
与 --enable-encoder=libx264
的区别?
--enable-libx264
要求在编译ffmpeg时链接libx264库文件--enable-encoder=libx264
启用lib264编码器,如果没有使用--enable-libx264
,单独使用--enable-encoder=libx264
是无效的。
使用--disable-everything
和--enable-libx264
后,是否需要使用--enable-encoder=libx264
?
- 需要
--enable-encoder=libx264
。 - 因为使用
--disable-everything
会禁用所有组件,包括所有编码器,也包括libx264编码器,如果不启用,--enable-libx264
只是链接libx264库文件而已,没有启用libx264编码器。
如何指定第三方库的路径?
# 1.通过pkg-config搜索路径
export PKG_CONFIG_PATH=$(pwd)/../mingw64/lib/pkgconfig:$PKG_CONFIG_PATH# 2.通过cflags和ldflags#(1)Linux
# 所有第三方库都安装在一个目录下
./configure \
...
--extra-cflags="-I/mingw64/include" \
--extra-ldflags="-L/mingw64/lib" \
--extra-libs="-lpthread -lm"# 第三方库分别在不同目录
./configure \
...
--extra-cflags="-I/opt/x264/include -I/opt/fdk-aac/include -I/mingw64/include" \
--extra-ldflags="-L/opt/x264/lib -L/opt/fdk-aac/lib -L/mingw64/lib" \
--extra-libs="-lpthread -lm"# --extra-cflags 头文件的目录
# --extra-ldflags 库的目录
# --extra-libs 库名称,一般用不到#(2)Windows
./configure \
...
--extra-cflags="-I$(pwd)/../3rdparty_msvc/include" \
--extra-ldflags="-LIBPATH:$(pwd)/../3rdparty_msvc/lib"
2.3 交叉编译
编译选项 | 描述 |
---|---|
--arch=ARCH | 指定目标架构(如 arm、aarch64、x86、x86_64 等) |
--target-os=OS | 指定目标操作系统(如 linux、android、windows 等) |
--cross-prefix=PREFIX | 指定交叉编译工具链的前缀(如 arm-linux-gnueabi-) |
--enable-cross-compile | 启用交叉编译模式 |
--sysroot=PATH | 指定目标系统的根文件系统路径,用于查找库和头文件 |
--sysinclude=PATH | 指定系统头文件的路径,用于交叉编译时的头文件位置 |
--toolchain=NAME | 指定工具链名称(如 gcc、msvc 等) |
--cc=CC | 指定 C 编译器路径(如 arm-linux-gnueabi-gcc) |
--cxx=CXX | 指定 C++ 编译器路径(如 arm-linux-gnueabi-g++) |
--ld=LD | 指定链接器路径(如 arm-linux-gnueabi-ld) |
--ar=AR | 指定 ar 工具路径,用于创建静态库(如 arm-linux-gnueabi-ar) |
--strip=STRIP | 指定 strip 工具路径,用于去除调试信息(如 arm-linux-gnueabi-strip) |
--as=AS | 指定汇编器路径(如 arm-linux-gnueabi-as) |
--ln_s=LN_S | 指定符号链接工具路径(如 ln -s) |
--nm=NM | 指定 nm 工具路径,用于列出目标文件符号(如 arm-linux-gnueabi-nm) |
--extra-cflags=ECFLAGS | 指定额外的 C 编译器标志(如 -I/path/to/include) |
--extra-cxxflags=ECFLAGS | 指定额外的 C++ 编译器标志(如 -I/path/to/include) |
--extra-ldflags=ELDFLAGS | 指定额外的链接器标志(如 -L/path/to/lib) |
--extra-ldexeflags=ELDFLAGS | 指定额外的可执行文件链接器标志(如 -L/path/to/lib) |
案例背景
- 目标架构:aarch64(ARM 64位)
- 目标操作系统:Linux
- 工具链:aarch64-linux-gnu(基于 GCC 的交叉编译工具链)
- 功能需求:支持 H.264 视频编码(使用
libx264
),输出 MP4 容器格式,仅支持本地文件协议。 - 环境:在 x86_64 Linux 主机上进行交叉编译,目标系统的 sysroot 位于
/path/to/aarch64-sysroot
。
安装交叉编译工具链
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
安装 libx264 开发库(为 aarch64 架构预编译):
假设 libx264
的头文件和库文件已安装在 /path/to/aarch64-sysroot/usr/include
和 /path/to/aarch64-sysroot/usr/lib
配置命令
./configure \--arch=aarch64 \--target-os=linux \--cross-prefix=aarch64-linux-gnu- \--enable-cross-compile \--sysroot=/path/to/aarch64-sysroot \--sysinclude=/path/to/aarch64-sysroot/usr/include \--toolchain=gcc \--cc=aarch64-linux-gnu-gcc \--cxx=aarch64-linux-gnu-g++ \--ld=aarch64-linux-gnu-ld \--ar=aarch64-linux-gnu-ar \--strip=aarch64-linux-gnu-strip \--as=aarch64-linux-gnu-as \--nm=aarch64-linux-gnu-nm \--extra-cflags="-I/path/to/aarch64-sysroot/usr/include" \--extra-ldflags="-L/path/to/aarch64-sysroot/usr/lib" \--disable-everything \--enable-libx264 \--enable-encoder=libx264 \--enable-muxer=mp4 \--enable-protocol=file
2.4 编译选项详解
(1)许可证和协议(影响分发)
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-gpl | 启用 GPL 许可证,允许使用 GPL 授权的代码。 | x264、x265 等 GPL 组件,编译结果受 GPL 限制。 |
--enable-nonfree | 启用非自由代码,支持专利或专有功能。 | fdk-aac 等非自由组件,编译结果不可自由分发。 |
--enable-lgpl | 启用 LGPL 许可证(默认启用),限制较少。 | LGPL 组件,适合自由分发场景。 |
--enable-version3 | 启用 LGPL v3 许可证,兼容某些新版本库。 | LGPL v3 库,需注意兼容性。 |
(2)安装路径
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--prefix=PREFIX | 指定安装路径,默认 /usr/local 。 | 自定义安装路径(如 /usr ),需确保权限。 |
--bindir=DIR | 指定可执行文件安装目录,默认 PREFIX/bin 。 | 可执行文件(如 ffmpeg),用于分离二进制文件。 |
--libdir=DIR | 指定库文件安装目录,默认 PREFIX/lib 。 | 库文件(如 libavcodec),用于分离库文件。 |
--includedir=DIR | 指定头文件安装目录,默认 PREFIX/include 。 | 头文件,用于开发环境。 |
--mandir=DIR | 指定 man 页面安装目录,默认 PREFIX/share/man 。 | man 页面,用于文档分离。 |
--docdir=DIR | 指定文档安装目录,默认 PREFIX/share/doc/ffmpeg 。 | 文档文件,用于文档管理。 |
--enable-rpath | 启用 rpath,确保动态链接库使用指定路径。 | 动态链接库路径,适合自定义安装路径。 |
(3)组件控制
编译选项 | 描述 | 禁用的组件示例或启用的组件 |
---|---|---|
--disable-everything | 禁用所有组件,需逐个启用所需功能。 | 所有编码器、解码器、muxer、demuxer、协议、滤镜、设备、解析器、位流滤镜等 |
--disable-static | 不构建静态库(默认构建)。 | 静态库文件(如 libavcodec.a) |
--enable-shared | 构建共享库(.so 或 .dll)。 | 动态链接库(如 libavcodec.so) |
--disable-doc | 不编译文档。 | HTML 文档、man 页面 |
--disable-ffmpeg | 不编译 ffmpeg 命令行工具。 | ffmpeg 可执行文件 |
--disable-ffplay | 不编译 ffplay 播放器。 | ffplay 可执行文件 |
--disable-ffprobe | 不编译 ffprobe 媒体分析工具。 | ffprobe 可执行文件 |
编译选项 | 描述 | 禁用的组件示例或启用的组件 |
---|---|---|
--disable-avdevice | 禁用所有输入、输出设备。 | v4l2、alsa、pulse、directshow、decklink、x11grab 等 |
--disable-swresample | 禁用 libswresample 库(音频重采样)。 | 音频重采样功能(如格式转换、采样率调整) |
--disable-postproc | 禁用 libpostproc 库(视频后处理,如去块效应)。 | 视频后处理(如去块滤镜) |
--disable-avcodec | 禁用 libavcodec 库(编解码核心)。 | 所有编码器和解码器(如 h264、aac、mpeg2) |
--disable-avformat | 禁用 libavformat 库(容器格式处理)。 | 所有容器格式(如 mp4、mkv、flv) |
--disable-swscale | 禁用 libswscale 库(视频缩放和像素格式转换)。 | 视频缩放、像素格式转换(如 yuv420p 到 rgb) |
--disable-avfilter | 禁用 libavfilter 库(音视频滤镜)。 | 所有滤镜(如 scale、crop、drawtext) |
--disable-programs | 禁用所有命令行工具(ffmpeg、ffplay、ffprobe)。 | ffmpeg、ffplay、ffprobe 可执行文件 |
--enable-avresample | 启用 libavresample 库(旧版音频重采样)。 | libavresample(已 deprecated,推荐 swresample) |
--disable-encoders | 禁用所有编码器。 | libx264、libx265、aac、mp3、vp8、vp9、huffyuv、mpeg2video 等 |
--disable-decoders | 禁用所有解码器。 | h264、hevc、aac、mp3、vp8、vp9、mpeg2video 等 |
--disable-muxers | 禁用所有封装器。 | mp4、mkv、flv、avi、hls 等 |
--disable-demuxers | 禁用所有解封装器。 | mp4、mkv、flv、avi、hls 等 |
--disable-protocols | 禁用所有协议。 | http、rtmp、srt、udp、tcp 等 |
--disable-filters | 禁用所有滤镜。 | scale、crop、drawtext、overlay、eq 等 |
(4)外部库支持
音频编解码器
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-libmp3lame | 启用 MP3 编码(LAME)。 | MP3 编码器,需 libmp3lame-dev 和 --enable-gpl 。 |
--enable-libfdk-aac | 启用高质量 AAC 编码(fdk-aac)。 | AAC 编码器,需 libfdk-aac-dev 和 --enable-nonfree 。 |
--enable-libopus | 启用 Opus 音频编解码。 | Opus 编解码器,需 libopus-dev 。 |
--enable-libvorbis | 启用 Vorbis 音频编码。 | Vorbis 编码器,需 libvorbis-dev 。 |
--enable-libshine | 启用 Shine MP3 编码器(轻量级)。 | MP3 编码器,需 libshine-dev ,替代 LAME。 |
--enable-libtwolame | 启用 TwoLAME MP2 编码器。 | MP2 编码器,需 libtwolame-dev 。 |
--enable-libspeex | 启用 Speex 音频编解码(适合语音)。 | Speex 编解码器,需 libspeex-dev 。 |
--enable-libflac | 启用 FLAC 无损音频编解码。 | FLAC 编解码器,需 libflac-dev 。 |
--enable-libgsm | 启用 GSM 音频编解码(移动通信格式)。 | GSM 编解码器,需 libgsm-dev 。 |
视频编解码器
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-libx264 | 启用 H.264/AVC 视频编码(x264)。 | H.264 编码器,需 libx264-dev 和 --enable-gpl 。 |
--enable-libx265 | 启用 HEVC/H.265 视频编码(x265)。 | H.265 编码器,需 libx265-dev 和 --enable-gpl 。 |
--enable-libvpx | 启用 VP8/VP9 编解码(libvpx)。 | VP8/VP9 编解码器,需 libvpx-dev 。 |
--enable-libaom | 启用 AV1 编码(AOM)。 | AV1 编码器,需 libaom-dev ,编译时间较长。 |
--enable-libsvtav1 | 启用 SVT-AV1 编码(Intel AV1 编码器)。 | AV1 编码器,需 libsvtav1-dev 。 |
--enable-libtheora | 启用 Theora 视频编码。 | Theora 编码器,需 libtheora-dev 。 |
--enable-libxvid | 启用 Xvid(MPEG-4 ASP)编码。 | Xvid 编码器,需 libxvid-dev 。 |
--enable-libzimg | 启用 zimg 库(高质量图像缩放和颜色转换)。 | zimg 缩放/转换,需 libzimg-dev 。 |
--enable-libopenh264 | 启用 OpenH264(Cisco 的 H.264 实现)。 | H.264 编解码器,需 libopenh264-dev 。 |
容器
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-libwebp | 支持 WebP 图像格式。 | WebP 容器,需 libwebp-dev 。 |
--enable-libxml2 | 支持 XML 解析(用于 DASH 等格式)。 | DASH 容器,需 libxml2-dev 。 |
--enable-libopenjpeg | 支持 JPEG 2000 格式。 | JPEG 2000 容器,需 libopenjpeg-dev 。 |
--enable-libbluray | 支持 Blu-ray 光盘解析。 | Blu-ray 容器,需 libbluray-dev 。 |
协议
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-libsrt | 支持 SRT 协议(安全可靠传输)。 | SRT 协议,需 libsrt-dev ,适合实时流媒体。 |
--enable-libzmq | 支持 ZeroMQ 协议(用于实时消息传递)。 | ZeroMQ 协议,需 libzmq-dev 。 |
--enable-librtmp | 支持 RTMP 协议(实时流媒体)。 | RTMP 协议,需 librtmp-dev 。 |
硬件加速
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-cuda | 启用 CUDA 支持(NVIDIA GPU)。 | CUDA 加速,需 NVIDIA GPU 和 CUDA SDK。 |
--enable-cuvid | 启用 NVIDIA CUVID 解码。 | CUVID 解码,需 NVIDIA GPU 和驱动。 |
--enable-nvenc | 启用 NVIDIA NVENC 编码。 | NVENC 编码,需 NVIDIA GPU 和驱动。 |
--enable-vaapi | 启用 VAAPI(视频加速,Linux)。 | VAAPI 加速,需 Intel/AMD GPU 和驱动。 |
--enable-vdpau | 启用 VDPAU(Linux)。 | VDPAU 加速,需 NVIDIA GPU 和驱动。 |
--enable-libmfx | 启用 Intel QuickSync(Windows/Linux)。 | QuickSync 加速,需 libmfx-dev 。 |
--enable-vulkan | 启用 Vulkan 硬件加速(跨平台)。 | Vulkan 加速,需 Vulkan 支持的 GPU。 |
--enable-opencl | 启用 OpenCL 支持(GPU 计算)。 | OpenCL 加速,需 OpenCL 驱动。 |
--enable-dxva2 | 启用 DXVA2 硬件加速(Windows)。 | DXVA2 加速,需 Windows 和支持的 GPU。 |
--enable-d3d11va | 启用 Direct3D11 视频加速(Windows)。 | D3D11VA 加速,需 Windows 和支持的 GPU。 |
--enable-amf | 启用 AMD AMF 硬件加速(Windows/Linux)。 | AMF 加速,需 AMD GPU 和驱动。 |
--enable-videotoolbox | 启用 VideoToolbox 硬件加速(macOS/iOS)。 | VideoToolbox 加速,需 Apple 设备。 |
其他
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-libdav1d | 支持 AV1 解码(dav1d)。 | AV1 解码器,需 libdav1d-dev 。 |
--enable-libmjpeg | 支持 MJPEG 编码/解码。 | MJPEG 编解码器。 |
--enable-libvmaf | 支持 VMAF(视频质量评估,Netflix 开发)。 | VMAF 评估,需 libvmaf-dev 。 |
--enable-libass | 支持 ASS/SSA 字幕渲染。 | ASS/SSA 字幕,需 libass-dev 。 |
--enable-libfreetype | 支持加载字体(用于文本叠加/字幕)。 | 字体渲染,需 libfreetype-dev 。 |
--enable-libfontconfig | 启用 Fontconfig(高级字体管理,Linux)。 | Fontconfig 字体管理,需 libfontconfig-dev 。 |
--enable-libcdio | 支持 CD 音频抓取。 | CD 音频解析,需 libcdio-dev 。 |
--enable-libzvbi | 支持 VBI(视频广播信息,如字幕)。 | VBI 数据解析,需 libzvbi-dev 。 |
--enable-libvidstab | 启用视频防抖。 | 视频防抖,需 libvidstab-dev 。 |
(5)优化选项
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-optimizations | 启用编译器优化(如 GCC 的 -O3)。 | 编译器优化(如 -O3),推荐性能优先。 |
--enable-small | 优化代码大小(牺牲速度)。 | 小体积二进制,适合嵌入式设备。 |
--arch=ARCH | 指定目标架构(如 x86, x86_64, armv7, aarch64)。 | 目标架构优化,需匹配硬件。 |
--enable-lto | 启用链接时优化(Link-Time Optimization)。 | LTO 优化,提升性能但增加编译时间。 |
--enable-pic | 生成位置无关代码(适合共享库)。 | 位置无关代码,推荐用于动态链接库。 |
--cpu=CPU | 指定目标 CPU(如 i686, sandybridge, armv8-a)。 | CPU 特定优化,需匹配硬件。 |
--extra-cflags=FLAGS | 添加编译器标志(如 -march=native )。 | 自定义编译器标志,需了解编译器支持。 |
--extra-ldflags=FLAGS | 添加链接器标志。 | 自定义链接器标志,需了解链接器支持。 |
(6)调试选项
编译选项 | 描述 | 启用的组件或注意事项 |
---|---|---|
--enable-debug=LEVEL | 设置调试级别(0-3,默认 0)。 | 调试日志(级别越高越详细),性能下降。 |
--enable-valgrind | 启用 Valgrind 兼容性(内存调试)。 | Valgrind 内存调试,需 Valgrind 工具。 |
--enable-gcov | 启用代码覆盖率测试。 | 代码覆盖率分析,需 gcov 工具。 |
--enable-logging | 启用详细日志(默认启用)。 | 详细日志,可通过级别控制。 |
--toolchain=TOOLCHAIN | 指定工具链(如 gcc 或 clang)。 | 工具链支持,需匹配开发环境。 |