杜比視界作為一種新興的、效果頗佳的HDR技術,正隨著設備和軟體等的更新換代走進千家萬戶,讓越來越多的人體驗到了HDR效果的魅力,目前,隨著B站等視頻平臺開始接受杜比視界內容的UGC投稿,杜比視界8.4制作一時也成為了制作高質量視頻的選擇,而可惜的是,杜比視界8.4內容的制作至今依然過于依賴macOS或iOS平臺,在Windows等平臺制作Dolby Vision Profile 8.4內容依然還有很高門檻,截至本文發稿,Windows平臺下能完成杜比視界8.4內容創作的軟體仍只有Davinci Resolve 18,且它必須要求計算機有杜比視界解碼能力才能出片,否則則需要杜比視界Trim License,而這玩意并不容易搞到,(然并卵,因為此處我們要用的DEE也要去找Dolby買License... - 所以如果您搞不到這兩個License的任意一個的話,您可以關閉這標簽頁了,,,而且我覺得有功夫去聯系Dolby買License,還不如去買個支持杜比視界編碼的電腦然后用達芬奇實在0.0)——鏈接:杜比視界 UGC 視頻制作 (四)| 使用達芬奇軟體制作杜比視界 UGC 內容
所以在此,我要短記一個使用杜比官方編碼工具Dolby Encoding Engine和一些三方工具,通過命令列方式無條件在Windows等作業系統上轉碼出片Dolby Vision 8.4的方法,
注:該方法原先是B站用戶@nilaoda寫在他專欄里的教程,不過后來不清楚什么原因,他洗掉了其專欄及講解視頻,因此,我想在此備份一下該解決方案,旨在想到萬一可能有人會用到,僅此而已,我在此除了稍微修改了部分內容外,完全照搬了大佬的原文,可以說全部研究成果都歸@nilaoda大佬所有,在此也備注給原作者和Dolby,若您認為本文的發表有任何問題,可在B站私信我@izwb003,我會在看到訊息后第一時間按您要求處理本文,謝謝理解!
據原作者所述,該方法在研究程序中得到了B站用戶@翼格小和奏的幫助,兩人都花費了很長時間完成了相關研究,也走過不少彎路,在此對兩位大佬的努力表示感謝!
也歡迎您去看看大佬的博客,大佬還在博客里寫過好多其他的騷操作,
工具準備
-杜比視界視頻流驗證工具
https://customer.dolby.com/content-creation-and-delivery/dolby-vision-professional-verification-toolkit-lite-v410
-杜比視界編碼引擎(DEE)
https://customer.dolby.com/content-creation-and-delivery/dolby-encoding-engine-with-dolby-ac-4-v521
-FFmpeg
https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z
-dovi_tool
https://github.com/quietvoid/dovi_tool/releases
-mp4muxer
https://github.com/DolbyLaboratories/dlb_mp4base/tree/master/bin
-mp4box(建議使用2022年1月份之前的版本)
https://www.videohelp.com/software/MP4Box/old-versions
-至少16G記憶體的PC(要不它撐不住RAW資料交換處理)
最后,您手上應該有這些檔案:
dee_dv_mdgen.exe
dee_dv5_preproc.exe
dovi_tool.exe
dvesverifier.exe
ffmpeg.exe
license.lic
mp4box.exe
mp4demuxer.exe
mp4muxer.exe
制作步驟
素材要求
PQ/HLG視頻素材,色彩原色bt2020,(但其實基本上什么檔案都可以被libplacebo正確轉換到HLG,包括杜比視界Profile5或SDR素材)
比如下圖素材即為一合格素材:(圖源:bilibili @nilaoda)

STEP1.預壓制
很多時候,你的原始素材直接嵌入RPU并不能通過杜比視頻驗證工具,也未必能過B站的轉碼,為了更大的普適性,這里將無差別進行預壓制,
假設您的視頻檔案叫footage.mp4,請在保存這個footage.mp4的目錄下新建一個檔案夾Tools,把上述檔案放進去,
如果你的素材是PQ-HDR ,或DoVi(P5),請使用如下命令將它轉制到HLG :
Tools\ffmpeg -y -init_hw_device vulkan=vulkan -filter_hw_device vulkan -i footage.mp4 -fps_mode cfr -vf "hwupload,libplacebo=iw:ih:format=yuv420p10le:colorspace=bt2020nc:color_primaries=bt2020:color_trc=arib-std-b67,hwdownload,format=yuv420p10le" -c:v libx265 _hlg.hevc
注:若卡了錯或者只這樣轉制為HLG后成品過檢測工具出Warning,抑或是嫌棄太慢,可以嘗試先硬體加速轉為一個非標的HLG的MP4
Tools\ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -extra_hw_frames 3 -i footage.mp4 -vf "hwupload=derive_device=vulkan,libplacebo=iw:ih:format=yuv420p10le:colorspace=bt2020nc:color_primaries=bt2020:color_trc=arib-std-b67,hwdownload,format=yuv420p10le" -c:v hevc_nvenc -c:a copy outputHLG.mp4
然后再壓制這個HLG的MP4:
Tools\ffmpeg -i outputHLG.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
(從大佬的這篇博文里了解更多)
如果你的素材本身就是HLG-HDR ,可直接使用如下命令壓制:
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
從ffmpeg的輸出中記錄關鍵資訊:總幀數(最后一行輸出的encoded xxx frames),幀率,解析度(在上面的一行Stream里能看到),
之后在cmd里輸入如下內容,將這些資訊創建成變數,方便下面多次使用,
set db_height=解析度AxB的A值
set db_width=解析度AxB的B值
set db_framerate=FPS值
set db_frame_count=總幀數
創建杜比視界metadata xml檔案
由于dee工具接收的是raw視頻流,而這種流的檔案大小大到離譜會分分鐘吃滿硬碟,所以我們不輸出成檔案而采用命名管道推流,
執行以下命令,從命名管道ffmpeg_233讀取資料,并設定格式為 raw 輸入:
Tools\dee_dv_mdgen --input-format raw:pix_fmt=rgb48le: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 _output.xml --progress 1 --overwrite 1 --input named_pipe://\\.\pipe\ffmpeg_233
執行后程式將等待推流,再開一個cmd視窗,使用ffmpeg向命名管道ffmpeg_233輸出raw流資料:
Tools\ffmpeg -i _hlg.hevc -pix_fmt rgb48le -f rawvideo -y \\.\pipe\ffmpeg_233
等待完成后,會得到一個_output.xml元資料檔案
生成杜比視界RPU檔案
在第一個視窗繼續輸入:
Tools\dee_dv5_preproc --input-format raw:pix_fmt=rgb48le:width=%db_height%:height=%db_width%:framerate=%db_framerate%:streaming=1:frame_count=%db_frame_count% --input named_pipe://\\.\pipe\ffmpeg_233 --input-metadata _output.xml --output-rpu _output.rpu --output NULL --progress 1 --overwrite 1 --L11 4,0,0
另一個視窗還是輸入命令輸出raw流:
Tools\ffmpeg -i _hlg.hevc -pix_fmt rgb48le -f rawvideo -y \\.\pipe\ffmpeg_233
注:由于是分析程序,程序可能會非常緩慢且消耗性能,耐心一些,
使用dovi_tool嵌入rpu到ES流
執行以下命令,將output.rpu 嵌入_hlg.hevc 中:
Tools\dovi_tool inject-rpu -i _hlg.hevc --rpu-in _output.rpu -o _hlg_injected.hevc
轉換至Profile 8.4
執行以下命令,將 RPU 轉換為 8.4:
Tools\dovi_tool -m 4 convert _hlg_injected.hevc --discard -o _hlg_injected_converted.hevc
使用官方工具進行校驗
執行以下命令,驗證生成的_hlg_injected_converted.hevc :
Tools\dvesverifier.exe -i _hlg_injected_converted.hevc --dv-profile 8.4 --progress --stop-on-error
正確情況下,不應有Error字樣出現,各Test Case 應是PASS或 - ,若有Warning出現不一定代表失敗,但是很有可能失敗,比如上傳B站無法轉碼等,所以應看一下輸出,嘗試調整,
封裝
首先使用杜比官方工具進行封裝:
Tools\mp4muxer -i _hlg_injected_converted.hevc -o _output_dolby.mp4 --hvc1flag 0 --dv-profile 8 --dv-bl-compatible-id 4 --mpeg4-comp-brand mp42,iso6,isom,msdh,dby1 --overwrite
后使用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
(大佬也有講mp4box和Dolby Vision混流的相關知識,可以去參考大佬的博客)
注:若有單獨提取出來的音軌且是mp4muxer支持的格式,也可以直接在mp4muxer封裝時就封進去,不使用mp4box亦可,
最終成品:(圖源:bilibili @nilaoda)

這個檔案就可以用于投稿了,并且能夠被正確識別為杜比視界,
這個程序并不是最科學的,很多地方是多余的,不過暫時沒有找到更好的方式了……
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509187.html
標籤:其他
