分为有损压缩和无损压缩
有损压缩
有损压缩是利用了人类对图像或声波中的某些频率成分不敏感的特性,允许压缩过程中损失一定的信息,虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响缩小,却换来了大得多的压缩比,有损压缩广泛应用于语音,图像和视频数据的压缩。
算法
音视频常见领域分为流式和非流式。
h265:流式的可以通过前后帧的相似性来进一步压缩,算是一种基于时间的压缩
jpg:
aac:
无损压缩
是利用数据的统计冗余进行压缩,压缩后可完全恢复原始数据而不引起任何失真,但压缩率是受到数据统计冗余度的理论限制,一般为2:1到5:1,这类方法广泛用于文本数据,程序和特殊应用场合的图像数据(如指纹图像,医学图像等)的压缩。
算法
游程编码:可以用重复的次数加上字符本身来进行压缩,这段本身要占34位字符的数据就被压缩成了只有18个字符位的数据。
字典算法:将文件中出现频率比较高的单词拿出来,生成一个字典列表(类似key-value的键值对),再用特殊的代码来表示这个单词,比如说,你有个朋友叫 ’沃德天·沃卫申么·拉末帅·夫斯基,如果你每提一次他的名字就得说一遍的话,那这不令人烦躁?可以起个绰号:00,下次提到他的名字的时候用00就完事了,压缩后的长度少了很多。
哈夫曼编码(Huffman Coding):在字典算法的基础上做了优化,他认为,越是经常出现的东西,越应该用简短的字符来替换表示它,所以就诞生了压缩领域的经典算法——哈夫曼编码压缩。
熵编码
熵编码是一种根据数据中符号出现的概率来编码的技术,目的是减少编码后数据的平均长度。Zstandard使用两种熵编码技术:
- 霍夫曼编码:这是一种广泛使用的熵编码方法,通过为常见符号分配较短的编码,而为不常见的符号分配较长的编码来实现压缩。Zstandard在其“Literals”部分使用霍夫曼编码。
- 有限状态熵(FSE):FSE是一种基于ANS(Asymmetric Numeral Systems)的熵编码技术,比传统的霍夫曼编码更加高效。它通过使用一张表来维护编码的状态,并允许状态之间的转换来编码和解码数据。Zstandard在其“Sequences”部分使用FSE,这使得它在压缩效率上有显著的提升。
字典训练
对于小文件或具有高度相似性的数据集,Zstandard可以使用预先训练的字典来显著提高压缩比。这个字典是从一组代表性样本中学习得到的,包含了数据中常见的模式和序列。在压缩时使用这个字典,可以让算法更有效地识别和压缩这些重复的模式。
长距离匹配
从1.3.2版本开始,Zstandard引入了可选的长距离匹配功能,这允许它在更大的范围内查找重复内容,类似于rzip或lrzip。这对于压缩具有大量重复但分布在较大距离上的数据(如某些类型的日志文件)特别有效。