对信号进行数字化时,如果保留原始、未压缩的数字呈现效果,使用最纯粹的数字形式,那么存储这段媒体需要大量的存储空间。比如一个44.1kHz、16位LPCM(线性脉冲编码调制 linear pulse-code modulation)的音频文件每分钟可能需要占用10MB空间,一首5分钟的歌曲需要50MB。对于未压缩视频在30FPS帧率的情况下,如下:

这么大的媒体数据在存储和传输中是不方便的。
一、色彩二次抽样
色彩二次抽样其实就是减少颜色数据的过程。
图片的大部分数据都保存在亮度通道中,如果除去亮度,剩下的就是一幅灰度图片并且所有细节都丢失了。这是因为人的眼睛对亮度的敏感度要高于色彩,因此我们可以大幅减少存储在每个像素中的颜色信息,而不至于图片的质量严重受损。
视频数据使用的是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的色彩信息被抽样
二、视频编解码
对于视频编解码而言,AV Foundation 提供有限的编解码器集合,只支持苹果公司认定的前最主流的几种媒体类型。具体对于视频文件来说,主要可以结为 H.264 和 Apple roRes(在OS X上可用)。
H.264
只要是 H.264 标准的文件,AV Foundation 都提供视频编解码器支持。H.264 规范是 Motion Picture Experts Group (MPEG)所定义的 MPEG-4 的一部分。H.264 遵循早期的 MEPG- I 和 MPEG-2 标准,但 l 是在以更低比特率得到更高图片质量方面有了长足进步,使其更好地用于流媒体文件和移动设备及视频摄像头。
H.264 与其他形式的 MPEG 压缩一样,通过以下两个维度缩小了视频文件的尺寸:
空间:压缩独立视频帧,被称为帧内压缩。
时间:通过以组为单位的视频帧压缩冗余数据,这一过程称为帧间压缩。
帧内压缩通过消除包含在每个独立视频帧内的色彩及结构中的冗余信息来进行压缩,因此可在不降低图片质量的情况下尽可能缩小尺寸。这类压缩同 JEPG 压缩的原理类似。帧内压缩也可以作为有损压缩算法,但 l 通常用于对原始图片的一部分进行处理以生成极高质量的照片。通过这一过程创建的帧称为 I-rames。
在帧间压缩 l中,很多帧被组合在一起作为一组图片(筒称 GOP),对于 GOP 所存在的时间维度的冗余可以被消除。如果想象视频文件中的典型场景,就会有一些特定运动元素的概念,比如行驶的汽车或街上走路的行人,场景的背景环境通常是固定的。固定的背景环境就代表个时间维度上的冗余,这个冗余就可以通过压缩方式进行消除。
I-frames:这些帧都是一些单独的帧或关键帧,包含创建完整图片需要的所有数据。每个 GOP 都正好有一个 I-frames。由于它是一个独立帧,其尺寸是最大的,但也是解压最快的。
P-frames: P-frames 又称为预测帧,是从基于最近 I-frames 或 P-frames 的可预测的图片进行编码得到的。P-frames 可以引用最近的预测 P-frames 或一组 I-frames。你将会经常看到这些被称为“reference frames”的帧,临近的 P-frames 和 B-frames 都可以对其进行引用。
B-frames: B-frames 又称为双向帧,是基于使用之前和之后的帧信息进行编码后得到的帧。几乎不需要存储空间,但其解压过程会耗费较长时间,因为它依赖于周围其他的帧。
H.264 还支持编码视图,用于确定在整个编码过程中所使用的算法。共定义了 3 个高级标准:
Baseline:这个标准通常用于对移动设备的媒体内容进行处理,提供了最低效的压缩,因此经过这个标准压缩后的文件仍较大,但是同时这种方法也是最少计算强度的方法,因为它不支持 B-fames。如果开发者的编译目标是年代比较久远的 iOS 设备,比如 iPhone 3 GS,可能需要用到 Baseline 标准。
Main:这个标准的计算强度要比 Baseline 的高,因为它使用的算法更多,但可以达到比较高的压缩率。
High:高标准的方法会得到最高质量的压缩效果,但它也是 3 种方法中计算复杂度最高的,因为所有能用到的编码技术和算法几乎都用到了。
三、视频码率(bitRate)
码率是指单位时间内传输的数据位数。视频体积=视频码率*时间,由此可见固定长度的视频,码率是决定大小的唯一因素。视频码率决定着视频的压缩效果,也决定了视频是质量。码率越高,质量越好,体积越大。码率越低,体积越小,视频质量也越差。
编码时,根据码率可以分为固定码率(CBR)编码和可变码率(VBR)编码。
固定码率:指编码器输出的码率一直为一个固定值,这种编码方式计算量小,编码速度快,但是编码效果不怎么好。对于画面变化大的视频片段,由于码率限制,导致视频非常模糊,然而对于画面变化小的片段,却会造成码率浪费。
可变码率:指编码器的输出码率可以根据编码器的输入源信号的复杂度自适应的调整,这种方式编码效果比较好
四、音频编解码
只要是 Core Audio 框架支持的音频编解码,AV Foundation 都可以支持,这意味着 AV Foundation 能够支持大量不同格式的资源。然而在不用线性 PCM 音频的情况下,更多的只能使用 AAC。
AAC
高级音频编码(AAC)是 H.264 标准相应的音频处理方式,目前已成为音频流和下载的音频资源中最主流的编码方式。这种格式比 MP3 格式有着显著的提升,可以在低比特率的前提下提供更高质量的音频,是在 Web 上发布和传播的音频格式中最为理想的。
注意:AV Foundation 和 Core Audio 提供对 MP3 数据解码的支持,但是不支持对其进行编码。
网友评论