来自:http://ios.jobbole.com/83077/和http://www.jianshu.com/p/485e946f80b4ios
音频采样 奈奎斯特频率 音频的位元深度算法
一个音频文件的体积,有以下算法:体积=采样率*位元深度*音道数*时间。ide
音频压缩:直接脉冲编码调制Linear PCM数据太庞大了,产生了一系列的压缩算法,分为有损和无损。其具体的压缩算法对应到AVFoundation的CoreAudioTypes.h中有AudioFormatID:如:kAudioFormatLinearPCM性能
色彩二次抽样: 减少图片体积 YUV编码
视频数据使用的是YCbCr的颜色模型,YCbCr也称为YUV。其中Y表示亮度份量,Cb表示蓝色份量,Cr表示红色份量。code
经常使用的YCbCr有4:4:四、4:2:二、4:2:0、4:1:1。orm
4:4:4 亮度和色彩信息的比值为1:1,全部色彩信息都会被抽样,也就是全彩。视频
4:2:2 亮度和色彩信息的比值为2:1,只有1/2的色彩信息被抽样游戏
4:2:0和4:1:1 亮度和色彩信息比值为4:1,只有1/4的色彩信息被抽样图片
对应到AVFoundation的CVImageBuffer.h中kCVImageBufferChromaSubsamplingKey kCVImageBufferChromaSubsampling_420
一些特别专业的相机可能会用到4:4:4参数捕捉图片,大部分状况下会用4:2:2参数,普通的摄像头(如:iPhone摄像头)通常都是4:2:0、4:1:1
大部分音视频都使用编解码器(codec)来进行压缩和解压,iOS中使用的主要编解码器标准为H.264,H.264对应AVFoundation的AVVideoSettings.h中:AVVideoCodecH264
H.264经过空间和时间2个维度来压缩体积:
空间:空间上的压缩独立于视频帧,也称为帧内压缩。主要经过压缩图片的方式(如色彩二次抽样等)来减少体积,帧内压缩通常为有损压缩
时间:时间上的压缩也称为帧间压缩。视频是由连续的帧(图片)组成。一段视频中(不少张图片)有不少不变的冗余元素,经过减少这些冗余元素来达到压缩的目的,这就是帧间压缩,帧间压缩通常为无损压缩
H.264有3种profile,用于肯定编码过程当中帧间压缩使用的算法:
BaseLine:这个标准提供了最低效的压缩,通过这个标准压缩后的文件体积任然比较大,可是这种算法计算强度最小
Main:这个标准的计算强度比BaseLine大,可是能达到更高的压缩效果
High:这个标准能达到最高质量的压缩效果,但他的压缩算法最复杂
H.264除了profile还有一个等级(Level)标准,Level是对自身特性的一些描述(码率,分辨率,fps等),Level越高,视频的码率、分辨率、fps越高。
对应AVFoundation的AVVideoSettings.h中:AVVideoProfileLevelKey
一些移动设备(手机、游戏机、PMP)因为性能有限,不支持所有高级视频压缩特性和高分辨率图像,只支持基础压缩特性和分辨率低一些的图像。
视频码率(bitRate)
码率是指单位时间内传输的数据位数。视频体积=视频码率*时间,因而可知固定长度的视频,码率是决定大小的惟一因素。视频码率决定着视频的压缩效果,也决定了视频是质量。码率越高,质量越好,体积越大。码率越低,体积越小,视频质量也越差。
编码时,根据码率能够分为固定码率(CBR)编码和可变码率(VBR)编码。
固定码率:指编码器输出的码率一直为一个固定值,这种编码方式计算量小,编码速度快,可是编码效果不怎么好。对于画面变化大的视频片断,因为码率限制,致使视频很是模糊,然而对于画面变化小的片断,却会形成码率浪费。
可变码率:指编码器的输出码率能够根据编码器的输入源信号的复杂度自适应的调整,这种方式编码效果比较好
码率对应于AVFoundation中AVVideoSettings.h:
AVVideoAverageBitRateKey