NVP2(3) - Codec Basics

구명규·2023년 4월 14일
1

'23 Individual Research

목록 보기
13/19
post-thumbnail

  NVP 모델의 3D sparse positional features를 codec 친화적으로 optimize하기 위해서는 우선 codec의 원리에 대한 개념이 기본이 되어야 한다. 이에, codec 중에서도 영상 압축 모델에 대해 집중적으로 공부하고 정리해보도록 하겠다.


Codec

  Codec이란, 영상이나 음성 신호를 디지털 신호로 변환하는 coder와 그 반대로 변환하는 decoder의 기능을 함께 갖춘 기술을 일컫는다(co+dec). 즉, 용량이 큰 파일을 보관과 전송에 용이하도록 효율적으로 디지털화한 뒤 이를 복원하여 본래대로 재생할 수 있게 해주는 소프트웨어가 되겠다.

  이 때, 서로 다른 codec으로 압축한 데이터는 그에 따른 고유한 확장자를 갖는데, 압축과 복원에 사용되는 알고리즘이 서로 다르므로 호환되지 않고, 해당 확장자에 맞는 코덱으로만 압축을 풀 수 있다는 특징이 있다.

  Image, audio, video 각각에 대해 수많은 codec들이 존재하지만, NVP 모델과 관련된 video codec에 대해서만 다뤄보도록 한다.


Video Codec Models

MPEG

: Moving Picture Experts Group의 약자로, ISO 및 IEC 산하에서 멀티미디어 표준의 개발을 담당하는 소규모 그룹이 개발한 가장 보편적인 동영상 codec이다.

MPEG-1 (MPEG-1 Part.2 Visual / H.261)

: CD에 적용된 최초의 동영상 압축 방식이다. 352x240 pixel 해상도에서 30fps의 비디오를 지원하며, data stream 용량은 1.5Mbps로 제한된다.

MPEG-2 (MPEG-2 Part.2 Visual / H.262)

: 기존 하드웨어 호환성 때문에 방송업계에서는 아직도 많이 사용하는 방식으로, DVD, HDTV 및 디지털 TV에 사용된다.

MPEG-4 (MPEG-4 Part.2 / ASP / H.263)

: MPEG-2보다 2배 정도 효율적인 encoding을 지원한다.

★ MPEG-4 Part 10 (H.264 / AVC)

: Advanced Video Coding. 현재 가장 보편적인 HD video codec이다. 높은 호환성과 압축효율을 보이나, 4K 이상의 영상들을 지원하기에는 대역폭이 감당하기 힘들다. Blue-ray나 HD 방송 콘텐츠를 encoding하는데 많이 사용되고 있다.

★ MPEG-H Part 2 (H.265 / HEVC)

: High Efficiency Video Coding. Discrete Cosine Transform을 기반으로 4K 이상의 영상을 지원하기 위해 개발되었으며, H.264보다 압축 효율이 2배 이상 높다. 하지만 H.264보다 encoding 시간이 최대 4배까지 길어졌으며 decoding에 약 5배 많은 연산이 필요하다.

H.264 / AVCH.265 / HEVC
Processes using MacroblocksProcesses using Coding Tree Units (CTUs)
-동일한 해상도에 대해 더 낮은 bitrate으로 encoding하며
고해상도일수록 높은 compression ratio를 보임
Intraframe prediction function이
9개의 direction of motion을 허용
33개의 direction of motion 허용
-화질과 압축률이 높지만 높은 알고리즘 복잡성으로
CPU power가 많이 소모됨

*Macroblock: A block-oriented, motion-compensation-based video compression standard

AV1 (AOMedia Video 1)

: Google을 포함한 Alliance for Open Media가 함께 개발한 open source codec으로, 인코딩 속도가 느린 편이지만 발전 중이다.

DivX, Xvid

: DivX사가 MPEG-4 Part.2 기반으로 개발한 video codec으로, Xvid는 DivX의 상용화에 반발하여 출시된 open source codec이다. H.264에 비해 화질이 떨어지며, 2010년대 중반부턴 거의 사용되지 않는다.


Terminologies

YUV vs. YCbCr

: YUV는 analog

Resolution(해상도) vs. Fidelity(화질)

: 해상도는 화면 상 모든 픽셀의 수를, 화질은 단위 면적당 픽셀의 수를 의미한다. 특히 해상도는 화소 수에 따라 HD(1280x720), FHD(1920x1080), QHD(2560x1440), UHD(3840x2160)으로 분류된다.

Bitrate

: Data stream이 초당 얼마만큼의 bit 값을 가지는지에 대한 척도로, bps(bits per second) 단위를 가진다. Bitrate ×\times 재생 시간 = 용량. Video 전체에 대해, 시간에 따라 고정된 bitrate 값을 가지면 CBR(constant bitrate), 시간마다 다른 bitrate 값을 가지면 VBR(variable bitrate)이라 부르며, 전체 data stream의 평균적인 bitrate는 ABR(average bitrate)이라고 부른다.

Bitrate Rate TypesDescriptions
VBR화질이 일관된다는 장점, 피사체의 움직임이 많을수록 bitrate가 증가하여 영상 기록 장치에 소요되는 메모리 비용이 예측이 불가하다는 단점.
CBRBitrate가 일관되어 메모리 비용 예측이 가능하다는 장점, 영상의 화질이 일관되지 않는다는 단점.

CRF(Constant Rate Factor)

: Bitrate 대신 우리 눈으로 인식하는 화질로 품질을 조절하는 방법으로, 0부터 63의 값을 가지며 커질수록 압축률이 높아지나 화질이 떨어진다.

Frame Rate

: 1초에 재생되는 frame의 수로, CFR(variable bitrate)(constant frame rate)와 VFR(variable frame rate)으로 나뉜다.

Profile

: Codec이 갖춰야 할 특성들의 모음이다. 압축률이 좋은 profile일수록 연산이 오래 걸린다.

Level

: 해상도, frame rate, 최대 bitrate 등 영상의 대역폭에 대한 설정이다.

Preset

: Encoding 시 encoder가 사용하게 될 고유 설정값들을 미리 묶어둔 것으로, codec의 압축률을 결정하는 기준이다. 대부분의 codec에서 높은 압축률을 목표로 할수록 낮은 encoding 속도가 나오기 때문에 대부분 속도로 표시한다. (ex. slow, medium, fast)


MPEG Compressing Algorithm

Intra/Inter Frame Compression

  여러 장의 연속 나열된 image frame들을 image frame group GOP(group of pictures) 단위로 encoding한다. 각 GOP는 아래와 같은 I, P, B-frame으로 구성된다. 이 때 모든 frame을 I-frame으로 구성하는 무손실 압축 방식이 MJPEG이며, 용량이 크지만 CCTV 등 각 frame의 정보가 중요한 상황에서 사용된다.

Frame TypeDescriptions
I-Frame (Intra)Key frame으로 불리며, GOP의 기준이 되는 핵심 frame. GOP의 첫 frame은 반드시 I-frame이며, 원본 그대로 저장된 frame이다.
P-Frame (Predicted)순방향 예측 frame. 바로 이전의 I-frame을 기준으로 차이가 나는 부분 데이터만 예측하여 저장한 frame으로, 용량(bitrate)이 I-frame의 33%에 달한다.
B-Frame (Bidirectional)양방향 예측 frame. I-frame과 P-frame 모두를 참조하여 그 사이의 움직임을 추측 데이터(vector 형태)로 저장한 frame으로, 용량(bitrate)이 P-frame의 33%에 달한다.

  이 때, GOP 내의 frame들이 다른 GOP(대게 선행 GOP) 내의 frame들을 참조하는 open GOP의 경우 압축 효율이 증가하는 대신 encoding/decoding의 복잡도가 증가한다. AVC는 closed GOP를, HEVC는 open GOP를 기본값으로 사용한다. 또한, HEVC는 I, P, B-frame 이외에도 IDR, CRA, A, SEI-frame 등 더 많은 frame type을 지원하여 압축률을 높인다.

Macroblock Partitioning (AVC)

  아래는 H.264 / AVC codec의 전반적인 compression 과정을 나타낸 모식도로, 오규태님의 강의 중 한 화면이다.

  간단히 살펴보면, 각 RGB pixel에 대해 YCbCr 변환을 해준 뒤, 8x8 pixels 단위로 DCT, 양자화, 엔트로피 부호화의 과정을 거쳐 block을 생성한다. 이후 2x2 block을 하나로 합쳐 macroblock을 형성하며, macroblock이 모여 한 frame의 한 줄을 형성한 것을 slice, slice가 모여 한 frame을 모두 형성한 것을 picture라고 부른다. 이러한 picture를 앞서 살펴본 GOP 단위로 변환하고, 이러한 GOP를 이어붙인 sequence와 video specification이 담긴 sequence header까지 포함되어 MPEG 압축 파일을 이루는 것이다.

RGB \rarr YCrCb \rarr Block(8x8 pixels) \rarr Macroblock(16x16 pixels) \rarr Slice \rarr Picture \rarr GOP \rarr Sequence(+Header) \rarr MPEG

  특히, MPEG-4 Part.2 / ASP codec에서는 DCT-양자화 과정에서 연속된 frame 간의 차이를 통해 영상 속 움직임이 있는 객체를 구별하는 motion estimation과 frame 화질을 개선하는 motion compensation 과정, 즉 inter-prediction(frame 간 예측)이 추가로 수행된다.
   \Rarr 시간 중복성 제거

  한편 H.264 / AVC codec에서는 9가지 예측모델을 사용하여(ex. 특정 4x4 pixel이 인접하고 있는 윗 부분의 pixel을 사선 방향으로 이동시켰을 때의 값과 같은 경우를 mode n으로 설정 후, 해당 mode 값만을 저장) intra-prediction(frame 내 예측)을 수행해 앞선 inter-prediction logic에 추가한다. H.265 / HEVC에서는 35가지 예측모델이 정의된다.
   \Rarr 공간 중복성 제거

Quad-Tree Partitioning (HEVC)

  쉽게 말해, 한 block 안에 서로 다른 pixel 값이 존재하면 4등분하여 세분화해가며 tree 형식으로 저장하는 방식이다.

: Image \rarr CTU \rarr CU \rarr PU/TU 단계로 분할하여 휘도(Luma), 색차(Cb, Cr) block 및 관련 구문 요소로 저장한다.


FFmpeg

  FF(Fast Forward) MPEG. 영상과 음성 스트림에 대해 다양한 종류의 형태로 기록하고 변환하는 리눅스 기반 프로그램으로, 여러 free sofrware와 open source library로 구성되어 있다.

Options

OptionsDescriptions
-c:vEncoder codec 종류 설정.
-b:v -b:aCBR 방식의 bitrate 값 설정, -vbr 옵션으로 VBR 전환 가능. 값 설정 시 codec이 처리 가능한 가장 가까운 bitrate로 설정.
-crfConstant rate factor 설정.
-r -framerateInput에 저장되어 있는 시간 정보를 무시하고 설정한 fps에 맞추어 생성.
-presetPreset 설정(fast/medium/slow)

References

profile
K'AI'ST 학부생까지의 기록

0개의 댓글