视频播放器的色彩管理:MPC-HC & madVR & 3D LUT
视频的色彩管理流程和照片不一样,情况更加复杂,所幸作为普通用户接触到的只是观看并不涉及制作,让我可以省去大半笔墨。本文主角MPC-HC和madVR都是Windows限定,所以Linux和OS X用户可参考的部分只有生成3D LUT的设置。
两种方法都能实现视频的色彩管理,选一种即可。
1.Simple is the best: MPC-HC
不用任何插件就能实现色彩管理的视频播放器,同时对性能要求很低。
MPC-HC是一款开源媒体播放器,轻量、全能、易用、高效,用过之后甚至会失去尝试其它播放器的欲望……咳,就不多安利了,今天主要说的是色彩管理,MPC-HC从2010年的v1.4.2499.0版就开始完整支持ICC profile的色彩管理了,设置方法也十分简单。
1.1.开启色彩管理
打开MPC-HC,选项→输出→选EVR(CP),确定,右键菜单→渲染器设置→色彩管理→开启,就可以读取显示器的profile并正确显示颜色了。
不过EVR的色彩管理还是有缺点的,一是开启后暗部对比较强,黑位有一点crush;二是不识别Rec. 601(EBU/SMPTE C)和Rec. 709以外的色彩空间,比如以后会越来越多的Rec. 2020(UHD色彩空间)和DCI-P3。
如果想要更准确的暗部表现或者为4K内容提前准备,madVR就是你所需要的。
2.Can’t get enough of quality: madVR
一款以高质量闻名的视频渲染器,不计性能追求最高画质。madVR提供了各种自定义功能以及图像算法,色彩管理也是直接支持3D LUT(不支持显示器的profile),下面介绍的就是利用DisplayCAL生成madVR可用的3D LUT,让视频的色彩也够准确。
需要madVR、一款支持madVR的播放器(比如MPC-HC)、DisplayCAL(包括ArgyllCMS)。
2.1.安装madVR
官网左上角找最新版的zip下载,解压到想要安装的位置,双击install.bat
安装。
2.2.用DisplayCAL生成3D LUT
打开DisplayCAL(我假设你的显示器已经做过profile并且已经有DisplayCAL了)
下拉菜单选要使用的profile(或点读取其它profile)。
工具栏Options,Show advanced options和Enable 3D LUT tab打勾,再切到3D LUT标签页
Create 3D LUT after profiling: 校色完自动生成3D LUT,打算顺便校个色的话可以勾。
Source colorspace: 任选。这些都是视频的色彩空间,个人建议选大于等于显示器色域的,比如显示器接近sRGB的选BT.709,接近Adobe RGB/DCI-P3的选DCI-P3,大于Adobe RGB/DCI-P3的选BT.2020。直接选ACES我也没意见😃,应该没什么影响。
Tone curve: 我的设定和校色的一致,实际并不需要一致,这里的设定仅用于3D LUT,不会影响校色结果。Gamma的设定还是根据观看环境来(可参考之前的校色设定),之后madVR里调节很方便,不必纠结。两个SMPTE 2048的预设是给HDR内容准备的,然而我没有支持HDR显示设备,就不深入了。
Apply calibration (vcgt): 不勾。打勾的话播放视频时会重置显卡gamma table使校准失效,影响其它程序的颜色。
Gamut mapping mode: 不知道为什么是单选,反正Inverse device to PCS精度更高。
Rendering intent: 指定不同色彩空间之间的转换方式,除了常见的Perceptual, Saturation, Relative colorimetric, Absolute colorimetric外还有好几个选项,有兴趣的可以去官网或谷歌了解,一一介绍要疯。
3D LUT file format: 选madVR的专用格式。
Input encoding: TV RGB 16-235 (clip WTW)的选项我懒得试了,不确定有神马效果。
设定完成,Create 3D LUT…
完成后点Install 3D LUT。
2.3.设置播放器和解码器
※用MPC-HC和内部LAV滤镜演示,其它播放器可能有所不同
打开MPC-HC,选项→输出→选madVR
然后设置LAV的视频解码器,还是在选项→内部滤镜→视频解码器,Output Formats下面的色彩编码都打勾,直接给madVR渲染。其余设置供参考,不多解释了。
2.4.设置madVR
播放任意视频(或者进安装目录打开madHcCtrl.exe),右下角会出现图标,双击打开madVR设置
指定显示设备的类型。
根据显示器面板来设置色深(不包括抖动)。8bit以上的输出需要Direct3D 11的全屏独占模式,默认是Direct3D 9,要在rendering→general settings里启用use Direct3D 11 for presentation。
madVR支持三种色彩管理方式:
this display is already calibrated: 如果你的显示器已经是目标色域(比如Rec. 709或DCI-P3)就可以选这个。也就是说,支持硬件校色的显示器要先通过内置的3D LUT或外接LUT box校准、不支持硬件校色的显示器通过LUT box校准至目标色域后,不需要系统的色彩管理就能正确转换颜色。
calibrate this display by using yCMS: yCMS也是一套色彩管理系统,不懂。
calibrate this display by using external 3DLUT files: 这是我们需要的,通过3D LUT在渲染阶段转换颜色,对硬件没有特殊要求,笔记本屏幕也可以,唯一的开销是播放视频会额外占用一点GPU效能和100+MB显存。有正确安装3D LUT的话能自动识别路径。
disable GPU gamma ramps: 重置显卡gamma table,会影响整个显示器的校准,不勾。
这里的gamma设置是一个额外的gamma补偿,用于平衡环境光或者根据个人喜好调整。enable gamma processing启用后默认值pure power curve 2.20和禁用的效果是一样,改变数值可以调节明暗分布,另外BT.709/601 curve的低对比感觉也不错。
和色彩管理有关的设置大致是这些,madVR能做的还有很多。比如各种放大采样算法,玩下来Jinc给我的感觉最好,不过遇到一些片源质量比较差的还是会换回双线性;比如各种画质增强、降噪算法,有些效果还不错;还有刚说到的gamma控制非常有用;传说中对性能的影响也可以控制。总之效果很好,可玩性高,仅对3D LUT的支持就值得大力推荐了。
3.截图对比
3.1.黑位
EVR(CP) CM off | EVR(CP) CM on |
madVR no calibration | madVR 3D LUT |
EVR(CP) CM on | madVR 3D LUT |
3.2.白点
EVR(CP) CM off | EVR(CP) CM on |
madVR no calibration | madVR 3D LUT |
EVR(CP) CM on | madVR 3D LUT |
3.3.其它
EVR(CP) CM off | EVR(CP) CM on |
madVR no calibration | madVR 3D LUT |
EVR(CP) CM on | madVR 3D LUT |
EVR(CP) CM off | EVR(CP) CM on |
madVR no calibration | madVR 3D LUT |
EVR(CP) CM on | madVR 3D LUT |
3.4.补充说明
这些对比图本来应该带显示器profile的,结果发现体积大了不少而且Chrome不能识别gamma补偿(Firefox可以),只好指定sRGB了,虽然和我看到的视频播放效果(gamma是2.4)有所区别,不过用来横向比较是没问题的。由于PA238本身是非广色域屏,经过三年多的使用现在sRGB覆盖只有88%,启用色彩管理的效果不是非常明显(虽然我觉得也挺明显了),如果你用的是广色域屏幕效果应该很明显,大部分视频的颜色会变淡,回到应有的Rec. 709/601色域。
因为网页背景过亮尤其是黑位的对比不容易看清,附上打包好的原图(OneDrive),可下载后用看图软件比较。
关于您的这片文章,我有一个想法:既然通过校色产生了屏幕的ICC文件,用来校准数字信号能够尽可能转换为屏幕上的模拟色彩量。
那么再在播放器上重新调用一次矫正屏幕的对应文件,然后在屏幕上显示,是否意味着一个源数字信号,被进行了两次转换?
不知道我的意思是否表达清楚了。
唔,也许你有一些误解。
屏幕的色彩配置文件(屏幕ICC profile)简单来说是用来告诉操作系统这台显示器的色域有多大,因为windows系统默认所有显示器是完美显示sRGB色域的(事实上这种显示器根本不存在),而每个品牌每个型号甚至每台显示器的色域都有区别(而且随着屏幕不断使用色域也会不断变小)。
简易流程:(完整支持色彩管理的软件)读取要显示的内容→通过屏幕profile进行色彩转换→显卡输出数字信号→显示器接收数字信号→经过显示器内部的芯片把信号转换成控制液晶偏转角度的电信号→显示内容。
所以屏幕的色彩配置文件和显示器内的数字信号转换成模拟信号没有关系,profile的计算是在操作系统内完成的,都是数字到数字。
视频软件和图片软件的色彩管理不太一样,因为ICC profile是给图片用的,视频一般是用3D LUT文件进行色彩转换,所以即使系统设置了显示器的ICC profile,除了完整支持色彩管理的图片软件/浏览器等会读取外,其它包括视频、游戏、系统界面等等都是无视profile的,依然是把显示器当成完美sRGB色域的显示器来对待。
所以除了本文的MPC-HC这种支持通过ICC profile转换视频色域的播放器,一般都是无视系统有没有设置屏幕ICC profile的,根本不进行色彩管理,也不存在色彩的二次转换。
多谢回复。对于你的说法,我还想进一步探讨一下,尤其是对于屏幕ICC文件。ICC除了告知操作系统的色域,还有个功能是扭转屏幕的不准确显示。对于第二个作用的实现,是在“通过屏幕profile进行色彩转换→显卡输出数字信号”这一步进行类似坐标映射的操作。比如系统要让屏幕显示255.0.0这个颜色,但屏幕接收到对应的数字信号只能显示为255.0.5这个颜色(屏幕老化或者调教不良),这个时候就通过Spyder或者ColorMunki这种软硬件协同校准出一个ICCx文件。这个文件告诉系统,在给显卡发送255.0.0这个颜色的时候,添加某种偏移量,让显卡给屏幕发送255.3.9这个信号,而这个信号在这个不良的偏色的屏幕上可以把255.3.9这个信号显示为本来的255.0.0这个颜色。可能这个过程有点绕口。这个过程我认为是全局性的,否则不会称为屏幕校色ICC。那么不论是静态图片还是动态影像,整个的色彩流程应该是照相机/摄影机的特征色彩文件-屏幕的特征色彩文件-输出的特征色彩文件。这样才能保证源头到终点的尽可能一致性。所以我觉得,这个地方你用播放软件这一步还是在上述三部曲中的“屏幕特征文件”这一步,其实是不用播放软件再调用一遍色彩特征文件的。
嗯,我们一般意义上所说的用校色仪“校色”,其实包含了两个部分:Calibration(校准)和Profiling(生成ICC配置文件,也叫Characterization、特性化)。
Calibration(校准),校的是显示器白点(亮度)、黑点、gamma、色温等等。这一步通常是通过调整显示器OSD菜单和video card gamma table(VCGT、显卡的gamma查找表、也叫1D LUT)完成的。显示器OSD菜单的调整是保存在显示器上的,和显卡、操作系统无关;vcgt的调整是以文件形式保存在操作系统上,每次开机就替换显卡默认的gamma查找表,效果也就是你上面说到的信号的“偏移”。这个“校准文件”是独立的,不包括在ICC profile内,不需要ICC profile也可以工作,影响几乎是全局的。
然而这步只是在调节显示器、用操作系统和显卡弥补显示器的不完美(对于真正好的显示器,vcgt的调整是可以省略,直接进行profiling的),操作系统仍然不知道显示器的色域有多大,还是把所有显示器当成完美sRGB色域,所以下面的Profiling才是“校色”里真正不可或缺的。
Profiling(生成ICC配置文件),读取显示器的色域并生成ICC profile。生成的profile保存到操作系统,给完整支持色彩管理的软件读取;不完整支持色彩管理的软件、包括windows本身都是无视屏幕ICC profile的。
然后如上一个回复所说,ICC profile只管图片不管视频,或者说其实也能管视频,但是视频软件都在用精度更高的3D LUT做色彩管理。而且windows本身是不支持3D LUT的,所以需要额外的软件(比如视频渲染器madVR)提供3D LUT的支持,视频播放器(还有视频编辑软件)才能调用3D LUT实现视频的色彩管理。
这样,我再提供一个我猜想的测试方法:我们开两个窗口,一个是看图软件,或者就是PS,一个是你所使用的视频播放器窗口。我们调整两个窗口各占屏幕的一半。然后视频播放器开着播放。因为你的LUT文件也是基于校色后的ICC文件一并产生的。那么这个时候,屏幕的显色对于两个软件的窗口如何执行呢?
图片软件读取屏幕ICC profile文件做色彩转换,视频软件读取3DLUT文件做色彩转换,两者是互不影响的。同时显示的系统界面或者其它不支持色彩管理的软件、游戏等等不做色彩转换。
另外“校准文件”几乎影响全局,图片视频软件、游戏、系统界面都能受益。但校准文件是不参与色彩转换的,只是用来调整显示器。不过如果一个屏幕profile是在校准之后生成的话,这个profile就需要搭配校准文件(还有同样的OSD设置)一起用才能确保准确显示。
DisplayCAL不是自带一个madvr预设么,我都是直接预设然后调节一下色块数量。相比ICC那种校准+特性化,单纯特性化对显示器色域保留更大。
需要注意的是此时应该用madvr作为输出设备进行校准
另外可能是我的笔记本显示器实在太差,弄完后黑位附近会偏红一点。
我看了下madVR的两个预设都是跳过vcgt的调整的,这样的确可以避免色阶损失而且校色很快,但也就不能调整黑位/点的偏色了(还有gamma等等),只做特性化果然还是需要好一点显示器呀~
我认为在3DLUT那里Apply calibration是应该要勾上的,DisplayCAL开发者也表示建议勾选。因为madvr有色彩抖动等高级特性,将颜色输出处理全部交给madvr更好。
系统自带的校正表加载精度其实挺低的,而且映射两次也会降低精度。
官方文档是说:如果校准过vcgt,”Apply calibration”就应该打勾,除非能保证校准后的vcgt在3DLUT被调用时能一直处于读取状态。
但实际打勾后生成的3DLUT在madVR播放视频的时候会重置vcgt的校准,也就是说一旦播放视频,其它图片软件等等都会失去屏幕校准(虽然屏幕profile还在工作,但在校准基础上生成的profile失去校准后也就不准了)。
而”Apply calibration”没有打勾的话,madVR在播放视频时默认是不重置vcgt的,其它软件不会被影响,也就是“除非能保证校准后的vcgt在3DLUT被调用时能一直处于读取状态”。
DisplayCAL Profile Loader有16bit的计算精度,比不上madVR也能算够用。打勾的话madVR的播放视频的效果也许会更好一点,但我更倾向播放视频时其它软件也能保持校准。
明白你的意思了
我把madvr的设置都调得很高,也不打算一边看视频一边刷网页,所以就全都按madvr独占情形的最高效果来设置了。
我发现”disable GPU gamma ramps”这一项有点问题。https://www.avsforum.com/forum/139-display-calibration/1471169-madvr-argyllcms.html 这个帖子里有提到使用3dlut文件的时候,”disable GPU gamma ramps”是必须勾选的。2种情况下,截图得的画面色彩是一样的,但是拍照对比可以发现,不勾选的情况下色彩更深。哪边说法才是对的呢?
这个帖子里的DisplayCAL没有启用”Show advanced options”,所以在3D LUT的设置里没有”Apply calibration (vcgt)”的选项,这个选项默认是打勾的。在这个设置下生成的3dlut文件已经包含了vcgt的校准,madVR在使用这样包含校准的3dlut的时候就要重置vcgt(disable GPU gamma ramps打勾),避免校准两次。
而本文的DisplayCAL设置里”Apply calibration (vcgt)”是不勾的,生成的3dlut文件不包含校准,所以madVR里就不需要重置vcgt了。
两种设置,Apply calibration (vcgt)打勾+disable GPU gamma ramps打勾、Apply calibration (vcgt)不勾+disable GPU gamma ramps不勾,播放效果应该几乎是一样的,区别在于会不会影响其它软件(参考楼上的回复)。
楼主,如果你显示器的profile生成的是curve而不是matrixlut,chrome的兼容性就不会有问题了。
唔,我一直生成curves+matrix的profile,没试过LUT的~参考这篇 显示器校色手记:Colormunki Design/Photo与A+D 2.2最后的部分。
另外Chrome不记得从哪个版本开始,黑位附近的灰阶开始出现非常明显的色阶断层(去年底注意到的好像),现在已经被打入冷宫,全面换回FF了。
其实我现在还有点不懂,因为都用了DisplayCAL的那个loader,感觉屏幕校色已经应用到全局了。我在madvr播放视频的时候切换系统的profile,实际上madvr的颜色也跟着改变。按照上面所说的,madvr应该不受影响才对。是我理解有误吗?还是DisplayCAL的loader通过某种方式在显示器上面overlay了一层全局校色。
目前我加载了3dlut到madvr之后,开关madvr的校准貌似没有变化,只是播放HDR内容的时候才会看到lut的效果(我是SDR屏幕)
应该是我表达问题~ DisplayCAL Profile Loader的作用是读取和profile配套的calibration(校准)并应用到VCGT,所以切换profile的时候对应的calibration也会切换,madVR不受profile影响但calibration是作用整个屏幕的。
madVR的校准在我的显示器上还是挺明显的(可以看上面madVR no calibration和madVR 3D LUT的对比图),大概你的显示器比较好(比较接近视频的目标色域)所以区别不明显。
博主,按我的理解这里Source colorspace 选项时针对不同片源。因为madvr设置里可以同时设置好几种。
我也是打开osd才发现视频的色彩本身不同。大部分是rec709,uhd hdr片源则是bt2020。
所以可以用displaycal 多生成几个lut,反正都是单独调用的,让播放器自己选择?
这样一来播放2020片源时,madvr就自动找bt2020的lut,如果片源是rec709的,madvr用709的lut。
是这个意思不啦。
(不好意思被自动分类到垃圾评论里了才看到~)
嗯,生成多个色域的3dlut也可以,也许会有非常小的区别,一个其实也够用(madVR上写着一个也ok)。。我比较懒。
楼主 请问哪还有办法管理在线视频的色彩吗 我的是dell 4k 灵越7590的 色彩超饱和 我用的chrome 我把force color profile 调成了 color spin的 重启浏览器后发现所有的网页元素色彩都会变色 但是视频还是原样的 说明对色彩管理对在线视频完全不管作用 你知道有什么方法可以使在线视频变正常吗?? 谢谢
你好~
搜了一下,浏览器的在线视频色彩管理貌似还是无解。
可以考虑抓缓存本地播放。