HDR视频的编码参数

对于hdr视频的一个ffmpeg编解码命令或者参数在该篇中进行过记录,这里来详细解释一下其中参数的意义。另外这篇帖子对HDR的四个标准以及相关概念解释感觉不错。

首先两个制定标准的协会和部分简称:

SMPTE:电影电视工程师协会(Society of Motion Picture and Television Engineers)

ITU-R:国际电信联盟无线电通信部门(ITU Radiocommunication Sector)

解码

      因为以mp4等封装格式的视频里面已经包含了相关编解码信息,所以不需要什么复杂参数即可解码成yuv格式的视频。

ffmpeg -i input.mp4 -y output.yuv

解码后变成了yuv这种纯数据格式,如果涉及到hdr视频的话,相应的元数据metadata(用于彩色体积变换)会丢失掉。

编码

将hdr的yuv视频格式转换成mp4(即编码,这里只是探讨添加metadata力的参数与),首先给出两个转换命令来对比生成的mp4视频里面的信息有什么不同。

ffmpeg -s 1920X1080 -r 60 -pix_fmt yuv420p10le -i Morocco_HDR_1920X1080_10bit.yuv -r 60 -crf 1 -c:v libx265 -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:master-display=""G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1)"":max-cll=""1000,400"":min-luma=0.001:max-luma=4000" -y Morocco_HDR.mp4

生成的MP4视频使用mediaInfo查看,可以看到底部的一些信息为:

Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant
Mastering display color primaries        : Display P3
Mastering display luminance              : min: 0.0001 cd/m2, max: 1000 cd/m2
Maximum Content Light Level              : 1000 cd/m2
Maximum Frame-Average Light Level        : 400 cd/m2

使用:

ffmpeg -s 1920X1080 -r 60 -pix_fmt yuv420p10le -i Morocco_HDR_1920X1080_10bit.yuv -r 60 -crf 1 -c:v libx265 -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:master-display=""G(12250,35150)B(6899,2600)R(33899,16099)WP(15634,16449)L(10000000,0)"":max-cll=""1100,180"":min-luma=0.0000:max-luma=1000" -y Morocco_HDR.mp4

其信息变为:

Color range                              : Limited
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant
Mastering display color primaries        : R: x=0.677980 y=0.321980, G: x=0.245000 y=0.703000, B: x=0.137980 y=0.052000, White point: x=0.312680 y=0.328980
Mastering display luminance              : min: 0.0000 cd/m2, max: 1000 cd/m2
Maximum Content Light Level              : 1100 cd/m2
Maximum Frame-Average Light Level        : 180 cd/m2

通过以上参数对比,最大的差别在于master-display这里,其他的参数应该都能对应的上,比如说max-cll分别控制着Maximum Content Light Level,Maximum Frame-Average Light Level 。

通过x265的官方参数中的VUI (Video Usability Information) options模块说明,可以找到这些参数的意义所在:

       colorprim:Specify color primaries to use when converting to RGB,一般可理解为色域,常见的有Rec.709(全高清广播标准)、Rec.2020(4K/8K广播标准BT.2020)、Adobe RGB、P3等。

  1. bt709
  2. unknown
  3. reserved
  4. bt470m
  5. bt470bg
  6. smpte170m
  7. smpte240m
  8. film
  9. bt2020
  10. smpte428
  11. smpte431
  12. smpte432

常用的大概就是bt709和bt2020.

HDR视频的编码参数_第1张图片

色域指可以显示的所有颜色的范围。上图表显示了人眼能够感知的所有RGB值的范围。三角形表示色域:三角形越大,可以显示的颜色越多。  附一张色域标准更多的图:

HDR视频的编码参数_第2张图片

    一般的,电影视频在采集及后期制作的时候是根据DCI-P3色彩空间。但在普通SDR显示器上需要统一转换为Rec.709色彩空间,它大概能占到P3色域的百分之九十。   

transfer:Specify transfer characteristics,可以理解为转换曲线。(常见的hdr转换曲线为HLG和PQ)

  1. bt709
  2. unknown
  3. reserved
  4. bt470m
  5. bt470bg
  6. smpte170m
  7. smpte240m
  8. linear
  9. log100
  10. log316
  11. iec61966-2-4
  12. bt1361e
  13. iec61966-2-1
  14. bt2020-10
  15. bt2020-12
  16. smpte2084
  17. smpte428
  18. arib-std-b67

其中,smpte2084为PQ曲线(感知量化),arib-std-b67为HLG曲线(混合对数伽玛)。这两种常用的HDR电光转换曲线(显示器的动态范围电光传递函数)都已经标准化为:

PQ=SMPTE ST 2084

HLG=ARIB STD-B67 

以后提到SMPTE ST 2084,其实就是值的PQ曲线。详细了解了这种转换曲线后,可能会有一种疑问,为什么会有这种光电和电光转换曲线,而且还是非线性的。归根结底还是为了节省存储。由于人眼对于光强度的敏感度是非线性的。所以在光强度变化明显的范围我们分配的用于记录其信息的数据多一点,同样,在不敏感区域就分配数据少一点。

    colormatrix:颜色空间

0.GBR
1.bt709
2.undef
3.reserved
4.fcc
5.bt470bg
6.smpte170m
7.smpte240m
8.YCgCo
9.bt2020nc
10.bt2020c
11.smpte2085
12.chroma-derived-nc
13.chroma-derived-c
14.ictcp

颜色空间由颜色模型和色域共同定义。例如Adobe RGB和sRGB都基于RGB颜色模型,但它们是两个不同的颜色空间;色域的概念前面已经提到,颜色模型的概念为:一种抽象数学模型,通过一组数字来描述颜色(例如RGB使用三元组、CMYK使用四元组)

    master-display:SMPTE ST 2086 mastering display color volume SEI info,看到SMPTE ST 2086,如果知道他的含义就很明确了,他就是前面提到的元数据。使用PQ曲线的HDR10是采用静态元数据的,但是杜比公司提出来的杜比视界和三星的HDR10+,尽管使用了PQ曲线,但是他们使用的是动态元数据,HLG没有元数据。其中

DolbyVision 等价于SMPTE ST 2094-10

HDR10+ 等价于 SMPTE ST 2094-40

HDR视频的编码参数_第3张图片

这张图可以表示元数据和电光转换曲线的联系。

继续看元数据的一些参数:

在设置的时候,有G(X,Y),B(X,Y),  R(X,Y),WP(X,Y)和L(max,min)。通过设置的数值和MP4显示的信息可知,他们的对应关系G、B

R(display primaries for RGB channels)和WP(white point)是0.00002的关系。L(最大,最小亮度)是0.0001的关系。比如,对于P3D65 1000-nits显示器,他的参数为:G(x=0.265, y=0.690), B(x=0.150, y=0.060), R(x=0.680, y=0.320),下图黑色三角形的三个顶点, WP(x=0.3127, y=0.3290)三角形中心白点位置,L(max=1000, min=0.0001),对应的设置为:G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1)。

这应该是一个对比标准的显示器,因为在设置这些数据的时候,我们使用mediaInfo看到的Mastering display color primaries这行显示的是P3,而这是其他的数字,则显示了正确的对应关系。还是引用一张色域图,这次附上R、G、B和WP的位置,进而表示在色域图上表示红绿蓝的位置

HDR视频的编码参数_第4张图片

上图的四个圈标记的RGB以及WP的位置,DCI-P3色域。

max-cll:Maximum content light level (MaxCLL) and maximum frame average light level (MaxFALL) 

一帧的内容最大亮度和均值亮度。例如,MaxCLL=1000 ,MaxFALL=400;则可以设置为:max-cll “1000,400” ;它们旨在成为HDR母带元数据的一部分,观看显示将从该参数计算如何显示图像并限制潜在的高功率需求(是否可以参考视频编解码的vbv模式?)。显然,这导致在不同的显示器上观看相同的图像,亮度是有所不同的。准确的显示校准和图像播放也是一个严峻的问题。

min-luma:,max-luma:这个是在进行编码的时候,对输入图像的极大极小值进行限制的。上面命令行中,如果将max-luma=500,那么编出来MP4格式的视频再次转换成yuv格式后,y的数值在五百以上的就会被削峰为500.

HDR视频的编码参数_第5张图片

为什么需要设置元数据

    由于符合PQ转化曲线是在Rec2020色域作为目标色彩空间的,最大支持的亮度为10000nit。但是能够只是并显示10000nit的显示器实在是太少了。市面上所谓的支持hdr图像的电视一般是1000nit。这意味着不同的UHDTV显示器将不得不基于显示器的实际色域能力“调整”显示图像色域。这是通 过在定义源图像色域的UHDTV信号(与上述HDR元数据相关联的)内使用嵌入式元数据来提供的,旨在允许显示器“智能地”重新映射到可用色域上。问题是,和HDR元数据和峰值亮度限幅一样,没有提出设置的色域重映射技术。结果是,不同的显示器将以不同的方式管理所需的色域重新映射,最终产生不同的图像结果。总之其原因为:当HDR被引入时,没有电视可以匹配主控/分级显示器的峰值亮度和色域覆盖率,特别是峰值亮度。由于基于PQ的HDR的“绝对性”与母带显示无关,所以它们的峰值亮度不一样。为了试图克服这个问题,便引入了元数据以允许HDR电视重新映射图像内容。这种绝对性直接的表现可以通过上图看出。在上图通过像素点来观看当前点Y值,他是在P3色域上制作的视频(母带信息),该点图像为太阳,应当表示的非常亮才对,但也仅仅为七百多,通过下图可以看到其对应的亮度也要达到1000nit了(在其对应的SDR视频,该点的位置为230多左右)。

    两台不同的显示器显然具有不同的峰值亮度,显示图像将需要剪切到由上述PQ EOTF图定义的可用峰值点。该“峰值亮度”由信号内的元数据控制,定义用于执行分级的显示器的峰值亮度。

HDR视频的编码参数_第6张图片

     从这张图上可知,在达到100nit是所占用的电平位大概占整个(1024个)的百分之五十,现在最常用的支持1000nit的显示器,或者在现在大部分HDR视频(P3色域上制作),符合1000nit亮度。所用到的Y值也仅仅为769,占用不到百分之八十。

 

    

 

你可能感兴趣的:(图像处理)