# Audio Video Interleave

Audio Video Interleave (AVI) ist ein vom Softwarehersteller Microsoft definiertes Video-Containerformat, das von dem für Windows 3.1 eingeführten RIFF (Resource Interchange File Format) abgeleitet ist. „Audio Video Interleave“ bedeutet, dass Audio- und Videodaten ineinander verzahnt, also „interleaved“ abgespeichert werden (Siehe auch Interleaving).

## Allgemeines

Die erste Definition von AVI ist so alt wie die Multimedia-PCs. Das Format wurde 1992 von Microsoft im Rahmen der Video for Windows Programmierschnittstelle geschaffen, um die Wiedergabe von audiovisuellen Daten innerhalb Windows zu ermöglichen. In einer AVI-Datei können mehrere Video-, Audio- und Text-Untertiteldatenströme vorhanden sein, die wiederum mit verschiedenen Verfahren kodiert sein können. Der Typ eines Videostreams wird über FourCCs (Four Character Code) gespeichert, für Audiostreams kommen TwoCCs zum Einsatz. Zum Kodieren oder Dekodieren wird für jeden Stream ein entsprechender Codec benötigt. Die meisten AVI-Dateien nutzen die Erweiterungen, die von der Matrox-OpenDML-Gruppe im Februar 1996 vorgestellt wurden. Diese Dateien werden von Microsoft in begrenztem Umfang unterstützt und sind inoffiziell als AVI 2.0 bekannt.
Bis einschließlich Windows XP wurden an mehreren Stellen der grafischen Benutzeroberfläche von Windows kleine AVI-Animationen ohne Ton abgespielt. Beispielsweise spielte der Dialog zur Visualisierung von Kopiervorgängen eine sich endlos wiederholende AVI-Animation ab, bei der Dateien von einem Ordner in einen anderen Ordner flattern. Auch wenn Microsoft inzwischen nicht mehr Gebrauch davon macht, wird diese Möglichkeit weiterhin für Softwareentwickler bereitgestellt.

## Vorteile von AVI

* Das AVI-Format ist weit verbreitet und wird von vielen Multimedia-Programmen zumindest ausreichend unterstützt.
* Das Format wird auch von einer Vielzahl an DVD-Spielern unterstützt (sofern die verwendeten Codecs von diesen unterstützt werden).

## Nachteile von AVI

* kein standardisierter Weg um das Seitenverhältnis zu speichern, wodurch Abspielsoftware nicht automatisch das richtige auswählen kann
* kein standardisierter Weg um die Halbbildreihenfolge (oberes oder unteres Halbbild zuerst) zu speichern, wodurch Schnitt- oder Abspielsoftware nicht automatisch das richtige auswählen kann
* nicht für Video- und Audio-Formate ausgelegt, die mit variabler Bildrate (VFR) arbeiten
* nicht für Videokompressionen gedacht, die auf Bilder zugreifen, die vor dem momentan angezeigten liegen (MPEG-4, …)
* schlechte Unterstützung für Untertitel (Untertitel als Bilder, wie auf DVDs, sind nicht möglich)
* keine Unterstützung von Menüs oder Kapiteln
* keine einheitliche Möglichkeit zur Angabe von Zeitstempeln (Timecodes)
Einige dieser Beschränkungen lassen sich mitunter umgehen. So ermöglicht zum Beispiel der FFmpeg Encoder Vorbis-Audio in AVI-Dateien zu verwenden. Meist allerdings nicht ohne Nachteile wie stark erhöhtes Datenaufkommen (Overhead) oder Unverträglichkeit mit Hard- oder Software.
Diese Umstände führten zur Entwicklung anderer, neuer Containerformate wie Matroska, Ogg Media oder auch dem MP4-Containerformat.

## Aufbau

Eine AVI-1.0-Datei besteht aus einer RIFF-Datei mit einer einzelnen AVI-Liste, eine AVI 2.0-Datei enthält weitere AVIX-Listen. Jede AVI- und AVIX-Liste ist nicht größer als 2 GB. Im Falle einer AVI 2.0-Datei verlangt die Spezifikation, dass die erste RIFF-Liste 1 GB nicht überschreitet. Dieser Punkt wird jedoch von einigen Anwendungen beim Erstellen solcher Dateien ignoriert. Die AVI-LIST enthält eine Liste mit den Headern, eine Liste mit den eigentlichen Daten und einen optionalen Chunk für Index-Einträge.
Eine AVI-Datei enthält meistens jeweils ein Bild in einem Block, genannt Chunk. Abweichend davon können mehrere Bilder dann gemeinsam in einem Chunk untergebracht werden, wenn im Header angegeben ist, dass der Index zwangsläufig genutzt werden muss, um die einzelnen Bilder zu finden.
Dieser üblicherweise enthaltene Index zählt alle Frames (Video, Audio, Untertitel) mit Position und Größe auf. Für AVI 1.0 wird er nicht zwangsläufig gefordert. Zeitstempel sind nur implizit enthalten. Im Falle von AVI 1.0 befindet sich der Index am Ende der Datei, im Falle von AVI 2.0 kommt ein zweistufiger Index zum Einsatz. Die erste Stufe befindet sich dann für jeden Stream im Header dieses Streams, die zweite Stufe befindet sich mitten in den Video/Audio-Daten. Die Blockgröße für die zweite Stufe des Index ist nicht festgelegt, aus formattechnischen Gründen muss jedoch mindestens ein Block pro Stream und pro 4 GB vorhanden sein. Da eine Datei unter Umständen nur korrekt abgespielt werden kann, wenn diese Informationen vorliegen, vor allem wenn Teile des Datenstroms beschädigt sind, ist AVI als Streaming-Format ungeeignet.
Im Header kann zusätzlich angegeben werden, dass der Index genutzt werden muss, um Datenblöcke zu finden. Das ist relevant, wenn die Daten innerhalb der AVI-Datei nicht in Abspielreihenfolge vorliegen oder mehrere Frames, z. B. mehrere Bilder, in einem einzigen Chunk vorliegen. Das Packen mehrerer Bilder in einen Chunk erlaubt es, Overhead zu sparen, denn jeder Chunk zieht, einen Index-Eintrag nicht eingerechnet, 8 Bytes Overhead nach sich, verringert aber die Chance, unbeschädigte Teile teilweise beschädigter Dateien wiedergeben zu können.
Da das AVI-Format auf der x86-Architektur seinen Ursprung hat, sind die darin enthaltenen Zahlen im Little-Endian-Format gehalten.