C.W.K.
Stream
Lesson 08 of 10 · published

Pixel Format — yuv420p 와 왜 중요한지

~10 min · pixel-format, chroma-subsampling, compatibility

Level 0Viewer
0 XP0/73 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

Chroma subsampling alphabet soup

yuv420p10le 같은 pixel format string 이 정보 네 조각을 pack:

  • yuv — color space (vs rgb).
  • 420 — chroma subsampling. 4:4:4 = full color, 4:2:2 = horizontal chroma 절반, 4:2:0 = chroma 1/4 (4:4:4 chroma 데이터의 ¼).
  • p — planar layout (별도 Y, U, V plane).
  • 10le — 10-bit little-endian (default 8-bit 와 대비).

실제로 보게 될 것

  • yuv420p — 8-bit 4:2:0. H.264 web/mobile default. 써.
  • yuv420p10le — 10-bit 4:2:0. HEVC HDR, finer gradient, slight quality bump.
  • yuv422p10le — 10-bit 4:2:2. ProRes 422 default.
  • yuva444p10le — alpha 포함 10-bit 4:4:4. ProRes 4444.

Trap

4:2:0 source decode 후 -pix_fmt 명시 없이 re-encode 하면 FFmpeg이 encoder 의 preferred format 고름. libx264 가 source 가 unusual 하면 가끔 4:4:4 emit, 그 파일 iPhone, Safari, 대부분 TV 에서 재생 안 됨. 호환성 output 엔 항상 -pix_fmt yuv420p 명시.

Code

올바른 pixel format force·bash
# 8-bit 4:2:0 — universal 호환성
ffmpeg -i in.mp4 -c:v libx264 -crf 20 -pix_fmt yuv420p out.mp4

# 10-bit 4:2:0 — 약간 좋은 gradient (HEVC, 브라우저 OK)
ffmpeg -i in.mp4 -c:v libx265 -crf 24 -pix_fmt yuv420p10le -tag:v hvc1 out.mp4

# 10-bit 4:2:2 — ProRes 편집 master
ffmpeg -i in.mp4 -c:v prores_ks -profile:v 3 -pix_fmt yuv422p10le master.mov
결과 확인·bash
# Output 이 어느 pixel format 으로 land 했나?
ffprobe -v error -select_streams v:0 \
  -show_entries stream=pix_fmt,bits_per_raw_sample \
  -of default=noprint_wrappers=1 out.mp4
# pix_fmt=yuv420p
# bits_per_raw_sample=8

External links

Exercise

Clip 을 세 가지로 encode: libx264 -pix_fmt yuv420p, libx264 -pix_fmt yuv444p, libx265 -pix_fmt yuv420p10le -tag:v hvc1. 각각 QuickTime, Safari, 폰의 Chrome 에서 열어봐. 어느 게 fail 하는지 메모. 4:4:4 가 기억할 failure case 야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.