CVF 한선씨 파이프라인 — v2.0 벡터형 4상균형3진 비디오
개요
CVF (Crowny Video Format) — 세계 최초 벡터형 4상균형3진 비디오 포맷.
완전 한선씨(HanSeon-C) 구현, mp4/mov → CVF → mp4 라운드트립 + 5모드 시뮬레이터.
v2.0 핵심 성과
- 44/44 단위 테스트 통과 — tri9 벡터, 큐브 인코딩/디코딩, 델타 연산, 인식론적 상태
- mp4/mov 멀티포맷 지원 — mp4, mov 소스 모두 변환 성공
- 멀티 해상도 — 27x15 (405큐브), 54x30 (1620큐브) 테스트 통과
- 완전 라운드트립 — mp4 → CVF v2 (3진 벡터) → 디코딩 → mp4 복원
- 5모드 크라우니 시뮬레이터 — 동적 해상도, 키보드 단축키, 큐브 상세 패널
- 델타 압축 — 70-76% (움직임 적은 영상 기준)
- 템플릿 기반 시뮬레이터 생성 — 해상도/fps/통계 동적 주입
아키텍처
mp4/mov → ffmpeg → PPM P6 → python P6→P3 → 한선씨 큐브 벡터 인코딩 → CVF v2
CVF v2 → 한선씨 큐브 디코딩 (I+P 델타적용) → PPM P3 → ffmpeg → mp4
CVF v2 → 한선씨 프레임JS 추출 → Python 템플릿 주입 → 시뮬레이터 HTML
큐브 구조 (27 트릿 = 3 × tri9)
[좌표축 9t] x(3t) y(3t) z(3t) — 공간 위치
[색상축 9t] R(3t) G(3t) B(3t) — tri9 벡터 색상
[메타축 9t] α(3t) 상(3t) 인식(3t) — 투명도, 4상, 인식론
4상 프레임 구조
| 마커 | 4상 | 의미 |
|---|
| GUUU | O+U | GOP 시작 (동기) |
| FUUU | O+U | I-프레임 (키프레임, 절대값 큐브) |
| PUUU | O+U | P-프레임 (델타 큐브, tri9_빼기) |
| EUUU | U | 종료 |
인식론적 상태 (메타축 [6-8])
| 트릿 | 상태 | 의미 |
|---|
| TTT | 확정 (Known) | 원본 데이터 완전 |
| OOO | 미확인 (Unknown) | 아직 확인 안 됨 |
| AAA | 오해 (Misknown) | 잘못된 데이터 |
| ATA | 불가지 (Unknowable) | 양자화 손실 |
시뮬레이터 5모드
- 일반 — RGB 픽셀 렌더링
- 트릿 — 27개 트릿을 T(녹)/O(회)/A(적)으로 시각화
- 4상 — T상(데이터/녹) vs A상(델타/적) 분류
- 델타 — 이전 프레임 대비 변경 픽셀 히트맵
- 색상축 — R/G/B 채널 분리 표시
기능: 재생/정지, 프레임 스텝, 타임라인 탐색, 속도 조절, 마우스 오버 큐브 상세, 키보드 단축키 (Space/1-5/방향키), 델타 통계 바 차트
테스트 결과
| 테스트 | 소스 | 해상도 | 프레임 | 큐브 | 델타 압축 | CVF |
|---|
| 2019 USA | mp4 | 27x15 | 20 | 1,998 | 76% | 55KB |
| 선크림 | mov | 27x15 | 11 | 3,240 | 28% | 89KB |
| USA HD | mp4 | 54x30 | 11 | 5,407 | 70% | 148KB |
| 라운드트립 | mp4 | 27x15 | 20 | 1,998 | 76% | 55KB |
CrownyTVM 발견사항
| 항목 | 버그 | 우회 |
|---|
설정() | 배열 원소 설정 안됨 | 배열[i] = 값 직접 대입 |
반올림() | float 타입 반환, == 비교 실패 | 숫자변환("" + 반올림(x)) |
; | statement separator 불가 | 줄 분리 |
입력 | 예약어 | 소스경로 등으로 대체 |
| 사이클한도 | 1억 사이클 | 프레임수/해상도 조절 |
파일 구조
v2.0 핵심
| 파일 | 역할 |
|---|
CVF벡터_tvm.han | 벡터 엔진: 큐브, tri9 연산, 델타, PPM, 인식론 |
tri_fix.han | tri.han 수정판 (설정() 버그 우회) |
k3논리.han | Kleene K3 3값 논리 (사이클 최적화) |
영상변환v2_tvm.han | mp4/mov→CVF v2 변환기 |
영상재생v2_tvm.han | CVF v2 디코더 + mp4 역변환 + 시뮬레이터 생성 |
시뮬레이터_템플릿.html | 5모드 시뮬레이터 템플릿 (동적 플레이스홀더) |
실제변환v2_tvm.han | 전체 파이프라인 실행기 |
벡터테스트_tvm.han | 44개 단위 테스트 |
라운드트립_단일.han | mp4→CVF→mp4 라운드트립 테스트 |
v1.0 (레거시)
| 파일 | 역할 |
|---|
3진변환_tvm.han | 문자열 기반 3진 라이브러리 |
영상변환_tvm.han / 영상재생_tvm.han | v1 변환기/재생기 |
실행 방법
bashcd /Users/ef/Downloads/CrownyTVM
# 테스트
./target/release/crowny run /Users/ef/crowny-video/벡터테스트_tvm.han
# 전체 파이프라인 (변환 + 디코딩 + 시뮬레이터)
./target/release/crowny run /Users/ef/crowny-video/실제변환v2_tvm.han
# 라운드트립 (mp4 → CVF → mp4)
./target/release/crowny run /Users/ef/crowny-video/라운드트립_단일.han
# 시뮬레이터
open /Users/ef/crowny-video/output/simulator.html
잔여 이슈
- CrownyTVM 사이클한도(1억)로 단일 실행 내 복수 소스 변환 불가 (개별 실행으로 해결)
- P6→P3 변환에 Python 헬퍼 의존
- 디코더에서 마지막 프레임 전 중간 프레임 누락 가능 (파서 상태머신 개선 필요)
- 81x45 이상 해상도는 사이클 한도 테스트 필요