기본 콘텐츠로 건너뛰기

GOP (Group Of Picture)

GOP('지오피', 또는 '곱'으로 읽는다)에 대해서 조금이라도 이해를 하고 있어야, HDV, AVCHD편집할 때 불편한 점을 극복할 수 있습니다. 이론적인 배경이 꼭 필요한 것은 아니지만, 모르는 것과 아는 것의 차이는 실로 엄청난 결과물을 가져오기도 합니다.
한번 읽어 보는 것만으로도 많은 도움이 될 것이라 생각합니다.


GOP(Group of Pictures)란?
MPEG 비디오 압축 기술을 위한 영상 프레임의 집합을 말한다.
GOP 내에는 3종류의 프레임 존재하는데, I-frame, P-frame, B-frame으로 부른다.

I-frame : Intra Frame (Intra-coded)
P-frame : Prediction (predictive-coded)
B-frame : Bi-directionally (predictive-coded)

 GOP내 프레임간 참조 모델

I-frame은 예측을 사용하지 않고 입력 신호 그대로 저장한 프레임이다. 하나의 완전한 그림을 구성하기 위한 데이터를 가지고 있으며, JPEG와 유사한 방법으로 압축된다.

P-frame은 현재의 프레임과 앞의 I-frame과의 차이를 관찰하여 만들어진 예측 정보(하나의 완전한 그림이 아니다)만을 포함한다. 따라서 I-frame보다 대단히 적은 데이터를 포함한다. P-frame을 보기 위해서는 하나의 완전한 MPEG-2 GOP가 디코드 되어야 한다.

B-frame은 MPEG 신호에서 사용되는 쌍방향 예측 프레임이다. 앞의 프레임과 다음 프레임 간의 차이를 평가함으로써 구성된다. 단지 예측 정보만 포함하므로 완전한 그림을 만들지 못한다. P-frame보다 적은 데이터를 갖는다. 그러나 원래의 화상을 보려면 MPEG 프레임의 전체 시퀀스가 필요하다.

 Long GOP 프레임별 저장되는 데이터량(5D Mark II 동영상)
적색: 인트라프레임, 청색: 예측 프레임(B,P 프레임 확인안됨)

GOP 길이
하나의 GOP 길이는 임의다. 하나의 GOP에는 반드시 한 장 또는 여러장의 I-frame을 포함한다. 랜덤 액세스, 고속 재생, 역방향 재생을 필요로 하는 경우에서는 상대적으로 짧은 GOP를 이용하는 것이 좋다. GOP는 장면의 이어지거나 움직임이 없는 곳 부터 시작하는 것이 좋다. 연속하는 B-frame의 수는 변경이 가능하다. I-frame만의 존재하는 것도 허용된다.

TV전송에서 PAL(25 fps) 신호에서는 대표적으로 12 frame이고, NTSC(30 fps) 신호에서는 15 frame이다. (즉, 시간으로 약 1/2초) 이런 프레임의 그룹을 "Long GOP"라고 한다. MPEG 규격을 따르는 NTSC용 HDV나 AVCHD에서도 15 frame 이다. JVC의 ProHD 카메라나 DVCPRO HD 포맷을 사용하는 일부 카메라에서는 6 frame 단위로 그룹하기도 하는데 이를 "six-frame GOP" 또는 "short GOP"라고 한다.

MPEG에서의 프레임 형식
i-frame(intra 프레임)에서, 접두사 "intra"는 '내부' 또는 '안'이라는 의미이다. intra 프레임 또는 i-frame은 그 프레임 내로부터의 정보만을 사용하여 부호화 되는 프레임이다. 달리 말하면, 다른 프레임의 참조 정보 없이, 공간적으로 부호화 되는, 즉 시간적 압축이 아닌 프레임이다. i-frame의 코딩은 JPEG의 이미지 코딩이나, M-JPEG의 프레임과 비슷하지만 동일하지는 않다.

Non-intra 프레임(P-frame, B-frame)은 외부의 최근 프레임, 즉 이미 부호화된 프레임으로부터의 정보를 사용한다. 예측(Predicted)프레임과 양뱡향 예측(Bi-directional)프레임의 두 종류가 있다. 아래 그림의 일련의 이미지로 설명한다.


첫 번째 이미지(A)는 배경, 나무, 자동차로 구성되어 있다. 세 번째 이미지(C)는 잠시 시간이 지난 후의 동일한 장면이다. 카메라는 우측으로 계속 패닝하고 있고, 프레임 내에서 모든 정지된 물체는 좌측으로 움직이게 되지만, 자동차는 우측으로 움직이고 있으며, 나무의 일부분을 가리게 된다. 두 번째 이미지(B)는 A와 C사이의 어떤 시점에서의 장면이다.

그림에서 이미지 A는 i-frame으로 부호화하는데, 이것은 그 프레임 이외의 외부의 어떤 데이터도 참고하지 않고, 전체적으로 공간적으로 부호화되는 것을 의미한다. 프레임이 처리되는 동안, 부호화된 데이터는 디코더에 보내어져 디코딩되고, 재구성된 이미지는 메모리에 저장된다. 이미지 C는 메모리에 저장된 A를 참조하여 P-frame으로 부호화되고, 이미지 B는 A와 C를 참조 하여 부호화 된다.

편집을 위한 Intra GOP의 변환
동영상을 편집할 때나 재생할때는 GOP내의 모든 프레임들을 전부 I-frame으로 변환(decoding)하는 작업을 거치게 되는데, 이때 많은 CPU 리소스를 필요로 한다. 따라서 편집하기 전에 모든 프레임을 I-frame으로 변환해서 작업하면 편집속도를 향상시킬 수 있다. 또한 합성이나 색보정 등의 작업 시에도 I-frame으로 변환하여 작업 할 경우 더 빠르고 정확하게 할 수 있다.

전문 장비가 없는 상태에서 Long GOP를 I-frame만 갖는 Intra GOP로 변환하는 방법은 Intra Frame 코덱으로 재인코딩 함으로써 가능하다. 압축 코덱은 Motion JPEG, I-frame만 갖는 MPEG2, DV, JPEG2000, Cineform HD, Canopus HQ, Proress, NDxHD 등이 있다. 이들 코덱은 상호 참조하지 않는 독립적인 하나의 프레임씩 압축하기 때문에 용량이 증가된다. 때로는 TARGA, TIFF 등의 이미지 파일을 사용하기도 한다.

Cineform HD 코덱으로 변환된 5D Mark II 영상
(모든 프레임이 인트라 프레임으로 변환되고, 프레임의 최고 크기도 503KB에서 729KB로 증가했다.)

GOP편집 vs Intra 편집 vs 무압축 편집
GOP 편집은 저장 장치의 용량에 제한을 받는 경우에 적합하다. 그러나 편집시 GOP내의 각 프레임들을 참조하면서 디코딩해야 하기 때문에 CPU 부하가 크고, 실시간 편집을 위해서는 고속의 CPU가 필요하다. Intra 편집은 각 프레임을 마치 JPEG처럼 압축시켜 놓았기 때문에 GOP 편집처럼 상호 참조하지 않아 저사양의 CPU에서도 가능하다. 단점은 데이터의 저장 공간이 10~100배까지 필요하다. 무압축은 프레임을 전혀 압축하지 않은 상태를 말하는데 압축을 하지 않았기 때문에 디코딩조차 할 필요가 없다. 그러나 압축되지 않은 방대한 양의 데이터를 실시간으로 처리하기 위해서는 고속의 대용량 저장장치가 필요하다.



참고 자료
소니 방송용어사전 : Long GOP
Beyond HDV: AVCHD High-definition Compression
Much more about 720p24 HDV, Part 2
Wikipedia : Group of Pictures
The truth about codecs, Part II: putting it all together, and what it means to you

댓글

이 블로그의 인기 게시물

UNIX C errno 정리( 에러 번호 )

#define EPERM   1   /* Operation not permitted      */ #define ENOENT  2   /* No such file or directory        */ #define ESRCH   3   /* No such process          */ #define EINTR   4   /* interrupted system call      */ #define EIO 5   /* I/O error                */ #define ENXIO   6   /* No such device or address        */ #define E2BIG   7   /* Arg list too long            */ #define ENOEXEC 8   /* Exec format error            */ #define EBADF   9   /* Bad file descriptor          */ #define ECHILD  10  /* No child processes           */ #define EAGAIN  11  /* Resource temporarily unavailable */ #define ENOMEM  12  /* Not enough space         */ #define EACCES  13  /* Permission denied            */ #define EFAULT  14  /* Bad address              */ #define ENOTBLK 15  /* Block device required        */ #define EBUSY   16  /* Resource busy            */ #define EEXIST  17  /* File exists              */ #define EXDEV   18  /* Improper link            */ #define ENODEV  19  /* No such

Baud Rate 와 Bit Rate 의 차이점

출처 - http://solvline.com/technical_info/tech_note_view.php?no=22&fno=&PHPSESSID=f5f096a5b1090ca017552de78745b8aa 1. Bit Rate 와 Baud Rate 의 정의 1.1 Bit Rate 정의 비트 레이트 (Bit Rate) 는 초당 얼마나 많은 데이터 비트 (‘1’ 또는 ‘ 0’) 를 전송할 수 있는가를 나타내는 말이다 . 또 우리가 자주 쓰는 BPS 라는 말이 있는데 이는 Bit Per Second 로서 초당 보낼 수 있는 비트의 수를 나타낸다 . 이는 모뎀의 전송속도를 측정하는 단위로 사용되어 졌다 . 일반적으로 28,800 모뎀이라면 28,800bps 의 전송속도를 나타내는 것이다 . 예를 들어 , 2400bit/second(bps) 라면 초당 2400 개의 비트 정보를 전달할 수 있다는 뜻이다 . 이는 반대로 이야기하면 1 비트 정보를 보내기 위해서 416.6us 의 시간 (1s/2400bit) 이 필요하다는 이야기이다 . 1.2 Baud Rate 보 레이트 (Baud Rate) 는 초당 얼마나 많은 심볼 (Symbol, 의미 있는 데이터 묶음 ) 을 전송할 수 있는가를 나타내는 말이다 . 이는 이론적인 통신 단위로 초당 신호 (Signal) 요소의 수 를 나타낸다 . 만약 하나의 신호요소가 2 비트로 구성되어 있는 경우라면 보는 BPS 의 반이 된다 . 즉 , 1 보 동안 2 비트가 전송된다 . 일반적으로 신호를 1 비트로 여긴다면 BPS 와 같은 단위가 된다 . 심볼이란 말은 의미 있는 데이터 비트의 묶음이다 . 일반적으로 시리얼 통신에서는 데이터 비트가 8-bit 를 사용하므로 이를 하나의 심볼이라고 이야기 할 수 있다 . 1 개의 symbol ( 또는 character) 는 8 개의 bit 정보와 같다 . 예를 들어 , 2400 baud rate 를 갖는다는 말은 1 초에 2400 개의

[C언어] epoll 설명

출처 -  http://biscuit.cafe24.com/moniwiki/wiki.php/epoll 1  준비 2  socket 프로그래밍 기본 3  비동기 입출력 (Asyncronous I/O) & 입출력 다중화 (I/O Multiplexing) 4  select 5  select 와  poll  그리고 epoll. 그 차이 6  epoll 프로그래밍 흐름 7  epoll 함수들 8  epoll References 빈폴도 아니고, 이폴이란 대체 무엇일까? 당신은 서버한대로 몇 명의 동시접속자를 수용할 수 있습니까? 최근에 인터넷에 떠돌아다니는  c10k_problem 은 대당 10K, 즉 1만명의 동시접속(concurrent users)을 받아보자는 문제다. 서버 프로그래밍을 해 본 사람이라면 이게 그리 만만한 문제가 아니라는 것을 직감할 듯 --; 요즘의 Massive 온라인게임은 '분산처리'가 기본이라 한 대에서 많은 이용자를 커버하기보다는 여러대가 하나의 세트로써 구성하는 것이 인기가 있고 다수의 커넥션보다는 소수 커넥션에서의 대용량 전송이 더 중요한 요소이기도 하다. c10k problem에 나또한 관심을 가지게 되었고, epoll 이 최근 급부상하는 솔루션으로 인기가 있다기에 한 번 파보자 하고 결심하고 이 글을 시작했다. 마침 wiki에도 관심이 있던 차라, wiki 공부도 할 겸해서 epoll 을 연구하는 과정을 이 wiki에 담아 보고자 한다. 1  준비  # * 누구를 위한 epoll 인가? epoll은 '한 대의 서버에서 아주많은 동시접속자를 처리하기 위한 수단'이다. 이미 당신이 그 수단을 알고 있다면 - epoll 이건 아니건 - 이 글은 별로 도움이 안될듯하다. 동시접속자가 천명을 넘지않는다면 구닥다리 방법을 이용하는 것과 큰 차이가 없으리라 본다. 또한, epoll은  Linux 프로그래머의 도구 이다. M$ wind