인터 프레임

**인터 프레임**(Inter frame)은 하나 이상의 인접한 프레임을 기반으로 표현되는 영상 압축 스트림의 프레임이다. 이 용어의 "인터(inter)" 부분은 인터 프레임 예측의 사용을 의미한다. 이러한 종류의 예측은 인접 프레임 간의 시간적 중복성을 활용하여 더 높은 압축률을 가능하게 한다.
# 인터 프레임 예측
인터 코딩된 프레임은 매크로블록으로 알려진 블록으로 나뉜다. 그 후, 각 블록의 원본 픽셀 값을 직접 인코딩하는 대신, 인코더는 이전에 인코딩된 프레임, 즉 참조 프레임에서 인코딩 중인 블록과 유사한 블록을 찾으려고 시도한다. 이 과정은 블록 일치 알고리즘에 의해 수행된다. 인코더가 검색에 성공하면, 블록은 움직임 벡터라고 알려진 벡터로 인코딩될 수 있으며, 이는 참조 프레임에서 일치하는 블록의 위치를 가리킨다. 움직임 벡터 결정 과정은 움직임 예측이라고 불린다. 대부분의 경우 인코더는 성공하지만, 발견된 블록이 인코딩 중인 블록과 정확히 일치하지 않을 수 있다. 이것이 인코더가 그들 간의 차이를 계산하는 이유이다. 이러한 잔여 값은 예측 오차로 알려져 있으며, 변환되어 디코더로 전송되어야 한다. 요약하자면, 인코더가 참조 프레임에서 일치하는 블록을 찾는 데 성공하면, 일치하는 블록을 가리키는 움직임 벡터와 예측 오차를 얻게 된다. 이 두 요소를 사용하여 디코더는 블록의 원본 픽셀을 복구할 수 있다. 다음 이미지는 전체 과정을 시각적으로 보여준다: 인터프레임 예측 과정. 이 경우, 참조 프레임의 블록과 인코딩 중인 블록 사이에 조명 변화가 있었는데, 이 차이가 해당 블록의 예측 오차가 된다. 이러한 종류의 예측은 장단점이 있다: * 모든 것이 잘 진행되면, 알고리즘은 예측 오차가 거의 없는 일치하는 블록을 찾을 수 있으므로, 일단 변환되면 움직임 벡터와 예측 오차의 전체 크기가 원본 인코딩의 크기보다 작아진다. * 블록 일치 알고리즘이 적합한 일치 블록을 찾지 못하면 예측 오차가 상당히 커진다. 따라서 움직임 벡터와 예측 오차의 전체 크기는 원본 인코딩보다 커진다. 이 경우 인코더는 예외를 만들고 해당 특정 블록에 대한 원본 인코딩을 보낸다. * 참조 프레임에서 일치하는 블록 또한 인터 프레임 예측을 사용하여 인코딩된 경우, 해당 인코딩에서 발생한 오류가 다음 블록으로 전파된다. 만약 모든 프레임이 이 기술을 사용하여 인코딩된다면, 참조 이미지를 얻을 수 없기 때문에 디코더가 비디오 스트림에 동기화할 방법이 없을 것이다. 이러한 단점 때문에, 이 기술이 효율적이고 유용하려면 신뢰할 수 있고 시간적으로 주기적인 참조 프레임이 사용되어야 한다. 이 참조 프레임은 인트라프레임으로 알려져 있으며, 엄격하게 인트라 코딩되므로 추가 정보 없이 항상 디코딩될 수 있다. 대부분의 설계에서 인터 프레임은 P-프레임과 B-프레임의 두 가지 유형이 있다. 이 두 가지 유형의 프레임과 I-프레임(인트라 코딩된 그림)은 일반적으로 화상 집합(GOP)으로 결합된다. I-프레임은 디코딩하는 데 추가 정보가 필요하지 않으며 신뢰할 수 있는 참조로 사용될 수 있다. 이 구조는 또한 디코더 동기화에 필요한 I-프레임 주기성을 달성할 수 있게 한다.
# 프레임 유형
P-프레임과 B-프레임의 차이점은 사용할 수 있는 참조 프레임이다.
## P-프레임
P-프레임은 순방향 예측 그림을 정의하는 데 사용되는 용어이다. 예측은 이전 그림, 주로 I-프레임 또는 P-프레임에서 이루어지므로, 더 적은 코딩 데이터(I-프레임 크기와 비교할 때 약 50%)가 필요하다. 이 예측을 수행하는 데 필요한 데이터 양은 움직임 벡터와 예측 보정을 설명하는 변환 계수로 구성된다. 여기에는 움직임 보상의 사용이 포함된다.
## B-프레임
B-프레임은 양방향 예측 그림을 나타내는 용어이다. 이 종류의 예측 방법은 일반적으로 P-프레임보다 적은 코딩 데이터(I-프레임 크기와 비교할 때 약 25%)를 차지하는데, 이는 예측이 이전 프레임 또는 이후 프레임 또는 둘 다에서 이루어지기 때문이다. (B-프레임은 특정 경우에 P-프레임보다 효율성이 떨어질 수도 있다,title = Doom9's Forum - View Single Post - x264 Lossless question 예: 무손실 인코딩.) P-프레임과 유사하게, B-프레임은 움직임 벡터와 변환 계수로 표현된다. 점점 커지는 전파 오류를 피하기 위해 대부분의 인코딩 표준에서는 B-프레임을 추가 예측을 만드는 데 참조로 사용하지 않는다. 그러나 최신 인코딩 방법(예: H.264/MPEG-4 AVC 및 HEVC)에서는 시간적 중복성을 더 잘 활용하기 위해 B-프레임을 참조로 사용할 수 있다.access-date=2019-03-24url-status=dead
# 전형적인 화상 집합(GOP) 구조
IBBPBB... 화상 집합 방식의 의존성 그림. 시간은 왼쪽에서 오른쪽으로 흐른다. 전형적인 화상 집합(GOP) 구조는 IBBPBBP...이다. I-프레임은 첫 번째 P-프레임을 예측하는 데 사용되며, 이 두 프레임은 첫 번째 및 두 번째 B-프레임을 예측하는 데도 사용된다. 두 번째 P-프레임은 첫 번째 I-프레임을 사용하여 예측된다. 두 P-프레임은 합쳐져 세 번째 및 네 번째 B-프레임을 예측한다. 이 방식은 다음 그림에 나와 있다: 이 구조는 문제가 있음을 시사하는데, 네 번째 프레임(P-프레임)이 두 번째와 세 번째(B-프레임)를 예측하는 데 필요하기 때문이다. 따라서 B-프레임 전에 P-프레임을 전송해야 하며, 이는 전송을 지연시킬 것이다(P-프레임을 보관해야 할 것이다). 이 구조는 다음과 같은 장점이 있다: * 가능한 가려진 영역 문제를 최소화한다. * P-프레임과 B-프레임은 I-프레임보다 적은 데이터를 필요로 하므로, 전송되는 데이터가 적다. 그러나 다음과 같은 단점이 있다: * 디코더의 복잡성을 증가시켜, 프레임을 재정렬하는 데 더 많은 메모리와 약간 더 많은 처리 능력이 필요할 수 있다. * B-프레임은 디코딩 종속성을 도입하여 필연적으로 디코딩 지연 시간을 증가시킨다.
# H.264 인터 프레임 예측 개선 사항
H.264 기술이 이전 표준(특히 MPEG-2)에 비해 가장 중요한 개선 사항은 다음과 같다: *더 유연한 블록 분할 *최대 ¼ 픽셀 움직임 보정 해상도 *다중 참조 *향상된 다이렉트/건너뛰기 매크로블록
## 더 유연한 블록 분할
16×16(MPEG-2), 16×8, 8×16, 8×8의 휘도 블록 분할. 마지막 경우는 블록을 4×8, 8×4 또는 4×4의 새 블록으로 나눌 수 있다. 코딩할 프레임은 위 그림과 같이 동일한 크기의 블록으로 나뉜다. 각 블록 예측은 참조 그림과 동일한 크기의 블록이 되며, 약간의 변위로 오프셋 된다.
## 최대 ¼ 픽셀 움직임 보정 해상도
하프 픽셀 위치의 픽셀은 길이 6의 필터를 적용하여 얻어진다. H=[1 -5 20 20 -5 1], 즉 하프 픽셀 "b"=A - 5B + 20C + 20D - 5E + F 쿼터 픽셀 위치의 픽셀은 쌍선형 보간법으로 얻어진다. MPEG-2는 ½ 픽셀 해상도를 허용했지만, 인터 프레임은 최대 ¼ 픽셀 해상도를 허용한다. 이는 코딩할 프레임의 블록을 다른 참조 프레임에서 검색하거나, 존재하지 않는 픽셀을 보간하여 현재 블록에 더 적합한 블록을 찾을 수 있음을 의미한다. 움직임 벡터가 정수 단위의 샘플인 경우, 참조 그림에서 움직임 보상된 블록을 찾을 수 있다. 움직임 벡터가 정수가 아닌 경우, 예측은 보간 필터에 의해 수평 및 수직 방향으로 보간된 픽셀로부터 얻어진다. 파일:Subpel
## 다중 참조
움직임 예측에 대한 다중 참조는 총 16개의 프레임을 포함하는 두 개의 가능한 버퍼(과거 그림에 대한 목록 0, 미래 그림에 대한 목록 1)에서 최상의 참조를 찾을 수 있도록 한다.title = A rookie question regarding on B frame in AVC - Doom9's Forumarchive-date=2014-11-22 블록 예측은 참조 그림의 블록들의 가중 합으로 이루어진다. 이는 평면의 변화, 확대/축소, 또는 새로운 객체가 나타나는 장면에서 향상된 그림 품질을 가능하게 한다. 파일:Multiple
## 향상된 다이렉트/건너뛰기 매크로블록
건너뛰기 및 다이렉트 모드는 매우 자주 사용되며, 특히 B-프레임에서 그렇다. 이들은 코딩할 비트 수를 크게 줄인다. 이 모드들은 잔여 오류나 움직임 벡터를 전송하지 않고 블록이 코딩될 때 참조된다. 인코더는 해당 블록이 건너뛰기 매크로블록이라는 것만 기록한다. 디코더는 이미 디코딩된 다른 블록들로부터 다이렉트/건너뛰기 모드로 코딩된 블록의 움직임 벡터를 추론한다. 움직임을 추론하는 두 가지 방법이 있다: 파일:Direct ; 시간적: 동일한 위치에 있는 목록 1 프레임의 블록 움직임 벡터를 사용하여 움직임 벡터를 추론한다. 목록 1 블록은 목록 0 블록을 참조로 사용한다. ; 공간적: 동일한 프레임의 이웃 매크로블록으로부터 움직임을 예측한다. 가능한 기준은 이웃 블록의 움직임 벡터를 복사하는 것이다. 이러한 모드들은 그림의 움직임이 많지 않은 균일한 영역에서 사용된다. 파일:block 위 그림에서 분홍색 블록은 다이렉트/건너뛰기 모드로 코딩된 블록이다. 보시다시피, 주로 B-프레임에서 매우 자주 사용된다.
# 추가 정보
비록 "프레임"이라는 용어가 비공식적으로 흔히 사용되지만, 많은 경우(예: MPEG 및 VCEG의 국제 표준 비디오 코딩에서) "프레임" 대신 "그림(picture)"이라는 더 일반적인 개념이 적용된다. 여기서 그림은 완전한 프레임이거나 단일 인터레이스 필드일 수 있다. MPEG-2, H.264 또는 Ogg 테오라와 같은 비디오 코덱은 키 프레임 뒤에 하나 이상의 인터 프레임을 배치하여 스트림의 데이터 양을 줄인다. 이러한 프레임은 일반적으로 키 프레임에 필요한 것보다 낮은 비트레이트를 사용하여 인코딩될 수 있는데, 이는 이미지의 대부분이 일반적으로 유사하여 변하는 부분만 코딩하면 되기 때문이다.