一、不同场景的编译选项
1.1 源码调试场景
开启debug和禁用strip,防止代码优化,避免源码调试时乱跳。
bash
# 生成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
bash
./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
bash
./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 |
举例:
bash
# 只启用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编码器。
如何指定第三方库的路径?
bash
# 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
。
安装交叉编译工具链
bash
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
配置命令
bash
./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)。 | 工具链支持,需匹配开发环境。 |