H.264/AVC 표준에는 프로파일마다 일정한 레벨(Levels)이 정해져 있습니다.

레벨은 해당 동영상을 디코딩(재생)할 때 어느정도의 자원이 필요한지에 따라서 정해놓은 영상의 등급이라고 볼 수 있습니다.

레벨이 중요한 이유는 재생기기마다 디코딩 가능한 레벨이 제한되어있는 경우가 많기 때문입니다.

따라서 인코딩한 영상을 재생할 재생기기의 지원 레벨을 확인하고 해당 레벨에 맞는 인코딩을 해야겠죠.


레벨을 결정하는 요소들은 여러가지가 있지만 대체로 DPB에 의해서 결정되는 경우가 많습니다.

DPB(Decoded Picture Buffer)는 인코딩 또는 디코딩시에 참조프레임을 저장해 두는 공간을 말하는데 DPB의 크기가 클수록 레벨도 높아지게 됩니다.


H.264/AVC 표준에서는 DPB의 크기를 매크로블럭의 개수로 표시하는데 예를 들면 High 프로파일의 레벨 4.1에서는 32768개를 넘지 않아야 합니다.

매크로블럭의 크기는 16x16이니까 픽셀 수로 바꿔보면 16*16*32768 = 8388608 입니다.

그렇다면 인코딩하려는 영상의 해상도가 1280x720일 때 최대로 사용할 수 있는 참조프레임의 수는 어떻게 될까요?

1280x720 크기의 프레임을 똑같이 픽셀 수로 바꿔보면 1280*720 = 921600 이고 DPB의 크기에 해당하는 8388608에 몇 장의 프레임이 들어갈 수 있는지

계산해보면 8388608 / 921600 = 9.102 즉, 최대 9장의 프레임을 참조프레임으로 사용할 수 있다는 말이 됩니다.

마찬가지로 1920x1080 해상도의 영상도 계산을 해보면 8388608 / 1920*1088 = 4.0156 즉, 최대 4장의 참조프레임을 사용할 수 있습니다.

(내부적으로는 언제나 16x16 크기의 매크로블럭 단위로 인코딩되기 때문에 1080이 아니라 1088을 곱해주는 것입니다.)


이런식으로 인코딩하려는 해상도에 따라서 최대로 사용 가능한 참조프레임의 수를 계산할 수 있습니다.

대표적으로 많이 사용되는 DPB의 크기(매크로블럭 개수)는 Main@3.1 = 18000, High@4.1 = 32768 등입니다.


추가로 영상의 프레임 레이트에 따른 레벨을 알아보면 High@4.1 에서는 245760입니다. 역시 이것도 매크로블럭의 개수로 나타낸 수치입니다.

초당 245760개의 매크로블럭이 디코딩될 수 있다는 말이니까 1920x1080 영상으로 계산해보면 최대 30 fps가 되겠죠. (245760*16*16 / 1920*1088 = 30.1176)


보통은 High@4.1까지 지원하는 경우가 많기 때문에 1920x1080 영상에서 참조프레임 4장, 프레임 레이트 30 fps가 High@4.1의 최대치라는 것만

기억해두면 다른 해상도의 영상들도 역산해서 쉽게 알아낼 수 있습니다.




'인코딩 일반' 카테고리의 다른 글

H.264/AVC 디코더 간의 화질 차이?  (1) 2012.12.15
x264 QP 값의 범위  (6) 2012.12.13
영상의 해상도와 16배수  (0) 2012.12.12
x264 CRF 인코딩과 프레임 레이트  (0) 2012.12.10
MeGUI 2460 버전의 x264 옵션 정리  (29) 2012.12.09
Posted by 김코덱
,