在搜索了互联网之后,我终于成功编译了启用了 OpenCL 的 FFMPEG,这让我能够试图使用我的 NVIDIA P400(应用了流限制补丁)进行 HDR -> SDR 转换。
这在很大程度上要归功于林正浩。不幸的是,我对这些命令没有太深入的理解,我或多或少地复制了各种不同的命令来尝试实现我想要的!
我的问题是硬件色调映射似乎并不比软件色调映射更快。
以下可实现约 0.4 倍的速度:
ffmpeg -hwaccel nvdec -init_hw_device opencl=ocl -filter_hw_device ocl -threads 4 -extra_hw_frames 3 -I INPUT.mkv -vf "format=p010,hwupload,tonemap_opencl=t=bt709:r=tv:p=bt709:m=bt709:tonemap=hable:format=p010,hwdownload,format=p010" OUTPUT
我之前使用软件尝试过的命令也达到了类似的 0.6x - 0.4x:
ffmpeg -I INPUT.mkv -vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p -c:a copy -max_muxing_queue_size 9999 /dev/shm/output.mkv
我知道它们是相当不同的命令,但就像我说的;从各种例子中剪切和粘贴。
我的问题是对于硬件加速色调映射 HDR -> SDR,最有效的命令是什么,理想情况下从 4k 降级到 1080p?(我还没有深入学习)
我希望大家能够看到我已经研究过这个问题而不仅仅是寻求帮助;我曾尝试过但没有找到答案!
先感谢您
答案1
我设法在质量和速度之间找到了一个很好的折衷方案;对我来说令人满意的结果是:FHD SDR 色调映射输出。
对于其他任何人来说;这是我决定今后使用的命令:
ffmpeg -vsync 0 -hwaccel cuda -init_hw_device opencl=ocl -filter_hw_device ocl -extra_hw_frames 3 -threads 16 -c:v hevc_cuvid -resize 1920x1080 -i INPUT -vf "format=p010,hwupload,tonemap_opencl=tonemap=mobius:param=0.01:desat=0:r=tv:p=bt709:t=bt709:m=bt709:format=nv12,hwdownload,format=nv12" -c:a copy -c:s copy -c:v libx264 -max_muxing_queue_size 9999 OUTPUT
这在 67 分 27 秒内完成了从 4K UHD Dsic Rip MKV 的转换,而文件运行时间为 2 小时 1 分 49 秒,平均转换率为 1.8 倍。
需要注意的是,我决定使用软件编码,因为它可以显著提高质量,但编码时间的增加却很少。