次の方法で共有


AVI RIFF ファイル リファレンス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

Microsoft AVI ファイル形式は、オーディオ ビデオ シーケンスをキャプチャ、編集、再生するアプリケーションで使用される RIFF ファイル仕様です。 一般に、AVI ファイルには、さまざまな種類のデータの複数のストリームが含まれています。 ほとんどの AVI シーケンスでは、オーディオ ストリームとビデオ ストリームの両方が使用されます。 AVI シーケンスの単純なバリエーションでは、ビデオ データが使用され、オーディオ ストリームは必要ありません。

このセクションでは、OpenDML AVI ファイル形式の拡張子については説明しません。 これらの拡張子の詳細については、 OpenDML AVI M-JPEG ファイル形式小委員会によって発行された OpenDML AVI ファイル形式拡張子に関するページを参照してください。

FOURCC

FOURCC (4 文字コード) は、4 つの ASCII 文字を連結して作成された 32 ビット符号なし整数です。 たとえば、FOURCC 'abcd' は0x64636261としてLittle-Endian システムで表されます。 FOURCC にはスペース文字を含めることができるため、'abc' は有効な FOURCC です。 AVI ファイル形式では、FOURCC コードを使用して、ストリームの種類、データ チャンク、インデックス エントリ、およびその他の情報を識別します。

RIFFファイル形式

AVI ファイル形式は、RIFF (リソース交換ファイル形式) ドキュメント形式に基づいています。 RIFF ファイルは、RIFF ヘッダーの後に 0 個以上の リストチャンクで構成されます

  • RIFF ヘッダーの形式は次のとおりです。

    'RIFF' fileSize fileType (data)

    ここで、'RIFF' はリテラル FOURCC コード 'RIFF' であり、 fileSize ファイル内のデータのサイズを示す 4 バイトの値であり fileType 、特定のファイルの種類を識別する FOURCC です。 の fileSize 値には、FOURCC の fileType サイズと、それに続くデータのサイズが含まれますが、'RIFF' FOURCC のサイズや の fileSizeサイズは含まれません。 ファイル データは、任意の順序でチャンクとリストで構成されます。

  • チャンクの形式は次のとおりです。

    ckID ckSize ckData

    ckID チャンクに含まれるデータを識別する FOURCC で、 ckSize は のデータのサイズを示す 4 バイトの値で ckDatackData データのバイト数は 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ファイルには、ストリームとストリームデータの形式をそれぞれ定義する2つの必須のLISTチャンクが含まれています。 AVI ファイルには、ファイル内のデータ チャンクの場所を示すインデックス チャンクも含まれる場合があります。 これらのコンポーネントを含む AVI ファイルの形式は次のとおりです。

RIFF ('AVI '
      LIST ('hdrl' ... )
      LIST ('movi' ... )
      ['idx1' (<AVI Index>) ]
     )

'hdrl' リストはデータの形式を定義し、最初に必要な LIST チャンクです。 'movi' リストには AVI シーケンスのデータが含まれており、2 番目に必要な LIST チャンクです。 'idx1' リストにはインデックスが含まれています。 AVI ファイルは、これら 3 つのコンポーネントを適切な順序で保持する必要があります。

注意

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 ストリーム ヘッダー

メイン ヘッダーの後に 1 つ以上の 'strl' リストがあります。 データ ストリームごとに 'strl' リストが必要です。 各 'strl' リストには、ファイル内の 1 つのストリームに関する情報が含まれており、ストリーム ヘッダー チャンク ('strh') とストリーム形式チャンク ('strf') を含める必要があります。 さらに、'strl' リストには、ストリーム ヘッダー データ チャンク ('strd') とストリーム名チャンク ('strn') が含まれる場合があります。

ストリーム ヘッダー チャンク ('strh') は 、AVISTREAMHEADER 構造体で構成されます。

ストリーム形式チャンク ('strf') は、ストリーム ヘッダー チャンクに従う必要があります。 ストリーム形式チャンクは、ストリーム内のデータの形式を表します。 このチャンクに含まれるデータは、ストリームの種類によって異なります。 ビデオ ストリームの場合、情報は BITMAPINFO 構造であり、必要に応じてパレット情報が含まれます。 オーディオ ストリームの場合、情報は WAVEFORMATEX 構造体です。

ストリーム ヘッダー データ ('strd') チャンクが存在する場合は、ストリーム形式のチャンクに従います。 このチャンクの形式と内容は、コーデック ドライバーによって定義されます。 通常、ドライバーはこの情報を構成に使用します。 AVI ファイルの読み取りと書き込みを行うアプリケーションでは、この情報を解釈する必要はありません。ドライバーとの間で簡単にメモリ ブロックとして転送します。

オプションの 'strn' チャンクには、ストリームを記述する null で終わるテキスト文字列が含まれています。

'hdrl' リスト内のストリーム ヘッダーは、'strl' チャンクの順序に従って、'movi' リスト内のストリーム データに関連付けられます。 最初の 'strl' チャンクはストリーム 0 に適用され、2 番目のチャンクはストリーム 1 などに適用されます。

Stream Data ('movi' List)

ヘッダー情報の後には、ストリーム内の実際のデータ (ビデオ フレームとオーディオ サンプル) を含む "movi" リストがあります。 データ チャンクは 'movi' リストに直接存在することも、'rec' リスト内にグループ化することもできます。 'rec ' グループ化は、グループ化されたチャンクをディスクから一度にすべて読み取る必要があることを意味し、CD-ROM から再生するためにインターリーブされたファイルを対象としています。

各データ チャンクを識別する FOURCC は、2 桁のストリーム番号の後に、チャンク内の情報の種類を定義する 2 文字のコードで構成されます。

2 文字のコード 説明
db 圧縮されていないビデオ フレーム
dc 圧縮されたビデオ フレーム
pc パレットの変更
Wb 音声データ

 

たとえば、ストリーム 0 にオーディオが含まれている場合、そのストリームのデータ チャンクには FOURCC '00wb' が含まれます。 ストリーム 1 にビデオが含まれている場合、そのストリームのデータ チャンクには FOURCC '01db' または '01dc' が含まれます。 ビデオ データ チャンクでは、AVI シーケンス中にパレットを更新するための新しいパレット エントリを定義することもできます。 各パレット変更チャンク ('xxpc') には 、AVIPALCHANGE 構造体が含まれています。 ストリームにパレットの変更が含まれている場合は、そのストリームの AVISTREAMHEADER 構造体の dwFlags メンバーにAVISF_VIDEO_PALCHANGES フラグを設定します。

テキスト ストリームでは、任意の 2 文字コードを使用できます。

AVI インデックス エントリ

AVI 1.0 インデックス

オプションのインデックス ('idx1') チャンクは、'movi' リストの後に続くことができます。 インデックスには、ファイル内のデータ チャンクとその場所の一覧が含まれています。 これは、'rec' チャンクを含む各データ チャンクのエントリを含む AVIOLDINDEX 構造体で構成されます。 ファイルにインデックスが含まれている場合は、AVIMAINHEADER 構造体の dwFlags メンバーにAVIF_HASINDEX フラグを設定します。

AVI 2.0 インデックス

AVI 2.0 インデックスは 1 つのチャンクとして表示できます。 または、インデックス セグメントを "movi" チャンク内でインターリーブすることもできます。 インデックス セグメントが "movi" チャンクに配置されている場合、スーパー インデックスにはインデックス セグメントのインデックスが含まれます。 AVIMETAINDEX 構造体は、インデックス セグメントとスーパー インデックスの両方の基本構造です。 詳細については、 OpenDML AVI M-JPEG ファイル形式小委員会によって発行された OpenDML AVI ファイル形式の拡張子に関するページを参照してください。 (このリソースは、一部の言語および国では利用できない場合があります。)

その他のデータ チャンク

必要に応じて 'JUNK' チャンクを挿入することで、AVI ファイルにデータを配置できます。 アプリケーションでは、"JUNK" チャンクの内容を無視する必要があります。

AVI ファイル形式