1️⃣ H.264가 대체 뭐길래?
H.264(일명 AVC, Advanced Video Coding)는 우리가 매일 보는 거의 모든 영상에 사용되는 최강 비디오 압축 기술입니다.
넷플릭스부터 유튜브, 인스타그램 릴스까지... 심지어 여러분 핸드폰의 동영상도 대부분 이 기술로 압축되어 있습니다.
- 왜 H.264가 인기 있을까요? → 화질은 유지하면서 용량은 대폭 감소
- .mp4, .mkv 파일 안에는 이 H.264로 압축된 데이터가 숨어있습니다
- 넷플릭스 4K 영상이 수십 GB가 아닌 이유가 바로 이것입니다
2️⃣ H.264 압축의 놀라운 효율성 (실제 수치로 보기)
H.264의 강력한 압축 성능은 유튜브, 넷플릭스 같은 스트리밍 플랫폼이 고화질 영상을 저용량으로 제공할 수 있는 핵심 이유 중 하나입니다. 실제 비교 예시로 알아보겠습니다.
H.264 디코딩 시 얼마나 용량이 줄어들까요?
전제 조건
- 해상도: 1920x1080 (FHD)
- 프레임률: 30fps
- 길이: 1분 (60초)
- 원본 포맷: Uncompressed RGB
1. 압축 전: Uncompressed 영상 용량 계산
RGB 포맷 기준 계산식:
1920 x 1080 x 3bytes(RGB) x 30fps x 60초 ≒ 10.8GB
구분 값
해상도 | 1920x1080 |
프레임수 | 1800 (30fps × 60초) |
프레임당 용량 | 약 6MB |
총 용량 | 약 10.8GB |
2. H.264로 인코딩 된 결과 예시
비트레이트 수준 품질 평균 용량 (1분 기준) 압축률
500 kbps | 저화질 스트리밍 (모바일용) | 약 3.8MB | 약 2,800:1 |
2 Mbps | 보통 화질 (유튜브 720p~1080p) | 약 15MB | 약 700:1 |
5 Mbps | 고화질 (넷플릭스 FHD 수준) | 약 38MB | 약 280:1 |
10 Mbps | 고화질 방송 (블루레이 등) | 약 75MB | 약 140:1 |
즉, 10GB짜리 원본 영상도 H.264로 인코딩하면 10~100MB 수준으로 줄어들 수 있습니다.
우리가 고화질의 영상들도 쉽게 볼 수 있는 것도 모두 디코더 덕분이라고 생각하면 됩니다.
유튜브
- 업로드 시 H.264로 인코딩 되어 720p 기준 2~4 Mbps, 1080p는 4~8 Mbps
- 1분짜리 1080p 영상: 약 30~60MB
넷플릭스
- 영상에 따라 다르지만, 1080p 기준 평균 5 Mbps 전후
- 1시간짜리 영상: 약 2~2.5GB
- 동일 해상도의 무압축 영상이 600GB 이상이 될 수 있으므로, 250:1 이상의 압축률
정리
구분 원본 용량 H.264 용량 압축률
1분 FHD 영상 | 약 10.8GB | 약 30~75MB | 140~300배 이상 |
H.264는 영상 품질을 육안으로 거의 손실 없이 유지하면서도, 원본 대비 100~1000배 가까운 압축 효과를 제공합니다.
이 덕분에 유튜브나 넷플릭스는 끊김 없이 재생되는 스트리밍 서비스를 제공할 수 있는 것입니다.
3️⃣ 디코딩 vs 인코딩 (확실히 짚고 넘어가기)
용어 설명 비유하자면?
인코딩 | 원본 영상을 압축하여 저장하는 과정 | 책 내용을 요약노트로 만들기 |
디코딩 | 압축된 데이터를 다시 풀어서 원래 영상으로 복원 | 요약노트를 보고 원래 내용 복원하기 |
유튜브 영상을 시청할 때마다 여러분의 기기는 실시간으로 H.264 디코딩을 수행하고 있습니다.
이 과정이 실시간으로 일어나기 때문에 영상이 버퍼링 없이 재생될 수 있는 것입니다.
4️⃣ 영상 스트림과 프레임 - 핵심 개념 이해하기
스트림(Stream)이란?
연속적으로 흘러가는 데이터 덩어리입니다.
마치 강물처럼 연속적으로 흐르는 특성을 갖습니다.
MP4 파일은 실제로 여러 종류의 스트림이 담긴 '컨테이너'와 같습니다:
- 비디오 스트림 (실제 영상)
- 오디오 스트림 (음성/음악)
- 자막 스트림 (있는 경우)
프레임(Frame)이란?
영상을 구성하는 한 장면, 한 장면의 정지 이미지입니다.
- 30 FPS 영상 = 1초에 30장의 사진이 빠르게 지나가는 것
- 우리 눈은 이를 매끄러운 동작으로 인식하게 됩니다
- 디코딩은 결국 이 이미지들을 하나씩 복원하는 작업입니다
5️⃣ H.264 디코딩 전체 과정 한눈에 보기
[H.264 비디오 파일] → [스트림 추출] → [디코딩(압축 풀기)] → [프레임으로 변환] → [화면 출력/저장]
이 전체 과정을 파이썬으로 단 몇 줄만에 구현할 수 있습니다. 복잡해 보이는 과정도 파이썬 라이브러리를 활용하면 간단히 처리할 수 있습니다.

6️⃣ 파이썬 코드로 직접 구현해 보기
이제 실제로 코드를 작성해 봅시다.
복사 붙여 넣기만 하면 됩니다.
import av # PyAV 라이브러리
import cv2 # OpenCV 라이브러리
# 1단계: H.264 영상 파일 열기
container = av.open('sample_video.mp4') # 여러분의 영상 파일명으로 변경하세요
# 2단계: 비디오 스트림 선택하기
video_stream = container.streams.video[0] # 첫 번째 비디오 스트림 선택
# 3단계: 프레임 단위로 디코딩하기
for frame in container.decode(video=video_stream):
# 4단계: 프레임을 이미지로 변환 (OpenCV 형식)
image = frame.to_ndarray(format='bgr24')
# 5단계: 화면에 표시하기
cv2.imshow('내가 만든 H264 디코더', image)
# 'q' 키를 누르면 종료
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cv2.destroyAllWindows() # 창 닫기
생각보다 정말 간단합니다.
이 코드로 여러분은 이미 H.264 디코더를 만든 것입니다.
PyAV 라이브러리가 내부적으로 복잡한 디코딩 과정을 처리해 주기 때문에 이렇게 간단한 코드만으로도 구현이 가능합니다.
7️⃣ 필수 라이브러리 및 환경 설정
먼저 필요한 라이브러리를 설치해야 합니다.
pip install av opencv-python
- PyAV: FFmpeg 기반의 강력한 미디어 처리 라이브러리
- OpenCV: 컴퓨터 비전의 대표주자, 영상 처리와 화면 출력 담당
중요: PyAV가 제대로 작동하려면 FFmpeg가 필요합니다.
- 맥: brew install ffmpeg
- 윈도우: FFmpeg 공식 사이트에서 다운로드 후 환경변수 설정
- 리눅스: sudo apt install ffmpeg
8️⃣ 자주 발생하는 오류와 해결책
문제 상황 원인 해결법
"FFmpeg not found" 에러 | FFmpeg 미설치 | 위 설치 방법 참고 |
영상이 이상하게 깨짐 | 색상 포맷 문제 | format='rgb24'로 변경 시도 |
너무 느리게 재생됨 | 고해상도 영상 | cv2.resize()로 크기 줄이기 |
"Stream not found" 에러 | 파일 손상 또는 지원 안 됨 | 다른 샘플 영상으로 시도 |
9️⃣ 총정리
- H.264는 영상 압축 기술, 디코딩은 압축 풀기, 스트림은 데이터 흐름, 프레임은 한 장면의 이미지
- H.264는 원본 대비 100~1000배 가까운 압축 효과를 제공하면서도 품질 손실은 최소화
- 파이썬의 PyAV와 OpenCV로 몇 줄의 코드만으로 영상 디코더 구현 가능
'IT 이야기' 카테고리의 다른 글
진짜 AI vs 자동화 가전, 차이 알고 사자! (2) | 2025.06.18 |
---|---|
GPT보다 똑똑하다고? 구글 제미나이 2.5가 온다 (1) | 2025.05.26 |
영상 보낼 때 화질이 바뀌는 이유? H.264 인코더가 하는 일! (0) | 2025.05.09 |