Was ist eine RIFF-Datei?

Resource Interchange File Format (RIFF) ist eine von Microsoft und IBM entwickelte Containerstruktur auf Chunk-Basis. Ihre gekennzeichneten, durch Größenangaben abgegrenzten Chunks bilden die Grundlage von Formaten wie WAV und AVI.

So funktionieren RIFF-Dateien

Eine RIFF-Datei besteht aus einem einzigen äußeren Chunk: dem Vierzeichencode RIFF, einer Größenangabe mit 32 Bit und einem vierstelligen Formtyp wie WAVE oder AVI , gefolgt von Unterchunks. Jeder Chunk enthält einen Vierzeichencode, eine Byteanzahl mit 32 Bit und seine Daten. Die Spezifikation von 1991 erlaubt nur Chunks mit den Codes RIFF und LIST, andere Chunks zu enthalten. Spätere Formen können jedoch eigene Container definieren, etwa den Animationsbild-Chunk von WebP mit dem Code ANMF. Der Formtyp bestimmt, welche Chunks erforderlich oder optional sind und ob ihre Reihenfolge relevant ist. Ganzzahlen werden im Little-Endian-Format gespeichert. Die Spezifikation von 1991 definiert auch ein Big-Endian-Gegenstück namens RIFX, registrierte jedoch keine RIFX-Formtypen. In einer Medienpipeline durchlaufen Demuxer den Chunk-Baum, um Abtastwerte, Formatbeschreibungen, Indizes und Metadaten zu finden. Unbekannte Chunks überspringen sie anhand ihrer deklarierten Größe.

Wichtige Fakten

  1. RIFF-Nutzdaten sind wortausgerichtet: Auf einen Chunk mit ungerader Datenlänge folgt ein Nullbyte zur Auffüllung, das nicht zur deklarierten Größe dieses Chunks zählt. Ein Leseprogramm, das nur um die deklarierte Größe weiterrückt, erreicht den nächsten Chunk-Header ein Byte zu früh.
  2. Größenangaben haben 32 Bit, daher liegt die Obergrenze einer einfachen RIFF-Datei bei etwa 4 GB. Die Lösung hängt von der Form ab. Für WAVE ersetzen RF64 der EBU und dessen ITU-Nachfolger BW64 das führende RIFF durch RF64 oder BW64 und fügen als ersten Chunk ds64 mit Größenangaben von 64 Bit hinzu. Wenn die äußere Größenangabe oder die Größe des Chunks mit dem Code data den Wert 0xFFFFFFFF hat, verwenden Sie den Wert mit 64 Bit aus ds64; andernfalls gilt der Wert mit 32 Bit. Die EBU verweist Nutzer inzwischen auf ITU-R BS.2088 statt auf ihren eigenen RF64-Text. AVI verwendet die separaten OpenDML-Erweiterungen. Die Dokumentation zum WAV-Muxer von FFmpeg warnt, dass RF64 nicht so universell unterstützt wird wie RIFF.
  3. Suchen Sie Audio- oder Videodaten nicht an festen Offsets. Laut Spezifikation müssen Programme in jeder RIFF-Form mit unbekannten Chunks rechnen und sie ignorieren. Eine Form legt nur einen Teil der Reihenfolge fest: Eine WAVE-Datei muss einen Format-Chunk und einen Daten-Chunk enthalten, wobei der Format-Chunk zuerst kommt. Andere Chunks können jedoch dazwischen oder davor stehen. Aufnahmeprogramme, die später möglicherweise zu RF64 oder BW64 wechseln, schreiben vor dem Format-Chunk einen Platzhalter mit dem Code JUNK. FFmpeg weist darauf hin, dass ein solcher Chunk einfache WAV-Leseprogramme verwirren kann.
  4. RIFF kennzeichnet eine Struktur, keinen Medientyp. Gewöhnliche WAV-, AVI- und WebP-Dateien beginnen alle mit RIFF. Der vierstellige Formtyp nach dem Größenfeld (Bytes 8 bis 11, ab null gezählt), also WAVE, AVI oder WEBP, unterscheidet sie voneinander. Große WAVE-Dateien, die mit RF64 oder BW64 beginnen, behalten WAVE an dieser Position bei. Auch Chunk-Konventionen können je nach Form abweichen: WebP folgt beispielsweise nicht der RIFF-Konvention, Standard-Chunk-Codes großzuschreiben.

Wann RIFF-Dateien wichtig sind

Parsen Sie RIFF-Chunks, wenn Sie Metadaten oder Mediennutzdaten aus kompatiblen Dateien extrahieren. Leseprogramme müssen Chunk-Größen und Auffüllbytes berücksichtigen, da die Annahme einer festen Reihenfolge bei gültigen Dateien mit optionalen oder unbekannten Chunks zu Fehlern führen kann.

Quellen

Machen Sie aus Medienwissen eine funktionierende Pipeline

Verbinden Sie Uploads, Verarbeitung, KI, Storage und Auslieferung über eine deklarative API – um Encoding-Stack, Skalierung und ständig wechselnde Formate müssen Sie sich nicht selbst kümmern.

Transloadit kostenlos ausprobieren