Как освободить память в видеокартах?

Как освободить память в видеокартах?

Я использую NVIDIA Quadro P620.

Я использовал ffmpeg для перекодирования с помощью моего графического процессора несколько раз, используя команду

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? Как управлять памятью GPU в Windows 10?

решение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

Обходной путь - использовать -bf 0 после -c:v h264_nvenc или добавить -extra_hw_frames 5 или более перед входом или удалить некоторые потоки из -hwaccel cuda (потоки - это еще одна ошибка здесь:https://trac.ffmpeg.org/ticket/8948#comment:4).

https://trac.ffmpeg.org/ticket/7562конкретно касается деинтерлейсинга контента, похоже, это исправлено.

Связанный контент