我想压缩一个每个像素有 16 位信息的深度图。一般来说,这样的深度图可以以不同的方式存储,例如 p016le、gray16le、yuv420p16le、yuv444p16le……但为简单起见,我们假设深度图是 yuv420p16le(其中 y 通道包含深度)。
由于某种原因,当使用hevc_nvenc
(我使用 NVIDIA GTX 1660 Ti GPU)进行编码时,ffmpeg(命令行工具)将像素格式更改为 10 位或 12 位变体(p010le、gray12le、yuv420p10le、yuv444p12le、...),但是我想保留完整的 16 位,因为这会影响存储深度的质量。
例如:
ffmpeg.exe -s:v 1920x1080 -r 30 -pix_fmt yuv420p16le -i depth_yuv420p16le.yuv -c:v hevc_nvenc -pix_fmt yuv444p16le output.mp4
如果我在 output.mp4 上使用 ffprobe,它会告诉我底层像素格式实际上是yuv444p10le。(解码并查看原始像素数据,我可以确认精度已从 16 位降低到 10 位)。
我希望 16 位压缩是可能的,因为根据
ffmpeg -h encoder=hevc_nvenc
支持的像素格式有:
hevc_nvenc: yuv420p nv12 p010le yuv444p p016le yuv444p16le bgr0 rgb0 cuda d3d11
但是 p016le 会导致 p010le 输出,yuv444p16le 在 yuv444p10le 中。
有谁知道问题可能出在哪里?我应该重新安装 ffmpeg(版本 4.3.2-2021-02-27-essentials_build-www.gyan.dev)吗?是因为 Windows 10 的编码/解码能力有限吗?购买HEVC 视频扩展有助于解决这个问题吗?
附加信息: usinglibx256
看起来不适用于此目的,因为支持的像素格式是:
libx256 : yuv420p yuvj420p yuv422p yuvj422p yuv444p yuvj444p gbrp yuv420p10le yuv422p10le yuv444p10le gbrp10le yuv420p12le yuv422p12le yuv444p12le gbrp12le gray gray10le gray12le
任何帮助将不胜感激。