色彩空间 YUV 与 RGB 转换实战:从公式推导到 FFmpeg 滤镜应用
色度校正: $$ R = Y + 1.403(V - 128) $$ $$ G = Y - 0.344(U - 128) - 0.714(V - 128) $$ $$ B = Y + 1.773(U - 128) $$亮度分量: $$ Y = 0.299R + 0.587G + 0.114B $$ 色度分量: $$ U = 0.564(B - Y) + 128 $$ $$ V = 0.713(R
色彩空间 YUV 与 RGB 转换实战
一、色彩空间基础概念
-
RGB 模型
基于红($R$)、绿($G$)、蓝($B$)三原色,符合人眼锥细胞感知特性,满足加色混合原理: $$ \begin{bmatrix} R \ G \ B \end{bmatrix} \in [0,255]^3 $$ -
YUV 模型
分离亮度($Y$)与色度($U,V$),其中:- $Y$:亮度分量,$Y \in [0,255]$
- $U,V$:色度分量,$U,V \in [-128,127]$ 优势:兼容黑白设备,压缩效率高(人眼对亮度更敏感)
二、转换公式推导(基于 BT.601 标准)
-
RGB → YUV 转换
亮度分量: $$ Y = 0.299R + 0.587G + 0.114B $$ 色度分量: $$ U = 0.564(B - Y) + 128 $$ $$ V = 0.713(R - Y) + 128 $$ -
YUV → RGB 转换
色度校正: $$ R = Y + 1.403(V - 128) $$ $$ G = Y - 0.344(U - 128) - 0.714(V - 128) $$ $$ B = Y + 1.773(U - 128) $$
注:系数差异源于标准版本(BT.709/BT.2020),实际应用需对齐标准
三、Python 转换实现
import numpy as np
def rgb_to_yuv(rgb):
""" RGB转YUV (BT.601标准) """
r, g, b = rgb / 255.0
y = 0.299 * r + 0.587 * g + 0.114 * b
u = 0.564 * (b - y) + 0.5 # 归一化到[0,1]
v = 0.713 * (r - y) + 0.5
return np.clip([y, u, v], 0, 1) # 限制数值范围
def yuv_to_rgb(yuv):
""" YUV转RGB (BT.601标准) """
y, u, v = yuv
u -= 0.5; v -= 0.5 # 解除归一化
r = y + 1.403 * v
g = y - 0.344 * u - 0.714 * v
b = y + 1.773 * u
return np.clip([r, g, b], 0, 1) * 255 # 转回[0,255]
四、FFmpeg 滤镜实战应用
-
转换命令原理
ffmpeg -i input.mp4 -vf "colorspace=all=bt601:iall=bt709" output.mp4colorspace:核心转换滤镜all=bt601:输出YUV标准iall=bt709:输入RGB标准
-
典型场景案例
需求:将H.264视频(YUV420p)转为ProRes RGBffmpeg -i input.h264 -vf "format=yuv444p,colorspace=bt709:iall=bt601:trc=linear" -c:v prores output.movformat=yuv444p:色度采样转换trc=linear:伽马曲线校正
-
高级调优参数
ffmpeg -i input.mp4 -vf "colorspace=range=pc:format=rgb24" output.mp4range=pc:使用全范围(0-255)替代TV范围(16-235)format=rgb24:指定输出像素格式
提示:使用
ffmpeg -pix_fmts可查询支持的色彩空间格式
五、工程注意事项
-
标准对齐
- 广播级视频常用
BT.601(SD)或BT.709(HD) - 网络流媒体优先
BT.2020(HDR)
- 广播级视频常用
-
性能优化
- 硬件加速:添加
-hwaccel cuda启用GPU - 并行处理:
-threads 4指定多线程
- 硬件加速:添加
-
色域损失
转换过程存在截断误差,建议:- 保持浮点精度处理
- 优先使用10bit以上色深
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)