AVI (Audio Video Interleave)

Related Post

> コンテナフォーマット (container format) > AVI (Audio Video Interleave)

Audio Video Interleave(オーディオ ビデオ インターリーブ)は動画用ファイルフォーマットである。

【概要】

Windows標準の動画用ファイルフォーマット(コンテナ形式)で、AVIファイル、AVIコンテナなどと呼ばれている。拡張子は「.avi」である。一部の古いコーデックはWindows Media Playerで再生可能である。
マイクロソフトがアップルコンピュータのQuickTimeに対抗するために開発したAPI、Video for Windowsで対応している。
RIFFというフォーマットを利用し画像と音声を交互に織り交ぜながら(インターリーブ)格納する。
インデックスが最後にあるため、AVIファイルの内容が不完全な状態では再生が出来ず、修復を行わなければならない。
拡張子が「.divx」のDivX Media Formatは基本部分はAVIそのものである。
今となってはAVI自体は入れ物(コンテナ)となってしまった。現在ではいくつかの種類(後述)のコーデックでエンコードされた動画や音声のデータを格納できる。そのため再生には適切なコーデックを用意する必要があるが、ファイルの拡張子を見ただけではコーデックが何であるか判断できない。しかしコーデックのダウンロード機能も進歩しAVIに格納できるコーデックはフルセットをワンクリックでダウンロードできるようになった。

【主な特徴】

AVIを含むRIFFファイルは、バイナリのままでも可読性が高く構造を理解しやすい。また、AVIを扱うAPI(Video for Windows)をWindowsが提供しているため、対応ソフトウェアを開発しやすく、実際に多数のソフトウェアが公開されている。

【欠点】

AVIは1992年以前に策定された比較的古い形式であり、策定当初は問題とはならなかった次のような点が現在では欠点となってしまっている。

  • ストリーミング配信用途には不向き。
  • AVI1.0では2GBを超えるファイルを作成できない(AVI2.0(OpenDML)で解決済み)。
  • データが個別のタイムスタンプを保持できない。
    • 映像の可変フレームレート(VFR)に対応していない(擬似的な方法での実現例はある)。
    • Bフレーム(前方参照フレーム)の表示に不都合が生じる。

Bフレームの表示不都合

AVIコンテナに格納されたストリームデータは、再生時に一定間隔で先頭から順に取り出される。Bフレームがフレーム間予測において前方フレームを参照して符号化されていた場合、参照するPフレームが処理されて初めて復号可能となる。このため、BフレームをAVIコンテナに格納する際に、このフレーム間の参照関係を考慮しPフレームと順序を入れ替えて格納することになる。こうして格納されたデータは、データを復号し、復号された画像を表示するという作業を特定のタイミングで繰り返すことで動画として再生される事になるが、データの復号と表示の間隔はフレームレートから計算するため同一のタイミングとなる。その結果、復号した画像がそのままの順序で表示される事になり、部分的に逆再生を行っているかのような動画となってしまう(たとえば、MP4コンテナではデータ復号・復号画像の合成・表示のタイミングを個別に指定できるためこの問題は発生しない)。

しかし、近年のデコーダは入力されたデータに対し本来の表示順序通りにフレームを出力するよう改良されているため、利用上の問題はなくなっている。ただし、この方法を用いたデコーダでは最初のIフレームが他のフレームの2倍の表示時間となり、最終フレームは表示されないという副作用が発生する。この副作用についても、Packed-bitstreamと呼ばれる特殊なストリームフォーマットを用いることで解消した例がある(Xvid、DivXがサポートしている)。以上の様に、コーデック側の工夫によってBフレームは問題なく利用可能となっているが、AVIコンテナ自体にBフレームを正確に扱う為の情報が不足しているため、今後も新しい映像圧縮技術をAVIで扱えるかどうかはコーデック側に委ねられたことになる。

AVI2.0

Matrox OpenDMLグループが1996年2月に発表したAVIの拡張仕様で、これらはマイクロソフトによってサポートされ、非公式であるが「AVI2.0」と呼称されている。1996年2月28日にバージョン1.02が制定されている[2]

特徴としては以下が挙げられる。

  • 2GBを超えるファイルの取り扱いが可能。ファイルサイズはほぼ無制限(NTFSの許容範囲よりはるかに大きい)。
  • 3%のオーバーヘッド削減。

Windowsにおいては標準APIがVideo For Windowsに代わってDirectShowとなっており、DirectShowが出力するAVIファイルは通常AVI2.0形式となっている。これは従来のAVIが持つ古典的インデックスを余分に含んでおり、2GB未満のファイルの場合は通常のAVIとしても使用することができる[3]

【利用例】

  • さまざまなコーデックによる動画圧縮保存。
    • デジタルビデオカメラで撮影した映像の、編集作業用ファイルとして。
    • テレビ番組の無圧縮AVIキャプチャー。
  • ファイル共有ソフトでの動画の交換、共有。

【AVIファイルで使われるコーデック】

コーデック一覧

現在エンコーダーが公開されていない形式を含む。

映像(FourCC)

  • MPEG-1/-2(MPEG/MPG1/MPG2) – 通常はMPEG-2システムなどが使われる。
  • MPEG-4(MP4V/XVID/DX50/DIVX/DIV5/DIV4/3IVX/3IV2/RMP4)
  • MS-MPEG4(MPG4/MP42/MP43)
  • WMV7/WMV8/WMV9(WMV1/WMV2/WMV3) – 通常はASFコンテナが使われる。
  • DV(DVSD/DVIS)
  • Flash Video(FLV1/FLV4)
  • Motion JPEG(MJPG)
  • Lossless JPEG(LJPG)
  • H.264(AVC1/DAVC/H264/X264)
  • H.263/H.263+(H263/S263)
  • H.261(H261)
  • FFV1(FFV1)
  • Huffyuv/FFvHuff(HFYU/FFVH)
  • AVIzlib(ZLIB)
  • AVImszh(MSZH)
  • Theora(THEO) – 通常はOggコンテナが使われる。
  • Indeo Video(IV31/IV32)
  • Cinepak(CVID)
  • Microsoft Video 1(CRAM)
  • On2VP3(VP30/VP31)
  • On2VP4(VP40)
  • On2VP5(VP50)
  • On2 VP6(VP60/VP61/VP62)
  • On2 VP7(VP70)
  • VP8(VP80) – 通常はWebMコンテナが使われる。
  • VC-1(WVC1)

音声(Code)

  • リニアPCM
  • ADPCM
  • MP3(0x0055)
  • AC-3(0x0092)
  • AAC
  • HE-AAC
  • FLAC
  • Indeo Audio
  • TrueSpeech
  • Windows Media Audio
  • Vorbis – VBR(可変ビットレート)メインで設計されており、CBR(固定ビットレート)は擬似方式のみサポートのため、互換性に難がある。

【コーデックの組み合わせ】

コーデックの組み合わせは以下の例のように動画作成者が自由に選択できる。この自由度の高さが、再生できないAVIファイルが生まれる原因となっている。

  • DivX+MP3
  • H.264+MP3
  • H.264+AAC
  • WMV9+MP3