Treasurej's Blog

x264 - GOP size

GOP (Group of Pictures)

이것은 MPEG-1/2 인코딩의 가장 기본으로, 키 프레임부터 다음 키 프레임까지의 프레임 모음을 뜻하는 겁니다.
프레임 타입에는 I, P, B 의 세가지가 있으며 각각의 특징은 아래와 같습니다.

- I 프레임 - Infra Frame 의 약자로, 쉽게 말해 키 프레임 입니다. 이것은 JPEG 같은 방식으로 소스로부터 직접 압축되어 온 전체 그림이죠. 가장 화질도 좋지만 가장 용량도 큽니다.

- P 프레임 - Previous 또는 Predicted Frame 이라 불리며, 이전에 나온 키 프레임의 정보를 바탕으로 구성된 프레임 입니다. 화질/용량 둘 다 중간급입니다.

- B 프레임 - Bidirectional Frame 의 약자로, 전후의 I/P 프레임의 정보를 바탕으로 구성된 프레임 입니다. 화질/용량이 다 최하급입니다.

이 것들의 순서는 대충 I B B P B B P B B P B B I B B P ... 식으로 I 프레임들 사이에 P 프레임들이, I/P 프레임들 사이에 B 프레임이 들어가는 방식으로 구성됩니다. 그리고 I 프레임부터 다음 I 프레임 전까지를 하나의 GOP 로 묶고, GOP 크기는 그 프레임들의 갯수가 되죠. 고로, 위와 같은 경우엔 GOP 크기는 12가 됩니다.

보통 MPEG 인코더들엔 저것을 설정하는 방법이 P 프레임의 갯수와 B 프레임의 갯수를 설정하게 되는데, P 프레임의 갯수는 GOP 안에 들어가는 P 프레임의 갯수고, B 프레임의 갯수는 I/P 프레임 사이에 들어가는 갯수입니다.
고로, 위와 같은 경우 P 프레임 갯수는 3, B 프레임 갯수는 2 가 됩니다.

이 GOP 관련에는 두가지 옵션이 있습니다.
Scene Detection 이라 불리는 기술과 Closed GOP 라고 하는 것이죠.

Scene Detection 은 요즘 웬만한 코덱에는 다 붙어있는 것으로, 화면이 바뀌는것을 감지해서 거기에는 I 프레임 (avi 의 경우 키 프레임)을 끼워넣는 방식입니다. 아무래도 다른 프레임들은 딴 프레임들에 의존하는 프레임들이니, 그런 프레임들과 현재 프레임에 변화가 크면 그만큼 화질이 떨어지게 됩니다. 움직임이 빠른 장면에서 깍두기들이 많이 생기는 이유도 이와 같은 것입니다. 하지만 장면 변환시마다 키 프레임을 넣어주면 용량은 좀 불겠지만, 화질 면에선 많은 향상을 가져올수가 있죠.

Closed GOP 는 GOP 구성중 다음 I 프레임 전의 B 프레임들을 빼 버리는 방법입니다.
그러니
I B B P B B P B B P B B I B B P ... 가 아니라,
I B B P B B P B B P I B B P ... 가 되겠죠.

이 것을 하는데는 여러가지가 있습니다만, 첫번째로 이것을 하는 이유는 MPEG 편집시의 용이함 때문입니다.

동영상을 자를 경우, 재인코딩 하지 않는 이상 반드시 첫 프레임은 I 프레임, 그러니 키 프레임이어야 합니다.
그 외의 프레임들은 그 앞에 나온 프레임들의 정보를 이용하는데, 첫 프레임은 앞에 아무 프레임도 없으니 그런 의존적 프레임들이 위치할수가 없습니다.
그 리고 MPEG-1/2 의 경우 마지막 프레임은 반드시 I/P 프레임이어야 하죠. B 프레임은 위와 같은 이유로, 뒤에 나오는 프레임을 이용하는데, 뒤엔 아무 프레임도 없으니 올수가 없습니다.

헌데 위의 보통 GOP 의 경우 동영상을 자를때 어디를 잘라도 몇개의 프레임이 소실됩니다.

예를 들면
I B B P B B P B B P B B // I B B P ...

// 위치를 자를 경우 뒤쪽 부분이야 첫 프레임이 I 프레임이니 문제가 없지만, 앞쪽 부분은 붉은색으로 표시된 마지막 프레임이 B 프레임들이므로 이 두개의 B 프레임이 소실됩니다. 물론 부분 재인코딩을 해 주는 프로그램도 있고, 그런 경우 그 부분을 다시 압축해서 맞는 프레임으로 바쭤 주기도 하지만, 이럴 경우 그 하나의 GOP (프레임 하나만을 재인코딩 할수는 없고, 반드시 그것을 포함하는 GOP 전체가 재인코딩 되어야 합니다)는 화질이 뚝 떨어지게 되죠. 단순히 자르고 붙이는 편집시에 이런 문제는 그리 달가울리가 없습니다.

하 지만 Closed GOP 를 사용할 경우
I B B P B B P B B P // I B B P ...

위와 같이 되니, // 부분을 잘라도 전혀 문제가 없게 됩니다. 그러니 자르고 붙이기가 더 용이해지죠.

두번째 이유는...

I B B P B B P B B P B B (I) B B P ...

예를 들어 (I) 부분에서 장면이 전환되었다고 할 경우, 그 바로 앞의 붉게 표시된 두개의 B 프레임은 파란색으로 표시된 앞의 P 프레임과 바뀐 장면의 I 프레임의 정보를 이용하게 됩니다. 그렇게 될 경우 완전히 다른 두개의 프레임의 정보를 이용하게 되므로 심각하게 화질이 떨어지게 됩니다. 하지만 Closed GOP 를 사용할 경우 저런 문제가 사라지므로 약간의 화질 향상을 기대할수 있습니다.

참고로, 이전에 나왔던 Dazzle DVC 2 의 경우, 저런 상황에서는 저 두개의 B 프레임이 완전히 깨져 버리더군요. 요즘엔 고쳐 졌을지 모르겠습니다만.

이것이 위의 Scene Detection 과 같이 사용되면 더 나은 화질을 기대할수 있을지도 모르겠군요. 아, 물론 Closed GOP 사용시 전체적인 용량이 좀 늘어날겁니다.

(참고로, GOP 앞엔 Sequence Header 라는 것을 넣을수도 있는데, 안 넣어도 그냥 재생엔 문제가 없습니다만, 이것을 매 GOP 마다 넣지 않으면 DVD 로 제작했을시 재생 시작하자마자 멈춰버리거나 하는 현상이 생깁니다. 그러니 DVD 제작용이라면 Sequence Header 간격을 반드시 1 로 주시길)


GOP 에 대한 마지막으로, 어떤 정도가 가장 화질에 좋느냐는것에는 정확한 답이 없습니다. 움직임이 빠를수록 GOP 는 작은게 좋고, 움직임이 느릴수록 GOP 는 큰것이 좋죠.

B 프레임이 화질은 비록 최하라 해도, 움직임이 거의 없어서 앞의 프레임을 그대로 복사해 오는 정도가 된다면, 이건 최소의 용량으로 공짜 화질을 얻게 되는 셈입니다. 이럴경우 전체적으로 용량이 작아질테니 보다 높은 설정을 사용해서 전체적으로 화질을 더 올릴수가 있죠.

반대로 I 프레임이 화질이 좋다고 해서 이것만을 사용하게 된다면, 이것은 화질이 좋다고 해도 용량을 많이 먹게 되므로, 원하는 용량에 맞출 경우 설정이 엄청나게 낮아질수밖에 없고, 고로 전체적으로 화질이 엄청나게 떨어져 버리게 됩니다. 대신 움직임이 아무리 많아도 특별히 더 떨어지는 부분은 없게 되겠죠.

쉽게 비교하면, 정해진 용량에 동영상을 맞춘다고 할 경우, B 프레임이 많으면 전체적인 화질이 좋아지지만 급격한 움직임에서 화질이 떨어지게 되고, I/P 프레임이 많으면 급격한 움직임에도 특별히 화질이 떨어지진 않지만, 전체적으로 화질이 많이 떨어지게 됩니다.

그러니 저용량 고화질의 조건은 이 세개를 어떻게 잘 조합하느냐지, 화질이 좋다는 것만 골라서 쓰는것이 아닙니다.
정 화질을 높이고 싶으시면 Scene Detection 과 Closed GOP 를 같이 사용하시면 보다 나은 효과가 있을 겁니다.


Categories

전체글 (75)

Recent Entries

Public Voice

Trackbacks

Favorite Tags

Follow treasurej on Twitter  treasurej facebook  treasurej's blog rss 2.0


You can also find us on the following sites : Lifestyle | Mind | Professional | Blog