ffmpeg - 如何学习 h264_nvenc 编码器的有效质量?

标签 ffmpeg rendering nvidia x264 nvenc

我试图确定 h264_nvenc 视频编码器的各种 cq(“恒定质量”)值的最终产品质量。
要通过 ffmpeg 并以目标质量使用 h264_nvenc 编码器,我按照 Nvidia's documentation 中的说明进行操作。 ,链接 anchor 的最后一段。
我指定了可变比特率控制模式 (rc=vbr_hq) 和目标质量 (cq=)。这应该足以测试 cq 的各种值。故事应该到此结束。
但是,对于任何 cq 值,它只会输出相同质量的超大尺寸视频。 (使用 cq=1、cq=20 和 cq=51 都输出具有相同哈希的文件。)
根据文档,我还可以指定一个 maxBitRate (maxrate=)。如果我没有指定 maxrate,文档会指出:

If maxBitRate is not specified, the encoder will use as many bits as needed to achieve the target quality.


但这不是我观察到的行为。我看到编码器使用尽可能多的位,而不是需要的位。生成的视频的总比特率约为 100Mb/s。将源视频加倍。
如果我确实设置了最大速率,编码器会观察到它。但是,如果我必须为每个 cq 值正确设置比特率,那么 cq 值的意义何在?我只需设置 cq=1 并测试各种比特率,这将仅适用于特定视频。
是否有一些警告或输出表明比特率不足以达到我没有看到的目标质量?这至少可以让我暴力破解。
还是我误解了这些设置之间的关系?

最佳答案

恒定质量正如它所说的那样,它保持恒定的感知质量水平。它将改变压缩量以保持所需的质量。生成的文件大小与此用例无关。
添加最大速率用于避免比特率峰值,例如当您通过网络发送视频时,您通常知道该限制是多少。
如果您想评估视频压缩质量,可以使用 VMAF 等算法。命名一个。
更多阅读:
CRF Guide
Understanding Rate Control Modes

关于ffmpeg - 如何学习 h264_nvenc 编码器的有效质量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64038626/

相关文章:

perl - 我可以在 Perl 脚本内部使用 ffmpeg 而不需要系统调用吗?

javascript - Node.js ffmpeg 从 2 个或更多 jpg 图像创建 mp4 视频

docker - Tensorflow-serving docker 容器添加了 GPU 设备,但 GPU 的利用率为 0%

c - 链接 libavcodec 和 libavformat : Undefined references

video - 做 -c :v copy 时用 ffmpeg 分割一个精确的 .ts 片段

algorithm - TTF字体的渲染曲线

algorithm - 是否有任何算法可以使真实照片更像假照片?

python: cairoplot gantt_chart 渲染问题

OpenCL死锁可能性

linux - 在Ubuntu 16.04 LTS上安装NVIDIA cuda驱动程序时未找到内核头错误