#1. [H.264] 동영상 압축의 기본 개념
#2. [H.264] 동영상 압축의 기본 개념 – RGB, YCbCr, 서브샘플링
#3. [H.264] Block-based Motion Estimation(ME)
#4. [H.264] Discrete Cosine Transform(DCT) 이산 코사인 변환
#5. [H.264] Quantization(양자화)과 Zig-zag scanning

안녕하세요? 맨날맑음 입니다.

이전 포스팅에서는 동영상의 정의와, 동영상을 압축하는 기본적인 방법에 대해 간단히 살펴 보았습니다.
이번 시간에는 동영상을 압축하는 자세한 방법을 알아보기 전에 색공간 RGB, YUV(YCbCr) 그리고 YUV 서브샘플링에 대해 알아 보도록 하겠습니다.

본론으로 들어가기 전에 간단하게 색공간(Color Space)에 관해 알아 보도록 하겠습니다.
위키의 설명에 보면 색공간은 색표시계를 3차원으로 표현한 공간 개념이라고 나와있습니다. 즉 색을 표현하는 방법은 여러가지(RGB, CMYK, HSV, CIE, YCbCr 등)가 있는데 각각이 색을 표현하는(담는) 방법이라고 생각해도 될 것 같습니다.

#1. RGB 색공간

-그림1. RGB 채널의 원리 -

빛의 삼원색(빨강, 녹색, 파랑)을 이용하여 색을 표현하는 방법 입니다. 원색 신호라고도 불립니다. 일반적으로 TV나 모니터, HTML의 색상표현에 쓰이며,  컴퓨터의 모니터는 RGB방식을 사용하므로, 우리가 영상을 화면에 디스플레이 하기 위해서는 RGB로 변화 하여야만 합니다. 각 값들은 0~255까지의 값(8bit)을 가지고 있으며, 각 값들을 가산 혼합하여 색상을 표현합니다.

#2. YCbCr 색공간

-그림2.  YCbCr 이미지의 구성요소-

YCbCr에서 Y는 휘도(빛의 양)이고, Cb와 Cr은 색차(크로마)를 나타냅니다. 색차 신호라고도 불립니다.이 방식은 RGB보다 색상의 분리 및 전달 효과는 약하지만, 적은 데이터로 보다 많은 색상을 나타낼 수 있는 장점을 가집니다.

YUV를 사용하는 대표적인 기계는 텔레비전입니다. 지금은 전부 칼라 텔레비전이지만, 예전 흑백의 경우 휘도(밝기)만을 가지고, 방송을 하다가, 컬러TV는 CbCr성분을 더해서 방송을 하기 때문에 지금에 와서도, 흑백 TV를 볼 수 있는 이유입니다. Y 성분만 뽑아 쓰면 되니까요.

이 방식에서 흑백을 표현하기 위해서는 Y 성분만 있으면 됩니다. 사람이 물체를 인식하는데 휘도(밝기)에 민감하지 그 외 Color 성분은 별로 민감하지 않습니다. 이것은 눈의 특성을 보면 알 수 있는데요, 사람의 눈에서 휘도를 구분하는 ‘간상세포’는 눈 전체영역에 분포하게 되고, 색을 구분하는 ‘원추세포’는 눈의 중심부에만 분포하여, 사람의 눈은 색상보다는 밝기에 민감하게 됩니다.

이렇게 때문에 사람이 민감하지 않은 모든 색상정보를 전부 포함해야 하는 RGB방식에 비해서, 적응양의 데이터(약 2/1)로도 비슷한 화질을 낼 수 있게 됩니다. (아래 설명 할 서브샘플링을 하였을때..)

영상장치가 영상을 만들 때, 빛을 인식하여(RGB)를 YUV로 바꿔 주게 되며, YUV를 압축하기 위해 서브샘플링을 하여 데이터를 줄이고, 저장장치에 저장하게 됩니다. 계속 알아야 할 개념이 늘어나고 있습니다. 다음은 서브샘플링에 관해 알아보겠습니다.

#3. YbCbCr 서브샘플링

동영상(Image)의 크기를 줄이기 위해 YbCbCr을 그대로 사용하기 보다는 압축하는 것이 효율 적입니다. 앞서 설명처럼 인간은 색차 보다는 밝기에 더 민감하기 때문에 샘플링에서도 이러한 기법을 사용함으로써 데이터를 압축 할 수 있습니다. 쉽게 말해 Y성분을 CbCr보다 많이 할당 함으로써 데이터를 줄이는데 감소한 데이터에 비해서 시각적인 차이는 거의 없게 됩니다.

러한 샘플링 기법은 Y Cb Cr의 각각의 비율에 따라 조금씩 다르게 나누어 집니다. 인코딩에서 사용하는 샘플링 비율은 아래의 3개의 비율을 사용합니다.

  • YCbCr 4:4:4 format

                                                  - 그림3. YCbCr 4:4:4 format -
     각 픽셀당 Y Cb Cr이 각각 4개가 들어가게 됩니다.

 

  • YCbCr 4:2:2 format
                                                       - 그림4. YCbCr 4:2:2 format -
    각 픽셀당 2개의 블럭을 기준으로 Y 4개 CbCr 2개를 공유하여 사용합니다.

  • YCbCr 4:2:0 format (YCbCr 4:1:1)
                                                        - 그림5. YCbCr 4:2:0 format -
    이 방식이 동영상 인코딩시 표준으로 쓰입니다. 그림5를 보면 YCbCr 4:1:1로 표현하는 것이 맞지만 표준화 기구에서 정한 이름이 4:2:0이라고 합니다. 저도 처음에 이름 때문에 좀 개념이 해깔렸습니다. 각 픽셀당 Y 4개 CbCr 1개를 공유하여 사용합니다.

    내용 추가 '09.09.02
    YCbCr (4:2:0) 와 YCbCr (4:1:1) 의 차이는 같이 사용하는 자료들도 있고 다르게 구분하는 자료들도 있는 것 같군요. 그래서 제 생각에는 YCbCr (4:2:0) 와 YCbCr (4:1:1)이 유사하다고 생각하면 댈 것 같습니다.  실제로 많은곳에서  같은 서브샘플링 개념으로 사용되고 있는 것도 사실이니까요.


#4. YCbCr 4:2:0 video format일 경우 데이터 구조는 어떠할까요?

데이터의 Type은 Byte이고 값은 0~255의 값이 들어갑니다. 그리고 중요한 것은 YCbCr의 경우 파일의 정보를 표시하는 ‘헤더’는 존재 하지 않습니다. 그래서 다음과 값은 데이터 구조를 가지게 됩니다.


-그림6. YCbCr 4:2:0의 데이터 구조-

빨간 점선은 프레임의 구분을 의미 합니다. 즉 한 프레임에 해당하는 Y정보가 먼저 나오고, 뒤를 이어 Cb Cr의 정보가 파일에 쓰여 있습니다. 예를 들어  해상도가 10X10이고, 10개 Frame으로 구성된 동영상의 경우 Y 100개, cb 25개, Cr25개의 정보가 쭉 이어 나오고 또 Y 100개, cb 25개, Cr25개의 정보가 쭉 이어 나오는 식으로 총 10개(10 프레임이므로)가 나열 됩니다.

 

생각보다 간단한 구조입니다. 이렇게 생각해 보면 파일에서 100Byte를 읽어오고 50Byte 건너뛰고 또 100Byte를 읽고 50Byte를 건너뛰는 방법으로 파일을 읽어 새롭게 저장하면, 원래 영상에서 흑백영상을 뽑아 올 수도 있습니다.

이번엔 RGB, YCbCr의 색공간에 대해 살펴 보았고, 서브샘플링에 관해서도 살펴 보았습니다. 다음 번에 어떠한 내용부터 올려야 할지 아직 잘 모르겠네요. 일단은 Motion Estimation 기법에 관해 올리려고 생각 중에 있습니다.




-------------------------------------------------------------------------------------------------------------------------------------------

# 마치면서..(좀더 알아볼 점)

  • YCbCr에서 Y는 어떤(? 정확히 모르겠어요) 용어와 해깔리지 않기 위해 Y’라고 표현해야 맞다고 합니다. 즉 Y’CbCr입니다. 대강 설명하자면 아날로그 인코딩과 디지털 인코딩 방식의 차이라고 알고 있습니다.
  • YUV와 YCbCr이 같은 거처럼 글을 썻지만, 사실 비슷하지만 조금 다른 개념인 것 같습니다. 저는 인코딩에 필요한 개념으로 용어에 따른 차이가 있을 수 있겠습니다.

 

참고 사이트 : http://www.fourcc.org/

Posted by 맨날맑음

#1. [H.264] 동영상 압축의 기본 개념
#2. [H.264] 동영상 압축의 기본 개념 – RGB, YCbCr, 서브샘플링
#3. [H.264] Block-based Motion Estimation(ME)
#4. [H.264] Discrete Cosine Transform(DCT) 이산 코사인 변환
#5. [H.264] Quantization(양자화)과 Zig-zag scanning

안녕하세요? 맨날맑음 입니다.

#0. 들어가며..

방학을 이용하여, H.264 코덱을 공부하는 것을 목표로 해서 동영상의 인코딩, 디코딩에 관해 배워 나가고 있습니다.

이 내용들은 제가 세미나를 통해 배운 내용을 나름대로 정리하여 잊어 버리지 않게 하는 것이 용도이고, 저도 세미나 도중 이해 가지 않는 부분이 있으므로, 제가 올린 내용이 틀릴 수 있습니다. 내용에 틀린 점이 있을 시 지적해 주시면 즉시 내용을 수정 하도록 하겠습니다.

#1. 동영상이란?

동영상 압축의 기본을 알기 위해선 우선 동영상이 무엇인지 알아야 합니다.

 
-그림1. 동영상의 구조-

위의 그림에서 알 수 있듯이 동영상은 정지된 사진(프레임)이 시간을 축으로 여러 장 모여 있는 것입니다. 즉 주어진 시간 동안 연속으로 촬영된 사진이라 볼 수 있습니다.(사실 여기서 소리도 포함 되야 하지만, 소리는 별도의 인코딩 과정을 거친 후 먹싱 되므로 소리는 빼고 생각해 보겠습니다.)

렇다면 동영상(RGB 비디오)의 데이터 크기는 어떻게 될까요? 프레임은 그림파일(Image)와 같습니다. 예를 들어 512×512의 동영상이 있다고 하면, 이 동영상의 한 프레임을 기준으로 가로 : 512, 세로 : 512개의 점(픽셀)으로 구성되어있으며, 1픽셀은 8bit(256 levels)입니다.  그 중에서 회색이 차지하는 비율만 생각해 보면, Width×Height×Bit(512×512×8)가 됩니다. 그리고 3개의 Color들로 구성 되어있으므로, RGB의 경우 Width×Height×Bit×Color(512×512×8×3)이 되어 6291456bit가 됩니다. 6291456(bit) == 6144(kbit) == 6(mbit) 입니다.

512×512라는 비교적 작은 사이즈의 동영상도 무 압축일 경우, 한 프레임에 6메가라는 큰 사이즈가 되는 것입니다. 동영상서비스를 제공 할 경우 적어도 초당 24프레임을 보장해야 한다고 하니 1초의 동영상에 144메가라는 큰 용량이 필요한 것입니다. 이것이 우리가 동영상 압축을 공부해야 하는 이유이기도 합니다.

네트워크 기술이 많이 발달하였지만, 이런한 무 압축 비디오까지 실시간으로 전송 하는 데는 역부족 입니다. 더군다나 요즘 많이 보급된 FullHD의 경우 1920×1080의 해상도를 지원해야 하기 때문에, 어마어마한 데이터 양이 될 수 밖에 없습니다. 또한 네트워크 대역폭이 이 정보를 전부 전송해 줄 수 있다고 하더라도, 동영상의 크기를 줄여, 그 남는 대역폭을 이용하여 여러 다른 서비스를 제공 해 줄 수도 있을 것입니다.

 

#2. 동영상 압축 기법(동영상 압축을 위한 기본적인 방법)

이러한 동영상을 압축 하려면 어떻게 해야 할까요?

동영상 압축에는 크게 세 가지 기법이 사용 됩니다. 첫번째는 프레임 간의 상관관계 (temproal correlation)이고, 두번째는 공간적인 상관관계(spatial correlation)입니다. 세번째는 저주파 성분에 민감한 시각의 특성을 이용합니다 (DCT 변환).

                        -그림2. 프레임 9-                                                   -그림3. 프레임 10-

먼저 프레임간의 상관관계를 알아보도록 하겠습니다. 그림 2와 3은 각각 같은 동영상(football_sif.yuv)의 9번과 10번 프레임입니다. 마치 같은 그림처럼 닮아있습니다.  근접한 프레임은 거의 비슷한 이미지로 이루어져 있다는 아이디어를 이용하여, 영상의 크기를 줄일 수 있습니다.


-그림 4. Image의 공간적인 중복-

그림 4에서 보는 것과 같이 한 장의 이미지에도 인접한 픽셀간의 정보는 거의 중복 된다는 것을 알 수 있습니다. 이방법으로도 영상의 크기를 줄 일 수 있을 것입니다.

Temporal correlation(프레임간의 상관관계)은  그림 5,6처럼 현재 프레임(t)의 하나의 픽셀(x,y)은 이전 프레임(t-1)의 비슷한 위치(x,y)에 있을 가능성이 높고, 또한 두 필셀 사이에는 유사성이 높다는 것입니다.

                       -그림 5. Frame(t)-                                                -그림 6. Frame(t-1)-

이렇게 프레임(t)에서 프레임(t-1)과의 차를 계산해 보면 중복 데이터가 사라지고, 차이인 그림 7이 나오게 됩니다.


      -그림 7. Frame(t) 와 Frame(t-1)의 Difference - 


이번에 간단한 동영상의 정의와, 동영상을 압축하는 기본적인 방법을 알아 보았습니다. 다음에는 RGB와 YUV를 알아보고, 위에서 간단히 소개한 압축의 기법들을 자세히 소개하는(주파수 도메인(DCT)을 이용한 방법, Motion Estimation 등) 순으로 진행 할 예정이며, 기본적인 지식을 갖춘 후, H.264에 대해서도 알아 보도록 하겠습니다.

Posted by 맨날맑음
선문비트교육센터 Windows Developer 과정  최종프로젝트로 3개월간 만든 프로젝트를 소개하려 합니다.

우선 프로젝트명이 좀 특이한데요. MC Opner미디어 컨텐츠 시장의 선두주자라는 뜻입니다.

 컴퓨터를 이용해서 TV 방송 다시보기나 영화 시청을 하시는 분들이 많이 계십니다, 또한 UCC 열풍으로 인해
자신이 만든 동영상을 올리고 기업에서는 전략적으로 UCC를 광고처럼 이용하기도 합니다.
 또한 UCC나 동영상 하나 보려면 원치도 않는 광고를 동영상 앞과 뒤에서 억지로 보게 되기도 합니다.

 그렇다면 여러분은 해당하는 미디어를 보다가 화면에 나오는 옷, 신발, 배경음악, 악세사리, 장소에 관해
궁금
하다던지 사고싶다..라는 느낌을 받아본 적이 있을것 입니다.

 실제로 여러포털사이트에는 특정 영상에 노출된 아이템에 관한 정보를 얻으려고 질문하는 사람을 쉽게 찾아
볼 수 있으면 우리 또한 궁금할 때에는 그에 대한 정보를 얻으려고 노력해야 합니다.

 이러면 어떨까요? 화면에 노출된 특정 아이템들에 대한 정보를 단순히 궁금한 아이템의 마우스 클릭한번으로
그 아이템에대한 정보, 쇼핑몰로 연결, 여러 블로그의 사용기, 온라인 마켓의 최저가
등을 바로 보여준다면 참 편리할 것입니다.

 우리 MC Opener는 이러한 편리한 서비스를 제공하는 Player와 동영상을 웹상에서 Active X 없이 손쉽게
편집&메타정보 삽입, CCL 정보를 삽입하는 Editer로 이루어져 있습니다..

 아직 프로젝트를 호스팅할 서버가 마련되어 있지 않아서 실제 서비스는 추후에 공개 하겠습니다.

프로젝트 시연동영상은 여기를 참조하시고, 프로젝트에 관해 더 자세히 보고 싶은분은 PPT를 참고해주세요!

 

1. 개요
 특정 영상에 노출된 수많은 컨텐츠(음악, 옷, 지리정보)들의 입력툴과 서비스 해줄 수 있는 플레이어를 제공하는 프로젝트입니다. 

2 프로젝트 개발 목적    
  최근 들어 웹2.0의 부상과 정보 유통 채널의 다양화 등으로 큰 관심을 얻기 시작했다. UCC가 이처럼 시장에서 주목 받고 있는 바로 뉴미디어 시대의 킬러 컨텐츠로 성장할 수 있는 잠재력 때문이다. 이점에 주목하여 영상에 수많은 컨텐츠들을 노출 시키고 시청자 들에게는 컨텐츠의 손쉽게 얻을 수 있고 구매까지 이어질 수 있는 환경을 제공하였다. UCC저작권의 대안으로 떠오른 CCL을 단순희 노출하는데 그치지 않고 Media Data안에 삽입하므로 써 좀 더 높은 수준의 저작권 보호를 이룰 수 구현하였다. 

3. 프로젝트 개발범위
 - 통해 영상의 정보를 입력
 - 플레이어를 통해 입력된 정보와 된 각종 정보 보여주기
 - 효과적인 게시물을 보기 위한 게시판기능  
 - 자신이 올린 영상에 대한 편집 및 다운로드
 - Player
     ○ 동영상 재생
     ○ 화면시 사물에 대한 Rect 표시
     ○ 관련 사물 각종 정보 제공(웹,쇼핑,이미지)
 - Editor
     ○ 동영상 업로드
     ○ 영상 편집기능
     ○ CCL 데이터 검사 입력기능
     ○ 각종 데이터 입력 기능 

4. 시스템 구성도

4.1 EnCode Service
ㆍ동영상 편집기능(자르기, 이미지삽입)을 한다.
ㆍ미디어 파일을 서버로 업로딩 
ㆍ사용자가 올린 WMV로 인코딩한다.

4.2 Info Service
ㆍ미디어 파일 정보 관리
추출

4.3 XMP Service
ㆍCCL정보 파일에 삽입하기
ㆍ미디어 CCL정보 읽기

4.4 XML Service
ㆍ에디터를 통해 저장한 모든 정보를 XML파일로 기록
ㆍPlayer에서 요구시 미디어에 맞는 정보를 보여준다.

4.5 Webjet Service
ㆍ OpenAPI를 통해 영상에 노출된 사물에 대한 내용을 보여줌
ㆍ RSS 서비스와 OpenAPI를 통해 관련 동영상 순위 순위 날씨 NEws정보 제공

4.6 Comment Service
 ㆍ 달린 댓글을 영상 재생시 말풍선으로 해당시간에 보여준다.

4.7
ㆍ동영상 미디어 재생 기능 
ㆍXML 파일로부터 영상에 노출된 컨텐츠에 정보 제공 
ㆍ웹 메쉬업을 통한 쇼핑 이미지 사용기 검색 제공

4.8 Authoring Tool
ㆍ업로드시 동영상 편집 기능  
ㆍCCL 정보 입력 기능  
ㆍ메타 데이터 입력   

5. 개발환경
 (1)서버
: Microsoft Windows Server 2008 sp1
ㆍ웹서버 : IIS 7.0
: Microsoft SQL Server 2005
ㆍ개발 툴 : Microsoft Visual 2008 

(2)클라이언트
ㆍ운영체제 : Microsoft Windows XP SP3
툴 : Microsoft Visual Studio 2008 , Blend2.5, Expression Encoder
   XMP SDK Toolkit, Silverlight 2.0 SDK 

Posted by 맨날맑음