视频格式大全
+ -

色彩空间与色彩范围

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_SRGBVIDEO_RANGE_FULL
  • 对于专业视频内容,使用 VIDEO_CS_709VIDEO_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 色彩空间
  • 专业视频制作:使用有限范围

通过正确理解和配置这些参数,您可以获得更加专业和准确的视频输出效果。

0 篇笔记 写笔记

作者信息
站长漫谈
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!