色彩空间与色彩范围
2026-03-03
2
0
一、色彩空间(Color Space)
1. 定义与作用
色彩空间是一种组织和表示颜色的数学模型,它定义了如何将颜色信息编码为数字值。在视频处理中,色彩空间决定了如何将光信号转换为数字信号,以及如何在不同设备间传递颜色信息。
2. OBS 支持的色彩空间
OBS 支持以下色彩空间:
| 枚举值 | 名称 | 描述 | 应用场景 |
|---|---|---|---|
VIDEO_CS_DEFAULT |
默认 | 系统默认色彩空间 | 一般使用场景 |
VIDEO_CS_601 |
REC.601 | 标准清晰度电视色彩空间 | 标清视频(480i/p、576i/p) |
VIDEO_CS_709 |
REC.709 | 高清晰度电视色彩空间 | 高清视频(720p、1080p) |
VIDEO_CS_SRGB |
sRGB | 计算机显示色彩空间 | 计算机图形、游戏直播 |
3. 技术原理
不同色彩空间使用不同的原色和转换矩阵:
- REC.601:针对标清电视设计,使用 PAL/NTSC 标准
- REC.709:针对高清电视设计,与 sRGB 有相似之处但不完全相同
- sRGB:针对计算机显示器设计,是互联网和大多数计算机应用的标准
二、色彩范围(Color Range)
1. 定义与作用
色彩范围指的是颜色值的取值范围,特别是亮度(Y)和色度(U、V)分量的取值范围。它决定了颜色的动态范围和精度。
2. OBS 支持的色彩范围
OBS 支持以下色彩范围:
| 枚举值 | 名称 | 范围 | 描述 | 应用场景 |
|---|---|---|---|---|
VIDEO_RANGE_FULL |
全范围 | 0-255 | 计算机显示标准范围 | 计算机图形、游戏、RGB 格式 |
VIDEO_RANGE_PARTIAL |
有限范围 | 16-235 | 广播电视标准范围 | 专业视频制作、YUV 格式 |
3. 技术原理
全范围(0-255):
- 黑色 = 0,白色 = 255
- 适用于计算机显示器和大多数 RGB 内容
- 提供更宽的动态范围和更精细的色彩层次
有限范围(16-235):
- 黑色 = 16,白色 = 235
- 适用于广播电视和专业视频设备
- 预留了一些空间用于信号传输中的噪声和干扰
三、OBS 中的应用
1. 配置方式
在 OBS 中,色彩空间和色彩范围通过 obs_video_info 结构体配置:
struct obs_video_info ovi;
ovi.colorspace = VIDEO_CS_709; // 设置色彩空间
ovi.range = VIDEO_RANGE_FULL; // 设置色彩范围
ovi.output_format = VIDEO_FORMAT_NV12; // 设置输出格式
2. 内部处理
在 set_video_matrix 函数中,OBS 根据配置的色彩空间和范围生成颜色转换矩阵:
if (format_is_yuv(ovi->output_format)) {
video_format_get_parameters(ovi->colorspace, ovi->range,
(float *)&mat, NULL, NULL);
matrix4_inv(&mat, &mat);
/* swap R and G */
r_row = mat.x;
mat.x = mat.y;
mat.y = r_row;
}
<mcfile name="obs.c" path="E:\obs\obs-studio-master\libobs\obs.c"></mcfile>
3. 实际影响
色彩空间选择:
- 高清内容应使用
VIDEO_CS_709 - 标清内容应使用
VIDEO_CS_601 - 计算机图形和游戏应使用
VIDEO_CS_SRGB
- 高清内容应使用
色彩范围选择:
- 计算机内容(如游戏)应使用
VIDEO_RANGE_FULL - 专业视频内容应使用
VIDEO_RANGE_PARTIAL
- 计算机内容(如游戏)应使用
四、常见问题与解决方案
1. 色彩不匹配问题
症状:录制或直播的视频颜色与原始内容不符,出现偏色。
原因:
- 色彩空间设置错误
- 色彩范围设置错误
- 输入源与输出格式的色彩空间不匹配
解决方案:
- 确保输入源和输出格式使用相同的色彩空间
- 根据内容类型选择正确的色彩范围
- 对于游戏和计算机内容,使用
VIDEO_CS_SRGB和VIDEO_RANGE_FULL - 对于专业视频内容,使用
VIDEO_CS_709和VIDEO_RANGE_PARTIAL
2. 黑电平问题
症状:视频中的黑色部分看起来发灰或不够黑。
原因:
- 色彩范围设置错误
- 输入源使用全范围,但输出设置为有限范围
解决方案:
- 确保色彩范围设置与输入源匹配
- 对于计算机内容,使用
VIDEO_RANGE_FULL
五、技术细节
1. 颜色转换矩阵
不同色彩空间使用不同的转换矩阵,例如:
REC.709 转换矩阵:
Y = 0.2126*R + 0.7152*G + 0.0722*B
U = -0.09991*R - 0.33609*G + 0.436*B
V = 0.615*R - 0.55861*G - 0.05639*B
REC.601 转换矩阵:
Y = 0.299*R + 0.587*G + 0.114*B
U = -0.14713*R - 0.28886*G + 0.436*B
V = 0.615*R - 0.51499*G - 0.10001*B
2. GPU 加速转换
当 gpu_conversion 设置为 true 时,OBS 会使用 GPU 着色器进行颜色空间转换,提高性能。这对于实时直播和录制尤为重要。
3. 格式兼容性
- YUV 格式:通常使用有限范围(16-235)
- RGB 格式:通常使用全范围(0-255)
- 混合使用不同范围可能导致颜色失真
总结
色彩空间和色彩范围是视频处理中的重要概念,它们直接影响视频的颜色表现和质量。在 OBS 中,正确配置这些参数可以确保视频颜色的准确性和一致性,避免出现偏色、黑电平错误等问题。
选择合适的色彩空间和范围应基于内容类型和目标平台:
- 计算机图形和游戏:使用 sRGB 色彩空间和全范围
- 高清视频:使用 REC.709 色彩空间
- 标清视频:使用 REC.601 色彩空间
- 专业视频制作:使用有限范围
通过正确理解和配置这些参数,您可以获得更加专业和准确的视频输出效果。
视频格式大全





