FFmpeg h264 abr과 싸운 이야기
nmRC는 뉴로모픽신경망 모델입니다. 비디오 인코더 도장깨기 하러갔다가 박살나고 돌아왔습니다(48시간 버린건 아니고.. 교훈은 얻었네요)
이제 비디오 인코더는 포기하고 이제 postgresql.auto.conf 를 ALTER SYSTEM 쿼리로 random_page_cost, work_mem 등의 파라미터를 실시간 동적으로 최적화 제어하는 도장깨기 하러 갑니다
물론 nmRC는 H264 ABR에 비해서 아래와 같이 구조적으로 불리한점이 있습니다
- x264 ABR는 인코더 내부의 lookahead, frame-type planning, motion/RDO cost, macroblock-level rate-distortion 정보를 직접 봅니다.
- nmRC는 외부에서 complexity / motion / buffer / QP 같은 요약 신호만 보고 간접 제어합니다.
그래서 ABR는 “어디에 비트를 써야 최종 화질이 가장 좋은지”를 내부적으로 정확히 아는데, nmRC는 그걸 바깥에서 추정해야 합니다.
즉 ABR는 내부 최적화기, nmRC는 외부 메타 제어기라서 구조적으로 불리합니다.
한 줄로 말하면:
nmRC는 인코더 바깥에서 추정으로 제어하고, ABR는 인코더 안에서 정답에 가까운 정보를 직접 쓴다는 차이입니다.
[ 테스트 결과 ]
c.mp4 기준 새 compare와 이전 b.mp4 compare를 나란히 보면, 현재 nmRC는 두 테스트 모두 ABR보다 열세입니다. 다만 열세의 양상은 다릅니다.
1. 현재 c.mp4 테스트
기준 파일:
- 원본: nmrc/c.mp4
- nmRC: nmrc/nmrc_compare_nmrc.mp4
- ABR: nmrc/nmrc_compare_x264_abr.mp4
실제 컬러 mp4 기준 결과:
- nmRC bitrate: 9.27 Mbps
- ABR bitrate: 7.47 Mbps
- nmRC가 비트 +24.1% 더 사용
- nmRC 평균 PSNR: 48.497 dB
- ABR 평균 PSNR: 51.376 dB
- nmRC가 -2.879 dB 열세
- nmRC 최저 PSNR: 33.898 dB
- ABR 최저 PSNR: 44.573 dB
- nmRC가 -10.675 dB 열세
이건 꽤 심각합니다.
즉 c.mp4에서는 nmRC가 비트를 더 많이 쓰고도 평균/최저 품질이 모두 더 나쁩니다.
특히 min PSNR 차이가 너무 커서, 실제 시청 품질에서 “어느 구간은 확 무너진다”는 문제가 분명합니다.
내부 proxy 로그도 이 방향을 뒷받침합니다.
- 내부 proxy 평균: 43.19
- 내부 proxy 최저: 35.58
- 0-299 구간 평균: 41.86
- 300-899 구간 평균: 42.64
- 900-1777 구간 평균: 44.02
즉 c.mp4에서는 내부적으로는 “나쁘지 않다”고 느끼지만, 실제 컬러 최종 품질은 그보다 더 나쁩니다.
이 말은 gray proxy와 실제 최종 컬러 encode 사이의 괴리도 존재한다는 뜻입니다.
2. 이전 b.mp4 테스트
이전 b.mp4 비교에서 확보했던 실제 컬러 mp4 기준 결과:
- nmRC bitrate: 14.23 Mbps
- ABR bitrate: 14.94 Mbps
- nmRC가 비트 -4.8% 덜 사용
- nmRC 평균 PSNR: 46.323 dB
- ABR 평균 PSNR: 49.477 dB
- nmRC가 -3.154 dB 열세
- nmRC 최저 PSNR: 35.823 dB
- ABR 최저 PSNR: 42.033 dB
- nmRC가 -6.210 dB 열세
즉 b.mp4에서는 nmRC가 비트를 조금 아끼는 대신 품질이 떨어지는 구조였습니다.
좋게 보면 “절약형이지만 아직 품질 효율이 부족한 상태”였습니다.
- b.mp4: nmRC는 덜 쓰고 더 나쁨
- c.mp4: nmRC는 더 쓰고도 더 나쁨
그래서 현재 기준으로는 c.mp4가 더 안 좋습니다.
특히 c.mp4에서의 문제는 단순 절약 성향이 아니라, 비트 배분 자체가 비효율적이라는 뜻입니다.
ABR는 7.47Mbps로도 51.38 dB / min 44.57 dB를 만들었는데, nmRC는 9.27Mbps를 써도 48.50 / 33.90입니다.
그래서 현재 nmRC는:
- 제어 내부에서는 “이 정도면 괜찮다”고 판단하는데
- 최종 컬러 결과에서는 특정 구간이 크게 무너집니다
특히 c.mp4처럼 세로형 30fps, 원본 자체가 저비트레이트 AV1인 경우에는 ABR가 거의 투명 재현에 가까워지는데, nmRC는 그 이점을 살리지 못하고 있습니다.
결론
- 현재까지의 실제 컬러 mp4 비교 기준으로는 nmRC가 ABR보다 우세한 테스트가 없습니다.
- b.mp4에서는 “덜 쓰지만 더 나쁜” 상태
- c.mp4에서는 “더 쓰고도 더 나쁜” 상태
- 따라서 지금 nmRC의 문제는 단순 cold start가 아니라, proxy 품질지표와 실제 최종 품질의 불일치 + ABR 대비 비트 배분 전략 부족입니다.