FFMPEG 고정 비트레이트 트랜스코딩

FFMPEG 고정 비트레이트 트랜스코딩

나는 FFMPEG를 가지고 놀았고 가능한 한 일정한 스트리밍 비트 전송률을 달성하려고 노력하고 있습니다. FFMPEG 문서와 예제를 살펴봤지만 Wireshark로 결과 비트 전송률을 측정할 때 여전히 일정한 비트 전송률을 얻지 못하고 -maxrate 매개변수를 초과하는 주기적인 비트 전송률 피크가 표시됩니다.

현재 IP 캠에서 RTSP 스트림을 가져온 다음 다음 명령(또는 그 변형)을 사용하여 로컬 UDP 스트림으로 트랜스코딩합니다.

ffmpeg -rtsp_transport tcp -i "RTSP_IP" -an -c:v libx264 -x264-params "hal-hrd=cbr:force-cfr1" -b:v 100k -minrate 100k -maxrate 100k -bufsize 150k -threads 1 -flush_packets 0 -f mpegts "udp://@10.100.3.30:5004?packet_size=1316&bitrate=100000"

위의 예에서 나는 100Kbps의 최대 비트 전송률을 위해 노력하고 있지만 진폭이 -bufsize 매개변수의 영향을 받는 비트 전송률 스파이크를 여전히 볼 수 있습니다. 그러나 버퍼 크기를 너무 작게 만들면 이미지 품질이 너무 자주 재조정됩니다. 결과 Wireshark 그래프는 다음과 같습니다.

산출

세 가지 질문:

  1. 내가 여기서 잘못하고 있는 것이 있나요? - 내가 무엇을 하든 항상 최고 속도가 -maxrate를 넘는 것을 봅니다.
  2. 내 이해는 FFMPEG가 비트 전송률에 대해 소프트 캡을 수행한다는 것입니다. 이 올바른지?
  3. 비트 전송률에 대한 하드 캡을 어떻게 달성할 수 있습니까?

해당 문제에 대해 도움을 주셔서 감사합니다. 나는 한동안 이 문제에 대해 고민해왔기 때문에 정말 감사하겠습니다!

관련 정보