理解多媒体编码
与文本相比,图片、音频、视频往往占用较多空间,于是瓶颈常常在传输,为了提高性能通常会进行有损压缩,但人们竟然大多感觉不出损失。
图片
JPEG格式
JPEG是一种有损压缩格式,其大致编码方法为:
- 把亮度和两个色度矩阵记为Y、U、V,每个元素占用1字节,其中U、V通过平均降低到只有Y的1/4(由于人对亮度更敏感,这省下一半空间)
- 把上述矩阵都分块成8×8的再减去128
- 对每个块进行离散余弦变换或小波变换(JPEG2000),由于舍入误差有轻微损失
- 把每个系数除以一个量化表中对应位置系数作有损压缩,越高频的系数损失越大
- 再用游程编码无损压缩
- 再用Huffman编码无损压缩
音频
若声音中最高频率为f,则以2f频率采样已经足够。波形编码使用傅立叶变换之类的变换再拋弃次要系数来实现压缩。但更有效的压缩方法以心理声学模型为基础,由于一些声音可以掩盖其它声音,所以只用编码人类能听出来的频段:
- 不同频率的可听功率阀值不同
- 较强的声音会提高相近频段的可听功率阀值,而且该声音消失后可听功率阀值不会马上恢复
MP3
MP3有一些可选的参数:
- 单声道还是多声道(常用于多种语言的音轨)
- 立体声各通道分开压缩还是利用通道间冗余
- 比特率,在信噪低时需要更高的比特率来避免失真
大致编码方法为:
- 把样本分组
- 分离出若干个波段,测定未屏蔽的频率
- 把二进位分配给各波段
- 再用Huffman编码无损压缩
视频
在模拟制式中,PAL每秒25帧,共625条扫描线,采用隔行扫描以减低闪烁,用一个亮度信号和两个色度信号实现彩色。
数字视频本质上为一系列图像,由于现代显示器一秒可刷新至少75次,无须隔行扫描。问题在于存储大量图像需要很大的空间(即使每张图像已经经过压缩),基本的解决思路是画面很少出现突变。
MPEG
MPEG的帧分为三类:
- I帧就是JPEG图像,为了方便快进和倒带、支持中途加入观看广播和在有帧丢失时容错,需要保证周期性地有I帧(如每秒至少一个)
- P帧就是与前一帧的差异,对于每个块,若发现它由上一帧的一个区域大致相同则只用记录偏移,其余块仍用JPEG编码
- B帧就是与前一帧和后一帧的差异,这用于背景被短时间遮盖时有压缩效果