我正在尝试将 4K HDR 10 位视频片段转换为 BT.709,尽可能多地保留颜色,同时允许在不支持 HDR 的地方播放该片段。
使用下面的命令,输出结果对大多数人来说一般都可接受,但我的目标是让它尽可能接近原始结果。目前,颜色显示
我当前的命令:
ffmpeg -i input.mov \
-c:v hevc_videotoolbox \
-q:v 72 \
-profile:v main10 \
-g 1 \
-tag:v hvc1 \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=pc,format=yuv420p10le" \
-map 0:v -map 0:a \
output.mp4
请注意,由于其硬件加速,我目前正在使用hevc_videotoolbox
over 。我在配备 M1 Pro 的 2021 MacBook Pro 上进行编码,因此前者的编码速度比标准 x265 库快 30 倍左右。libx265
我尝试过以下解决方案:
- 添加
libplacebo=contrast_recovery=0.4
到过滤器数组的末尾-vf
;我认为它没有做任何事情。 - 附加
eq=gamma=1.1
到滤镜阵列的开头-vf
;增加了伽马值,但看起来太亮了,如果这有意义的话。回想起来,我可能把伽马滤镜设置得太高了。 tonemap=hable
与之交换后tonemap=mobius
;看上去更糟。
这是我的输入文件的相关媒体信息:
Format : ProRes
Format version : Version 0
Format profile : 422 HQ
Codec ID : apch
Duration : 3 min 35 s
Bit rate mode : Variable
Bit rate : 417 Mb/s
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:2
Scan type : Progressive
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:2
Scan type : Progressive
Color primaries : BT.2020
Transfer characteristics : PQ
Matrix coefficients : BT.2020 non-constant
这是一个图片专辑我比较了缩小范围的 4 个编码,其中 1 个 png 包含 4 个屏幕截图,这些屏幕截图以 2x2 网格平铺。我还将它们分别上传到图像比较网站,您可以点击此处查看,您可以通过点击来循环浏览每个屏幕截图。
我是否应该在过滤或整体命令中做一些不同的事情,或者这是我能做到的最接近的事情?从 BT.2020 编码时,有没有更好的方法来保留色彩鲜艳度?我知道我无法做到完美复制 HDR 的色彩鲜艳度,但我希望尽可能接近(同时也在学习有关编码的更多知识,但我对 ffmpeg 及其使用的库还不太熟悉。)
任何指导都将不胜感激。