1.GOP란?
GOP는 비디오 압축 효율을 높이고 디코딩 시 참조할 프레임을 체계적으로 관리하기 위한 단위입니다
비디오 관련 도메인 지식을 조금 정리해보려고 합니다.
비디오 데이터는 연속된 프레임들로 이루어져 있습니다.
효율적인 압축과 디코딩을 위해 프레임은 동일하게 구성되어 있지 않습니다.
2. GOP 구성
(1) I-frame (Intra-coded Frame)
- GOP의 시작점으로, 독립적 디코딩이 가능한 프레임
(2) P-frame (Predictive-coded Frame)
- 이전 I-frame 또는 P-frame을 참조해 만들어지는 프레임
- 데이터 중복을 제거하여 압축률 높임
(3) B-frame (Bidirectionally Predictive-coded-Frame)
- 이전과 이후 프레임을 모두 참조하여 만들어지는 프레임
- 가장 높은 압축률
I-frame | P-frame | B-frame | |
압축률 | 3rd | 2nd | 1st |
독립성 | 1st | 2nd | 3rd |
I-frame은 원본 이미지에 가까우며 P,B-frame은 의존성이 필요합니다.
압축률이 높으면 항상 좋은 것일까요?
압축률이 높으면 데이터 용량을 줄지만, 지나친 압축은 화질 열화를 초래하며 최신 코덱은 이 균형을 최적화하고 있습니다.
언제나 어디에서나 Trade-Off는 발생하기에 최적점을 찾는 것이 언제나 도전이 되는 것 같습니다.
하나의 GOP 에는 반드시 하나 이상의 I-frame이 존재해야 합니다. (P, B-frame의 의존성 때문)
비디오 데이터를 사용하는 상황에 맞게 GOP 구성을 다르게 가져가는 것이 유리합니다.
예를 들어 같은 실시간 스트리밍을 지원하는 경우에도
배속 기능과 탐색 기능이 주요한 기능이라면
GOP 길이가 짧거나 I-frame의 비중이 늘어야 탐색시간이 줄어듭니다.
다음 I-frame이 어디 있는지 탐색과 배속 기능은 찾아서 보내줘야하기 때문이죠
이러한 GOP 구조를 효과적으로 활용한 것들이 CODEC입니다.
어느 정도 Trade-Off를 최적화하며 지금도 발전하고 있습니다.