共计 1654 个字符,预计需要花费 5 分钟才能阅读完成。
关于耻辱厅(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