YunDaeHyeon
← Lab

비디오 코덱 탐구하기

스터디2025.12.26
  • 비디오 코덱

비디오 코덱이란?

비디오 코덱은 비디오 데이터를 압축해서 작게 만들고, 다시 풀어서 재생할 수 있게 해주는 규격이다.

⭐ 결론부터 말하면 인코더 가 비디오를 압축시켜 비트 스크림 으로 만들고 디코더가 다시 프레임들로 복원하는 구조이다. → 이때 연산, 데이터량, 발열 등이 전부 트레이트오프 관계에 있다!

💡 비디오 코덱의 개념

  • Codec = COder + DECoder로 비디오 코덱은 이미지 시퀀스를 호율적으로 압축하고 복원하기 위한 규격(H.264, H265, VP9, AV1, MJPEG 등)을 의미한다.

  • 궁극적인 목적은 저장 공간과 네트워크 대역폭을 줄이면서 사람 눈에 보이는 화질 손실을 최소화하는 것이다.

동작 방식은 쉽게 설명하면 아래와 같다.

  1. 프레임 내부 압축 : 블록 분할, 변환(DCT 계열), 양자화로 한 프레임 내 중복을 줄인다.
  2. 프레임 간 압축 : 이전, 이후 프레임과의 차이만 저장하는 예측으로 시간적 중복을 줄인다.
  3. 엔트로피 코딩 : 남은 데이터에 통계적 압축을 적용해 비트 수를 더 줄인다.
  • Codec = COder + DECoder로 비디오 코덱은 이미지 시퀀스를 호율적으로 압축하고 복원하기 위한 규격(H.264, H265, VP9, AV1, MJPEG 등)을 의미한다.
  • 궁극적인 목적은 저장 공간과 네트워크 대역폭을 줄이면서 사람 눈에 보이는 화질 손실을 최소화하는 것이다.

동작 방식은 쉽게 설명하면 아래와 같다.

  1. 프레임 내부 압축 : 블록 분할, 변환(DCT 계열), 양자화로 한 프레임 내 중복을 줄인다.
  2. 프레임 간 압축 : 이전, 이후 프레임과의 차이만 저장하는 예측으로 시간적 중복을 줄인다.
  3. 엔트로피 코딩 : 남은 데이터에 통계적 압축을 적용해 비트 수를 더 줄인다.

🤔 그런데 굳이 왜 비디오 코덱을 통해 비디오 데이터를 압축하고.. 다시 복원하는 절차를 해야하는걸까?

한 번 상상해보면 아래와 같이 예를 들 수 있을 것이다.

만약, 어디 여행을 떠나서 30분짜리 비디오를 촬영했다고 가정해보자.

이 비디오가 만약 압축되지 않았다면 그 크기는 엄청날 것이다.

그 압축되지 않은 쌩 비디오를 휴대폰에 저장하거나 카카오톡이나 에어드랍과 같이 네트워크를 통해 전송하려고 하는 것은 정말 비효율의 끝판왕일 것이다.

압축되지 않은 비디오를 저장하는 과정을 나열하면 아래와 같을 것이다.

  1. 비디오를 HD(1920 * 1080)의 풀 컬러(Pixel 당 4Byte로 가정) 비디오의 한 프레임은 8,294,400 바이트일 것이다.
  2. 이때 초당 30 프레임이라고 가정한다면 HD 비디오의 1초는 248,832,000 바이트( ~ 약 250MB) 일 것이다. (1초가…?)
  3. 그렇다면 HD 1분은 단순 계산해도 약 1.4GB이다.
  4. 30분짜리 비디오라고 하면 약 47GB 이며 만약 2시간짜리 어벤져스 영화다? 그러면 거의 약 170GB이다.

⚡ 여기서 명심해야할 게 비디오 만 이다. 오디오나 특수한 오버헤드를 제외한 것이다..

이렇게 압축되지 않은 비디오를 디바이스 내부에 저장하거나 네트워크로 전송하려고 한다면 정말 엄청난 대역폭이 필요할 것이다.

이때 비디오 코덱을 이용하여 비디오 데이터를 압축하고 적절한 포맷으로 인코딩한 뒤, 이후 디코딩하여 재생하거나 편집할 수 있도록 하는 것이다!

주의해야할 게 대부분의 비디오 코덱은 손실 압축 이다. 디코딩해도 원본과 100% 동일하지 않기 때문에 디테일한 부분이 사라질 수 있다.

→ 얼마나 사라질지 결정하는 것이 코덱 포맷과 설정을 통해 결정할 수 있다.

주요 범용 비디오 코덱 정리

😉 비디오 코덱에 사용되는 중요한 용어 정리

  1. 컨테이너(Container)

비디오, 오디오, 자막, 메타데이터 등을 하나의 파일로 묶는 포장 형식(타입)을 말한다.

→ 비유하자면 도시락 통이라는 컨테이너 안에 밥(비디오), 반찬(오디오), 젓가락(자막), 라벨(메타데이터)가 있는 것

→ .mp4, .mov, .mvk 같은 파일 확장자가 컨테이너이며 코덱과는 다른 개념이다.

  1. 인코딩된 비디오에 영향을 끼치는 소스 포맷들

인코딩 전에 원본 영상의 성질이 압축 결과에 큰 영향을 끼친다는 것을 말한다.

2-1. Color Depth (Bit Depth)

한 픽셀이 표현할 수 있는 색상의 정보량을 뜻한다. (Bit 수)

  • 8bit면.. 기본 색연필? 10bit면 전문가용 물감 세트라고 비유할 수 있다.
  • 비트(컬러)가 높을 수록 영상의 품질이 높아지지만 그만큼 용량도 커진다.

2-2. ⭐ 프레임 레이트 (Frame Rate)

1초당 표시되는 프레임 수(fps)를 의미한다.

  • 의미 기대로 이며 30fps는 일반적인 영상이고 60fps는 부드러운 영상일 것이다.
  • 이 또한 프레임 레이트가 높을 수록 영상의 품질이 높아지지만 용량과 비트레이트가 커진다.

2-3. 움직임 (Motion)

프레임 간 픽셀 변화량을 의미한다.

  • 이는 정말 쉽게 비유할 수 있다.

→ CCTV로 무언갈 촬영한다고 했을 때 그냥 아무것도 없는 방을 촬영한다면 압축이 매우 쉽다.

→ 만약 뛰어다니는 사람이나 고속도로와 같이 무언가 많이 움직이고 있는 것을 촬영한다면 압축이 어려워진다.

  • 즉, 화면에 움직임이 많을 수록 압축 효율은 떨어진다.

2-4. 잡음 (Noise)

실제 장면과 무관한 무작위 픽셀 변화를 의미한다.

  • 네트워크 전송이나 다양한 이유로 인해 영상에 노이즈가 끼는데 이것이 많아지면 그만큼 압축률이 급격히 떨어진다. → 비디오 코덱은 잡음도 움직임으로 착각하기 때문이라고 한다.

2-5. 해상도 (Resolution)

프레임당 픽셀 수 (가로 * 세로)를 의미한다.

  • 1920 x 1080, 3840 x 2160 둘 중 누가 더 데이터가 클까?
  • 픽셀 수가 곧 데이터 양임을 명심하자.
  1. 무손실 압축 (Lossless Compression)

원본 데이터를 완벽히 복원이 가능하도록 압축하는 방식을 말한다.

  • 의미 그대로 손실 없이 압축하는 것을 의미하며 원본 데이터가 손실되지 않는다는 특징이 있다.
  • 다만.. 그만큼 용량이 매우매우 커지므로 실시간 스트리밍에서는 안쓴다고 보면 된다.
  1. 손실 압축 (Lossy Compression)

사람이 구분하기 힘든 정보는 버리고 압축하는 방식을 말한다.

  • 비디오 코덱과 영상 스트리밍의 기본이며 약간의 품질은 손실되더라도 용량을 줄이는 것을 의미한다.
  • 쉽게 설명하자면 사진을 JPG로 저장한다.도 손실 압축이다.
  1. ⭐ 비트 레이트 (Bitrate)

1초당 전송 또는 저장되는 데이터의 양(bps)을 의미한다.

  • 쉽게 수도관 굵기라고 생각하자.
  • 비트 레이트가 높을수록 품질은 올라간다.
  • 비트 레이트가 낮을 수록 블록과 깨짐 현상이 올라간다.
  • 실시간 전송의 핵심 지표이므로 꼭 유의하자.
  1. 가변 프레임 레이트(VFR)

영상의 복잡도에 따라 프레임수가 동적으로 변하는 방식 을 말한다.

  • 쉽게 자동 변속기라고 생각하자. (도로가 막히면 느리게 가고.. 뚫리면 빠르게 가는 것 처럼?)
  • 정적인 장면은 fps를 낮춘다.
  • 움직임이 많은 장면은 fps를 올린다.

→ 이 둘을 잘 조합해서 저장 효율을 끌어올린다.

→ 다만 실시간 처리나 동기화는 매우매우 어렵다..


🤔 I, P, B 프레임이란?

I, P, B 프레임 이란?

프레임을 “어떻게 참조해서 압축했느냐”에 따라 나눈 비디오 프레임 타입을 말한다.

이미지 출처 : https://kr.kindle-tech.com/faqs/what-are-the-different-types-of-frames-in-compression

  • I-Frame (Inter-coded frame)

→ 다른 프레임을 전혀 참조하지 않고 그 프레임 자체를 완전히 이미지로 저장하는 프레임을 의미한다.

→ 그러다보니 자체적으로 완전한 정보를 담고 있어 편집이나 탐색에 용이하다!

→ 사진(JPEG)처럼 intra(프레임 내부) 압축만 수행하므로 바로 디코딩할 수 있다.

  • P-Frame (Predicted frame)

→ 이전 프레임(I 또는 P 프레임)의 정보를 참조하여 움직임의 변화량만 저장한다.

→ 즉, 이전 프레임에서 발생된 차이와 움직임만 따로 저장하는 것을 말한다.

→ 용량은 I-Frame 보다 매우 작지만 이전 프레임. 즉, 과거 한 방향으로만 예측하는 프레임이다.

  • B-Frame (Bi-directional predicted frame)

→ ⭐ 이전 프레임과 이후 프레임을 모두 참조(I, P, B 모두)하여 움직임을 예측하고 저장한다.

→ 시간 상 앞과 뒤 프레임을 모두 보고 가장 잘 맞는 예측을 만드는 양방향 인터 프레임이다.

→ 양방향 참조이다보니 가장 높은 압축률을 제공하지만 디코딩 시 이전/이후 프레임이 모두 필요하기 때문에 처리 부담이 좀 있다.. (미래 프레임을 참조하다보니 인코더와 디코더는 프레임을 표시 순서와 다른 순서로 처리해야하기 때문에 그만큼 지연이 생긴다. https://kindle-tech.com/faqs/what-are-the-different-types-of-frames-in-compression) 따라서 화상회의나 라이브 스트리밍에서는 B 프레임을 줄이거나 아예 안쓰는 경우도 많다고 한다.


1. MJPEG(MJPG = Motion JPEG)

각 비디오 프레임을 독립적인 JPEG 이미지로 압축해 순서대로 붙인 형태의 비디오 포맷/코덱 계열이다.

프레임 간 압축이 없으며 구현이 단순해 카메라, 웹캠, 임베디드 환경에서 많이 사용되지만 압축 효율은 매우 떨어진다.

  • 👍 장점
  • 각 장점이 독립적인 JPEG이라 코덱 구조가 단순하고 렌더링과 디코딩 구현이 쉽다.
  • 모든 프레임은 I-Frame이라 랜덤 액세스와 프레임 단위 편집이 매우 편해서 지연 시간도 낮게 유지하기 좋다!
  • 일부 임베디드 환경에서는 H.264보다 디코딩 시 CPU 사용량이 낮고 예측 가능하다고 평가한다는데.. 잘 모르겠다.. ㅎㅎ (https://felenasoft.com/xeoma/en/articles/mjpeg-h264-comparison/)
  • 👎 단점
  • 프레임 간 압축이 없어 압축 효율이 매우매우 떨어진다.
  • 같은 화질인데도 불구하고 H.264나 H.265보다 훨씬 높은 비트레이트가 필요하다.
  • 고해상도나 높은 FPS, MJPEG 스트림은 네트워크와 저장소, 버스 대역폭을 크게 소모하므로 대규모 스트리밍이나 클라우드 저장에는 부적합하다.
  • 🤔 CPU, GPU, 메모리, 발열 측면에서는?
  • 디코딩 자체는 반복적인 JPEG 디코딩 이라 알고리즘은 되게 단순하지만 하드웨어 JPEG 가속도 없고 해상도나 FPS가 높으면 대역폭을 엄청나게 잡아먹어 CPU 사용률이 매우 크게 올라간다.
  • 당연히 비트레이트도 커서 네트워크와 메모리 입출력으로 인한 전력 소비, 발열도 무시할 수 없다.
  • 그러다보니 H.264 대비 디코딩 CPU는 낮거나 비슷하지만 네트워크, 스토리지, 대역폭 소비가 훨씬 크다. 로 비교된다.. (찬밥신세)

2. AVC (H.264)

가장 널리 쓰이는 범용 코덱으로 대부분의 모바일, PC, 브라우저, TV에서의 하드웨어 디코더를 지원한다.

H.264는 MPEG-4의 스펙 집합에 포함되어있다.

그러다보니 높은 호환성을 지원하는 시스템 덕분에 매우 유연한 구조를 구성할 수 있다.

→ 효율, 품질, 호환성의 균형이 좋아 기본값 에 가까운 선택지라고 볼 수 있다.

  • 👍 장점
  • 압축 효율, 화질, 호환성의 균형이 좋아 거의 모든 기기에서의 하드웨어 인코더/디코더를 지원한다.
  • 인코딩/디코딩 복잡도가 낮아 실시간 스트리밍 녹화에서 안정적이다.
  • 👎 단점
  • 최신 코덱(H.265, VP9, AV1)에 비해 같은 화질에서 더 높은 비트레이트가 필요하여 상대적으로 대역폭, 스토리지 측면에서 비효율적이다.
  • 🤔 CPU, GPU, 메모리, 발열 측면에서는?
  • 하드웨어 가속을 지원하므로 이를 사용하면 CPU 부담과 전력 소모가 매우 낮다.
  • 모바일 SoC에서도 안정적으로 4K까지 재생할 수 있다.
  • 소프트웨어 디코딩 시에는 고해상도에서 CPU 사용량과 발열이 증가하지만 여전히 H.265나 AV1 보다는 부담이 적다고 한다. (https://www.reddit.com/r/AV1/comments/an79sk/av1_480p_cpu_decode_power_difference_vs_h264_vp9/
  • 💀 주의사항!
  • AVC (H.264)는 기본적으로 유료 포맷이다보니 무수한 특허들이 개입한 여러 단체에 소유권이 나눠져있다.
  • 상용 목적일때는 AVC 미디어 라이선스가 필요하지만 인터넷 환경에서 최종 사용자에게 비디오가 무료로 스트리밍하는 경우에는 라이선스를 요구하지 않는다고 한다. (TMI인가..)

→ 그래도 혹시 모르니 라이선스 요구사항은 읽어보자.

항목내용
표준명AVC (Advanced Video Coding) / H.264
유지 기관MPEG / ITU-T
압축 방식손실 압축 (DCT 기반)
최대 해상도8192 × 4320 (8K)
프레임 레이트레벨에 따라 다름 (최대 300fps 가능)
비트레이트레벨에 따라 다름
색 깊이8 ~ 14 bit (프로필에 따라 상이)
크로마 서브샘플링4:2:0 / 4:2:2 / 4:4:4
HDR 지원Yes (HLG, SL-HDR 등)
VFR 지원Yes (가변 프레임 레이트)
주요 프로필Baseline, Main, High, High10, High 4:2:2, High 4:4:4
지원 컨테이너MP4, 3GP, WebM
실시간 전송RTP / WebRTC 호환
라이선스특허 기반 (상용 사용 시 라이선스 필요)

위 표는 mozilla에서 AI를 통해 정리한 내용입니다. (https://developer.mozilla.org/ko/docs/Web/Media/Guides/Formats/Video_codecs)

3. HEVC (H.265)

H.264 대비 약 25~50% 정도 높은 압축 효율을 제공하여 같은 화질에 더 낮은 비트레이트로 전송할 수 있는 방식이다.

소프트웨어가 8K 비디오를 포함한 초고해상도 비디오 인코딩/디코딩을 효율적으로 할 수 있도록 설계된 구성이다.

이론적으로 H.264와 유사한 품질을 유사하면서 절만 크기로 압축할 수 있다고 한다.

그러다보니 4K, 8K, HDR 등 고해상도와 고품질 컨텐츠에 많이 사용된다.

  • 👍 장점
  • H.264보다 25 ~ 50% 정도 비트레이트를 줄이면서 비슷한 화질을 유지하므로 4K, 8K 스트리밍에 적합하다.
  • 다양하고 복잡한 장면도 처리할 수 있어 가능성이 무궁무진하다.
  • 👎 단점
  • 알고리즘이 복잡하여 인코딩, 디코딩 비용이 크다.
  • 하드웨어 가속이 없으면 CPU 부하와 전력 소모가 매우 높다고 한다.

https://borisfx.com/blog/h-265-vs-h-264-comparison-guide-which-is-better

  • 라이선스와 특허 구조가 매우 복잡하여 모든 기기에서 균일하게 지원되지 않을 수 있다..
  • 🤔 CPU, GPU, 메모리, 발열 측면에서는?
  • 소프트웨어 디코딩 시 H.264보다 두드러지게 많은 CPU를 점유하며 에너지 소비도 크다는 내용이 검색 결과 존재했다.

https://www.reddit.com/r/handbrake/comments/1bz21z4/full_comparison_between_h264_h265_and_av1/

  • 하드웨어 디코더를 사용하면 소프트웨어 디코딩 대비 에너지 소비를 10% 미만으로 줄일 수 있고 고해상도 재생에서도 발열이 크게 감소한다.
항목내용
표준명HEVC (High Efficiency Video Coding) / H.265
유지 기관MPEG / ITU-T
압축 방식손실 압축 (DCT 기반)
최대 해상도8192 × 4320 (8K)
프레임 레이트레벨에 따라 다름 (최대 300fps)
최대 비트레이트800,000 Kbps
색 깊이8 ~ 16 bit (프로파일에 따라 상이)
크로마 서브샘플링4:2:0 / 4:2:2 / 4:4:4
주요 프로파일Main, Main10, Main12, Main 4:2:2, Main 4:4:4
HDR 지원Yes
VFR 지원Yes
지원 컨테이너MP4, MPEG-TS, ISOBMFF, QuickTime
실시간 전송❌ RTP / WebRTC 미지원
브라우저 지원Safari 우수, Chrome/Edge 제한적, Firefox 미지원
라이선스특허 기반 (복수 특허 풀, 상용 사용 시 주의 필요하지만.. Apple 내부에서 지원하므로 괜찮을 것 같은뎅..)

위 표는 mozilla에서 AI를 통해 정리한 내용입니다. (https://developer.mozilla.org/ko/docs/Web/Media/Guides/Formats/Video_codecs)

💡 H.263, VP9, AV1 등의 코덱이 더 존재하지만 기본적으로 AVFoundation와 Apple OS 레벨적으로 공식 지원되는 AVC, HEVC 까지만 정리했습니다. _(MJPEG는 개인적인 궁금함..ㅎㅎ)

물론 VP9는 Safari 14 이후 iOS와 macOS에서 재생할 수 있고 AV1도 Safari 17에서 재생할 수 있지만 어디까지_ _브라우저_에 한정되므로 앱 개발 측면에서는 제외했습니다. (이는 정확하지 않을 수 있습니다.. 정보가 없어서 ㅠㅠ.. 있다면 말씀해주세요!)


참고 문서

영상 코덱 - 위키백과, 우리 모두의 백과사전

영상 코딩 포맷 - 위키백과, 우리 모두의 백과사전

웹 비디오 코덱 가이드 - 웹 미디어 기술 | MDN

www.cdnetworks.com/blog/media-delivery/compression-standards-explained

What is video compression? Intro to encoding, codecs, and more | Mux

pixflow.net/blog/understanding-video-codecs-h-264-hevc-h-265-vp9-and-av1-explained

How to handle the format MJPEG of camera by hardware - Jetson Xavier NX - NVIDIA Developer Forums

비디오 코덱 비교: H.264 vs H.265 vs AV1 vs VP9

Understanding MPEG-4, H.264, H.265, VP9 and AV1

Reddit

Reddit

● 코덱이란 무엇인가? : 네이버 블로그

코덱이란 ? (인코딩,디코딩,트랜스코딩) :: 코딩소년 - 기술블로그

[알아두면 쓸모있는 지식] 동영상의 I, P, B 프레임(GOP) 정리 : 네이버 블로그

압축에서 프레임의 종류는 무엇인가요? I, P, B-프레임 가이드 - Kintek Solution

Export HDR media in your app with AVFoundation - WWDC20 - Videos - Apple Developer

레딧에 좋은 질문들이 되게 많이 있다!

NAVER DEVIEW 2019에 관련 자료가 있어서 아래 자료도 참고하면 좋을 것 같다.

deview.kr/data/deview/2019/presentation/%5B245-2%5D+%EB%8F%99%EC%98%81%EC%83%81+%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D+%EC%84%9C%EB%B9%84%EC%8A%A4,+%EB%B9%A0%EB%A5%B4%EA%B2%8C+%EB%8D%94+%EB%B9%A0%EB%A5%B4%EA%B2%8C+(Ultra+Low+Latency,+Ultra+Fast+Playing

동영상 스트리밍 서비스, 빠르게 더 빠르게 (Ultra Low Latency, Ultra Fast Playing) - 네이버 TV