AVI RIFF 파일 참조
[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
Microsoft AVI 파일 형식은 오디오 비디오 시퀀스를 캡처, 편집 및 재생하는 애플리케이션과 함께 사용되는 RIFF 파일 사양입니다. 일반적으로 AVI 파일에는 다양한 유형의 데이터 스트림이 여러 가지 포함됩니다. 대부분의 AVI 시퀀스는 오디오 및 비디오 스트림을 모두 사용합니다. AVI 시퀀스에 대한 간단한 변형은 비디오 데이터를 사용하며 오디오 스트림이 필요하지 않습니다.
이 섹션에서는 OpenDML AVI 파일 형식 확장자를 설명하지 않습니다. 이러한 확장에 대한 자세한 내용은 OpenDML AVI M-JPEG 파일 형식 소위원회에서 게시한 OpenDML AVI 파일 형식 확장명참조하세요.
FOURCC
FOURCC(4자 코드)는 4개의 ASCII 문자를 연결하여 만든 32비트 부호 없는 정수입니다. 예를 들어 FOURCC 'abcd'는 Little-Endian 시스템에 0x64636261 표시됩니다. FOURC는 공백 문자를 포함할 수 있으므로 'abc'는 유효한 FOURCC입니다. AVI 파일 형식은 FOURCC 코드를 사용하여 스트림 형식, 데이터 청크, 인덱스 항목 및 기타 정보를 식별합니다.
RIFF 파일 형식
AVI 파일 형식은 RIFF(리소스 교환 파일 형식) 문서 형식을 기반으로 합니다. RIFF 파일은 RIFF 헤더 뒤에 0개 이상의 목록 및 청크구성됩니다.
RIFF 헤더의 형식은 다음과 같습니다.
'RIFF' fileSize fileType (data)
여기서 'RIFF'는 리터럴 FOURCC 코드 'RIFF'이며,
fileSize
파일의 데이터 크기를 제공하는 4 바이트 값이며,fileType
특정 파일 형식을 식별하는 FOURCC입니다.fileSize
값에는fileType
FOURCC의 크기와 다음 데이터의 크기가 포함되지만 'RIFF' FOURCC의 크기 또는fileSize
크기는 포함되지 않습니다. 파일 데이터는 순서에 관계없이 청크 및 목록으로 구성됩니다.청크 형식은 다음과 같습니다.
ckID ckSize ckData
여기서
ckID
청크에 포함된 데이터를 식별하는 FOURCC이고,ckSize
ckData
데이터의 크기를 제공하는 4바이트 값이며,ckData
0바이트 이상의 데이터입니다. 데이터는 항상 가장 가까운 WORD 경계에 패딩됩니다.ckSize
청크에서 유효한 데이터의 크기를 제공합니다. 안쪽 여백,ckID
크기 또는ckSize
크기는 포함되지 않습니다.목록에는 다음과 같은 형식이 있습니다.
'LIST' listSize listType listData
여기서 'LIST'는 리터럴 FOURCC 코드 'LIST'이며,
listSize
목록의 크기를 제공하는 4 바이트 값이고,listType
FOURCC 코드이며,listData
순서에 관계없이 청크 또는 목록으로 구성됩니다.listSize
값에는listType
크기와listData
; 의 크기가 포함됩니다. 'LIST' FOURCC 또는listSize
크기가 포함되지 않습니다.
이 섹션의 나머지 부분에서는 다음 표기법을 사용하여 RIFF 청크를 설명합니다.
ckID ( ckData )
여기서 청크 크기는 암시적입니다. 이 표기법을 사용하여 목록을 다음과 같이 나타낼 수 있습니다.
'LIST' ( listType ( listData ) )
선택적 요소는 대괄호 안에 배치됩니다. [ optional element ]
AVI RIFF 양식
AVI 파일은 RIFF 헤더에서 FOURCC 'AVI'로 식별됩니다. 모든 AVI 파일에는 각각 스트림 및 스트림 데이터의 형식을 정의하는 두 개의 필수 LIST 청크가 포함됩니다. AVI 파일에는 파일 내에서 데이터 청크의 위치를 제공하는 인덱스 청크가 포함될 수도 있습니다. 이러한 구성 요소가 있는 AVI 파일의 형식은 다음과 같습니다.
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
'hdrl' 목록은 데이터의 형식을 정의하며 첫 번째 필수 LIST 청크입니다. 'movi' 목록에는 AVI 시퀀스에 대한 데이터가 포함되며 두 번째 필수 LIST 청크입니다. 'idx1' 목록에는 인덱스가 포함되어 있습니다. AVI 파일은 이러한 세 가지 구성 요소를 적절한 순서로 유지해야 합니다.
메모
OpenDML 확장은 FOURCC 'indx'로 식별되는 다른 유형의 인덱스를 정의합니다.
'hdrl' 및 'movi' 목록은 데이터에 하위 펑크를 사용합니다. 다음 예제에서는 이러한 목록을 완료하는 데 필요한 청크를 사용하여 확장된 AVI RIFF 양식을 보여 줍니다.
RIFF ('AVI '
LIST ('hdrl'
'avih'(<Main AVI Header>)
LIST ('strl'
'strh'(<Stream header>)
'strf'(<Stream format>)
[ 'strd'(<Additional header data>) ]
[ 'strn'(<Stream name>) ]
...
)
...
)
LIST ('movi'
{SubChunk | LIST ('rec '
SubChunk1
SubChunk2
...
)
...
}
...
)
['idx1' (<AVI Index>) ]
)
AVI 기본 헤더
'hdrl' 목록은 'avih' 청크에 포함된 기본 AVI 헤더로 시작합니다. 기본 헤더에는 파일 내의 스트림 수 및 AVI 시퀀스의 너비 및 높이와 같은 전체 AVI 파일에 대한 전역 정보가 포함됩니다. 주 헤더 청크는 AVIMAINHEADER 구조로 구성됩니다.
AVI 스트림 헤더
하나 이상의 'strl' 목록이 기본 헤더를 따릅니다. 각 데이터 스트림에 'strl' 목록이 필요합니다. 각 'strl' 목록에는 파일의 한 스트림에 대한 정보가 포함되며 스트림 헤더 청크('strh') 및 스트림 형식 청크('strf')가 포함되어야 합니다. 또한 'strl' 목록에는 스트림 헤더 데이터 청크('strd') 및 스트림 이름 청크('strn')가 포함될 수 있습니다.
스트림 헤더 청크('strh')는 AVISTREAMHEADER 구조로 구성됩니다.
스트림 형식 청크('strf')는 스트림 헤더 청크를 따라야 합니다. 스트림 형식 청크는 스트림의 데이터 형식을 설명합니다. 이 청크에 포함된 데이터는 스트림 유형에 따라 달라집니다. 비디오 스트림의 경우 정보는 적절한 경우 색상표 정보를 포함하여 BITMAPINFO 구조입니다. 오디오 스트림의 경우 정보는 WAVEFORMATEX 구조입니다.
스트림 헤더 데이터('strd') 청크가 있으면 스트림 형식 청크를 따릅니다. 이 청크의 형식과 콘텐츠는 코덱 드라이버에 의해 정의됩니다. 일반적으로 드라이버는 구성에 이 정보를 사용합니다. AVI 파일을 읽고 쓰는 애플리케이션은 이 정보를 해석할 필요가 없습니다. 메모리 블록으로 드라이버 간에 간단하게 전송합니다.
선택적 'strn' 청크에는 스트림을 설명하는 null로 끝나는 텍스트 문자열이 포함됩니다.
'hdrl' 목록의 스트림 헤더는 'strl' 청크의 순서에 따라 'movi' 목록의 스트림 데이터와 연결됩니다. 첫 번째 'strl' 청크는 스트림 0에 적용되고, 두 번째 청크는 스트림 1 등에 적용됩니다.
스트림 데이터('movi' 목록)
헤더 정보 다음에는 스트림의 실제 데이터, 즉 비디오 프레임 및 오디오 샘플이 포함된 'movi' 목록이 있습니다. 데이터 청크는 'movi' 목록에 직접 상주하거나 'rec' 목록 내에서 그룹화될 수 있습니다. 'rec' 그룹화는 그룹화된 청크를 디스크에서 한꺼번에 읽어야 하며 CD-ROM에서 재생하도록 인터리브된 파일을 위한 것입니다.
각 데이터 청크를 식별하는 FOURCC는 두 자리 스트림 번호와 청크의 정보 형식을 정의하는 두 문자 코드로 구성됩니다.
2자 코드 | 묘사 |
---|---|
db | 압축되지 않은 비디오 프레임 |
직류 | 압축된 비디오 프레임 |
개인용 컴퓨터 | 색상표 변경 |
wb | 오디오 데이터 |
예를 들어 스트림 0에 오디오가 포함된 경우 해당 스트림의 데이터 청크에는 FOURCC '00wb'가 포함됩니다. stream 1에 비디오가 포함된 경우 해당 스트림의 데이터 청크에는 FOURCC '01db' 또는 '01dc'가 포함됩니다. 비디오 데이터 청크는 AVI 시퀀스 중에 색상표를 업데이트하는 새 색상표 항목을 정의할 수도 있습니다. 각 색상표 변경 청크('xxpc')에는 AVIPALCHANGE 구조체가 포함됩니다. 스트림에 색상표 변경 내용이 포함된 경우 해당 스트림에 대한 AVISTREAMHEADER 구조체의 dwFlags 멤버에서 AVISF_VIDEO_PALCHANGES 플래그를 설정합니다.
텍스트 스트림은 임의의 두 문자 코드를 사용할 수 있습니다.
AVI 인덱스 항목
-
AVI 1.0 인덱스
-
선택적 인덱스('idx1') 청크는 'movi' 목록을 따를 수 있습니다. 인덱스에는 파일의 데이터 청크 및 해당 위치 목록이 포함됩니다. 'rec' 청크를 포함하여 각 데이터 청크에 대한 항목이 있는 AVIOLDINDEX 구조체로 구성됩니다. 파일에 인덱스가 포함된 경우 AVIMAINHEADER 구조체의 dwFlags 멤버에서 AVIF_HASINDEX 플래그를 설정합니다.
-
AVI 2.0 인덱스
-
AVI 2.0 인덱스가 단일 청크로 나타날 수 있습니다. 또는 인덱스 세그먼트를 'movi' 청크 내에서 인터리브할 수 있습니다. 인덱스 세그먼트가 'movi' 청크에 배치되면 슈퍼 인덱스에 인덱스 세그먼트의 인덱스가 포함됩니다. AVIMETAINDEX 구조체는 인덱스 세그먼트와 슈퍼 인덱스 모두에 대한 기본 구조입니다. 자세한 내용은 OpenDML AVI M-JPEG 파일 형식 소위원회에서 게시한 OpenDML AVI 파일 형식 확장명참조하세요. (일부 언어 및 국가에서는 이 리소스를 사용할 수 없습니다.)
기타 데이터 청크
필요에 따라 'JUNK' 청크를 삽입하여 AVI 파일에 데이터를 정렬할 수 있습니다. 애플리케이션은 'JUNK' 청크의 내용을 무시해야 합니다.
관련 항목