에듀테크 프로젝트 대시보드
비디오 압축 원리
동영상은 초당 수십 장의 정지 이미지(프레임)를 이어붙인 것입니다. 압축을 전혀 하지 않으면 Full HD(1920×1080), 30fps, 픽셀당 RGB 3바이트 기준으로 계산했을 때 아래처럼 어마어마한 용량이 필요합니다. 실제 유튜브 1080p 스트리밍은 이보다 약 180배 작은 비트레이트로 재생됩니다 — 그 비밀이 바로 I-frame / P-frame / B-frame 구조입니다.
다른 프레임을 참조하지 않고 이미지 전체를 독립적으로 인코딩합니다.
JPEG처럼 DCT + 양자화를 씁니다(관련: /dct). 용량이 크지만 어디서든 디코딩을 시작할 수 있는 기준점입니다.
이전 프레임을 참조해, 움직인 위치(모션 벡터)와 픽셀 차이(잔차)만 저장합니다. 대부분의 배경은 그대로이므로 용량이 I-frame의 수 % 수준으로 작습니다.
이전 과 이후 프레임을 동시에 참조해 예측합니다. 압축률이 가장 높지만, 디코딩 순서가 재생 순서와 달라지는 대가가 있습니다.
예시 GOP(8프레임, IPPPPPPP 구조) · 프레임별 상대 인코딩 크기 참고용 그래프
아래 데모는 실제 코덱이 쓰는 완전 탐색 블록 매칭(Exhaustive Block Matching)을 축소 재현합니다. 원(객체)이 프레임마다 오른쪽으로 움직이면, 인코더는 현재 프레임의 블록과 가장 비슷한 영역을 이전 프레임의 탐색 범위(±32px) 안에서 찾아 SAD(절대 차이 합)가 가장 작은 위치를 모션 벡터로 선택합니다. 이동 거리 슬라이더를 탐색 범위보다 크게 올려보면 매칭이 실패하는 것도 확인할 수 있습니다.
이전 프레임(참조) — 초록 화살표 = 찾은 모션 벡터
현재 프레임 — 파란 사각형 = 인코딩할 매크로블록
| 타입 | 참조 프레임 | 압축률 | 디코딩 특징 |
|---|---|---|---|
| I | 없음 (독립) | 낮음 (기준 100%) | 단독으로 디코딩 가능 · 탐색(seek) 지점 |
| P | 이전 프레임 1장 | 높음 (I 대비 5~15%) | 참조 프레임이 먼저 디코딩되어 있어야 함 |
| B | 이전 + 이후 프레임 | 가장 높음 | 미래 프레임을 먼저 받아야 해 지연·순서 재배열 발생 |
이미지 1장의 압축(DCT·양자화)은 /dct 페이지, 데이터 자체의 무손실 압축은 /lz77·/huffman 페이지 참고