学习文章 :https://ffmpeg.xianwaizhiyin.net/build-ffmpeg/configure-args.html
源码
去掉一些说明文件后
~/ffmpeg-4.2.2 $ ls
compat fftools libavformat libswresample presets
configure libavcodec libavresample libswscale tests
doc libavdevice libavutil Makefile tools
ffbuild libavfilter libpostproc
doc/build_system.txt,编译 FFmpeg 的一些教程。
doc/filter_design.txt ,filter 滤镜的设计原理。
doc/writing_filters.txt,如何自己写一个滤镜加进去 FFmpeg。
doc/issue_tracker.txt,FFmpeg 的 bug 或者 feature 的跟踪流程
doc/multithreading.txt,FFmpeg 里面的多线程,有两种,Slice threading 跟 Frame threading
doc/optimization.txt ,编解码器的优化方法,FFmpeg 还有一部分函数是可以用汇编 SIMD 优化,他的一些函数如果被优化得晦涩难懂,可以查看早期的 gitlog。
doc/rate_distortion.txt,对失真率的简单讨论。
编译参数
环境目录
prefix 代表前缀目录
libdir 代表静态库目录
shlibdir 是动态库的安装目录默认会把动态库安装到系统的动态库目录。
pkgconfigdir 代表 pkg 文件的安装目录
pkg 是用来给第三方软件找到 FFmpeg 静态库,动态库的安装目录的。
链接库
--disable-static\ --enable-shared , FFmpeg 默认会生成静态库
--extra-cflags,传递 标识选项 给 C 编译器
--extra-cxxflags,传递 标识选项 给 C++ 编译器
--extra-ldflags,传递 标识选项 给 LD 链接器
--extra-ldexeflags,生成 exe 的时候传递给 链接器 的 选项
--extra-ldsoflags,生成 so 动态库的时候传递给 链接器 的 选项
--extra-libs,指定额外的库,实际上就是往链接器加选项
--env="ENV=override" 这个是最重要的,可以覆盖环境变量
编译速度、程序大小
--enable-small,把 FFmpeg 的体积减少。
--disable-doc,不编译生成文档,可以节省编译时间。
--disable-programs,开启\关闭的可执行文件( ffmpeg)。针对某个不生成 --disable-ffplay,如果全部关闭则只生成静态库\动态库。
--disable-avdevice,--disable-avcodec,--disable-avformat,--disable-swresample,--disable-swscale,--disable-postproc,--disable-avfilter。开启\关闭的库,如果只需要可执行文件,可以指定不生成这些库,但是可能程序会缺少某个库的功能。(在开发filter模块的时候可以手动的关闭一些库,会减少很多编译时间)
--disable-indevs --disable-outdevs --disa