avi檔案格式詳解

來源:互聯網
上載者:User

AVI是音訊視訊交錯格式(Audio Video Interleaved)的英文縮寫,它是Microsoft公司開發的一種符合RIFF檔案規格的數字音頻與視頻檔案格式,原先用於Microsoft Video for Windows (簡稱VFW)環境,現在已被Windows 95/98、OS/2等多數作業系統直接支援。AVI格式允許視頻和音頻交錯在一起同步播放,支援256色和RLE壓縮,但AVI檔案並未限定壓縮標準,因此,AVI檔案格式只是作為控制介面上的標準,不具有相容性,用不同壓縮演算法產生的AVI檔案,必須使用相應的解壓縮演算法才能播放出來。常用的AVI播放驅動程式,主要是Microsoft Video for Windows或Windows 95/98中的Video 1,以及Intel公司的Indeo Video。

  在介紹AVI檔案前,我們要先來看看RIFF檔案結構。AVI檔案採用的是RIFF檔案結構方式,RIFF(Resource Interchange File Format,資源互換檔案格式)是微軟公司定義的一種用於管理windows環境中多媒體資料的檔案格式,波形音頻wave,MIDI和數位視訊AVI都採用這種格式儲存。構造RIFF檔案的基本單元叫做資料區塊(Chunk),每個資料區塊包含3個部分,

  1、4位元組的資料區塊標記(或者叫做資料區塊的ID)

  2、資料區塊的大小

  3、資料

  整個RIFF檔案可以看成一個資料區塊,其資料區塊ID為RIFF,稱為RIFF塊。一個RIFF檔案中只允許存在一個RIFF塊。RIFF塊中包含一系列的子塊,其中有一種字塊的ID為"LIST",稱為LIST,LIST塊中可以再包含一系列的子塊,但除了LIST塊外的其他所有的子塊都不能再包含子塊。

  RIFF和LIST塊分別比普通的資料區塊多一個被稱為形式類型(Form Type)和清單類型(List Type)的資料域,其組成如下:

  1、4位元組的資料區塊標記(Chunk ID)

  2、資料區塊的大小

  3、4位元組的形式類型或者清單類型

  4、資料

  下面我們看看AVI檔案的結構。AVI檔案是目前使用的最複雜的RIFF檔案,它能同時儲存同步表現的音頻視頻資料。AVI的RIFF塊的形式類型是AVI,它包含3個子塊,如下所述:

  1、資訊塊,一個ID為"hdrl"的LIST塊,定義AVI檔案的資料格式。

  2、資料區塊,一個ID為 "movi"的LIST塊,包含AVI的音視頻序列資料。

  3、索引塊,ID為 "idxl"的子塊,定義 "movi"LIST塊的索引資料,是可選塊。

  AVI檔案的結構如所示,下面將具體介紹AVI檔案的各子塊構造。

  1、資訊塊,資訊塊包含兩個子塊,即一個ID為 avih 的子塊和一個ID 為 strl 的LIST塊。

  "avih"子塊的內容可由如下的結構定義:

typedef struct
{
 DWORD dwMicroSecPerFrame ; //顯示每楨所需的時間ns,定義avi的顯示速率
 DWORD dwMaxBytesPerSec; // 最大的資料轉送率
 DWORD dwPaddingGranularity; //記錄塊的長度需為此值的倍數,通常是2048
 DWORD dwFlages; //AVI檔案的特殊屬性,如是否包含索引塊,音視頻資料是否交叉儲存
 DWORD dwTotalFrame; //檔案中的總楨數
 DWORD dwInitialFrames; //說明在開始播放前需要多少楨
 DWORD dwStreams; //檔案中包含的資料流種類
 DWORD dwSuggestedBufferSize; //建議使用的緩衝區的大小,
 //通常為儲存一楨映像以及同步聲音所需要的資料之和
 DWORD dwWidth; //映像寬
 DWORD dwHeight; //映像高
 DWORD dwReserved[4]; //保留值
}MainAVIHeader;

  "strl" LIST塊用於記錄AVI資料流,每一種資料流都在該LIST塊中佔有3個子塊,他們的ID分別是"strh","strf", "strd";
"strh"子塊由如下結構定義。

typedef struct
{
 FOURCC fccType; //4位元組,表示資料流的種類 vids 表示視頻資料流
 //auds 音頻資料流
 FOURCC fccHandler;//4位元組 ,表示資料流解壓縮的驅動程式代號
 DWORD dwFlags; //資料流屬性
 WORD wPriority; //此資料流的播放優先順序
 WORD wLanguage; //音訊語言代號
 DWORD dwInitalFrames;//說明在開始播放前需要多少楨
 DWORD dwScale; //資料量,視頻每楨的大小或者音訊採樣大小
 DWORD dwRate; //dwScale /dwRate = 每秒的採樣數
 DWORD dwStart; //資料流開始播放的位置,以dwScale為單位
 DWORD dwLength; //資料流的資料量,以dwScale為單位
 DWORD dwSuggestedBufferSize; //建議緩衝區的大小
 DWORD dwQuality; //解壓縮品質參數,值越大,品質越好
 DWORD dwSampleSize; //音訊採樣大小
 RECT rcFrame; //視頻映像所佔的矩形
}AVIStreamHeader;

  "strf"子塊緊跟在"strh"子塊之後,其結構視"strh"子塊的類型而定,如下所述;如果 strh子塊是視頻資料流,則 strf子塊的內容是一個與windows裝置無關位元影像的BIMAPINFO結構,如下:

typedef struct tagBITMAPINFO
{
 BITMAPINFOHEADER bmiHeader;
 RGBQUAD bmiColors[1]; //顏色表
}BITMAPINFO;

typedef struct tagBITMAPINFOHEADER
{
 DWORD biSize;
 LONG biWidth;
 LONG biHeight;
 WORD biPlanes;
 WORD biBitCount;
 DWORD biCompression;
 DWORD biSizeImage;
 LONG biXPelsPerMeter;
 LONG biYPelsPerMeter;
 DWORD biClrUsed;
 DWORD biClrImportant;
}BITMAPINFOHEADER;

  如果 strh子塊是音頻資料流,則strf子塊的內容是一個WAVEFORMAT結構,如下:

typedef struct
{
 WORD wFormatTag;
 WORD nChannels; //聲道數
 DWORD nSamplesPerSec; //採樣率
 DWORD nAvgBytesPerSec; //WAVE聲音中每秒的資料量
 WORD nBlockAlign; //資料區塊的對齊標誌
 WORD biSize; //此結構的大小
}WAVEFORMAT

  "strd"子塊緊跟在strf子塊後,儲存供壓縮驅動程式使用的參數,不一定存在,也沒有固定的結構。

  "strl" LIST塊定義的AVI資料流依次將 "hdrl " LIST 塊中的資料流頭結構與"movi" LIST塊中的資料聯絡在一起,第一個資料流頭結構用於資料流0,第二個用於資料流1,依次類推。

  資料區塊中儲存視頻和音頻資料流,資料可直接存於 "movi" LIST塊中。資料區塊中音視頻資料按不同的字塊存放,其結構如下所述,

  音頻字塊
    "##wb"
    Wave 資料流
  視頻子塊中儲存DIB資料,又分為壓縮或者未壓縮DIB,
    "##db"
    RGB資料流
    "##dc"
  壓縮的映像資料流

  看到了吧,avi檔案的映像資料可以是壓縮的,和非壓縮格式的。對於壓縮格式來說,也可採用不同的編碼,也許你曾經遇到有些avi沒法識別,就是因為編碼方式不一樣,如果沒有相應的解碼,你就沒法識別視頻資料。AVI的編碼方式有很多種,比較常見的有 mpeg2,mpeg4,divx等。

索引塊,索引快包含資料區塊在檔案中的位置索引,能提高avi檔案的讀寫速度,其中存放著一組AVIINDEXENTRY結構資料。如下,這個塊並不是必需的,也許不存在。

typedef struct
{
 DWORD ckid; //記錄資料區塊中子塊的標記
 DWORD dwFlags; //表示chid所指子塊的屬性
 DWORD dwChunkOffset; //子塊的相對位置
 DWORD dwChunkLength; //子塊長度
};

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.