![グラフィック カードのメモリを解放するにはどうすればいいですか?](https://rvso.com/image/1648621/%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%20%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AE%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%92%E8%A7%A3%E6%94%BE%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%81%84%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.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 から自動 (つまり -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#コメント:4)。
https://trac.ffmpeg.org/ticket/7562特にコンテンツのインターレース解除に関する問題ですが、修正されたようです。