DMB·PMP

프레임(Frame)과 동영상 압축 기법

차돌 바위 2006. 2. 6. 15:14

프레임(Frame)이란?



Frame rate

 

우리가 보는 동영상 파일은 결국 정지된 그림 화면들을 지속적으로 변경해 가면서 보여주는 것입니다. 이때 1초에 몇 화면을 표시하는지가 Frame Rate 입니다.

이렇게 움직이는 피사체를 연속적으로 사진으로 찍은 다음 이런 여러장의 연속 사진을 빨리 돌리면 우리가 보는 동영상이 될 것입니다.

결국 동영상은 한장한장의 정지 화면으로 구성되는 것이고 이런 정지화면 하나 하나를 프레임(Frame)이라고 합니다.

 

영화 필름의 경우에는 무조건 각각의 프레임이 하나의 사진이 되지만 디지털 동영상의 경우에는 모든 프레임을 하나의 완전한 그림으로 저장하려면 너무나 많은 용량이 소요되기 때문에 이를 압축하게 됩니다.

 

디지털 동영상을 압축하는 과정에서는 이렇게 변화가 없는 부분과 변화 되는 부분을 구분해 변화되는 부분에 데이터만 이용함으로서 효율적인 압축을 시도하고 있습니다.

 

영화 필름 : 24~48 fps(Frame per second)

TV : 25~30 fps

동영상 압축기법

 

동영상도 어차피 "연속적인 그림"이라고 볼 수 있는데, 이를 압축하지 않는다면 1분 정도의 동영상을 저장하면 그 용량이 1GB 정도가 될 것입니다. 따라서, 동영상은 필수적으로 압축과정을 거칠 수 밖에 없습니다.


1) 비손실 압축과 손실 압축

압축방식에는 비손실 압축과 손실 압축이 있습니다.

비손실 압축이란, 프로그램이나 데이터등의 압축에 사용되는 zip, rar 등등의 압축방식이 있으며 원본 그대로를 압축하기 때문에 압축을 풀면 원본에서 전혀 손상되지 않은 데이터를 그대로 복원하게 됩니다.

손실 압축이란 압축되지 않은 그림 파일인 BMP파일을 JPG로 압축하는 경우를 생각하시면 되겠습니다. 이런 형태의 압축은 원본의 일부분을 변경하는 식으로 압축이 이루어지는 것이기 때문에 절대 원본과 똑같이 되돌릴 수 없습니다. 간혹, RM파일같이 압축률은 매우 높지만 화질은 떨어지는 동영상을 mpeg등의 형태로 바꾸면 화질이 좋아지지 않을까 생각하는 초보분들을 보는데 RM 파일 자체가 이미 손실 압축된 상태이기 때문에 이를 mpeg으로 만든다고 해도 용량만 커질 뿐 화질을 더 좋게 만들 수는 없는 것입니다.(물론, 이런 변환과정에서 화질 향상을 위해 여러 가지 필터들을 적용해서 약간의 효과를 볼 수는 있지만, 화질 좋은 원본을 압축한 것과는 비교할 수 없는 수준입니다.)

2) 공간적 압축과 시간적 압축

그림 파일의 압축에서 사용하는 압축원리는 몇 개의 유사한 색깔을 띄는 점들을 묶어 평균적인 색깔을 띄는 블록으로 바꾸는 경우가 주로 사용되는데 이런 압축방식을 공간적 압축이라고 합니다.

동영상의 압축에서는 이런 공간적 압축은 물론이고, 시간적인 압축 방식도 사용되는데, 키프레임(Key Frame)또는 I-Frame 과 델타 프레임(Delta Frame)또는 P-Frame 을 이용하는 방법을 쓰고 있습니다.

3) 키 프레임(Key Frame)과 델타 프레임(Delta Frame)

앞서 설명한 바와 같이 디지털 동영상의 경우에는 공간적 압축에 부가해 시간적 압축도 사용하는데, 그 원리가 Key Frame과 Delta Frame입니다.

위의 그림은 시간적으로 압축되지 않은 동영상을 보여줍니다. 5개의 프레임이 모두 완전한 그림임을 볼 수 있습니다.

그러나 위의 그림처럼 시간적으로 압축된 동영상의 경우는 ①번과 ⑤번만 완전한 그림이고 2,3,4번은 완전하지 않은 그림임을 볼 수 있습니다.
이때 ①번과 ⑤번처럼 완전한 그림은 Key Frame이며, 2,3,4번처럼 완전하지 않은 그림은 Delta Frame이 되는 것입니다. 이 델타 프레임은 키 프레임에서 변경된 부분의 정보만을 담고 있는 것이며, 5번째에는 1번에서 변경된 정보의 양이 너무 많아 완전한 화면이 되었고, 결국 다시 키프레임이 된 것입니다.
이렇게 연속되는 프레임들을 키 프레임과 델타 프레임으로 나누게 되면, 모든 프레임을 완전한 프레임으로 만드는 방식보다는 훨씬 용량을 줄일 수 있습니다. 이런 압축방식을 시간적 압축이라고 합니다.
DivX를 비롯해 mpeg등의 동영상은 모두 이런 시간적 압축방식을 채택하고 있는데, 여기에는 몇가지 문제점이 있습니다. 대표적인 것은, 동영상중 일부분을 끊어내거나 특정 위치로 바로 이동해 재생하는 등의 조작을 할 때 반드시 키 프레임이 있어야 델타 프레임의 재생이 가능한 것입니다. 만약, 키 프레임이 없는 상태의 델타 프레임만 있다면 이때에는 기준은 없고 기준에서 변화된 부분에 대한 데이터만 있는 것이라서 재생이 제대로 되지 못합니다.
결론적으로 DivX를 비롯한 동영상의 편집시에는 반드시 키프레임에서 끊고, 이어야 제대로 된 파일이 만들어지게 되는 것입니다.

4) B-frame(Bidirectional Frame)

DivX 5.x Por 코덱에서는 키프레임(또는 I-Frame) 과 델타프레임(또는 P-Frame)이외에 B-Frame 이라는 개념을 도입해 적용하고 있습니다.

B-Frame은 기존의 키프레임 및 델타프레임을 이용한 압축방식의 비효율성을 개선해 좀더 효과적인 압축이 가능하도록 하기 위해 만들어진 개념 입니다.

기존의 방식은 항상 앞선 프레임을 기준으로 해 뒤 프레임의 데이터를 다루는 형식이기 때문에 뒤쪽으로 얼마나 유사한 프레임들이 연결될 것인지 또는 어느 부분에서 급격히 화면이 바뀌고 바뀐 상태와 유사한 장면이 연결될 것인지 등에 대해서는 고려하기가 곤란합니다.

 

이에 반해 B-Frame은 앞쪽 프레임 뿐만 아니라 뒤쪽 프레임들까지 고려해 적절한 데이터를 중간에 넣어보려는 시도인 것입니다. 아직은 개발초기 단계이기 때문에 그 효율성이나 가능면에서 기존 방식에 비해 확연히 뛰어난 점을 보여주지는 못하고 있습니다. 하지만 XviD 쪽에서도 이 개념을 적용하기 위해 부단이 노력하고 있는 등 개발자 또는 유저들로부터 많은 주목을 받고 있습니다.

 

 


5) VKI(Variable Key Frame Interval)
동영상 인코딩시 키 프레임은 델타 프레임보다 많은 용량을 가지게 됩니다. 따라서, 키 프레임의 수를 줄이는 것은 용량을 줄이는 효과가 있습니다.
대체로, 키 프레임은 일정한 간격으로 들어가도록 인코딩되는 경우가 일반적이지만, 동영상은 다양한 장면들을 담고 있기 때문에 이런 방법이 비효율적인 경우가 많습니다.
배경이나 동작의 변화가 아주 적은 장면이 지속되는 부분에서 쓸데없이 키 프레임이 많이 들어가는 것은 용량의 낭비일 뿐이며, 동작의 변화가 심한 장면에서 키 프레임을 일정한 간격으로 넣게 되면 키 프레임보다 오히려 델타 프레임의 크기가 더 커지는 상태가 됩니다.
따라서, 동작 변화가 심한 부분은 키 프레임을 보다 자주 넣고 동작 변화가 적은 부분에서는 키 프레임을 가끔씩 넣는 식으로 키 프레임의 간격을 가변적으로 하면 용량을 줄일 수 있는 효율적인 방법이 될 것이며, 이런 방식을 VKI(Variable Key Frame Interval)이라고 합니다.

본래 DivX 3.11a 코덱에서는 일정한 시간간격으로 키프레임을 넣도록 만들어져 있으나, 이것을 개량해 자동적으로 키 프레임을 변화시킬 수 있는 형태로 변경한 코덱이 개발되었으며 DivX VKI patch 또는 DivX 3.20 코덱으로 알려져 있는 것입니다.
현재 널리 사용되고 있는 SBC 인코딩 방법에서는 DivX 3.20 코덱을 쓰지 않고 DivX 3.11a를 그대로 사용하면서 보다 향상된 VKI 기능을 적용할 수 있습니다.
또한, DivX 4.x 코덱은 자체적으로 VKI 기능을 내장하고 있습니다.

출처: http://www.sorell.co.kr/gzi/faq_list.php?table=BBS_MAIN_FAQ_SV&model=SV15