【Windows】如何将SDR视频转换为HDR并封装为DolbyVision 8.4
在此简要记录一下工作流程,由于本人并非相关行业从业者(可以说是毫无关系),无法对其原理和问题进行解释。
首先必须鸣谢B站用户@nilaoda、@翼格小和奏和@izwb003以及,参考文章https://www.cnblogs.com/izwb003/p/use_dee_encode_dv8_4.html,及https://github.com/Map987/use_dee_encode_dv8_4/blob/main/README.md
还有杜比官方的教程https://professionalsupport.dolby.com/s/article/Quick-Start-Guide-Dolby-Vision-DaVinci-Resolve-Studio?language=zh_CN
我也短暂尝试过其他方法,但至今没有突破,把目前可用的方法记录下来,期望能和大家一同解决。
(目前发现可能的直接转换的软件Tekno3D HDR-X https://tekno3d.com/, 需要80刀一月,似乎能和Compressor一样调用硬件加速)
第一章 准备工具
达芬奇18 Studio版(或更新版本)
官方地址https://www.blackmagicdesign.com/products/davinciresolve/whatsnew,学习版可以自行搜索。
杜比视界编码引擎(Dolby Encoding Engine)
官方地址https://customer.dolby.com/content-creation-and-delivery/dolby-encoding-engine-with-dolby-ac-4-v521 ,学习版可自行搜索
杜比视界专业验证工具(Dolby Vision Professional Verification Toolkit - Lite)
官方地址https://customer.dolby.com/content-creation-and-delivery/dolby-vision-professional-verification-toolkit-lite-v430 ,学习版可自行搜索。
FFmpeg
官方地址 https://www.ffmpeg.org/
dovi_tool
官方地址 https://github.com/quietvoid/dovi_tool/releases
mp4muxer
官方地址 https://github.com/DolbyLaboratories/dlb_mp4base/tree/master/bin
mp4box
官方地址 https://gpac.wp.imt.fr/downloads/ (文章建议使用22年1月前的版本,大概是因为新版修改了命令)
Mediainfo
官方地址 https://mediaarea.net/zh-CN/MediaInfo
16G以上内存
此时你应该拥有以下文件:
dee_dv_mdgen.exe
dee_dv8_preproc.exe(dee_dv5_preproc.exe亦可)
dovi_tool.exe
dvesverifier.exe
ffmpeg.exe
license.lic
mp4box.exe
mp4demuxer.exe
mp4muxer.exe
mediainfo.exe
将它们打包为一个文件夹,命名为Tools。
第二章 用达芬奇软件将SDR转换为HDR
安装达芬奇软件,不建议安装在C盘。
1.工程设置
创建一个新工程
项目设置
到工程设置– 项目设置(Master Settings)
将时间线分辨率设置为 3840x2160 Ultra HD 或者更高的分辨率
选择使用 4:4:4 SDI
当使用双路输出设置时,HDR与映射后的SDR同时输出,一般单路即可。
选择使用 dual outputs on SDI(SDI双路输出)
根据你的连线选择SDI设置
将数据级别设置为Full
将视频比特深度设置为10bit


2.色彩管理
切换到色彩管理
选择需要使用的色彩科学(此处较为灵活,可按照下图通常的设置)
3.杜比视界版本及母版监视器设置
选择激活杜比视界选择框
建议使用4.0版本
根据你所连接HDR参考监视器来设置母版监视器选项(没有也可以设置)
例如,将母版监视器选项设置为ST 2084 PQ / P3 D65 / 1000 nits
点击保存。

4.杜比视界元数据分析选项
在调色菜单栏,点击杜比视界页面,可以选择多个选项来分析杜比视界元数据
全部:分析时间线上的所有镜头
所选:分析所选择的镜头
混合: 分析多个选中镜头,在分析时,平均分析结果
帧: 分析所选中镜头的当前一帧,然后用这一帧的分析结果来表征整个镜头,这个分析选项对于分析有多种光照场景的镜头非常有用。

调色完成后,转到交付界面,设置如图所示:

如果你的电脑支持杜比视界编码,在高级设置-杜比视界配置文件那里会出现配置文件选项:

此时添加到渲染队列就完成了,出来的就是杜比视界8.4配置的影片。
如果没有出现这些选项,可以联系杜比购买杜比视界Trim License(全名The Dolby Vision Mastering and Playback Annual License,购买地址https://visionlicensestores.dolby.com/SSO/SignIn/PRD_INTL)
也许不如买一台支持编码的电脑便宜。
如果你不想放弃的话,可以先导出渲染视频,虽然它此时还只是一个HDR文件。
第三章 将HDR输出为Dolby Vision 8.4
将刚才导出的视频文件重命名为footage.mp4,把它和Tools文件夹放在同一目录下,为方便管理,建议一起放进一个新文件夹下,采用英文命名。以管理员权限在该目录运行cmd。可参考https://blog.csdn.net/weixin_43702620/article/details/105776215,然后在目录的地址栏上输入cmd即可打开。
1. 预压制
1.1如有N卡,请用N卡加速,
输入命令:
Tools\ffmpeg -hwaccel_output_format cuda -c:v hevc_cuvid -i footage.mp4 -c:v hevc_nvenc -fps_mode cfr -x265-params colorprim=bt2020:colormatrix=bt2020nc:transfer=arib-std-b67:annexb=1:aud=1:hash=1:repeat-headers=1:sar=1:level-idc=0:no-info=1 -bsf:v filter_units=remove_types=39 -b:v 35M -y _hlg.hevc
(_hlg.hevc 即为输出的视频文件,后缀h265亦可)
没有请用intel核心显卡加速:
Tools\ffmpeg -hwaccel_output_format qsv -c:v hevc_qsv -i footage.mp4 -c:v hevc_qsv -fps_mode cfr -x265-params colorprim=bt2020:colormatrix=bt2020nc:transfer=arib-std-b67:annexb=1:aud=1:hash=1:repeat-headers=1:sar=1:level-idc=0:no-info=1 -bsf:v filter_units=remove_types=39 -b:v 35M -y _hlg.hevc
A卡的命令可以自行查找,输入Tools\ffmpeg -codecs 查看支持的编解码信息。
若不能使用硬件加速,请输入以下命令:
Tools\ffmpeg -i footage.mp4 -fps_mode cfr -c:v libx265 -x265-params colorprim=bt2020:colormatrix=bt2020nc:transfer=arib-std-b67:annexb=1:aud=1:hash=1:repeat-headers=1:sar=1:level-idc=0:no-info=1 -bsf:v filter_units=remove_types=39 -b:v 35M -y _hlg.hevc
1.2之后在cmd里输入
set db_height=“分辨率AxB的A值(如3840)”
set db_width=“分辨率AxB的B值(如2160)”
set db_framerate=“FPS值“(如60)”
set db_frame_count=“总帧数(如10000)”
(可以在ffmpeg 输出的信息encoded xxx frames获得总帧数,其他在Stream那一行)
2. 创建杜比视界metadata xml文件
2.1从命名管道ffmpeg_233读取数据(管道名称是任意的),在cmd窗口输入:
Tools\dee_dv_mdgen --input-format raw:pix_fmt=yuv420p16le:chroma=rec2020:width=%db_height%:height=%db_width%:framerate=%db_framerate%:eotf=hlg:streaming=1:frame_count=%db_frame_count% --mastering-display preset=bt2020_1000 --output-metadata metadata.xml --progress 1 --overwrite 1 --input named_pipe://\\.\pipe\ffmpeg_233
2.2再开一个cmd窗口,输入命令:
Tools\ffmpeg -i _hlg.hevc -pix_fmt yuv420p16le -f rawvideo -y \\.\pipe\ffmpeg_233
完成后我们会得到一个metadata.xml文件
3. 生成杜比视界RPU文件并嵌入视频
3.1在第一个cmd窗口输入:
Tools\dee_dv8_preproc --input-format raw:pix_fmt=gbrp16le:width=%db_height%:height=%db_width%:framerate=%db_framerate%:streaming=1:frame_count=%db_frame_count% --input named_pipe://\\.\pipe\ffmpeg_233 --input-metadata metadata.xml --output-rpu _output.rpu --output NULL --progress 1 --overwrite 1 --L11 4,0,00
在第二个cmd窗口输入:
Tools\ffmpeg -i _hlg.hevc -pix_fmt gbrp16le -f rawvideo -y \\.\pipe\ffmpeg_233
(这个过程貌似无法加速,分析一分钟大约要一个小时)
完成后得到一个_output.rpu文件。
3.2使用dovi_tool嵌入rpu到视频:
Tools\dovi_tool.exe inject-rpu -i _hlg.hevc --rpu-in _output.rpu -o injected_output.hevc
4.转换至Profile 8.4并校验
4.1
Tools\dovi_tool -m 4 convert injected_output.hevc --discard -o injected_converted.hevc
4.2
Tools\dvesverifier.exe -i injected_converted.hevc --dv-profile 8.4 --progress --stop-on-error
(若出现error则说明视频不符合Dolby Vision8.4的规格,需要返回重新调整,利用mediainfo查看是否是HLG的HDR视频文件。)
5.进行封装
5.1使用杜比官方工具进行封装:
Tools\mp4muxer -i injected_converted.hevc -o _output_dolby.mp4 --dv-profile 8 --dv-bl-compatible-id 4 --hvc1flag 0 --mpeg4-comp-brand mp42,iso6,isom,msdh,dby1 –overwrite
5.2使用mp4box将原始音轨封装进去:
Tools\mp4box -add _output_dolby.mp4#1:name= -add footage.mp4#2:name= -brand mp42isom -ab iso6 -ab msdh -ab dby1 -itags tool= -new _output_dolby_new.mp4
用mediainfo查看导出的文件信息,如图:

注意HDR格式后面必须出现HLG compatible字样,此时可以用于B站投稿。
(若想收藏,可封装为MKV Tools\mp4box -add _output_dolby.mp4#1:name= -add footage.flac#1:name= -brand mp42isom -ab iso6 -ab msdh -ab dby1 -itags tool= -new _output_dolby_new.mkv)(增加多个音轨,连续 -add 即可)
5.1.1
若有单独提取出来的音轨且是mp4muxer支持的格式(AC3、EC3等,如dolby.ec3),也可以直接在mp4muxer封装
Tools\mp4muxer.exe --dv-profile 8 --dv-bl-compatible-id 4 --input-file injected_converted.hevc --input-file dolby.ec3 --output-file output_dolby.mp4
附注:
若已经封装为MKV,可用以下命令转为MP4,信息不变:
Tools\ffmpeg -y -i _output_dolby.mkv -strict experimental -loglevel error -stats -map 0:v? -map 0:a? -dn -map_chapters -1 -movflags +faststart -c:v copy -c:a copy -strict -2 _Output_File.mp4
若想提取封装好的轨道,可用以下命令:
Tools\mp4demuxer --input _output_dolby.mp4 --output _output.hevc