Search

MPEG-1

MPEG-1이란

VCR에 영화를 저장하던 것을 디지털로 Audio CD에 구현하는것을 목적으로 개발됨.
비디오테이프는 10번 이상 재생하면 화질열화가 발생함.
CD-ROM은 오디오를 저장해서 듣기 위한거였는데 여기다가 비디오를 구겨넣기. 최소 2시간짜리 영화를 열화없이 저장미디어에 기록하고 재생하는 것이 목적이다.
CD는 용량이 650MB이다. 당시에는 압축 안하고 노래 15곡을 저장해서 650MB를 꽉 채웠다.
MPEG-1은 초당 1.5mbps의 비트율을 허용한다. 즉 1.5mbps미만으로 유지해야한다.
VCR보다 화질이 개선되면서 열화가 없어야 한다. 따라서 H.261보다 coding efficiency를 높였다.
이제 대부분 스트리밍으로 보는걸로 바뀌어서 잘 안쓰지만 초고속 네트워크가 없는 곳이 있으면 디스크를 사용하는 경우도 있다.
MPEG = moving picture expert group. 일본이 주도적인 역할을 하고 royalty free로 공개했다.
sony, panasonic등이 개발했다.
저장매체에서 중요한 기능은 random access이다. 영상을 볼때 이전으로 되돌리거나 건너뛰거나 fast forward등의 기능을 제공해야하기 때문이다. video codec은 기본적으로 predictive coding인데 (Ibbpbbp..) 내가 b프레임을 보려면 처음에 i를 보내야하고 그다음 p를 보내고 나서야 b를 만들어서 볼수있는건데, Random Access하려면 데이터가 온전히 다 저장되어있어야 하는 문제가 있다.
H.261에다 random access와 visual quality 향상을 추가해야한다.
예전프레임의 정보와 independent한 사진은 I밖에 없다. 따라서 random access가능하게 만드는 포인트는 i밖에 없다. random access포인트를 가지고 picture들의 그룹을 만들어야한다.
i-frame을 별도로 넘기면 fast forward, rewind 등의 기능을 만들 수 있다. 따라서 이 기능을 위해서 GOP(Group of Pictures)구조를 만들었다.
화질을 개선하기 위해서는 H.261은 모뎀기반 통신미디어이고 real time통신 기술인 반면 mpeg은 저장매체에 저장하는 상황이므로 프레임 스킵이 없고 b프레임도 쓸수 있다.
수작업으로 픽셀단위로 수정하고 인코딩한 비트스트림을 CD에 대량으로 구워넣어서 판매하는 경우도 많았다.
복호의 실시간성만 요구되고 encoding은한번만 제대로 하면 되기 때문이다.
중간중간 i-frame이 존재해야 해당 프레임을 보여줄수 있으니 GOP가 필요하다. 그럼 i-frame단위로 랜덤 에게스가 가능하다. 시퀀스 헤더 = 랜덤 엑세스 포인트(i-frame)
gop데이터의 한묶음의 크기를 작게 하면 i-frame이 많이 심어지는거고 데이터를 많이 쓰게 된다.
15프레임마다 하나의 random access포인트를 두고 30hz라면 0.5초마다 하나씩으로 정해진다. 15개 영상을 한묶음으로 한다. forward backward mv 둘다 사용해서 interpolation을 수행할 수 있다.
b프레임은 i와p를 가지고 예측한 프레임이다. b프레임은 코딩 순서에 의해서 필연적으로 delay가 발생한다. 하지만 i를 보낼때와 비교해서 b가 더 작으니까 더 선명하게 visual quality를 높일수있다.
H.261과 비교해 MPEG의 다른점은 쌍방향 예측을 사용한다는 것(b-frame 사용)
루프필터 안쓰고 half pel단위 memc를 사용함
영상의 드롭(Frame skip)대신 b-picture를 삽입함.

MPEG-1 알고리즘

비디오 신호 포멧은 거의 완전한 자유도를 가지며 1화소에서 4096화소까지 허용된다. 이론적으로 4k비디오도 mpeg-1으로 인코딩 가능하다는 것이다.
p-picture는 forward motion vector만 사용하는것이고 i-picture는 intra macroblock = 화면정보만으로 구현한다.

GOP

화질이 좋고 편집가능해야하고 랜덤엑세스가 가능해야한다. 화질을 좋게하려면 프레임을 의존적으로 사용하도록 만들어야하는데 그럼 중간에 끊을수가 없으므로 편집이 안된다. 편집도 i-frame에서만 가능하다. 따라서 gop단위로 편집할수밖에 없다.
GOP단위로 화질이 급격하게 변하는 것을 막아야한다. gop와 화질 연속성을 유지하려면 인접한 gop사이에서 정보를 공유하는것이 필요하고 이로 인해 의존성이 발생한다.
하지만 gop를 독립적으로 하면 편집을 할 수 있지만 화질문제가 발생하는 trade-off가 존재한다.
독립적인 GOP ⇒ Random Access에 유리함(폐쇄 gop) 최초 몇개의 b picture가 이전의 gop에 의존하지 않는다.
의존적인 GOP ⇒ 부호화 화질을 중요시함.
gop간 링크가 끊어지는 경우 선두의 2개의 b픽쳐는 버리라고 broken link플래그를 보내준다.
폐쇄 gop플래그는 의존하지 않는다는 걸 알려주는 플래그로 마음대로 편집할 수 있다.

쌍방향 예측

화질연속성을 만들어주기 위해서 앞의 두개의 b를 이전 프레임의 p와 함께 구성한다.
화질 연속성이 필요없고 편집을 중요시한다면 연속성 없이 설계할 수 있다.
15프레임 = 0.5초 분량 = 1 gop
broken link가 set되면 b0, b1을 버린다 i2부터 시작함.

Half pel ME/MC

MPEG-1에서는 half pel MC가 루프필터를 대체하며 루프필터에 비해 연산량이 적다.
최근에는 quarter pel과 looop filter를 함께 적용하기도 한다.
gloabl minimun상황에서는 모든 pel을 찾을필요가 없다. quadratic error function에서 global minimum을 찾아나가면 된다. sub-pixel motion compensation 처리로 integer pel단위로 처리해서 높은 impulse값 보내는것을 방지한다.
sub-pixel은 실제로 존재하지 않는 값이지만 중간 pixel값을 만들어서 더 정확하게 motion을 찾는다.

MPEG-1 Data Structure

픽처 층, 매크로블록, 블록 레이어는 H.261과 똑같다.
GOB레이어가 사라지고 슬라이스로 변경되고 시퀀스와 gop레이어가 랜덤 엑세스를 위해서 추가되었다.
슬라이스 층도 GOB처럼 격벽구조를 두는 개념이다. 임의의 macro block 개수로 slice를 구성한다.

Sequence Layer

시퀀스 헤더 ⇒ 화면의 수평크기 수직크기 등의 정보를 보낸다
start code는 시퀀스의 깃발로 에러가 propagation되는 것을 막을 수 있다.

GOP Layer

gop층에서는 gop start code와 closed gop, broken link플래그 picture layer가 들어간다.

Picture layer

picture layer에는 picture start code, picture type등이 들어감
picture type에는 i, p, b, d픽처가 있고 d-picture ⇒ DC성분만을 갖는 화면. thumbnail image이다
썸네일 이미지는 빨리 보내기 등에 사용된다.
DC값은 pixel의 mean값과 똑같다.

Slice Layer

picture layer아래 슬라이스 층이 들어간다. 하나의 픽쳐를 여러개의 슬라이스로 나눈다.
h.261은 33개의 매크로블록 단순히 잘라서 넣었는데 슬라이스는 포함하는 MB갯수가 가변적이다.
MB가 포함하는 데이터의 양이 다르므로 복잡한 영역은 많은 양의 데이터를 하나의 start code로 커버하고 단순한 영상인 경우에도 깃발이 촘촘히 박히면서 복잡한 영역에서 에러를 찾는것이 오래걸린다.
그래서 영상복잡도가 균일하게 slice단위를 사용한다. encoder가 슬라이스 당 MB갯수를 조정해서 데이터양을 균일하도록 만든다.

Macroblock layer

MB Stuff, MB Escape, MBType, Quantization Step, CBP, 블록 레이어 등
매크로블록 스터핑 = dummy data 전송해서 conection을 유지함.
MBType = 교통정리 신호
intra의 경우는 coded block pattern을 보낼필요없음 6개의 블록을 다 코딩하라는 신호
qunatization step size가 0이라는건 건너뛰라는 신호
매크로 블록 escape은 33개 이상 연속으로 스킵해야한다는 뜻
MBA로 스킵되는 mb타입은 p픽처에 mc, coefficient없는경우,
b-picture에서 mv같고 coefficient없는경우.
i-picture는 스킵하지 않음.
I인 경우 모션벡터, CBP 없음
P는 역방향예측 없음
D는 무조건 intra
슬라이스단위로 mvd보낼때 처리하는 방법? mvd = mv - mvp
슬라이스가 한행을 넘는 상황이 발생하면 화면의 우단에서 한행밑의 좌단으로 mvp설정
이전 슬라이스와 현재 슬라이스간의 dependency초기화해줘야함. 슬라이스 선두에서는 mvp를 리셋해줘야 함

Block Layer

DC값은 주변 블록의 DC값과 비슷하다. 즉 블록 내 pixel의 평균값은 주변 블록 내 pixel의 평균값과 유사하며 DC 계수를 바로 이전 블록의 DC값으로부터 예측할 수 있다.
다음 매크로블록의 DC값은 이전 매크로블록의 마지막 블록의 DC값으로 예측한다
DC예측치는 슬라이스의 맨 앞부분이거나 intra가 아닌 MB에서 128(중간값)으로 리셋됨
DCT계수 양자화 후에 지그재그 스캔을 수행하고 VLC를 수행한다. VLC테이블은 ESC를 필수적으로 포함한다.
발생 빈도가 높은것은 VLC table이 마련되고 발생 빈도가 낮은 것은 FLC로 표현한다.
DCT계수의 ESC코드에 의한 run과 level의 FLC가 만들어짐