一、FFmpeg介绍
FFmpeg是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能,包含了libavcodec——这是一个用于多个项目中音频和视频的解码器函式库,以及libavformat——一个音频与视频格式转换函式库。
“FFmpeg”这个单词中的“FF”指的是“Fast Forward(快速前进)”。
“FFmpeg”的项目负责人在一封回信中说:“Just for the record, the original meaning of "FF" in FFmpeg is "Fast Forward"...”
这个项目最初是由法国程序员法布里斯·贝拉(Fabrice Bellard)发起的,而现在是由迈克尔·尼德梅尔(Michael Niedermayer)在进行维护。许多FFmpeg的开发者同时也是MPlayer项目的成员,FFmpeg在MPlayer项目中是被设计为服务器版本进行开发。
2011年3月13日,FFmpeg部分开发人士决定另组Libav,同时制定了一套关于项目继续发展和维护的规则。
二、组成部分
此计划由几个组件组成:
命令行应用程序
- ffmpeg:用于对视频文档或音频档案转换格式
- ffplay:一个简单的播放器,基于SDL与FFmpeg函式库
- ffprobe:用于显示媒体文件的信息,见MediaInfo
函数库
- libswresample
- libavresample
- libavcodec:包含全部FFmpeg音频/视频编解码函式库
- libavformat:包含demuxers和muxer函式库
- libavutil:包含一些工具函式库
- libpostproc:对于视频做前处理的函式库
- libswscale:对于影像作缩放的函式库
- libavfilter
三、参数
- FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用ffmpeg -h显示;编解码器名称等明细可用ffmpeg -formats显示。
- 下列为较常使用的参数:
主要参数
- -i——设置输入文件名。
- -f——设置输出格式。
- -y——若输出文件已存在时则覆盖文件。
- -fs——超过指定的文件大小时则结束转换。
- -t——指定输出文件的持续时间,以秒为单位。
- -ss——从指定时间开始转换,以秒为单位。
- -ss和-t一起使用时代表从-ss的时间开始转换持续时间为-t的影片,例如:-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始转换到00:00:11.00。
- -title——设置标题。
- -timestamp——设置时间戳。
- -vsync——增减Frame使影音同步。
- -c——指定输出文件的编码。
- -metadata——更改输出文件的元数据。
- -help——查看帮助信息。
影像参数
- -b:v——设置影像流量,默认为200Kbit/秒。(单位请引用下方注意事项)
- -r——设置帧率值,默认为25。
- -s——设置画面的宽与高。
- -aspect——设置画面的比例。
- -vn——不处理影像,于仅针对声音做处理时使用。
- -vcodec( -c:v )——设置影像编解码器,未设置时则使用与输入文件相同之编解码器。
声音参数
- -b:a——设置每Channel(最近的SVN版为所有Channel的总合)的流量。(单位请引用下方注意事项)
- -ar——设置采样率。
- -ac——设置声音的Channel数。
- -acodec ( -c:a ) ——设置声音编解码器,未设置时与影像相同,使用与输入文件相同之编解码器。
- -an——不处理声音,于仅针对影像做处理时使用。
- -vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)
协议
- IETF标准:TCP, UDP, Gopher, HTTP, RTP, RTSP和SDP
- 苹果公司的相关标准:HTTP Live Streaming
- RealMedia的相关标准:RealMedia RTSP/RDT
- Adobe的相关标准:RTMP, RTMPT(由librtmp实现),RTMPE(由librtmp实现),RTMPTE(由librtmp)和RTMPS(由librtmp实现)
- 微软的相关标准:MMS在TCP上和MMS在HTTP上