yuv

0 阅读3分钟
概述

YUV是一种将亮度信息与颜色信息分离的颜色编码系统,广泛应用于视频处理、图像压缩和电视广播。

  • Y(Luma)亮度分量。代表图像的灰度信息(即黑白电视能看到的部分),是视觉上最重要的部分,占据大部分带宽和数据。
  • U 和 V(Chroma)色度分量。代表颜色信息,具体是蓝色差值红色差值。人眼对色度细节不敏感,因此常常可以被压缩。
影响yuv质量的因素

如果图片质量有问题,从这3个方面入手:
1.采样率及压缩格式,就是之前提到的yuv4:2:0等;
2.色域,有2种色域,及颜色深度,及每个像素的可表示范围大小pc(0-255), tv(16-235)
3.rgb->yuv的转换标准:BT.601和BT.709

常用压缩格式

图片.png

rgb->yuv转换标准
  • BT.601: 面向标清电视(如DVD、480i/576i)。
  • BT.709: 面向高清电视和现代数字视频(如蓝光、1080p、网络视频)。
颜色范围
  • 下表清晰地展示了两种范围:
分量Limited Range (TV Range)Full Range (PC Range)主要应用场景
Y (亮度)16 - 235 (219级)0 - 255 (256级)BT.601/BT.709视频标准 (DVD, 蓝光, 广播, 绝大多数流媒体)
U/V (色度)16 - 240 (225级)0 - 255 (256级)RGB图像、JPEG、计算机图形、某些视频编码内部
ffmpeg相关命令

ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080  -vf \
"scale=in_color_matrix=bt601:out_color_matrix=bt601:in_range=jpeg:out_range=jpeg"\
input.yuv

ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080  -vf \
"scale=in_color_matrix=bt709:out_color_matrix=bt709:in_range=jpeg:out_range=jpeg"\
input.yuv
			
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf \"
scale=in_color_matrix=bt709:out_color_matrix=bt709:in_range=mpeg:out_range=mpeg"\
your_file.yuv

ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -vf \
"scale=in_color_matrix=bt601:out_color_matrix=bt601:in_range=mpeg:out_range=mpeg"\
your_file.yuv

ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080  -x 1920 -y 1080 \
-an -noborder input.yuv
				
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -x 1366 -y 768 -vf \"
scale=1366:768:flags=neighbor:in_color_matrix=bt601:out_color_matrix=bt601:in_range=mpeg:out_range=mpeg" \
-an input.yuv
			
			# BT.601 + PC Range(Full Range)
			... -vf "scale=1366:768:flags=neighbor:in_color_matrix=bt601:out_color_matrix=bt601:in_range=jpeg:out_range=jpeg" ...

# BT.601 + TV Range(Limited Range)
... -vf "scale=1366:768:flags=neighbor:in_color_matrix=bt601:out_color_matrix=bt601:in_range=mpeg:out_range=mpeg" ...

# BT.709 + PC Range(Full Range)
"scale=1366:768:flags=neighbor:in_color_matrix=bt709:out_color_matrix=bt709:in_range=jpeg:out_range=jpeg" ...

# BT.709 + TV Range(Limited Range)"scale=1366:768:flags=neighbor:in_color_matrix=bt709:out_color_matrix=bt709:in_range=mpeg:out_range=mpeg" ...
			
ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080 -x 1366 -y 768 -vf "scale=1366:768:flags=neighbor:in_color_matrix=bt709:out_color_matrix=bt709:in_range=jpeg:out_range=jpeg" -an input.yuv
			
ffmpeg -i input.png -pix_fmt yuv420p  -vf "scale=in_color_matrix=bt601:out_color_matrix=bt601:in_range=jpeg:out_range=mpeg"  -f rawvideo output.yuv