来自:http://ios.jobbole.com/83077/和http://www.jianshu.com/p/485e946f80b4
音频采样 奈奎斯特频率 音频的位元深度
一个音频文件的体积,有如下算法:体积=采样率*位元深度*音道数*时间。
音频压缩:直接脉冲编码调制Linear PCM数据太庞大了,产生了一系列的压缩算法,分为有损和无损。其具体的压缩算法对应到AVFoundation的CoreAudioTypes.h中有AudioFormatID:如:kAudioFormatLinearPCM
色彩二次抽样: 减小图片体积 YUV
视频数据使用的是YCbCr的颜色模型,YCbCr也称为YUV。其中Y表示亮度分量,Cb表示蓝色分量,Cr表示红色分量。
常用的YCbCr有4:4:4、4:2:2、4:2:0、4:1:1。
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