sommio 发表于 2023-3-6 05:37:37

关于 mpv 使用 icc profile 默认行为及是否应该无脑开启 icc-profile-auto 的讨论

本帖最后由 sommio 于 2023-3-20 03:50 编辑

因为不想再偏楼了,就把这个废贴利用了吧

伽玛补偿行为
废话:伽玛补偿是补偿视频伽玛到某个特定伽玛曲线的行为
在使用正确的 icc profile,并且 vo_gpu 获取了正确的对比度(mpv 中的 black level 控制)时,对于 YCbCr 内容 mpv 默认会把视频伽玛补偿到 bt.1886
可能反直觉的是,bt.1886 并不总比 gamma2.2 更暗,尤其是暗场上,虽然整体亮度仍然低于 gamma2.2,在低对比度时它甚至总高于 srgb

因此当 mpv 将伽玛补偿到 bt.1886 时,并不会导致丢失暗场,反而会导致暗场更亮,呈现出“灰黑色”质感
但如果 vo_gpu 没有从配置文件中获取对比度,它会认为对比度为无限(zero black level),并将伽玛补偿到暗场比 gamma2.2 更暗的 gamma2.4
在 vo_gpu_next 中,此值是 1000:1 且目前无法通过 icc-force-contrast 覆盖,当然这并不意味着 vo_gpu_next 无法使用从配置文件中获取的对比度

此外通过文档可知当启用 vf=format:gamma 滤镜时,mpv 会将 gamma 补偿到你想要的目标,并非是 bt.1886-> TRC
这个选项类似 MadVR 中的 color & gamma -> enable gamma processing
对于 bt.1886 以外的补偿目标对比度是无意义的,因此也无需担忧是否正确设置了对比度

bt.1886 暗场要比 gamma2.2 亮很多

虚线-gamma2.2/2.4, 红-srgb, 蓝-1000:1 对比度 bt.1866,绿-5000:1 对比度 bt.1866

无配置文件时的 icc-profile-auto
严格来说并不存在无配置文件的情况,Windows 和 *nix 发行版都有预设的配置文件
在 Windows 中它位于 C:/Windows/System32/spool/drivers/color/sRGB Color Space Profile.icm
而多数基于 colord 进行色彩管理的发行版会根据 EDID 生成配置文件并默认启用

前者等效于 target-trc=srgb,但任何 target-trc 目标都不能使用 icc-force-contrast 调整对比度
后者的可靠性取决于制造商,至少在我的设备上它表现得不算太差,推荐在暗场丰富的番中对比测试

但总得来说,如果你没有根据 EDID 生成的配置文件或者喜欢 bt.1886 的观感,没有太大必要开启它
多数情况下预设配置文件的行为是不可预测的,暗部可能看起来会更亮,也可能更暗
对于喜欢 bt.1886 观感且想要 hack target-trc=gamma2.2 选项的人,我在附件里上传了一份使用 gamma2.2 的 sRGB 配置文件
默认情况下它的行为与 target-trc=gamma2.2 相同,但可通过 icc-force-contrast 调整对比度(mpv vo_gpu 中的 black level 控制)





苏辰汐 发表于 2023-3-7 22:37:13

本帖最后由 苏辰汐 于 2023-3-7 22:44 编辑

大致是没有问题的,只提一点:当想要在mpv上使用--vo=gpu-next --gpu-api=vulkan --target-colorspace-hint参数直通hdr时不要使用icc配置文件,参考 https://github.com/mpv-player/mp ... ecomment-1268923202

感兴趣的可以尝试通过条件配置为hdr视频切换pq曲线的icc配置文件看下是否可用,不过由于--target-colorspace-hint参数只支持在播放器初始化时应用,不确定这有用。手上没有对应的icc配置文件无法测试

Edit:突然想到通过条件配置为HDR禁用ICC色彩管理一样可以测试此方案是否可行。经测试后的结果是可以的,条件配置参考:

profile-cond=p["video-params/sig-peak"] > 1
profile-restore=copy
icc-profile=""
icc-profile-auto=no



sommio 发表于 2023-3-7 21:49:31

本帖最后由 sommio 于 2023-3-8 22:46 编辑

水贴复活,手动 @boday,原谅我的冒味
在大佬的 跨平台播放器 mpv 配置入门中,icc-profile-auto 被认为是
> mpv 默认不对视频进行色彩管理。即使你没有使用校色仪对屏幕进行过校色
> 对于原生色域接近某一标准色域(如 sRGB 或 DCI-P3 D65)的屏幕来说
> 开启色彩管理仍然可以获得更准确的颜色,因此,建议始终将色彩管理开启:

但主要问题在于,无脑开启 icc-profile-auto 后 mpv 的画面看上去跟其它播放器非常不同
Windows 只有参考 sRGB 和软打烊配置文件,DCI-P3 全是错的,色彩能准确多少完全是玄学
实际上它的作用只是把视频“校正”到 gamma2.4/bt.1886,但社区显而不太喜欢这个 TRC
个人浅见它不适合出现在这种带有官方性质的文章中

hsmms 发表于 2023-3-7 23:28:17

本帖最后由 hsmms 于 2023-3-7 23:35 编辑

我觉得问题跟本不是什么是否开启icc-profile-auto,而是应该去了解bt.1886到底是什么。

1.bt.1886虽然基于gamma 2.4但是它并等同于gamma 2.4。
2.bt.1886是基于显示设备的黑电平而不是针对观看环境设计的。
3.bt.1886会过份的抬高暗部亮度。

所以问题的应该是使用bt.1886还是gamma 2.2/2.4


我个人建议

对于黑位亮度过低的设备可以考虑使用bt.1886

对于黑位亮度过高的设备建议使用gamma 2.4

对于黑位亮度低但对比度高的设备可以使用gamma 2.2或者bt.1886


ps:以上内容只针对没有校准下的设备mpv下应该用那种eotf曲线,这样的好处就是黑位亮度不会过份的低或者高。


Starlight 发表于 2023-3-8 00:14:57

行为是先应用前者的EOTF再应用后者的OETF,两者一致时不处理

一个简单的测试
vf=format=gamma=linear
target-trc=linear

达芬奇或者 aces-ctl 对 rec.709 使用 0 黑位的 bt.1886 (gamma2.4) 作为 OETF
然而 mpv 使用带 1/1000 黑位的 bt.1886 作为 EOTF
在这样的前提下二者的行为已经出现分歧,我认为对再之后的 OETF 做调整 (icc, target-trc) 是没有意义的





mpv --target-trc=linear

hsmms 发表于 2023-3-8 00:35:20

Starlight 发表于 2023-3-8 00:14
行为是先应用前者的EOTF再应用后者的OETF,两者一致时不处理

一个简单的测试


如果mpv是强制使用1/1000 黑位的 bt.1886 作为 EOTF曲线的化那我不推荐使用bt.1886。

原因我上面也说了:bt.1886是基于显示设备的黑电平而不是针对观看环境设计的。



sommio 发表于 2023-3-8 01:02:32

本帖最后由 sommio 于 2023-3-8 05:05 编辑

Starlight 发表于 2023-3-8 00:14
行为是先应用前者的EOTF再应用后者的OETF,两者一致时不处理

一个简单的测试

相关讨论移至: issue:11422

Starlight 发表于 2023-3-8 01:09:14

我测的就是gpu-next,gpu不知道什么情况

黑位影响的不只是暗部,你可以用这个放 bt.2020的那个 EVA Q

https://github.com/natural-harmonia-gropius/hdr-toys

target-prim=bt.2020
glsl-shader=~~/shaders/hdr-toys/transfer-function/bt1886_to_linear.glsl
glsl-shader=~~/shaders/hdr-toys/gamut-mapping/matrix.glsl
glsl-shader=~~/shaders/hdr-toys/transfer-function/linear_to_bt1886.glsl

颜色会比 gpu-next 鲜艳一些,把两个 bt.1886 的 L_B 改成 0.001 就和 gpu-next 一样了

sommio 发表于 2023-3-8 01:44:06

Starlight 发表于 2023-3-8 01:09
我测的就是gpu-next,gpu不知道什么情况

黑位影响的不只是暗部,你可以用这个放 bt.2020的那个 EVA Q


大佬方便去 mpv-player/mpv 提 issue 讨论这个问题吗?
我的知识水平不足以理解哪个才是对 bt.1886 正确诠释

hsmms 发表于 2023-3-8 01:45:57

本帖最后由 hsmms 于 2023-3-8 01:48 编辑

sommio 发表于 2023-3-8 01:02
大佬方便测试一下 vo_gpu_next 吗?按 haasn 的说法,它应该是 0
怎么能以0作为黑位亮度,目前市面上就不存在黑位是0的设备。那么1886一切修正都会基于黑位0进行修正这样对于实际设备来说会导致黑位亮度过低。

这是mpv 的1886(基于黑位0)



这是madvr下的1886(黑位基于显示设备实际黑位亮度)



页: [1] 2 3 4 5 6
查看完整版本: 关于 mpv 使用 icc profile 默认行为及是否应该无脑开启 icc-profile-auto 的讨论