¿Cómo liberar memoria en tarjetas gráficas?

¿Cómo liberar memoria en tarjetas gráficas?

Estoy usando NVIDIA Quadro P620.

He usado ffmpeg para transcodificar con mi GPU varias veces usando el comando

ffmpeg -hwaccel cuda -hwaccel_output_format cuda -i input.avi -c:v h264_nvenc output.mp4

Entonces ffmpeg deja de transcodificar y regañarme:

No decoder surfaces left

Parece que la memoria de la GPU se llenó y no se liberó. si lo elimino-hwaccel_output_format cudaopción, la transcodificación funciona nuevamente.

¿Cómo limpio la memoria de la GPU? ¿Cómo administro la memoria de la GPU en Windows 10?

Respuesta1

Esto parece un error conocido:
#7562 defecto abierto usando -hwaccel nvdec produce 'No quedan superficies de decodificador' con entrada entrelazada y 3 o más fotogramas b.

Las soluciones propuestas en esta publicación fueron:

  • Agregar el parámetro-extra_hw_frames 3
  • Utilice el filtro scale_cudao yadif_cuda.

Respuesta2

Intentando mejorar la solución anterior.

  ffmpeg -hwaccel cuda -hwaccel_output_format cuda -extra_hw_frames 5 -i input.mp4  -c:v h264_nvenc -b:v 5M output.mp4

Necesitamos agregar los hilos adicionales que se necesitan después del formato de salida hwaccel. Si lo pegas después de la entrada, es posible que obtengasCodec AVOption extra_hw_frames (Number of extra hardware frames to allocate for the user)

Puedes jugar con extra_hw_frames según la máquina.

Respuesta3

Esto se debe al cambio en la cantidad predeterminada de fotogramas b de 0 a automático (es decir, -1). Sucedió aquí:https://github.com/FFmpeg/FFmpeg/commit/a0949d0bcb0eee2f3fffcf9a4810c0295d14c0dc

La solución alternativa es usar -bf 0 después de -c:v h264_nvenc o agregar -extra_hw_frames 5 o más antes de ingresar o eliminar algunos subprocesos de -hwaccel cuda (los subprocesos son otro error aquí:https://trac.ffmpeg.org/ticket/8948#comment:4).

https://trac.ffmpeg.org/ticket/7562se trata específicamente de desentrelazar contenido, parece estar arreglado.

información relacionada