Partager via


Informations de référence sur le fichier RIFF AVI

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Le format de fichier Microsoft AVI est une spécification de fichier RIFF utilisée avec les applications qui capturent, modifient et lire des séquences audio-vidéo. En général, les fichiers AVI contiennent plusieurs flux de différents types de données. La plupart des séquences AVI utilisent des flux audio et vidéo. Une variante simple pour une séquence AVI utilise des données vidéo et ne nécessite pas de flux audio.

Cette section ne décrit pas les extensions de format de fichier AVI OpenDML. Pour plus d’informations sur ces extensions, consultez Extensions de format de fichier OpenDML AVI, publiées par le sous-comité du format de fichier OpenDML AVI M-JPEG.

FOURCCs

Un FOURCC (code à quatre caractères) est un entier 32 bits non signé créé en concaténant quatre caractères ASCII. Par exemple, le FOURCC « abcd » est représenté sur un système Little-Endian en tant que 0x64636261. FOURCCs pouvant contenir des caractères d’espace, ' abc' est donc un FOURCC valide. Le format de fichier AVI utilise des codes FOURCC pour identifier les types de flux, les blocs de données, les entrées d’index et d’autres informations.

Format de fichier RIFF

Le format de fichier AVI est basé sur le format de document RIFF (resource interchange file format). Un fichier RIFF se compose d’un en-tête RIFF suivi de zéro ou plusieurs listes et blocs.

  • L’en-tête RIFF se présente sous la forme suivante :

    'RIFF' fileSize fileType (data)

    où « RIFF » est le code FOURCC littéral « RIFF », fileSize est une valeur de 4 octets qui donne la taille des données dans le fichier et fileType est un FOURCC qui identifie le type de fichier spécifique. La valeur de fileSize inclut la taille du fileType FOURCC plus la taille des données qui suit, mais n’inclut pas la taille du FOURCC « RIFF » ou la taille de fileSize. Les données de fichier se composent de blocs et de listes, dans n’importe quel ordre.

  • Un segment a la forme suivante :

    ckID ckSize ckData

    ckID est un FOURCC qui identifie les données contenues dans le segment, ckSize est une valeur de 4 octets donnant la taille des données dans ckData, et ckData est de zéro ou plus octets de données. Les données sont toujours ajoutées à la limite WORD la plus proche. ckSize donne la taille des données valides dans le segment ; il n’inclut pas le remplissage, la taille de ckID, ou la taille de ckSize.

  • Une liste se présente sous la forme suivante :

    'LIST' listSize listType listData

    où 'LIST' est le code FOURCC littéral 'LIST', listSize est une valeur de 4 octets qui donne la taille de la liste, listType est un code FOURCC et listData se compose de blocs ou de listes, dans n’importe quel ordre. La valeur de listSize inclut la taille de listType plus la taille de listData; elle n’inclut pas le FOURCC 'LIST' ni la taille de listSize.

Le reste de cette section utilise la notation suivante pour décrire les blocs RIFF :

ckID ( ckData )

où la taille du segment est implicite. À l’aide de cette notation, une liste peut être représentée comme suit :

'LIST' ( listType ( listData ) )

Les éléments facultatifs sont placés entre crochets : [ optional element ]

Formulaire AVI RIFF

Les fichiers AVI sont identifiés par le FOURCC « AVI » dans l’en-tête RIFF. Tous les fichiers AVI incluent deux blocs LIST obligatoires, qui définissent respectivement le format des flux et les données de flux. Un fichier AVI peut également inclure un segment d’index, qui indique l’emplacement des blocs de données dans le fichier. Un fichier AVI avec ces composants se présente sous la forme suivante :

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

La liste « hdrl » définit le format des données et constitue le premier bloc LIST requis. La liste « movi » contient les données de la séquence AVI et est le deuxième segment LIST requis. La liste « idx1 » contient l’index. Les fichiers AVI doivent conserver ces trois composants dans l’ordre approprié.

Notes

Les extensions OpenDML définissent un autre type d’index, identifié par le FOURCC 'indx'.

 

Les listes « hdrl » et « movi » utilisent des sous-blocs pour leurs données. L’exemple suivant montre le formulaire RIFF AVI développé avec les segments nécessaires pour remplir ces listes :

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>) ]
     )

En-tête principal AVI

La liste « hdrl » commence par l’en-tête AVI main, qui est contenu dans un segment « avih ». L’en-tête main contient des informations globales pour l’ensemble du fichier AVI, telles que le nombre de flux dans le fichier et la largeur et la hauteur de la séquence AVI. Le segment d’en-tête main se compose d’une structure AVIMAINHEADER.

En-têtes de flux AVI

Une ou plusieurs listes « strl » suivent l’en-tête main. Une liste « strl » est requise pour chaque flux de données. Chaque liste « strl » contient des informations sur un flux dans le fichier et doit contenir un segment d’en-tête de flux (« strh ») et un bloc de format de flux (« strf »). En outre, une liste « strl » peut contenir un segment de données d’en-tête de flux (« strd ») et un segment de nom de flux (« strn »).

Le segment d’en-tête de flux (« strh ») se compose d’une structure AVISTREAMHEADER .

Un segment de format de flux (« strf ») doit suivre le segment d’en-tête de flux. Le segment de format de flux décrit le format des données dans le flux. Les données contenues dans ce segment dépendent du type de flux. Pour les flux vidéo, les informations sont une structure BITMAPINFO , y compris des informations de palette si nécessaire. Pour les flux audio, les informations sont une structure WAVEFORMATEX .

Si le segment de données d’en-tête de flux (« strd ») est présent, il suit le segment de format de flux. Le format et le contenu de ce segment sont définis par le pilote de codec. En règle générale, les pilotes utilisent ces informations pour la configuration. Les applications qui lisent et écrivent des fichiers AVI n’ont pas besoin d’interpréter ces informations ; ils le transfèrent simplement vers et depuis le pilote en tant que bloc de mémoire.

Le segment « strn » facultatif contient une chaîne de texte terminée par null décrivant le flux.

Les en-têtes de flux dans la liste « hdrl » sont associés aux données de flux dans la liste « movi » selon l’ordre des blocs « strl ». Le premier segment « strl » s’applique au flux 0, le second s’applique au flux 1, et ainsi de suite.

Stream Data ('movi' List)

Après les informations d’en-tête se trouve une liste « movi » qui contient les données réelles dans les flux, c’est-à-dire les images vidéo et les exemples audio. Les segments de données peuvent résider directement dans la liste « movi », ou ils peuvent être regroupés dans des listes « rec ». Le regroupement « rec » implique que les blocs groupés doivent être lus à partir du disque en même temps, et est destiné aux fichiers entrelacés pour lire à partir du CD-ROM.

Le FOURCC qui identifie chaque segment de données se compose d’un nombre de flux à deux chiffres suivi d’un code de deux caractères qui définit le type d’informations dans le segment.

Code à deux caractères Description
db Image vidéo non compressée
dc Image vidéo compressée
pc Changement de palette
Wb Données audio

 

Par exemple, si le flux 0 contient de l’audio, les segments de données de ce flux ont le FOURCC « 00wb ». Si le flux 1 contient de la vidéo, les blocs de données de ce flux ont le FOURCC « 01db » ou « 01dc ». Les segments de données vidéo peuvent également définir de nouvelles entrées de palette pour mettre à jour la palette pendant une séquence AVI. Chaque segment de modification de palette (« xxpc ») contient une structure AVIPALCHANGE . Si un flux contient des modifications de palette, définissez l’indicateur AVISF_VIDEO_PALCHANGES dans le membre dwFlags de la structure AVISTREAMHEADER pour ce flux.

Les flux de texte peuvent utiliser des codes arbitraires à deux caractères.

Entrées d’index AVI

Index AVI 1.0

Un segment d’index facultatif (« idx1 ») peut suivre la liste « movi ». L’index contient une liste des blocs de données et leur emplacement dans le fichier. Il se compose d’une structure AVIOLDINDEX avec des entrées pour chaque segment de données, y compris des blocs « rec ». Si le fichier contient un index, définissez l’indicateur AVIF_HASINDEX dans le membre dwFlags de la structure AVIMAINHEADER .

Index AVI 2.0

Un index AVI 2.0 peut apparaître sous la forme d’un segment unique. Vous pouvez également entrelacer les segments d’index dans le segment « movi ». Si les segments d’index sont placés dans le segment « movi », un super index contient un index des segments d’index. La structure AVIMETAINDEX est la structure de base des segments d’index et du super index. Pour plus d’informations, consultez les extensions de format de fichier AVI OpenDML, publiées par le sous-comité du format de fichier OpenDML AVI M-JPEG. (Cette ressource n’est peut-être pas disponible dans certaines langues et certains pays.)

Autres blocs de données

Les données peuvent être alignées dans un fichier AVI en insérant des blocs « JUNK » en fonction des besoins. Les applications doivent ignorer le contenu d’un segment « JUNK ».

Format de fichier AVI