什么是AVI.如何才能看AVI電影呢

更新時(shí)間:2016-03-30本文內(nèi)容轉(zhuǎn)載自互聯(lián)網(wǎng)
AVI英語全稱為Audio Video Interleaved,即音頻視頻交錯(cuò)格式。是將語音和影像同步組合在一起的文件格式。它對(duì)視頻文件采用了一種有損壓縮方式,但壓縮比較高,因此盡管面面質(zhì)量不是太好,但其應(yīng)用范圍仍然非常廣泛。AVI支持256色和RLE壓縮。AVI信息主要應(yīng)用在多媒體光碟上,用來保存電視、電影等各種影像信息。它于1992年被微軟公司推出,隨Windows3.1一起被人們所認(rèn)識(shí)和熟知。所謂“音頻視頻交錯(cuò)”,就是可以將視頻和音頻交織在一起進(jìn)行同步播放。這種視頻格式的優(yōu)點(diǎn)是圖像質(zhì)量好,可以跨多個(gè)平臺(tái)使用,其缺點(diǎn)是體積過于龐大,而且更加糟糕的是壓縮標(biāo)準(zhǔn)不統(tǒng)一,最普遍的現(xiàn)象就是高版本W(wǎng)indows媒體播放器播放不了采用早期編碼編輯的AVI格式視頻,而低版本W(wǎng)indows媒體播放器又播放不了采用最新編碼編輯的AVI格式視頻,所以我們?cè)谶M(jìn)行一些AVI格式的視頻播放時(shí)常會(huì)出現(xiàn)由于視頻編碼問題而造成的視頻不能播放或即使能夠播放,但存在不能調(diào)節(jié)播放進(jìn)度和播放時(shí)只有聲音沒有圖像等一些莫名其妙的問題,如果用戶在進(jìn)行AVI格式的視頻播放時(shí)遇到了這些問題,可以通過下載相應(yīng)的解碼器來解決。是目前視頻文件的主流。 這種格式的文件隨處可見,比如一些游戲、教育軟件的片頭,多媒體光碟中,都會(huì)有不少的AVI ?,F(xiàn)在,在WINDOWS 95或98里都能直接播放AVI,而且它自己的格式也有好幾種,最常見的有 英特爾 Indeo(R)Video R3.2、微軟 video 等。avi含三部分:文件頭、數(shù)據(jù)塊和索引塊。 其中數(shù)據(jù)塊包含實(shí)際數(shù)據(jù)流,即圖像和聲音序列數(shù)據(jù)。這是文件的主體,也是決定文件容量的主要部分。視頻文件的大小等于該文件的數(shù)據(jù)率乘以該視頻播放的時(shí)間長度,索引塊包含數(shù)據(jù)塊列表和它們?cè)谖募械奈恢?,以提供文件?nèi)數(shù)據(jù)隨機(jī)存取能力。文件頭包含文件的通用信息,定義數(shù)據(jù)格式,所用的壓縮算法等參數(shù)。 nAVI格式 nAVI是newAVI的縮寫,是一個(gè)名為ShadowRealm的地下組織發(fā)展起來的一種新視頻格式與我們上面所說的AVI 格式?jīng)]有太大聯(lián)系。它是由微軟 ASF壓縮算法的更改而來的,但是又與下面介紹的網(wǎng)絡(luò)影像視頻中的ASF視頻格式有所差別,它以犧牲原有ASF視頻文件視頻“流”特性為代價(jià)而通過增加幀率來大幅提高ASF視頻文件的清晰度。 DV-AVI格式 DV的英語全稱是Digital Video Format,是由索尼、松下、JVC等多家廠商聯(lián)合提出的一種家用數(shù)字視頻格式。目前非常流行的數(shù)碼攝像機(jī)就是使用這種格式記錄視頻數(shù)據(jù)的。它可以通過電腦的IEEE 1394端口傳輸視頻數(shù)據(jù)到電腦,也可以將電腦中編輯好的的視頻數(shù)據(jù)回錄到數(shù)碼攝像機(jī)中。這種視頻格式的文件擴(kuò)展名一般是.avi,所以也叫DV-AVI 格式。 目前(07年10月)AVI圖象反轉(zhuǎn)的原因很可能是暴風(fēng)影音和windows media player沖突,下載一個(gè)完整的DIVX解碼器可以解決。 1992年初微軟公司推出了AVI技術(shù)及其應(yīng)用軟件VFW(Video for Windows)。在AVI文件中,運(yùn)動(dòng)圖像和伴音數(shù)據(jù)是以交織的方式儲(chǔ)存,并獨(dú)立于硬件設(shè)備。這種按交替方式組織音頻和視像數(shù)據(jù)的方式可使得讀取視頻數(shù)據(jù)流時(shí)能更有效地從儲(chǔ)存媒介獲得連續(xù)的信息。構(gòu)成一個(gè)AVI文件的主要參數(shù)包含視像參數(shù)、伴音參數(shù)和壓縮參數(shù)等: AVI沒有MPEG這么復(fù)雜,從WIN3.1時(shí)代,它就已經(jīng)面世了。它最直接的優(yōu)點(diǎn)就是兼容好、調(diào)用方便而且圖象質(zhì)量好,因此也經(jīng)常與DVD相并稱。但它的缺點(diǎn)也是十分明顯的:體積大。也是因?yàn)檫@一點(diǎn),我們才看到了MPEG-1和MPEG-4的誕生。2小時(shí)影像的AVI文件的體積與MPEG-2相差無計(jì),不過這只是針對(duì)標(biāo)準(zhǔn)分辨率而言的:根據(jù)不同的應(yīng)用要求,AVI的分辨率可以隨意調(diào)。窗口越大,文件的數(shù)據(jù)量也就越大。降低分辨率可以大幅減低它的體積,但圖象質(zhì)量就必然受損。與MPEG-2格式文件體積差不多的情況下,AVI格式的視頻質(zhì)量相對(duì)而言要差不少,但制作起來對(duì)電腦的配置要求不高,經(jīng)常有人先錄制好了AVI格式的視頻,再轉(zhuǎn)換為其它格式。參數(shù) 視像參數(shù) 1、視窗尺寸(Video size):根據(jù)不同的應(yīng)用要求,AVI的視窗大小或分辨率可按4:3的比例或隨意調(diào)整:大到全屏640×480,小到160×120甚至更低。窗口越大,視頻文件的數(shù)據(jù)量越大。 2、幀率(Frames per second):幀率也可以調(diào)整,而且與數(shù)據(jù)量成正比。不同的幀率會(huì)產(chǎn)生不同的畫面連續(xù)效果。 伴音參數(shù) 在AVI文件中,視像和伴音是分別儲(chǔ)存的,因此可以把一段視頻中的視像與另一段視頻中的伴音組合在一起。AVI 文件與WAV文件密切相關(guān),因?yàn)閃AV文件是AVI文件中伴音信號(hào)的來源。伴音的基本參數(shù)也即WAV文件格式的參數(shù),除此以外,AVI文件還包含與音頻有關(guān)的其它參數(shù): 1、視像與伴音的交織參數(shù)(Interlace Audio Every X Frames)AVI格式中每X幀交織儲(chǔ)存的音頻信號(hào),也即伴音和視像交替的頻率X是可調(diào)參數(shù),X的最小值是一幀,即每個(gè)視頻幀與音頻數(shù)據(jù)交織組織,這是CD-ROM上使用的默認(rèn)值。交織參數(shù)越小,回放AVI文件時(shí)讀到內(nèi)存中的數(shù)據(jù)流越少,回放越容易連續(xù)。因此,如果AVI文件的儲(chǔ)存平臺(tái)的數(shù)據(jù)傳輸率較大,則交錯(cuò)參數(shù)可設(shè)置得高一些。當(dāng)AVI文件儲(chǔ)存在硬盤上時(shí),也即從硬盤上讀AVI文件進(jìn)行播放時(shí),可以使用大一些的交織頻率,如幾幀,甚至1秒。 2、同步控制(Synchronization) 在AVI文件中,視像和伴音是同步得很好的。但在MPC中回放AVI文件時(shí)則有可能出現(xiàn)視像和伴音不同步的現(xiàn)象。 壓縮參數(shù) 在采集原始模擬視頻時(shí)可以用不壓縮的方式,這樣可以獲得最優(yōu)秀的圖像質(zhì)量。編輯后應(yīng)根據(jù)應(yīng)用環(huán)境環(huán)擇合適的壓縮參數(shù)。 數(shù)字視頻 AVI及其播放器VFW已成為了PC機(jī)上最常用的視頻數(shù)據(jù)格式,是由于其具有如下的一些顯著特點(diǎn): 一、提供無硬件視頻回放功能 AVI格式和VFW軟件雖然是為當(dāng)前的MPC設(shè)計(jì)的,但它也可以不斷提高以適應(yīng)MPC的發(fā)展。根據(jù)AVI格式的參數(shù),其視窗的大小和幀率可以根據(jù)播放環(huán)境的硬件能力和處理速度進(jìn)行調(diào)整。在低檔MPC機(jī)上或在網(wǎng)絡(luò)上播放時(shí),VFW的視窗可以很小,色彩數(shù)和幀率可以很低;而在Pentium級(jí)系統(tǒng)上,對(duì)于64K色、320×240的壓縮視頻數(shù)據(jù)可實(shí)現(xiàn)每秒25幀的回放速率。這樣,VFW就可以適用于不同的硬件平臺(tái),使用戶可以在普通的MPC上進(jìn)行數(shù)字視頻信息的編輯和重放,而不需要昂貴的專門硬件設(shè)備。 二、實(shí)現(xiàn)同步控制和實(shí)時(shí)播放 通過同步控制參數(shù),AVI可以通過自調(diào)整來適應(yīng)重放環(huán)境,如果MPC的處理能力不夠高,而AVI文件的數(shù)據(jù)率又較大,在WINDOWS環(huán)境下播放該AVI文件時(shí),播放器可以通過丟掉某些幀,調(diào)整AVI的實(shí)際播放數(shù)據(jù)率來達(dá)到視頻、音頻同步的效果。 三、可以高效地播放儲(chǔ)存在硬盤和光碟上的AVI文件 由于AVI數(shù)據(jù)的交叉儲(chǔ)存,VFW播放AVI數(shù)據(jù)時(shí)只需占用有限的內(nèi)存空間,因?yàn)椴シ懦绦蚩梢砸贿呑x取硬盤或光碟上的視頻數(shù)據(jù)一邊播放,而無需預(yù)先把容量很大的視頻數(shù)據(jù)加載到內(nèi)存中。在播放AVI視頻數(shù)據(jù)時(shí),只需在指定的時(shí)間內(nèi)訪問少量的視頻圖像和部分音頻數(shù)據(jù)。這種方式不僅可以提高系統(tǒng)的工作效率,同時(shí)也可以實(shí)現(xiàn)迅速地加載和快速地啟動(dòng)播放程序,減少播放AVI視頻數(shù)據(jù)時(shí)用戶的等待時(shí)間。 四、提供了開放的AVI數(shù)字視頻文件結(jié)構(gòu) AVI文件結(jié)構(gòu)不僅解決了音頻和視頻的同步問題,而且具有通用和開放的特點(diǎn)。它可以在任何Windows環(huán)境下工作,而且還具有擴(kuò)展環(huán)境的功能。用戶可以開發(fā)自己的AVI視頻文件,在Windows環(huán)境下可隨時(shí)調(diào)用。 五、AVI文件可以再編輯 AVI一般采用幀內(nèi)有損壓縮,可以用一般的視頻編輯軟件如Adobe Premiere或MediaStudio進(jìn)行再編輯和處理。 AVI文件的展開結(jié)構(gòu)AVI(Audio Video Interleaved的縮寫)是一種RIFF(Resource Interchange File Format的縮寫)文件格式,多用于音視頻捕捉、編輯、回放等應(yīng)用程序中。通常情況下,一個(gè)AVI文件可以包含多個(gè)不同類型的媒體流(典型的情況下有一個(gè)音頻流和一個(gè)視頻流),不過含有單一音頻流或單一視頻流的AVI文件也是合法的。AVI可以算是Windows操作系統(tǒng)上最基本的、也是最常用的一種媒體文件格式。先來介紹RIFF文件格式。RIFF文件使用四字符碼FOURCC(four-character code)來表征數(shù)據(jù)類型,比如‘RIFF’、‘AVI ’、‘LIST’等。注意,Windows操作系統(tǒng)使用的字節(jié)順序是little-endian,因此一個(gè)四字符碼‘abcd’實(shí)際的DWORD值應(yīng)為0x64636261。另外,四字符碼中像‘AVI ’一樣含有空格也是合法的。最開始的4個(gè)字節(jié)是一個(gè)四字符碼‘RIFF’,表示這是一個(gè)RIFF文件;緊跟著后面用4個(gè)字節(jié)表示此RIFF文件的大??;然后又是一個(gè)四字符碼說明文件的具體類型(比如AVI、WAVE等);最后就是實(shí)際的數(shù)據(jù)。注意文件大小值的計(jì)算方法為:實(shí)際數(shù)據(jù)長度 + 4(文件類型域的大?。灰簿褪钦f,文件大小的值不包含‘RIFF’域和“文件大小”域本身的大小。RIFF文件的實(shí)際數(shù)據(jù)中,通常還使用了列表(List)和塊(Chunk)的形式來組織。列表可以嵌套子列表和塊。其中,列表的結(jié)構(gòu)為:‘LIST’ listSize listType listData DD‘LIST’是一個(gè)四字符碼,表示這是一個(gè)列表;listSize占用4字節(jié),記錄了整個(gè)列表的大小;listType也是一個(gè)四字符碼,表示本列表的具體類型;listData就是實(shí)際的列表數(shù)據(jù)。注意listSize值的計(jì)算方法為:實(shí)際的列表數(shù)據(jù)長度 + 4(listType域的大?。?;也就是說listSize值不包含‘LIST’域和listSize域本身的大小。再來看塊的結(jié)構(gòu):ckID ckSize ckData DDckID是一個(gè)表示塊類型的四字符碼;ckSize占用4字節(jié),記錄了整個(gè)塊的大?。籧kData為實(shí)際的塊數(shù)據(jù)。注意ckSize值指的是實(shí)際的塊數(shù)據(jù)長度,而不包含ckID域和ckSize域本身的大小。(注意:在下面的內(nèi)容中,將以LIST listType listData 的形式來表示一個(gè)列表,以ckID ckData 的形式來表示一個(gè)塊,如[ optional element ]中括號(hào)中的元素表示為可選項(xiàng)。)接下來介紹AVI文件格式。AVI文件類型用一個(gè)四字符碼‘AVI ’來表示。整個(gè)AVI文件的結(jié)構(gòu)為:一個(gè)RIFF頭 + 兩個(gè)列表(一個(gè)用于描述媒體流格式、一個(gè)用于保存媒體流數(shù)據(jù)) + 一個(gè)可選的索引塊。AVI文件的展開結(jié)構(gòu)大致如下:RIFF ‘AVI ’LIST ‘hdrl’‘avih’主AVI信息頭數(shù)據(jù)LIST ‘strl’‘strh’ 流的頭信息數(shù)據(jù)‘strf’ 流的格式信息數(shù)據(jù)[‘strd’ 可選的額外的頭信息數(shù)據(jù) ][‘strn’ 可選的流的名字 ]......LIST ‘movi’{ SubChunk | LIST ‘rec ’SubChunk1SubChunk2......}...[‘idx1’ 可選的AVI索引塊數(shù)據(jù) ]首先,RIFF ‘AVI ’…表征了AVI文件類型。然后就是AVI文件必需的第一個(gè)列表DD‘hdrl’列表,用于描述AVI文件中各個(gè)流的格式信息(AVI文件中的每一路媒體數(shù)據(jù)都稱為一個(gè)流)。‘hdrl’列表嵌套了一系列塊和子列表DD首先是一個(gè)‘avih’塊,用于記錄AVI文件的全局信息,比如流的數(shù)量、視頻圖像的寬和高等,可以使用一個(gè)AVIMAINHEADER數(shù)據(jù)結(jié)構(gòu)來操作:typedef struct _avimainheader {FOURCC fcc; // 必須為‘avih’DWORD cb; // 本數(shù)據(jù)結(jié)構(gòu)的大小,不包含最初的8個(gè)字節(jié)(fcc和cb兩個(gè)域)DWORD dwMicroSecPerFrame; // 視頻幀間隔時(shí)間(以毫秒為單位)DWORD dwMaxBytesPerSec; // 這個(gè)AVI文件的最大數(shù)據(jù)率DWORD dwPaddingGranularity; // 數(shù)據(jù)填充的粒度DWORD dwFlags; // AVI文件的全局標(biāo)記,比如是否含有索引塊等DWORD dwTotalFrames; // 總幀數(shù)DWORD dwInitialFrames; // 為交互格式指定初始幀數(shù)(非交互格式應(yīng)該指定為0)DWORD dwStreams; // 本文件包含的流的個(gè)數(shù)DWORD dwSuggestedBufferSize; // 建議讀取本文件的緩存大?。☉?yīng)能容納最大的塊)DWORD dwWidth; // 視頻圖像的寬(以像素為單位)DWORD dwHeight; // 視頻圖像的高(以像素為單位)DWORD dwReserved[4]; // 保留} AVIMAINHEADER;然后,就是一個(gè)或多個(gè)‘strl’子列表。(文件中有多少個(gè)流,這里就對(duì)應(yīng)有多少個(gè)‘strl’子列表。)每個(gè)‘strl’子列表至少包含一個(gè)‘strh’塊和一個(gè)‘strf’塊,而‘strd’塊(保存編解碼器需要的一些配置信息)和‘strn’塊(保存流的名字)是可選的。首先是‘strh’塊,用于說明這個(gè)流的頭信息,可以使用一個(gè)AVISTREAMHEADER數(shù)據(jù)結(jié)構(gòu)來操作:typedef struct _avistreamheader {FOURCC fcc; // 必須為‘strh’DWORD cb; // 本數(shù)據(jù)結(jié)構(gòu)的大小,不包含最初的8個(gè)字節(jié)(fcc和cb兩個(gè)域)FOURCC fccType; // 流的類型:‘auds’(音頻流)、‘vids’(視頻流)、//‘mids’(MIDI流)、‘txts’(文字流)FOURCC fccHandler; // 指定流的處理者,對(duì)于音視頻來說就是解碼器DWORD dwFlags; // 標(biāo)記:是否允許這個(gè)流輸出?調(diào)色板是否變化?WORD wPriority; // 流的優(yōu)先級(jí)(當(dāng)有多個(gè)相同類型的流時(shí)優(yōu)先級(jí)最高的為默認(rèn)流)WORD wLanguage;DWORD dwInitialFrames; // 為交互格式指定初始幀數(shù)DWORD dwScale; // 這個(gè)流使用的時(shí)間尺度DWORD dwRate;DWORD dwStart; // 流的開始時(shí)間DWORD dwLength; // 流的長度(單位與dwScale和dwRate的定義有關(guān))DWORD dwSuggestedBufferSize; // 讀取這個(gè)流數(shù)據(jù)建議使用的緩存大小DWORD dwQuality; // 流數(shù)據(jù)的質(zhì)量指標(biāo)(0 ~ 10000)DWORD dwSampleSize; // Sample的大小struct {short int left;short int top;short int right;short int bottom;} rcFrame; // 指定這個(gè)流(視頻流或文字流)在視頻主窗口中的顯示位置// 視頻主窗口由AVIMAINHEADER結(jié)構(gòu)中的dwWidth和dwHeight決定} AVISTREAMHEADER;然后是‘strf’塊,用于說明流的具體格式。如果是視頻流,則使用一個(gè)BITMAPINFO數(shù)據(jù)結(jié)構(gòu)來描述;如果是音頻流,則使用一個(gè)WAVEFORMATEX數(shù)據(jù)結(jié)構(gòu)來描述。當(dāng)AVI文件中的所有流都使用一個(gè)‘strl’子列表說明了以后(注意:‘strl’子列表出現(xiàn)的順序與媒體流的編號(hào)是對(duì)應(yīng)的,比如第一個(gè)‘strl’子列表說明的是第一個(gè)流(Stream 0),第二個(gè)‘strl’子列表說明的是第二個(gè)流(Stream 1),以此類推),‘hdrl’列表的任務(wù)也就完成了,隨后跟著的就是AVI文件必需的第二個(gè)列表DD‘movi’列表,用于保存真正的媒體流數(shù)據(jù)(視頻圖像幀數(shù)據(jù)或音頻采樣數(shù)據(jù)等)。那么,怎么來組織這些數(shù)據(jù)呢?可以將數(shù)據(jù)塊直接嵌在‘movi’列表里面,也可以將幾個(gè)數(shù)據(jù)塊分組成一個(gè)‘rec ’列表后再編排進(jìn)‘movi’列表。(注意:在讀取AVI文件內(nèi)容時(shí),建議將一個(gè)‘rec ’列表中的所有數(shù)據(jù)塊一次性讀出。)但是,當(dāng)AVI文件中包含有多個(gè)流的時(shí)候,數(shù)據(jù)塊與數(shù)據(jù)塊之間如何來差別呢?于是數(shù)據(jù)塊使用了一個(gè)四字符碼來表征它的類型,這個(gè)四字符碼由2個(gè)字節(jié)的類型碼和2個(gè)字節(jié)的流編號(hào)組成。標(biāo)準(zhǔn)的類型碼定義如下:‘db’(非壓縮視頻幀)、‘dc’(壓縮視頻幀)、‘pc’(改用新的調(diào)色板)、‘wb’(音縮視頻)。比如第一個(gè)流(Stream 0)是音頻,則表征音頻數(shù)據(jù)塊的四字符碼為‘00wb’;第二個(gè)流(Stream 1)是視頻,則表征視頻數(shù)據(jù)塊的四字符碼為‘00db’或‘00dc’。對(duì)于視頻數(shù)據(jù)來說,在AVI數(shù)據(jù)序列中間還可以定義一個(gè)新的調(diào)色板,每個(gè)改變的調(diào)色板數(shù)據(jù)塊用‘xxpc’來表征,新的調(diào)色板使用一個(gè)數(shù)據(jù)結(jié)構(gòu)AVIPALCHANGE來定義。(注意:如果一個(gè)流的調(diào)色辦中途可能改變,則應(yīng)在這個(gè)流格式的描述中,也就是AVISTREAMHEADER結(jié)構(gòu)的dwFlags中包含一個(gè)AVISF_VIDEO_PALCHANGES標(biāo)記。)另外,文字流數(shù)據(jù)塊可以使用隨意的類型碼表征。最后,緊跟在‘hdrl’列表和‘movi’列表之后的,就是AVI文件可選的索引塊。這個(gè)索引塊為AVI文件中每一個(gè)媒體數(shù)據(jù)塊進(jìn)行索引,并且記錄它們?cè)谖募械钠疲赡芟鄬?duì)于‘movi’列表,也可能相對(duì)于AVI文件開頭)。索引塊使用一個(gè)四字符碼‘idx1’來表征,索引信息使用一個(gè)數(shù)據(jù)結(jié)構(gòu)來AVIOLDINDEX定義。typedef struct _avioldindex {FOURCC fcc; // 必須為‘idx1’DWORD cb; // 本數(shù)據(jù)結(jié)構(gòu)的大小,不包含最初的8個(gè)字節(jié)(fcc和cb兩個(gè)域)struct _avioldindex_entry {DWORD dwChunkId; // 表征本數(shù)據(jù)塊的四字符碼DWORD dwFlags; // 說明本數(shù)據(jù)塊是不是關(guān)鍵幀、是不是‘rec ’列表等信息DWORD dwOffset; // 本數(shù)據(jù)塊在文件中的偏移量DWORD dwSize; // 本數(shù)據(jù)塊的大小} aIndex[]; // 這是一個(gè)數(shù)組!為每個(gè)媒體數(shù)據(jù)塊都定義一個(gè)索引信息} AVIOLDINDEX;注意:如果一個(gè)AVI文件包含有索引塊,則應(yīng)在主AVI信息頭的描述中,也就是AVIMAINHEADER結(jié)構(gòu)的dwFlags中包含一個(gè)AVIF_HASINDEX標(biāo)記。還有一種特殊的數(shù)據(jù)塊,用一個(gè)四字符碼‘JUNK’來表征,它用于內(nèi)部數(shù)據(jù)的隊(duì)齊(填充),應(yīng)用程序應(yīng)該忽略這些數(shù)據(jù)塊的實(shí)際意義。
有用 0 無用 0 我要提問