一、一个简介
FFmpeg是一个自由软件,可以运行音频和视频多种格式的录影、转换、流功能,包含了libavcodec——一个用于多个项目中音频和视频的解码器库,以及libavformat——一个音频与视频格式转换库。“FFmpeg”这个单词中的“FF”指的是“Fast Forward”。
1、组件组成:
ffmpeg——一个命令行工具,用于视频文件格式转换、解码或电视卡即时编码等。
ffserver——一个HTTP多媒体即时广播流服务器,支持时光平移。
ffplay——一个简单的播放器,基于SDL与FFmpeg库。
libavcodec——包含全部FFmpeg音频/视频编解码库,用于各种类型声音/图像编解码。
libavformat——包含demuxers和muxer库,用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能。
libavutil——包含一些公共的工具函数库。
libpostproc——对于视频做前处理的库。
libswscale——对于视频作缩放的库。
2、参数:
FFmpeg可使用众多参数,参数内容会根据ffmpeg版本而有差异,使用前建议先参考参数及编解码器的叙述。此外,参数明细可用ffmpeg --help显示;编解码器名称等明细可用ffmpeg -formats显示。下列为较常使用的参数:
主要参数:
-i——设置输入档名。
-f——设置输出格式。
-y——若输出文件已存在时则覆盖文件。
-fs——超过指定的文件大小时则结束转换。
-ss——从指定时间开始转换。
-t从-ss时间开始转换(如-ss 00:00:01.00 -t 00:00:10.00即从00:00:01.00开始到00:00:11.00)。
-title——设置标题。
-timestamp——设置时间戳。
-vsync——增减Frame使影音同步。
视频参数:
-b:v——设置视频流量,默认为200Kbit/秒。
-r——设置帧率值,默认为25。
-s——设置画面的宽与高。
-aspect——设置画面的比例。
-vn——不处理视频,于仅针对声音做处理时使用。
-vcodec( -c:v )——设置视频编解码器,未设置时则使用与输入文件相同之编解码器。
音频参数:
-b:a——设置每Channel(或所有Channel的总合)的流量。
-ar——设置采样率。
-ac——设置声音的Channel数。
-acodec ( -c:a ) ——设置声音编解码器,未设置时与视频相同,使用与输入文件相同之编解码器。
-an——不处理声音,于仅针对视频做处理时使用。
-vol——设置音量大小,256为标准音量。(要设置成两倍音量时则输入512,依此类推。)
3、命令集----ffmpeg 命令集举例(可以通过其帮助查看具体命令选项)
获取视频的信息 ffmpeg -i video.avi
将图片序列合成视频 ffmpeg -f image2 -i image%d.jpg video.mpg 把当前目录下的图片(名字如:image1.jpg. image2.jpg.等...)合并成video.mpg
将视频分解成图片序列 ffmpeg -i video.mpg image%d.jpg 生成image1.jpg. image2.jpg. ...,支持的图片格式有多种。
从视频抽出声音.并存为Mp3
ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
说明: * 源视频:source_video.avi *音频位率:192kb/s *输出格式:mp3 *生成的声音:sound.mp3
将.avi视频转成.mpg ffmpeg -i video_origine.avi video_finale.mpg
将.mpg转成.av ffmpeg -i video_origine.mpg video_finale.avi
将.avi转成gif动画(未压缩) ffmpeg -i video_origine.avi gif_anime.gif
合成视频和音频 ffmpeg -i son.wav -i video_origine.avi video_finale.mpg
将.avi转成.flv ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv
二、两个编译
编译一般是三个步骤,首先配置,然后编译,最后安装。如果是改变编译方式,则还要在配置之前先make distclean。configure配置、编译make和安装make install,configure是出现问题较多的步骤,我在编译时主要的问题是系统变量没有设置好,在configure时就会出现某某测试失败或是找不到的情况,除了没有设置好系统的变量外,还有就是你确实没有安装这个东东,比如你用到yasm和SDL这些库时,大部分这些是你需要自己安装的。
#*#*Linux下的ffmpeg编译:
1、下载相应版本的ffmpeg,建议去官网下载,还有些许文档可以顺便看看。目录的存放可以在根目录下或是/home或是/usr等都可以。现在好多linux都可以右键解压,当然用命令行解压也可以tar -xvJf ffmpeg-3.0.1.tar.xz(不同压缩包解压是有区别的,网络上相关命令都可以获取)。
2、配置
在终端进入解压后的目录执行 ./configure
./configure --help可以查看一下默认的配置参数,修改自己想要的参数。
问题1:c编译器正常检测过不了,找不到crt类似的东东,应该是缺少gcc的一些lib库,Ubuntu上可通过apt-get install gcc-multilib解决。
问题2:yasm没有找到,网络下载解压手动编译安装:./configure、make、make install。
配置完成后会显示你所有的配置参数的选项。可以根据需要产生静态或是动态的库。
3、编译安装make、make install。
问题3:ffplay没有产生,没有安装SDL的库,配置时会自动检测SDL的库以及相应的版本是否支持,Ubuntu上可通过apt-get install libsdl1.2或是自行编译安装来解决。
#*#8Windows下的ffmpeg编译(mingw):
1、同上准备相应的ffmpeg源码,以及你所需要的库yasm、sdl等等。
2、安装mingw,为什么不用cygwin,个人喜好以及需求吧,我更喜欢mingw的精巧,网络大堆的安装方式,如果不善于脚本的配置,建议找mingw和msys的捆绑安装包,省的安装完你在去配了,甚至环境变量也不用你管太多,。
3、msys的命令窗口,进入ffmpeg的目录,至于怎么进入windows的盘符相较于cygwin,msys还是很简单的。(Cygwin的方式为cd /cygdrvie/[盘符]/... 例如cd /cygdrive/d/test/ffmpeg)
4、configure、make、make install。这里面主要碰到的问题基本和Linux下的类似,解决方法也类似。需要注意的是如果某些Linux命令在这里的bin下没有对应的exe的话,就在网络上找找,再不济多安装俩版本总会有一个有的吧,直接copy到bin下即可。
成功后至少应该有ffmpeg这个东东,你可以试试看管用不,ffplay这个大家应该不陌生了,我觉得他才是我想要的。
这里说明一下的是,你要是用到需要自己修改的库就必须自己手动配置编译安装了,甚至修改其源代码。如果直接拿来用的话,就直接从网络上下载现成的库文件放到相应的路径下就可以了。对于路径和环境变量的问题,网络上也有诸多的办法,诸如export命令、profile文件,还有一个很有用的小东西就是pkg-config。
当然了ffmpeg也有现成的库以及可执行文件,如果你只是需要这个的话就没有必要重新的编译ffmpeg了吧。