摄像机为什么要使用log曲线来压缩大动态范围,而不是直接开发能承载更大动态范围的视频格式?

其他答案写的都差不多,感觉还是有点问题没写清楚。

首先我们能确定,人眼对于亮度变化的敏感程度不是线性的,而是近似于对数形式的,所以图片视频采用类似对数格式储存会更合理一些。但是这和摄像机用的 log 其实并不是一回事,不用 log 记录的视频本身也是有一定的对数特性,就是那个 Gamma,或者叫γ。

这里面就有些历史,在 LED 显示器之前是 CRT 显示器,就是大屁股的那种。他的发光靠的是电子枪发射的高速电子流轰击荧光屏上的荧光粉产生的,其有一个特性,就是亮度和电子加的电压不是线性的,而是一个指数函数。其中一个常见关系是:

输出亮度=电压^{2.2}  (1)

(这里面电压和亮度的范围都是 0~1,代表从全黑到全白,电压从 0 到最高压)

那么在对视频亮度编码的时候,如果使用公式(1)的反函数来代表亮度,到了电视端将至作为输入电压,电视显示的亮度就能直接直接还原原始亮度,方便直接且简单(毕竟那会儿电视的运算能力也有限)。那么这个反函数被称为 Gamma函数或者叫 Gamma 编码,公式(1)需要的 Gamma 编码就是:

编码后的亮度=编码前亮度^{1/2.2}=编码前亮度^{0.4545}  (2)

(与之前一样,这里的亮度范围是从 0~1,代表从全黑到全白)

我们画一下函数图像大约是:

Gamma 函数

可见,这条曲线也有类似于 Log 的特性,在暗部拉伸以保留更多的暗部细节,在亮部压缩舍弃人眼不敏感的细节人眼利于编码。

到了 LED 等线性亮度显示器时期,一方面由于兼容性考虑,另一方面是 Gamma 确实好用。这些特性依然被保留了下来,只不过 Gamma 解码(公式1)的工作交给系统的解码器来执行。现在的主流视频格式,比如 H264,H265 的编码都有内置的 Gamma 编码(印象中 jpeg 图片编码也有类似的 Gamma)。摄像机录制视频编码时,从 CMOS 读取的 RAW 转为 RGB 格式,然后转为 YCbCr 格式,在这一步就会应用 Gamma 函数,然后 YCbCr 再进行压缩(对应我们说的 422 或者 420 什么的),然后帧内预测帧间预测等算法进一步压缩。

可是,我们也能看出来,Gamma 并不完美,并不能扩展可以记录的亮度范围,同时后期空间也小,这时候,Log 就被引入了。log 编码示意如下:

Gamma 与 Log 对比

和 Gamma 相比,除了延续暗部拉伸亮部压缩的特性外,log 有如下两个特点,第一是输入范围更宽广可以记录更广的亮度范围,第二是输出不再是 0~1 而是保持在中间一部分,更有利于后期调整。

注意:上面的 log 只是我凑出来的一个函数图像,事实上不同厂家不同的 log 曲线都不相同。

之前我们说到,主流编码 H264,H265 等编码过程都内置了 Gamma 函数,当需要 Log 记录的时候使用 log 转换替代原来的 Gamma 转换就可以了(大部分情况下,这种亮度的分线性转换都称为 Gamma,为了方便讨论我依然将传统的指数函数称为 Gamma)就能实现 log 了。在能记录更宽广的亮度范围更有利于后期的同时,编码压力和文件体积不会有任何变化,同时兼容性也没有任何问题,所有能播放普通 H264,H265 的硬件/软件都可以直接播放内置了 log 的文件(当然看到的是灰片)。这就是 log 最大的意义,如果额外采用一个格式,计算速度、文件体积、兼容性,尤其是兼容性会出现很大的问题,比如很多 Raw 编码,可以记录的亮度范围和 log 相当(理论上 log 可以记录和 raw 相当的亮度范围甚至可以再高一些),后期能力更强比如可以无损调整 ISO,白平衡以及色调等。但是需要特定的播放器播放,文件体积也巨大无比,给后期/交流造成了巨大的障碍。

总结一下并回答题主的问题,使用 log 的意义就是摄影机会用 log 函数作为视频编码中的 Gamma 函数,可以在几乎不损失编码时间/文件体积/兼容性的同时带来更宽的动态范围记录和后期空间。

编辑于 2026-01-30 · 著作权归作者所有