如何释放显卡内存?

如何释放显卡内存?

我正在使用 NVIDIA Quadro P620。

我曾多次使用 ffmpeg 通过 GPU 进行转码,使用以下命令

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.avi -c:v h264_nvenc output.mp4

然后 ffmpeg 停止转码并告诉我:

No decoder surfaces left

似乎 GPU 内存已满且未释放。如果我删除-hwaccel_output_format cuda选项后,转码将再次有效。

如何刷新 GPU 内存?如何在 Windows 10 中管理 GPU 内存?

答案1

这看起来像是一个已知的错误:
#7562 使用 -hwaccel nvdec 打开缺陷会产生“无解码器表面剩余”现象,且带有隔行输入和 3 个或更多 b 帧

这篇文章中提出的解决方法是:

  • 添加参数-extra_hw_frames 3
  • 使用过滤器scale_cudayadif_cuda

答案2

尝试增强上述解决方案。

  ffmpeg -hwaccel cuda -hwaccel_output_format cuda -extra_hw_frames 5 -i input.mp4  -c:v h264_nvenc -b:v 5M output.mp4

我们需要在 hwaccel 输出格式后添加所需的额外线程。如果你在输入后粘贴它,你可能会得到Codec AVOption extra_hw_frames (Number of extra hardware frames to allocate for the user)

您可以根据机器使用 extra_hw_frames。

答案3

这是由于默认的 b 帧数量从 0 变为自动(即 -1)所导致的。发生在这里:https://github.com/FFmpeg/FFmpeg/commit/a0949d0bcb0eee2f3fffcf9a4810c0295d14c0dc

解决方法是在 -c:v h264_nvenc 之后使用 -bf 0 或者在输入之前添加 -extra_hw_frames 5 或更多或者从 -hwaccel cuda 中删除一些线程(线程是这里的另一个错误:https://trac.ffmpeg.org/ticket/8948#comment:4)。

https://trac.ffmpeg.org/ticket/7562是专门针对去隔行内容的,它似乎已经修复。

相关内容