비디오 인코딩은 원시 영상 데이터를 압축 포맷으로 변환하는 기술이다. H.264, H.265(HEVC), AV1, VP9 등의 코덱을 사용해 화질을 유지하면서 파일 크기를 대폭 줄인다.
주요 코덱 비교
| 코덱 | 출시 | 압축 효율 | 특허 | CPU 부하 |
|---|
| H.264 (AVC) | 2003 | 기준 | 특허 있음 | 낮음 |
| H.265 (HEVC) | 2013 | H.264 대비 50% | 특허 있음 | 중간 |
| VP9 | 2013 | H.265 동등 | 무료 | 높음 |
| AV1 | 2018 | H.265 대비 30% | 무료 | 매우 높음 |
| H.266 (VVC) | 2020 | AV1 대비 50% | 특허 있음 | 매우 높음 |
핵심 개념
GOP (Group of Pictures):
- I-frame: 완전한 키프레임 (독립적 디코딩)
- P-frame: 이전 프레임과의 차이만 저장
- B-frame: 앞뒤 프레임 참조로 최고 압축
비트레이트:
- CBR (Constant Bit Rate): 일정한 비트레이트
- VBR (Variable Bit Rate): 장면 복잡도에 따라 조절
- CRF (Constant Rate Factor): 품질 기반 가변 비트레이트
FFmpeg 활용
bash
# H.264 인코딩 (CRF 23 = 기본 품질)
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output_h264.mp4
# H.265 (HEVC) - H.264 대비 절반 크기
ffmpeg -i input.mp4 -c:v libx265 -crf 28 -preset medium -tag:v hvc1 -c:a copy output_h265.mp4
# AV1 (libaom)
ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -cpu-used 4 output_av1.mkv
# 4K HDR 스트리밍용 ABR 래더 생성
ffmpeg -i input.mp4 -vf scale=1920:1080 -c:v libx264 -b:v 4000k 1080p.mp4 -vf scale=1280:720 -c:v libx264 -b:v 2000k 720p.mp4 -vf scale=854:480 -c:v libx264 -b:v 800k 480p.mp4
적응형 비트레이트 스트리밍 (ABR)
HLS (HTTP Live Streaming):
- Apple 개발, .m3u8 플레이리스트
- 2~10초 세그먼트로 분할
- 대역폭에 따라 화질 자동 전환
DASH (Dynamic Adaptive Streaming over HTTP):
- 국제 표준, .mpd 매니페스트
- 더 세밀한 적응 알고리즘
- YouTube, Netflix 사용
WebRTC:
- 실시간 통신용 (저지연)
- P2P 또는 SFU 서버 구조
관련 문서