비디오 코덱 (Video Codec)

Janice._.oooh·2022년 3월 22일
1

반도체 기술

목록 보기
6/8

코덱(Codec)


코덱은 문자 그대로 'coder-decoder' 또는 'compressor-decompressor'의 의미로 비디오에 알고리즘을 적용하여 복사본을 만들어 냅니다.

raw 비디오를 보다 관리하기 쉬운 크기로 압축하기 위해 인코더에서는 비디오 및 오디오코덱을 사용합니다. 이 코덱은 부피가 큰 비디오를 축소하는 알고리즘을 적용합니다.

쉽게 말하면 인코딩은 압축 프로세스를 기술하는 반면 코덱은 압축 방법을 기술합니다.

스트리밍의 경우, 코덱은 불필요한 데이터를 폐기함으로써 손실 압축을 사용합니다.

비디오는 저장 및 전송을 위해 압축되고 나중에 재생하기 위해 압축 해제 합니다.

스트리밍에는 오디오코덱과 비디오코덱을 모두 사용해야합니다.

비디오 컨테이너 포맷이란?
스트림의 컴포넌트가 압축되면 래퍼 또는 파일 형식으로 패키지화 됩니다. 이러한 파일에는 오디오코덱, 비디오코덱, 클로즈드캡션 및 관련된 메타데이터가 포함됩니다. 일반적인 컨테이너에는 .mp4, .mov, .ts 및 .wmv가 포함됩니다.
[더 자세히 알아보기]



프레임(Frame)이란?


비디오나 영화, TV 등이 영상 매체를 전달할 때 화면에 뿌려주는 한장 한장 낱개의 이미지를 말합니다. 이러한 이미지들이 초당 얼마간의 속도로 빠르게 바뀌면서 움직이는 하나의 동영상을 만들어 냅니다.

예시로 플립북 원리와 비슷합니다.

[느린 FPS 동영상]

[빠른 FPS 동영상]

프레임 레이트(Frame Rate)

1초에 얼마나 많은 개수의 프레임(Frame)을 보여줄 것인가의 비율(Rate)을 말하는 것으로 FPS(Frame Per Second)단위를 사용합니다.



비디오 압축 원리 (MPEG)


MPEG (Moving Picture Experts Group)
일반적으로 MPEG을 코덱이나 동영상 파일 확장자라고 생각하지만, 풀네임에서 알 수 있듯이 MPEG이란 ISO/IEC 산하의 그룹입니다.

1988년에 설립된 이후 비디오와 오디오, 네트워크 등 멀티미디어 표준의 개발을 담당하고 있습니다.
[더 자세히 알아보기]

데이터의 압축은 인간 시각이 인지할 수 없는 정도의 범위 내에서 영상 정보를 압축하게 되는데 이는 영상 내에 있는 중복 정보를 제거하는 것을 목적으로 합니다.

비디오 압축에는 크게 손실/무손실 압축시간/공간적 압축 방법이 있습니다.



시간 압축 (Temporal Redundancy)


다른 용어로 Inter(상호) Coding이라고 불리는 시간적 중복 압축은 각각의 프레임 내에서의 압축이 아닌 연속된 프레임 간의 공통점을 찾아내어 유사한 블록에 대해서는 압축을 수행하지 않고 방향 좌표만을 설정하는 방법입니다.

프레임간 차이를 움직임 벡터 수학적으로 판단해 현재와 다음 프레임 간의 차이가 크지 않고 Motion Estimation, Motion Compensation 개념을 기본으로 하여 이루어집니다.

Motion Compensation(MC)
= 움직임 보상
연속된 영상의 두 프레임 차이가 물체가 움직인 결과라는 사실을 활용합니다.

Motion Estimation(ME)
= 움직임 추정
영상 프레임을 작은 블록으로 분할하여 시간상 앞뒤 프레임에서 어느 변화가 있었는지 추정(Estimation)하는 알고리즘입니다. 다시말해, Motion Compensiation을 위해 Motion Vector를 찾는 기술을 말합니다.

MPEG/H.264 압축표준에서는 매크로 블록(MacroBlock, MB) 단위로 일반적으로 프레임의 블록 사이즈는 16x16입니다.

I/P/B-Frame

I-Frame(Intra-coded Frame)

Key Frame이라고도 불리며, GOP의 기준이 되는 핵심 프레임입니다. I-Frame은 다른 프레임들을 참조하지 않고 입력 원본 그대로 저장된 프레임 입니다.

#가장 화질 좋은 프레임 #가장 큰 용량 #단독 프레임 인코딩 가능

P-Frame(Predictived-coded Frame)

순방향 예측 프레임. 바로 이전의 위치한 I-Frame을 기준으로 차이가 나는 부분의 데이터만을 예측하여 저장한 프레임입니다.

#용량이 I-Frame의 약 33%

B-Frame(Bidirectionally predictive-coded Frame)

양방향 예측 프레임. I-Frame과 P-Frame 사이에 껴서 양쪽 프레임 모두를 참조하여 이 두 프레임 사이의 움직임을 추측 데이터로 저장한 프레임입니다.

#용량이 P-Frame의 약 33%

압축 방법

I/P/B-Frame의 압축 방법은 간단합니다.
원본 프레임 데이터를 기준으로 I-Frame을 생성합니다. 그리고 I-Frame을 기준으로 이웃한 P-Frame을 압축하고, I-Frame과 P-Frame 사이의 B-Frame 압축을 진행합니다.

즉, I-Frame -> P-Frame -> B-Frame순으로 압축됩니다.
복호화 순서도 동일하게 진행됩니다.


GOP (Group of Pictures)

비디오 압축 기술에서 사용되는 표현으로 "인코딩된 이미지 프레임 그룹"입니다. 프레임들을 encoding할 때 나열된 I/P/B-Frames의 Group입니다.

P/B-Frame은 I-Frame으로부터 생성됩니다. 따라서 I-Frame없이 P/B-Frame부분의 영상을 재생 할 수 없습니다.

동영상에는 재생/일시정시/되감기/빨리감기 등이 있습니다.
만약 되감기/빨리감기/seekbar 클릭 재생을 할 때 해당 프레임에 대한 I-Frame을 찾기 힘든 경우 영상이 원활하지 못하게 됩니다. 이를 해결하기 위해 도입한 개념이 GOP입니다.

하나의 GOP는 약 10~15장의 Frame으로 이루어집니다.
GOP내에는 반드시 I-Frame이 포함되어야 하며 GOP앞부분에 시퀀스 헤더를 붙입니다.

GOP를 이용한다면 Ramdom Access발생 시 시퀀스 헤더의 위치를 파악하고 해당 I-Frame을 참조하여 영상을 복원(buffering)한 뒤 이를 바탕으로 P/B-Frame을 재생할 수 있습니다.

GOP 사이즈는 Ramdom Access 간격을 결정하게 됩니다.

example)
30fps & GOP15 -> 0.5초
100fps & GOP10 -> 10초


시간 압축


위의 예시로 보면,
풍경은 변화가 없고 태양의 위치만 왼쪽에서 오른쪽으로 변화되고 있습니다. Inter prediction을 적용하면 태양과 풍경 모두 원본으로 저장하는 첫번째 I-Frame과 시간적 변화가 있는 태양의 데이터만을 저장하여 압축을 합니다. P-Frame의 풍경에 대한 데이터 용량을 줄일(압축 할) 수 있습니다.



공간 압축 (Spatial Redundancy)


다른 용어로 Intra(내부의) Coding로 불리는 공간 압축은 시간 압축과는 달리 한 프레임 내에서 압축이 진행됩니다. 사람의 시각이 특정 영역의 데이터를 민감하게 반영하지 못하는 점을 이용하여 상관 관계가 높은 블럭 영역을 압축하는 방법입니다.

공간 압축의 종류에는 Subsampling, DCT(이산코사인변환), Quantization(양자화)가 있습니다.

Subsampling

  • 사람은 색상(CbCr)보다 밝기(Y)에 더 민감하므로 샘플링시 이를 응용하여 압축.
  • RGB를 YCbCr로 변환할 때, 4:4:4데이터를 4:2:0 등 으로 변환하면서 데이터를 1/2로 압축.
  • 영상의 관점으로는 색상 정보를 일부 손실하게 되므로 손실 압축 방법.

DCT (Discrete Cosine Transform)
= 이산 코사인 변환
YCbCr 데이터를 주파수 영역으로 변환하는 기법.

Quantization
DCT과정의 결과에서 고주파 영역을 일정 레벨로 나누어 제거하는 방식.

위의 예시를 보면,
네모 친 부분은 사람의 시각으로는 반응하지 못할만큼 상관관계가 높은 영역입니다. 해당 영역을 압축하여 데이터를 저장하고 디코딩 할 때, 주위의 비슷한 색상 패턴을 따라 채워집니다.



Reference)

0개의 댓글