你真的懂Rec709吗?硬核整理TA的前世今生
Hello大家好我是Lance,这是我的第二期调色教学。这一期有一点不一样,我打算分成两部分:文章部分讲解理论,视频部分进行软件演示。上一期我分享了我匹配手机和电影机的经验,而这一期我想来点硬核的,分享一下当代视频调色中一定绕不开的一个词:Rec709。尽管HDR标准正在飞速发展,但在2023年互联网上90%以上的视频内容依然以Rec709这个视频标准作为播放的载体,而且很多人虽然听过这个词但是并不理解它意味着什么。今天呢,我就来好好聊一聊这个视频制作理论中的重要基础话题。
CIE 1931 xyY color space

这里是一个大家可能经常看到的色彩空间图表,它叫做CIE 1931 xy坐标系,从名字可以看出它是1931年提出的,它的主要贡献就是用二维坐标系定义了一个包括了所有人眼能看到的颜色的色彩空间。具体他们是如何测试和得出这个模型的大家可以看我在简介里面的参考文献。这个空间经常被用来进行色彩空间转换的参考标准。
在这个坐标系中,上面的曲线是单一波长的可见光能表现的最饱和的颜色,下方的直线是光谱两端的原色混合后能产生的最饱和的颜色,而中间就是比较低饱和的颜色。这个色彩模型到迄今为止依然是所有相机和显示器厂家参考的重要标准。
而Rec 709也是一个色彩模型,在1993年由ITU国际电信联盟提出,字面翻译就是第709号建议文件。它同时也可以叫做BT.709,BT表示它是一个广播和电视的标准。

我们可以看到这个模型包括的色彩空间比我们实际能看到的全部颜色要少的多,它被广泛作为标准的一个主要原因就是大多数显示器都能够完整显示它。在90年代CRT显示器还是主流,所以这也是它的主要参照标准,而进入液晶电视的时代以后依然沿用了这一套标准,在二十多年间都没有什么挑战,直到各种HDR标准开始兴起。
严谨的说,定义Rec709需要两套标准:编码(OETF, opto-electronic transfer function光电传递系数)和解码(EOTF, electro-optical transfer function 电光传递系数)。原始的Rec709官方文件其实并没有关于解码的任何信息(后面会提到为什么),但是对编码做出了明确的定义:

先看下面两排,可以看到它在CIE 1931 xy坐标系中定位了红绿蓝三个发光元件各自所处的位置,并且定义了白点的位置。Rec709的标准白点是D65,可以基本理解为6500k的色温,但这是基于经过大气折射的日光色而不是绝对黑体加热后发出的原始颜色,有细微的不同。
那么上面两行讲的是什么呢?第一行就是说系统会假设输入的亮度值为线性,这个值最低为0,最高为1,然后再第二行它使用了一种算法把这个亮度值转换为电信号进行输出,同样最低为0,最高为1。为什么需要这个算法呢?这就涉及到一些关于gamma的知识。我个人感觉很多网上对于gamma的解读只讲了一半,有时候甚至会混淆编码和解码的区别。大家可能听过gamma2.2, 2.4这些数字,但为什么需要这个东西呢?
这主要是因为CRT本身的输出亮度和输入电压呈非线性的关系,是一个大约在2.2-2.6之间波动的指数(历史上不同时期有很多不同的估计,并没有一个绝对正确的值,一个比较常见的均值是2.35)。假如你对显示器输入了50%的电信号,因为非线性反应它可能只能呈现大约20%的亮度。所以为了真实反映相机拍到的颜色,设计者就必须对相机记录的讯号进行gamma补偿,这也就是第二行这里0.45次方的意义所在了,换个方式表示,它就是1/2.2。当然后来大家也意识到这种编码方式给暗部分配了更多数据优先级,符合人眼对暗部变化敏感,对亮部不敏感的特性。
列表里其它的运算其实也都是根据CRT显示特性决定的编码方式;先是在最黑的地方线性1:1记录到0.018的场景亮度,然后在之后的地方用1/2.2的gamma,综合起来大概就是1/1.96的gamma。这个gamma数值呢就是Rec709的原生gamma了,也是达芬奇中Rec709(Scene)的转换目标gamma。那为什么这个gamma和CRT实际gamma并不对应呢?这里就有一个系统gamma的概念,它是解码和编码相抵消以后的最终剩余的gamma修正值。这个其实就是ITU考虑到了电视较为昏暗的监看环境专门设计的,压暗一些画面能更好地进行感知上的匹配。所以最终的系统Gamma(也叫OOTF,opto-optical transfer function)大于1,是有一点点向下弯曲的。

环境对亮度感知的影响可以参照下图。在第一张图中,方块代表着显示器的实际输出值,而方块周围的颜色代表环境的亮度。每一列方块的RGB值从左到右都是一样的,但在不同的环境亮度下它们的感知亮度看起来截然不同。

第二张图模拟了进行了系统gamma补偿以后产生的效果,虽然从左到右每个方块的亮度都不同,但他们的感知亮度是相近的。

总结一下,我们通过相机到显示器看到画面的过程就是场景光——电信号——显示光,中间都会经过两次gamma的变换。由于监看环境的影响,显示光和场景光的绝对值并不一定完全一样,而是最终产生一个系统gamma的修正值来达到感知上的接近。

现代显示器
现代显示器其实也有面板自带的gamma值,但是不同显示器的种类的gamma之间往往有很大的区别。为了匹配CRT的颜色表现,这个gamma值在广播电视中被校准为2.4。在 2011年ITU推出了BT.1886标准,用换算公式让每个显示器补偿自身的黑点,以达到更加干净的2.4整体gamma曲线。目前这两种EOTF转换的标准都在使用,但纯粹的2.4曲线还是主流。
BT.1886和普通2.4gamma的区别可以参见这张图。在测量一个专业LCD显示器的亮度和信号的关系的时候,黄色的曲线是BT1886函数矫正后的测量值,而灰色的2.4gamma就会难以区分一些暗部细节。但是对于本身黑点较高的显示器这样的矫正可能会产生比较大的暗部提升,让监看画面发灰,所以在业界还是存在一些争议。

数据级别
Rec709的官方文件中还有一个不可忽视的参数:数据级别。这个玩意儿在过去二十多年间困扰了无数数字系统上的视频工作者,很多画面在监看时对比度错误地变高和变灰都是因为它没有设置正确。
数据级别这个概念属于模拟信号年代的产物。模拟信号的传输来自于电压的波动,不像数字信号那么精确,而这种波动如果被裁切会产生信号的扭曲。为了保证信号在显示端的完整显示就需要把所有需要在画面中重要的信息限定在一个更小的电压范围内,也就是Limited Range(或者叫Legal range合法范围)。这种信号限制有时候也被称作“广播安全”(broadcast safe)。在实际使用中,消费者需要自己手动去调整电视的亮度和对比度来达到理想的观看效果。

在OETF转换中,场景光产生的电信号是被编码在full range中的,但是只有legal range的部分会在播出时被采用;超出的部分我们一般叫做super white和super black,可以在后期被拉回到legal范围。在Rec709标准诞生的年代,所有的电视接收的都是模拟信号,但电脑的工作原理是数字的。数字信号不存在模拟信号的波动,所以也就不需要所谓的广播安全范围。在模拟信号的电视领域,显示器终端承担了还原画面黑点和白点的责任,而计算机可以自己通过运算把legal 范围的值精确映射到full data Range(可以翻译为完整数据范围)。这种精确的转换让色彩管理真正成为可能。在8bit记录中,full range为0-255,而适用于模拟显示的广播安全数字值对应为16-235。Rec709标准的数字摄影机一般记录的都是legal range。当素材被导入到电脑读取时,这个范围内的信息会自动扩展到0-255进行图像处理。如果软件错误地直接读取RGB信息,那么画面就会发灰。
这里要注意,那就是在数字系统中虽然full和legal记录的原始值不一样,但是在显示系统正确地诠释之后他们的颜色应该是肉眼看不出区别的。
下方图一的video level(legal range)经过了系统的解释被转换到了full level,除了肉眼不可见的四舍五入的误差,和图二看起来没有区别。

一般情况的数据级别规则:
除非特殊标注和说明,广播电视,互联网和视频播放软件一律按照legal range转换你的画面到full
达芬奇默认在full range工作,所有的legal range输入后都会被转换到full,然后在输出时根据目标决定按照full还是legal输出
4:4:4编码既可以是full也可以是legal,是最容易出问题的地方,需要确认
4:2:2或以下编码导出时默认legal,但有的相机录制时候会记录full
RAW文件解码后为full
DPX, EXR一般为full
DCP封装为full
Rec709的监看环境
在广播电视制作中,Rec709有一个标准的监看环境和亮度。ITU在 BT.2035文件中的推荐标准如下:
白点:100nit
黑点: 0.01nit
环境照度:10lux
显示器背后的背景光:D65,亮度为显示器最大亮度的10%左右,也就是10nit
关于环境的标准不一定绝对,比如Netflix目前规定不管是SDR还是HDR调色,背景光的亮度为5nit,而不是10nit。
关于黑点的值,0.01是基于当时高端CRT的显示能力,但是考虑到现代SDR调色主要在IPS显示器上完成,Netflix的规定黑点是小于或等于0.05nit,而HDR要求小于等于0.005nit。
Rec709的动态范围和曲线
我们来研究一下一个很多人聊过的问题:Rec709到到底有几档动态范围?这个问题其实需要有一个前提,那就是我们讨论的是原版的Rec709。现在我们经常看到的Rec709其实早就不是基于真正的Rec709编码函数了,这个我会在本期配套视频中详细解释。参照原版建议的函数,这个动态范围是可以算出来的。函数中有一个0.018的亮度分界,转换为电信号强度就是0.081,而进行了显示器的2.4gamma转换以后为0.0024。这个亮度对应100nit显示器的0.24nit。最初的设计者认为,在这个亮度以下都是失真的噪点,所以基本可以忽略不计。剩下的值就比较好计算了,从0.018到最大输出值1差了大概2^6,所以原版Rec709记录的信息差不多就是6-7档左右。而如果是新时代的魔改Rec709,那记录的值取决于实际应用的函数,而输出的值取决于显示器的显示能力,理论上就是无限大,只不过最亮和最暗的地方会被大量压缩。
sRGB
这个时候我们还要提到一个东西,那就是sRGB。它名字中的s就是Standard标准的意思。不同于针对广播电视的Rec709标准,针对电脑显示器的sRGB标准由微软和惠普在1996年联合提出,在1999年成为一个国际显示标准,也是目前互联网的标准色彩空间。它当时创立的背景就是为了建立一个统一的色彩标准,让大多数电脑和网络的色彩显示不需要额外的数学转换,从而减小文件传输的体积,避免不必要的色彩运算。
在sRGB设计的时候考虑到了对Rec709标准的兼容性,所以sRGB和Rec709的色域跟白点完全一样。与Rec709不同的是,为了让文件能够在电脑之间已经互联网中自由传播,或者转换到其它色彩空间,sRGB的gamma算法是完全可逆的。
原始版本的Rec709文件只是定义了场景信息的OETF,但是在EOTF上只是依赖CRT自身相对稳定在2.2-2.6之间的gamma值,再加上模拟信号的精度限制,在很长一段时间里都没有一个明文规定的标准。很多人说Rec709内容不能在sRGB显示器正确显示,其实当初sRGB的设计初衷之一就是为了在CRT上更标准的监看Rec709标准的内容,只不过他们考虑的观看环境并不是广播电视的目标观看环境,而是更加明亮的家用或者办公场景(官方认定为64lux的照明)。在2011年BT.1886官方文件标准出台之前,广播电视工作者只是约定俗成地一般把gamma校准到2.4。
在制定EOTF时,sRGB使用了一套和输入值可以相互抵消的函数,而不是Rec709的2.4。这个编码函数在最暗部分采用线性过渡,并在超过某个输入亮度值之后开始进行2.4gamma的指数变换。这个曲线的综合gamma值在2.2左右。这样的运算设计源自当时微软和惠普对于CRT的测试,他们认为采用这个数值进行校准能够最大化地利用显示器的动态范围而不加载额外的校准LUT。


在OETF编码方面,sRGB为了色彩空间转换的可逆性而匹配了解码时的算法。它在暗部和Rec709一样保留了线性编码,但是是一个坡度更大的切线,范围只有Rec709 OETF的一半,而超出这个部分的gamma达到了1/2.4。


这里有个很有意思的地方,那就是在sRGB校准的显示器中看Rec709视频有着接近1.1的OOTF系统gamma,而在Rec709 Gamma 2.4校准的显示器中看Rec709的视频有大约1.2gamma的OOTF,但是他们在各自的目标监看环境下有着类似的感知亮度。脱离了环境这个条件我们就无法真正形容一个显示器颜色的正确与否。不过在当今这个移动端盛行的年代,互联网内容真的有一个标准的监看环境吗?
我个人目前是只用2.4gamma制作视频内容,无论内容是什么。一个很主观的原因是我觉得现在很多消费级显示器为了博人眼球,实际上并没有校准到sRGB的gamma函数,感觉对比度都偏高一点,尤其是那些OLED屏幕。所以即使在较暗环境下观看以广播电视标准制作的视频也很少遇到明显发灰的情况。
Log和Rec709的关系
我们经常见到的log灰片的样子其实是一种失真的Rec709画面。事实上所谓的log和Rec709的OETF编码并没有原理上的区别,只是它使用了更加陡峭的曲线来在有限的数位中记录更多的信息。我们之所以会看到灰片就是因为系统假定输入的视频遵循709的编码规则,从而显示了错误的结果。从下图可以看到,Rec709的编码曲线相较于我们所熟知的log文件就显得非常线性了,如果一个log文件只是获得默认的Rec709 2.4gamma 的EOTF转换,得到的依然是一个高高凸起的曲线,所以就会呈现泛白的感觉。另外通常log编码还绑定了一个比Rec709大得多的色彩空间,如果直接按照Rec709来编译就等于把整个色域中的颜色映射到了更小的色域来错误显示,就显得饱和度低了。


709还原
怎么把某一款Log还原为显示端的Rec 709呢?简单粗暴地方法就是将错就错,假设这个原始素材就是长这个样子,然后开始增加对比,饱和,得到一个相对看起来没有那么灰的颜色,凭借感觉来恢复场景本来的样子。而科学的方法呢,就是色彩空间转换。色彩空间转换有3个因素:色域、gamma和白点。考虑不是所有人都懂得色彩空间转换,基本上摄影机厂商都会把白点设置在标准的D65,这样就算你暴力还原也不会造成明显的偏色现象,所以一般不用转换。而色域转换就是正确地把相机色域映射在CIE1931的坐标系上。至于gamma,由于Gamma2.4的EOTF还原函数属于显示器自带的特性,加载在整个画面中,我们要做的其实就是把log转换为≈1/1.96gamma的Rec 709(Scene),这样配合系统层面或者硬件自带的的2.4gamma转换就得到了标准的颜色。
这里就需要提醒大家一点,达芬奇色彩空间转换中如果设置目标某一个带gamma标记的Rec709 ,目标gamma矫正值其实是它的倒数。比如说,当你的转换目标是Rec709 gamma 2.4,系统会进行目标为1/2.4gamma的变换。这时候在2.4gamma的显示器中你的综合gamma变成了1,但这并不是正确的Rec709 OOTF 值,它的目标值应该是2.4/1.96≈1.2的系统gamma。所以在达芬奇色彩空间转换里面你会看到一个叫做“正向OOTF”的东西,它的目的就是帮你额外加载1.2的系统gamma来适配较暗的监看环境,每次你把log转到显示空间时它默认就是勾选的。我在本期的视频部分也会来演示一下这个神秘的功能,因为即使在达芬奇4000页的18.1文档说明里面也没有写这个OOTF是干什么的。
我还要提一嘴gamma 2.2这个选项,其实它更多是一个简化版的不精确sRGB标准,很多时候只是作为一个数值方便人们理解。作为一个纯粹的gamma指数,它其实并没有被任何官方文件采用过。不管是微软的sRGB还是苹果的Display P3 D65显示标准, 他们都假设了你的显示器使用sRGB Gamma,近似2.2,但不是2.2。
假如你想在sRGB的环境下调色,你需要在输出端进行sRGB的色彩转换。如果在Rec709模式下观看这会略微让你的画面变暗,但此时切换显示器模式到sRGB就基本恢复了正确亮度关系。此时不要忘了把你的环境光也提亮,才能保证真正正确的监看。
好了文章就写到这里,在本期的配套视频中我会给大家进行一些达芬奇中色彩空间转换的演示。色彩空间转换是一个非常乍一看很简单,深入又非常复杂的话题。在709转换方面,它复杂的地方就在于,由于log空间记录的信息远比Rec 709多,我们要怎样诠释超出709的那些信息?对于普通用户来说,只要简单地设置输入和输出就能得到不错的结果,因为达芬奇已经帮你做了幕后的工作。但达芬奇对Rec709的诠释一定是最好的吗?各个厂家的709转换又有哪些特点?这些我会在视频中给大家分享,好好玩一玩达芬奇里面的色彩空间转换。
参考资料
Rec-709
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.709-6-201506-I!!PDF-E.pdf
Rec709官方监看标准
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.2035-0-201307-I!!PDF-E.pdf
Netflix监看标准
https://partnerhelp.netflixstudios.com/hc/en-us/articles/360000591787-Color-Critical-Display-Calibration-Guidelines
BT.1886
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.1886-0-201103-I!!PDF-E.pdf
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://app.spectracal.com/Documents/White%20Papers/BT.1886.pdf
1996年原始版本的sRGB文件(新版修正了一些方程式小数位的的错误,要花钱才能看)
https://www.w3.org/Graphics/Color/sRGB.html#:~:text=The%20sRGB%20reference%20viewing%20environment,of%20the%20maximum%20white%20luminance.
EBU 对于系统Gamma的解读(Annex A)
chrome-extension://efaidnbmnnnibpcajpcglclefindmkaj/https://tech.ebu.ch/docs/tech/tech3320.pdf
关于数据级别的解释
https://www.thepostprocess.com/2019/09/24/how-to-deal-with-levels-full-vs-video/
维基百科
https://en.wikipedia.org/wiki/Rec._709
https://en.wikipedia.org/wiki/SRGB
其它相关
https://computer.howstuffworks.com/monitor3.htm#:~:text=(Although%2C%20some%20also%20accept%20analog,in%20quality%20is%20now%20minimal.
https://zhuanlan.zhihu.com/p/130173316
https://www.benq.com/en-us/knowledge-center/knowledge/projector-color-coverage-and-color-gamuts.html#:~:text=comes%20into%20play.-,What%20is%20the,709%3F&text=1931%20color%20space-,Rec.,page%20in%20terms%20of%20color.
https://commons.wikimedia.org/w/index.php?title=File%3AVisible_gamut_within_CIExyY_color_space_D65_whitepoint_mesh.webm
https://www.color.org/chardata/rgb/BT709.xalter
http://www.codinglabs.net/article_gamma_vs_linear.aspx
https://www.redsharknews.com/technology/item/3289-what-exactly-is-rec-709
https://www.image-engineering.de/library/technotes/714-color-spaces-rec-709-vs-srgb
https://cran.r-project.org/web/packages/spacesRGB/vignettes/spacesRGB-guide.html
https://www.portrait.com/resource-center/bt-1886-10-questions-10-answers/
https://www.displaymate.com/ShootOut_Part_1.htm