Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngineet audio/vidéo capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et 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 OpenDML AVI. Pour plus d’informations sur ces extensions, consultez extensions de format de fichier OPENDML AVI, publiée par le sous-comité du format de fichier OpenDML AVI M-JPEG.
FOURCCS
Un FOURCC (code à quatre caractères) est un entier non signé 32 bits créé en concaténant quatre caractères ASCII. Par exemple, le FOURCC 'abcd' est représenté sur un système Little-Endian comme 0x64636261. LES QUATRECC peuvent contenir des caractères d’espace. Par conséquent, « abc » est 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 (format de fichier d’échange de ressources). Un fichier RIFF se compose d’un en-tête RIFF suivi de zéro ou plus listes et segments.
L’en-tête RIFF comporte le formulaire suivant :
'RIFF' fileSize fileType (data)
où « RIFF » est le code FOURCC littéral « RIFF »,
fileSize
est une valeur de 4 octets donnant la taille des données dans le fichier, etfileType
est un FOURCC qui identifie le type de fichier spécifique. La valeur defileSize
inclut la taille de lafileType
FOURCC ainsi que la taille des données qui suivent, mais n’inclut pas la taille du FOURCC « RIFF » ou la taille defileSize
. Les données de fichier se composent de blocs et de listes, dans n’importe quel ordre.Un bloc a la forme suivante :
ckID ckSize ckData
où
ckID
est un FOURCC qui identifie les données contenues dans le bloc,ckSize
est une valeur de 4 octets donnant la taille des données dansckData
, etckData
est égal à zéro ou plus d’octets de données. Les données sont toujours complétées à la limite WORD la plus proche.ckSize
donne la taille des données valides dans le bloc ; il n’inclut pas le remplissage, la taille deckID
, ou la taille deckSize
.Une liste comporte le formulaire suivant :
'LIST' listSize listType listData
où « LIST » est le code FOURCC littéral « LIST »,
listSize
est une valeur de 4 octets donnant la taille de la liste,listType
est un code FOURCC etlistData
se compose de blocs ou de listes, dans n’importe quel ordre. La valeur delistSize
inclut la taille delistType
plus la taille delistData
; il n’inclut pas le FOURCC « LIST » ou la taille delistSize
.
Le reste de cette section utilise la notation suivante pour décrire les blocs RIFF :
ckID ( ckData )
où la taille de bloc 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 des données de flux. Un fichier AVI peut également inclure un bloc d’index, qui donne l’emplacement des blocs de données dans le fichier. Un fichier AVI avec ces composants a la forme suivante :
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
La liste « hdrl » définit le format des données et est 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 la séquence appropriée.
Note
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 blocs 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 principal, qui est contenu dans un segment « avih ». L’en-tête principal contient des informations globales pour l’intégralité du fichier AVI, telles que le nombre de flux au sein du fichier et la largeur et la hauteur de la séquence AVI. Le bloc d’en-tête principal se compose d’une structure AVIMAINHEADER.
En-têtes de flux AVI
Une ou plusieurs listes « strl » suivent l’en-tête principal. 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 bloc d’en-tête de flux ('strh') et un bloc de format de flux ('strf'). En outre, une liste « strl » peut contenir un bloc de données d’en-tête de flux ('strd') et un bloc de nom de flux ('strn').
Le bloc d’en-tête de flux ('strh') se compose d’une structure AVISTREAMHEADER.
Un bloc de format de flux ('strf') doit suivre le bloc d’en-tête de flux. Le bloc de format de flux décrit le format des données dans le flux. Les données contenues dans ce bloc dépendent du type de flux. Pour les flux vidéo, les informations sont une structure BITMAPINFO, y compris les informations de palette le cas échéant. Pour les flux audio, les informations sont une structure WAVEFORMATEX.
Si le bloc de données d’en-tête de flux ('strd') est présent, il suit le bloc de format de flux. Le format et le contenu de ce bloc 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 facilement vers et depuis le pilote en tant que bloc de mémoire.
Le bloc « strn » facultatif contient une chaîne de texte terminée par null décrivant le flux.
Les en-têtes de flux de la liste « hdrl » sont associés aux données de flux dans la liste « movi » en fonction de l’ordre des blocs « strl ». Le premier bloc « strl » s’applique au flux 0, le second s’applique au flux 1, etc.
Diffuser des données (liste movi)
La suite des informations d’en-tête est 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 blocs 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 regroupés doivent être lus à partir du disque tout en même temps et sont destinés aux fichiers qui sont 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 à deux caractères qui définit le type d’informations dans le bloc.
Code à deux caractères | Description |
---|---|
Db | Image vidéo non compressée |
courant continu | Image vidéo compressée |
PC | Modification de palette |
Wb | Données audio |
Par exemple, si le flux 0 contient de l’audio, les blocs de données de ce flux auront le fourCC « 00wb ». Si le flux 1 contient une vidéo, les blocs de données de ce flux auront le fourCC « 01db » ou « 01dc ». Les blocs 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 l'dwFlags membre de la structure AVISTREAMHEADER pour ce flux.
Les flux de texte peuvent utiliser des codes à deux caractères arbitraires.
Entrées d’index AVI
-
index AVI 1.0
-
Un bloc 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 les blocs « rec ». Si le fichier contient un index, définissez l’indicateur AVIF_HASINDEX dans la structure dwFlags membre de la structure AVIMAINHEADER.
-
index AVI 2.0
-
Un index AVI 2.0 peut apparaître sous forme de bloc unique. Vous pouvez également interlacer 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 structureAVIMETAINDEXest la structure de base des segments d’index et du super index. Pour plus d’informations, consultez les extensions de format de fichier OpenDML AVI , publiées par le sous-comité de format de fichier OpenDML AVI M-JPEG. (Cette ressource peut ne pas être disponible dans certaines langues et pays.)
Autres blocs de données
Les données peuvent être alignées dans un fichier AVI en insérant des blocs « JUNK » selon les besoins. Les applications doivent ignorer le contenu d’un bloc « JUNK ».
Rubriques connexes