[转]FFMPEG详解

  • [转]FFMPEG详解已关闭评论
  • 27 views
  • A+
所属分类:编码

关于耻辱厅(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,其使用方法如下(方括号表示可选项,花括号表示必选项目):

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

基本选项

能力集列表

  • -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

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin