技術 > avi
目錄
《avi》
詩人: 歌麯作者 Ge Quzuozhe

avi簡介
  avi英文全稱為audio video interleaved,即音頻視頻交錯格式。是將語音和影像同步組合在一起的文件格式。它對視頻文件采用了一種有損壓縮方式,但壓縮比較高,因此儘管面面質量不是太好,但其應用範圍仍然非常廣泛。avi支持256色和rle壓縮。avi信息主要應用在多媒體光盤上,用來保存電視、電影等各種影像信息。
  它於1992年被microsoft公司推出,隨windows3.1一起被人們所認識和熟知。所謂“音頻視頻交錯”,就是可以將視頻和音頻交織在一起進行同步播放。這種視頻格式的優點是圖像質量好,可以跨多個平臺使用,其缺點是體積過於龐大,而且更加糟糕的是壓縮標準不統一,最普遍的現象就是高版本windows媒體播放器播放不了采用早期編碼編輯的avi格式視頻,而低版本windows媒體播放器又播放不了采用最新編碼編輯的avi格式視頻,所以我們在進行一些avi格式的視頻播放時常會出現由於視頻編碼問題而造成的視頻不能播放或即使能夠播放,但存在不能調節播放進度和播放時衹有聲音沒有圖像等一些莫名其妙的問題,如果用戶在進行avi格式的視頻播放時遇到了這些問題,可以通過下載相應的解碼器來解决。是目前視頻文件的主流。 這種格式的文件隨處可見,比如一些遊戲、教育軟件的片頭,多媒體光盤中,都會有不少的avi
  現在,在windows 95或98裏都能直接播放avi,而且它自己的格式也有好幾種,最常見的有 intel indeo(r)video r3.2、microsoft video 等。
含三部分
  文件頭、數據塊和索引塊。
  其中數據塊包含實際數據流,即圖像和聲音序列數據。這是文件的主體,也是决定文件容量的主要部分。視頻文件的大小等於該文件的數據率乘以該視頻播放的時間長度,索引塊包括數據塊列表和它們在文件中的位置,以提供文件內數據隨機存取能力。文件頭包括文件的通用信息,定義數據格式,所用的壓縮算法等參數。
   navi格式
  navi是newavi的縮寫,是一個名為shadowrealm的地下組織發展起來的一種新視頻格式(與我們上面所說的avi 格式沒有太大聯繫)。它是由microsoft asf壓縮算法的修改而來的,但是又與下面介紹的網絡影像視頻中的asf視頻格式有所區別,它以犧牲原有asf視頻文件視頻“流”特性為代價而通過增加幀率來大幅提高asf視頻文件的清晰度。
  dv-avi格式
  dv的英文全稱是digital video format,是由索尼、鬆下、jvc等多傢廠商聯合提出的一種傢用數字視頻格式。目前非常流行的數碼攝像機就是使用這種格式記錄視頻數據的。它可以通過電腦的ieee 1394端口傳輸視頻數據到電腦,也可以將電腦中編輯好的的視頻數據回錄到數碼攝像機中。這種視頻格式的文件擴展名一般是.avi,所以也叫dv-avi 格式。
  目前(07年10月)avi圖象反轉的原因很可能是暴風影音和windows media player衝突,下載一個完整的divx解碼器可以解决。
  1992年初microsoft公司推出了avi技術及其應用軟件vfw(video for windows)。在avi文件中,運動圖像和伴音數據是以交織的方式存儲,並獨立於硬件設備。這種按交替方式組織音頻和視像數據的方式可使得讀取視頻數據流時能更有效地從存儲媒介得到連續的信息。構成一個avi文件的主要參數包括視像參數、伴音參數和壓縮參數等:
  avi沒有mpeg這麽復雜,從win3.1時代,它就已經面世了。它最直接的優點就是兼容好、調用方便而且圖象質量好,因此也常常與dvd相並稱。但它的缺點也是十分明顯的:體積大。也是因為這一點,我們纔看到了mpeg-1和mpeg-4的誕生。2小時影像的avi文件的體積與mpeg-2相差無計,不過這衹是針對標準分辨率而言的:根據不同的應用要求,avi的分辨率可以隨意調。窗口越大,文件的數據量也就越大。降低分辨率可以大幅減低它的體積,但圖象質量就必然受損。與mpeg-2格式文件體積差不多的情況下,avi格式的視頻質量相對而言要差不少,但製作起來對電腦的配置要求不高,經常有人先錄製好了avi格式的視頻,再轉換為其他格式。
視像參數
  1、視窗尺寸(video size):根據不同的應用要求,avi的視窗大小或分辨率可按4:3的比例或隨意調整:大到全屏640×480,小到160×120甚至更低。窗口越大,視頻文件的數據量越大。
  2、幀率(frames per second):幀率也可以調整,而且與數據量成正比。不同的幀率會産生不同的畫面連續效果。
伴音參數
  在avi文件中,視像和伴音是分別存儲的,因此可以把一段視頻中的視像與另一段視頻中的伴音組合在一起。avi 文件與wav文件密切相關,因為wav文件是avi文件中伴音信號的來源。伴音的基本參數也即wav文件格式的參數,除此以外,avi文件還包括與音頻有關的其他參數:
   1、視像與伴音的交織參數(interlace audio every x frames)avi格式中每x幀交織存儲的音頻信號,也即伴音和視像交替的頻率x是可調參數,x的最小值是一幀,即每個視頻幀與音頻數據交織組織,這是cd-rom上使用的默認值。交織參數越小,回放avi文件時讀到內存中的數據流越少,回放越容易連續。因此,如果avi文件的存儲平臺的數據傳輸率較大,則交錯參數可設置得高一些。當avi文件存儲在硬盤上時,也即從硬盤上讀avi文件進行播放時,可以使用大一些的交織頻率,如幾幀,甚至1秒。
   2、同步控製(synchronization)
  在avi文件中,視像和伴音是同步得很好的。但在mpc中回放avi文件時則有可能出現視像和伴音不同步的現象。
壓縮參數
  在採集原始模擬視頻時可以用不壓縮的方式,這樣可以獲得最優秀的圖像質量。編輯後應根據應用環境環擇合適的壓縮參數。
數字視頻
  avi及其播放器vfw已成為了pc機上最常用的視頻數據格式,是由於其具有如下的一些顯著特點:
  一、提供無硬件視頻回放功能
  avi格式和vfw軟件雖然是為當前的mpc設計的,但它也可以不斷提高以適應mpc的發展。根據avi格式的參數,其視窗的大小和幀率可以根據播放環境的硬件能力和處理速度進行調整。在低檔mpc機上或在網絡上播放時,vfw的視窗可以很小,色彩數和幀率可以很低;而在pentium級係統上,對於64k色、320×240的壓縮視頻數據可實現每秒25幀的回放速率。這樣,vfw就可以適用於不同的硬件平臺,使用戶可以在普通的mpc上進行數字視頻信息的編輯和重放,而不需要昂貴的專門硬件設備。
  二、實現同步控製和實時播放
  通過同步控製參數,avi可以通過自調整來適應重放環境,如果mpc的處理能力不夠高,而avi文件的數據率又較大,在windows環境下播放該avi文件時,播放器可以通過丟掉某些幀,調整avi的實際播放數據率來達到視頻、音頻同步的效果。
  三、可以高效地播放存儲在硬盤和光盤上的avi文件
  由於avi數據的交叉存儲,vfw播放avi數據時衹需占用有限的內存空間,因為播放程序可以一邊讀取硬盤或光盤上的視頻數據一邊播放,而無需預先把容量很大的視頻數據加載到內存中。在播放avi視頻數據時,衹需在指定的時間內訪問少量的視頻圖像和部分音頻數據。這種方式不僅可以提高係統的工作效率,同時也可以實現迅速地加載和快速地啓動播放程序,減少播放avi視頻數據時用戶的等待時間。
  四、提供了開放的avi數字視頻文件結構
  avi文件結構不僅解决了音頻和視頻的同步問題,而且具有通用和開放的特點。它可以在任何windows環境下工作,而且還具有擴展環境的功能。用戶可以開發自己的avi視頻文件,在windows環境下可隨時調用。
   五、avi文件可以再編輯
  avi一般采用幀內有損壓縮,可以用一般的視頻編輯軟件如adobe premiere或mediastudio進行再編輯和處理。
avi轉換精靈
  軟件大小:12.73 mb
  軟件語言:簡體中文
  軟件類別:國産軟件 / 免費軟件 / 視頻轉換
  運行環境:win2003,winxp,win2000,nt,winme
  軟件簡介:
  avi轉換精靈是國內最優秀實用的avi視頻轉換工具,它支持把avi、mpg、mpeg、rm、rmvb、wmv、dat轉換為avi格式。采用aviconverter v3.0為核心,廣泛適用於支持xvid編碼avi的各類mp3 mp4和手機,它具有轉換速度極快,改進音視頻同步性能,提供了批量轉換功能和更高幀率的支持。
  avi是目前便攜式媒體播放器中最為流行的視頻格式,也是網絡上流傳較多的格式之一。采用xvid/divx格式編碼的視頻文件能擁有較高的視頻質量,並且文件較小。在觀看質量上,采用xvid/divx格式編碼的視頻文件效果並不亞於采用wmv或rmvb格式編碼的視頻文件效果,而壓縮/轉換速度卻比wmv和rmvb快。
  avi轉換精靈 v1.5 特點:
  1.轉換速度快,且最大程度保留了原始視頻的質量。
  2.支持160x128(1.8寸),220x176(2.0-2.2寸),320x240(2.4寸)三種方式轉換;
  3.提供了批量轉換功能和更高幀率的支持;
  4.采用穩定版的mencoder,確保可以在機器中成功播放;
  5.保留自帶的ffdshow,精簡了軟件體積。
  說白了就是音影結合,現在大都不用了
AVI簡介
  avi英文全稱為Audio Video Interleaved,即音頻視頻交錯格式。是將語音和影像同步組合在一起的文件格式。它對視頻文件采用了一種有損壓縮方式,但壓縮比較高,因此儘管畫面質量不是太好,但其應用範圍仍然非常廣泛。avi支持256色和RLE壓縮。avi信息主要應用在多媒體光盤上,用來保存電視、電影等各種影像信息。
  它於1992年被Microsoft公司推出,隨Windows3.1一起被人們所認識和熟知。所謂“音頻視頻交錯”,就是可以將視頻和音頻交織在一起進行同步播放。這種視頻格式的優點是圖像質量好,可以跨多個平臺使用,其缺點是體積過於龐大,而且更加糟糕的是壓縮標準不統一,最普遍的現象就是高版本Windows媒體播放器播放不了采用早期編碼編輯的avi格式視頻,而低版本Windows媒體播放器又播放不了采用最新編碼編輯的avi格式視頻,所以我們在進行一些avi格式的視頻播放時常會出現由於視頻編碼問題而造成的視頻不能播放或即使能夠播放,但存在不能調節播放進度和播放時衹有聲音沒有圖像等一些莫名其妙的問題,如果用戶在進行avi格式的視頻播放時遇到了這些問題,可以通過下載相應的解碼器來解决。是目前視頻文件的主流。 這種格式的文件隨處可見,比如一些遊戲、教育軟件的片頭,多媒體光盤中,都會有不少的avi
  現在,在WINDOWS 95或98裏都能直接播放avi,而且它自己的格式也有好幾種,最常見的有 Intel Indeo(R)Video R3.2、Microsoft video 等。
  avi含三部分:文件頭、數據塊和索引塊。
  其中數據塊包含實際數據流,即圖像和聲音序列數據。這是文件的主體,也是决定文件容量的主要部分。視頻文件的大小等於該文件的數據率乘以該視頻播放的時間長度,索引塊包括數據塊列表和它們在文件中的位置,以提供文件內數據隨機存取能力。文件頭包括文件的通用信息,定義數據格式,所用的壓縮算法等參數。
  navi格式
  navi是newavi的縮寫,是一個名為ShadowRealm的地下組織發展起來的一種新視頻格式(與我們上面所說的avi 格式沒有太大聯繫)。它是由Microsoft ASF壓縮算法的修改而來的,但是又與下面介紹的網絡影像視頻中的ASF視頻格式有所區別,它以犧牲原有ASF視頻文件視頻“流”特性為代價而通過增加幀率來大幅提高ASF視頻文件的清晰度。
  DV-avi格式
  DV的英文全稱是Digital Video Format,是由索尼、鬆下、JVC等多傢廠商聯合提出的一種傢用數字視頻格式。目前非常流行的數碼攝像機就是使用這種格式記錄視頻數據的。它可以通過電腦的IEEE 1394端口傳輸視頻數據到電腦,也可以將電腦中編輯好的的視頻數據回錄到數碼攝像機中。這種視頻格式的文件擴展名一般是.avi,所以也叫DV-avi 格式。
  目前(07年10月)avi圖象反轉的原因很可能是暴風影音和windows media player衝突,下載一個完整的DIVX解碼器可以解决。
  1992年初Microsoft公司推出了avi技術及其應用軟件VFW(Video for Windows)。在avi文件中,運動圖像和伴音數據是以交織的方式存儲,並獨立於硬件設備。這種按交替方式組織音頻和視像數據的方式可使得讀取視頻數據流時能更有效地從存儲媒介得到連續的信息。構成一個avi文件的主要參數包括視像參數、伴音參數和壓縮參數等:
  avi沒有MPEG這麽復雜,從WIN3.1時代,它就已經面世了。它最直接的優點就是兼容好、調用方便而且圖象質量好,因此也常常與DVD相並稱。但它的缺點也是十分明顯的:體積大。也是因為這一點,我們纔看到了MPEG-1和MPEG-4的誕生。2小時影像的avi文件的體積與MPEG-2相差無計,不過這衹是針對標準分辨率而言的:根據不同的應用要求,avi的分辨率可以隨意調。窗口越大,文件的數據量也就越大。降低分辨率可以大幅減低它的體積,但圖象質量就必然受損。與MPEG-2格式文件體積差不多的情況下,avi格式的視頻質量相對而言要差不少,但製作起來對電腦的配置要求不高,經常有人先錄製好了avi格式的視頻,再轉換為其他格式。
參數
  視像參數
  1、視窗尺寸(Video size):根據不同的應用要求,avi的視窗大小或分辨率可按4:3的比例或隨意調整:大到全屏640×480,小到160×120甚至更低。窗口越大,視頻文件的數據量越大。
  2、幀率(Frames per second):幀率也可以調整,而且與數據量成正比。不同的幀率會産生不同的畫面連續效果。
  伴音參數
  在avi文件中,視像和伴音是分別存儲的,因此可以把一段視頻中的視像與另一段視頻中的伴音組合在一起。avi 文件與WAV文件密切相關,因為WAV文件是avi文件中伴音信號的來源。伴音的基本參數也即WAV文件格式的參數,除此以外,avi文件還包括與音頻有關的其他參數:
  1、視像與伴音的交織參數(Interlace Audio Every X Frames)avi格式中每X幀交織存儲的音頻信號,也即伴音和視像交替的頻率X是可調參數,X的最小值是一幀,即每個視頻幀與音頻數據交織組織,這是CD-ROM上使用的默認值。交織參數越小,回放avi文件時讀到內存中的數據流越少,回放越容易連續。因此,如果avi文件的存儲平臺的數據傳輸率較大,則交錯參數可設置得高一些。當avi文件存儲在硬盤上時,也即從硬盤上讀avi文件進行播放時,可以使用大一些的交織頻率,如幾幀,甚至1秒。
  2、同步控製(Synchronization)
  在avi文件中,視像和伴音是同步得很好的。但在MPC中回放avi文件時則有可能出現視像和伴音不同步的現象。
  壓縮參數
  在採集原始模擬視頻時可以用不壓縮的方式,這樣可以獲得最優秀的圖像質量。編輯後應根據應用環境環擇合適的壓縮參數。
AVI文件的展開結構
  avi(Audio Video Interleaved的縮寫)是一種RIFF(Resource Interchange File Format的縮寫)文件格式,多用於音視頻捕捉、編輯、回放等應用程序中。通常情況下,一個avi文件可以包含多個不同類型的媒體流(典型的情況下有一個音頻流和一個視頻流),不過含有單一音頻流或單一視頻流的avi文件也是合法的。avi可以算是Windows操作係統上最基本的、也是最常用的一種媒體文件格式。
  先來介紹RIFF文件格式。RIFF文件使用四字符碼FOURCC(four-character code)來表徵數據類型,比如‘RIFF’、‘avi ’、‘LIST’等。註意,Windows操作係統使用的字節順序是little-endian,因此一個四字符碼‘abcd’實際的DWORD值應為0x64636261。另外,四字符碼中像‘avi ’一樣含有空格也是合法的。
  最開始的4個字節是一個四字符碼‘RIFF’,表示這是一個RIFF文件;緊跟着後面用4個字節表示此RIFF文件的大小;然後又是一個四字符碼說明文件的具體類型(比如avi、WAVE等);最後就是實際的數據。註意文件大小值的計算方法為:實際數據長度 + 4(文件類型域的大小);也就是說,文件大小的值不包括‘RIFF’域和“文件大小”域本身的大小。
  RIFF文件的實際數據中,通常還使用了列表(List)和塊(Chunk)的形式來組織。列表可以嵌套子列表和塊。其中,列表的結構為:‘LIST’ listSize listType listData ——‘LIST’是一個四字符碼,表示這是一個列表;listSize占用4字節,記錄了整個列表的大小;listType也是一個四字符碼,表示本列表的具體類型;listData就是實際的列表數據。註意listSize值的計算方法為:實際的列表數據長度 + 4(listType域的大小);也就是說listSize值不包括‘LIST’域和listSize域本身的大小。再來看塊的結構:ckID ckSize ckData ——ckID是一個表示塊類型的四字符碼;ckSize占用4字節,記錄了整個塊的大小;ckData為實際的塊數據。註意ckSize值指的是實際的塊數據長度,而不包括ckID域和ckSize域本身的大小。(註意:在下面的內容中,將以LIST ( listType ( listData ) )的形式來表示一個列表,以ckID ( ckData )的形式來表示一個塊,如[ optional element ]中括號中的元素表示為可選項。)
  接下來介紹avi文件格式。avi文件類型用一個四字符碼‘avi ’來表示。整個avi文件的結構為:一個RIFF頭 + 兩個列表(一個用於描述媒體流格式、一個用於保存媒體流數據) + 一個可選的索引塊。avi文件的展開結構大致如下:
  RIFF (‘avi
  LIST (‘hdrl’
  ‘avih’(主avi信息頭數據)
  LIST (‘strl’
  ‘strh’ (流的頭信息數據)
  ‘strf’ (流的格式信息數據)
  [‘strd’ (可選的額外的頭信息數據) ]
  [‘strn’ (可選的流的名字) ]
  ...
  )
  ...
  )
  LIST (‘movi’
  { SubChunk | LIST (‘rec ’
  SubChunk1
  SubChunk2
  ...
  )
  ...
  }
  ...
  )
  [‘idx1’ (可選的avi索引塊數據) ]
  )
  首先,RIFF (‘avi ’…)表徵了avi文件類型。然後就是avi文件必需的第一個列表——‘hdrl’列表,用於描述avi文件中各個流的格式信息(avi文件中的每一路媒體數據都稱為一個流)。‘hdrl’列表嵌套了一係列塊和子列表——首先是一個‘avih’塊,用於記錄avi文件的全局信息,比如流的數量、視頻圖像的寬和高等,可以使用一個aviMAINHEADER數據結構來操作:
  typedef struct _avimainheader {
  FOURCC fcc; // 必須為‘avih’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  DWORD dwMicroSecPerFrame; // 視頻幀間隔時間(以毫秒為單位)
  DWORD dwMaxBytesPerSec; // 這個avi文件的最大數據率
  DWORD dwPaddingGranularity; // 數據填充的粒度
  DWORD dwFlags; // avi文件的全局標記,比如是否含有索引塊等
  DWORD dwTotalFrames; // 總幀數
  DWORD dwInitialFrames; // 為交互格式指定初始幀數(非交互格式應該指定為0)
  DWORD dwStreams; // 本文件包含的流的個數
  DWORD dwSuggestedBufferSize; // 建議讀取本文件的緩存大小(應能容納最大的塊)
  DWORD dwWidth; // 視頻圖像的寬(以像素為單位)
  DWORD dwHeight; // 視頻圖像的高(以像素為單位)
  DWORD dwReserved; // 保留
  } aviMAINHEADER;
  然後,就是一個或多個‘strl’子列表。(文件中有多少個流,這裏就對應有多少個‘strl’子列表。)每個‘strl’子列表至少包含一個‘strh’塊和一個‘strf’塊,而‘strd’塊(保存編解碼器需要的一些配置信息)和‘strn’塊(保存流的名字)是可選的。首先是‘strh’塊,用於說明這個流的頭信息,可以使用一個aviSTREAMHEADER數據結構來操作:
  typedef struct _avistreamheader {
  FOURCC fcc; // 必須為‘strh’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  FOURCC fccType; // 流的類型:‘auds’(音頻流)、‘vids’(視頻流)、
  //‘mids’(MIDI流)、‘txts’(文字流)
  FOURCC fccHandler; // 指定流的處理者,對於音視頻來說就是解碼器
  DWORD dwFlags; // 標記:是否允許這個流輸出?調色板是否變化?
  WORD wPriority; // 流的優先級(當有多個相同類型的流時優先級最高的為默認流)
  WORD wLanguage;
  DWORD dwInitialFrames; // 為交互格式指定初始幀數
  DWORD dwScale; // 這個流使用的時間尺度
  DWORD dwRate;
  DWORD dwStart; // 流的開始時間
  DWORD dwLength; // 流的長度(單位與dwScale和dwRate的定義有關)
  DWORD dwSuggestedBufferSize; // 讀取這個流數據建議使用的緩存大小
  DWORD dwQuality; // 流數據的質量指標(0 ~ 10,000)
  DWORD dwSampleSize; // Sample的大小
  struct {
  short int left;
  short int top;
  short int right;
  short int bottom;
  } rcFrame; // 指定這個流(視頻流或文字流)在視頻主窗口中的顯示位置
  // 視頻主窗口由aviMAINHEADER結構中的dwWidth和dwHeight决定
  } aviSTREAMHEADER;
  然後是‘strf’塊,用於說明流的具體格式。如果是視頻流,則使用一個BITMAPINFO數據結構來描述;如果是音頻流,則使用一個WAVEFORMATEX數據結構來描述。
  當avi文件中的所有流都使用一個‘strl’子列表說明了以後(註意:‘strl’子列表出現的順序與媒體流的編號是對應的,比如第一個‘strl’子列表說明的是第一個流(Stream 0),第二個‘strl’子列表說明的是第二個流(Stream 1),以此類推),‘hdrl’列表的任務也就完成了,隨後跟着的就是avi文件必需的第二個列表——‘movi’列表,用於保存真正的媒體流數據(視頻圖像幀數據或音頻采樣數據等)。那麽,怎麽來組織這些數據呢?可以將數據塊直接嵌在‘movi’列表裏面,也可以將幾個數據塊分組成一個‘rec ’列表後再編排進‘movi’列表。(註意:在讀取avi文件內容時,建議將一個‘rec ’列表中的所有數據塊一次性讀出。)但是,當avi文件中包含有多個流的時候,數據塊與數據塊之間如何來區別呢?於是數據塊使用了一個四字符碼來表徵它的類型,這個四字符碼由2個字節的類型碼和2個字節的流編號組成。標準的類型碼定義如下:‘db’(非壓縮視頻幀)、‘dc’(壓縮視頻幀)、‘pc’(改用新的調色板)、‘wb’(音縮視頻)。比如第一個流(Stream 0)是音頻,則表徵音頻數據塊的四字符碼為‘00wb’;第二個流(Stream 1)是視頻,則表徵視頻數據塊的四字符碼為‘00db’或‘00dc’。對於視頻數據來說,在avi數據序列中間還可以定義一個新的調色板,每個改變的調色板數據塊用‘xxpc’來表徵,新的調色板使用一個數據結構aviPALCHANGE來定義。(註意:如果一個流的調色辦中途可能改變,則應在這個流格式的描述中,也就是aviSTREAMHEADER結構的dwFlags中包含一個aviSF_VIDEO_PALCHANGES標記。)另外,文字流數據塊可以使用隨意的類型碼表徵。
  最後,緊跟在‘hdrl’列表和‘movi’列表之後的,就是avi文件可選的索引塊。這個索引塊為avi文件中每一個媒體數據塊進行索引,並且記錄它們在文件中的偏移(可能相對於‘movi’列表,也可能相對於avi文件開頭)。索引塊使用一個四字符碼‘idx1’來表徵,索引信息使用一個數據結構來aviOLDINDEX定義。
  typedef struct _avioldindex {
  FOURCC fcc; // 必須為‘idx1’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  struct _avioldindex_entry {
  DWORD dwChunkId; // 表徵本數據塊的四字符碼
  DWORD dwFlags; // 說明本數據塊是不是關鍵幀、是不是‘rec ’列表等信息
  DWORD dwOffset; // 本數據塊在文件中的偏移量
  DWORD dwSize; // 本數據塊的大小
  } aIndex[]; // 這是一個數組!為每個媒體數據塊都定義一個索引信息
  } aviOLDINDEX;
  註意:如果一個avi文件包含有索引塊,則應在主avi信息頭的描述中,也就是aviMAINHEADER結構的dwFlags中包含一個aviF_HASINDEX標記。
  還有一種特殊的數據塊,用一個四字符碼‘JUNK’來表徵,它用於內部數據的隊齊(填充),應用程序應該忽略這些數據塊的實際意義。
AVI文件的展開結構
  avi(Audio Video Interleaved的縮寫)是一種RIFF(Resource Interchange File Format的縮寫)文件格式,多用於音視頻捕捉、編輯、回放等應用程序中。通常情況下,一個avi文件可以包含多個不同類型的媒體流(典型的情況下有一個音頻流和一個視頻流),不過含有單一音頻流或單一視頻流的avi文件也是合法的。avi可以算是Windows操作係統上最基本的、也是最常用的一種媒體文件格式。
  先來介紹RIFF文件格式。RIFF文件使用四字符碼FOURCC(four-character code)來表徵數據類型,比如‘RIFF’、‘avi ’、‘LIST’等。註意,Windows操作係統使用的字節順序是little-endian,因此一個四字符碼‘abcd’實際的DWORD值應為0x64636261。另外,四字符碼中像‘avi ’一樣含有空格也是合法的。
  最開始的4個字節是一個四字符碼‘RIFF’,表示這是一個RIFF文件;緊跟着後面用4個字節表示此RIFF文件的大小;然後又是一個四字符碼說明文件的具體類型(比如avi、WAVE等);最後就是實際的數據。註意文件大小值的計算方法為:實際數據長度 + 4(文件類型域的大小);也就是說,文件大小的值不包括‘RIFF’域和“文件大小”域本身的大小。
  RIFF文件的實際數據中,通常還使用了列表(List)和塊(Chunk)的形式來組織。列表可以嵌套子列表和塊。其中,列表的結構為:‘LIST’ listSize listType listData ——‘LIST’是一個四字符碼,表示這是一個列表;listSize占用4字節,記錄了整個列表的大小;listType也是一個四字符碼,表示本列表的具體類型;listData就是實際的列表數據。註意listSize值的計算方法為:實際的列表數據長度 + 4(listType域的大小);也就是說listSize值不包括‘LIST’域和listSize域本身的大小。再來看塊的結構:ckID ckSize ckData ——ckID是一個表示塊類型的四字符碼;ckSize占用4字節,記錄了整個塊的大小;ckData為實際的塊數據。註意ckSize值指的是實際的塊數據長度,而不包括ckID域和ckSize域本身的大小。(註意:在下面的內容中,將以LIST ( listType ( listData ) )的形式來表示一個列表,以ckID ( ckData )的形式來表示一個塊,如[ optional element ]中括號中的元素表示為可選項。)
  接下來介紹avi文件格式。avi文件類型用一個四字符碼‘avi ’來表示。整個avi文件的結構為:一個RIFF頭 + 兩個列表(一個用於描述媒體流格式、一個用於保存媒體流數據) + 一個可選的索引塊。avi文件的展開結構大致如下:
  /*
  * heres the general layout of an avi riff file (new format)
  *
  * RIFF (3F??????) avi <- not more than 1 GB in size
  * LIST (size) hdrl
  * avih (0038)
  * LIST (size) strl
  * strh (0038)
  * strf (????)
  * indx (3ff8) <- size may vary, should be sector sized
  * LIST (size) strl
  * strh (0038)
  * strf (????)
  * indx (3ff8) <- size may vary, should be sector sized
  * LIST (size) odml
  * dmlh (????)
  * JUNK (size) <- fill to align to sector - 12
  * LIST (7f??????) movi <- aligned on sector - 12
  * 00dc (size) <- sector aligned
  * 01wb (size) <- sector aligned
  * ix00 (size) <- sector aligned
  * idx1 (00??????) <- sector aligned
  * RIFF (7F??????) aviX
  * JUNK (size) <- fill to align to sector -12
  * LIST (size) movi
  * 00dc (size) <- sector aligned
  * RIFF (7F??????) aviX <- not more than 2GB in size
  * JUNK (size) <- fill to align to sector - 12
  * LIST (size) movi
  * 00dc (size) <- sector aligned
  *
  *-===================================================================*/
  首先,RIFF (‘avi ’…)表徵了avi文件類型。然後就是avi文件必需的第一個列表——‘hdrl’列表,用於描述avi文件中各個流的格式信息(avi文件中的每一路媒體數據都稱為一個流)。‘hdrl’列表嵌套了一係列塊和子列表——首先是一個‘avih’塊,用於記錄avi文件的全局信息,比如流的數量、視頻圖像的寬和高等,可以使用一個aviMAINHEADER數據結構來操作:
  typedef struct _avimainheader {
  FOURCC fcc; // 必須為‘avih’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  DWORD dwMicroSecPerFrame; // 視頻幀間隔時間(以毫秒為單位)
  DWORD dwMaxBytesPerSec; // 這個avi文件的最大數據率
  DWORD dwPaddingGranularity; // 數據填充的粒度
  DWORD dwFlags; // avi文件的全局標記,比如是否含有索引塊等
  DWORD dwTotalFrames; // 總幀數
  DWORD dwInitialFrames; // 為交互格式指定初始幀數(非交互格式應該指定為0)
  DWORD dwStreams; // 本文件包含的流的個數
  DWORD dwSuggestedBufferSize; // 建議讀取本文件的緩存大小(應能容納最大的塊)
  DWORD dwWidth; // 視頻圖像的寬(以像素為單位)
  DWORD dwHeight; // 視頻圖像的高(以像素為單位)
  DWORD dwReserved; // 保留
  } aviMAINHEADER;
  然後,就是一個或多個‘strl’子列表。(文件中有多少個流,這裏就對應有多少個‘strl’子列表。)每個‘strl’子列表至少包含一個‘strh’塊和一個‘strf’塊,而‘strd’塊(保存編解碼器需要的一些配置信息)和‘strn’塊(保存流的名字)是可選的。首先是‘strh’塊,用於說明這個流的頭信息,可以使用一個aviSTREAMHEADER數據結構來操作:
  typedef struct _avistreamheader {
  FOURCC fcc; // 必須為‘strh’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  FOURCC fccType; // 流的類型:‘auds’(音頻流)、‘vids’(視頻流)、
  //‘mids’(MIDI流)、‘txts’(文字流)
  FOURCC fccHandler; // 指定流的處理者,對於音視頻來說就是解碼器
  DWORD dwFlags; // 標記:是否允許這個流輸出?調色板是否變化?
  WORD wPriority; // 流的優先級(當有多個相同類型的流時優先級最高的為默認流)
  WORD wLanguage;
  DWORD dwInitialFrames; // 為交互格式指定初始幀數
  DWORD dwScale; // 這個流使用的時間尺度
  DWORD dwRate;
  DWORD dwStart; // 流的開始時間
  DWORD dwLength; // 流的長度(單位與dwScale和dwRate的定義有關)
  DWORD dwSuggestedBufferSize; // 讀取這個流數據建議使用的緩存大小
  DWORD dwQuality; // 流數據的質量指標(0 ~ 10,000)
  DWORD dwSampleSize; // Sample的大小
  struct {
  short int left;
  short int top;
  short int right;
  short int bottom;
  } rcFrame; // 指定這個流(視頻流或文字流)在視頻主窗口中的顯示位置
  // 視頻主窗口由aviMAINHEADER結構中的dwWidth和dwHeight决定
  } aviSTREAMHEADER;
  然後是‘strf’塊,用於說明流的具體格式。如果是視頻流,則使用一個BITMAPINFO數據結構來描述;如果是音頻流,則使用一個WAVEFORMATEX數據結構來描述。
  當avi文件中的所有流都使用一個‘strl’子列表說明了以後(註意:‘strl’子列表出現的順序與媒體流的編號是對應的,比如第一個‘strl’子列表說明的是第一個流(Stream 0),第二個‘strl’子列表說明的是第二個流(Stream 1),以此類推),‘hdrl’列表的任務也就完成了,隨後跟着的就是avi文件必需的第二個列表——‘movi’列表,用於保存真正的媒體流數據(視頻圖像幀數據或音頻采樣數據等)。那麽,怎麽來組織這些數據呢?可以將數據塊直接嵌在‘movi’列表裏面,也可以將幾個數據塊分組成一個‘rec ’列表後再編排進‘movi’列表。(註意:在讀取avi文件內容時,建議將一個‘rec ’列表中的所有數據塊一次性讀出。)但是,當avi文件中包含有多個流的時候,數據塊與數據塊之間如何來區別呢?於是數據塊使用了一個四字符碼來表徵它的類型,這個四字符碼由2個字節的類型碼和2個字節的流編號組成。標準的類型碼定義如下:‘db’(非壓縮視頻幀)、‘dc’(壓縮視頻幀)、‘pc’(改用新的調色板)、‘wb’(音縮視頻)。比如第一個流(Stream 0)是音頻,則表徵音頻數據塊的四字符碼為‘00wb’;第二個流(Stream 1)是視頻,則表徵視頻數據塊的四字符碼為‘01db’或‘01dc’。對於視頻數據來說,在avi數據序列中間還可以定義一個新的調色板,每個改變的調色板數據塊用‘xxpc’來表徵,新的調色板使用一個數據結構aviPALCHANGE來定義。(註意:如果一個流的調色辦中途可能改變,則應在這個流格式的描述中,也就是aviSTREAMHEADER結構的dwFlags中包含一個aviSF_VIDEO_PALCHANGES標記。)另外,文字流數據塊可以使用隨意的類型碼表徵。
  最後,緊跟在‘hdrl’列表和‘movi’列表之後的,就是avi文件可選的索引塊。這個索引塊為avi文件中每一個媒體數據塊進行索引,並且記錄它們在文件中的偏移(可能相對於‘movi’列表,也可能相對於avi文件開頭)。索引塊使用一個四字符碼‘idx1’來表徵,索引信息使用一個數據結構來aviOLDINDEX定義。
  typedef struct _avioldindex {
  FOURCC fcc; // 必須為‘idx1’
  DWORD cb; // 本數據結構的大小,不包括最初的8個字節(fcc和cb兩個域)
  struct _avioldindex_entry {
  DWORD dwChunkId; // 表徵本數據塊的四字符碼
  DWORD dwFlags; // 說明本數據塊是不是關鍵幀、是不是‘rec ’列表等信息
  DWORD dwOffset; // 本數據塊在文件中的偏移量
  DWORD dwSize; // 本數據塊的大小
  } aIndex[]; // 這是一個數組!為每個媒體數據塊都定義一個索引信息
  } aviOLDINDEX;
  註意:如果一個avi文件包含有索引塊,則應在主avi信息頭的描述中,也就是aviMAINHEADER結構的dwFlags中包含一個aviF_HASINDEX標記。
  還有一種特殊的數據塊,用一個四字符碼‘JUNK’來表徵,它用於內部數據的隊齊(填充),應用程序應該忽略這些數據塊的實際意義。
AVI簡介
  它於1992年被Microsoft公司推出,隨Windows3.1一起被人們所認識和熟知。所謂“音頻視頻交錯”,就是可以將視頻和音頻交織在一起進行同步播放。這種視頻格式的優點是圖像質量好,可以跨多個平臺使用,其缺點是體積過於龐大,而且更加糟糕的是壓縮標準不統一,最普遍的現象就是高版本Windows媒體播放器播放不了采用早期編碼編輯的avi格式視頻,而低版本Windows媒體播放器又播放不了采用最新編碼編輯的avi格式視頻,所以我們在進行一些avi格式的視頻播放時常會出現由於視頻編碼問題而造成的視頻不能播放或即使能夠播放,但存在不能調節播放進度和播放時衹有聲音沒有圖像等一些莫名其妙的問題,如果用戶在進行avi格式的視頻播放時遇到了這些問題,可以通過下載相應的解碼器來解决。是目前視頻文件的主流。 這種格式的文件隨處可見,比如一些遊戲、教育軟件的片頭,多媒體光盤中,都會有不少的avi
  現在,在WINDOWS 95或98裏都能直接播放avi,而且它自己的格式也有好幾種,最常見的有 Intel Indeo(R)Video R3.2、Microsoft video 等。
  avi含三部分:文件頭、數據塊和索引塊。
  其中數據塊包含實際數據流,即圖像和聲音序列數據。這是文件的主體,也是决定文件容量的主要部分。視頻文件的大小等於該文件的數據率乘以該視頻播放的時間長度,索引塊包括數據塊列表和它們在文件中的位置,以提供文件內數據隨機存取能力。文件頭包括文件的通用信息,定義數據格式,所用的壓縮算法等參數。
  navi格式
  navi是newavi的縮寫,是一個名為ShadowRealm的地下組織發展起來的一種新視頻格式(與我們上面所說的avi 格式沒有太大聯繫)。它是由Microsoft ASF壓縮算法的修改而來的,但是又與下面介紹的網絡影像視頻中的ASF視頻格式有所區別,它以犧牲原有ASF視頻文件視頻“流”特性為代價而通過增加幀率來大幅提高ASF視頻文件的清晰度。
  DV-avi格式
  DV的英文全稱是Digital Video Format,是由索尼、鬆下、JVC等多傢廠商聯合提出的一種傢用數字視頻格式。目前非常流行的數碼攝像機就是使用這種格式記錄視頻數據的。它可以通過電腦的IEEE 1394端口傳輸視頻數據到電腦,也可以將電腦中編輯好的的視頻數據回錄到數碼攝像機中。這種視頻格式的文件擴展名一般是.avi,所以也叫DV-avi 格式。
  目前(07年10月)avi圖象反轉的原因很可能是暴風影音和windows media player衝突,下載一個完整的DIVX解碼器可以解决。
  1992年初Microsoft公司推出了avi技術及其應用軟件VFW(Video for Windows)。在avi文件中,運動圖像和伴音數據是以交織的方式存儲,並獨立於硬件設備。這種按交替方式組織音頻和視像數據的方式可使得讀取視頻數據流時能更有效地從存儲媒介得到連續的信息。構成一個avi文件的主要參數包括視像參數、伴音參數和壓縮參數等:
  avi沒有MPEG這麽復雜,從WIN3.1時代,它就已經面世了。它最直接的優點就是兼容好、調用方便而且圖象質量好,因此也常常與DVD相並稱。但它的缺點也是十分明顯的:體積大。也是因為這一點,我們纔看到了MPEG-1和MPEG-4的誕生。2小時影像的avi文件的體積與MPEG-2相差無計,不過這衹是針對標準分辨率而言的:根據不同的應用要求,avi的分辨率可以隨意調。窗口越大,文件的數據量也就越大。降低分辨率可以大幅減低它的體積,但圖象質量就必然受損。與MPEG-2格式文件體積差不多的情況下,avi格式的視頻質量相對而言要差不少,但製作起來對電腦的配置要求不高,經常有人先錄製好了avi格式的視頻,再轉換為其他格式。
相關詞
3gp電腦影音視頻編碼轉換器視頻轉換視頻處理智能手機
媒體播放手機軟件mp4視頻格式多媒體應用視頻格式轉換器