基于MPEG-4的視頻壓縮基礎(chǔ) 收藏
微軟的wmv9和Divx/Xvid等都是基于MPEG-4發(fā)展起來的編碼格式,都有不少相通的地方,本文主要介紹視頻編碼的基礎(chǔ)知識,具體的編碼設(shè)置請參看附錄。
下面是沈晟的l兩篇短文,可以從中了解MPEG4和divx3.11、divx4/5、Xvid的發(fā)展。
『 DivX;-)簡介(舊) 』 ---- 作者:沈晟
1998年11月 MPEG-4的國際標(biāo)準(zhǔn)公布
1999年 Microsoft開發(fā)了用于Windows Media的MPEG-4CODEC(編碼解碼平臺)
2000年2月份 一位27歲的法國電影愛好者和黑客Je{AAC}ro{ACI}me Rota合作開發(fā)了一個新的基于MPEG-4的視頻編碼解碼平臺,并同時在網(wǎng)絡(luò)上開放下載。這就是如今大名鼎鼎的DivX;-)
DivX;-)是一種音視頻存儲格式、影音媒體,最大的用途就是保存高品質(zhì)的電影并在網(wǎng)上交流,各項特征如下: 文件類型 多數(shù)情況下以AVI文件的形式保存
分辨率 可選擇、變化:512x384(4:3畫面)、640x272(2.35:1畫面)為主
音頻 開放特性??墒褂肔ame MP3(VBR)、Dobly Digtal(AC3)等。DivX;-) Audio、PCM、MP3、DTS等。
碼流(容量) 取決于分辨率和具體的編碼設(shè)置。
質(zhì)量 視頻畫質(zhì)接近DVD水平,超過VCD和LD;
音頻可以達(dá)到CD質(zhì)量(48kHz, 96kBits, stereo) 或者是多聲道數(shù)碼聲(例如Dobly Digtal 5.1)
系統(tǒng)配置 300MHz CPU,64M 內(nèi)存,8M顯存,系統(tǒng)安裝了相應(yīng)的DivX CODEC后可使用Media Player6.4+或者專用播放軟件播放
編碼效率 PII-350的系統(tǒng)約為1-2楨/秒
DivX;-) CODEC的開發(fā),實際是挪用了Microsoft Mpeg4v3 4.1.00.4920 Low Motion和4.1.00.4917 Fast Motion的編碼核心。經(jīng)過幾個月的修正和一系列更新版本,DivX;-) 現(xiàn)在已經(jīng)可以在所有主流操作平臺上工作和運(yùn)行,包括Windows, Macintosh, Linux 和 BeOS的DivX版本都已經(jīng)開放下載。
DivX;-)視頻編碼所使用的MPEG4編碼壓縮技術(shù)是一種高壓縮比有損視頻壓縮技術(shù)。用它來壓縮一部容量為5-10G的DVD,保持相同的分辨率和AC3音軌只需要1-2張CDROM,壓縮比接近10:1。高壓縮比使個人可以更輕松廉價的保存高品質(zhì)影片,DivX;-)很快就被網(wǎng)民接受并普遍使用。 Internet更為DivX;-)提供了無限的發(fā)展空間。現(xiàn)在每天在網(wǎng)絡(luò)上都會有5、6部最新發(fā)行的影片以DivX;-)格式流傳。高清晰的影像畫面和相對小的文件吸引著上千萬的人。上網(wǎng)者只要足不出戶,就可以輕松交換高品質(zhì)的音視頻享受。朋友間種種充滿樂趣、輕松愜意的影音交流也更為容易。要知道,DivX;-)的流行還只不過是剛剛開始而已。
『 XviD的歷史與特點 』 ---- 作者:沈晟
4年以前,在PC上能用的唯一MPEG-4編碼器就是由微軟所開發(fā)的,包括MS MPEG4V1、MS MPEG4V2、MS MPEG4V3的系列編碼內(nèi)核。其中前面兩種都可以用來制作AVI文件,至今都作為Windows的默認(rèn)組件。不過V1和V2的編碼質(zhì)量都還不太好,直到MS MPEG4V3開始,畫面質(zhì)量有了顯著的進(jìn)步。不過微軟卻決定僅將這個MS MPEG4V3 的視頻編碼內(nèi)核封閉在Windows Media流媒體技術(shù),也就是我們熟知的ASF文件之中,不再能用于AVI文件。ASF文件雖然有一些好處,但是過于封閉甚至不能被編輯,惹惱了天不怕地不怕的電影黑客。很快便有小組修改了微軟的MS MPEG4V3,解除了不能用于AVI文件的限制,并開放了其中一些壓縮參數(shù),由此,也就誕生了我們今天所熟悉的MPEG4編碼器DivX;-)3。11。
DivX廣泛流行,成為DVDRip的標(biāo)準(zhǔn),問題是,它的基礎(chǔ)技術(shù)是非法盜用微軟的,只能在地下里流傳卻上不了臺面,無法進(jìn)行更廣泛的產(chǎn)品化,更無法生產(chǎn)硬件播放機(jī)。在這種情況下,一些精通視頻編碼的程序員(包括原DivX 3.11的開發(fā)者)成立了一家名為DivXNetworks Inc.的公司,簡稱DXN。DXN發(fā)起一個開放源碼項目ProjectMayo,目標(biāo)是開發(fā)一套全新的、開放源碼的MPEG4編碼軟件。特別是完全符合ISO MPEG4標(biāo)準(zhǔn)的OpenDivX CODEC吸引了許多軟件高手參與,并很快開發(fā)出OpenDivX編碼器和解碼器原型,之后又開發(fā)出更高性能的編碼器Encore 2等等。這一時期,主要編碼工作是DXN的人在做,而許多技術(shù)難關(guān)的解決得力于來自開放源碼社會的幫助。
就在一切都看起來進(jìn)展順利的時候,好戲上演了。ProjectMayo雖然是開放源碼,但不是依據(jù)GPL(通用公共許可證,一種開放源碼項目中常用的保障自由使用和修改的軟件或源碼的協(xié)議)。DXN在設(shè)計授權(quán)協(xié)議時留了一手,2001年7月,就在Encore 2基本成型,差不多可以產(chǎn)品化的時候,DXN另搞了一個DIVX.COM網(wǎng)站,封閉了源碼,發(fā)布了他們自己的DivX 4。DivX 4的基礎(chǔ)就是OpenDivX中的Encore 2,但利用了DivX的牌號,可以說出乎意料的擺了所有人一刀。由于DXN不再參與,ProjectMayo陷于停頓,Encore2的源碼也被DXN從服務(wù)器上撤下。經(jīng)過激烈的爭論,DXN雖然承認(rèn)Encore 2在法律上是開放的,但仍然拒絕把它放回服務(wù)器。開放源碼社會就這樣被狠狠地涮了一回。
OpenDivX尚不能實際使用,而DivX 4(以及后續(xù)的收費(fèi)版本--DivX 5)等等都成了私有財產(chǎn),許多人為打破微軟壟斷而無償付出的智慧和勞動僅僅是幫助了DXN發(fā)財,這種結(jié)果當(dāng)然是不能被接受的。為此,整個0dayz組織永遠(yuǎn)的拒絕了DXN公司的DivX4\5,而原OpenDivX開發(fā)組中的幸存者,逐漸重新聚攏開發(fā)力量,在最后一個OpenDivX版本的基礎(chǔ)上,發(fā)展出了XviD。
劫后余生的XVID到現(xiàn)在又度過了近1年時間,它繼承并發(fā)展了OpenDIVX Encore 2,性能得到極大提高,被認(rèn)為目前世界上速度最快的MPEG4 CODEC。XVID重寫了所有代碼,并吸取前車之鑒依照GPL發(fā)布(注意不再是LGPL,所以誰要是想用它做成產(chǎn)品而不開放源碼是非法的)。不過,因為MPEG4還存在專利權(quán)的問題,所以XVID只能仿照LAME的做法,僅僅作為對如何實現(xiàn)ISO MPEG-4標(biāo)準(zhǔn)的一種研究交流,網(wǎng)站上只提供源碼,如果要使用就要自己編譯源碼或者到第三方網(wǎng)站下載編譯好的可運(yùn)行版本。
想當(dāng)初Gaj之流的幾個家伙搞OpenDivX的時候,一開始是很像一個像模像樣的開放源碼項目,很多人都被吸引過去一起開發(fā),測試。直到后來,那幾個家伙一夜之間露出騙子的本來面目了,把OpenDivX的成果一股腦帶走,變成了封閉源碼的DivX4,而后進(jìn)一步變成現(xiàn)在的收費(fèi)的DivX5了。本來很好的OpenDivX被逼流產(chǎn),不過也就促成了今天XviD的誕生、發(fā)展和壯大?,F(xiàn)在的XVID更可以說超越了DivX 5,以更好的質(zhì)量,更強(qiáng)的功能挑戰(zhàn)著新一代的MPEG4應(yīng)用戰(zhàn)場。
目前,微軟基于Mpeg-4的wmv9在商業(yè)應(yīng)用上也很成功。在微軟的巨大影響力下,已經(jīng)成為新一代DVD標(biāo)準(zhǔn)之一的藍(lán)光DVD的編碼器。Divx5依然在商業(yè)應(yīng)用的道路上前進(jìn)著,似乎在一些avi播放機(jī)上可以看到他。Xvid隨著1.0版的正式發(fā)布,風(fēng)頭正勁,視頻編碼性能方面確實是當(dāng)之無愧的王者,開放的Xvid活力無限。另外要介紹一下H.264。H.264是最新的MPEG壓縮技術(shù),又名“MPEG4 AVC(Advanced Video Coding)”。H.264的數(shù)據(jù)壓縮率在MPEG2的2倍以上、MPEG4的1.5倍以上。One2公司在H.264基礎(chǔ)上開發(fā)的VP6在壓縮率上有著不錯的表現(xiàn),在低碼率的情況下,性能不錯。
下面介紹一下視頻編碼的基本概念
碼流(Data Rate) 碼流是指視(音)頻文件在單位時間內(nèi)使用的數(shù)據(jù)流量,有時候也叫碼率,是Mpeg4畫面質(zhì)量控制中最重要的部分。同樣分辨率下,視(音)頻文件的碼流越大,壓縮比就越小,畫面質(zhì)量就越高。試采集同一幀同一分辨率的原版《木乃伊》做細(xì)部比較,如下圖:
我們注意觀察黑色前景周圍的高對比度區(qū)域,和背景天空的對比度和碎化程度。以原圖為標(biāo)準(zhǔn)畫面(10Mbits/s的Mpeg2),可以看到“碼流500kbits/s的DivX”高對比度區(qū)域呈斑點狀,背景天空碎化、混沌;“碼流1000kbits/s的DivX”介于前后兩者之間;“碼流1500kbits/s的DivX”畫面柔和,背景天空已經(jīng)可以準(zhǔn)確分辨明暗位置。雖然DivX和原圖比較仍有缺陷,但畢竟DivX的碼流只有DVD的1/10-1/6。碼流1000-1500kbits/s畫面質(zhì)量已經(jīng)相當(dāng)令人滿意了。 如果對畫質(zhì)有更高的要求而不在乎文件的大小,則可以將碼流提高到2000kbits/s以上(系統(tǒng)允許最大值是6000kbits/s)。如下圖:
以2000kbits/s生成的畫面已經(jīng)相當(dāng)接近原畫,很難看出分別了。 可以通過公式來通過控制碼流來推算生成文件的大小,以適合個人存放:
碼流 x 時間 = 總?cè)萘?/div>
這里要注意的是碼流的單位,1 byte (B) = 8 bits (b),我們計算機(jī)上文件的容量K/M,都是指B
1 Kilobyte(K/KB)=2^10 bytes=1,024 bytes 千字節(jié) 1 Megabyte(M/MB)=2^20 bytes=1,048,576 bytes 兆字節(jié)
所以如果用的bits/s的碼流計算容量記得要除8,否則就差大了
關(guān)鍵幀
所有的Mpeg影片都是由16x16見方的小方塊構(gòu)建的。在連續(xù)的兩幀中“基本相同”的小方塊內(nèi)的像素信息將不被后一幀記錄,以節(jié)省空間并得到更高的壓縮比例。正例如下圖中說話的男子,第2到第4幀除了正在移動的嘴部附近畫面,其他部分并不一一復(fù)制。就可以節(jié)省超過70%存儲空間。
但是在這種方式下,多數(shù)的幀都并不會記錄完整的畫面信息。例如在播放第4幀畫面時,就必須先得到第1、2、3幀的信息。如果要看第100幀的畫面,就必須讀取并處理前99幀的數(shù)據(jù)信息才可以得到。這樣就造成影片不能夠從中間選定的時間點播放。即使你已經(jīng)看過前面30分鐘的畫面,也必須要慢慢的等待電腦一幀一幀的重建前面的畫面,這是多么痛苦啊。因此就必須設(shè)定合適的“關(guān)鍵幀”。
適當(dāng)?shù)募尤?#8220;關(guān)鍵幀”既可以輕松的在影片的中定位時間點,也方便對影片進(jìn)行后期編輯和處理,還可以更準(zhǔn)確的保證音軌同步、保證畫面質(zhì)量。
三種幀類型
IF——I-frame的縮寫,即關(guān)鍵幀。關(guān)鍵幀是構(gòu)成一個幀組(GOP,Group of Picture)的第一個幀。IF保留了一個場景的所有信息。壓縮比為1:7。
PF——P-frame的縮寫,即未來單項預(yù)測幀,只儲存與之前一個已解壓畫面的差值。壓縮比為1:20。
BF——B-frame的縮寫,即雙向預(yù)測幀,除了參考之前解壓過了的畫面外,亦會參考后面一幀中的畫面信息。壓縮比為1:50。
B-Frame(在 MPEG-4 里面正確的名稱是 B-VOP)的預(yù)測模式有四種: a. Forward 順向預(yù)測,參考前一張畫面,記錄和前一張畫面的差距。和 P-Frame 的預(yù)測方法一樣。 b. Backward 逆向預(yù)測,參考下一張畫面,記錄和下一張畫面的的差距。 c. Bi-Directionally 雙向預(yù)測,參考前面和后面兩張畫面,記錄的是和「前后兩張畫面的平均值」的差距。也叫做內(nèi)插預(yù)測,壓縮率最高。 d. Direct Mode,不搜尋、紀(jì)錄動作向量,直接由下一張的 P Frame推導(dǎo)出動作向量。譬如說 I B P,我們可以預(yù)測 B 畫面的動作必然是介于 I 和 P 兩個畫面之間,所以我們可以直接用 P 的 MV/2 作為B 的動作向量,這樣可以省去記錄 MV 的空間。
壓縮 B-Frame 的時候會從上面幾種預(yù)測模式中選壓出來最小的一個模式來使用。
三種量化方式:H.263、MPEG和MPEG Custom
H.263——推薦700~900K的碼率(比如1CD制作)時使用。保留畫面細(xì)節(jié)不及MPEG量化方式好,但可以達(dá)到較好的畫面降噪效果,可以讓畫面看起來更干凈一些。推薦壓制動畫使用本量化方式。H.263 的量化方法,顧名思義,就是使用 H.263 這個壓縮規(guī)格所使用的量化方法,量化的時候,8x8 的像素方塊內(nèi)的所有 DCT 系數(shù),全部除以同一個數(shù)字。(這個動作就叫做量化)例如全部都除以 32,如果有一個 DCT 系數(shù)為 15,小于 32,經(jīng)過相除之后,會被量化為 0,如此便可以省下很多記錄的 bits。當(dāng)然,除的數(shù)字越大,量化的誤差也就越大,品質(zhì)也就越差,但是壓縮率會越高,壓出來檔案會越小。我們會利用另一個參數(shù)來調(diào)整量化的誤差,控制最后量化的品質(zhì)和檔案的大小,這個參數(shù)叫做 Quantizer。量化的系數(shù)會再乘上這個 Quantizer 的倍數(shù),例如原本要除的量化系數(shù)是 32,Quantizer 是 2,對應(yīng)的放大倍數(shù)也是 2,最后真正要除的量化系數(shù)就變成 32*2 = 64。所以 Quantizer 越大,要除的量化系數(shù)就越大,量化誤差就越大,品質(zhì)就越差,但是檔案也越小。H.263 的量化方法還規(guī)定,相鄰的兩個 MacroBlock 的Quantizer 不能相差超過 2。
MPEG——建議高碼率情況下(比如2CD制作)使用,畫質(zhì)最佳,能保留較多細(xì)節(jié)。推薦制作電影DVDRIP使用本方式。若在制作動畫時使用,可能引起色彩過度不自然、顏色邊界處出現(xiàn)噪聲等副作用,此時,可搭配Cartoon Mode降低這些副作用。MPEG 的量化方法,高低頻系數(shù)可以除以不同的量化系數(shù),可以視情況將高頻削多一點。這個 8x8 的量化系數(shù),也就是 Quantize Matrix(量化矩陣)。
MPEG Custom——可以加載MPEG自定義量化模板。你可以依照影片內(nèi)容、使用碼率,自訂最適當(dāng)?shù)牧炕仃?。比如,壓電影的時候常用的hvs-best-picture模板可以兼具M(jìn)PEG和H.263量化方式的優(yōu)點,即畫面細(xì)節(jié)和降噪都能得到兼顧。
總的來說,使用H.263 量化法,壓出來的畫面會較模糊。MPEG 量化方法的畫面會比較銳利。(不過銳利線條的周圍、物體的邊緣,會產(chǎn)生一些噪聲)MS MPEG-4,也就是 DivX 3.11,使用的是 MPEG 的量化方式,所以一直以來,大家的評價都是 MS MPEG-4的畫面比較銳利,保留比較多的細(xì)節(jié)。DivX 4, DivX 5 都是使用 H.263 的量化方法,尤其是 DivX 4,畫面非常模糊。雖然表面上看起來壓縮瑕疵較少,但是細(xì)節(jié)都被削光光了。XviD 則可以讓使用者自行選擇要固定使用哪種量化方法,或者是視情況切換量化的方法。
CBR和VBR
CBR 恒定碼率,整個文件的碼率是恒定不變的。
VBR 動態(tài)碼率,文件的碼率是變化的,在一些大動態(tài)的場景,如爆炸,高速運(yùn)動的物體等場景碼率會很高,而在一些靜態(tài)的,相對靜止缺乏變化的場景碼率又很低。
Single pass 和 Two pass Single pass 編碼模式在編碼的時候只進(jìn)行一次運(yùn)算,直接生成經(jīng)過編碼的視頻文件。Two pass需要運(yùn)算兩次,可以理解為先進(jìn)行一次全局的計算,收集畫面信息,并將這些信息記錄到信息文件。第二次才根據(jù)采集的信息,正式進(jìn)行壓縮,生成壓縮文件。Single pass模式編碼較簡單,速度也很快,但是最終質(zhì)量不如Twopass模式好??捎糜趯崟r采集。Two pass通過第一次運(yùn)算的信息采集,可以讓需要高碼率的運(yùn)動畫面可以分配更的碼率來保證畫面質(zhì)量。而對于不包含太多運(yùn)動信息的靜態(tài)畫面,則可以消減分配的碼率。Twopass模式可以在影片容量與畫面質(zhì)量之間找到最佳平衡點。
下面是Xvid1.0里面的兩種模式的具體應(yīng)用,可以更形象的了解這兩種編碼模式。
Single pass——一次運(yùn)算,Single pass有兩種模式。Single pass模式編碼較簡單,速度也很快,但是最終質(zhì)量不如Twopass模式好??捎糜趯崟r采集。
Single pass之Target bitrate(CBR)——目標(biāo)碼率模式,單位kbps。最簡單的單線編碼,選擇平均碼率后編碼。文件大小相對容易控制。
Single pass之Target quantizer(VBR)——目標(biāo)Q值模式,動態(tài)碼率。
Twopass——二重運(yùn)算。這種編碼模式分為兩步,首先對畫面逐幀進(jìn)行運(yùn)動偵測,以及對全片段的運(yùn)動偵測結(jié)果進(jìn)行分析,然后重新以曲線平衡分配每一幀的Q值,以做到:需要高碼率的運(yùn)動畫面可以分配更多空間、更高的碼率、更低的Q值來保證畫面質(zhì)量;而對于不包含太多運(yùn)動信息的靜態(tài)畫面,則可以消減分配的碼率。這種把好鋼用在刀刃上的做法,是XviD作為第二代MPEG4編碼的核心內(nèi)容??梢哉f,Twopass模式可以在影片容量與畫面質(zhì)量之間找到最佳平衡點,這也是大多數(shù)人都樂意花費(fèi)更多時間采用這種方式的原因。
Twopass-1st pass——二重運(yùn)算,第一次運(yùn)算。這是Twopass模式的第一步。在這一步中,編碼器會用最高質(zhì)量編碼(量化值2),同時收集畫面信息,并將這些信息記錄信息文件(stats)當(dāng)中提供第二次運(yùn)算的時候參考。
Twopass-2nd pass——二重運(yùn)算,第二次運(yùn)算。這是Twopass模式的第二步,編碼器會根據(jù)第一次壓縮時獲得的影片的信息和用戶指定的最終文件大小,自動分配碼率,低動態(tài)的分配得少一些、大動態(tài)的分配得多一些,總之盡量保證最終文件大小為用戶指定的大小。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。