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

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