FFMPEG / x264: 단일 패스: 시작 시간 비트 전송률을 어떻게 높이나요?

FFMPEG / x264: 단일 패스: 시작 시간 비트 전송률을 어떻게 높이나요?

VBV 크기가 지정된 단일 패스 모드를 사용할 때 libx264는 아마도 증거 부족(또는 버그)으로 인해 초기에 비트 전송률을 "샌드백"합니다. (이것은 단일 패스 인코딩으로 지나치게 높은 초기 비트 전송률을 처리한 이 질문에 대한 아이러니한 후속 조치입니다.샌즈VBV 사양)

자세한 내용은 하단의 비트 전송률 그래프를 참조하세요. 원래의 하락을 확인하고 정규화 전 과잉 수정("아, 비트가 좀 남았습니다!")을 확인하세요. 이는 2단계 솔루션에서 수정됩니다. 이 두 그래프에서 초기 I-프레임이 부족한 것은 도구 버그일 가능성이 높습니다(초기 I-프레임의 PTS 값은 0.15초입니다).

이 효과는 긴 자산의 "분할, 인코딩 및 재조립" 병렬 처리를 방지하므로 각 세그먼트가 시작될 때 품질이 향상됩니다.

이는 라이브 스트림에 허용되지 않는 솔루션인 듀얼 패스 인코딩을 통해 해결할 수 있습니다(단, 병렬화할 경우 듀얼 패스 인코딩 비용을 지불할 수 있음).

제가 바라는 해결책은 두 가지입니다. 어떤 도움이라도 환영받을 것입니다.

  1. 인코더가 출력을 생성하기 전에 초기에 더 많은 프레임을 보유하도록 지시하여 초기 샌드백 효과를 줄이는 단일 패스 솔루션

  2. 제한된 2패스 인코딩을 "파이프"로 수행하는 방법: 파이프로서의 전체 2패스 인코딩은 물론 의미가 없지만 패스 피드백 기간이 1과 같은 "마이크로 패스"를 갖는 것이 가능해야 합니다. 두번째. 이는 이러한 짧은 효과를 해결하기 위한 단일 패스 솔루션보다 훨씬 덜 이상적이지만 (1)이 불가능한 경우 허용될 수 있습니다.

    • 단일 패스 비트 전송률 그래프: 초기 "샌드백 딥"에 유의하세요. 다음으로 생성됨:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -bufsize 1000k onepass.mp4

여기에 이미지 설명을 입력하세요

  • 2패스 비트 전송률 그래프: 거의 이상적인 결과입니다. 이 최종 형식은 반드시 필요하지는 않습니다. 초기 샌드백을 피하는 것으로 충분합니다. 다음으로 생성됨:

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 1 -f mp4 /dev/null

ffmpeg -i 1080-60fps.mp4 -vf "scale=1200:720" -b:v 1000k -pass 2 twopass.mp4

2패스 비트레이트 그래프: 예상된 결과입니다.

  • 단일 패스 인코딩의 첫 번째 프레임 섹션

여기에 이미지 설명을 입력하세요

  • 2패스 인코딩의 첫 번째 프레임 섹션

여기에 이미지 설명을 입력하세요

관련 정보