先对一些视频格式的专用名词扫一下盲:
容器(Container):容器就是一种文件(封装)格式,比如flv、mkv、ts、mp4、rmvb、avi等。包含下面5种流以及文件头信息。
流(Stream):是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。
帧(Frame) 代表一幅静止的图像,分为I帧,P帧,B帧。
编解码器(Codec):是对视频进行压缩或者解压缩,CODEC =CODE(编码) +DECODE(解码)
复用/解复用(mux/demux):把不同的流按照某种容器的规则放入容器,这种行为叫做复用(mux);把不同的流从某种容器中解析出来,这种行为叫做解复用(demux)。
码率和帧率是视频文件的最重要的基本特征,对于他们的特有设置会决定视频质量。如果我们知道码率和时长那么可以很容易计算出输出文件的大小。
帧率:帧率也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。
码率:比特率(也叫码率,数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
FFmpeg的名称来自MPEG视频编码标准,前面的“FF”代表“Fast Forward”,FFmpeg是一套可以用来音视频采集、音视频格式转换,编码解码,视频截图,加水印等的开源计算机程序。可以轻易地实现多种视频格式之间的相互转换。
FFFFmpeg作为视频播放器,转码工具的内核:Mplayer, ffplay,射手播放器,KMplayer,ffmpeg,Google,Facebook,Youtube,VLC,优酷,爱奇艺,土豆,射手播放器,暴风影音,KMPlayer,QQ影音,格式工厂,狸窝视频转换器,暴风转码等。
FFmpeg一共包含8个库:
1. avcodec:编解码
2. avformat:封装格式处理
3. avfilter:滤镜特效处理
4. avdevice:各种设备的输入,输出
5. avutil:工具库,大部分库都需要这个库的支持
6. postproc:后加工
7. swresample:音频采样数据格式转换
8. swscale:视频像素数据格式转换
FFmpeg一共包含四个主要程序:
1. ffmpeg:是一个命令行工具,用来对音视频文件转换格式,也支持对电视卡实时编码
2. ffsever:是一个HTTP多媒体实时广播流服务器,支持时光平移
3. ffplay:是一个简单的播放器,使用ffmpeg库解析和解码,通过SDL显示
ffplay input.avi 播放当前文件夹下的input.avi文件
4. ffprobe:探测分析音视频文件
ffprobe -i input -print_format json -show_format -show_streams -show_frames