# 色彩/位深

可能有许多人会问：我用的8bit显示器，还要看10bit的视频，有意义吗？

## YUV与RGB

我们的显示器使用的一般都是RGB色彩模型，RGB三个色彩屏幕都属于强度，而视频所使用的YUV则不然。

YUV其实就是将RGB经过一定的转换后得到的的另一种表示方式，具体如何转换我们在这里暂且不说，有兴趣的可以在[这里](https://en.wikipedia.org/wiki/YUV)了解一下。

YUV模型有很多具体的实现方式，而日常我们接触最多的就是YCbCr模型。它把RGB转换成一个亮度（Y）和两个色度（CbCr）。

![Y平面](https://i.v2ex.co/Pp8ZCS0r.png)

![只有Cb色度](https://i.v2ex.co/wXyXf104.png)

![只有Cr色度](https://i.v2ex.co/5x23TI82.png)

由于人类对亮度的敏感程度远高于色度，因此我们能看到的有效信息大部分来源于亮度（也就是Y）平面，而正因为YUV模型把大部分有效信息都集中在了Y平面，所以我们可以牺牲色度平面不必要的信息来大大的节省传输过程中所占的信息量，这就引出了色度采样的概念。

## 色度采样（Chroma subsampling）

嘿，既然人眼对色彩信息不敏感，为什么我们不想办法削减色度平面信息呢！

所以，我们今天接触到的绝大多数视频都是以一种叫做`4:2:0`的方式进行色度半采样的，最简单粗暴的理解就是：色度信息的分辨率是亮度信息的四分之一，也就是如果一个`YUV`，以`4:2:0`进行色度抽样的视频的分辨率是`1920x1080`，那它的色度分辨率就只有`960x540`。如果你想对此有更深入的了解，可以从[维基百科的色度采样词条](https://zh.wikipedia.org/wiki/%E8%89%B2%E5%BA%A6%E6%8A%BD%E6%A0%B7)了解它。

![图自维基百科-色度采样词条](https://i.v2ex.co/xJ7C55a0.png)

通过将色度信息分辨率减半，我们就能获得观感差不了多少的YUV色彩模型的视频了。在播放过程中，播放器需要将色度平面通过算法拉伸到和亮度平面一样的分辨率，再转为RGB喂给显示器输出，如果你使用的是madvr，随便打开一个420采样的视频并且保持原本分辨率播放，可以不难发现madvr仅对色度平面进行了缩放，而不会对亮度平面进行缩放。这样的缩放算法好坏其实也影响了最后回放时的观感。

![madvr利用NGU拉伸色度平面，而没有对亮度平面进行处理](https://i.v2ex.co/ugiGK0BN.png)

## 位深（BitDepth）

说了那么多，我们终于回到了位深。

根据计算机基础知识，8bit位深的每个通道的每个像素点都由8位二进制组成，一个通道的像素点可以表示256种强度，而10bit则可以表示1024种。根据vcb-s的说法：“在最终输出是8bit RGB的前提下，10bit YUV比起8bit YUV依旧具有精度优势的原因就在这里。事实上，8bit YUV转换后，覆盖的精度大概相当于8bit RGB的26%，而10bit转换后的精度大约可以覆盖97%”，我们也能在此端倪10bit的重要性。而10bit相对于8bit，优势不仅在于色彩精度，在编码器量化编码的阶段，高位深带来的优势也非常明显，这里暂且不谈。

但是，位深的另一个关键作用在于：高精度可以防止色带！

尽管8bit RGB已经足够表现 [Rec. 709](https://en.wikipedia.org/wiki/Rec._709)或者 [sRGB](https://en.wikipedia.org/wiki/SRGB)的颜色了，但是，嘿！我们这可是`YUV420P8`呢，色带有些时候总是不可避免的，甚至连8bit RGB都是如此！

如果你有一块8bit或更低色彩深度的显示器，在正确打开[这张图](https://drive.google.com/open?id=1JoLezJJGeY8jAn0PXiAs-RCdaP9TLUUL)的时候，就会看到明显的色带！

那么，我们有什么办法，可以阻止色带的产生呢？那就请看下集：色带处理


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://guide.geeking.moe/cong-ru-men-dao-jing-tong/se-cai-wei-shen.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
