📁 File3. 비디오05 · 비트심도 · HDR (PQ vs HLG)

05 · 비트심도 · HDR (PQ vs HLG)

이 문서가 답하는 질문: 8bit와 10bit는 어떤 차이가 있고, HDR는 정확히 무엇이 더 밝은가? 선행: 04-yuv-and-chroma-subsampling.md


한 줄 답

비트심도는 “한 채널에 몇 단계의 계조를 표현할 수 있는가”이고, HDR는 그 계조를 “더 밝고 더 어두운 휘도 범위”에 매핑하는 표준이다. SDR(BT.709)은 100 nit 화이트 기준, HDR10은 1000~10000 nit. 그래서 HDR는 밝기의 표현 범위를 늘린 것이지 단순히 계조 단계를 늘린 것이 아니다.


Why — 왜 비트심도와 HDR가 같이 다뤄지나

8bit SDR로 1000 nit를 표현하려고 하면 밴딩(banding) — 그라디언트에 줄무늬가 생긴다. 8bit는 채널당 256 단계뿐인데 0~1000 nit를 펼치면 단계 간 간격이 너무 넓어 사람 눈이 줄을 본다.

HDR가 가능하려면 두 가지가 동시에 필요하다:

  1. 더 많은 계조 단계 → 10bit 이상 (1024 단계)
  2. 더 넓은 휘도 범위 → 새로운 transfer function (PQ 또는 HLG)

→ “10bit = HDR”이 아니라 “10bit는 HDR의 필요조건”.


How — 어떻게 동작하는가

비트심도: 채널당 표현 단계

심도채널당 단계화이트 표현밴딩 한계
8-bit2560255 (또는 16235)부드러운 그라디언트에 줄무늬
10-bit102401023 (또는 64940)4배 정밀, 거의 안 보임
12-bit40960~4095마스터링·DCP 표준
16-bit655360~65535카메라 raw·VFX

YUV 4:2:0 10-bit = HDR의 디팩토 표준. H.264 High10 / HEVC Main 10 / AV1 모두 10bit 4:2:0을 지원하지만 SW/HW 가속은 환경마다 다르다.

Transfer Function — 휘도와 코드값의 매핑

비디오의 코드값(0~1023)을 디스플레이 휘도(nit, cd/m²)로 바꾸는 함수.

함수풀이휘도 범위사용처
Gamma 2.2 / 2.4L=VγL = V^\gamma0~100 nitSDR (sRGB·BT.709)
PQ (ST.2084)Perceptual Quantizer (절대 휘도)0~10000 nitHDR10·HDR10+·Dolby Vision
HLG (BT.2100 HLG)Hybrid Log-Gamma (상대 휘도)0~1000 nit (기준 휘도 비례)방송 HDR·BBC·NHK

PQ (Perceptual Quantizer)

절대 휘도 매핑. 코드값이 동일하면 어떤 디스플레이에서도 같은 nit를 목표로 한다.

코드값  →  휘도 (nit)
512    →  ~100 nit  (SDR 화이트와 비슷)
767    →  ~1000 nit (HDR 일반 하이라이트)
1023   →  10000 nit (이론적 상한)

→ 1023이 하늘이 빛나는 태양. 디스플레이가 1000 nit밖에 못 내면 그 위는 톤매핑(tone mapping) 으로 압축.

HLG (Hybrid Log-Gamma)

상대 휘도 매핑. 디스플레이의 peak 휘도에 비례해서 출력.

하단(어두운 부분): SDR gamma와 호환 (BT.709 디스플레이가 그대로 받아도 SDR로 보임)
상단(밝은 부분):  log curve로 확장

→ HLG의 목적은 HDR/SDR 동시 송출 — 같은 신호를 SDR TV는 SDR로, HDR TV는 HDR로 받는다. 방송 친화.

HDR 포맷 비교

포맷비트메타데이터라이선스보급
HDR1010정적(MaxCLL, MaxFALL)무료가장 광범위
HDR10+10동적(per-scene)Samsung 무료삼성·아마존
Dolby Vision12동적(per-frame)라이선스 비용Netflix·iTunes·LG·Apple
HLG10없음 (transfer 자체가 답)무료BBC·NHK·YouTube

HDR Mastering vs Delivery

HDR Mastering — 컬러리스트가 monitor의 절대 휘도(예: 1000 nit Sony BVM-X300)에서 그라데이션을 짠다. HDR Delivery — 시청자 TV의 peak 휘도(400~4000 nit 다양)에 맞춰 톤매핑.

따라서 PQ 마스터는 디스플레이가 정확히 1000 nit를 못 내면 어떻게 줄일지가 메타데이터에 담긴다 (MaxCLL/MaxFALL).

메타풀이
MaxCLLMax Content Light Level — 콘텐츠 전체 중 가장 밝은 픽셀의 휘도
MaxFALLMax Frame Average Light Level — 가장 밝은 프레임의 평균 휘도

What — 사양·명령어

색역(Color Gamut) 비교

색역표준비고
sRGBsRGB / BT.709SDR Web·HD TV 동일
DCI-P3DCI-P3영화·iPhone 디스플레이
Adobe RGBAdobe RGB인쇄·사진
BT.2020BT.2020UHD/HDR 표준, 매우 넓음
ACES AP0ACESVFX 마스터링, 가시광 모두 포함

→ HDR ≠ Wide Gamut. HDR는 휘도(밝기), WCG는 색역(채도). 같이 가는 경우가 많지만 별개의 축.

ffmpeg HDR 명령어

# HDR10 인코딩 (HEVC Main 10, BT.2020 PQ)
ffmpeg -i master_10bit.mov \
  -c:v libx265 -preset slow -crf 18 \
  -pix_fmt yuv420p10le \
  -x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc:\
master-display=G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1):\
max-cll=1000,400" \
  -tag:v hvc1 hdr10.mp4
 
# HLG 인코딩 (BT.2020 HLG, 방송 호환)
ffmpeg -i master.mov \
  -c:v libx265 -preset slow -crf 20 \
  -pix_fmt yuv420p10le \
  -x265-params "colorprim=bt2020:transfer=arib-std-b67:colormatrix=bt2020nc" \
  -tag:v hvc1 hlg.mp4
 
# HDR → SDR 톤매핑 (BT.2020 PQ → BT.709 SDR)
ffmpeg -i hdr10.mp4 \
  -vf "zscale=t=linear:npl=100,format=gbrpf32le,\
zscale=p=bt709,tonemap=tonemap=hable:desat=0,\
zscale=t=bt709:m=bt709:r=tv,format=yuv420p" \
  -c:v libx264 -crf 18 sdr.mp4
 
# HDR 메타 검사
ffprobe -select_streams v:0 \
  -show_entries stream=color_space,color_transfer,color_primaries,pix_fmt \
  -show_entries side_data hdr10.mp4

Dolby Vision 프로파일

ProfileBase메타 위치사용처
5DV 단독 (BL only)비디오 ESiTunes·Apple TV·Netflix
7HDR10 + DV enhancementdual layerBlu-ray UHD
8.1HDR10 호환 (single layer)RPU스트리밍 호환
8.4HLG 호환RPU방송

What-if — 잘못 다루면 어떻게 깨지는가

❌ 함정 1 — HDR을 SDR 디스플레이에서 톤매핑 없이 출력

가장 흔한 시나리오: 4K HDR YouTube를 SDR 모니터로 볼 때 회색·탈색된 화면. 이유: PQ transfer는 1023을 1000+ nit로 가정 — SDR 100 nit에 그대로 매핑하면 톤이 압축되지 않아 desaturated, washed out.

해결: 플레이어/OS 차원의 HDR→SDR 톤매핑 활성화 (Windows AutoHDR / macOS EDR / Chrome HDR flag).

❌ 함정 2 — 8bit로 그라디언트가 많은 영상 인코딩

# 잘못 (8bit) — 일출·하늘·연기 장면에서 밴딩
ffmpeg -i sunset.mov -c:v libx264 -pix_fmt yuv420p out.mp4
 
# 좋음 (10bit, dither)
ffmpeg -i sunset.mov -c:v libx264 -pix_fmt yuv420p10le \
  -x264-params "deblock=-2:-2" out_10bit.mp4

또는 8bit여야 한다면 dithering:

ffmpeg -i sunset.mov -vf "format=yuv420p,noise=alls=1:allf=t" out.mp4

❌ 함정 3 — PQ 메타 누락

PQ로 인코딩했는데 transfer 메타를 안 박으면 플레이어는 gamma 2.4 로 가정 — 모든 픽셀이 너무 어둡거나 너무 밝게.

# 메타 박는 게 핵심
-x265-params "colorprim=bt2020:transfer=smpte2084:colormatrix=bt2020nc"

smpte2084가 PQ, arib-std-b67이 HLG.

❌ 함정 4 — HLG와 PQ를 섞어 마스터링

HLG는 상대, PQ는 절대 — 같은 코드값이 다른 휘도. HLG 마스터를 PQ로 컨버전하려면 디스플레이 peak 휘도(보통 1000 nit) 기준으로 매핑해야 한다. 그냥 transfer만 바꾸면 화이트가 다른 위치로 간다.

❌ 함정 5 — Dolby Vision Profile 5 → HDR10 폴백 없이 송출

Profile 5는 HDR10과 호환 안 됨 (BL only). DV 미지원 디바이스는 깨진 영상. Profile 8.1 이 권장 — single layer로 HDR10 호환 + DV RPU 추가.

❌ 함정 6 — HDR + 4:2:0 8bit

10bit 없이 HDR transfer만 적용하면 밴딩이 폭발. HDR는 반드시 10bit 이상. AV1은 10bit가 디팩토.


Insight — 흥미로운 이야기

“HDR은 디스플레이 진화에 끌려간 표준이다”

SDR BT.709는 1990년대 CRT의 100 nit 한계 위에 만들어졌다. 2010년대 OLED/QLED가 1000 nit를 쉽게 내자 남는 휘도를 어떻게 쓸지 문제가 생겼고, 2014년 Dolby가 PQ를 제안. 2015년 BT.2100 (PQ + HLG) 표준화. → 디스플레이가 표준을 끌어당긴 흔한 사례 (CRT → BT.709, OLED → BT.2100).

“PQ는 사람 눈을 모델링했다”

Dolby의 PQ 함수는 Barten의 contrast sensitivity model 기반. “사람 눈이 분간할 수 있는 최소 휘도 차이”를 계산해서, 그 단계로 0~10000 nit를 12bit (4096 단계)에 가장 효율적으로 깔았다. 그래서 PQ는 12bit가 이상적이고, 10bit는 충분히 좋은 타협.

“HLG는 BBC와 NHK가 만들었다”

2014년 BBC와 NHK가 같이 발표 — 동시 SDR·HDR 송출 이 목표였다. 방송국 입장에서 신호를 두 개 송출하는 건 비용이라 하나의 신호가 둘 다 만족하는 트랜스퍼가 필요했다. HLG는 어두운 부분이 SDR gamma와 같아서 낡은 TV가 그대로 받아도 SDR HD로 보인다. 방송 호환성의 승리.

“Dolby Vision은 영화관에서 시작했다”

Dolby는 이미 영화관(돌비 비전 시네마)에서 12bit 4000 nit 마스터링을 표준화하고 있었고, 같은 컬러 사이언스를 가정에도 가져온 게 Dolby Vision Home. 그래서 per-frame metadata컬러리스트의 결정 보존 이 강하다. Netflix가 Dolby Vision을 미는 이유는 영화 마스터의 의도를 가정 TV에 그대로 가져오는 게 가장 잘 되기 때문.

“YouTube는 HLG/HDR10을 받지만 내부는 VP9 Profile 2로 관리”

업로드된 PQ HDR10도, HLG도, Dolby Vision도 모두 VP9 Profile 2 또는 AV1 10bit 4:2:0 BT.2020로 통합. 메타데이터로 transfer를 박아 plyers가 적절히 톤매핑.


요약 + Mermaid

비트심도는 계조 단계 수, HDR는 휘도 표현 범위. 둘은 다른 축이지만 HDR는 10bit 이상이 필수다. PQ는 절대 휘도(영화·OTT), HLG는 상대 휘도(방송). HDR10은 정적 메타, HDR10+/Dolby Vision은 동적 메타. 4:2:0 10bit BT.2020 PQ가 HDR10의 표준 조합. transfer/colorspace 메타를 박지 않으면 모든 게 어긋난다.