CVF 수리 3전제 완료 — 188.98× 축소 실증 (2026-07-12)
개요
적대검증 권고3 실행: ③델타 폴백 수리 + ①5트릿/바이트 b5 패킹 + ②deflate. 워크플로 4에이전트(수리→v4컨테이너→실측→opus 적대감사 pass).
실측 매트릭스 (class_o1-1, 237초 108×60/9fps)
| 변형 | 크기 | 기존 대비 | h264 대비 | 프레임 분포 |
|---|
| 기존(버그, 전량인트라) | 138,599,464B | 1× | 1775× | F 2133/P 0/M 0 |
| A: ③만 (gop9) | 79,203,818B | 1.75× | 1015× | F 239/M 1894 |
| B: ③ gop27 | 71,386,814B | 1.94× | 915× | F 104/M 2029 |
| C: ③+① b5 | 16,232,222B | 8.54× | 208× | 동일 |
| D: ③+①+② b5+deflate | 733,405B | 188.98× | 9.40× | 동일 |
| (기준) h264 crf23 동일스펙 | 78,058B | — | 1× | — |
기여 분해: ①패킹 4.40× × ②deflate 22.13× ≈ 97× ≫ ③+gop27 1.94× —
병목의 대부분은 텍스트 직렬화+무압축 서빙(진단 정합). 이 콘텐츠는 P(델타)=0·M(모션) 95% — talking-head에서 모션추정이 타일델타를 상시 이김.
수리 내역
- ③ 폴백(cvf-codec.js:642-677): 델타/모션 씨앗수>W*H/32 → 무조건 인트라 → 인트라 실계산 후 작은 쪽 채택으로 교정(조기채택 경로는 비용 불변). 구버그 재현 리플레이: 15/15 프레임에서 구코드는 7.4× 큰 인트라를 강제했음을 실증. GUUU 부기 일관화(폴백 인트라에도 경계 기록 — ctp-stream findGOPs 정합).
- ① b5 패킹 + ② deflate(v4.0 컨테이너, 스펙 부록E 실체 기준 신설): 텍스트 헤더 유지+인코딩:b5/압축:deflate/본문바이트 키, 바이너리 프레임 레코드 스트림. 243개 전 5트릿 조합 왕복·2133프레임 전수 SHA1 bit-identical.
- 한선씨 동반(실동작): lib/cvf-codec.한선(폴백판정 4/4)·lib/트릿5패킹.한선(42트릿↔9바이트 왕복 PASS, 균형나머지 함정은 나머지3/몫3 절단나눗셈으로 회피). 뇌 학습 완료.
- 하위호환: v3 텍스트 디코드 3경로 bit-identical — 기존 23편 재인코딩 불필요, 재생 무영향.
잔여 위험(기록 — 후속 결정 대상)
- v4는 단일 deflate 스트림이라 시킹 회귀(GOP 인덱스 없음, 전체 inflate 후 순차) — 스트리밍 소비자 생기기 전 v4.1 GOP 인덱스 필요.
- v3 텍스트 전용 소비자 3종 v4 미지원(crowny-video server.js·index.html 임베드 디코더, crowny-app cvf-player.html) — 현재 class는 mp4라 무해.
- 폴백이 씨앗 '개수' 비교(바이트 아님) — 모션 씨앗이 인트라보다 길어 경계 케이스에서 바이트 역전 가능(저위험).
- 23편 재인코딩 여부 = 사용자 결정(수리는 신규 인코딩부터 적용).
관련
gop9↔27 간 3/5 표본 픽셀 불일치는 참조체인 차이(손실 코덱 특성)로 판정 — 동일 인코딩 왕복은 전수 bit-identical. 워크플로 wf_4506064d-651.