Partilhar via


Referência do arquivo AVI RIFF

[O recurso associado a esta página, DirectShow, é um recurso herdado. Foi substituído por MediaPlayer, IMFMediaEnginee Audio/Video Capture in Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda vivamente que o novo código utilize MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

O formato de arquivo AVI da Microsoft é uma especificação de arquivo RIFF usada com aplicativos que capturam, editam e reproduzem sequências de áudio e vídeo. Em geral, os arquivos AVI contêm vários fluxos de diferentes tipos de dados. A maioria das sequências AVI usa fluxos de áudio e vídeo. Uma variação simples para uma sequência AVI usa dados de vídeo e não requer um fluxo de áudio.

Esta seção não descreve as extensões de formato de arquivo OpenDML AVI. Para obter mais informações sobre essas extensões, consulte OpenDML AVI File Format Extensions, publicado pelo OpenDML AVI M-JPEG File Format Subcommittee.

FOURCCs

Um FOURCC (código de quatro caracteres) é um inteiro não assinado de 32 bits criado pela concatenação de quatro caracteres ASCII. Por exemplo, o FOURCC 'abcd' é representado em um sistema Little-Endian como 0x64636261. FOURCCs podem conter caracteres de espaço, então ' abc' é um FOURCC válido. O formato de arquivo AVI usa códigos FOURCC para identificar tipos de fluxo, blocos de dados, entradas de índice e outras informações.

Formato de arquivo RIFF

O formato de arquivo AVI é baseado no formato de documento RIFF (resource interchange file format). Um arquivo RIFF consiste em um cabeçalho RIFF seguido por zero ou mais listas e partes.

  • O cabeçalho RIFF tem a seguinte forma:

    'RIFF' fileSize fileType (data)

    onde 'RIFF' é o código FOURCC literal 'RIFF', fileSize é um valor de 4 bytes que dá o tamanho dos dados no arquivo, e fileType é um FOURCC que identifica o tipo de arquivo específico. O valor de fileSize inclui o tamanho do fileType FOURCC mais o tamanho dos dados que se seguem, mas não inclui o tamanho do 'RIFF' FOURCC ou o tamanho do fileSize. Os dados do arquivo consistem em partes e listas, em qualquer ordem.

  • Um pedaço tem a seguinte forma:

    ckID ckSize ckData

    onde ckID é um FOURCC que identifica os dados contidos no bloco, ckSize é um valor de 4 bytes que dá o tamanho dos dados em ckDatae ckData é zero ou mais bytes de dados. Os dados são sempre acolchoados ao limite mais próximo WORD. ckSize fornece o tamanho dos dados válidos no bloco; não inclui o preenchimento, o tamanho do ckIDou o tamanho do ckSize.

  • Uma lista tem a seguinte forma:

    'LIST' listSize listType listData

    onde 'LIST' é o código FOURCC literal 'LIST', listSize é um valor de 4 bytes que dá o tamanho da lista, listType é um código FOURCC e listData consiste em partes ou listas, em qualquer ordem. O valor de listSize inclui o tamanho de listType mais o tamanho de listData; não inclui a «LISTA» FOURCC nem a dimensão do listSize.

O restante desta seção usa a seguinte notação para descrever partes RIFF:

ckID ( ckData )

onde o tamanho do pedaço está implícito. Usando esta notação, uma lista pode ser representada como:

'LIST' ( listType ( listData ) )

Os elementos opcionais são colocados entre parênteses: [ optional element ]

Formulário AVI RIFF

Os arquivos AVI são identificados pelo FOURCC 'AVI' no cabeçalho RIFF. Todos os arquivos AVI incluem dois blocos LIST obrigatórios, que definem o formato dos fluxos e os dados do fluxo, respectivamente. Um arquivo AVI também pode incluir um bloco de índice, que fornece a localização dos blocos de dados dentro do arquivo. Um arquivo AVI com esses componentes tem a seguinte forma:

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

A lista 'hdrl' define o formato dos dados e é o primeiro bloco LIST necessário. A lista 'movi' contém os dados para a sequência AVI e é o segundo bloco LIST necessário. A lista 'idx1' contém o índice. Os arquivos AVI devem manter esses três componentes na sequência adequada.

Observação

As extensões OpenDML definem outro tipo de índice, identificado pelo FOURCC 'indx'.

 

As listas 'hdrl' e 'movi' usam subblocos para seus dados. O exemplo a seguir mostra o formulário AVI RIFF expandido com as partes necessárias para completar essas listas:

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

Cabeçalho principal AVI

A lista 'hdrl' começa com o cabeçalho AVI principal, que está contido em um bloco 'avih'. O cabeçalho principal contém informações globais para todo o arquivo AVI, como o número de fluxos dentro do arquivo e a largura e altura da sequência AVI. O bloco de cabeçalho principal consiste em um AVIMAINHEADER estrutura.

Cabeçalhos de fluxo AVI

Uma ou mais listas 'strl' seguem o cabeçalho principal. É necessária uma lista «strl» para cada fluxo de dados. Cada lista 'strl' contém informações sobre um fluxo no arquivo e deve conter um bloco de cabeçalho de fluxo ('strh') e um bloco de formato de fluxo ('strf'). Além disso, uma lista 'strl' pode conter um bloco de dados de cabeçalho de fluxo ('strd') e um bloco de nome de fluxo ('strn').

O bloco de cabeçalho de fluxo ('strh') consiste em um AVISTREAMHEADER estrutura.

Um bloco de formato de fluxo ('strf') deve seguir o bloco de cabeçalho de fluxo. O bloco de formato de fluxo descreve o formato dos dados no fluxo. Os dados contidos neste bloco dependem do tipo de fluxo. Para fluxos de vídeo, as informações são um estrutura de BITMAPINFO, incluindo informações de paleta, se apropriado. Para fluxos de áudio, a informação é uma WAVEFORMATEX estrutura.

Se o bloco de dados de cabeçalho de fluxo ('strd') estiver presente, ele seguirá o bloco de formato de fluxo. O formato e o conteúdo deste bloco são definidos pelo driver de codec. Normalmente, os drivers usam essas informações para configuração. Aplicativos que leem e escrevem arquivos AVI não precisam interpretar essas informações; eles simplesmente transferi-lo de e para o driver como um bloco de memória.

O bloco 'strn' opcional contém uma cadeia de texto terminada em nulo que descreve o fluxo.

Os cabeçalhos de fluxo na lista 'hdrl' estão associados aos dados de fluxo na lista 'movi' de acordo com a ordem dos blocos 'strl'. O primeiro bloco 'strl' aplica-se ao fluxo 0, o segundo aplica-se ao fluxo 1 e assim por diante.

Stream Data (Lista 'movi')

Seguindo as informações do cabeçalho há uma lista 'movi' que contém os dados reais nos fluxos, ou seja, os quadros de vídeo e amostras de áudio. Os blocos de dados podem residir diretamente na lista 'movi', ou podem ser agrupados dentro de listas 'rec'. O agrupamento 'rec' implica que os blocos agrupados devem ser lidos do disco de uma só vez, e destina-se a ficheiros que são intercalados para reprodução a partir de CD-ROM.

O FOURCC que identifica cada bloco de dados consiste em um número de fluxo de dois dígitos seguido por um código de dois caracteres que define o tipo de informação no bloco.

Código de dois caracteres Descrição
dB Quadro de vídeo não comprimido
C.C. Quadro de vídeo comprimido
Pc Alteração da paleta
WB Dados de áudio

 

Por exemplo, se o fluxo 0 contiver áudio, os blocos de dados desse fluxo terão o FOURCC '00wb'. Se o fluxo 1 contiver vídeo, os blocos de dados para esse fluxo terão o FOURCC '01db' ou '01dc'. Os blocos de dados de vídeo também podem definir novas entradas de paleta para atualizar a paleta durante uma sequência AVI. Cada bloco de alteração de paleta ('xxpc') contém uma estruturaAVIPALCHANGE. Se um fluxo contiver alterações na paleta, defina o sinalizador AVISF_VIDEO_PALCHANGES no dwFlags membro da estruturaAVISTREAMHEADERpara esse fluxo.

Os fluxos de texto podem usar códigos arbitrários de dois caracteres.

Entradas de índice AVI

índice AVI 1.0

Um bloco de índice opcional ('idx1') pode seguir a lista 'movi'. O índice contém uma lista dos blocos de dados e sua localização no arquivo. Ele consiste em uma estrutura deAVIOLDINDEXcom entradas para cada bloco de dados, incluindo blocos 'rec'. Se o arquivo contiver um índice, defina o sinalizador AVIF_HASINDEX no dwFlags membro da estrutura AVIMAINHEADER.

índice AVI 2.0

Um índice AVI 2.0 pode aparecer como um único bloco. Alternativamente, os segmentos de índice podem ser intercalados dentro do bloco 'movi'. Se os segmentos de índice são colocados no bloco 'movi', um super índice contém um índice dos segmentos de índice. A estruturaAVIMETAINDEX é a estrutura de base para ambos os segmentos de índice e o super índice. Para obter mais informações, consulte o OpenDML AVI File Format Extensions, publicado pelo OpenDML AVI M-JPEG File Format Subcommittee. (Este recurso pode não estar disponível em alguns idiomas e países.)

Outros blocos de dados

Os dados podem ser alinhados em um arquivo AVI inserindo blocos 'JUNK' conforme necessário. Os aplicativos devem ignorar o conteúdo de um bloco 'JUNK'.

formato de arquivo AVI