![Как освободить память в видеокартах?](https://rvso.com/image/1648621/%D0%9A%D0%B0%D0%BA%20%D0%BE%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C%20%D0%B2%20%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D0%BA%D0%B0%D1%80%D1%82%D0%B0%D1%85%3F.png)
Я использую 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конкретно касается деинтерлейсинга контента, похоже, это исправлено.