若要讲解音视频的开发,首先不得不提的就是开源框架FFmpeg。该开源框架为音视频开发者们提供了非常强大的帮助,也是全世界的音频开发工程师都应该掌握的工具。ffmpeg是一套可以用来记录,处理数字音频,视频,并将其转换为流的开源框架,采用lpl或者GPL许可证,提供了录制,转换以及流化音频的完整解决方案。他的可移植性或者说跨平台特性非常强大,可以用在Linux服务器,PC,MAC,移动端设备等平台。名称中的mpeg来自视频编码标准MPEG,二前缀FF是Fast Forward 的首字母缩写。
1.1 FFmpeg的编译与命令行工具的使用
1.1.1 FFmpeg的编译
首先到FFmpeg官网下载稳定版本的FFmpeg源码,然后将下载的源码解压到一个目录中,FFmpeg与大部分GNU软件的编译方式类似,都是通过configure脚本来实现编译前定制的,这种方式允许用户在编译前对软件进行裁剪,同事通过对最终运行到的系统以及目标品台的配置来决定对某些模块设定合适的配置。configure脚本运行完毕之后,会生成config.mk和config.h这两个文件,分别作用到makefile和源代码的层次,由这两部分协同实现对编译选项的控制。
configure 命令提供了哪些选项:
用法:配置[选项]
选项:[描述后括号中的默认值]
帮助选项:
--help打印此消息
--quiet抑制显示信息输出
--list-decoders显示所有可用的解码器
--list-encoders显示所有可用的编码器
--list-hwaccels显示所有可用的硬件加速器
--list-demuxers显示所有可用的分路器
--list-muxers显示所有可用的复用器
--list-parsers显示所有可用的解析器
--list-protocols显示所有可用的协议
--list-bsfs显示所有可用的比特流过滤器
--list-indevs显示所有可用的输入设备
--list-outdevs显示所有可用的输出设备
--list-filters显示所有可用的过滤器
标准选项:
--logfile = FILE日志测试并输出到FILE [ffbuild / config.log]
--disable-logging不记录配置调试信息
- 如果生成任何配置警告,则-fatal-warnings将失败
--prefix = PREFIX安装在PREFIX [/ usr / local]
--bindir = DIR在DIR [PREFIX / bin]中安装二进制文件
-datadir = DIR在DIR中安装数据文件[PREFIX / share / ffmpeg]
--docdir = DIR中的DIR安装文档[PREFIX / share / doc / ffmpeg]
--libdir = DIR在DIR [PREFIX / lib]中安装库
--shlibdir = DIR在DIR [LIBDIR]中安装共享库
--incdir = DIR安装包含在DIR [PREFIX / include]中
-mandir = DIR在DIR安装手册页[PREFIX / share / man]
--pkgconfigdir = DIR在DIR [LIBDIR / pkgconfig]中安装pkg-config文件
--enable-rpath使用rpath允许在路径中安装库
不属于动态链接器搜索路径的一部分
链接程序时使用rpath(USE WITH CARE)
--install-name-dir =已安装目标的DIR Darwin目录名
许可选项:
--enable-gpl允许使用GPL代码,生成的库
和二进制文件将在GPL下[no]
--enable-version3升级(L)GPL到版本3 [no]
--enable-nonfree允许使用非自由代码,生成的库
和二进制文件将是不可分发的[不]
配置选项:
--disable-static不构建静态库[no]
--enable-shared构建共享库[no]
--enable-small优化尺寸而不是速度
--disable-runtime-cpudetect禁用在运行时检测CPU功能(较小的二进制)
--enable-grey启用全灰度支持(较慢的颜色)
--disable-swscale-alpha禁用swscale中的alpha通道支持
--disable-all禁用构建组件,库和程序
--disable-autodetect禁用自动检测到的外部库[no]
计划选项:
--disable-programs不构建命令行程序
--enable-ffmpeg禁用ffmpeg构建
--enable-ffplay禁用ffplay构建
--enable-ffprobe禁用ffprobe构建
文档选项:
--disable-doc不构建文档
--disable-htmlpages不构建HTML文档页面
--disable-manpages不构建man文档页面
--disable-podpages不构建POD文档页面
--disable-txtpages不构建文本文档页面
组件选项:
--disable-avdevice禁用libavdevice构建
--disable-avcodec禁用libavcodec构建
--disable-avformat禁用libavformat构建
--disable-swresample禁用libswresample build
--disable-swscale禁用libswscale构建
--disable-postproc禁用libpostproc构建
--disable-avfilter禁用libavfilter构建
--enable-avresample启用libavresample build(不建议使用)[no]
--disable-pthreads禁用pthreads [autodetect]
--disable-w32threads禁用Win32线程[autodetect]
--disable-os2threads禁用OS / 2线程[autodetect]
--disable-network禁用网络支持[否]
--disable-dct禁用DCT代码
--disable-dwt禁用DWT代码
--disable-error-resilience禁用错误恢复代码
--disable-lsp禁用LSP代码
--disable-lzo禁用LZO解码器代码
--disable-mdct禁用MDCT代码
--disable-rdft禁用RDFT代码
--disable-fft禁用FFT代码
--disable-faan禁用浮点AAN(I)DCT代码
--disable-pixelutils禁用libavutil中的pixel utils
个别组件选项:
--disable-everything禁用下面列出的所有组件
--disable-encoder = NAME禁用编码器NAME
--enable-encoder = NAME启用编码器NAME
--disable-encoders禁用所有编码器
--disable-decoder = NAME禁用解码器NAME
--enable解码器= NAME