Computer Science/비디오 코덱

[비디오 코덱] YCbCr 컬러 공간과 크로마 서브샘플링

바보1 2023. 9. 30. 22:13

0. 들어가기에 앞서

 

 

  • 비디오 코덱의 입/출력으로 사용되는 YCbCr 영상에 관한 글입니다.
  • 자세한 변환 방식은 작성하지 않았으며, 필요시 나무위키 등을 참고하시길 바랍니다.
  • 해당 글에서는 YCbCr의 개요와 크로마 서브샘플링에 대해 다룹니다.

1. RGB 컬러 공간

 

 

RGB 컬러 공간

  • 우리에게 익숙한 RGB 컬러 공간은 RED, GREEN, BLUE로 이루어져 있다.
  • 일반적으로 각 컬러 공간을 위해 8비트를 할당하여, 각 컬러 공간마다 256개의 단계를 구분할 수 있다.
  • 따라서 RGB 픽셀 하나를 표현하기 위한 총 비트는 24비트이다.
  • 중요한 점은 컬러 공간을 표현하기 위한 비트 수가 늘어날수록 밝기 값을 더 세밀하게 표현할 수 있다.

2. YCbCr 컬러 공간

 

 

  • 일반적으로 YUV와 많이 혼용되지만, YUV는 아날로그 텔레비전에서 자주 사용되고, YCbCr은 디지털 시스템 및 비디오 인코딩에서 사용되는 단어입니다. (이후 글에서 YUV와 YCbCr을 혼용해서 사용할 수 있으므로, 본 블로그에 한해서는 YUV와 YCbCr이 같다고 인지해주세요.)

나무위키

  • YCbCr 컬러 공간은 각 픽셀마다 휘도 성분과 색차 성분을 구분하여 저장하는 형태이다.
  • 휘도 성분(Luminance Sample)과 색차 성분(Chroma Sample)은 각각 Y와 Cb, Cr에 해당된다.
  • Y는 빛의 밝기라고 생각해도 되고, CbCr은 파란색 성분, 빨간색 성분이라 생각해도 된다.
  • 사람은 빛의 밝기에 예민하고, 색깔에는 크게 예민하지 않다는 이론에 근거하여 생긴 컬러 공간이다.

YCbCr

  • 과거에는 흑백 티비에서 컬러 티비로 넘어가는 시점에, 컬러 영상의 방송을 흑백 티비에서도 볼 수 있게 하기 위해 YCbCr 컬러 공간이 생겼다고 한다.
  • 현재는 RGB 성분 사이에 존재하는 데이터 중복성을 줄임으로써 전송과 저장에 효율성을 높이는 방식이 YCbCr이기 때문에, 비디오 압축 코덱은 대부분 YCbCr을 사용하여 처리한다.

3. YCbCr 샘플링

 

 

  • 위에서 말했다싶이 사람의 눈은 영상의 밝고 어두운 정도를 인식하는 것이 색상을 인식하는 것에 비해 민감하다.
  • 따라서 Y 값은 전부 사용하고, CbCr을 샘플링해서 사용하는 것이 일반적이다.
  • YCbCr 샘플링 포맷은 4:4:4, 4:2:2, 4:2:0이 있으며, 4:2:0이 많이 사용된다.
  • 4:2:0을 예시로 들면 첫 번째 행에는 Y값 4개마다 2개의 CbCr 값이 있다는 의미고, 두 번째 행에는 Y값 4개마다 0개의 CbCr 값이 있다는 의미이다.
  • 아래의 표를 보면 이해하기 쉽다.

나무위키

  • 4:2:0의 경우 Y값 4개당 첫 번째 행에는 2개의 색차 정보가 들어가고, 두 번째 행에는 0개의 색차 정보가 들어간다.
  • RGB와 비교했을 때, 상당한 양의 정보를 효율적으로 전송/저장할 수 있다.
  • 다만 정보가 손실되는 손실 압축 기법이다.

4. Appendix

 

 

  • 동영상을 디스플레이하는 방식은 순행주사(Progressive scan)와 비월주사(Interlaced scan) 방식이 있다.
  • 순행주사는 화면 전체를 한 번에 보여주는 것이고, 비월주사는 화면을 절반씩 나눠서 보여주는 방식이다.

좌측은 홀수줄, 우측은 짝수줄을 디스플레이한다.

  • 다반 비월주사는 과거에 사용했던 방식이라, 현재는 거의 사용하지 않는다고 한다.
  • 물론 비월주사가 데이터 용량을 적게 사용한다.
  • ffmpeg을 사용하다 보면 yuv420p라고 하는데, 이는 해당 영상이 yuv 컬러 공간에 420 샘플링을 사용했고, 순행주사를 사용했다는 의미이다.