![如何釋放顯示卡記憶體?](https://rvso.com/image/1648621/%E5%A6%82%E4%BD%95%E9%87%8B%E6%94%BE%E9%A1%AF%E7%A4%BA%E5%8D%A1%E8%A8%98%E6%86%B6%E9%AB%94%EF%BC%9F.png)
我正在使用 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_cuda
或yadif_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專門針對去隔行內容,它似乎是固定的。