Partilhar via


Referência de arquivo AVI RIFF

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use 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-vídeo. Em geral, os arquivos AVI contêm vários fluxos de diferentes tipos de dados. A maioria das sequências de AVI usa fluxos de áudio e vídeo. Uma variação simples para uma sequência de 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 AVI do OpenDML. Para obter mais informações sobre essas extensões, consulte Extensões de formato de arquivo AVI opendml, publicadas peloComissão de formato de arquivo AVI M-JPEG do OpenDML.

Fourccs

Um FOURCC (código de quatro caracteres) é um inteiro sem sinal 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, portanto , 'abc' é um FOURCC válido. O formato de arquivo AVI usa códigos FOURCC para identificar tipos de fluxo, partes de dados, entradas de índice e outras informações.

Formato de arquivo RIFF

O formato de arquivo AVI baseia-se no formato de documento RIFF (formato de arquivo de intercâmbio de recursos). Um arquivo RIFF consiste em um cabeçalho RIFF seguido por zero ou mais listas e partes.

  • O cabeçalho RIFF tem o seguinte formulário:

    'RIFF' fileSize fileType (data)

    em que 'RIFF' é o código LITERAL FOURCC 'RIFF', fileSize é um valor de 4 bytes que fornece 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 a seguir, mas não inclui o tamanho do "RIFF" FOURCC ou o tamanho de fileSize. Os dados do arquivo consistem em partes e listas, em qualquer ordem.

  • Uma parte tem o seguinte formulário:

    ckID ckSize ckData

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

  • Uma lista tem o seguinte formulário:

    'LIST' listSize listType listData

    em que 'LIST' é o código LITERAL FOURCC 'LIST', listSize é um valor de 4 bytes que fornece 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; ele não inclui o 'LIST' FOURCC ou o tamanho de listSize.

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

ckID ( ckData )

em que o tamanho da parte está implícito. Usando essa notação, uma lista pode ser representada como:

'LIST' ( listType ( listData ) )

Os elementos opcionais são colocados entre colchetes: [ optional element ]

Formulário AVI RIFF

Os arquivos AVI são identificados pelo FOURCC 'AVI' no cabeçalho RIFF. Todos os arquivos AVI incluem duas partes list obrigatórias, que definem o formato dos fluxos e os dados de fluxo, respectivamente. Um arquivo AVI também pode incluir uma parte de índice, que fornece o local das partes de dados dentro do arquivo. Um arquivo AVI com esses componentes tem o seguinte formulário:

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

A lista 'hdrl' define o formato dos dados e é a primeira parte DA LISTA necessária. A lista 'movi' contém os dados da sequência AVI e é a segunda parte LIST necessária. 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 subchunks para seus dados. O exemplo a seguir mostra o formulário AVI RIFF expandido com as partes necessárias para concluir estas 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 do AVI

A lista 'hdrl' começa com o cabeçalho AVI main, que está contido em uma parte 'avih'. O cabeçalho main 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. A parte do cabeçalho main consiste em uma estrutura AVIMAINHEADER.

Cabeçalhos de fluxo do AVI

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

A parte do cabeçalho de fluxo ('strh') consiste em uma estrutura AVISTREAMHEADER .

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

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

A parte opcional 'strn' contém uma cadeia de caracteres 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 das partes 'strl'. A primeira parte 'strl' aplica-se ao fluxo 0, a segunda aplica-se ao fluxo 1 e assim por diante.

Dados do Stream (lista 'movi')

Seguindo as informações de cabeçalho está uma lista "movi" que contém os dados reais nos fluxos, ou seja, os quadros de vídeo e os exemplos de áudio. As partes de dados podem residir diretamente na lista 'movi' ou podem ser agrupadas em listas 'rec'. O agrupamento 'rec' implica que as partes agrupadas devem ser lidas do disco de uma só vez e destina-se a arquivos intercalados a serem reproduzidos do CD-ROM.

O FOURCC que identifica cada parte 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 na parte.

Código de dois caracteres Descrição
db Quadro de vídeo descompactado
dc Quadro de vídeo compactado
pc Alteração da paleta
Wb Dados de áudio

 

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

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

Entradas de índice AVI

Índice AVI 1.0

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

Índice AVI 2.0

Um índice AVI 2.0 pode aparecer como uma única parte. Como alternativa, os segmentos de índice podem ser intercalados dentro da parte 'movi'. Se os segmentos de índice forem colocados na parte 'movi', um super índice conterá um índice dos segmentos de índice. A estrutura AVIMETAINDEX é a estrutura base para os segmentos de índice e o super índice. Para obter mais informações, consulte As Extensões de Formato de Arquivo OpenDML AVI, publicadas pelo Subcomitê de Formato de Arquivo OpenDML AVI M-JPEG. (Esse recurso pode não estar disponível em alguns idiomas e países.)

Outras partes de dados

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

Formato de arquivo AVI