FFmpeg의 메모리 사용량을 제한하는 방법이 있습니까?

FFmpeg의 메모리 사용량을 제한하는 방법이 있습니까?

Windows Server 2016을 실행하는 VM의 Docker 컨테이너 내에서 일부 비디오 인코딩을 위해 명령줄을 통해 FFmpeg를 사용하고 있습니다. 이것이 사용 가능한 RAM의 상당 부분을 사용하고 있다는 점이 우려됩니다. 동일한 VM에서 실행되는 다른 컨테이너가 많기 때문에 이는 바람직하지 않습니다.

설정이나 명령줄 인수를 통해 FFmpeg에서 사용하는 RAM을 제한할 수 있습니까?그렇지 않다면 비슷한 결과를 얻으려면 어떻게 해야 합니까?

다음은 FFMPEG 외부에서 고려한 몇 가지 (이상적이지 않은) 가능성입니다. 이에 대해 어떤 생각이라도 주시면 감사하겠습니다.

  • Windows 시스템 리소스 관리자를 사용하여 프로세스 RAM 사용량 제한
  • 8GB 이상의 RAM을 사용할 수 있는 동안 FFmpeg만 인코딩을 시작할 수 있도록 허용하는 논리 적용
  • 제한된 RAM이 장착된 도커에서 실행하세요.

다음 명령을 통해 비디오(소형 35MB)를 GIF로 변환할 때 메모리 사용량(4GB 이상) 문제가 발생합니다.

ffmpeg -i C:\test\vidmp4.mp4 -vf "fps=24,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" C:\temp\testgif.gif

답변1

ffmpeg실제로는 RAM을 사용하지 않습니다.필요. 일반적으로 이는 매우 적습니다.

ffmpeg프로세스가 실제로 많은 RAM을 사용하는 경우 (일부 판독값을 잘못 해석한 경우) RAM 할당을 제한하면 OOM 조건과 충돌하게 됩니다.

명령줄 에 대해 알려주시면 ffmpegRAM을 덜 사용하는 대안을 제안해 드릴 수도 있습니다.

답변2

분할 필터를 사용할 때 광범위한 RAM 사용량을 경험했습니다. 어떤 상황에서는 분할 필터를 피할 때 RAM 사용량이 훨씬 적었습니다.

분할을 사용하는 대신 동일한 입력을 두 번 로드하고 두 입력을 병합할 때까지 개별적으로 처리할 수 있습니다(추가 처리 시간이 필요할 수 있음).

따라서 귀하의 경우 다음과 같이 시도해보십시오.

ffmpeg -i C:\test\vidmp4.mp4 -i C:\test\vidmp4.mp4 -vf "[0:v]fps=24,scale=320:-1:flags=lanczos[s0];[1:v]fps=24,scale=320:-1:flags=lanczos[s1];[s0]palettegen[p];[s1][p]paletteuse" C:\temp\testgif.gif

관련 정보