本文沒有涉及tmpgenc的菜單部分,因為影響mpeg編碼效率/質量的主要是參數設置。菜單提供了一些很好的功能,比如壓縮完成自動關機等,請大家自己摸索。
5)水平有限,現眼之處請指正,赫赫。
A. video(視頻)部分:
本部分設定輸出的視頻碼流的類型和參數,大部分參數在模版中已經固定。
1)基本類型:有mpeg1/mpeg2,mpeg1用於vcd, mpeg2用於svcd/dvd.
2)大小:PAL vcd標準為352x288, pal svcd標準為480x576, pal dvd標準為720x576
3)畫麵寬高比:一般應該用4:3 625 line PAL, 這是電視機的屏幕比例
4)楨率:pal 的標準為25fps
5) 碼率控製:碼率控製算法是造成各種編碼器編碼效率和質量不同的關鍵因素。mpeg標準中並沒有對次算法的具體實現做規定,這通常也是商業版本的知識產權內容。
CBR(固定碼率):保持碼率基本維持在平均碼率。實現簡單,對複雜場景會因碼率不足造成馬賽克現象,對於簡單場景則不能充分利用編碼空間。(老枯這裏講的複雜場景是指細節/邊緣豐富以及快速變化場景)。
VBR, (2-pass VBR), “二次處理VBR”。老枯認為其意思是通過對整個視頻源進行2次處理使編碼效率最高:第一遍判斷何處為複雜場景和簡單場景,第二遍根據碼率的上下限,把碼率重新分配更多給複雜場景。可以在實驗中看出,tmpgenc在進行這種編碼時進度指示在50%以前是沒有預覽圖象的,而且楨進度指示為0。所以老枯建議威龍改譯為“二次處理”。這種碼流控製方式應該在給定碼率下得到最好的質量,但是和具體2次分配算法關係很大。同時耗時最長。一些其他編碼器甚至有3次處理的碼率優化。
MVBR (手動可變碼率),設定最大碼率和對不同的幀類型設定不同的信息損失量,實現局部碼率優化。可以通過手工指定複雜場景為I幀對之進行較精細的編碼。參見對於GOP參數設定部分。
CQ-VBR (自動可變碼率),設定主觀質量值和碼率上下限,以主觀質量標準對編碼器量化環節進行控製,在可選參數中設定主觀質量值以後,編碼器就在能達到此質量標準的前提下盡量節省碼率。關鍵在於編碼器對主觀質量的評價方法。這是CQ和VBR的綜合,也可以看作自動的MVBR. 威龍漢化5版在可選參數中有一行是“不破壞最小碼率的狀態而填充數據”,老枯的理解是,如果碼率過低就填充無意義碼(好浪費啊,不過可能是為了兼容性的原因),英文版這一句沒有翻譯,還是日文。 :-(
CQ (固定品質),就是比MVBR多了一個主觀質量值的設定。老枯不明白到底是怎麼控製的。
RT-CBR (實時固定碼率):連GOP層次的碼率優化也不做了的CBR,快一點,質量不高
RT-CQ (實時固定品質):連GOP層次的碼率優化也不做了的CQ,快一點,質量不高
6)碼率:這個碼率是指CBR方式下的平均碼率
7)VBV緩衝區大小:緩衝區大的話,編碼優化會好一些,但是解碼的時候也要求大一些的緩衝區。因此,vcd/svcd標準中參數是固定的,否則可能機器無法播放。
8)Pofile & level(類別與級別): 這個參數是mpeg1沒有的。在svcd/dvd應用中應該是MP&ML,模版自動選定。 MP&HL是為HDTV定義的,分辨率可以高達 19??x11?? .
9)製式:好象這個也是mpeg2相關的參數。我們應該用PAL.
10) 隔行掃描:mpeg1隻支持逐行掃描(25 frame/sec),mpeg2可以選擇隔行(50 field/sec)。如果成品在電視上播放,老枯建議選擇隔行,使運動平滑。但是隔行的視頻在pc上看會有毛刺現象,在水平運動景象中尤其明顯。
11)播放時實現3:2下拉: 這是在film/NTSC製式轉換中需要的,即在編碼時維持幀率不變,不做3:2下拉,而在播放中實現。參見 B.advanced部分。感謝威龍指正。
12)YUV格式:給亮度/紅色差/藍色差分配的碼位。對於人眼來說,亮度信號是最敏感的,所以就分配比較多的編碼空間以求精細,對於色差則粗糙些。一般就是4:2:0了。(其實4:2:0方案給藍色差的碼位不是0,老枯不知道為什麼這樣寫)
13)DC分量精度:在mpeg編碼中需要對8x8的圖象塊進行DCT(離散餘弦變換),DC分量的意義基本是代表8x8塊中的平均值,一般需要為之分配比較大的編碼空間,否則馬賽克的邊緣效應就比較明顯。(8bit就不小啦,圖象壓縮中是每個bit的油水都要榨幹的)
14)運動檢測精度:mpeg是對I幀進行幀內編碼,對P幀進行預測誤差編碼。就是對於P幀的圖塊,在I幀中尋找對應的部分,然後對兩個圖塊的差異部分進行編碼,可以大大節省碼率。運動檢測精度越高,圖塊搜索匹配的範圍越大,編碼效率越高,同時編碼速度越慢。這部分算法同樣沒有在mpeg標準中定義,各個廠商實現水平相差會很大。一般來說,在tmpgenc中設置為普通即可。
B. Advanced (影象源)部分:
本部分設置視頻源相關的參數,以及在編碼之前對視頻源進行的預處理。
1)視頻源類型:隔行掃描/逐行掃描。這個參數在打開視頻源文件的時候會對之自動判斷設置。Tmpgenc12版不能自動識別type 1 DV,在12a版本中已經解決。參看老枯的編碼測試頁。
2)場順序:這是整個tmpgenc甚至整個桌麵視頻領域中最混亂的一部分。tmpgenc12a好象也不能根據視頻源自動設置這個參數。老枯在這個問題上搞了很久,才算明白了一點。這個參數是至關重要的,設置反了會造成生成圖象的明顯閃動,打個比方,一個物體的運動位置次序本來是1-2-3-4-5-6-……,設置反了以後就成了2-1-4-3-6-5-8……對於模擬視頻源,其場序是由捕捉卡類型決定的,對於dv,則定義為 field order A。講到這裏還沒有什麼麻煩,但麻煩的是雖然場序隻有2種,對於他們的叫法卻有3種: field order A/B (在ulead軟件中的叫法), even/odd line first (tmpgenc的叫法), field top/bottom first(bitrate viewer叫法),這3種叫法之間的對應關係是最讓人頭疼的。在英文版的tmpgenc12a中,缺省的設置為“even line first (field A)”,,但在威龍漢化中缺省設置為“奇數場->偶數場”,老枯曾就此請教威龍,威龍講這是日文版的原意,注意不要在字麵上混淆了。總之,3種叫法的關係是這樣的:field A = even line first(奇數場->偶數場) = field bottom first。最可靠的方法,是用不同的設置對高速運動場景各生成一段隔行掃描的視頻,並在電視上觀察,應該能夠看到差別。
3)視頻源的寬高比:tmpgenc可以自動識別設置,一般應該為4:3 625line PAL.
4) 畫麵顯示比例和位置:一般選用“全畫麵顯示並寬高比不變”,所謂“全畫麵顯示並寬高比不變2”選項可能是會造成部分畫麵不可見,老枯沒有嚐試過這一種。在4:3視頻源中可能沒有差別,但對於16:9寬屏影象在4:3屏幕上輸出而言,“全畫麵顯示並寬高比不變”是在上下留出空白,“全畫麵顯示並寬高比不變2”會截掉左右兩端畫麵。。。沒有這樣試過,僅為老枯猜測,不正確的地方請朋友們指正。
5)濾鏡選項組:
這一組設置可以對視頻源進行預處理以提高影象質量。一般來說,老枯都是在非編軟件中實現這些功能的。另外,對濾鏡的使用要適度,因為客觀上任何濾鏡的使用都是引入了信息損失,這是對低品質視頻源提高主觀質量的代價。
影象源範圍:選取部分影象源進行壓縮
24fps化:24fps是電影標準,一般不選
消除鬼影:鬼影是影象的重影,視頻源不好的時候會出現。老枯在dv中沒有遇到過。
消除噪點:在低光條件下的拍攝中影響中回出現明顯的顆粒噪點,利用此濾鏡可以消除。不過副作用是平滑了圖象,比如人的麵部會象橡皮娃娃一樣,光滑但沒有質感。
銳化邊緣:可以對橫向/縱向邊緣分別設置參數,做增強處理。
簡單色彩校正:調整亮度,對比度,gamma,色度等
高級色彩校正:可以按照不同的色彩空間RGB/YUV等進行色彩校正。
消除交錯信號(de-interlace):把隔行掃描的視頻源轉換成逐行掃描的視頻,如果對輸出的視頻設置為隔行掃描(如在打算電視上播放的svcd/dvd),則不要選用。老枯認為在做vcd(逐行掃描mpeg1)時候也未必需要選用,要看視頻源的大小決定。比如老枯用dv 576線,在做vcd時候隻需要288線,簡單舍棄一個場就可以,不需要deinterlace. 相反,如果視頻源是352x288的隔行掃描視頻,則需要做de-interlace.
裁劍畫麵:由於電視機播放視頻的時候對邊緣四周的部分做舍棄,所以可以利用這一點隻對可見部分進行編碼,這樣可以加快編碼速度,並且因為節省的碼率可以利用在未裁剪區域從而提高畫麵質量。一般來說對上下左右各裁剪5%是安全的。
3:2下拉變換:因film 24fps和 NTSC 30fps幀率不同,在製式轉換中所需要做的調整。一般不用。
幀率不變:沒什麼好講的
聲音處理:可以增大/減小音量,並做聲音的淡入/淡出。
C. GOP結構
GOP = group of picture. 在mpeg中一個GOP就是一組時間上連續的畫麵。mpeg中的畫麵分為3種:I,P,B. I是內部編碼幀,編碼方式基本上就是jpeg的格式。P是前向預測幀,編碼方式是使用運動檢測誤差編碼,參看A部分對運動檢測的說明;B是雙向內插幀,根據前後I/P幀進行插值運算,對插值誤差進行編碼。
建議一般不要修改GOP結構,以取得壓縮比例和圖象質量之間的最好平衡。極端的例子是隻用I幀,圖象質量會有保證,但碼流會很大。
1)輸出編輯用的碼流:這個選項會把GOP最後的B幀取消。因為B幀是雙向內插的,其編碼/解碼不僅需要以前的I/P,也需要以後的I/P幀。取消最後的B幀,可以去除GOP之間的依賴性,從而便於編輯。
2)檢測場景變化:對於快速變化的場景,強行設置為I幀,以保證畫麵質量
3)手工強製設定幀類型:手工設定需要精細編碼的畫麵幀為I幀。結合MVBR碼流控製可以全麵控製碼流分配。
D、量化矩陣
mpeg中的量化是對8x8 YUV 信號圖塊進行DCT變換之後的係數的量化。通過對高頻分量使用比較大的量化階從而達到減小高頻分量的編碼空間,達到壓縮的目的。代價就是喪失圖像細節,邊緣模糊等。
1)幀內編碼量化矩陣:這是指對I幀使用的幀內編碼量化矩陣
2)幀間編碼量化矩陣:是指對非I幀的幀間預測誤差編碼所用的量化矩陣。威龍漢化版中叫外部矩陣。
3)矩陣模版的選擇:建議對一般的視頻選用mpeg標準,可以看到,其幀間編碼矩陣統一為16,這是因為幀間誤差已經抵消了低頻分量,高頻分量豐富,所以和幀內編碼矩陣有所不同。對於計算機動畫尤其是2維線條為主的動畫,建議選用CG模版,可以看到因為CG本身高頻信號豐富,其幀內編碼矩陣也統一為32。
另外,有朋友嚐試減小量化矩陣的各個數值,老枯認為這樣做的意義不大。因為量化矩陣並不是量化的唯一因素,事實上的量化程度要根據碼流控製部分的反饋信息而自適應調整。這樣,即使量化階減小,在碼率有限的前提下,量化係數還是會加大的。
4)YUV輸出為YCrCb: YCrCb色彩空間分配給Y亮度信號的編碼空間更大,如果視頻源是YCrCb格式的話,這個選項可以增加畫麵質量。不過一般都是采用YUV(CCIR601),如dv,所以不要選擇這個選項,否則白白浪費碼率。
5)浮點離散餘弦變換:整點運算的速度比浮點要快很多,但精度不如浮點。老枯猜測這裏的浮點其實隻是把DCT變換的係數從8bit增大為16bit的精度,並不需要浮點運算器單元參與變換,否則速度是不可忍耐的。
6)不對靜止部分做半像素的運動檢測:由於視頻源是隔行的,對於精細的靜止邊緣線條(1個像素寬度)比如靜止字幕會出現一個場中出現,另一個場中不出現的閃動。選中這個選項會消除閃動。。不過老枯覺得好像這個和量化矩陣無關。
7)柔化馬賽克:沒什麼好說的。就是在8x8圖塊的邊緣做一些特別處理。能用足夠的碼率或者碼率控製手段解決馬賽克最好,因為這裏的柔化雖然隻對邊緣進行低頻濾波,畢竟還是會對畫麵造成影響模糊化。
E. 音頻:
這部分大多不需要改動vcd/svcd模版。也沒有大的影響。不多討論。
F. 係統:
mpeg的係統是指視頻+音頻。vcd/svcd/dvd模版中已經設定好。沒有什麼可多講的。