音视频开发3 视频基础,图片基础

2024-05-13 1437阅读

1.RGB彩色原理

2.YUV

3.像素,分辨率,位深,帧率,码率,Stride跨距

◼ 像素 : 像素是一个图片的基本单位, pix 是英语单词 picture的简写,加上英 语单词“元素element”,就得到了“pixel”,简称 px ,所以“像素”有“图像元素” 之意。 例如 2500 × 2000 的照片就是指横向有 2500 个像素点,竖向有 2000 个像素点,总共是 500 万 个像素,也俗称 500 万像素照片。 ◼分辨率: 是指图像的大小或尺寸。比如 1920x1080 。 常见的分辨率: 360 P (640x360) 、 720P(1280x720) 、 1080P(1920x1080) 、 4K(3840x2160) 、 8K(7680x4320) 常说的 1080 和 720 其实是指垂直像素数,分辨率除去垂直像素,还需要考虑到水平像 素数。按照 16:9 ( 宽 : 高 ) 的比例计算, 720p 的水平像素数为 720 ÷ 9 × 16 = 1280 ,总 计像素为 921600 像素即大约为 92 万像素。 1080p 具有 1920 个水平像素,总计 2073600 像素即约 200 万像素,是 720p 的两倍多。 ◼ 位深: 我们看到的彩色图片,都有三个通道,分别为红 (R) 、绿 (G) 、蓝 (B) 通道。(如果需 要透明度则还有 alpha 分量) 通常每个通道用 8bit 表示, 8bit 能表示 256 种颜色,所以可以组成 256*256*256=16,777,216 = 1677 万种颜色。 这里的 8bit 就是我们讲的位深。 每个通道的位深越大,能够表示的颜色值就越大 ,比如现在高端电视说的 10bit 色 彩,即是每个通道用 10bit 表示,每个通道有 1024 种颜色。 1024*1024*1024 约为 10,7374 万色 =10 亿色,是 8bit 的 64 倍。 常见的颜色还是 8bit 居多。 ◼ 帧率 即 FPS (每秒有多少帧画面),经常玩游戏的同学应该会对这个词很熟悉。我们玩游 戏时, FPS 帧率越高就代表游戏画面越流畅,越低则越卡顿。视频也是如此。 由于视觉图像在视网膜的暂时停留,一般图像帧率能达到 24 帧,我们就认为图像是连续 动态的。 电影帧率一般是 24fps (帧每秒); 电视剧一般是 25fps ; 监控行业常用 25fps ; 音视频通话常用 15fps ; 帧率越高,画面越流畅,需要的设备性能也越高。 ◼ 码率 ◼ 视频文件在单位时间内使用的数据流量。比如 1Mbps 。 ◼大多数情况下码率越高分辨率越高,也就越清晰。但模糊的视频文件大小(码率)也 可以很大,分辨率小的视频文件可能也比分辨率大的视频文件清晰。 ◼对于同一个原始图像源的时候,同样的编码算法,则码率越高,图像的失真就会越小,视频画面就会越清晰 ◼Stride跨距--RGB说明 ◼ Stride :指在内存中每行像素所占的空间。为了实现 内存对齐 每行像素在内存中所占 的空间并不一定是图像的宽度。 ◼ Stride 就是这些扩展内容的名称, Stride 也被称作 Pitch,如果图像的每一行像素末尾拥有扩展内容, Stride 的值一定大于图像的宽度值,就像下图所示: ◼ 比如分辨率 638x480 的 RGB24 图像,我们在内存处理的时候如果要 以 16 字节对齐 , 则 638*3/16=119.625 不能整除,因此不能 16 字节对齐,我们需要在每行尾部填充 6 个字节。就是 (638+2->640), 640*3/16=120 。此时该图片的 stride 为 1920 字节。 Stride 跨距  , 指的是  在 内存中 每行像素 占用的空间  , 由于 系统 对 图像有 跨距对齐 的要求 , 这个  Stride 跨距 可能 大于等于 实际的 图像像素 所占用的 宽度 ;

分辨率为 638 x 480 的 RGB24 格式的图片 , 内存处理时 以 16 字节对齐 ;

RGB24 格式中 R ( 红 ) / G ( 绿 ) / B ( 蓝 ) 每个分量占用 8 位 ( 1 字节 ) , 一个像素总共占用 24 位 ( 3 字节 ) ;

每一行的 实际像素 所占用的内存是 638 * 3 = 1914 字节 ;

需要以 16 字节对齐 , 最后一个字节占用的实际 内存大小 是 1914 % 16 = 10 字节 ,

因此 还需要 额外补充 16 - 10 = 6 字节的填充字节 ,

最终达到 638 * 3 + 6 = 1920 字节

音视频开发3 视频基础,图片基础

4.YUV内存对齐问题 Stride跨距

YUV 跨距对齐 概念

YUV 跨距 ( Stride ) 对齐 是 图像处理 过程中 内存对齐 概念 ;

在 处理 YUV 格式的 图像 时 , 系统 或 硬件设备 要求 , YUV 图像的 每一行 像素 , 在 内存空间 中 需要 进行对齐操作 ;

Stride 跨距对齐 是 为了满足 特定 的 内存访问模式 的要求 , 有些系统要求 进行 跨距对齐 ,

要求 YUV 图像 的 每行内存宽度 必须是 " 内存对齐长度 " 的整数倍 ,

如果 YUV 图像 的 每行内存宽度 不是 " 内存对齐长度 " 的整数倍 , 就需要在 每行 的末尾添加 填充字节 , 以达到 跨距对齐 要求 ;

被填充的字节 , 没有实际意义 , 不包含图像数据 ;

这个 " 内存对齐长度 " 可能是 16 字节 / 32 字节 / 64 字节 等 ;

举例说明:

要求 内存处理 YUV 图像时 , 以 16 字节对齐 , 现在有一张图片 638 x 480 像素的 YUV420P 图片 ;

举例1:YUV420P 数据存储

YUV420P 数据存储 格式如下图所示 , 不同类型的分量放在不同的数组中 ,

音视频开发3 视频基础,图片基础

YUV 4:4:4采样,每一个Y对应一组UV分量。

YUV 4:2:2采样,每两个Y共用一组UV分量。

YUV 4:2:0采样,每四个Y共用一组UV分量

音视频开发3 视频基础,图片基础

Y 灰度值 分量 , 存储在 最上面的数组中 , 在下图的 Y0 ~ Y15 的 灰度值 就是存放在一个数组中 ;

U 色度值 分量 , 存储在 中间数组中 , 在下图的 U0 ~ U3 的 色度值 就是存放在一个数组中 , U 的个数只有 4 个 , 是 Y 分量个数的一半 ;

V 色度值 分量 , 存储在 最下面的数组中 , 在下图的 V0 ~ V3 的 色度值 就是存放在一个数组中 , V 分量 的个数只有 4 个 , 是 Y 分量 个数的一半 ;

上面的 YUV 图像 内存数据 中 ,

Y0 , Y1 , Y4 , Y5 灰度值 使用 U0V0 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

Y2 , Y3 , Y6 , Y7 灰度值 使用 U1V1 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

Y8 , Y9 , Y12 , Y13 灰度值 使用 U2V2 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

Y10 , Y11 , Y14 , Y15 灰度值 使用 U3V3 色度值 , 4 个像素用了 6 字节 , 一个像素 1.5 字节 ;

图片的像素格式是 638 x 480 像素 ;

在上面 YUV420P 格式的图像中 , 每一行 每个像素 只占 1 字节 , 那么 该图像 在内存中 , 每行的长度 是 638 字节 ;

每一行的 实际像素 所占用的内存是 638 字节 ;

需要以 16 字节对齐 , 最后一个字节占用的实际 内存大小 是 638 % 16 = 14 字节 ,

因此 每行 还需要 额外补充 16 - 14 = 2 字节的填充字节 ,

最终达到 638 + 2 = 640 字节 ;

音视频开发3 视频基础,图片基础

举例2:YUV420的内存计算

width * hight =Y(总和)

U = Y / 4   V = Y / 4

所以YUV420 数据在内存中的长度是 width * hight * 3 / 2(即一个YUV是1.5个字节),所以计算采集的数据大小:width * hight * 1.5*frame*time

以720×488大小图象YUV420 planar为例,

其存储格式是: 共大小为720×480×3 × 1.5字节,

分为三个部分:Y,U和V

Y分量:    (720×480)个字节

U(Cb)分量:(720×480 × 1/4)个字节

V(Cr)分量:(720×480 × 1/4)个字节

三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。

即YUV数据的0--720×480字节是Y分量值,

720×480--720×480×5/4字节是U分量

720×480×5/4 --720×480×3/2字节是V分量。

5.YUV数据存储格式

6.画面绿屏

这里涉及到两个知识:一个知识点是解码,当“视频包队列” 被 "视频解码" 的时候,理论上会解码出正常的YUV数据,

音视频开发3 视频基础,图片基础

一个知识点 是 从YUV数据 转码成 RGB。

YUV(256 级别) 可以从8位RGB 直接计算:
Y = 0.299*R + 0.587*G + 0.114*B;
U = -0.169*R -0.331*G + 0.5 *B ;
V = 0.5 *R -0.419*G -0.081*B;
反过来,RGB 也可以直接从YUV (256级别) 计算:
R = Y + 1.402 (Y-128)
G = Y -0.34414 (U-128) -0.71414 (U-128)
B = Y + 1.772 (V-128)

当解码失败的时候,YUV 的三个值都会变成0.

因为解码失败时YUV分量都填为0值,然后根据公式:
R = 1.402 * (-128) = -126.598
G = -0.34414*(-128) -0.71414*(-128) = 44.04992 + 91.40992 = 135.45984 
B = 1.772 * (-128) = -126.228
RGB 值范围为 [0 , 255] ,所以最终的值为: R = 0 G = 135.45984 B = 0 此时只有 G 分量有值所以为 绿色 。

7.H264编码原理

8.H264 I,P,B帧的关系

9.音视频同步:

AUdio Master 同步视频到音频

video master 同步音频到视频

external clock master:同步音频和视频 到外部时钟

一般情况下 audio master > external clock master > video master

10 DTS

decoding time stamp 解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据

一般来讲,我们如果不做算法方面的工作,一般不需要关注DTS

11 PTS

presentation time stamp 显示时间戳,这个时间戳来告诉播放器该在什么时候显示这一帧的数据
主要是关注PTS,这一帧数据可能是音频数据,也可能是视频数据。

图片像素(Pixel)

一张图片是由多少个 像素 构成的。

例如一张图片是由60x50组成的。

音视频开发3 视频基础,图片基础

位深度 bit depth

RGB表示法

红(Red)、绿(Green)、蓝(Blue)

除了24bit,常见的位深度还有:

  • 1bit:2种颜色,黑白两色
  • 3bit:8种颜色,用于大部分早期的电脑显示器,红绿蓝各占1位
  • 8bit:256种颜色,用于最早期的彩色Unix工作站,红色占3位、绿色占3位、蓝色占2位
  • 16bit:红色占5位、蓝色占5位、绿色占6位
  • 24bit:也被称为是:真彩色(True Color),也就是常说的24位真彩

  • 32bit:基于24位,增加8个位的透明通道
    • 可以表示带有透明度的颜色
    • 比如CSS中的rgba(255, 0, 0, 0.5)表示50%透明度的红色

    YUV 表示法:

    Y、U、V三个分量组成,现在通常说的YUV指的是YCbCr。

    • Y:表示亮度(Luminance、Luma),占8bit(1字节)
    • Cb、Cr:表示色度(Chrominance、Chroma)
      • Cb(U):蓝色色度分量,占8bit(1字节)
      • Cr(V):红色色度分量,占8bit(1字节)

      YUV和RGB 比较:体积更小

      YUV的优势是比 RGB拥有更小的体积

      • 如果使用RGB
        • 比如RGB888(R、G、B每个分量都是8bit)
        • 1个像素占用24bit(3字节)
      • 如果使用YUV
        • 1个像素可以减小至平均只占用12bit(1.5字节)
        • 体积为RGB888的一半

        YUV 的采样格式

        采样格式通常用A:B:C的形式来表示,比如4:4:4、4:2:2、4:2:0等,其中我们最需要关注的是4:2:0。

        YUV 的存储格式

        YUV的存储格式可以分为3大类:

        • Planar(平面)
          • Y、U、V分量分开单独存储
          • 名称通常以字母p结尾
        • Semi-Planar(半平面)
          • Y分量单独存储,U、V分量交错存储
          • 名称通常以字母sp结尾
        • Packed(紧凑)
          • 或者叫Interleaved (交错)
          • Y、U、V分量交错存储

          YUV 的常用类型,结合采样格式和存储格式

          4:4:4 表示 :每一个Y ,对应一组UV

          4:2:2 表示:每两个Y,对应一组UV

          4:2:0表示:每4个Y,对应一组UV

          音视频开发3 视频基础,图片基础

          音视频开发3 视频基础,图片基础

          YUV存储格式带来的问题-YUV Stride对齐问题--todo?

          比如分辨率 638x480的YUV420P图像,我们在内存处理的时候如果要以16字节对齐(),则638不能被16整除,我们需要在每行尾部填充2个字节。变成640,此时,该图片的YUV分量中的Y stride为640字节,对应U 和 V 都320字节,

          音视频开发进阶|图像位深、宽高、跨距 - 知乎

          4:4:4

          音视频开发3 视频基础,图片基础

          • I444
            Y Y Y Y
            Y Y Y Y
            U U U U
            U U U U
            V V V V
            V V V V
            
            • YV24
              Y Y Y Y
              Y Y Y Y
              V V V V
              V V V V
              U U U U
              U U U U
              
              • NV24
                Y Y Y Y
                Y Y Y Y
                U V U V U V U V
                U V U V U V U V
                
                • NV42
                  Y Y Y Y
                  Y Y Y Y
                  V U V U V U V U
                  V U V U V U V U
                  

                  4:2:2

                  音视频开发3 视频基础,图片基础

                  • I422
                    Y Y Y Y
                    Y Y Y Y
                    U U
                    U U
                    V V
                    V V
                    
                    • YV16
                      Y Y Y Y
                      Y Y Y Y
                      V V
                      V V
                      U U
                      U U
                      
                      • NV16
                        Y Y Y Y
                        Y Y Y Y
                        U V U V
                        U V U V
                        
                        • NV61
                          Y Y Y Y
                          Y Y Y Y
                          V U V U
                          V U V U
                          
                          • UYVY
                            U Y V Y U Y V Y
                            U Y V Y U Y V Y
                            
                            • YUYV
                              Y U Y V Y U Y V 
                              Y U Y V Y U Y V 
                              
                              • YVYU
                                Y V Y U Y V Y U
                                Y V Y U Y V Y U
                                

                                4:2:0

                                音视频开发3 视频基础,图片基础

                                I420 (YUV420P)

                                • 大多数视频解码器以I420格式输出原始图片
                                   
                                  
                                  Y Y Y Y
                                  Y Y Y Y
                                  U U
                                  V V
                                  

                                  音视频开发3 视频基础,图片基础

                                  • YV12
                                    Y Y Y Y
                                    Y Y Y Y
                                    V V
                                    U U
                                    
                                    • NV12
                                      Y Y Y Y
                                      Y Y Y Y
                                      U V U V
                                      
                                      • NV21
                                        Y Y Y Y
                                        Y Y Y Y
                                        V U V U
                                        

                                        音视频开发3 视频基础,图片基础

                                        总结

                                        图片有2个要素,视频有3个要素。

                                        像素,RGB/YUV类型,fps(每秒播放多少个图片)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]