YUV Format


title: 音视频同步
date: 2024-02-26 21:01:24
comments: true #是否可评论
toc: true #是否显示文章目录
categories: #分类
- 多媒体技术
tags: #标签
- 多媒体技术
summary: YUV Format

YUV Format

简介

国际视频组织定义了多种yuv数据格式。文章中每一个像素都只有8bits去编码Y通道(也叫=Luma= Channel),同时使用8bits编码每一个U / V =chroma=(色度)的下采样样本点。YUV数据格式每个像素点小于24bits,=因为,UV分量数量会小于Y。=

Note

U 等价于 Cb V等价于Cr

YUV下采样

相较于luman(Y)通道,Chroma色度(U/V)通道会有更低的采样率,这并不会损失视觉质量。术语A:B:C描述了UV采样与Y采样的关系。

  • 4:4:4 表示,并不会对chroma通道进行下采样
  • 4:2:2 表示2:1水平下采样,水平每四个Y采样点含有2个U和2个V
  • 4:2:0表示2:1水平下采样,同时伴随2:1垂直下采样。
YUV422是一种常见的像素格式,属于YUV格式类别中的一种。YUV是一种颜色编码系统,常用于视频和图像的处理,它将亮度(Y)和色度(U、V)信息分离,以达到减少数据量的目的。 ### 定义 YUV422格式中,每两个Y(亮度)分量共用一组U(Cb,蓝色色度)和V(Cr,红色色度)分量。也就是说,在水平方向上,每两个像素点共享相同的色度信息,这样可以在一定程度上减少色度数据的存储量,同时保持较好的图像质量。YUV422P是YUV422的一种平面模式,它并非将YUV数据交错存储,而是先存放所有的Y分量,接着存储所有的U(Cb)分量,最后存储所有的V(Cr)分量 [^3]。 ### 应用场景 在本地摄像头设备采集数据时,默认采集回来的数据格式可能就是YUV422。不过,显示数据那边默认通常是YUV420格式。如果要直接使用YUV422格式进行显示,则需要更改绘制代码,并且存储方面也需要做特殊处理。因此,有时会考虑从源头进行格式转换,将YUV422转换为YUV420格式。此外,YUV422格式在视频采集、处理和传输等领域也较为常见,它在保证一定图像质量的前提下,能够相对减少数据量,提高处理和传输效率 [^1]。 ### 处理方法 在对YUV422格式的数据进行处理时,若需要将其转换为其他格式,例如YUV420格式,可以使用像sws_scale这样的工具。sws_scale是FFmpeg库中的一个函数,它可以方便地实现各种格式之间的转换。由于FFmpeg采集时通常需要将非YUV420格式的数据转换为YUV420格式,所以使用sws_scale来处理YUV422到YUV420的转换是比较合适的 [^1]。 ### 示例代码(使用FFmpeg的sws_scale进行转换) ```c #include <libswscale/swscale.h> #include <libavutil/imgutils.h> // 初始化SwsContext SwsContext *sws_ctx = sws_getContext(src_width, src_height, AV_PIX_FMT_YUV422P, dst_width, dst_height, AV_PIX_FMT_YUV420P, SWS_BILINEAR, NULL, NULL, NULL); // 分配源和目标图像数据的内存 uint8_t *src_data[4]; int src_linesize[4]; av_image_alloc(src_data, src_linesize, src_width, src_height, AV_PIX_FMT_YUV422P, 1); uint8_t *dst_data[4]; int dst_linesize[4]; av_image_alloc(dst_data, dst_linesize, dst_width, dst_height, AV_PIX_FMT_YUV420P, 1); // 进行格式转换 sws_scale(sws_ctx, (const uint8_t * const *)src_data, src_linesize, 0, src_height, dst_data, dst_linesize); // 释放资源 sws_freeContext(sws_ctx); av_freep(&src_data[0]); av_freep(&dst_data[0]); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值