FFmpeg音视频专辑视频开发

FFMPEG完美入门资料---004---FFmpeg 裁剪说明

2018-03-19  本文已影响277人  张芳涛

写在前面

如果对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有需要更多了解的请订阅我的专题:音视频专辑

上一篇下一篇

猜你喜欢

热点阅读