FFMPEG完美入门资料---004---FFmpeg 裁剪说明
写在前面
如果对FFmpeg有需要更多了解的请订阅我的专题:音视频专辑
本文对 ffmpeg 进行裁剪采用的是配置所需的接口,不需要的不配置,而不是采用修 改源代码的方式。
4.1 configure 参数
4.1.1 通用选项
在 linux 下进入终端, 找到 ffmpeg 解压位置, 输入如下命令:
root@web ffmpeg]# ./configure –help
得到 configure 的基本选项参数, 其并没有中文解释 。
选项 | 解释 |
---|---|
--help | 显示此帮助信息 |
--log[=FILE|yes|no] | 记录测试并输出到 config.err 文件 |
--prefix=PREFIX | 安装程序到指定目录(默认/usr/local) |
--libdir=DIR | 安装库到指定目录(默认 prefix/lib) |
--shlibdir=DIR | 指定共享库路径(默认 prefix/lib) |
--incdir=DIR | 指定 includes 路径(默认 prefix/include/ffmpeg) |
--mandir=DIR | 指定 man page 路径(默认 prefix/man) |
--enable-mp3lame | 启用 mp3 编码 libmp3lame(默认关闭) |
--enable-libogg | 启用 ogg 支持 libogg(默认关闭) |
--enable-vorbis | 启用 Vorbis 支持 libvorbis(默认关闭) |
--enable-faad | 启用 faad 支持 libfaad(默认关闭) |
--enable-faadbin | 启用 faad 运行时链接支持(默认关闭) |
--enable-faac | 启用 faac 支持 libfaac(默认关闭) |
--enable-libgsm | 启用 GSM 支持 libgsm(默认关闭) |
--enable-xvid | 启用 xvid 支持 xvidcore(默认关闭) |
--enable-x264 | 启 用 H.264 编 码 ( 默 认 关 闭 ) |
--enable-mingw32 | 启用 MinGW 本地/交叉 win 环境编译 |
--enable-mingwce | 启用 MinGW 本地/交叉 winCE 环境编译 |
--enable-a52 | 启用 A52 支持(默认关闭) |
--enable-a52bin | 启用运行时打开 liba52.so.0(默认关闭) |
--enable-dts | 启用 DTS 支持(默认关闭) |
--enable-pp | 启用后加工支持(默认关闭) |
--enable-static | 构建静态库(默认启用) |
--disable-static | 禁止构建静态库(默认关闭) |
--enable-share | 构建共享库(默认关闭) |
--disable-shared | 禁止构建共享库(默认启用) |
--enable-amr_nb | 启用 amr_nb float 音频编解码器 |
--enable-amr_nb-fixed | 启用 fixed amr_nb codec |
--enable-amr_wb | 启用 amr_wb float 音频编解码器 |
--enable-amr_if2 | 启用 amr_wb IF2 音频编解码器 |
--enable-sunmlib | 启用 Sun medialib(默认关闭) |
--enable-pthreads | 启用 pthreads(多线程)(默认关闭) |
--enable-dc1394 | 启用 libdc1394、libraw1394 抓取 IIDC-1394(默认关闭) |
--enable-swscaler | 启用计数器支持?(默认关闭) |
--enable-avisynth | 允许读取 AVISynth 脚本本件(默认关闭) |
--enable-gpl | 允许使用 GPL(默认关闭) |
*************************** | ******************************************* |
Advanced options (experts only) | 高级选项参数(供专业人员使用) |
--source-path=PATH | 源码的路径(当前为/root/flv/ffmpeg) |
--cross-prefix=PREFIX | 为编译工具指定路径 |
--cross-compile | 假定使用了交叉编译 |
--cc=CC | 指定使用何种 C 编译器(默认 gcc) |
--make=MAKE | 使用特定的 make |
--extra-cflags=ECFLAGS | 添加 ECFLAGS 到 CFLAGS |
--extra-ldflags=ELDFLAGS | 添加 ELDFLAGS 到 LDFLAGS(默认-Wl,--as-needed) |
--extra-libs=ELIBS | 添加 ELIBS |
--build-suffix=SUFFIX | 为专用程序添加后缀 |
--arch=ARCH | 选择机器架构(默认 x86) |
--cpu=CPU | 选用最低的 cpu(影响指令的选择, 可以在老 CPU 上出错) |
--powerpc-perf-enable | 启用 PPC 上面的性能报告(需要启用 PMC) |
--disable-mmx | 禁用 MMX |
--disable-armv5te | 禁用 armv5te |
--disable-iwmmxt | 禁用 iwmmxt |
--disable-altivec | 禁用 AltiVec |
--disable-audio-oss | 禁用 OSS 音频支持(默认启用) |
--disable-audio-beos | 禁用 BeOS 音频支持(默认启用) |
--disable-v4l | 禁用 video4linux 提取(默认启用) |
--disable-v4l2 | 禁用 video4linux2 提取(默认启用) |
--disable-bktr | 禁 用 bktr 视 频 提 取 ( 默 认 启 用 ) |
--disable-dv1394 | 禁用 DV1394 提取(默认启用) |
--disable-network | 禁用网络支持(默认支持) |
--disable-ipv6 | 禁用 ipv6 支持(默认支持) |
--disable-zlib | 禁用 zlib(默认支持) |
--disable-simple_idct | 禁用 simple IDCT 例程(默认启用) |
--disable-vhook | 禁用 video hooking 支持 |
--enable-gprof | enable profiling with gprof [no] |
--disable-debug | 禁用调试符号 |
--disable-opts | 禁用编译器最优化 |
--disable-mpegaudio-hp | 启用更快的解码 MPEG 音频(但精确度较低)( 默认禁用) |
--disable-protocols | 禁用 I/O 协议支持(默认启用) |
--disable-ffserver | 禁用生成 ffserver |
--disable-ffplay | 禁用生成 ffplay |
--enable-small | 启用优化文件尺寸大小(牺牲速度) |
--enable-memalign-hack | 启用模拟内存排列,由内存调试器干涉? |
--disable-strip | 禁用剥离可执行程序和共享库 |
--disable-encoder=NAME | 禁用 XX 编码器 |
--enable-encoder=NAME | 启用 XX 编码器 |
--disable-decoder=NAME | 禁用 XX 解码器 |
--enable-decoder=NAME | 启用 XX 解码器 |
--disable-encoders | 禁用所有编码器 |
--disable-decoders | 禁用所有解码器 |
--disable-muxer=NAME | 禁用 XX 混音器 |
--enable-muxer=NAME | 启用 XX 混音器 |
--disable-muxers | 禁用所有混音器 |
--disable-demuxer=NAME | 禁用 XX 解轨器 |
--enable-demuxer=NAME | 启用 XX 解轨器 |
--disable-demuxers | 禁用所有解轨器 |
--enable-parser=NAME | 启用 XX 剖析器 |
--disable-parser=NAME | 禁用 XX 剖析器 |
--disable-parsers | 禁用所有剖析器 |
4.1.2 基本选项介绍
以下为配置 ffmpeg 的基本选项, 其含义如下:
--cache-file=FILE
configure 会在你的系统上测试存在的特性(或者 bug!)。 为了加速随后进行的配置, 测试的结果会存储在一个 cache file 里。当 configure 到每个子树里都有 configure 脚本的 复杂的源码树时, 一个很好的 cache file 的存在会有很大帮助。
--help
输出帮助信息。 即使是有经验的用户也偶尔需要使用使用--help 选项, 因为一个复 杂的项目会包含附加的选项。 例如, GCC 包里的 configure 脚本就包含了允许你控制是 否生成和在 GCC 中使用 GNU 汇编器的选项。
--no-create
configure 中的一个主要函数会制作输出文件。 此选项阻止 configure 生成这个文件。 你可以认为这是一种演习(dry run), 尽管缓存(cache)仍然被改写了。
--quiet
--silent
当 configure 进行他的测试时,会输出简要的信息来告诉用户正在作什么。这样做是 因为 configure 可能会比较慢, 没有这种输出的话用户将会被扔在一旁疑惑正在发生什 么。使用这两个选项中的任何一个都会把你扔到一旁。(译注:这两句话比较有意思,原 文是这样的:If there was no such output, the user would be left wondering what is happening. By using this option, you too can be left wondering!)
--version
打印用来产生'configure'脚本的 Autoconf 的版本号。
--prefix=PEWFIX
--prefix 是最常用的选项。制作出的 Makefile 会查看随此选项传递的参数,当一个包 在安装时可以彻底的重新安置他的结构独立部分。 举一个例子, 当安装一个包, 例如说 Emacs, 下面的命令将会使 Emacs Lisp file 被安装到" /opt/gnu/share" :
$ ./configure --prefix=/opt/gnu
--exec-prefix=EPREFIX
与--prefix 选项类似,但是他是用来设置结构倚赖的文件的安装位置。编译好的 emacs 二进制文件就是这样一个问件。 如果没有设置这个选项的话, 默认使用的选项值将被设 为和--prefix 选项值一样。
--bindir=DIR
指定二进制文件的安装位置。这里的二进制文件定义为可以被用户直接执行的程序。
--sbindir=DIR
指定超级二进制文件的安装位置。 这是一些通常只能由超级用户执行的程序。
--libexecdir=DIR
指定可执行支持文件的安装位置。 与二进制文件相反, 这些文件从来不直接由用户执行, 但是可以被上面提到的二进制文件所执行。
--datadir=DIR
指定通用数据文件的安装位置。
--sysconfdir=DIR
指定在单个机器上使用的只读数据的安装位置。
--sharedstatedir=DIR
指定可以在多个机器上共享的可写数据的安装位置。
--localstatedir=DIR
指定只能单机使用的可写数据的安装位置。
--libdir=DIR
指定库文件的安装位置。
--includedir=DIR
指定 C 头文件的安装位置。 其他语言如 C++的头文件也可以使用此选项。
--oldincludedir=DIR
指定为除 GCC 外编译器安装的 C 头文件的安装位置。
--infodir=DIR
指定 Info 格式文档的安装位置。 Info 是被 GNU 工程所使用的文档格式。
--mandir=DIR
指定手册页的安装位置。
--srcdir=DIR
这个选项对安装没有作用。他会告诉 configure 源码的位置。一般来说不用指定此选 项, 因为 configure 脚本一般和源码文件在同一个目录下。
--program-prefix=PREFIX
指定将被加到所安装程序的名字上的前缀。例如,使用--program-prefix=g 来 configure 一个名为 tar 的程序将会使安装的程序被命名为 gtar。 当和其他的安装选项一起使用时, 这个选项只有当他被 Makefile.in 文件使用时才会工作。
--program-suffix=SUFFIX
指定将被加到所安装程序的名字上的后缀。
--program-transform-name=PROGRAM
这里的 PROGRAM 是一个 sed 脚本。 当一个程序被安装时, 他的名字将经过 sed -e PROGRAM 来产生安装的名字。
--build=BUILD
指定软件包安装的系统平台。 如果没有指定, 默认值将是--host 选项的值。
--host=HOST
指定软件运行的系统平台。 如果没有指定, 将会运行 config.guess 来检测。
--target=GARGET'
指定软件面向(target to)的系统平台。 这主要在程序语言工具如编译器和汇编器上下 文中起作用。 如果没有指定, 默认将使用--host 选项的值。
--disable-FEATURE
一些软件包可以选择这个选项来提供为大型选项的编译时配置, 例如使用 Kerberos认证系统或者一个实验性的编译器最优配置。 如果默认是提供这些特性, 可以使用 --disable-FEATURE 来禁用它, 这里 FEATURE 是特性的名字。 例如:
$ ./configure --disable-gui
-enable-FEATURE[=ARG]
相反的,一些软件包可能提供了一些默认被禁止的特性,可以使用--enable-FEATURE 来起用它。这里 FEATURE 是特性的名字。一个特性可能会接受一个可选的参数。例如:
$ ./configure --enable-buffers=128
--enable-FEATURE=no 与上面提到的--disable-FEATURE 是同义的。
--with-PACKAGE[=ARG]
在自由软件社区里,有使用已有软件包和库的优秀传统。当用 configure 来配置一个 源码树时, 可以提供其他已经安装的软件包的信息。 例如, 倚赖于 Tcl 和 Tk 的 BLT 器 件工具包。 要配置 BLT, 可能需要给 configure 提供一些关于我们把 Tcl 和 Tk 装的何处 的信息:
$ ./configure --with-tcl=/usr/local --with-tk=/usr/local
--with-PACKAGE=no 与下面将提到的--without-PACKAGE 是同义的。
--without-PACKAGE
有时候你可能不想让你的软件包与系统已有的软件包交互。 例如, 你可能不想让你 的新编译器使用 GNU ld。 通过使用这个选项可以做到这一点:
$ ./configure --without-gnu-ld
--x-includes=DIR
这个选项是--with-PACKAGE 选项的一个特例。 在 Autoconf 最初被开发出来时, 流 行使用 configure 来作为 Imake 的一个变通方法来制作运行于 X 的软件。 --x-includes 选 项提供了向 configure 脚本指明包含 X11 头文件的目录的方法。
--x-libraries=DIR
类似的, --x-libraries 选项提供了向 configure 脚本指明包含 X11 库的目录的方法。
4.2 FFmpeg 裁剪优化实例
对 ffmpeg 的裁剪优化主要是对 ffplay 的裁剪优化,我们制定的需求是能播放测试文 件(视频为 mpeg4 编码、音频为 mp2 编码, 且为 AVI 复用), 根据需求, 找到相应的选 项, 或禁用或启用, 最后的命令如下:
./configure --disable-yasm --disable-parsers --disable-decoders --disable-encoders --enable-decoder=mpeg4 --disable-muxers --disable-demuxers --enable-demuxer=avi --enable-decoder=mp2 --disable-protocols --enable-protocol=file --disable-filters --disable-bsfs
其中针对需求, --disable-parsers 为禁用所有解析器, --disable-decoders 为禁用所有解码 器,--disable-encoders 为禁用所有编码器,--enable-decoder=mpeg4 为启用 mpeg4 的编码 器 , --disable-muxers 为 禁 用 所 有 复 用 , --disable-demuxers 为 禁 用 所 有 解 复 用 , --enable-demuxer=avi 为 启 用 AVI 复 用 , --enable-decoder=mp2 为 启 用 mp2 编 码 , --disable-protocols 为 禁 用 所 有 协 议 , --enable-protocol=file 为 启 用 文 件 协 议 , --disable-filters 为禁用所有过滤器,--disable-bsfs 为禁用所有码流过滤器。通过以上配置 之后, 编译, 安装, 就生成了我们要求的 ffplay, 其大小为 1.8M(1864012 字节)。
此次是在 linux 环境下进行的,在以后的配置中,如果需要其他的什么编码器或什么 的, 按照选项要求进行配置即可。
4.3 裁剪优化前后文件比较
前面已经提到本次裁剪优化的内容。 经过裁剪优化之后, 对其文件夹进行比较, 主 要有 3 个地方不同, 分别是 config.fate、config.h 和 config.mak。 在 config.fate 中, 其记 录的是配置命令, 由于前后两次配置命令不同, 故相应内容也不同, 如图 4-1 所示。 在 config.h 中, 其主要是根据配置命令来改变相应预定义的值, 达到裁剪优化之效果如图 4-2 所示。 在 config.mak 中, 改变的也是配置命令中需要改变的选项, 如图 4-3 所示。
图 4-1 config.fate 前后比较
图 4-2 config.h 前后比较 图 4-3 config.mak 前后比较
写在后面
如果对FFmpeg有需要更多了解的请订阅我的专题:音视频专辑