XviD是目前世界上最常用的視頻編碼解碼器(codec),而且是第一個真正開放源代碼的,通過GPL協(xié)議發(fā)布。在很多次的codec比較中,XviD的表現(xiàn)令人驚奇的好,總體來說是目前最優(yōu)秀、最全能的codec之一。
XviD為一個PC視頻編解碼器,而編解碼器是為[合作]的縮寫明鏡,因此描述了一個方案,以數(shù)字視頻編碼和解碼的編碼視頻數(shù)據(jù)的目的是為了減少流量,這意味著,使其更小更快的通過計算機網(wǎng)絡(luò)或計算機磁盤上的更多高效的存儲傳輸。
xvid有兩種編碼方式:single pass和twopass
single pass模式編碼簡單,速度也快,但最終效果不如twopass。
twopass就是視頻壓制需要經(jīng)過兩次編碼,分別為twopass-1st pass(簡稱1pass)和twopass-2nd pass(簡稱2pass)
1pass時,編碼器會用最高質(zhì)量編碼采集可供第2次運算參考的畫面信息,而在2 pass時。編碼器會根據(jù)第一次壓縮獲得的信息和用戶指定的文件大小,自動分配比特率,使需要高流量的運動畫面分配到更多的空間,更高的比特率來保證畫面質(zhì)量。相對的,對于那些不包含太多運動信息的靜態(tài)畫面則用較低的比特率。追求畫質(zhì)的朋友當(dāng)然會選擇這種方式,但運算比single pass更費時。
接下來介紹一些基本概念:
Q值——量化值,它被用來描述1幀的質(zhì)量,每幀都有一個Q值,取值范圍在1-31之間。Q值越小,畫質(zhì)越好,比特率越大
I-frame——關(guān)鍵幀,常被縮寫為IF。關(guān)鍵幀是構(gòu)成一個幀組的第一幀。IF保留了一個場景的所有信息
P-frame——未來單項預(yù)測幀,縮寫為PF,只儲存與之前一個已解壓畫面的差值
B-frame——雙向預(yù)測幀,縮寫為BF,除了參考之前解壓的畫面以外,也會參考后一幀的畫面信息
編碼流程:
各變量的設(shè)置:創(chuàng)建xvid_enc_frame_t和xvid_enc_stats_t,分別用于傳入?yún)?shù)和統(tǒng)計編碼結(jié)果。
具體過程:
設(shè)置傳入圖像數(shù)據(jù)和圖像色彩空間
設(shè)置傳出的碼流
設(shè)置vol的標(biāo)志
設(shè)置幀的編碼類型
設(shè)置量化因子
設(shè)置運動估計算法集合
設(shè)置vop的標(biāo)志
編碼器提供的函數(shù)