그래픽 카드의 메모리를 어떻게 해제하나요?

그래픽 카드의 메모리를 어떻게 해제하나요?

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 쿠다옵션을 선택하면 트랜스코딩이 다시 작동합니다.

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/a0949d0bcb0eee2f3ffffcf9a4810c0295d14c0dc

해결 방법은 -c:v h264_nvenc 뒤에 -bf 0을 사용하거나 입력 전에 -extra_hw_frames 5 이상을 추가하거나 -hwaccel cuda에서 일부 스레드를 제거하는 것입니다(여기서 스레드는 또 다른 버그입니다.https://trac.ffmpeg.org/ticket/8948#comment:4).

https://trac.ffmpeg.org/ticket/7562특히 콘텐츠 디인터레이싱에 관한 문제인데 수정된 것 같습니다.

관련 정보