H.264/AVC 비디오 압축 표준 책의 Chapter 4를 요약한 내용입니다.
H.264/AVC의 전체구성과 특징
기존 구조와 어디가 달라졌는가?
전체적인 구조는 큰 변화가 없다
- 원본 데이터로부터 움직임을 추정해서 예측신호를 만든다
- 차분 신호에 DCT를 수행
- 마짐가으로 엔트로피 부호화를 수행
움직임 보상을 개선
- 기존 MPEG 방식에 비해서 영상 처리단위를 더욱 줄여서 정밀한 움직임 보상까지 가능해졌다
- 여러 개의 참조 프레임을 사용
- 영상의 밝기가 시간적으로 변화하는 페이드 영상 예측을 위해 움식임 보상 신호에 가중치를 주어 예측 신호를 생성
프레임 내의 예측을 효율적으로 적용
프레임 내의 블록 주위의 신호로 부터 향상된 예측을 적용, 부호화 하는 영상의 특성에 맞게 여러가지의 예측방향 (가로, 세로 ,대각선 등등) 최적의 예측모드를 선택
시각적인 화질 열화를 줄이는 기술
DCT로 인해서 발생할 수 있는 블록 경계의 왜곡을 줄일 수 있는 디블록킹 필터(블록왜곡 제거필터)를 적용 DCT 자체의 처리 단위도 기존 방식보다 작은 단위를 적용
부호화하는 정보의 특징에 따라 적응적인 기술
DCT이후 엔트로피 부호화 (가변길이 부호화)과정을 수행할 때, 주위의 정보를 참고하여 가변장부호표를 바꾸는 등 영상의 특징에 맞게 부호화를 진행한다. 높은 압축 효율을 얻기 위해 산술부호화를 적용하는 모드도 사용된다.
H.264/AVC의 프로파일이란?
프로파일 : 비디오 인코딩/디코딩 과정에서 알고리즘 상 들어가는 기술적 구성요소 중 몇 개의 대표적인 응용시스템마다 최소한으로 필요하는 기술요소와 기능을 모아 둔 것
MPEG-2 규격의 세 가지 프로파일
- SP (Simple Profile)
- MP (Main Profile)
- HP (High Profile)
Simple Profile은 Main Profile에 포함되고 Main Profile은 High Profile에 포함된다. 즉 Simple Profile로 부호화된 신호는 모든 프로파일에서 복호화 가능하지만 High Profile로 부호화된 신호는 High Profile에서만 가능하다.
H.264/AVC의 세 가지 프로파일
- BP (Baseline Profile)
- MP (Main Profile)
- EP (Extended Profile)
프로파일 | 개요 | 주요 기술요소 | 응용사례 | |
---|---|---|---|---|
Baseline Profile | 기본 기술요소 + 에러내성 기술요소 | - 4:2:0 - I슬라이스, P슬라이스 (B슬라이스 없음) - 적응가변길이 부호화 (CAVLC)만을 사용 - 프레임 매크로블록만을 사용 - Weighted Prediction을 사용하지 않음 - 에러내성용 기술요소 사용 | 영상전화/회의, 휴대전화, 간이방송 | |
Main Profile | 기본 기술요소 + 고압축률 기술요소 | - 4:2:0 - I, P, B 슬라이스 - 적응가변길이 부호화(CAVLC)에 추가해서 산술부호화(CABAC)도 사용가능 - Weighted Prediction 사용 - 에러내성용 기술요소는 사용하지 않음 | 방송, 저장미디어 | |
Extended Profile | 기본 기술요소 + 일부의 고압축률 기술요소 + 스트리밍용 기술요소 | - 4:2:0 - I, P, B 슬라이스 - 적응가변길이 부호화(CAVLC)만 사용 - Data Partition 사용 - Weighted Prediction tkdyd - 스위칭 I,P 슬라이스 사용 가능 | IP 스트리밍 |
좀더 상세하게
Baseline Profile
기본 기술 요소들
- I(Intra) 슬라이스, P(Predictive) 슬라이스
- 화면 내 부호화 예측
- 1/4화소 정밀도 움직임 보상
- 가변 블록 크기 움직임 보상
- 복수 참조 프레임
- CAVLC(Context-based Adaptive Variable Length code, 주위의 상황(Context)에 따라 적응적 부호화를 진행하는 가변길이부호)
- 4 X 4 정수 DCT
- 프레임 매크로 블록
- YUV 420
- 루프 내 필터 (루프필터라고도 함. quanization 따라 발생한 영상의 왜곡을 평탄하게 만드는 필터)
에러 내성용 기술요소들
- ASO (Arbitrary Slice Order)
- FMO (Flexible Macroblock Ordering)
- RS (Redundant Slice)
Main Profile
고압축률 부호화 기술요소들
- I(Intra) 슬라이스, P(Predictive) 슬라이스, B(Bi-predictive)슬라이스
- Weighted Prediction
- 프레임/필드 매크로블록
- CABAC(Context-based Adaptive Binary Arithmetic Code, 주위의 상황 (Context)에 따라 적응적 부호화를 적용하는 이진산술부호)
Extended Profile
고압축률 부호화 기술 요소들
- I(Intra) 슬라이스, P(Predictive) 슬라이스, B(Bi-predictive)슬라이스
- Weighted Prediction
- 프레임/필드 매크로 블록
스트리밍 기술요소들
- 데이터 분할(Data Partition)
- 스위칭 I슬라이스, 스위칭 P슬라이스
H.264/AVC가 공통의 프로파일을 가지지 않는 배경
H.264는 프로파일 간의 호환성 보다는 각 응용시스템에 대해 최적화된 프로파일을 초점을 맞추고 작성됨 각 응용시스템에 대해 곹오이 되기 어려운 기술요소가 존재
에러내성과 관련된 기술요소들의 지원문제
에러 내성과 관련된 기술은 부호화 효율을 희생함으로써 에러 내성을 높이기 때문에 메인 프로파일에는 불필요한 내용이므로 메인프로파일에서 삭제
엔트로피 부호화 기술요소
CABAC? CAVLC? CABAC : 부호화 성능은 좋지만 복잡하다 CAVLC : 간단하고 어느정도 성능을 가짐 둘중에 하나를 고르기가 애매해서 공존하게 됨
호환성을 표시하기 위한 플래그들의 사용
걍 프로파일 별로 플래그를 둬서 어떤 프로파일을 지원하는 지를 표시 ex.) Baseline Profile 지원 O, Extended Profile 지원 O, Main Profile 지원 X
H.264/AVC의 레벨이란?
encoder가 비트열을 encrypt하는 속도를 규정하는 역할
레벨의 정수 레벨과 하위 레벨 (소수점 이하의 레벨)
- 정수 레벨 정수 레벨은 주로 사용되는 영상의 해상도에 따라 결정된다
- 레벨 1 : QCIF의 해상도에 해당
- 레벨 2 : CIF의 해상도에 해당
- 레벨 3 : SDTV(표준화질 TV)의 해상도에 해당
- 레벨 4 : HDTV(고선명 TV)의 해상도에 해당
- 레벨 5 : 차후 결정될 슈퍼 HDTV와 전자 시네마 (Electric-Cinema, Digital Cinema)의 해상도에 적용할 예정
- 하위 레벨 (소수점 이하의 레벨) 정수 레벨 사이의 간격을 보간하는 역할, 통신기기 등과 같이 절충 가능한 기기사이에 세밀한 조정을 하도록 만든 레벨
H.264/AVC의 각 레벨에서 사용되는 파라미터
레벨은 구성하는 요소에 대한 간단한 설명
-
MaxMBPS(MB/s) => MaxMPBS는 최대 매크로블록 처리율로 1초동안 복호해야하는 매크로 블록의 수를 의미한다
-
MaxFs(MB/s) => MaxFS는 최대 프레임 크기로서, 매크로 블록의 수로 표현한다. 다른 말로 표현하면 프레임률 단위로 복호해야하는 매크로 블록의 수를 정의
-
MaxDPB(1024 바이트) => MaxDPB는 예측을 할 때 사용되며 복호영상을 저장하기 위한 영상 버퍼의 최대 크기를 의미한다. 즉 복호기 프레임 메모리양(1024바이트)를 규정
-
MaxBR(1000bps 또는 1200bps) => 최대 비트율, NAL(Network Abstraction Layer)을 사용하지 않는 경우에는 1000bps이고, NAL을 사용하는 경우에는 1200bps이다
-
MaxCPB(1000bps 또는 1200bps) => MaxCPB는 비트열을 채워넣기 위한 최대의 버퍼크기를 의미한다.
-
MaxVmvR(Luma Frame Samples) => 움직임 벡터의 수직 성분의 최대값을 나타낸다. 영상의 YUV 샘플 수를 기준으로 움직임 벡터가 얻어지는 범위를 정의
-
MinCR => 최저 압축률
-
MaxMvsPer2Mb => 연속하는 두개의 매크로 블록에 대응되는 움직임 벡터의 최대 개수를 의미한다. 이 정의에 의해 DPB(Decoded Picture Buffer, 예측에 사용되는 복호영상을 저장하기 위한 영상버퍼 메모리)의 복호영상으로부터 예측에 사용되는 매크로블록을 읽어낼 때의 영상 데이터의 전체량을 제한한다.
H.264/AVC의 영상 포맷
H.264/AVC의 색차신호 포맷
YUV 420 사용 각 화소는 8bit로 구성
격행주사방식 영상
화면 포맷 | 픽처 구조 | MB(매크로블록) 구조 | 부호화법 |
---|---|---|---|
순행주사방식 영상 | 프레임 | 프레임 | 프레임 영상부호화 |
격행주사 방식 영상 | 필드 | 필드 | 각 필드를 독립적인 픽처로 부호화 |
격행주사 방식 영상 | 프레임 | 프레임 | 프레임 영상의 부호화와 동일 |
격행주사 방식 영상 | 프레임 | 필드 | 매크로블록(MB)마다 필드를 독립적으로 부호화 |
H.264/AVC에서의 비트열의 구성
NAL(네트워크 추상계층)의 기능
NAL 단위란?
H.264/AVC에서는 위 그림과 같이 VCL, NAL, system의 3가지 layer로 분리되어 있다.
- VCL : Video Coding Layer, 동영상 부호화 처리를 행하는 계층
- NAL : Network Abstraction Layer, 네트워크 추상계층
- SEI : Suplemental Enhancement Information, 각 픽처(동영상)의 타이밍 정보와 임의의 엑세스를 위한 정보 등 VCL의 복호를 위한 부가 정보
- RTP : Real-Time Transport Protocol, 실시간 데이터 전송 프로토콜
NAL 단위는 다음과 같이 구성된다
- NAL header
- VCL에서 생성된 RBSP (Raw Byte Sequence Payload, 동영상 압축의 결과 데이터)
- RBSP trailing bit (RBSP 길이를 8bit 배수로 표현하기 위해 RBSP의 마지막에 붙는 bit로 100..의 형태)
NAL 단위의 종류
IDR 픽처
IDR(Instantaneous Decoding Refresh)픽처란 영상 시퀀서의 선두 픽처이다. 참조픽처버퍼, 프레임 번호 정보등의 디코딩을 위한 기본정보가 초기화되는 픽처로 I슬라이스 또는 SI슬라이스(스위칭 I슬라이스)이기도 하다. H.264에서는 I픽처의 뒤에 있는 P픽처가 I픽처보다ㅏ 앞에 있는 픽처를 참조하는 프레임간 예측도 허용하기 때문에 상태를 완전하게 초기화하는것은 통상의 I픽처에서는 불충분하며 그렇기 때문에 IDR 픽처를 사용할 필요가 있다.
SPS
SPS(Sequence Parameter Set)이란 프로파일, 레벨 등 시퀀스 전체의 부호화에 걸쳐 있는 정보가 포함되어 있는 헤더 정보이다. 단 SPS는 시퀀스의 선두에 바로 붙여지지는 않고 가장 최근에 보내진 SPS를 헤더 정보로 사용한다.
PPS
PPS(Picture Parameter Set)는 픽처 전체의 부호화 모드 (엔트로피 부호화 모두, 픽처 단위의 양자화 파라미터 초기값 등)를 나타네는 헤더 정보이다. PPS는 모든 픽처에 반드시 붙여지는 것이 아니고 PPS가 없을 경우 픽처의 선두 위치에 이르기까지 가장 최근에 보내진 PPS 헤더 정보를 사용한다
SEI
SEI(Supplemental Enhancement Inforamtion)는 VCL의 복호과정에서 필수가 아닌 부가 정보를 나타낸다. HRD(Hyphothetical Reference Decoder)와 관련된 각 픽처의 타이밍 정보, 스캔기능(복호한 영상의 일부를 읽어내어 표시하는 기능)에 고나한 정보, 임의 액세스를 행하는데 편리한 정보, 사용자가 독자적으로 정의하는 정보 등이 SEI가 된다.
AU 구분자
AU 구분자(Access Unit Delimiter)는 액세스 단위의 선두에 붙일 수 있다. AU 구분자는 액세스 단위에 포함된 슬라이스 종류를 표시하는 정보가 포함되어 있다.
etc
- EOS : End of Sequence
- EOS : End of Stream
- Filler Data : 형식을 맞추기 위한 의미 없는 데이터
VCL NAL 단위와 비 VCL NAL 단위
- VCL NAL 단위 : VCL 에서 생성된 데이터 nal_unit_type=1~5
- 비 VCL NAL 단위 파라미터 세트 (SPS와 PPS) ,SEI, AU 구분자 등의 NAL 단위(nal_unit_type>=6)
시퀀스 픽처와 파라미터 세트
H.264에는 다음과 같은 계층 구조가 존재한다 . sequence => GOP => 픽처 이에 따르면 시퀀스는 반드시 시퀀스 헤더로부터 시작하고 픽처 앞에는 픽처헤더가 있어야한다. 하지만 H.264에서는 조건을 완화하여 헤더 정보는 파라미터보다 앞에 오기만 하면 된다는 제약만이 있다. 즉 아래와 같다. 시퀀스를 식별하기 위에 SPS 안에 SPS 번호가 있고 PPS 안에서 SPS 번호를 지정하여 어느 시퀀스에 속하는지를 식별한다. PPS에도 마찬가지로 번호가 있어 슬라이스 헤더 안에 PPS 번호를 지정함으로써 어느 PPS를 사용하는가를 식별한다.
슬라이스: H.264/AVC에서 부호화를 위한 기본단위
slice_type | 슬라이스 종류 | 설명 | MB유형 |
---|---|---|---|
0 | P 슬라이스 | 화면 내 부호화 혹은 참조픽처 한 장을 사용한 화면 간 예측부호화를 행하는 슬라이스 | I, P |
1 | B 슬라이스 | 화면내 부호화 혹은 참조픽처를 한 장 또는 두 장을 사용한 화면간 예측부호화를 행하는 슬라이스 | I,P,B |
2 | I 슬라이스 | 화면 내 부호화만을 행하는 슬라이스 | I |
3 | SP 슬라이스 | 비트열 전환을 행하기 위한 특별한 P슬라이스 | I, P, B |
4 | SI 슬라이스 | 비트열 전환을 행하기 위한 특별한 I 슬라이스 | I, SI |
slice_type=5~9의 슬라이스도 정의되어 있다. slice_type으로부터 5를 뺀 slice_type으로 픽처가 이루어져있음을 의미
엑세스단위와 그 구조
엑세스 단위 : 몇 개의 NAL 단위를 모은 하나의 집합 픽처의 구분 : 슬라이스 헤더 안에서 그 슬라이스가 어느 프레임에 속해있는지 알려주는 프레임 번호가 있어 이를 통해 픽처 경계를 판정
- 프레임 번호가 다르다
- 프레임 픽처인지 필드 픽처인지를 표시하는 플래그가 다르다
- 상위 필드인지 하위 필드인지를 표시하는 플래그가 다르다
- 프레임 번호가 같지만, POC(Picture Order Count) 의 값이 다르다
- 참조픽처인지를 표시하는 정보가 다르다
- IDR 픽처인데, IDR식별자(idr_pic_idc)가 다르다
이외에 옵션을 통해 AU 구분자를 붙여서 픽처의 선두위치를 판단 할 수도 있다