內(nèi)容導(dǎo)航: 分頁瀏覽 |
全文瀏覽
碗好還是鍋大?封裝格式詳解-AVI
所謂封裝格式就是將已經(jīng)編碼壓縮好的視頻軌和音頻軌按照一定的格式放到一個文件中,也就是說僅僅是一個外殼,或者大家把它當(dāng)成一個放視頻軌和音頻軌的文件夾也可以。
說得通俗點,視頻軌相當(dāng)于飯,而音頻軌相當(dāng)于菜,封裝格式就是一個碗,或者一個鍋,用來盛放飯菜的容器。
有的人可能覺得奇怪,容器,不就能盛放飯菜就行了么,用一個碗就可以了,何必制定出這么多的格式以及規(guī)范呢?
其實不然,試想一下,有的菜,例如排骨,比較大,碗放不下,得換鍋。有的飯比較燙,也不能放在塑料的容器里,當(dāng)然個人喜好也有一定關(guān)系。
所以容器的選擇,基本在于,其對視頻/音頻兼容性,以及適合范圍。
這下大家應(yīng)該明白了,很多人一直把封裝格式當(dāng)成前面介紹的視頻編碼,而這兩者之間沒有必然的直接聯(lián)系。
.AVI容器-成熟的老技術(shù)
AVI是微軟1992年推出用于對抗蘋果Quicktime的技術(shù),盡管國際學(xué)術(shù)界公認(rèn)AVI已經(jīng)屬于被淘汰的技術(shù),但是由于windows的通用性,和簡單易懂的開發(fā)API,還在被廣泛使用。
AVI的文件結(jié)構(gòu)、分為頭部, 主體和索引三部分. 主體中圖像數(shù)據(jù)和聲音數(shù)據(jù)是交互存放的。從尾部的索引可以索引跳到自己想放的位置。
AVI本身只是提供了這么一個框架,內(nèi)部的圖像數(shù)據(jù)和聲音順據(jù)格式可以是任意的編碼形式。因為索引放在了文件尾部,所以在播internet流媒體時已屬力不從心。很簡單的例子,從網(wǎng)絡(luò)上下載的片子,如果沒有下載完成,是很難正常播放出來。

另外一個問題是AVI對高碼率VBR音頻文件支持不好。VBR全稱是Variable BitRate,就是動態(tài)比特率,可以根據(jù)當(dāng)前的需要定義不同的比特率,避免了浪費,并且提高了利用率。隨之問題也就來了,因為容器里的圖像和聲音是分開的,所以播放時需要一個圖像和聲音的同步過程,如果CBR音軌的話因為碼率是定值,同步不成為問題,可是VBR音軌是不斷的在變換,而AVI沒有時間戳去讓VBR音軌和圖像同步,這樣就會產(chǎn)生圖像聲音不同步的問題。
后來VirtualDub提出了一種新的方法擴(kuò)充了AVI對VBR音頻的兼容,但是在高碼率時會產(chǎn)生丟失數(shù)據(jù)的問題,從而導(dǎo)致有損音效,這一點問題到現(xiàn)在都沒有比較完美的解決方法。并且更加令人遺憾的是,對TrueHD, DTS-HD等音效更是完全不能支持。