[转]FFMPEG详解

889次阅读
没有评论

关于耻辱厅(Hall of Shame):FFMpeg 大部分代码遵循 LGPL 许可证,如果使用者对 FFMpeg 进行了修改,要求公布修改的源代码;有少部分代码遵循 GPL 许可证,要求使用者同时公开使用 FFMpeg 的软件的源代码。实际上,除去部分具备系统软件开发能力的大型公司(Microsoft、Apple 等)以及某些著名的音视频技术提供商(Divx、Real 等)提供的自有播放器之外,绝大部分第三方开发的播放器都离不开 FFMpeg 的支持,像 Linux 桌面环境中的开源播放器 VLC、MPlayer,Windows 下的 KMPlayer、暴风影音以及 Android 下几乎全部第三方播放器都是基于 FFMpeg 的。也有许多看似具备自主技术的播放器,其实也都不声不响地使用了 FFMpeg,这种行为被称为“盗窃”,参与“盗窃”的公司则被请入 耻辱厅,国产播放器暴风影音、QQ 影音于 2009 年上榜。

FFMPEG 从功能上划分为几个模块,分别为核心工具(libutils)、媒体格式(libavformat)、编解码(libavcodec)、设备(libavdevice)和后处理(libavfilter, libswscale, libpostproc),分别负责提供公用的功能函数、实现多媒体文件的读包和写包、完成音视频的编解码、管理音视频设备的操作以及进行音视频后处理。

使用 FFMPEG

这里指 FFMPEG 提供的命令行(CLI)工具 ffmpeg,其使用方法如下(方括号表示可选项,花括号表示必选项目):

ffmpeg [global options] [[infile options][‘-i’infile]]... {[outfile options] outfile}...

除了全局选项,其他选项仅对后面紧跟着的输入或输出文件有效。

基本选项

能力集列表

  • -formats:列出支持的文件格式。
  • -codecs:列出支持的编解码器。
  • -decoders:列出支持的解码器。
  • -encoders:列出支持的编码器。
  • -protocols:列出支持的协议。
  • -bsfs:列出支持的比特流过滤器。
  • -filters:列出支持的滤镜。
  • -pix_fmts:列出支持的图像采样格式。
  • -sample_fmts:列出支持的声音采样格式。

输入输出控制

  • -f fmt:强制设定输入和输出文件格式(缺省是根据扩展名选择的)。
  • -i filename:指定输入文件名。
  • -y:覆盖输出文件。
  • -c codec:指定编码器或解码器(编解码器设定为”copy“表示不进行编解码)。
  • -acodec codec:指定声音的编码器或解码器(编解码器设定为”copy“表示不进行编解码)。
  • -vcodec codec:指定视频的编码器或解码器(编解码器设定为”copy“表示不进行编解码)。
  • -t hh:mm:ss[.xxx]:设定输入或输出文件的终止时间点。
  • -ss hh:mm:ss[.xxx]:设定输入或输出文件的起始时间点。
  • -frames count:设定输出的帧数目。

编解码器控制

  • -r fps:设定视频编解码器的帧率,整数,单位 fps
  • -ar sample rate:设定音频编解码器的采样率,整数,单位 Hz。
  • -b bitrate:设定音视频编码器输出的比特率,整数,单位 bps。
  • -ab bitrate:设定音频编码器输出的比特率,整数,单位 bps。
  • -ac channels:设置音频编解码器的声道数目。
  • -bf frames:设置视频编码器的 B 帧数目。
  • -profile profile:设置音视频编码器的类。
  • -level level:设置音视频编码器的级。

流标识

FFMPEG 的某些选项可以对一个特定的媒体流起作用,这种情况下需要在选项后面增加一个流标识。流标识允许以下几种格式:

  • 流序号。譬如“:1”表示第二个流。
  • 流类型。譬如“:a“表示音频流,流类型可以和流序号合并使用,譬如“:a:1”表示第二个音频流。
  • 节目。节目和流序号可以合并使用。
  • 流标识。流标识是一个内部标识号。

假如要设定第二个音频流为 copy,则需要指定 -codec:a:1 copy

正文完
 
Blood.Cold
版权声明:本站原创文章,由 Blood.Cold 2015-12-09发表,共计1654字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。