图像 / 视频

色彩采样(Chroma Sampling

图像 / 视频_第1张图片

色彩采样(Chroma Sampling)是一种对图片进行压缩的方法。

图片的信息可以分为亮度信息(luminance information)和色彩信息(color information)。亮度信息传达了图片的大部分信息,一部黑白电影相较于彩色电影而言并不会丢失多少细节。色彩信息虽然重要,但是对于人们对于图片的认知而言,并不会有决定性的影响。人的视觉对亮度更加敏感,而对于色彩相对而言没有那么敏感。色彩采样法可以在保留亮度信息的基础上减少色彩的信息,以此来起到压缩图片尺寸的效果。

下面的三张图展示了不同的采样方法所带来的效果。采样由三个参数的比值构成:J:a:b。其中J表示区域的宽度,通常为4。a表示在第一行进行色彩抽样的数目,b表示在第二行进行色彩抽样的数目。

图像 / 视频_第2张图片

 

上图展示了4:4:4的抽样效果。由于宽度为4,因此参数J为4。第一行采样数为4个,因此参数a为4。第二行采样数为4个,因此参数b为4。

 

图像 / 视频_第3张图片

 

上图展示了4:2:2的抽样效果。由于宽度为4,因此参数J为4。第一行采样数为2个,因此参数a为2。第二行采样数为2个,因此参数b为2。

 

图像 / 视频_第4张图片

 

上图展示了4:2:0的抽样效果。由于宽度为4,因此参数J为4。第一行采样数为2个,因此参数a为2。第二行直接使用了第一行采样的结果,因此没有进行任何采样,参数b为0。

  首先要说明RGB、YUV和YCbCr都是人为规定的彩色模型或颜色空间(有时也叫彩色系统或彩色空间)。它的用途是在某些标准下用通常可接受的方式对彩色加以描述。本质上,彩色模型是坐标系统和子空间的阐述。

【1】RGB

   RGB(红绿蓝)是依据人眼识别的颜色定义出的空间,可表示大部分颜色。但在科学研究一般不采用RGB颜色空间,因为它的细节难以进行数字化的调整。它将色调,亮度,饱和度三个量放在一起表示,很难分开。它是最通用的面向硬件的彩色模型。该模型用于彩色监视器和一大类彩色视频摄像。

【2】YUV

    在 YUV空间中,每一个颜色有一个亮度信号 Y,和两个色度信号 U 和V。亮度信号是强度的感觉,它和色度信号断开,这样的话强度就可以在不影响颜色的情况下改变。

    YUV使用RGB的信息,但它从全彩色图像中产生一个黑白图像,然后提取出三个主要的颜色变成两个额外的信号来描述颜色。把这三个信号组合回来就可以产生一个全彩色图像。

    Y 通道描述Luma 信号,它与亮度信号有一点点不同,值的范围介于亮和暗之间。 Luma 是黑白电视可以看到的信号。U (Cb) 和 V (Cr)通道从红 (U) 和蓝 (V) 中提取亮度值来减少颜色信息量。这些值可以从新组合来决定红,绿和蓝的混合信号。

【3】YCbCr

    YCbCr 是在世界数字组织视频标准研制过程中作为ITU - R BT1601 建议的一部分,其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致, Cb , Cr 同样都指色彩, 只是在表示方法上不同而已。在YUV家族中, YCbCr 是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。一般人们所讲的YUV大多是指YCbCr。

YUV(YCbCr)采样格式:

   主要的采样格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。其中YCbCr4:1:1 比较常用,其含义为:每个点保存一个 8bit 的亮度值(也就是Y值), 每 2 x 2 个点保存一个 Cr和Cb值,图像在肉眼中的感觉不会起太大的变化。所以, 原来用 RGB(R,G,B 都是 8bit unsigned) 模型, 每个点需要8x3=24 bits, 而现在仅需要 8+(8/4)+(8/4)=12bits,平均每个点占12bits。这样就把图像的数据压缩了一半。

上边仅给出了理论上的示例,在实际数据存储中是有可能是不同的,下面给出几种具体的存储形式:

(1) YUV 4:4:4

  YUV三个信道的抽样率相同,因此在生成的图像里,每个象素的三个分量信息完整(每个分量通常8比特),经过8比特量化之后,未经压缩的每个像素占用3个字节。

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3V3]

  存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

(2) YUV 4:2:2

  每个色差信道的抽样率是亮度信道的一半,所以水平方向的色度抽样率只是4:4:4的一半。对非压缩的8比特量化的图像来说,每个由两个水平方向相邻的像素组成的宏像素需要占用4字节内存(例如下面映射出的前两个像素点只需要Y0、Y1、U0、V1四个字节)。

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3V3]

  存放的码流为: Y0 U0 Y1 V1 Y2 U2 Y3 V3   有的描述为 Y0 U0 Y1 V0 Y2 U2 Y3 V2

  映射出像素点为:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2V3]  有的描述为[Y0 U0 V0] [Y1 U0 V0] [Y2 U2 V2] [Y3 U2V2] 

(3) YUV 4:1:1

  4:1:1的色度抽样,是在水平方向上对色度进行4:1抽样。对于低端用户和消费类产品这仍然是可以接受的。对非压缩的8比特量化的视频来说,每个由4个水平方向相邻的像素组成的宏像素需要占用6字节内存

  下面的四个像素为: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3V3]

  存放的码流为: Y0 U0 Y1 Y2 V2 Y3  存在同上的另种描述

  映射出像素点为:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0V2]  存在同上的另种描述

(4)YUV4:2:0

  4:2:0并不意味着只有Y,Cb而没有Cr分量。它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推。对每个色度分量来说,水平方向和竖直方向的抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特量化的视频来说,每个由2x2个2行2列相邻的像素组成的宏像素需要占用6字节内存。

下面八个像素为:

    [Y0 U0 V0][Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

 [Y5 U5 V5] [Y6 U6 V6] [Y7U7 V7] [Y8 U8 V8]

存放的码流为:

    Y0 U0 Y1 Y2 U2 Y3

 Y5 V5 Y6 Y7 V7 Y8

映射出的像素点为:

    [Y0 U0 V5][Y1 U0 V5] [Y2 U2 V7] [Y3 U2 V7]

    [Y5 U0 V5][Y6 U0 V5] [Y7U2 V7] [Y8 U2 V7]

YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。

 YUV采样的进一步说明

YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。

    与我们熟知的RGB类似,YUV也是一种颜色编码方法,主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。并且,YUV不像RGB那样要求三个独立的视频信号同时传输,所以用YUV方式传送占用极少的频宽。

YUV码流的存储格式其实与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,关于其详细原理,可以通过网上其它文章了解,这里我想强调的是如何根据其采样格式来从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。

    用三个图来直观地表示采集的方式吧,以黑点表示采样该像素点的Y分量,以空心圆圈表示采用该像素点的UV分量。

 

图像 / 视频_第5张图片

先记住下面这段话,以后提取每个像素的YUV分量会用到。

  1. YUV 4:4:4采样,每一个Y对应一组UV分量。
  2. YUV 4:2:2采样,每两个Y共用一组UV分量。 
  3. YUV 4:2:0采样,每四个Y共用一组UV分量。 

2.  存储方式

    下面我用图的形式给出常见的YUV码流的存储方式,并在存储方式后面附有取样每个像素点的YUV数据的方法,其中,Cb、Cr的含义等同于U、V。

(1) YUVY 格式 (属于YUV422)

 

YUYV为YUV422采样的存储格式中的一种,相邻的两个Y共用其相邻的两个Cb、Cr,分析,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00,其他的像素点的YUV取值依次类推。(2) UYVY 格式 (属于YUV422)

 

UYVY格式也是YUV422采样的存储格式中的一种,只不过与YUYV不同的是UV的排列顺序不一样而已,还原其每个像素点的YUV值的方法与上面一样。

(3) YUV422P(属于YUV422)

 YUV422P也属于YUV422的一种,它是一种Plane模式,即平面模式,并不是将YUV数据交错存储,而是先存放所有的Y分量,然后存储所有的U(Cb)分量,最后存储所有的V(Cr)分量,如上图所示。其每一个像素点的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即两个Y共用一个UV。比如,对于像素点Y'00、Y'01 而言,其Cb、Cr的值均为 Cb00、Cr00。

(4)YV12,YU12格式(属于YUV420)

 

YU12和YV12属于YUV420格式,也是一种Plane模式,将Y、U、V分量分别打包,依次存储。其每一个像素点的YUV数据提取遵循YUV420格式的提取方式,即4个Y分量共用一组UV。注意,上图中,Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00,其他依次类推。

(5)NV12、NV21(属于YUV420)

 

NV12和NV21属于YUV420格式,是一种two-plane模式,即Y和UV分为两个Plane,但是UV(CbCr)为交错存储,而不是分为三个plane。其提取方式与上一种类似,即Y'00、Y'01、Y'10、Y'11共用Cr00、Cb00

YV12和I420的区别        一般来说,直接采集到的视频数据是RGB24的格式,RGB24一帧的大小size=width×heigth×3 Bit,RGB32的size=width×heigth×4,如果是I420(即YUV标准格式4:2:0)的数据量是 size=width×heigth×1.5 Bit。       在采集到RGB24数据后,需要对这个格式的数据进行第一次压缩。即将图像的颜色空间由RGB2YUV。因为,X264在进行编码的时候需要标准的YUV(4:2:0)。但是这里需要注意的是,虽然YV12也是(4:2:0),但是YV12和I420的却是不同的,在存储空间上面有些区别。如下: YV12 : 亮度(行×列) + U(行×列/4) + V(行×列/4)

I420 : 亮度(行×列) + V(行×列/4) + U(行×列/4)

可以看出,YV12和I420基本上是一样的,就是UV的顺序不同。

继续我们的话题,经过第一次数据压缩后RGB24->YUV(I420)。这样,数据量将减少一半,为什么呢?呵呵,这个就太基础了,我就不多写了。同样,如果是RGB24->YUV(YV12),也是减少一半。但是,虽然都是一半,如果是YV12的话效果就有很大损失。然后,经过X264编码后,数据量将大大减少。将编码后的数据打包,通过RTP实时传送。到达目的地后,将数据取出,进行解码。完成解码后,数据仍然是YUV格式的,所以,还需要一次转换,这样windows的驱动才可以处理,就是YUV2RGB24。

YUY2  是 4:2:2  [Y0 U0 Y1 V0]

yuv420p 和 YUV420的区别 在存储格式上有区别

yuv420p:yyyyyyyy uuuuuuuu vvvvv yuv420: yuv yuv yuv

YUV420P,Y,U,V三个分量都是平面格式,分为I420和YV12。I420格式和YV12格式的不同处在U平面和V平面的位置不同。在I420格式中,U平面紧跟在Y平面之后,然后才是V平面(即:YUV);但YV12则是相反(即:YVU)。
YUV420SP, Y分量平面格式,UV打包格式, 即NV12。 NV12与NV21类似,U 和 V 交错排列,不同在于UV顺序。
I420: YYYYYYYY UU VV    =>YUV420P
YV12: YYYYYYYY VV UU    =>YUV420P
NV12: YYYYYYYY UVUV     =>YUV420SP

 

采样比

  • 人类视觉系统对亮度(luma)的敏感度高于对色度(chroma)的敏感度,因此可以对色度数据进行下采样;
  • 采样比通常表示为 J:a:b,以表示一个宽为 J 像素、高为 2 像素的采样区域内 Y Cb Cr(Y U V)的采样比:
    • J 表示采样区域的宽度,通常为 4;
    • a 表示第一行色度采样数;
    • b 表示第二行色度采样与第一行色度采样的不同样点数;

图像 / 视频_第6张图片

例如上图:

  • 4:1:1:宽度 J 为 4,第一行只有一个样点(一种颜色),所以 a 为 1,第二行和第一行不同的样点只有一个,所以 b 为 1,所以为 4:1:1
  • 4:2:0:宽度 J 为 4,第一行有两个样点,所以 a 为 2,第二行和第一行样点完全相同,所以 b 为 0,所以为 4:2:0

这个比例值并非 Y Cb Cr 分量个数的直接比例。对亮度来说,一个样点由一个 Y 构成,而对色度来说,一个样点由两个值构成:Cb 和 Cr。以 4:2:0 为例,在 4x2 的采样区域内,有 8 个亮度样点,2 个色度样点(在上图中可以看成左右各一个),所以有 8 个 Y,2 个 Cb,2 个 Cr。

a 和 b 的取值并非可以随意组合,比如 a 为 2 时,表示第一行有两个样点,如果 b 为 1,那就是说第二行样点有一个和第一行不同,但到底哪一个样点和第一行不同,无法确定,所以这种组合就被禁止了。实际上常见的可取组合也就是上图中列出的五种。

planar, packed 和 semi planar

planar, packed 和 semi planar 是描述分量如何存储的:

  • planar: 有时也称 triplanar,有三个 plane,每种分量连续存储,先存储所有的 Y 分量,再存储所有的 Cb 分量,最后存储所有的 Cr 分量(也可以 Cr 在前,Cb 在后);
  • packed: 只有一个 plane,n 个样点的 Y Cb Cr 分量一起存储,接着存储下 n 个样点的分量;n 的取值、其中三种分量的存储方式,也有多种组合;
  • semi planar: 有两个 plane,先存储所有的 Y 分量,后面 Cb 和 Cr 分量一起存储;

stride 或 pitch

YUV 数据在内存中存储时,每行像素的数据后面可能还有填充字节,这主要是因为有些系统/环境/操作对内存的字节对齐有要求,比如 64 字节对齐,那么宽度为 720 像素的图像,一行就不满足 64 对齐的要求,那就要填充到 768 像素。存储一行像素所需的字节数,就叫 stride,也叫 pitch。比如这里举的例子,宽为 720,stride 或 pitch 就是 64。

图像的高度通常没有类似的情况,因为图像处理通常都是逐行的,所以才会对一行的宽度有要求,而对于多少行则没有要求。

I420

I420 的采样比是 4:2:0,它是 planar 存储方式,分量存储顺序依次是 Y, Cb, Cr,例如下图表示了宽为 6 像素、高为 4 像素图像的三种分量存储方式:

图像 / 视频_第7张图片

最好忽略那几个箭头,采样区域通常都是 4x2,而非 2x2

NV12

安卓的 MediaCodec 对于 YUV 的输入格式,COLOR_FormatYUV420SemiPlanar 支持得最好,而这种格式就是 NV12 格式。

NV12 的采样比是 4:2:0,它是 semi planar 存储方式,先存储 Y 分量,后面 Cb 和 Cr 分量一起存储,Cb 在前,Cr 在后:

图像 / 视频_第8张图片

NV21

安卓的 Camera API 回调的 YUV 数据,默认就是 NV21 格式。

NV21 和 NV12 类似,采样比是 4:2:0,也是 semi planar 存储方式,先存储 Y 分量,后面 Cb 和 Cr 分量一起存储,只不过 Cr 在前,Cb 在后:

图像 / 视频_第9张图片

注意:有个工具网站 rawpixels.net,它的 Predefined format 应该是把 NV12 和 NV21 搞反了,它的 NV12 是 V 在前,NV21 是 U 在前,实际上应该是 NV12 U 在前,NV21 V 在前,因此使用这个网站时,这两种格式应该互换一下。

其他格式

YUV 的格式太多,这里就不一一介绍了,把握上面介绍的两个要点即可:采样比,存储方式。

可以参考下 fourcc 的这个网页

参考文章

  • Chroma subsampling
  • YUV
  • Image Stride

 

SRV RTV DSV UAV

Textures can be bound to the graphics pipeline as shader resource (SRV), render target (RTV), depth-stencil (DSV) or unordered access view (UAV)

CQP,CRF,CQF,ABR,CBR,VBV,

编码器中有一个码率控制模块,通过选择一系列编码参数,来控制编码视频的码率满足需要,并且使编码失真尽可能小。码率控制严格上不属于视频编码标准,属于率失真优化

码率控制的几种模式[1]:

  1. CQP(Constant QP):恒定QP(Quantization Parameter)。
  2. CRF(Constant Rate Factor)/CQF(Constant Quality Factor):恒定质量因子。
  3. ABR(Average Bitrate):指定平均码率。
  4. CBR(Constant Bitrate):恒定码率,相对的是可变码率(VBR, Variable Bitrate)。
  5. VBV(Video Buffering Verifier):视频缓冲校验。

3. CQP(Constant QP)

恒定QP(Quantization Parameter)。

  • 瞬时码率会随场景复杂度波动。
  • x264和x265中支持CQP模式,libvpx不支持。
  • H.264中QP范围是[0, 51]。QP值越大表示越大的量化步长,编码视频的质量越低。QP为0表示进行无损编码。
  • 使用FFmpeg指定QP的示例如下所示。
ffmpeg -s 1280x720 -i  -c:v libx264 -qp 23 
ffmpeg -s 1280x720 -i  -c:v libx265 -x265-params qp=23 
  • 不推荐使用这个模式,除非你明确知道这个模式的原理而有特定的用途。

4. CRF(Constant Rate Factor)/CQF(Constant Quality Factor)

恒定质量因子。

  • 与恒定QP类似,但追求主观感知到的质量恒定,瞬时码率也会随场景复杂度波动。
  • 对于快速运动或细节丰富的场景会适当增大量化失真(因为人眼不敏感),反之对于静止或平坦区域则减少量化失真。
  • CRF是x264和x265的默认码率控制方式,也可用于libvpx。
  • CRF值越大视频压缩率越高,但视频质量越低,各codec的CRF取值范围、默认值和建议值见下表。
codec 取值范围 默认值 建议值
x264 [0, 51] 23 [18, 28]
x265 [0, 51] 28 ?
VP9 [0, 63] - [15, 35]
  • 使用FFmpeg中指定x264编码的crf值的示例如下。
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
  • 如果你不确定要使用什么CRF,从默认值开始,并根据对输出的主观印象进行更改。如果质量没有足够好则较低的CRF。如果文件太大了则选择更高的CRF。更改±6会导致码率大小的一半/两倍左右的变化,±1会导致码率10%左右的变化。[2]

5. ABR(Average Bitrate)

指定平均码率。

  • 使用FFmpeg指定ABR的示例如下所示。
ffmpeg -s 1280x720 -i  -c:v libx264 -b:v 1M 
ffmpeg -s 1280x720 -i  -c:v libx265 -b:v 1M 
ffmpeg -s 1280x720 -i  -c:v libvpx-vp9 -b:v 1M 
  • 避免使用这种模式, x264的一位主要开发者说你应该永远不要使用它,由于编码器无法提前知道要编码视频的情况,它将不得不猜测如何达到比特率。

2-Pass ABR

  • 允许编码器执行两次(或更多次)使得它可以估计未来的情况。第一遍计算编码的成本,在第二遍中更有效地使用可用比特。这确保了在特定比特率约束下输出质量最佳。
  • 对于x264,使用FFmpeg编码的示例:
ffmpeg -i  -c:v libx264 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i  -c:v libx264 -b:v 1M -pass 2 .mp4
  • 对于x265,使用FFmpeg编码的示例:
ffmpeg -i  -c:v libx264 -b:v 1M -x265-params pass=1 -f null /dev/null
ffmpeg -i  -c:v libx264 -b:v 1M -x265-params pass=2 .mp4
  • 对于VP9,使用FFmpeg编码的示例:
ffmpeg -i  -c:v libvpx-vp9 -b:v 1M -pass 1 -f null /dev/null
ffmpeg -i  -c:v libvpx-vp9 -b:v 1M -pass 2 .webm
  • 这是为流式传输编码文件的最简单方法。有两点需要注意:
    1. 不知道最终的质量是什么,因此你必须做一些测试,以确保指定的码率实际上足够高,可以用于某些复杂的内容。
    2. 此模式的另一个缺点是可能存在比特率的本地峰值,这意味着可能发送超过客户端可以接收的峰值。

6. CBR(Constant Bitrate)

前面几个模式都属于可变码率VBR(Variable Bitrate),瞬时码率在波动。恒定码率与之相对,在更小的时间窗口保持码率的波动更小。

  • 可以通过启用nal-hrd选项强制编码器始终使用某个比特率[1]。输出文件需要是.ts(MPEG-2 TS),因为MP4不支持NAL填充。注意,如果视频源是易于编码的,此模式将浪费带宽,但它确保比特率在整个流中保持不变
ffmpeg -i  -c:v libx264 -x264-params "nal-hrd=cbr:force-cfr=1" -b:v 1M -minrate 1M -maxrate 1M -bufsize 2M 
  • 对于VP9,使用FFmpeg通过下面的命令控制:
ffmpeg -i  -c:v libvpx-vp9 -b:v 1M -maxrate 1M -minrate 1M 

7. VBV(Video Buffering Verifier)

视频缓冲校验提供了一种方法,以保证码率被限制在一定的最大值。

  • 适用场景:带宽约束下的流媒体; 直播(指定CRF,1-pass); VoD流媒体(目标比特率,2-pass)。
  • 可用于2-pass VBR(在两遍中使用它)。注意:使用1-pass方法也可以 - 根据x264开发人员 - 通常与2-pass一样好,但压缩效率低一些。
  • 可用于CRF编码,也称为“capped CRF”。
  • 使用-maxrate-bufsize选项打开VBV以设置最大比特率和预期的客户端缓冲区大小:
ffmpeg -i  -c:v libx264 -crf 23 -maxrate 1M -bufsize 2M 
ffmpeg -i  -c:v libx265 -crf 28 -x265-params vbv-maxrate=1000:vbv-bufsize=2000 
  • VP9有一个类似的模式,不叫VBV,但背后是相同的思想:
ffmpeg -i  -c:v libvpx-vp9 -crf 30 -b:v 2M 
  • 使用受约束的ABR-VBV编码的方法:
ffmpeg -i  -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i  -c:v libx264 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 
  • 对于x265:
ffmpeg -i  -c:v libx265 -b:v 1M -x265-params pass=1:vbv-maxrate=1000:vbv-bufsize=2000 -f null /dev/null
ffmpeg -i  -c:v libx265 -b:v 1M -x265-params pass=2:vbv-maxrate=1000:vbv-bufsize=2000 
  • 对于VP9:
ffmpeg -i  -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 1 -f null /dev/null
ffmpeg -i  -c:v libvpx-vp9 -b:v 1M -maxrate 1M -bufsize 2M -pass 2 

如何设置bufsize?

  • 这取决于码率需要有多大的可变性。
  • 一个好的默认设置:缓冲区大小是最大速率的两倍,但建议可能会因流设置而异。
  • 如果客户端缓冲区较小(只需几秒钟),bufsize应该与maxrate大小相同。

如果要限制流的码率,尝试将bufsize设置为最大速率的一半或更低。

https://blog.csdn.net/idoit0204/article/details/77865975

 

BLA、CRA、IDR、RAP

BLA、CRA、IDR是文献中提到过的三种随机接入点(RAP),在文献中的解释的确不是很容易理解。更关键的是,与这三个名词相应的还有GOP,open/closed GOP, RASL,RADL等等概念,环环相扣,一个不理解,剩下的也很难弄懂,下面我们一个一个解释,很多也是我自己刚刚想到的,不一定正确全面,欢迎批评。

(1)关于GOP。这是图像组(Group of Pictures)的意思,表示编码的视频序列分成了一组一组的有序的帧的集合进行编码。每个GOP一定是以一个I帧开始的,但是却不一定指代的是两个I帧之间的距离。因为一个GOP内可能包含几个I帧,只有第一个I帧(也就是第一帧)才是关键帧。在程序cfg中,GOP的长度和两个I帧的距离也是两个不同参数指定的(如GOP Size和IntraPeriod或者类似的参数)。所以,两个I帧的间距不可能大于GOP的长度,一般情况是更小的。

(2)关于IDR。这个词儿的全称是Instantaneous Decoding Refresh,是在H.264中定义的结构。在H.264中,IDR帧一定是I帧,而且一定是GOP的开始,也是H.264 GOP的关键帧。但是反过来却不成立,I帧不一定是IDR帧。GOP的长度不是定死不变的,在H.264的编码器中,如果判定场景发生变化,那么即使不到原定GOP的末尾,也会在这个位置加入一个IDR,作为新一个GOP的开始。此时这个GOP的长度就被缩小了。

(3)闭合GOP和开放GOP(closed GOP/open GOP),CRA。闭合GOP是H.264中GOP的格式。在H.264的GOP中,所有的GOP都是独立解码的,与其他GOP无关,即它们都是“封闭”的。但是在HEVC中,GOP的结构发生了变化,采用了“开放”的结构,在解码过程过可能会参考其他GOP的数据。这时,一个GOP的起始帧命名为CRA(clean random access),同样采用帧内编码,但是这个GOP内的帧间编码帧可以越过CRA参考前一个GOP的数据,这便是GOP的open。

(4)关于BLA。个人感觉BLA只是CRA在视频流切换情况下的一种特例。视频流在某个RAP上要求切换到另一个视频流继续解码,则直接将该CRA同另一个视频流中的接入CRA连接,后者便是BLA。由于BLA之前解码到缓存的视频流与当前视频流无关,因此其特性类似于直接从该点进行随机存取后的CRA。

(5)RASL和RADL。这是两种GOP间的图像类型。如果解码器从某个CRA随机接入,则按照显示顺序的后面几帧数据由于缺少参考帧而不能解码,这些图像将被解码器抛弃,即skip leading。而对于没有从当前CRA接入的数据,这些图像可以被正常解码显示,因此称为decodable leading。由于这些数据是有可能舍弃的,因此其他图像(trailing pictures)不能参考这些数据,否则万一这些图像被舍弃,将会有更多的图像受其影响而不能正常解码。

下面举个例子:

假设视频序列的显示顺序为①,这是一个完整的GOP,解码顺序为②

①I B B P B B P B B P

②I P B B P B B P B B

在H.264中,第一个I帧为IDR,GOP为闭合结构,因此两个GOP组成视频的结构为

I B B P B B P B B P I B B P B B P B B P(显示顺序)

I P B B P B B P B B I P B B P B B P B B(解码顺序)

而在HEVC中,两个I帧为CRA,GOP为开放结构,因此GOP的结构为:

I B B P B B P B B P B B I B B P B B P B (显示顺序)

I P B B P B B P B B I B B P B B P B B...(解码顺序)

两个红色的B帧表示的是按照解码顺序在CRA之后,该GOP内参考的前一个GOP进行编码的图像。这样便很容易得知,如果选择在第二个CRA进行随机接入,这两个红色的B帧将会由于没有参考帧无法解码而被舍弃。这两个红色的B帧即RASP。如果没有选择这个CRA进行随机接入,这两个红色B帧将可以顺利解码,即成为RADP。

对于BLA,情况也是类似的。由于出现码流拼接,第二段码流的CRA之后的B也会因为没有参考帧无法解码而丢弃。很容易理解,此时缓存中的参考帧数据还来自上一段码流,跟当前码流没关系,当然不能用作B的参考了。

之余HEVC这么设计的目的,我觉得应该是为了编码效率考虑的。因为B帧的压缩比相对是最高的,引入这种设计可以在不影响随机存取性能的前提下,尽可能增大B帧的比重,提高整体压缩编码的性能。

 

BRISK特征

 BRISK算法是2011年ICCV上《BRISK:Binary Robust Invariant Scalable Keypoints》文章中,提出来的一种特征提取算法,也是一种二进制的特征描述算子。

它具有较好的旋转不变性、尺度不变性,较好的鲁棒性等。

在图像配准应用中,速度比较:SIFT

在对有较大模糊的图像配准时,BRISK算法在其中表现最为出色。

AV1视频编解码器核心编码工具概述

一、介绍

在过去的十年里,基于网络的视频应用变得非常普遍,现代设备和网络基础设施推动了高分辨率、高质量内容消费的快速增长。因此,占主导地位的带宽消费者,如视频点播(VoD)、实时流媒体和会话视频,以及新兴的新应用,包括虚拟现实和云游戏,这些都非常依赖于高分辨率和低延迟,对传输基础设施提出了严峻的挑战,因此对高效视频压缩技术的需求更加强烈。

二、AV1编码工具

1.编码块划分

VP9使用从64×64级别到4×4级别的四种划分方式,对于8×8以下的块有额外的限制,在8x8块中,所有子块都应保存相同的参考帧,如图1上半部分所示,以确保色度块至少可以用4×4块单元处理。注意,图中标有为R的分块是递归的,因此R分块可以重复再划分,直到达到最低的4×4级。

AV1将最大编码块单元增加到128×128,并扩展分区树以支持10种可能的结果,以进一步包括4:1/1:4矩形编码块尺寸。与VP9相似,仅允许使用方形块进行进一步细分。此外,AV1为8x8以下的块增加了更大的灵活性,使每个编码块都可以在行内/帧内模式和参考帧选择之间进行切换。为了支持这种灵活性,它允许对色度分量进行2×2的帧间预测,同时保持最小的变换大小为4×4。

图像 / 视频_第10张图片

2.帧内预测

VP9支持10种帧内预测模式,包括8种方向模式,分别对应45到207度的角度模式,以及两种非定向预测器:DC和true motion(TM)模式。AV1,潜在的帧内编码进一步探索了不同的方法:方向预测的粒度进一步升级,而非方向性的预测,纳入了梯度和相关性,亮度的一致性和色度信号也得到充分利用,并开发出针对人造视频内容特殊优化的工具。

1) 帧内预测方向的增强

以利用方向纹理中更多种类的空间冗余。在AV1中,对于大于8 × 8的块,方向帧内模式被扩展到具有更精细粒度的角度集。最初的8个角度是标称角度,在此基础上引入3度步长的细微角度变化,即预测角度由标称内部角度加上角度增量表示,角度增量是步长的-3 ~ 3倍。为了通过一般方式在AV1中实现方向预测模式,48种扩展模式由统一的方向预测器实现,该方向预测器将每个像素链接到边缘中的参考子像素位置,并通过2抽头双线性滤波器插值参考像素。AV1总共支持56种方向帧内模式。

AV1中方向帧内预测的另一个增强是,在参考像素值用于预测目标块之前,对其应用低通滤波器。滤波器强度是基于预测角度和块大小预先定义的。

2)无方向平滑帧内预测器

VP9有两种非定向帧内预测模式:DC_PRED和TM_PRED。AV1在此基础上增加了三种新的预测模式: SMOOTH_PRED、SMOOTH_V_PRED和SMOOTH_H_PRED。第四种新的预测模式PAETH_PRED [19]是现有的TM_PRED模式。新模式的工作原理如下:

  • SMOOTH_PRED:用于预测具有平滑梯度的块。它的工作原理如下:用当前块第一行的最后一个像素的值来估计最右列上的像素,使用左列中的最后一个像素来估计当前块最后一行中的像素。然后,根据像素与预测像素的距离,通过垂直和水平方向上的二次插值的平均值来计算其余像素。
  • SMOOTH_V_PRED:类似于SMOOTH_PRED,但只在垂直方向使用二次插值。
  • SMOOTH_H_PRED:类似于SMOOTH_PRED,但只在水平方向使用二次插值。
  • PAETH_PRED: Calculate base = left + top − top_left. 根据哪个像素最接近“base”,预测这个像素为左、上或左上像素。其思想是:(I)如果估计的梯度在水平方向上更大,那么我们从“top”预测像素;(ii)如果它在垂直方向上较大,那么我们从“left”预测像素;否则(iii)如果两者相同,我们从“top-left”预测像素。

3)基于递归滤波的帧内预测器

为了捕捉边缘具有参考的衰减空间相关性,通过将块视为二维不可分离马尔可夫模型,为亮度块设计了FILTER _ INTRA模式。为AV1预先设计了五种滤波器帧内模式,每种模式由一组八个7-tap滤波器表示,反映了与补片相邻的4 × 2 p像素之间的相关性(例如,图2中蓝色补片的P0 P6)。一个帧内块可以选择一个滤波器帧内模式,并以4 × 2 的补丁的进行批量预测。通过所选的一组7抽头滤波器对8个像素位置的相邻像素进行不同的加权,来预测补丁块。对于那些没有完全附着到块边界上的参考的4 × 2单元,例如图2中的绿色块,将直接相邻的预测像素用作参考,这意味着在4 × 2补丁块之间递归地计算预测,以便合并更多较远位置上的边缘像素。

图像 / 视频_第11张图片

4)从亮度预测色度

Chroma from Luma(CfL)是仅用于色度的帧内预测器,通过以重建后亮度像素的线性函数建模得到色度像素。预测的色度像素是通过将DC预测加到缩放的交流贡献上而获得的。DC预测是使用DC帧内预测模式通过当前块相邻的重建色度像素计算的。在零均值二次采样的重合重建亮度像素中,通过比特流中信号表示的比例因子。二次抽样步骤和平均减法相结合,以减少误差。为每个色度分量发信号通知缩放因子,但是它们是联合编码的。信号比例因子降低了解码器的复杂性,并产生更精确的研发优化预测。更多信息请参考图3和[20]。

图像 / 视频_第12张图片

5)调色板作为预测器

有时,尤其是对于像截屏和游戏这样的人工视频,块可以用少量独特的颜色来近似。因此,AV1将调色板模式引入帧内编码器,作为通用的额外编码工具。块的每个平面的调色板预测器由(I)具有2-8种颜色的调色板和(ii)块中所有像素的颜色索引来指定。基色的数量决定了保真度和紧凑度之间的权衡。通过参考相邻块的基色,在比特流中传输块的基色。然后,不存在于相邻块调色板中的基色被增量编码。颜色索引是使用基于邻域的上下文逐像素熵编码的。亮度和色度通道可以决定是否独立使用调色板模式。对于亮度通道,调色板中的每个条目都是一个标量值;对于色度通道,中的每个条目都是一个二维元组。在用调色板模式建立块的预测之后,变换编码和量化被应用于残差块,就像其他帧内预测模式一样。

6)帧内块内复制

AV1允许其帧内编码器参考同一帧中先前重建的块,其方式类似于帧间编码器引用前一帧中块的方式。这对于通常包含重复纹理的屏幕内容视频非常有用。具体来说,一种名为IntraBC的新预测模式被引入,它将在当前帧中拷贝一个重建的块作为预测。参考块的位置由位移矢量指定,其方式类似于运动补偿中的运动矢量压缩。位移矢量以亮度平面的整像素为单位,可以指相应色度平面上的半像素位置,其中双线性滤波用于子像素插值。

IntraBC模式仅用于关键帧或者仅帧内编码的帧。它可以通过帧级标志打开和关闭。IntraBC模式不能引用当前Tile之外的像素。为了便于硬件实现,对参考区域有一些额外的限制。例如,当前superblock和IntraBC可能引用的最新superblock之间有256个水平像素的延迟。另一个限制是当IntraBC在当前帧打开时,必须关闭包括去块滤波器、环路恢复滤波器和CDEF滤波器在内的环路滤波器。尽管有所有这些限制,IntraBC模式仍然为屏幕内容视频带来了显著的压缩改进。

3.帧间预测

运动补偿是视频编码中必不可少的模块。在VP9中,在最多三个候选参考帧中允许最多两个参考,然后预测器将进行基于块平移的运动补偿,或者如果有两个参考信号则取这两次预测的平均值。AV1具有更强大的帧间编码器,极大地扩展了参考帧和运动矢量库,打破了基于块的平移预测的局限性,并通过使用适应性强的加权算法和信源来增强复合预测。

1)扩展参考帧

AV1将每个帧的参考数量从3个扩展到7个。除了VP9的LAST (最近过去的)帧、GOLDEN(遥远过去的)帧和ALTREF(临时过滤的未来)帧之外,我们还添加了两个过去的帧(LAST2和LAST3)和两个未来帧(BWDREF和ALTREF2)[21]。图4展示了GOLDEN组的多层结构,其中自适应数量的帧共享相同的GOLDEN帧和ALTREF帧。BWDREF是一种直接编码的超前帧,无需应用时域滤波,因此更适合用作相对距离较短的后向参考。ALTREF2用作GOLDEN和ALTREF之间的中间过滤的将来参考。所有的新参考方式都可以通过单个预测模式使用,也可以被组合成复合模式使用。AV1提供了丰富的参考帧对集合,既提供双向复合预测,又提供单向复合预测,从而可以对各种具有动态时域相关特性的视频进行更自适应、更优化的编码。

图像 / 视频_第13张图片

2)动态时间与空间运动矢量参考

有效的运动矢量(MV)编码对于视频编解码器至关重要,因为它占用了帧间的很大一部分码率成本。为此,AV1结合了复杂的MV参考选择方案,以通过搜索空间和时间候选来获得给定块的良好MV参考。AV1不仅搜索比VP9更广的空间邻域来构建空间候选库,而且利用运动场估计机制来生成时间候选。运动场估计过程分为三个阶段:运动矢量缓冲、运动轨迹创建和运动矢量投影。首先,对于每个编码后的帧,我们存储其参考帧索引和相关的运动矢量。该信息将被下一编码帧参考以生成其运动场。运动场估计检查运动轨迹,例如图5中的MVRef2将一个参考帧Ref2中的块指向另一个参考帧Ref0Ref2的某个位置,可能会通过每个64×64处理单元,检查最多3个参考中并列的128×128缓冲运动矢量场。接下来,在编码块级别,一旦已经确定参考帧,就通过将运动轨迹线性投影到期望的参考帧上(例如,将图5中的MVRef2转换为MV0或MV1)来生成运动矢量候选。一旦所有的空间和时间候选被聚集在池中,它们被排序、合并和排序以获得最多四个最终候选[22,23]。评分方案依赖于计算当前块具有特定MV作为候选的可能性。为了编码MV,AV1用信号通知从列表中选择的参考MV的索引,然后根据需要对运动矢量差进行编码。

图像 / 视频_第14张图片

3)重叠块运动补偿(OBMC)

OBMC通过平滑地组合从邻近运动矢量创建的预测,可以大大减少块边缘附近的预测误差。在AV1中,设计了一种两面因果重叠算法,以使OBMC轻松适合高级分块框架[9]。它通过在垂直和水平方向上应用预定义的一维滤波器,逐步将基于块的预测与二次帧间预测器结合在上方边缘和左侧边缘。二次预测器仅在当前块的上/左半部分的受限重叠区域中操作,因此它们不会在同一侧彼此缠绕(参见图6)。AV1OBMC仅对使用单个参考帧的块启用,并且仅与具有两个参考帧的任何邻居的第一个预测器一起工作,因此最坏情况下的存储器带宽与传统复合预测器所要求的相同。

图像 / 视频_第15张图片

 

4)扭曲运动补偿

AV1通过两种仿射预测模式(全局和局部扭曲运动补偿)开发扭曲运动模型[25]。全局运动工具用于处理摄影机运动,并允许在帧和每个参考之间发出仿射模型的帧级信号。局部扭曲运动工具旨在通过从分配给因果邻域的运动矢量信号的二维位移中推导块级模型参数,从而以最小的开销隐式描述变化的局部运动。通过比较两种编码工具在块级别转换模式,只有在RD成本方面有优势时才选择它。更重要的是,AV1中的仿射扭曲受到的限制较小,因此可以在SIMD和硬件中通过水平剪切和垂直剪切来有效地实现仿射扭曲(图7),其中每个剪切点使用1/64像素精度的8-tap插值滤波器。

图像 / 视频_第16张图片

 

5)高级复合预测

为提高AV1编码器间的通用性,开发了一系列新的复合预测工具。在本节中,可以将任何复合预测操作针对像素(i,j)概括为:: pf (i, j) = m(i, j)p1(i, j)+(1 − m(i, j))p2(i, j),其中p1和p2是两个预测变量,而pf是最终的复合预测,其中[0,1]中的加权系数m(i,j)专为不同的用例而设计,可以很容易从预定义表中生成。 [11]

  • 复合楔形预测:移动对象的边界通常很难用网格块来近似。AV1中的解决方案是预定义16个可能的楔形分区的代码簿,当编码单元选择同样以这种方式进一步分区时,在位流中发信号通知楔形索引。如图8所示,针对正方形和矩形块设计了16个形状的代码簿,其中包含水平,垂直或倾斜度为±2或±0.5的分区方向。为了减轻由两个预测变量直接并置而产生的寄生高频分量,采用软悬崖形的二维楔形遮罩对目标分区周围边缘进行平滑处理,即m(i,j)接近于0.5边缘,并逐渐在两端转换为二进制权重。

图像 / 视频_第17张图片

  • 差分调制掩码预测:在很多情况中,一个预测器中的区域将包含第二个预测器中不存在的有用内容。例如,一个预测器可能包括先前被移动对象遮挡的信息。在这些情况下,允许最终预测的某些区域更多地来自一个预测值而不是另一个预测值是有用的。AV1复合预测变量还可以通过从两个预测变量的值不同的内容来创建非均匀加权。具体来说,p1和p2之间的像素差用于在基值之上调制权重。掩码通过m(i, j) = b+a|p1(i, j)−p2(i, j)|生成,其中b控制的是在不同区域内一个预测变量对另一个加权变量的加权强度,其中比例因子a则是为了实现平滑调制。
  • 基于帧距离的复合预测:除了非均匀加权之外,AV1还通过考虑帧距离来使用修改的均匀加权方案。帧距离被定义为两个帧的时间戳之间的绝对差。直观地,如果一个参考帧正好紧挨着当前帧,而另一个帧位于离当前帧更远的位置,则预期来自第一帧的参考块与当前块具有更高的相关性,因此应该比另一个具有更高的权重。设d1和d2(d1,≥,d2)表示从当前帧到参考帧的距离,由此计算p1和p2。W1和w2是从d1和d2导出的权重。最自然的方案是权重和帧距离成正比,即w1/w2=d2/d1。然而,仔细观察发现,复合预测应该具有两个主要功能:利用视频信号中的时间相关性和消除重构参考帧中的量化噪声。线性方案没有考虑量化噪声。在具有多个参考帧的分层编码结构中,两个参考帧与当前帧的相对距离可以基本上不同。线性模型将使分配给来自较远帧的块的权重太小而不能中和量化噪声。另一方面,传统的平均加权虽然并不总是密切跟踪时间相关性,但总体上表现出很好的降低量化噪声的性能。为了平衡这两个因素,AV1采用了一种改进的加权方案,将权重分配给远处的预测器。过实验获得码本,并将其固定在AV1中:

图像 / 视频_第18张图片

  • 复合帧内预测:复合帧内预测模式将帧内预测p1和单参考帧间预测p2相结合,处理新出现的内容和混合了旧对象的区域。对于帧内部分,支持四种常用的帧内模式。遮罩m(i,j)包含两种类型的平滑功能:(i)类似于为楔间交互模式设计的平滑遮罩,(ii)依赖模式的遮罩,其中权重p1,以内部模式的主方向为导向的衰减模式。

 

4. 变换编码

1)变换块分区

AV1无需像VP9中那样强制执行固定的变换单元大小,而是将亮度帧间编码块划分为多种大小的变换单元,这些变换单元可以由递归分区(最多递减两个级别)表示。为了合并AV的扩展编码块分区,我们支持从4×4到64×64的正方形,2:1/1:2和4:1/1:4比例也都可以。此外,色度转换单元总是要尽可能地大。

2)扩展变换核

AV1中为帧内和帧间定义了更丰富的变换核集合。完整的2-D核集由四种1-D变换类型的水平/垂直组合生成,总共产生16个核选项[27]。一维变换类型包括VP9中使用的DCT和ADST、flipADST则以相反的顺序应用ADST,并且身份变换(IDTX)意味着沿某个方向跳过变换编码,因此对于编码锐利边缘特别有用。。在实践中,这些内核中的几个在较大的块大小时会给出类似的结果,从而允许随着变换大小的增加而逐渐减少可能的内核类型。

5. 熵编码

1) 多符号熵编码

VP9使用基于树的布尔型非自适应二进制算术编码器对所有语法元素进行编码。AV1转向使用符号间自适应多符号算术编码器。AV1中的每个语法元素都是由N个元素组成的特定字母表中的成员,上下文由一组N个概率和一个小计数组成,以便于早期快速适应。概率被存储为15位累积分布函数(CDFs)。与二进制算术编码器相比,精度更高,从而可以准确地跟踪字母表中不太常见的元素的概率。概率通过简单的递归缩放进行调整,其中更新因子基于字母大小。由于符号比特率是由编码系数、运动矢量和预测模式共同决定的,所有这些都使用大于2的字母,因此对于典型的编码方案,与纯二进制算术编码相比,这种设计实际上使吞吐量降低2倍以上。

在硬件中,复杂度由核心乘法器的吞吐量和大小决定,核心乘法器会重新调整算术编码状态间隔。编码实际上并不需要跟踪概率所需的较高精度。这允许通过从16×15位四舍五入到8×9位乘法器来实质上减小乘法器大小。通过强制执行最小间隔大小,可以简化此舍入,而最小间隔大小又允许简化的概率更新,其中值可能变为零。在软件中,操作计数比复杂度更重要,并且减少吞吐量和简化更新相应地减少了每个编码/解码操作的固定开销。

2)水平图系数编码

在VP9中,编码引擎按照扫描顺序顺序处理每个量化的变换系数。用于每个系数的概率模型与先前编码的系数级别,其频带,变换块大小等相关。为了正确捕获广阔基数空间中的系数分布,AV1更改为用于较大变换系数建模的电平图设计和压缩[28]。它建立在以下观察基础上:较低的系数水平通常会占主要的费率成本。

对于每个变换单元,AV1系数编码器从编码一个跳过符号开始,然后是变换核类型和当不跳过变换编码时所有非零系数的结束位置。然后,对于系数值,并没有采用为所有系数级别统一分配上下文的模型,而是将级别分为不同的平面。在结束位置被编码之后,低层和中层平面以相反的扫描顺序被编码在一起。然后,符号平面和更高级别平面以正向扫描顺序编码在一起。低层平面对应于0–2的范围,中层平面负责3–14的范围,高层平面覆盖15及以上的范围。这种分离允许我们将丰富的上下文模型分配给较低级别的平面,而这一平面充分考虑了变换维、块大小、以及邻近系数信息,以适度的上下文模型大小提高压缩效率。较高级别的平面对3到15之间的级别使用简化的上下文模型,并使用ExpGolomb代码直接对15级以上的残差进行编码。

6. 环路滤波工具和后处理

AV1允许将多个环路滤波工具相继应用于解码帧数据的过程。第一级是去块滤波器,它与VP9中使用的去块滤波器大致相同,只是做了些微小改动。最长的滤波器从VP9中的15抽头减少到13抽头。此外,对于亮度和每个色度平面,现在在水平和垂直方向上发出单独滤波级别的信号,更具灵活性,并且能够在超级块之间更改级别。AV1中的其他过滤工具描述如下:

1)约束方向增强滤波器(CDEF)

CDEF是一种细节保持去块滤波器,设计为在去块之后应用。它的工作原理是估计边缘和图案的方向,然后应用一个大小为5 × 5、12个非零权重的不可分离的非线性低通方向滤波器。为了避免发送方向信号,解码器使用标准的快速搜索算法来估计方向。解码过程的完整描述可以在参考文献中找到。[29]。

  • 方向估计:将待滤波图像分成8 × 8像素的块,足够大,可以进行可靠的方向估计。对于每个方向d,如图9所示,给每个像素分配一个l i n e数k,并确定行k的像素平均值。通过最小化平方误差来找到最佳方向,平方误差计算为各个像素值之间的平方差和对应线的平均值。

图像 / 视频_第19张图片

  • 非线性低通滤波器:非线性低通滤波器旨在消除编码伪像,而不会模糊边缘。这是通过基于所识别的方向选择抽头并独立地沿着和穿过该方向选择滤波器强度来实现的。滤波器可以表示为

https://img-blog.csdnimg.cn/20200412162551206.PNG

其中N包含x(i,j)附近的像素,权重wm,n,f()和g()是下面描述的非零非线性函数,R(x)将x舍入为最接近零的整数。 f()函数修改要过滤的像素与相邻像素之间的差异,并由分别在64×64块级别和帧级别指定的两个参数(强度S和阻尼值D)确定。强度S钳位允许的最大差值减去D所控制的削减。g()函数将要过滤的像素x的修改值限制为x与支撑区域中x(m,n)之间的最大差值保持滤波器的低通特性。

2)环路恢复滤波器

循环恢复过滤器:AV1在CDEF之后添加了一组用于循环应用的工具,这些工具的使用是相互斥的,其可选大小为64×64、128×128、或256×256的被称之为循环恢复单元(LRU)。具体来说,对于每个LRU,AV1允许在如下两个滤波器[15]之一之间进行选择。

  • 可分离对称归一化Wiener滤波器:用7×7可分离维纳滤波器滤波,其系数在比特流中用信号表示。由于标准化和对称性的限制,每个水平/垂直滤波器只需要发送三个参数。编码器进行了巧妙的优化,以决定使用正确的滤波器抽头,但是解码器只使用从位流接收到的滤波器抽头。
  • 双自导滤波器:对于每个LRU,解码器首先应用两个简易的整数化自导滤波器,其支持大小分别为3×3和5×5,并通过比特流中的信号通知噪声参数。 (注意,自我引导意味着引导图像与要过滤的图像相同)。接下来,将两个滤波器r1和r2的输出与同样在比特流中用信号发送的权重(α,β)组合,以获得最终恢复的LRU为x + α(r1 − x) + β(r2 − x),其中x是原始降级的LRU。即使r1和r2本身不一定是好的,但在编码器端适当选择权重可使最终组合版本更接近于未降级的源。

3)帧超分辨率

根据当前带宽自适应切换帧分辨率是视频流服务中的常见做法。例如,当可用带宽较低时,服务可以发送较低分辨率的帧,然后将它们升级到显示设备分辨率。然而,这种缩放现在发生在视频编解码器之外。

AV1中新的帧超分辨率框架背后的动机是通过使其成为编解码器本身的一部分来使这一缩放过程更加有效。这种编码模式允许以较低的空间分辨率对帧进行编码,然后在更新参考缓冲器之前,以标准方式在环路内超分辨率至全分辨率。后来,这些超分辨参考缓冲区可用于预测后续帧,即使它们的分辨率不同,这要归功于AV1的有限预测能力。

在客观指标上,超分辨率几乎总是比在编解码器之外放大较低分辨率的帧好得多。此外,在非常低的比特率下,就感知度量而言,有时也观察到比全分辨率更好。此外,它为编码器的速率和质量控制提供了额外的维度。虽然在这一领域有大量的研究,但图像处理文献中的大多数超分辨率方法对于视频编解码器中的环路操作来说过于复杂。在AV1中,为了使运算在计算上易于处理,超分辨过程被分解为线性向上扩展,随后以更高的空间分辨率应用循环恢复工具。具体来说,维纳滤波器特别擅长超分辨率和恢复丢失的高频。唯一附加的标准操作是在使用循环恢复之前的线性升级。此外,为了实现成本有效的硬件实现,不需要线缓冲器中的开销,放大/缩小被限制为仅水平操作。图11描述了使用帧超分辨率时环路滤波管道的总体架构,其中CDEF以编码(较低)分辨率运行,但是在线性升频器水平扩展图像以解决部分分辨率后,环路恢复运行较高的频率丢失。

图像 / 视频_第20张图片

4)胶片颗粒合成

AV1中的胶片颗粒合成是应用于编码/解码循环之外的标准后处理[31]。富含电视和电影内容的电影胶片通常是电影的一部分。它的随机性使得传统的编码工具很难压缩。相反,在压缩之前从内容中去除颗粒,其参数被估计并在AV1比特流中发送。解码器基于接收到的参数合成颗粒,并将其添加到重建的视频中(参见图12的细节)。

图像 / 视频_第21张图片

颗粒被建模为自回归(AR)过程,其中亮度的最高AR系数为24,每个色度分量的AR系数为25。这些系数用于生成64×64亮度颗粒模板和32×32色度模板。然后从模板中的随机位置获取小颗粒补丁并将其应用于视频。补丁之间的不连续性可以通过可选的重叠来缓解。薄膜的颗粒强度也随信号强度而变化,因此每个颗粒样品都按比例缩放[16]。

该工具支持胶片颗粒强度和信号强度之间关系的灵活建模,如下所示:

Y’是用胶片颗粒重噪声的结果亮度,Y是添加胶片颗粒之前亮度的重建值,GL是亮度胶片颗粒样本。这里,f(Y)是一个分段线性函数,根据亮度分量值缩放胶片颗粒。这个分段线性函数被信号通知给解码器,并且可以被实现为预先计算的查找表(LUT),该查找表在运行当前帧的颗粒合成之前被初始化。对于色度分量(例如Cb),当色度中的膜颗粒强度取决于luma分量时,使用以下公式调制噪声以便于颗粒强度建模:

其中u是LUT中对应于Cb分量比例函数的索引,参数bCb、dCb和hCb用信号通知解码器。

一组胶片颗粒参数最多可占用大约145个字节。每个帧可以接收一组新的纹理参数,或者如果先前解码的帧中的一个可用,则可以重复使用这些参数。

7.Tiles and multi-threading

1) AV1Tiles

AV1支持由多个超级块(super blocks)组成的独立tiles,tiles可以任意顺序编码和解码。由编码参数定义,tiles可以是均匀的(即tiles具有相同的尺寸)或不均匀的(即tiles可以具有不同的尺寸)。独立的tiles支持提供了编码的灵活性,这样编码器和解码器就可以运行了,并且可以变得更快。

在libaom代码库中,多线程(MT)已经在编码器和解码器中实现,包括基于tile的MT和基于行的MT。当允许使用tile,基于tile的MT提供了显著的加速。当不使用或很少使用tile时,基于行的MT允许线程对单个超级块行进行编码和解码,从而进一步提高了速度。在一个720p视频编码中使用四个tiles和四个线程,编码器的加速比约为3倍,解码器的加速比约为2.5倍。

2)大规模tiles

随着虚拟现实(VR)应用的日益普及,AV1第一次提供了一种使实时VR应用可行的解决方案。大规模平铺工具允许解码器只提取帧中感兴趣的部分,而不需要解压缩整个帧。这显著地降低了解码器的复杂性,并且对于实时应用非常有用,例如光场,其随着观看者的头部移动呈现帧的单个部分。

 

视频编解码学习之四:视频处理及编码标准

https://www.cnblogs.com/xkfz007/archive/2012/07/30/2614467.html

1.视频处理

  • 在视频压缩前后,对视频图像质量增强的操作
  • 视频编解码系统输出的图像主观质量不仅与压缩算法的性能有关,还受视频处理的影响
  • 压缩之前对视频的处理称作预处理(Pre-processing)
  • 压缩之后对视频的处理称作后处理(Post-processing)

2. 预处理

  • 预处理的目的

    • 为了减少原图像受到的损害,保持原图像的重要特征,使原图像能被高效的压缩

      • 噪声污染
      • 光照差
      • 抖动
    • 为了进行视频格式转换

      • 去隔行
      • 空间缩放
      • 帧率转换
  • 去噪声处理

图像 / 视频_第22张图片

图像 / 视频_第23张图片

图像 / 视频_第24张图片

  • 去隔行(Deinterlace)

    • 隔行扫描的视频图像在逐行扫描播放设备上播放会有隔行效应,降低了主观质量

3. 去隔行的方法

  • 在单场内去隔行

    • 用奇数(偶数)行插值出偶数(奇数)行

图像 / 视频_第25张图片

  • 两场间去隔行

    • 用两场的像素值(包括运动矢量信息)插值出一帧象素值

图像 / 视频_第26张图片

  • 运动补偿方法

    • 用前后向参考场的运动矢量信息,产生高质量的逐行帧

图像 / 视频_第27张图片

4. MPEG去隔行处理

  • MPEG-2后处理去隔行

图像 / 视频_第28张图片

5. 空间缩放

 

  • 上采样(Up sample)方法

    • 最近邻插值(Nearest-neighbor interpolation )

      • 用原图像上每一个象素点值作为上采样图像上对应四个相邻象素点的值
      • 会产生阶梯形状的效应
    • 线性,双线性插值

    P(x,y)=P(0,0)xy+P(1,0)(1-x)y+P(0,1)x(1-y)+P(1,1)(1-x)(1-y)

    图像 / 视频_第29张图片

    • 双三次插值(Bicubic interpolation)

      • 用邻近的16个象素值插值当前象素
      • 有更平滑的插值效果

      图像 / 视频_第30张图片

图像 / 视频_第31张图片

  • 下采样(Down sample)方法

    • 缩小原始图像

图像 / 视频_第32张图片

5. 超分辨率

图像 / 视频_第33张图片

  • 光流:象素的运动矢量

图像 / 视频_第34张图片

 

6. 帧率转换

  • 3:2下拉

    • 24帧/秒电影转换成60场/秒的电视视频
    • 24/30=4/5

图像 / 视频_第35张图片

  • 帧率下采样(跳帧)

图像 / 视频_第36张图片

  • 帧率上采样

图像 / 视频_第37张图片

7. 后处理

  • 后处理的目的是为了去除解码图像的各种效应,最大程度恢复损失的图像数据,提高解码图像的主观质量

    • 量化方法使变换系数信息损失导致解码图像产生失真和块边界的不连续性

      • 块效应(Block Artifact),振铃效应(Ringing Artifact)
      • 失真(Distortion)
    • 视频码流传输及解码导致的解码图像质量问题

      • 跳帧(Frame Skip)
      • 数据丢失(Data Loss)

8. 块效应

  • 块效应产生原因

    • 由于块被独立的处理

图像 / 视频_第38张图片

9. 去除块效应滤波

  • 去除块效应滤波

    • 环外滤波(Out loop filter):

      • 滤波器在解码环路外,对显示缓冲区的图像进行滤波
      • 非标准部分,只有解码器需要环外滤波
      • MPEG-2,MPEG-4 SP

     

    • 环路滤波(In loop filter):

      • 滤波器在解码环路内,滤波后的图像可以作为参考帧用于运动估计和补偿
      • 标准的一部分,编解码器都需要环路滤波
      • AVS,H.264/AVC

     

10. 振铃效应

  • 振铃效应产生原因

    • 由于高频系数的量化严重

 

11. 数据丢失

  • 数据丢失

图像 / 视频_第39张图片

12. H.264的环路滤波

 

  • 滤波边界

图像 / 视频_第40张图片

  • 适应性滤波

图像 / 视频_第41张图片

  • 滤波强度

图像 / 视频_第42张图片

  • 滤波决策阈值

 

 

  • 滤波强度

    • 滤波强度和量化参数QP有关

      • QP越高,量化程度越大,会产生更多的块效应,需要更强的滤波
      • QP越低,量化程度越小,会产生更少的块效应,用弱一些的滤波来防止边界变得模糊
    • 根据滤波强度(Bs)的不同有两种滤波器

      • 1≤ Bs≤3,基本滤波操作
      • Bs=4,强力滤波操作
    • 边界滤波计算

 

  • 截断操作参数C

 

  • Bs=4
  • 块效应更明显
  • 需要更剧烈的滤波,去除块效应
  • 当满足以下条件对边界进行强滤波

     

  • 强滤波时修改p0p1p2的像素值
  • 弱滤波时只修改p0的像素值

 

第11章 视频编码标准

1.国际标准组织

  • ITU (International Telecommunications Union):国际电信联盟
  • ISO (International Standardization Organization):国际标准化组织
  • IEC (International Electrotechnical Commission):国际电工委员会

2. ITU

  • ITU-T (Telecommunication):电信标准化部门
  • ITU-R (Radiocommunication):无线电通信部门
  • ITU-D (Development):电信发展部门
  • VCEG (Video Coding Experts Group):视频编码专家组,属于ITU-T的Study Group 16/Question 6 (ITU-T SG16/Q.6)

图像 / 视频_第43张图片

3. VCEG

  • VCEG制订标准:

    • H.261:第一个视频编码标准,用于ISDN(px64Kbps)传输的视频会议,主要采用了基于整象素的运动补偿
    • H.262 (MPE-2):与MPEG合作制定的标准
    • H.263 (H.263+, H.263++):用于低码率的视频编码,主要用于PSDN低于54Kbps的视频会议和视频电话,采用了1/2象素运动补偿,考虑了数据损失和错误鲁棒性的需要
    • H.26L: H.264的前身标准
    • H.264 (MPEG-4 AVC):目前编码效率最高的标准

4. ISO/IEC

  • JPEG:ISO/IEC JTC1/SC29/WG1
  • MPEG:ISO/IEC JTC1/SC29/WG11

    图像 / 视频_第44张图片

5. MPEG

  • MPEG制订标准:

    • MPEG-1 : H.261+半象素运动补偿+双向预测+条带结构编码,用于VCD,LAN视频(最大1.5Mbps)
    • MPE-2: MPEG-1+隔行视频编码+缩放功能,用于HDTV(18Mbps) 、SDTV (2-5Mbps)数字信号传输和DVD(6-8Mbps)存储,兼容MPEG-1标准
    • MPEG-4 ASP (P-2) :从H.263标准发展而来,基于视频对象平面编码,能在解码端控制视频对象,合成场景,并有音视频交互功能
    • MPEG-4 AVC (P-10)(H.264/AVC):与VECG合作制定的标准

6. 视频编码标准

  • 国际标准组织及其制定的编码标准

图像 / 视频_第45张图片

7. 标准的应用

图像 / 视频_第46张图片

8. 其他标准组织

  • AVS (China Audio and Video Standard)

    • AVS1.0 :面向高清数字电视广播
    • AVS-M:面向移动视频
    • AVS-S:面向监控视频
  • SMPTE (The Society of Motion Picture and Television Engineers )

    • VC-1

9. 视频编码标准发展

图像 / 视频_第47张图片

10. MPEG-1

  • 标准文档:ISO/IEC 11172-2
  • 编码技术:基于H.261

    • B帧编码:B帧不能被其它帧参考
    • 16x16 ½精度运动补偿
    • 码率控制:宏块级的码率控制,调整宏块的量化参数控制码率
    • 支持视频随机访问,回放,码流编辑,音视频同步
  • 参考软件:Simulation Model 3(SM3)

11. MPEG-2

  • 标准文档:ISO/IEC 13818-2
  • 编码技术:基于MPEG-1

    • 帧和场运动补偿
    • 三种类型的缩放

      • 空间缩放
      • 时间缩放
      • SNR缩放
  • 参考软件:Test Model 5 (TM5)
  • Profile:工具集
  • Level:参数限制
  • 不同的应用使用不同的Profile和Level的组合

 

12. H.263系列

  • H.263编码技术:基于H.261

    • 半象素精度运动补偿
    • 可选的数据流层次结构
    • 四种高效编码模式

      • D选项—无限制的运动矢量模式
      • E选项—基于语法的算术编码
      • F选项—高级预测模式,OBMC
      • G选项—PB帧模式
    • 支持更多的视频图像分辨率
    • 参考软件TMN2.0(Test Model Near-term 2.0)
  • H.263+编码技术:基于H.263

    • 允许自定义视频图像格式
    • 增加了12个选项提高压缩效率

      • I选项—高级的帧内预测模式
      • J选项—去块效应滤波
      • K选项—条带结构模式
      • L选项—补充增强信息,用于解码器的显示相关的信息
      • M选项—增强的PB帧模式
      • N选项—参考帧选择
      • O选项—分级,时间分级,空间分级,SNR分级
      • P选项—参考帧重采样
      • Q选项—减少的分辨率更新
      • R选项—独立的片段解码
      • S选项—可替代的inter-VLC
      • T选项—改进的量化
  • H.263++编码技术:基于H.263+

    • 增加了三个选项,增强抗误码能力

      • U选项—增强型参考帧选择
      • V选项—数据分区条带,变换量化系数和运动矢量数据分离
      • W选项—增加的补充增强信息,包括定点IDCT的选项,图像信息,信息类型,重复的图像头,交替场指示,稀疏参考帧识别

13. MPEG-4

  • 标准文档:ISO/IEC 14496-2
  • 编码技术:基于H.263

    • 增加了基于对象的编码和操作

      • 形状分割编码
      • 缩放的静态纹理小波变换
      • 网格动画编码
      • 人脸动画编码
      • 内容合成,半合成编码
      • 10比特,12比特深度采样
      • 参考软件VM7(Verification Model 7
  • 基于对象编码

    • 场景被分成多个对象
    • 每个对象用形状,运动和纹理特征描述

图像 / 视频_第48张图片

  • Video Object Plane(VOP)

图像 / 视频_第49张图片图像 / 视频_第50张图片

  • Sprite编码

    • 在序列开始编码整个视频背景和仿射映射,通过仿射映射将部分背景内容放到解码图像上显示

     

  • 网格(Mesh)动画编码

    • 对象可由初始的网格和节点的运动矢量描述

     

  • Profile

 

14. H.264/AVC

  • 标准文档:ISO/IEC 14496-10(ITU-T H.264)
  • 前身为:H.26L(Long Range),基于MPEG-2/4
  • 参考软件JM(Joint Model)

15. H.264编码结构

图像 / 视频_第51张图片

16. H.264-Intra编码

  • 4个亮度16x16的模式
  • 9个亮度4x4的模式
  • 4个色度8x8的模式
  • 编码复杂度高
  • 不利于错误恢复

图像 / 视频_第52张图片

17. H.264-运动补偿

  • 可变块运动补偿
  • ¼象素精度亮度运动补偿

    • ½像素滤波器(1, -5, 20, 20, -5, 1)
  • 1/8象素精度色度运动补偿

    • 色度采用双线性滤波
  • 图像外运动矢量
  • 多参考帧

    • 每个宏块的四个8x8子块都可以使用不同的参考帧

图像 / 视频_第53张图片图像 / 视频_第54张图片

18. H.264多参考帧

  • P帧

    • 只参考一个list的参考帧,List0
  • B帧

    • 参考两个list的参考帧,List0和List1
  • 每个List最大可包含16个参考帧

    • List0:以前的参考帧缓冲
    • List1:将来的参考帧缓冲

19. H.274-加权预测

 

20. H.264-切换图像

  • SP/SI帧实现

    • 码流切换
    • 随机切入
    • 错误恢复
    • 也可以实现快进,快退
  • 特点

    • 对于不同的参考图像可以得到完全相同的重构图像
    • SP帧的编码效率低于P帧但高于I帧
    • SI帧的编码效率低于I帧

 

21. H.264-FMO

  • 灵活宏块顺序(Flexible MB Order,FMO)

    • 宏块有不同的组合构成条带
    • 七种不同的宏块组合方式
  • FMO增强了解码的错误恢复能力

图像 / 视频_第55张图片

22. H.264-数据分区

  • 上层的语法元素的丢失会严重影响压缩码流的解码
  • 将码流按照重要程度分成三部分

    • A:头信息:包括宏块类型,运动矢量等
    • B:Intra系数信息
    • C:Inter系数信息
  • 用不同的优先级传输不同重要程度的分区来实现错误恢复

23. H.264-ASO,RP

  • 任意条带顺序(Arbitrary Slice Order,ASO)

    • 条带之间独立解码
    • 条带可以按任意顺序传输
    • 丢失的条带可以被解码的条带恢复出来
  • 冗余图像(Redundant Picture)

    • 在码流里放入冗余的图像,如果图像数据丢失了,可以用冗余图像代替

24. H.264-视频编码层

  • 网络独立的编码层
  • VCL层包含:

    • 序列参数集:Sequence Parameter Set(SPS),存放序列头信息
    • 图像参数集:Picture Parameter Set(PPS),存放图像头信息
    • 条带以下数据
    • 额外的增强信息(Supplemental Enhancement Information,SEI)

25. H.264-网络提取层

  • 提取的VCL数据
  • 适合于传输层的数据传输和媒介的存储
  • NAL单元为数据包和码流系统定义了一种通用的传输格式

图像 / 视频_第56张图片

  • NAL单元连接在一起构成了NAL流
  • 面向码流传输的NAL单元

    图像 / 视频_第57张图片

  • 面向数据包传输的NAL单元

    图像 / 视频_第58张图片

26. H.264-Profiles

  • Profile:码流语法子集

图像 / 视频_第59张图片

图像 / 视频_第60张图片

  • Fidelity Range Extensions

图像 / 视频_第61张图片

27. H.264-Levels

  • Level:参数限制

图像 / 视频_第62张图片

28. AVS vs. H.264

图像 / 视频_第63张图片

图像 / 视频_第64张图片

29. 性能比较

图像 / 视频_第65张图片

 

流媒体码流、分辨率、gop、qp、fps、cvbr等常见概念理解

IDR

        Instantaneous Decoding Refresh,即时解码刷新。为将首个I帧和其他I帧区别开,定义首个I帧为IDR帧。它与I帧、P帧、B帧的区别见 http://blog.csdn.net/sphone89/article/details/8086071。

GOP

        Group of Picture,关键帧的周期,也就是两个IDR帧之间的距离,一个帧组的最大帧数,一般而言,每一秒视频至少需要使用 1 个关键帧。增加关键帧个数可改善质量,但是同时增加带宽和网络负载。在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP 开始才有可能得以恢复,所以GOP值也不宜设置过大。

        同时,由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会影响Seek操作的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。

采样率

        指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点。一个采样点数据有多少个比特。比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送的数据越大,音质越好。比特率 = 采样率 × 采用位数 × 声道数.

比特率

        比特率是指每秒传送的比特(bit)数。单位为bps(Bit Per Second),比特率越高,传送的数据越大。在视频领域。比特率是指将数字声音、视频由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质、画质就越好。

        比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。

分辨率 

        就是帧大小每一帧就是一副图像。640*480分辨率的视频,建议视频的码率设置在700以上,音频采样率44100就行了。一个音频编码率为128Kbps,视频编码率为800Kbps的文件,其总编码率为928Kbps,意思是经过编码后的数据每秒钟需要用928K比特来表示。

        计算输出文件大小公式:[音频编码率(KBit)/8 +视频编码率(KBit)/8]×影片总长度(秒)=文件大小(MB)

码流/码率

        码流(Data Rate)是指视频文件在单位时间内使用的数据流量,也叫码率或码流率,通俗一点的理解就是取样率,是视频编码中画面质量控制中最重要的部分,一般我们用的单位是kb/s或者Mb/s。一般来说同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就 越高,处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。

        当然,码流越大,文件体积也越大,其计算公式是文件体积=时间X码率/8。例如,网络上常见的一部90分钟1Mbps码流的720P RMVB文件,其体积就=5400秒×1Mb/8=675MB。

        通常来说,一个视频文件包括了画面及声音,例如一个RMVB的视频文件,里面包含了视频信息和音频信息,音频及视频都有各自不同的采样方式和比特率, 也就是说,同一个视频文件音频和视频的比特率并不是一样的。而我们所说的一个视频文件码流率大小,一般是指视频文件中音频及视频信息码流率的总和。

        以国内最流行,大家最熟悉的RMVB视频文件为例,RMVB中的VB,指的是VBR,即Variable Bit Rate的缩写,中文含义是可变比特率,它表示RMVB采用的是动态编码的方式,把较高的采样率用于复杂的动态画面(歌舞、飞车、战争、动作等),而把较低的采样率用于静态画面,合理利用资源,达到画质与体积可兼得的效果。

        码率设置时,一般需考虑三个因素:

        1、分辨率   

        分辨率是决定位率(码率)的主要因素,不同的分辨率要采用不同的位率。总体而言,录像的分辨率越高,所要求的位率(码率)也越大,但并不总是如此,图1说明了不同分辨率的合理的码率选择范围。所谓“合理的范围”指的是,如果低于这个范围,图像质量看起来会变得不可接受;如果高于这个范围,则显得没有必要,对于网络资源以及存储资源来说是一种浪费。   

        2、场景   

        监控的场景是设置码率时要考虑的第二个因素。在视频监控中,图像的运动剧烈程度还与位率有一定的关系,运动越剧烈,编码所要求的码率就越高。反之则越低。因此在同样的图像分辨率条件下,监控人多的场景和人少的场景,所要求的位率也是不同的。   

        3、存储空间   

        最后需要考量的因素是存储空间,这个因素主要是决定了录像系统的成本。位率设置得越高,画质相对会越好,但所要求的存储空间就越大。所以在工程实施中,设置合适的位率即可以保证良好的回放图像质量,又可以避免不必要的资源浪费。   

码率控制算法

        动态调整编码器参数,得到目标比特数。为视频序列中的图像组GOP、图像或子图像分配一定的比特。现有的码率控制算法主要是通过调整离散余弦变换的量化参数(QP)大小输出目标码率。

编码模式

         VBR:Variable BitRate,动态比特率,其码率可以随着图像的复杂程度的不同而变化,因此其编码效率比较高,Motion发生时,马赛克很少。码率控制算法根据图像内容确定使用的比特率,图像内容比较简单则分配较少的码率(似乎码字更合适),图像内容复杂则分配较多的码字,这样既保证了质量,又兼顾带宽限制。这种算法优先考虑图像质量。

         ABR:Average BitRate,平均比特率 是VBR的一种插值参数。ABR在指定的文件大小内,以每50帧 (30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。

        CBR:Constant BitRate,是以恒定比特率方式进行编码,有Motion发生时,由于码率恒定,只能通过增大QP来减少码字大小,图像质量变差,当场景静止时,图像质量又变好,因此图像质量不稳定。优点是压缩速度快,缺点是每秒流量都相同容易导致空间浪费。

        CVBR:Constrained Variable it Rate,VBR的一种改进,兼顾了CBR和VBR的优点:在图像内容静止时,节省带宽,有Motion发生时,利用前期节省的带宽来尽可能的提高图像质量,达到同时兼顾带宽和图像质量的目的。这种方法通常会让用户输入最大码率和最小码率,静止时,码率稳定在最小码率,运动时,码率大于最小码率,但是又不超过最大码率。比较理想的模型如下:

                                 

QP

        Quantizer Parameter,量化参数,反映了空间细节压缩情况。值越小,量化越精细,图像质量越高,产生的码流也越长。如QP小,大部分的细节都会被保留;QP增大,一些细节丢失,码率降低,但图像失真加强和质量下降。

fps

        Frames Per Second,帧率,缩写为帧/秒。是指每秒钟刷新的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(fps)越多,所显示的动作就会越流畅。

profile level

        分别是BP、EP、MP、HP:

        1、BP-Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC;

        2、EP-Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC;

        3、MP-Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持CAVLC 和CABAC 的支持;

        4、HP-High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、无损视频编码和更多的YUV 格式。  

 

你可能感兴趣的:(other)