杜比视界的各种版本
Dolby Vision:支持12位色深和最大亮度10000尼特。截至 2018 年,专业参考显示器(例如杜比视界 HDR 参考显示器)目前的峰值亮度仅限于 4,000 尼特。它使用一种动态映射技术,可以根据具体的场景动态地调整亮度和色彩,以提供更好的观看体验。
HDR版本的Dolby Vison 包含profile5,profile8Dolby Vision IQ
杜比视界 IQ 并不是杜比视界的新版本,而是一组新的高级功能,使电视 OEM(原始设备制造商)能够对其产品进行分级和差异化。
为此,杜比视界 IQ 使用杜比视界的动态元数据以及电视内部的光传感器,根据房间内的内容和环境光线条件动态调整 HDR 画面。
如果您从明亮的现场体育节目切换到较暗的电视节目,电视会相应调整以获得最佳图像。这个想法是,你不需要做任何事情——无论房间里的光线有多少,图片看起来都会是正确的。
总的来说,杜比视界 IQ版本相对于原版增加了自适应亮度调整功能,可以更好地适应不同的观看环境,提供更加一致和出色的视觉效果。杜比影院(Dolby Cinema)
杜比影院 (Dolby Cinema) 也使用杜比视界 (Dolby Vision),但由于 SDR 影院使用 2.6 伽马,因此使用 48尼特,杜比影院 (Dolby Cinema) 中使用的 108 尼特已经是 HDR。
理解杜比视界中的BL、EL、和RPU层
BL(basic layer ),表示HDR视频原始素材,色深为10bit。
RPU:杜比视界中必须要有的一个部分,通常里面包含着各类的“指导”数据,用于明确告知电视,如何转换颜色空间,HDR的动态映射(tone mapping)等等。用比喻的说法PRU是一个视频处理条例,明确写着BL层的视频应该如何渲染及显示。
EL(enhancement layer),EL可以是MEL(Minimal Enhancement Layer),或者FEL(Full Enhancement Layer),MEL仅仅使用RPU层,即杜比视界的元数据。FEL不仅包含RPU,也包含额外的视频数据。这些额外的视频数据和BL层(10bit视频)可以将视频解码成12bit。
- 一个Dolby Vison profile5 视频的RPU数据示例(使用ffmpeg5打印)
</frame>
<frame media_type="video" stream_index="0" key_frame="0" pts="48000" pts_time="2.000000" pkt_dts="48000" pkt_dts_time="2.000000" best_effort_timestamp="48000" best_effort_timestamp_time="2.000000" pkt_duration="1000" pkt_duration_time="0.041667" pkt_pos="2355214" pkt_size="26733" width="3840" height="2160" pix_fmt="yuv420p10le" sample_aspect_ratio="1:1" pict_type="B" coded_picture_number="0" display_picture_number="0" interlaced_frame="0" top_field_first="0" repeat_pict="0" color_range="pc" chroma_location="left">
<side_data_list>
<side_data side_data_type="Dolby Vision RPU Data"/>
<side_data side_data_type="Dolby Vision Metadata" rpu_type="2" rpu_format="18" vdr_rpu_profile="0" vdr_rpu_level="0" chroma_resampling_explicit_filter_flag="0" coef_data_type="0" coef_log2_denom="23" vdr_rpu_normalized_idc="1" bl_video_full_range_flag="1" bl_bit_depth="10" el_bit_depth="10" vdr_bit_depth="12" spatial_resampling_filter_flag="0" el_spatial_resampling_filter_flag="0" disable_residual_flag="1" vdr_rpu_id="0" mapping_color_space="0" mapping_chroma_format_idc="0" nlq_method_idc="-1" nlq_method_idc_name="none" num_x_partitions="1" num_y_partitions="1">
<components>
<component pivots="0 20 67 164 316 572 828 976 1021">
<pieces>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="5179 20623868 -294552256"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="88827 11315319 -25222884"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="151516 9365857 -9355354"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="277968 7675263 -3634208"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="459586 6473369 -1628778"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="670793 5687554 -894002"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="934323 5034373 -488398"/>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="2" poly_coef="20599870 -36279016 21211862"/>
</pieces>
</component>
<component pivots="0 1023">
<pieces>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="1" poly_coef="-713407 11137402"/>
</pieces>
</component>
<component pivots="0 1023">
<pieces>
<section mapping_idc="0" mapping_idc_name="polynomial" poly_order="1" poly_coef="-196848 11127635"/>
</pieces>
</component>
</components>
dm_metadata_id="0" scene_refresh_flag="0" ycc_to_rgb_matrix="8192/8192 799/8192 1681/8192 8192/8192 -933/8192 1091/8192 8192/8192 267/8192 -5545/8192" ycc_to_rgb_offset="0/268435456 134217728/268435456 134217728/268435456" rgb_to_lms_matrix="17081/16384 -349/16384 -349/16384 -349/16384 17081/16384 -349/16384 -349/16384 -349/16384 17081/16384" signal_eotf="65535" signal_eotf_param0="0" signal_eotf_param1="0" signal_eotf_param2="0" signal_bit_depth="12" signal_color_space="2" signal_chroma_format="0" signal_full_range_flag="1" source_min_pq="7" source_max_pq="3079" source_diagonal="42" </side_data>
</side_data_list>
</frame>
杜比视界的各种profiles
profile5
- 像素格式为IPTPQ(类似于ICtCp),该像素格式编码后,相比于YCbCr有更少的色彩损失
- 亮度传递函数为PQ
- 内部有杜比私有函数来动态调整场景或者帧的颜色
profile7
- 双层杜比,视频可以被完整解码为12bit
profile8
- 像素格式为YCbCr
- 亮度传递函数PQ(profile8.1),HLG(profile8.4)
- 不会动态调整场景或者帧的颜色,只会调整亮度
杜比视界中的metadata
- L0表示母带制作时的显示器特性和目标显示器的显示特性
- L1 表示自动生成的动态元数据,包括每个场景或者每帧的动态范围 (min, avg, max)
- L2trims L3trims L8trims 表示人工手动生成的元数据,可以是每个场景或者每帧一个
- L5 表示显示的ROI区域,不在ROI区域的视频显示为黑色
L5 – Level 5 – Timeline Aspect Ratio Description
The aspect ratio of the project is described as L5 metadata in the exported XML. L5 is described as two values namely CanvasAspectRatio and ImageAspectRatio.
- L6 表示整个播放序列的单个像素的最高亮度MaxCLL,和单帧平均最高亮度MaxFALL
- L9 表示动态色域元数据(since CMv4.0)
开源软件支持情况
- Libplacebo 支持渲染Dolby Vison profile5中的 IPTPQc2,并且支持其中的MMR和reshaping,但是不支持动态元数据和NLQ
- MPC Video Renderer支持部分杜比视界版本(Profiles5,8.1,8.4)
- 截止2024.5月,最新的FFmpeg已经支持杜比profile=8的RPU层转码
mediainfo 查看一个dolby vison5 视频示例
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L5@High
HDR format : Dolby Vision, Version 1.0, dvhe.05.06, BL+RPU
Codec ID : dvh1
Duration : 1 min 2 s
Bit rate : 24.6 Mb/s
Width : 3 840 pixels
Height : 2 160 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 24.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0 (Type 0)
Bit depth : 10 bits
Compression mode : Lossy
Bits/(Pixel*Frame) : 0.123
Stream size : 182 MiB (96%)
Default : Yes
Alternate group : 1
Color range : Full
Codec configuration box : hvcC+dvcC
参考资料