在苹果的系统中很多播放器都会发生这种偏色。
看了下开源的一些项目,使用 AVSampleBufferDisplayLayer
和 CAMetalLayer
等方式渲染画面。
其中 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 )等元素,系统都是支持这些的,为什么还会发生偏色?
1
EdmondGUO 293 天前
我不懂这些高深的,我只知道不支持杜比视界的就会偏色,比如 mac 上我只知道 infuse 是可以不偏色的,比如新出的 VidHub 就不行,好像杜比视界是要交授权费的
|
2
f2kandlove 293 天前 via iPhone
因为大概率你用的播放器没有买杜比视界授权
|
3
mxalbert1996 293 天前 via Android
很可能是因为这些播放器没有和像素信息一起发送 DV 的 per-frame metadata 。
|
4
mxalbert1996 293 天前 via Android
哦不对,原因应该是因为这些播放器没有正确解码 DV 。DV 由 10bit 的 Basic Layer 和 Enhanced Layer 组成,正确解码时会把这两层组合成 12bit 的视频流,但不支持 DV 的解码器会只解码 BL ,结果就是偏色。
|
5
SkywalkerJi 293 天前
是钱的问题,和技术无关。
没有授权,哪怕你知道解码算法,你也不能用。 双层杜比更麻烦,很多是降级成单层播放的。 |
6
SkywalkerJi 293 天前
制作杜比视频好像也是这样。有免费封装的办法,但是自己玩可以,商用的话,没有授权应该也是不行的(达芬奇之类软件是在售价里包含了 dv 的授权)
|
7
mxalbert1996 293 天前 via Android
@SkywalkerJi
按我的理解,楼主并不是想问「为什么有些播放器不支持播放 DV 」,而是想问「为什么不支持 DV 的播放器播放 DV 会发绿发紫」。后者只和技术有关。 |
8
datou 293 天前
播放设备,播放软件和显示设备三者有一个不支持 DV 就不行吧?
|
9
mxalbert1996 293 天前 via Android
另外我对播放器支持 DV 需要授权持怀疑态度。ffmpeg 已经通过试错和逆向实现了 DV 的专有格式的解码,mpv 、IINA 和 Kodi 等等开源免费的播放器也都支持播放 DV ,我不信他们付了授权费,也不信 Dolby 会放任他们不管。
|
10
SkywalkerJi 293 天前 via Android 4
@mxalbert1996
因为 Profile5 下,dv 采用 IPTPQc2 色彩空间。 发绿发紫是因为 IPTPQc2 色彩空间映射错误,默认情况下,不支持 dv 的播放器会尝试使用常规 YCbCr420 解码器对 IPTPQc2 色彩空间进行映射(内在判断逻辑可能因为 uhd 强制兼容 hdr10 ,播放器可能默认认为这是一个 10bit 420 hdr10 视频?),结果就是发绿发紫。 |
11
txydhr 293 天前 via iPhone
@mxalbert1996 很多所谓播放只是当普通视频播放了,完全没有杜比视界的效果
|
12
ysc3839 293 天前 via Android
@mxalbert1996 播放器不一定需要授权,比如说支持解码杜比视界的 Android 盒子,用 MXPlayer 就能正常播放。那些自行实现算法的可能是侵权行为。
|
13
Kinnikuman OP @datou 播放软件起到了调用硬件的作用,如果播放设备自己支持杜比视界输出,那也行,如果硬件不支持,软件也可以手动暴力( CPU )做相应的映射,映射成 HDR 或者是 SDR 。我的理解是,显示设备只负责展示,即使不支持 HDR ,那么系统也会有相应的映射,但起码不会发绿发紫。
|
14
wanguorui123 293 天前
可以通过手动调整色彩映射
|
15
gdfsjunjun 293 天前
偏绿说明播放器还是设备不支持杜比,强行播放就是这样的。
|
16
pigf 293 天前
小米手机拍的杜比视频在相册播放就会成灰色,也是没交授权费?
去小米之家问他们售后他们也完全搞不清楚 |
17
mxalbert1996 293 天前
|
18
ysc3839 292 天前 via Android
@mxalbert1996 哪种情况?
实际管不管很难说,有可能起诉成本太高所以不管,比如 HEVC 要收授权费,但是仍然有大量用户使用没被起诉。对侵权睁一只眼闭一只眼,放任市场发展是很正常的。 程序代码侵权是有可能的,可以注册专利。一些开放源代码协议如 Apache License 就包含专利授权。 |
19
Kinnikuman OP 所以,mpv 这种“著名”的开源项目逆向将 Profile5 的色彩空间映射成 SDR(不确定 HDR),不算侵权做法吗?我也一直好奇,因为像这样的开源项目,不可能去做一些侵权的行为的,而且即使做了,杜比也会有所动静去制止。
难道是,只要无法还原出 Profile5 原本的颜色,再怎么逆向映射,杜比就不管? @ysc3839 @mxalbert1996 |
21
EdmondGUO 235 天前
@Fish1024 可能什么时候的更新修复了吧。我记得很清楚,之前我测试的适合还是偏色的,所以我就没取消 infuse 的订阅,今天我试了下好像不偏色了,看来今年订阅到期了可以转 vidhub 了。
|
22
Kinnikuman OP @Fish1024 映射成 SDR 还是 HDR?
|
23
Fish1024 232 天前
@Kinnikuman #22 我不知道映射成什么,就是下载了直接用的。在 MacOS 系统设置面开启 HDR 和不开启 HDR 都正常。
|