![¿Cómo liberar memoria en tarjetas gráficas?](https://rvso.com/image/1648621/%C2%BFC%C3%B3mo%20liberar%20memoria%20en%20tarjetas%20gr%C3%A1ficas%3F.png)
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_cuda
oyadif_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.