NVP 모델의 3D sparse positional features를 codec 친화적으로 optimize하기 위해서는 우선 codec의 원리에 대한 개념이 기본이 되어야 한다. 이에, codec 중에서도 영상 압축 모델에 대해 집중적으로 공부하고 정리해보도록 하겠다.
Codec이란, 영상이나 음성 신호를 디지털 신호로 변환하는 coder와 그 반대로 변환하는 decoder의 기능을 함께 갖춘 기술을 일컫는다(co+dec). 즉, 용량이 큰 파일을 보관과 전송에 용이하도록 효율적으로 디지털화한 뒤 이를 복원하여 본래대로 재생할 수 있게 해주는 소프트웨어가 되겠다.
이 때, 서로 다른 codec으로 압축한 데이터는 그에 따른 고유한 확장자를 갖는데, 압축과 복원에 사용되는 알고리즘이 서로 다르므로 호환되지 않고, 해당 확장자에 맞는 코덱으로만 압축을 풀 수 있다는 특징이 있다.
Image, audio, video 각각에 대해 수많은 codec들이 존재하지만, NVP 모델과 관련된 video codec에 대해서만 다뤄보도록 한다.
: Moving Picture Experts Group의 약자로, ISO 및 IEC 산하에서 멀티미디어 표준의 개발을 담당하는 소규모 그룹이 개발한 가장 보편적인 동영상 codec이다.
: CD에 적용된 최초의 동영상 압축 방식이다. 352x240 pixel 해상도에서 30fps의 비디오를 지원하며, data stream 용량은 1.5Mbps로 제한된다.
: 기존 하드웨어 호환성 때문에 방송업계에서는 아직도 많이 사용하는 방식으로, DVD, HDTV 및 디지털 TV에 사용된다.
: MPEG-2보다 2배 정도 효율적인 encoding을 지원한다.
: Advanced Video Coding. 현재 가장 보편적인 HD video codec이다. 높은 호환성과 압축효율을 보이나, 4K 이상의 영상들을 지원하기에는 대역폭이 감당하기 힘들다. Blue-ray나 HD 방송 콘텐츠를 encoding하는데 많이 사용되고 있다.
: High Efficiency Video Coding. Discrete Cosine Transform을 기반으로 4K 이상의 영상을 지원하기 위해 개발되었으며, H.264보다 압축 효율이 2배 이상 높다. 하지만 H.264보다 encoding 시간이 최대 4배까지 길어졌으며 decoding에 약 5배 많은 연산이 필요하다.
H.264 / AVC | H.265 / HEVC |
---|---|
Processes using Macroblocks | Processes 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
: Google을 포함한 Alliance for Open Media가 함께 개발한 open source codec으로, 인코딩 속도가 느린 편이지만 발전 중이다.
: DivX사가 MPEG-4 Part.2 기반으로 개발한 video codec으로, Xvid는 DivX의 상용화에 반발하여 출시된 open source codec이다. H.264에 비해 화질이 떨어지며, 2010년대 중반부턴 거의 사용되지 않는다.
: YUV는 analog
: 해상도는 화면 상 모든 픽셀의 수를, 화질은 단위 면적당 픽셀의 수를 의미한다. 특히 해상도는 화소 수에 따라 HD(1280x720), FHD(1920x1080), QHD(2560x1440), UHD(3840x2160)으로 분류된다.
: Data stream이 초당 얼마만큼의 bit 값을 가지는지에 대한 척도로, bps(bits per second) 단위를 가진다. Bitrate 재생 시간 = 용량. Video 전체에 대해, 시간에 따라 고정된 bitrate 값을 가지면 CBR(constant bitrate), 시간마다 다른 bitrate 값을 가지면 VBR(variable bitrate)이라 부르며, 전체 data stream의 평균적인 bitrate는 ABR(average bitrate)이라고 부른다.
Bitrate Rate Types | Descriptions |
---|---|
VBR | 화질이 일관된다는 장점, 피사체의 움직임이 많을수록 bitrate가 증가하여 영상 기록 장치에 소요되는 메모리 비용이 예측이 불가하다는 단점. |
CBR | Bitrate가 일관되어 메모리 비용 예측이 가능하다는 장점, 영상의 화질이 일관되지 않는다는 단점. |
: Bitrate 대신 우리 눈으로 인식하는 화질로 품질을 조절하는 방법으로, 0부터 63의 값을 가지며 커질수록 압축률이 높아지나 화질이 떨어진다.
: 1초에 재생되는 frame의 수로, CFR(variable bitrate)(constant frame rate)와 VFR(variable frame rate)으로 나뉜다.
: Codec이 갖춰야 할 특성들의 모음이다. 압축률이 좋은 profile일수록 연산이 오래 걸린다.
: 해상도, frame rate, 최대 bitrate 등 영상의 대역폭에 대한 설정이다.
: Encoding 시 encoder가 사용하게 될 고유 설정값들을 미리 묶어둔 것으로, codec의 압축률을 결정하는 기준이다. 대부분의 codec에서 높은 압축률을 목표로 할수록 낮은 encoding 속도가 나오기 때문에 대부분 속도로 표시한다. (ex. slow, medium, fast)
여러 장의 연속 나열된 image frame들을 image frame group GOP(group of pictures) 단위로 encoding한다. 각 GOP는 아래와 같은 I, P, B-frame으로 구성된다. 이 때 모든 frame을 I-frame으로 구성하는 무손실 압축 방식이 MJPEG이며, 용량이 크지만 CCTV 등 각 frame의 정보가 중요한 상황에서 사용된다.
Frame Type | Descriptions |
---|---|
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을 지원하여 압축률을 높인다.
아래는 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 YCrCb Block(8x8 pixels) Macroblock(16x16 pixels) Slice Picture GOP Sequence(+Header) MPEG
특히, MPEG-4 Part.2 / ASP codec에서는 DCT-양자화 과정에서 연속된 frame 간의 차이를 통해 영상 속 움직임이 있는 객체를 구별하는 motion estimation과 frame 화질을 개선하는 motion compensation 과정, 즉 inter-prediction(frame 간 예측)이 추가로 수행된다.
시간 중복성 제거
한편 H.264 / AVC codec에서는 9가지 예측모델을 사용하여(ex. 특정 4x4 pixel이 인접하고 있는 윗 부분의 pixel을 사선 방향으로 이동시켰을 때의 값과 같은 경우를 mode n으로 설정 후, 해당 mode 값만을 저장) intra-prediction(frame 내 예측)을 수행해 앞선 inter-prediction logic에 추가한다. H.265 / HEVC에서는 35가지 예측모델이 정의된다.
공간 중복성 제거
쉽게 말해, 한 block 안에 서로 다른 pixel 값이 존재하면 4등분하여 세분화해가며 tree 형식으로 저장하는 방식이다.
: Image CTU CU PU/TU 단계로 분할하여 휘도(Luma), 색차(Cb, Cr) block 및 관련 구문 요소로 저장한다.
FF(Fast Forward) MPEG. 영상과 음성 스트림에 대해 다양한 종류의 형태로 기록하고 변환하는 리눅스 기반 프로그램으로, 여러 free sofrware와 open source library로 구성되어 있다.
Options | Descriptions |
---|---|
-c:v | Encoder codec 종류 설정. |
-b:v -b:a | CBR 방식의 bitrate 값 설정, -vbr 옵션으로 VBR 전환 가능. 값 설정 시 codec이 처리 가능한 가장 가까운 bitrate로 설정. |
-crf | Constant rate factor 설정. |
-r -framerate | Input에 저장되어 있는 시간 정보를 무시하고 설정한 fps에 맞추어 생성. |
-preset | Preset 설정(fast/medium/slow) |