如何釋放顯示卡記憶體?

如何釋放顯示卡記憶體?

我正在使用 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 更改為 auto(即 -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專門針對去隔行內容,它似乎是固定的。

相關內容