Informazioni di riferimento sul file AVI RIFF
[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.
Il formato di file Microsoft AVI è una specifica di file RIFF usata con le applicazioni che acquisisce, modificano e riproducino sequenze audio-video. In generale, i file AVI contengono più flussi di diversi tipi di dati. La maggior parte delle sequenze AVI usa flussi audio e video. Una variante semplice per una sequenza AVI usa dati video e non richiede un flusso audio.
In questa sezione non vengono descritte le estensioni di formato di file OpenDML AVI. Per altre informazioni su queste estensioni, vedere OpenDML AVI File Format Extensions (Estensioni di formato di file AVI OpenDML) pubblicato dal sottocomitato OpenDML AVI M-JPEG File Format.
FOURCCs
Un codice FOURCC (codice a quattro caratteri) è un intero senza segno a 32 bit creato concatenando quattro caratteri ASCII. Ad esempio, fourcc 'abcd' è rappresentato in un sistema Little-Endian come 0x64636261. FOURCCs può contenere caratteri di spazio, quindi 'abc' è un FOURCC valido. Il formato di file AVI usa i codici FOURCC per identificare tipi di flusso, blocchi di dati, voci di indice e altre informazioni.
Formato di file RIFF
Il formato di file AVI è basato sul formato del documento RIFF (resource interchange file format). Un file RIFF è costituito da un'intestazione RIFF seguita da zero o più elenchi e blocchi.
L'intestazione RIFF ha il formato seguente:
'RIFF' fileSize fileType (data)
dove 'RIFF' è il codice FOURCC letterale 'RIFF',
fileSize
è un valore a 4 byte che assegna le dimensioni dei dati nel file edfileType
è un FOURCC che identifica il tipo di file specifico. Il valore difileSize
include le dimensioni difileType
FOURCC più le dimensioni dei dati seguenti, ma non include le dimensioni del FOURCC 'RIFF' o delle dimensioni difileSize
. I dati del file sono costituiti da blocchi ed elenchi, in qualsiasi ordine.Un blocco ha il formato seguente:
ckID ckSize ckData
dove
ckID
è un controllo FOURCC che identifica i dati contenuti nel blocco,ckSize
è un valore a 4 byte che assegna le dimensioni dei dati inckData
eckData
è pari a zero o più byte di dati. I dati vengono sempre riempiti al limite di WORD più vicino.ckSize
fornisce le dimensioni dei dati validi nel blocco; non include la spaziatura interna, le dimensioni dickID
o le dimensioni dickSize
.Un elenco ha il formato seguente:
'LIST' listSize listType listData
dove 'LIST' è il codice FOURCC letterale 'LIST',
listSize
è un valore a 4 byte che dà le dimensioni dell'elenco,listType
è un codice FOURCC elistData
è costituito da blocchi o elenchi, in qualsiasi ordine. Il valore dilistSize
include le dimensioni dilistType
più le dimensioni dilistData
; non include la dimensione FOURCC 'LIST' o la dimensione dilistSize
.
Nella parte restante di questa sezione viene usata la notazione seguente per descrivere i blocchi RIFF:
ckID ( ckData )
dove le dimensioni del blocco sono implicite. Usando questa notazione, un elenco può essere rappresentato come:
'LIST' ( listType ( listData ) )
Gli elementi facoltativi vengono posizionati tra parentesi quadre: [ optional element ]
Modulo AVI RIFF
I file AVI sono identificati dall'intestazione FOURCC 'AVI' nell'intestazione RIFF. Tutti i file AVI includono due blocchi LIST obbligatori, che definiscono rispettivamente il formato dei flussi e i dati del flusso. Un file AVI può includere anche un blocco di indice, che fornisce la posizione dei blocchi di dati all'interno del file. Un file AVI con questi componenti ha il formato seguente:
RIFF ('AVI '
LIST ('hdrl' ... )
LIST ('movi' ... )
['idx1' (<AVI Index>) ]
)
L'elenco "hdrl" definisce il formato dei dati ed è il primo blocco LIST obbligatorio. L'elenco "movi" contiene i dati per la sequenza AVI ed è il secondo blocco LIST obbligatorio. L'elenco 'idx1' contiene l'indice. I file AVI devono mantenere questi tre componenti nella sequenza corretta.
Nota
Le estensioni OpenDML definiscono un altro tipo di indice, identificato da FOURCC 'indx'.
Gli elenchi "hdrl" e "movi" usano i subchunk per i dati. L'esempio seguente mostra il modulo AVI RIFF espanso con i blocchi necessari per completare questi elenchi:
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>) ]
)
Intestazione principale AVI
L'elenco "hdrl" inizia con l'intestazione AVI principale, contenuta in un blocco "avih". L'intestazione principale contiene informazioni globali per l'intero file AVI, ad esempio il numero di flussi all'interno del file e la larghezza e l'altezza della sequenza AVI. Il blocco di intestazione principale è costituito da una struttura AVIMAINHEADER .
Intestazioni di flusso AVI
Uno o più elenchi 'strl' seguono l'intestazione principale. Per ogni flusso di dati è necessario un elenco 'strl'. Ogni elenco 'strl' contiene informazioni su un flusso nel file e deve contenere un blocco di intestazione del flusso ('strh') e un blocco di formato di flusso ('strf'). Inoltre, un elenco 'strl' potrebbe contenere un blocco di dati di intestazione di flusso ('strd') e un blocco di nomi di flusso ('strn').
Il blocco di intestazione del flusso ('strh') è costituito da una struttura AVISTREAMHEADER .
Un blocco di formato di flusso ('strf') deve seguire il blocco dell'intestazione del flusso. Il blocco di formato del flusso descrive il formato dei dati nel flusso. I dati contenuti in questo blocco dipendono dal tipo di flusso. Per i flussi video, le informazioni sono una struttura BITMAPINFO , incluse le informazioni sulla tavolozza, se appropriato. Per i flussi audio, le informazioni sono una struttura WAVEFORMATEX .
Se il blocco di dati dell'intestazione di flusso ('strd') è presente, segue il blocco del formato del flusso. Il formato e il contenuto di questo blocco sono definiti dal driver codec. In genere, i driver usano queste informazioni per la configurazione. Le applicazioni che leggono e scrivono file AVI non devono interpretare queste informazioni; lo trasferiscono semplicemente da e verso il driver come blocco di memoria.
Il blocco facoltativo 'strn' contiene una stringa di testo con terminazione Null che descrive il flusso.
Le intestazioni di flusso nell'elenco "hdrl" sono associate ai dati del flusso nell'elenco "movi" in base all'ordine dei blocchi "strl". Il primo blocco 'strl' si applica al flusso 0, il secondo si applica al flusso 1 e così via.
Stream Data ('movi' List)
Le informazioni sull'intestazione sono un elenco "movi" che contiene i dati effettivi nei flussi, ovvero i fotogrammi video e gli esempi audio. I blocchi di dati possono risiedere direttamente nell'elenco "movi" oppure possono essere raggruppati all'interno di elenchi "rec". Il raggruppamento "rec" implica che i blocchi raggruppati devono essere letti tutti contemporaneamente dal disco ed è destinato ai file che vengono interleaved per la riproduzione da CD-ROM.
FOURCC che identifica ogni blocco di dati è costituito da un numero di flusso a due cifre seguito da un codice a due caratteri che definisce il tipo di informazioni nel blocco.
Codice a due caratteri | Descrizione |
---|---|
db | Fotogramma video non compresso |
dc | Fotogramma video compresso |
pc | Modifica tavolozza |
Wb | Dati audio |
Ad esempio, se stream 0 contiene audio, i blocchi di dati per tale flusso avranno il fourcc '00wb'. Se stream 1 contiene video, i blocchi di dati per tale flusso avrebbero fourcc '01db' o '01dc'. I blocchi di dati video possono anche definire nuove voci di tavolozza per aggiornare la tavolozza durante una sequenza AVI. Ogni blocco di modifica della tavolozza ('xxpc') contiene una struttura AVIPALCHANGE . Se un flusso contiene modifiche al riquadro, impostare il flag AVISF_VIDEO_PALCHANGES nel membro dwFlags della struttura AVISTREAMHEADER per tale flusso.
I flussi di testo possono usare codici arbitrari a due caratteri.
Voci di indice AVI
-
Indice AVI 1.0
-
Un blocco di indice facoltativo ('idx1') può seguire l'elenco 'movi'. L'indice contiene un elenco dei blocchi di dati e la relativa posizione nel file. È costituito da una struttura AVIOLDINDEX con voci per ogni blocco di dati, inclusi i blocchi "rec". Se il file contiene un indice, impostare il flag AVIF_HASINDEX nel membro dwFlags della struttura AVIMAINHEADER .
-
Indice AVI 2.0
-
Un indice AVI 2.0 può essere visualizzato come singolo blocco. In alternativa, i segmenti di indice possono essere interleaved all'interno del blocco 'movi'. Se i segmenti di indice vengono inseriti nel blocco "movi", un indice con privilegi avanzati contiene un indice dei segmenti di indice. La struttura AVIMETAINDEX è la struttura di base per i segmenti di indice e l'indice con privilegi avanzati. Per altre informazioni, vedere il sottocomitato OpenDML AVI File Format Extensions pubblicato dal sottocomitato OpenDML AVI M-JPEG File Format. Questa risorsa potrebbe non essere disponibile in alcune lingue e paesi.
Altri blocchi di dati
I dati possono essere allineati in un file AVI inserendo blocchi "JUNK" in base alle esigenze. Le applicazioni devono ignorare il contenuto di un blocco "JUNK".
Argomenti correlati