FFmpeg编译配置
一、FFmpeg常用的编译配置
关于FFmpeg的编译配置,在clone下源码之后,可以通过 ./configure --help
进行查看,以下对常用配置进行的总结。
1、Standard options
--prefix
: 指定ffmpeg安装的路径
2、Licensing options
--enable-gpl
:允许使用GPL代码,默认关闭
--enable-nonfree
:允许使用不免费代码
--enable-version3
: 更新GPL-3
3、Configuration options
--enable-shared
:编译成动态库,默认编译成静态库
4、Program options
默认情况下,该设置项的配置都是打开的,特殊情况可配置关闭
5、Documentation options
默认情况下,该设置项的配置都是打开的,特殊情况可配置关闭
6、Component options (组件设置)
默认情况下,该设置项的配置都是打开的,特殊情况可配置关闭,不在此项的组件,需要通过单个组件进行开启。
7、Individual component options (单个组件设置)
可单独配置编解码器、复用与封装器、滤镜等
--enable-filter=delogo
:启用去水印的滤镜
8、External library support (配置外部库的支持)
--enable-libfdk-aac
:使用 libfdk-aac 库进行aac的编解码
--enable-libx264
:使用 libx264 进行h.264的编码
--enable-libx265
:使用 libx265 进行h.265的编码
--enable-libspeex
:使用 libspeex 进行Speex的编解码,Speex是一种声音编码格式
- 8.1 The following libraries provide various hardware acceleration features(提供硬件加速的库):
--enable-videotoolbox
--disable-videotoolbox
9、Toolchain options(编译工具链设置)
--cc=CC
:配置使用的c编译器为 gcc,其他的c编译器有:clang
--cxx=CXX
:配置使用的c++编译器为 g++
========================= 工具链配置参考 ============================
--arch = ARCH select architecture []
--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强制修复dir /前缀而不是mktemp进行检查
--toolchain = NAME根据NAME设置工具默认值
(gcc-asan,clang-asan,gcc-msan,clang-msan,
gcc-tsan,clang-tsan,gcc-usan,clang-usan,
valgrind-massif,valgrind-memcheck,
msvc,icl,gcov,llvm-cov,hardened)
--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 [nvcc]
--ld = LD使用链接器LD []
--pkg-config = PKGCONFIG使用pkg-config工具PKGCONFIG [pkg-config]
--pkg-config-flags = FLAGS将附加标志传递给pkgconf []
--ranlib = 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-libs = HLIBS在链接主机时使用libs HLIBS
--host-os = OS编译器主机OS []
--extra-cflags = ECFLAGS将ECFLAGS添加到CFLAGS []
--extra-cxxflags = ECFLAGS将ECFLAGS添加到CXXFLAGS []
--extra-objcflags = FLAGS将标志添加到OBJCFLAGS []
--extra-ldflags = ELDFLAGS将ELDFLAGS添加到LDFLAGS []
--extra-ldexeflags = ELDFLAGS将ELDFLAGS添加到LDEXEFLAGS []
--extra-ldsoflags = ELDFLAGS将ELDFLAGS添加到LDSOFLAGS []
--extra-libs = ELIBS add ELIBS []
--extra-version = STRING版本字符串后缀[]
--optflags = OPTFLAGS覆盖与优化相关的编译器标志
--nvccflags = NVCCFLAGS覆盖nvcc标志[-gencode arch = compute_30,code = sm_30 -O2]
--build-suffix = SUFFIX库名后缀[]
--enable-pic构建与位置无关的代码
Thumb指令集的--enable-thumb编译
--enable-lto使用链接时优化
--env =“ENV = override”覆盖环境变量
=========================== 工具链配置参考 ============================
10、Optimization options
--disable-optimizations
:关闭代码优化设置
11、Developer options
--disable-debug
:禁用调试日志
--enable-debug=LEVEL
:设置调试级别,当不配置LEVEL就是禁用调试日志
--disable-optimizations
:禁用编译器优化
12、Other options:
--enable-pthread
:启用pthreads(多线程),默认关闭
二、Mac环境下编译安装
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-version3 --enable-shared --enable-filter=delogo --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-libspeex --enable-videotoolbox --enable-debug --enable-hardcoded-tables --cc=clang --host-cflags= --host-ldflags= --disable-x86asm
2.1 编译中遇到的问题
(1) ERROR: speex not found using pkg-config
1、首先检查 speex 是否有安装,没有安装执行 brew install speex 进行安装。
2、安装完 speex 依然提示这个错误,检查是否安装 pkg-config , 可通过 pkg-config 命令检查,如果提示:command not found: pkg-config,则进行 pkg-config 的安装,brew install pkg-install
(2) ERROR: x264 not found using pkg-config
brew install x264
(3) ERROR: x265 not found using pkg-config
brew install x265
(4) 权限问题
sudo make && sudo make install
(5) 安装完成后,发现 /usr/local/ffmpeg/bin 没有 ffplay
这是因为系统缺少sdl2,会导致ffplay无法编译成功,brew install sdl2,然后重新执行安装