压缩算法,为频繁出现的数据分配较短的代码——JPEG、MP3的基础。工作流中:解释重新编码压缩文件为何导致代数损失。
当你处理压缩图像格式时——而你每天都在处理——背后运行着一个由大卫·霍夫曼(David Huffman)在1952年开发的算法。它遵循一个简单而巧妙的原理:频繁出现的值获得较短的比特序列,稀有的值获得较长的比特序列。这可以节省存储空间,而无需丢失信息——至少理论上是这样。
在片场或后期制作中,你通常不会直接关心这些。你按下导出按钮,选择JPEG或H.264,就完成了。但是霍夫曼编码是这些格式之所以如此小的核心原因。JPEG在DCT(离散余弦变换)变换后使用它来压缩变换后的系数。MP3对音频也做同样的事情。编码器分析你的数据,计算频率,生成一个最优的编码树,然后只存储最短的代码——以及一个查找表,以便解码器能够重新解码。
这对你来说变得至关重要的地方在于:代际损失。当你打开一个JPEG文件时,你会解压缩它。霍夫曼编码会被撤销——但DCT量化过程中丢弃的信息已经丢失了。如果你将图像再次保存为JPEG,霍夫曼编码会重新计算。每一次重新压缩都会加剧质量损失。这就是为什么你将中间素材存档为无损格式(ProRes, DNxHD)或未压缩格式——在这种情况下,霍夫曼编码根本不需要介入。
一个实用的建议:如果你需要存储大量的RAW序列或高分辨率代理文件,可以考虑无损编解码器。那里的霍夫曼编码是可逆的,但需要更多的存储空间。这在DCP工作流程或存档策略中很重要——你的调色师会感谢你,如果他们不必处理有伪影的压缩文件。简而言之:霍夫曼编码是让你的文件变小的无形助手,但只要有量化存在,它就永远无法实现无损压缩。