영상 압축기술의 시작 Part.1-IBP 프레임의 모든 것


왜 ProRes가 H.264보다 용량이 더 클 수밖에 없을까요?

“I Frame Only 구조는 무조건 화질이 더 좋은 것일까요?

“H.265는 압축을 많이 하니까 화질이 더 안 좋은 것 아닌가요?”

카메라를 샀는데 ALL-I(Intra) 설정은 무엇을 뜻하는 것일까요?

오늘은 영상을 압축하는 데 있어서 가장 중요한 기술 중의 하나인 ‘IBP 프레임’ 구조에 대해서 설명 드리겠습니다.


글의 순서


1. IBP 프레임이란?


IBP프레임이란

IBP 프레임 구조라는 것은 1초에 30장에서 60장의 이미지를 이용해서 비디오를 만들 때,

모든 프레임들에 다 진짜 이미지를 넣을 건지,

아니면 움직이는 부분만 저장해서 기록을 할 것인지,

이와 같은 비디오 저장에 대한 압축 기술을 의미합니다.


2. ‘I’ 프레임이란?


I 프레임은 Intra-Coded Frame을 뜻합니다.

개별(Intra) 이미지라는 뜻입니다.

쉽게 말해 I 프레임은 ‘진짜 이미지’가 들어가 있는 겁니다.


비압축

‘MPEG-2 I Frame Only 코덱이다’라고 하면

1초에 30장 아니면 60장의 이미지 프레임 전체에 실제로 ‘진짜 이미지들’이 들어가 있다는 말입니다.


그렇다면 비압축과 I Frame Only는 화질이 똑같을까?

그렇지 않습니다.

비압축이나 I Frame Only 비디오나 둘 다 동일하게 모든 프레임이 진짜 이미지 들어가 있다는 점은 같습니다.



MPEG-2 I Frame Only

그런데 I Frame Only의 MPEG 비디오는 한 장 한 장의 이미지가 모두 JPG로 압축되어서 저장되는 것이라고 보시면 됩니다.

포토샵으로 BMP 파일을 JPG로 압축하면 많이 압축되는 것을 보실 수가 있을 겁니다.

이전 글에서 설명한 대로 1920X1080 사이즈를 갖는 BMP 파일 1장은 보통 6MB 정도의 용량을 차지하게 됩니다.

비디오 용량은어떻게 결정될까? Part.1

즉,  BMP 이미지는 전혀 압축되지 않은 비압축 이미지라는 것을 아실 수가 있을 겁니다.

그러면 이것을 이제 JPG로 압축을 해보겠습니다.


JPG 압축률

JPG는 압축률을 정할 수가 있습니다.

많이 압축하면 화질이 좀 깨지게 될 것이고, 적게 압축하면 화질은 좋아지는 대신 용량은 더 커지게 될 겁니다.


그래서 우리는 이 비압축 BMP 파일을 JPG로 압축을 할 것인데 단, 최대, 표준, 낮음 이 3가지 방식을 사용해 보도록 하겠습니다.


6MB였던 BMP 파일을 ‘최고 용량’의 JPG로 압축을 하면 1MB로 줄어들게 됩니다.

즉, 6/1 정도 줄어들게 되었습니다.

그렇다면 이것을 그대로 1.33Gbps에 쓰였던 ‘비압축 YUV 비디오’에 적용을 시키면 얼마가 나오게 될까요?

대략 200Mbps 정도가 나오게 됩니다.

그러니까 가장 적게 압축을 해서 높은 화질을 보여주는 I Frame Only 비디오는 약 200Mbps 정도를 갖게 된다라는 결론이 나오게 됩니다.

이 대역폭이 바로 ProRes 비디오의 대역폭입니다.


이번에는 ‘표준 용량’으로 비압축 BMP를 JPG로 압축해 보도록 하겠습니다.

표준 방식으로 JPG를 만들면 대략 0.3MB 정도의 용량으로 줄어들게 됩니다.

대략 20/1 정도 압축이 되었습니다.

NDI처럼 I Frame Only 기반이기는 하지만 빠른 전송을 목적으로 하는 비디오 코덱들은

이 정도의 압축률인 대략 100Mbps 정도로 HD 전송에 사용하게 됩니다.

용량도 줄여야 되고 전송도 빨라야 되기 때문입니다.


여기에서 한 단계 더 나아가서 ‘최저 용량’으로 JPG를 만들면 약 0.16MB 정도가 나오게 됩니다.

대략 30/1 정도로 압축을 하게 된 건데 여기까지 오면 화질이 좀 떨어지게 됩니다.

그래서  I Frame Only로 이 정도를 사용하지는 않습니다.


3. ‘P’ 프레임이란?


P 프레임은 Predictive-Coded Frame을 뜻합니다.

프레임을 예측해서 저장하는 것을 의미합니다.


한 가지 예를 들어 보겠습니다.


P-Frame이란_1

이렇게 도로에 차가 있는데 차가 이동하는 것을 비디오로 찍었다고 가정을 해보겠습니다.



P-Frame이란_2

그러면 첫 번째 프레임에서 두 번째 프레임으로 바뀔 때, 배경은 그대로 있을 것이고 차만 이동하게 될 것입니다.



P-Frame이란_3

그렇다면 두 번째 프레임을 기록할 때 배경은 저장하지 않고 차가 이동한 부분만 따로 떼어내서 저장하면 어떻게 될까요?



P-Frame이란_4

두 번째 프레임에 저장된 차가 이동한 부분과 첫 번째 프레임의 배경을 합성해버리면

두 번째 프레임은 아주 적은 데이터로 저장되는 효과를 얻을 수가 있습니다.

이것은 새로운 기법이 아니라 과거에 만화 영화를 만들 때 셀로판지 위에다가 그림을 그려서 배경에 붙여넣었던

이런 전통적인 만화 영화 제작 기법에서 따가지고 온 겁니다.


이것을 그대로 적용해서 만든 것이 바로 P 프레임이 됩니다.



P-Frame이란_5

그러니까 P 프레임은 현재 가지고 있는 정보와 이전 프레임의 값들을 합성해서 만들어내면 되니까 ‘그 차이값만’ 계산할 수 있으면 됩니다.

즉, 앞에 나왔던 I 프레임과 현재 기록된 P 프레임의 정보의 차이만 가지고 오면 되는 방식입니다.


4. ‘B’ 프레임이란?


B 프레임은 Bi-Direcionally-Coded Frame을 뜻합니다.

즉, 양방향으로 뭔가 참조를 한다는 뜻입니다.

그런데 B 프레임을 이해하시기 위해서는 전통적인 IBP 프레임 구조인 ’15 LONG GOP’라는 개념을 조금은 이해하실 필요가 있습니다.


15 Long GOP

이 IBP GOP 구조를 보시면 굉장히 많은 B 프레임들이 들어가 있는 것을 보실 수가 있습니다

I 프레임은 위에서 설명한 바와 같이 진짜 이미지가 저장되는 겁니다.

P 프레임은 이전에 나온 I 프레임과 지금 프레임의 차이만 저장을 하면 되는 겁니다.

P 프레임이 이전의 I 프레임과 지금 프레임의 차이값만 저장하는 것에 비해서,

B 프레임은 앞에 있는 I 프레임, 그리고 뒤에 있는 P 프레임의 중간 차이 값들을 저장을 하게 됩니다.


IBBP프레임

다시 말해, P 프레임이 과거에 나왔던 것, 이전에 있었던 것들을 참조해서 데이터를 만들어낸다고 한다면

B 프레임은 과거뿐만 아니라 미래에 올 데이터까지 같이 참조해서 이미지를 만들어낸다는 특징이 있습니다.


그림으로 다시 설명드리겠습니다.


I-Frame

여기 첫 번째 프레임에 차가 이 정도 위치에 있습니다.



B-Frame
B-Frame
P-Frame

그리고 두 번째, 세 번째, 네 번째 프레임을 보시면 배경은 그대로 있고 차만 움직입니다.


첫 번째 프레임은 JPG로 압축되면서 I 프레임으로 저장이 될 겁니다.

그리고 네 번째 프레임으로 뛰어넘어가서 P 프레임이 저장되는 방식은

1번 프레임과 4번 프레임의 차이 나는 부분, 이 정도만 저장하고 나머지는 1번 프레임의 배경을 그대로 갖다 쓰기만 하면 됩니다.

이렇게 움직이는 부분만 떼어내서 P 프레임을 만듭니다.


그런데 처음 만들어진 B 프레임

IBBP Frame

즉, 두 번째 프레임은 첫 번째 나온 I 프레임과 네 번째 오는 P 프레임을 참조해서 그 중간 값들을 찾아냅니다.

그러면 더 적은 부분만 저장해도 원본 이미지를 다시 복원할 수가 있습니다.



IBBP Frame
IBBP Frame

마찬가지로 세 번째 오는 B 프레임도 첫 번째의 I 프레임과 네 번째의 P 프레임을 참조해서 그 중간값만 저장을 하게 됩니다 .

이렇게 I 프레임에만 진짜 이미지를 집어넣고 P 프레임은 움직이는 값만,

B 프레임은 이 두 개를 참조해서 그 차이값만 저장을 하게 되니까 결과적으로 비디오의 용량은 엄청나게 줄어들게 됩니다.


그런데 이렇게 압축된 데이터를 우리가 볼 때 그냥 I 프레임, B 프레임, P 프레임을 볼 수는 없습니다.

그렇게 되면 우리는 구멍이 숭숭 뚫린 비디오를 보게 될 겁니다.

그래서 비디오 플레이어들은 이 IBP 프레임을 다시 해석해내서  원래 있을 법한 이미지들로 복원해서 우리에게 보여주게 됩니다.


I 프레임과 P 프레임은 실시간으로 만들어내는 것이 가능합니다.

왜냐하면 이전에 이미 나왔던 것들을 참조해서 P 프레임을 만들기 때문에

I 프레임, P 프레임, I 프레임, P 프레임 이런 식으로 실시간으로 인코딩을 하는데 전혀 문제가 없습니다.


그런데 B 프레임은 실시간 인코딩은 불가능합니다.

B 프레임을 만들기 위해서는 앞으로 오게 될, 뒤에 나오게 될, P 프레임을 알아야지만 만들어낼 수가 있습니다.

다시 말해, 미래에 나타날 이미지들을 미리 갖다가 쓸 수는 없는 법입니다.

그래서 비디오가 그 부분까지 가야, 시간이 흘러야 그 데이터를 가지고 올 수 있기 때문에

그래서 IBP 프레임 구조를 갖는 비디오들은 실시간이 아니라 최소 5~6프레임 정도의 딜레이가 들어가서 인코딩이 진행되게 됩니다.


여기까지 우리는 IBP 프레임의 구조에 대해 살펴 보았습니다.

이제 이 글을 제대로 이해하신 거라면 여러분들은 인코더에 있는 고급 항목을 선택해서 필요한 설정값들을 만져줄 수 있게 되신 겁니다.

Leave a Comment