转载声明
本文转载自知乎用户沈万马,仅做个人学习交流使用,侵删。
正文内容
简单说,10bit视频是指一种视频编码的特征,意思是每个颜色通道用 10 个 bit 来表达。这样,每个颜色通道的色彩级数从8bit的 256 级提高到了 1024 级,就可以更细致地表达颜色。
实际体验上,更细致的颜色分级意味着渐变色更细腻。在8bit编码下,有些时候一些渐变色块由于色彩变化范围很小而面积很大,容易导致一端到另一端总共只出现了很少的几种颜色,这就使得画面看上去不是渐变色带而是几块颜色,这种现象叫做 banding。10bit由于颜色级数是8bit的 4 倍,色块就不容易出现,同时由于相邻颜色区别更小,人眼也难以看出色块之间的界限。
从 wiki 偷来的 banding 效果图,左边是 banding,中间是 dithering,右边是高 bit 数下的效果
虽然直观上感觉10bit比 8bit 多占用 25%的数据量,但实际上在实践中10bit往往能带来更高的压缩率。这是由于10bit更能准确地描述颜色,提升了信噪比。例如为了解决 banding,8bit 编码技术可以通过一种称为 dither(抖动)的方法,也就是在色块边缘混入细碎的相邻色的色点,来模糊色块边缘。但是由于这些色点的存在大幅提高了画面的复杂度,产生了许多冗余信息量。由于8bit必须采用这些技术来提高视觉观感,所以8bit编码往往要引入大量冗余信息,而10bit不需要 dither 也能实现一样的画面感受,所以往往 10bit 编码出来的视频大小小于同等质量的8bit视频。
一张关于各种 dithering 算法的图
有人可能关心 10bit 编码并没有意义,因为最终用户的屏幕可能只有 6bit 或者 8bit。这不会使 10bit 变得没有意义,因为最终在输出阶段画面会经由输出硬件或渲染软件抖动。这样就能够在 6bit/8bit 的设备上实现类似 10bit 的输出效果。
当然 10bit 不是没有缺点。首先,计算机系统处理数据的单位往往是 byte,也就是 8bit。使用 10bit,可能会浪费一部分硬件数据传输和处理能力,使得处理性能低于 8bit 编码。这也是为什么一直以来使用 8bit 的原因。同时,该技术较新,很多硬件和软件尚没有提供较好的支持,使得应用起来往往存在播放困难、消耗太多资源等等问题。
作者:考其东
链接:https://www.jianshu.com/p/882da76ec3c0
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。