参考:
https://zhuanlan.zhihu.com/p/524890604
https://juejin.cn/post/7101560813282361352
https://github.com/quietvoid/hdr10plus_tool
HDR(高动态范围)内容的编码格式与视频编码标准紧密相关,主要依赖于主流的视频编码标准(如H.265/HEVC、H.266/VVC等),并通过特定的参数配置(如色域、位深、元数据)实现HDR特性。以下是支持HDR的主要编码格式及相关标准:
一、核心视频编码标准(支持HDR的基础)
HDR内容的编码本质上是在传统视频编码标准中加入HDR特有的参数(如宽色域、高位深),主流编码格式包括:
1. H.265/HEVC(高效视频编码)
- 地位:目前应用最广泛的HDR编码格式,几乎所有HDR内容(如流媒体、UHD蓝光)均支持。
- HDR适配:通过扩展参数支持HDR的核心特性:
- 位深:支持10位或12位色深(SDR通常为8位),能呈现更多亮度层级,避免明暗过渡的色带问题。
- 色域:支持BT.2020广色域(SDR多为BT.709),包含更丰富的色彩。
- 元数据:可嵌入HDR动态元数据(如HDR10+、Dolby Vision)或静态元数据(如基础HDR10)。
- 应用场景:UHD蓝光、Netflix/Disney+等流媒体的HDR内容、游戏画面录制。
2. H.266/VVC(多功能视频编码)
- 地位:HEVC的继任者,压缩效率更高(比HEVC提升约50%),是未来HDR内容的主流编码方向。
- HDR适配:原生支持10/12位色深、BT.2020色域,以及更灵活的元数据嵌入方式,对HDR动态元数据(如Dolby Vision)的兼容性更优。
- 应用场景:8K HDR视频、高带宽需求的HDR内容(如专业影视制作)。
3. AV1(开放媒体联盟编码)
- 地位:开源、免专利费的编码格式,近年快速崛起,尤其在流媒体领域。
- HDR适配:原生支持10/12位色深、BT.2020色域,以及HDR10、HDR10+等元数据标准,压缩效率接近VVC。
- 应用场景:YouTube、Netflix等流媒体的HDR内容,兼顾成本与性能。
4. MPEG-2(较少用于HDR,但兼容)
- 地位:传统编码格式,压缩效率较低。
- HDR适配:部分早期HDR广播电视内容(如日本的NHK 8K HDR)使用,但因带宽限制,应用极少。
二、HDR特有的编码扩展标准(与编码格式绑定)
除了基础编码格式,HDR还需通过特定的“编码扩展标准”定义元数据、色域映射等细节,常见的有:
1. HDR10(基于HEVC/AV1等)
- 编码依赖:无专属编码,基于HEVC、AV1等编码格式,通过静态元数据(如全片峰值亮度)和参数配置实现。
- 核心参数:10位色深、BT.2020色域、SMPTE ST 2084电光转换函数(OETF)。
2. HDR10+(动态元数据扩展)
- 编码依赖:基于HEVC或AV1,扩展支持动态元数据(逐帧/逐场景更新亮度参数)。
- 标准:遵循SMPTE ST 2094-40动态元数据规范,需编码时嵌入实时亮度信息。
3. Dolby Vision(闭源标准)
- 编码依赖:主要基于HEVC(也支持AV1、VVC),采用闭源的动态元数据格式。
- 特性:支持12位色深、最高10000 nit亮度,元数据通过专用字段嵌入编码流,需授权解码。
4. HLG(混合对数伽马,适合广播)
- 编码依赖:基于HEVC或MPEG-2,无需元数据,兼容SDR和HDR显示。
- 应用:主要用于广播电视(如BBC、NHK的HDR频道),编码时采用BT.2020色域和HLG电光转换函数。
三、编码与HDR标准的对应关系
不同HDR标准对编码格式的支持如下表:
HDR标准 | 支持的编码格式 | 核心特性 | 应用场景 |
---|---|---|---|
HDR10 | HEVC、AV1、VVC | 静态元数据,10位色深 | 流媒体、UHD蓝光 |
HDR10+ | HEVC、AV1 | 动态元数据,逐帧亮度调整 | 三星设备、亚马逊Prime |
Dolby Vision | HEVC、AV1、VVC | 动态元数据,12位色深,高亮度 | Netflix、Disney+、高端设备 |
HLG | HEVC、MPEG-2 | 无元数据,兼容SDR/HDR | 广播电视、直播 |
总结
HDR内容的编码以HEVC(H.265) 为基础,AV1 为新兴趋势,VVC(H.266) 为未来方向。具体编码格式需结合HDR标准(如HDR10+/Dolby Vision),通过高位深(10/12位)、宽色域(BT.2020)和元数据嵌入实现HDR特性。解码时,设备需同时支持编码格式和对应的HDR标准才能正确渲染。
HDR10只要求提供静态元数据,只需要获取影像最高峰值亮度来确定整个影像的动态范围。杜比视觉和HDR10+则采用获取动态元数据,这能使中央处理器能够在逐帧或某一段影像场景应用色调映射
HDR动态元数据(HDR Dynamic Metadata)的存储位置取决于具体的内容格式和传输/存储场景,通常与视频流绑定,但以独立于像素数据的方式嵌入或关联,主要有以下几种常见形式:
动态元数据保存在哪里
1. 嵌入在视频容器文件中
大多数主流的视频容器格式(如MP4、MKV、TS等)会专门预留留字段用于存储HDR动态元数据的字段,与视频流、音频流等并行存在。
- 示例:
- 在MP4容器中,HDR10+元数据通常嵌入在
mdat
(媒体数据)或meta
(元数据)盒子中,通过特定的子盒子(如hvcC
、colr
或自定义扩展字段)标识。 - 在MKV容器中,元数据可能以“附加数据块”(Attachment)或“标签”(Tag)形式存在,与视频轨道关联。
- 在TS(Transport Stream)容器中,元数据可能通过私有数据流(PES包)与视频帧同步传输。
- 在MP4容器中,HDR10+元数据通常嵌入在
2. 与视频帧绑定(逐帧/逐场景关联)
动态元数据的核心是“动态”,需要与对应的视频帧或场景绑定,因此通常会记录元数据生效的时间戳或帧索引,确保显示设备能在正确的时刻应用元数据。
- 例如,Dolby Vision的元数据会与每帧视频数据关联,存储在视频流的扩展数据区(如HEVC编码的VPS/SPS/PPS参数集扩展中)。
- HDR10+的元数据可能按“场景”划分,每个场景的元数据会标记对应的帧范围(如从第100帧到第500帧)。
3. 独立的元数据文件(后期制作/分发场景)
在专业影视后期制作或内容分发阶段,动态元数据可能会以独立文件形式存在,与视频文件分开管理,最终在封装阶段嵌入容器。
- 常见格式:
- 杜比的
*.dv
文件:包含Dolby Vision逐帧元数据。 - HDR10+的
*.json
或*.h265
附属文件:记录场景亮度参数和帧范围映射。
- 杜比的
4. 传输协议中的元数据通道
在流媒体传输(如在线视频、直播)中,动态元数据可能通过专用的数据通道与视频流同步传输,而非预先嵌入文件。
- 例如,通过HLS(HTTP Live Streaming)或DASH协议传输时,元数据可能作为“媒体片段”的附属信息,随视频切片一起发送,确保实时渲染时的同步性。
总结
HDR动态元数据的存储遵循“与视频内容关联但物理分离”的原则:
- 最终用户接触的视频文件(如MP4、MKV)中,元数据通常嵌入在容器的专用字段中,与视频流绑定。
- 专业场景中可能以独立文件存在,在封装或传输时与视频关联。
- 核心目的是确保显示设备能准确获取“当前帧/场景”的元数据,实现动态适配渲染。
HDR动态元数据(HDR Dynamic Metadata)是HDR(高动态范围)成像技术中的关键组成部分,用于动态描述视频内容中不同场景或帧的亮度特性,帮助显示设备更精准地渲染HDR画面,提升视觉体验。
核心作用
HDR内容的亮度范围远超传统SDR(标准动态范围),同一视频中不同场景的亮度可能差异极大(如从暗场夜景到明亮日光)。动态元数据的作用是:
- 向显示设备传递场景或帧级别的亮度信息(如峰值亮度、亮度分布等)。
- 指导显示设备根据当前内容的亮度特性动态调整渲染参数,避免过曝、欠曝或细节丢失。
- 确保在不同性能的HDR显示设备上(如峰值亮度500尼特 vs 1000尼特),都能呈现最佳效果。
主要标准与格式
目前主流的HDR动态元数据标准有两种,互不兼容:
HDR10+
由三星、亚马逊等推动,基于SMPTE ST 2094-40标准。- 支持逐场景或逐帧更新元数据。
- 元数据包含:场景亮度范围(最小/最大亮度)、色调映射参数、色彩体积信息等。
- 开源免费,广泛用于流媒体(如Prime Video)、蓝光和部分电视设备。
Dolby Vision
由杜比实验室开发,基于SMPTE ST 2094-10标准。- 支持逐帧甚至逐区域的元数据(更精细的控制)。
- 元数据包含:每个画面的亮度映射曲线、动态对比度调整参数等。
- 采用闭环生态(需授权),画质表现受认可,常见于高端电视、流媒体(如Netflix)和电影发行。
此外,还有HLG(Hybrid Log-Gamma),但它是“静态元数据”方案,依赖显示设备自身调整,不支持动态场景适配。
区别
元数据包含的关键信息
无论哪种标准,动态元数据通常包含:
- 峰值亮度(Peak Brightness):当前场景中最亮区域的亮度(单位:尼特,nit)。
- 平均亮度(Average Brightness):场景整体的平均亮度水平。
- 亮度分布(Luminance Distribution):画面中不同亮度区间的像素占比。
- 色调映射指导(Tone Mapping Guidance):告诉显示设备如何将高动态范围压缩到自身支持的亮度范围内,同时保留细节。
与静态元数据的区别
- 静态元数据(如基础HDR10):仅在视频开头提供一次全局亮度信息(如全片最高峰值亮度),无法适应场景变化,可能导致部分场景渲染不准确。
- 动态元数据(HDR10+/Dolby Vision):实时更新,能针对每个场景甚至每一帧优化,更精准地还原内容创作者的意图。
应用场景
- 流媒体平台(Netflix、Prime Video等)的HDR内容传输。
- 蓝光光盘和UHD影碟的HDR视频存储。
- 高端电视、投影仪等显示设备的HDR渲染。
- 专业影视后期制作,用于标注内容的亮度特性。
总结
HDR动态元数据通过实时传递场景亮度信息,解决了HDR内容在不同设备上的适配问题,是提升HDR视觉体验的核心技术。选择HDR10+还是Dolby Vision,主要取决于内容生态和设备支持,但两者的目标都是让HDR画面更接近人眼所见的真实世界亮度和细节。
ffmpeg code chain
static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s,
const HEVCParamSets *ps, int type, int size)
{
switch (type) {
case 256: // Mismatched value from HM 8.1
return decode_nal_sei_decoded_picture_hash(&s->picture_hash, gb);
case SEI_TYPE_FRAME_PACKING_ARRANGEMENT:
return decode_nal_sei_frame_packing_arrangement(&s->frame_packing, gb);
case SEI_TYPE_DISPLAY_ORIENTATION:
return decode_nal_sei_display_orientation(&s->display_orientation, gb);
case SEI_TYPE_PIC_TIMING:
return decode_nal_sei_pic_timing(s, gb, ps, logctx, size);
case SEI_TYPE_MASTERING_DISPLAY_COLOUR_VOLUME:
return decode_nal_sei_mastering_display_info(&s->mastering_display, gb);
case SEI_TYPE_CONTENT_LIGHT_LEVEL_INFO:
return decode_nal_sei_content_light_info(&s->content_light, gb);
case SEI_TYPE_ACTIVE_PARAMETER_SETS:
return decode_nal_sei_active_parameter_sets(s, gb, logctx);
case SEI_TYPE_USER_DATA_REGISTERED_ITU_T_T35:
return decode_nal_sei_user_data_registered_itu_t_t35(s, gb, logctx, size); // 这里
case SEI_TYPE_USER_DATA_UNREGISTERED:
return decode_nal_sei_user_data_unregistered(&s->unregistered, gb, size);
case SEI_TYPE_ALTERNATIVE_TRANSFER_CHARACTERISTICS:
return decode_nal_sei_alternative_transfer(&s->alternative_transfer, gb);
case SEI_TYPE_TIME_CODE:
return decode_nal_sei_timecode(&s->timecode, gb);
default:
av_log(logctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type);
skip_bits_long(gb, 8 * size);
return 0;
}
}
decode_nal_sei_prefix
decode_nal_sei_user_data_registered_itu_t_t35
decode_registered_user_data_dynamic_hdr_plus
ff_parse_itu_t_t35_to_dynamic_hdr10_plus
其它的关键字段:
AV_FRAME_DATA_DYNAMIC_HDR_PLUS