为什么播放杜比视界会发绿发紫?

100 天前
 Kinnikuman

在苹果的系统中很多播放器都会发生这种偏色。

看了下开源的一些项目,使用 AVSampleBufferDisplayLayerCAMetalLayer 等方式渲染画面。

其中 AVSampleBufferDisplayLayer 是相对比较高级一点的 API ,将 sample buffer 发送到这个 layer 系统就可以进行渲染展示。其中这是苹果自己内部的渲染,只要 sample buffer 包含颜色信息,就会正常显示到显示器。

CAMetalLayer 是相对底层的东西,需要根据画面手动设定颜色空间和像素格式等信息(预设一个场景),这样画面渲染的时候基于这些信息进行绘制。

但不论是哪一种方式,对于 HDR 或者杜比视界来说,都是有相应的颜色空间/色彩原色/转换函数。讲的更详细一点,比如从视频中解码出一帧视频:

1. format: 视频帧包含色深和色彩编码方式( RGB, YUV )
2. color_range: 对于 YUV 又会有 full range 和 limited range
3. colorspace: 相应的转换矩阵( RGB <-> YUV)
4. color_trc: 转移函数将 RGB 转换成线性 RGB

对于 HDR 画面来讲,会在不同区域显示出不同的高亮(简单通俗来讲),对于杜比视界,动态元数据可以针对每一帧画面做到调节颜色和亮度(普通 HDR 只能预设一种)。

在一个不支持 HDR 的显示设备上显示 HDR 画面时候,系统会自动做相应的映射,有的是将超过 Reference-White 部分直接变成 Reference-White ,而有的映射是进行一个线性转换。

所以我的疑问是,杜比视界也是有相应的色彩空间/转换函数( PQ )等元素,系统都是支持这些的,为什么还会发生偏色?

2651 次点击
所在节点    程序员
23 条回复
EdmondGUO
100 天前
我不懂这些高深的,我只知道不支持杜比视界的就会偏色,比如 mac 上我只知道 infuse 是可以不偏色的,比如新出的 VidHub 就不行,好像杜比视界是要交授权费的
f2kandlove
100 天前
因为大概率你用的播放器没有买杜比视界授权
mxalbert1996
100 天前
很可能是因为这些播放器没有和像素信息一起发送 DV 的 per-frame metadata 。
mxalbert1996
100 天前
哦不对,原因应该是因为这些播放器没有正确解码 DV 。DV 由 10bit 的 Basic Layer 和 Enhanced Layer 组成,正确解码时会把这两层组合成 12bit 的视频流,但不支持 DV 的解码器会只解码 BL ,结果就是偏色。
SkywalkerJi
100 天前
是钱的问题,和技术无关。
没有授权,哪怕你知道解码算法,你也不能用。
双层杜比更麻烦,很多是降级成单层播放的。
SkywalkerJi
100 天前
制作杜比视频好像也是这样。有免费封装的办法,但是自己玩可以,商用的话,没有授权应该也是不行的(达芬奇之类软件是在售价里包含了 dv 的授权)
mxalbert1996
100 天前
@SkywalkerJi
按我的理解,楼主并不是想问「为什么有些播放器不支持播放 DV 」,而是想问「为什么不支持 DV 的播放器播放 DV 会发绿发紫」。后者只和技术有关。
datou
100 天前
播放设备,播放软件和显示设备三者有一个不支持 DV 就不行吧?
mxalbert1996
100 天前
另外我对播放器支持 DV 需要授权持怀疑态度。ffmpeg 已经通过试错和逆向实现了 DV 的专有格式的解码,mpv 、IINA 和 Kodi 等等开源免费的播放器也都支持播放 DV ,我不信他们付了授权费,也不信 Dolby 会放任他们不管。
SkywalkerJi
100 天前
@mxalbert1996
因为 Profile5 下,dv 采用 IPTPQc2 色彩空间。
发绿发紫是因为 IPTPQc2 色彩空间映射错误,默认情况下,不支持 dv 的播放器会尝试使用常规 YCbCr420 解码器对 IPTPQc2 色彩空间进行映射(内在判断逻辑可能因为 uhd 强制兼容 hdr10 ,播放器可能默认认为这是一个 10bit 420 hdr10 视频?),结果就是发绿发紫。
txydhr
99 天前
@mxalbert1996 很多所谓播放只是当普通视频播放了,完全没有杜比视界的效果
ysc3839
99 天前
@mxalbert1996 播放器不一定需要授权,比如说支持解码杜比视界的 Android 盒子,用 MXPlayer 就能正常播放。那些自行实现算法的可能是侵权行为。
Kinnikuman
99 天前
@datou 播放软件起到了调用硬件的作用,如果播放设备自己支持杜比视界输出,那也行,如果硬件不支持,软件也可以手动暴力( CPU )做相应的映射,映射成 HDR 或者是 SDR 。我的理解是,显示设备只负责展示,即使不支持 HDR ,那么系统也会有相应的映射,但起码不会发绿发紫。
wanguorui123
99 天前
可以通过手动调整色彩映射
gdfsjunjun
99 天前
偏绿说明播放器还是设备不支持杜比,强行播放就是这样的。
pigf
99 天前
小米手机拍的杜比视频在相册播放就会成灰色,也是没交授权费?
去小米之家问他们售后他们也完全搞不清楚
mxalbert1996
99 天前
@ysc3839
你知道我说的当然不是这种情况。我也说了,如果真的侵权我不信 Dolby 会放任他们不管。
而且实现算法侵权这个其实是说不通的,就好比游戏机的模拟器不侵权一样。
ysc3839
99 天前
@mxalbert1996 哪种情况?
实际管不管很难说,有可能起诉成本太高所以不管,比如 HEVC 要收授权费,但是仍然有大量用户使用没被起诉。对侵权睁一只眼闭一只眼,放任市场发展是很正常的。
程序代码侵权是有可能的,可以注册专利。一些开放源代码协议如 Apache License 就包含专利授权。
Kinnikuman
98 天前
所以,mpv 这种“著名”的开源项目逆向将 Profile5 的色彩空间映射成 SDR(不确定 HDR),不算侵权做法吗?我也一直好奇,因为像这样的开源项目,不可能去做一些侵权的行为的,而且即使做了,杜比也会有所动静去制止。

难道是,只要无法还原出 Profile5 原本的颜色,再怎么逆向映射,杜比就不管?


@ysc3839 @mxalbert1996
Fish1024
42 天前
@EdmondGUO 今天看 vidhub 放杜比视界似乎没问题啊,iina 就偏色到奶奶家了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1013523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX