GOP에 대해서 알아보자
2016.03.04 18:19|동영상 이야기/인코딩 일반
GOP (Group Of Pictures)
MPEG 표준 비디오 압축 기술에서 사용되는 프레임(이미지)의 집합을 의미합니다. 쉽게 말해서 여러 장의 이미지를 하나로 그룹화 해서 압축하는 방식이라고 생각하시면 됩니다. GOP를 읽을 때는 '지오피' 또는 '곱'이라고 읽으며, GOP 내에는 일반적으로 세 종류의 프레임이 존재합니다.
I-Frame
: Intra Frame (Intra-Coded)
P-Frame
: Prediction Frame (Predictive-Coded)
B-Frame
: Bi-Directionally Frame (Predictive-Coded)
I-Frame
GOP 간격을 결정할 때 기준이 되는 키프레임 역할을 합니다. 예측을 사용하지 않고 하나의 완전한 이미지를 구성하기 위한 데이터를 포함하고 있기 때문에 다른 프레임을 참조(Reference)하지 않고 독립적인 부호화 및 인코딩(압축)이 가능합니다. 원본 소스에 가장 근접하고 화질이 좋지만 용량이 크고, 압축 방식은 JPEG와 유사하지만 동일하진 않습니다. 데이터 스트림의 어느 위치에도 올 수 있으며, 데이터의 임의 접근(키프레임 탐색)을 위해 사용되기도 합니다.
P-Frame
순방향 예측을 사용합니다. 이전의 I 또는 P 프레임을 참조해서 변화가 발생한 부분의 데이터 만을 포함하기 때문에 I 프레임 보다 용량이 작고 압축률은 높지만, 화질은 I 프레임 보다 떨어집니다. P 프레임을 보기 위해선 완전한 GOP가 디코드 되어야 합니다. 참조하는 I 또는 P 프레임의 데이터가 손실되면 함께 손실을 입습니다.
B-Frame
양방향 예측을 사용합니다. B 프레임 이전의 I 프레임과 다음 P 프레임 또는 B 프레임 이전의 P 프레임과 다음 P 프레임을 참조해서 변화가 발생한 부분의 데이터 만을 포함하기 때문에 가장 용량이 작고 압축률이 높지만, 화질은 가장 떨어집니다. B 프레임을 많이 포함하면 할 수록 용량은 줄지만 화질이 떨어지고, 디코딩에 더 많은 부담을 주게 됩니다. P 프레임과 마찬가지로 참조한 프레임의 데이터가 손실되면 함께 손실을 입게 됩니다.
프레임 간 압축
GOP 압축은 코덱의 압축 방식 중에 프레임 간 압축 방식에 해당됩니다. 배경과 오브젝트 둘 다의 데이터를 가지고 있는 게 I 프레임이고, I 프레임을 기준으로 오브젝트의 움직임만 따로 예측해서 압축한 게 P와 B 프레임이 되는 겁니다. 아래의 그림을 보시면 개념을 이해하는데 큰 어려움이 없을 겁니다.
그림 출처 : tonyshort 님 블로그
Open GOP / Closed GOP
Open GOP는 GOP의 마지막 프레임을 B 프레임으로 압축함으로서 다음 GOP의 키프레임을 해당 GOP의 B 프레임이 참조할 수 있도록 만드는 GOP 구조를 말합니다. Open GOP를 사용하면 키프레임에 IDR 프레임을 사용할 수 없고, 대신 Recovery Point SEI가 삽입된 I 프레임을 사용합니다. 이렇게 함으로서 GOP 사이즈가 작은 경우엔 약간의 이득을 얻을 수 있습니다.
MPEG-2 코덱에선 Open GOP를 사용하고 x264 코덱에선 기본적으로 Closed GOP를 사용합니다. x264 코덱 옵션에서 Open GOP를 체크하면 Open GOP를 사용할 순 있지만, 일반적으로 Closed GOP를 사용하기 때문에 특별한 경우가 아니라면 Open GOP 옵션을 체크할 필요가 없습니다. 그리고 아래의 그림을 보시면 P 프레임의 순방향 예측과 B 프레임의 양방향 예측이 무엇인지 보다 쉽게 이해할 수 있을 겁니다.
GOP 길이
GOP 길이는 임의입니다. 하나의 GOP에는 반드시 한 장 이상의 I 프레임을 포함합니다. 랜덤 액세스, 고속 재생, 역방향 재생을 필요로 하는 경우에는 상대적으로 짧은 GOP를 이용하는 것이 좋고, 장면이 이어지거나 움직임이 없는 곳부터 시작하는 것이 좋습니다. 연속되는 B 프레임의 갯수를 변경할 수 있고, I 프레임으로만 구성하는 것도 가능합니다. 딱히 정해진 길이가 있는 건 아니지만 영상의 FPS 정보를 기반으로 약 ½초를 사용하는 게 대표적이며, 이런 프레임의 그룹을 'Longs GOP'라고 합니다. 일부 카메라에선 6 Frame 단위로 그룹화 하기도 하는데 이런 걸 'Six-Frame GOP' 또는 'Short GOP'라고 합니다.
방송 소스를 녹화한 TS 파일 정보를 보면 "GOP : M=3, N=15"와 같이 표기되어 있는 걸 본 적이 있을 겁니다. 여기서 (M=)은 GOP의 사이즈를 의미하고, (N=)은 GOP의 길이를 나타냅니다. (M=)과 (N=)의 값에 따라서 하나의 GOP에 포함된 프레임 구조가 어떻게 달라지는지 간단하게 예를 들어서 보여드리겠습니다.
GOP : M=3, N=15
{ I B B P B B P B B P B B P B B } { I B B P . . . }
GOP : M=5, N=15
{ I B B B B P B B B B P B B B B } { I B B B B P . . . }
GOP : M=1, N=30
{ I P P P P P P P P P P P P P P P P P P P P P P P P P P P P P } { I P P P P P . . . }
15 Frame
= GOP : M=3, N=15
12 Frame
= GOP : M=3, N=12
nginx를 이용한 스트리밍 서버(빌드 및 설치) (0) | 2020.03.25 |
---|---|
nginx + hls 스트리밍(vod 파일 이용) (0) | 2020.02.03 |
GRRS (GTP(GPRS(General Packet Radio Service) Tunneling Protocol) (0) | 2020.02.01 |
댓글 영역