我花了很多时间查看 YCbCr 格式的原始视频。开始思考显示屏上真正显示的内容以及像素最终如何出现在那里。
没有显示器可以处理 YCbCr 数据,所以我猜一切都会在某个地方转换为 RGB。然而,YCbCr->RGB 是件棘手的事情,例如 http://www.fourcc.org/fccyvrgb.php
如果我进行 YCbCr 到 RGB 的转换,是否可以保证我拥有的像素值就是所显示的像素值?
如果没有获得如下所示的经过硬件校准的 Eizo 显示器:
http://www.eizo.com/global/products/coloredge/
有没有办法尽可能地控制显示器的“管道”(即我的像素不会在途中转换)我在想也许是 nvidia/gpu/opengl 并将所有东西尽可能靠近硬件;那么对于我的显卡,至少我知道我在看什么。
有没有 RGB 格式本国的用于显卡,并且不需要任何进一步的转换?YCbCr 是 8bpp,我正在考虑 32 位 RGB 4:4:4。
我主要使用 Linux 系统,如果这有区别的话。目前我正在使用http://www.libsdl.org/ 还有http://directfb.org/但我还没有探索过那条路。
或者,也许这一切只是愚蠢和偏执:-)
答案1
问题有很多,我会尽力回答其中的一些。
没有显示器可以处理 YCbCr 数据,所以我猜测所有内容都会在某处转换为 RGB。
所有显示器都使用 RGB。在 LCD 上,每个像素由三种基本颜色的三个子像素组成。所以你说得对,所有内容都必须转换为 RGB 才能显示。
如果我进行 YCbCr 到 RGB 的转换,是否可以保证我拥有的像素值就是所显示的像素值?
这取决于你的意思。可以保证显示准确的转换结果。因此,这取决于转换结果,而转换结果又取决于你使用的伽马。
有没有办法尽可能地控制显示器的“管道”(即我的像素不会在途中转换)我在想也许是 nvidia/gpu/opengl 并将所有东西尽可能靠近硬件;那么对于我的显卡,至少我知道我在看什么。
一旦图像被转换为 RGB,它就不会再被修改(除非你使用勒克斯或类似软件)。它是否更接近硬件并不重要,它只是一堆像素,在转换为 RGB 后没有任何东西可以修改它们(除非你要求某些东西,例如使用提到的 f.lux、色彩校正软件或可以应用颜色过滤器的视频编辑程序)。
YCbCr 是 8bpp,我认为是 32 位 RGB 4:4:4。
我认为您混淆了一些内容,或者我不明白您的意思。首先,32 位 RGB 不能是 4:4:4,因为您不能将 32 位均等地分成 3 个颜色通道。(R 为 10 位,G 为 11 位,B 为 11 位?)32 位 RGB 实际上由三个 8 位颜色通道和一个 8 位透明通道组成。视频没有透明度,因此它们使用 24 位 RGB。(每个通道 8 位)
我不知道 YCbCr 是如何以数字格式保存的,但我确定它不是 8 位,至少假设我们谈论的是像素的总大小。(如果您的意思是 8 位颜色通道,那么它与 RGB 中的一样多)8 位像素最多可容纳 256 种颜色。24 位 RGB 超过 1600 万种颜色。
是否存在显卡原生的 RGB 格式,并且不需要任何进一步转换?
所以你想要原始的、未压缩的 RGB 像素?好吧,有这样的图片和视频格式,但未压缩的视频确实占用了大量的空间。让我们对 24 位 24fps 1080p 视频进行快速计算:
3B * 1920px * 1080px * 24fps = 149299200B
因此,每一秒的原始未压缩 1080p 视频重量超过 140 MB。这意味着您可以在行业标准的蓝光光盘上保存长达 5 分半钟的视频。我认为这并不划算 ;)