如何让 FFMPEG 在编码时使用更多 GPU

How to get FFMPEG to use more GPU when encoding

所以情况如下

我每秒接收 20/30 个未压缩的图像。格式为 PNG 或位图。每张照片的大小都在 40 到 50 MB 之间(未压缩后所有照片的大小都相同)。

我想将它们编码为 265 无损视频并使用 FFMPEG 将它们流式传输到 http 服务器。 输出视频是 1920x1080,所以有一些下采样。 允许压缩,但除了向下采样外,什么都不允许丢失。

现在我还处于测试阶段。我有一个 500 样本图像。我正在尝试尽可能有效地对它们进行编码。 我正在使用诸如 :

之类的命令

ffmpeg -hwaccel cuvid -f image2 -i "0(%01d).png" -framerate 30 -pix_fmt p010le -c:v hevc_nvenc -preset lossless -rc vbr_hq -b:v 6M -maxrate:v 10M -vf scale=1920:1080 -c:a aac -b:a 240k result.mp4

我有一个强大的现代 quadro GPU 和一个 6 核英特尔 CPU 和一个 Nvme 硬盘。

GPU 在编码时的使用刚好是 10%,CPU 大约是 30-40%

我怎样才能让 GPU 使用率达到 80%?我要使用 运行 代码的机器至少有一个 quadro 4000(可能更强),我想充分利用它

事情不是这样的。 GPU 不使用标准矢量处理单元进行视频编码。 (好吧,对于颜色转换和缩放之类的事情,它会做一些事情,但并非对所有事情都起作用)。 GPU 具有用于视频编码原语的专用电路。当它们满了,不管你有多少 GPU 核心,它们都会闲置。

因此,要使用“更多”GPU,您不需要强大的 GPU,而是购买具有更多 NVENC 内核的显卡。

如果您的 ffmpeg 是使用 --enable-libnpp 编译的,那么请考虑使用基于 scale_npp filter instead of scale which is CPU only. Example from FFmpeg Wiki: Hardware Acceleration:

的 GPU
ffmpeg -hwaccel cuda -i input -vf scale_npp=1920:1080 -c:v h265_nvenc output.mp4

您可能会发现性能或 GPU 利用率有所提高。