グラフィック カードのメモリを解放するにはどうすればいいですか?

グラフィック カードのメモリを解放するにはどうすればいいですか?

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特にコンテンツのインターレース解除に関する問題ですが、修正されたようです。

関連情報