O que é um arquivo RIFF?

Resource Interchange File Format (RIFF) é uma estrutura de contêiner baseada em blocos, desenvolvida pela Microsoft e pela IBM. Seus blocos identificados e delimitados por tamanho formam a base de formatos como WAV e AVI.

Como funcionam os arquivos RIFF

Um arquivo RIFF é um único bloco externo: o código de quatro caracteres RIFF, um tamanho de 32 bits e um tipo de forma de quatro caracteres, como WAVE ou AVI , seguidos de sub-blocos. Cada bloco contém um código de quatro caracteres, uma contagem de bytes de 32 bits e seus dados. A especificação de 1991 permite que apenas os blocos RIFF e LIST contenham outros blocos, mas formas posteriores podem definir seus próprios contêineres, como o bloco de quadro de animação ANMF do WebP. O tipo de forma determina quais blocos são obrigatórios, quais são opcionais e se a ordem deles importa. Os inteiros são little-endian; a especificação de 1991 também define uma contraparte big-endian, RIFX, mas não registrou nenhum tipo de forma RIFX. Em um pipeline de mídia, os demultiplexadores percorrem a árvore de blocos para localizar amostras, descrições de formato, índices e metadados, pulando os blocos que não reconhecem com base no tamanho declarado.

Informações essenciais

  1. As cargas úteis do RIFF são alinhadas a palavras: um bloco com comprimento de dados ímpar é seguido por um byte zero de preenchimento que não é contado no tamanho declarado desse bloco. Um leitor que avança apenas pelo tamanho declarado chega um byte antes do cabeçalho do próximo bloco.
  2. Os tamanhos são de 32 bits, portanto um arquivo RIFF simples tem um limite próximo de 4 GB, e a solução depende da forma. Para WAVE, o RF64 da EBU e seu sucessor BW64 da ITU substituem o RIFF inicial por RF64 ou BW64 e acrescentam um bloco ds64, colocado primeiro, que armazena tamanhos de 64 bits. Quando o tamanho externo ou o tamanho do bloco data tiver o valor 0xFFFFFFFF, use o valor de 64 bits de ds64; caso contrário, vale o valor de 32 bits. A EBU agora orienta os usuários a consultar a ITU-R BS.2088 em vez do próprio texto sobre RF64. O AVI usa as extensões OpenDML, que são separadas. A documentação do multiplexador WAV do FFmpeg alerta que o suporte a RF64 não é tão universal quanto o suporte a RIFF.
  3. Não localize áudio ou vídeo em deslocamentos fixos. A especificação orienta os programas a esperar e ignorar blocos desconhecidos em todas as formas RIFF, e uma forma fixa apenas parte da ordem: um arquivo WAVE precisa conter um bloco de formato e um bloco de dados, com o bloco de formato primeiro, mas outros blocos podem ficar entre eles ou antes deles. Gravadores que podem posteriormente mudar para RF64 ou BW64 gravam um marcador JUNK antes do bloco de formato, e o FFmpeg observa que esse bloco pode confundir leitores WAV simplistas.
  4. RIFF identifica uma estrutura, não um tipo de mídia. Arquivos WAV, AVI e WebP comuns começam com RIFF; o tipo de forma de quatro caracteres que vem após o campo de tamanho (bytes 8 a 11, contando a partir de zero), WAVE, AVI ou WEBP, é o que os diferencia. Arquivos WAVE grandes que começam com RF64 ou BW64 mantêm WAVE nessa posição. As convenções dos blocos também podem variar conforme a forma: o WebP, por exemplo, não segue a convenção do RIFF de usar letras maiúsculas nos códigos de blocos padrão.

Quando os arquivos RIFF são importantes

Analise os blocos RIFF ao extrair metadados ou cargas úteis de mídia de arquivos compatíveis. Os leitores precisam respeitar os tamanhos e o preenchimento dos blocos, pois presumir uma ordem fixa pode causar falhas com arquivos válidos que contêm blocos opcionais ou desconhecidos.

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente