![그래픽 카드의 메모리를 어떻게 해제하나요?](https://rvso.com/image/1648621/%EA%B7%B8%EB%9E%98%ED%94%BD%20%EC%B9%B4%EB%93%9C%EC%9D%98%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%A0%9C%ED%95%98%EB%82%98%EC%9A%94%3F.png)
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특히 콘텐츠 디인터레이싱에 관한 문제인데 수정된 것 같습니다.