2016年7月28日 星期四

madVR將顯示卡性能換取極致畫質

madVR係一個知名既影像渲染器,雖然我未見過佢全名,但係我估係mad Video Renderer,即係一個痴撚線既影像渲染器,因為佢真係痴撚線咁勁,只要你顯示卡夠勁就可以將即使普通既片變到靚片。


講今次介紹同教學前首先俾個效果圖你地睇(原本係720p既片放大到1080p既解像度),上圖就未設定好madvr大概同平時mpc差唔多,下圖就已經調教好madvr。(未去到盡)
大圖可以去screen shot comparison度睇:http://screenshotcomparison.com/comparison/179903


根據videohelp對madvr既簡介
高質素既色度升頻;
多種高質素既縮放技術(bicubic,mitchell,lanczos,spline等等);
高質素既YCbCr->RGB換算法;
可以校準螢幕既色域同伽瑪;
全程使用16bit高準度處理;
最終16bit處理既結果會經過抖動下降到RGB既色深輸出;
避開顯示卡對畫面既處理,避免損害畫質;
所有程序都使用GPU黎運算。

先此聲明madvr真有好多功能,有啲功能我只會略略提一提,因為我對嗰樣功能認識唔深,例如佢有個校色既功能係要配合一啲校色既硬件但我冇嗰類野。

安裝過程


首先講安裝過程,去佢個網度下載安裝檔,再解壓到系統目錄(建議)。

然後用系統管理員既身份開啟install.bat。

如果想係64bit既播放器度用,就要開啟active debug mode。然後active debug mode個檔案改名為active release mode,咁就再撳多次就得(雙次都唔洗系統管理員)。

跟住再係播放器既外置篩選器度加上madvr,然後再係影像渲染器度揀madvr就大功告成就奇。(用MPC-HC黎示範)

Potplayer播放器中全域濾鏡優先權加上madvr,在新增系統濾鏡中選擇madVR,再在優先順序設定強制使用


然後再係視訊輸出裝置視訊渲染方式選擇madvr就可以。



裝完之後就可以開始設定madvr,首先搵套野播,然後就會叫你用准許madHcCtrl.exe啟動,當然就俾佢開啟,取消埋左下角「開啟這個檔案前一定先要詢問」,咁以後就唔會再問你。

播片嗰陣會見到windows右下角多左個icon,撳佢就可以操作播放器,撳edit madVR settings就可以開到madVR既設定頁面。

開左設定頁面就首先就要去device設定螢幕,咁先配合到螢幕既特性發揮最好效果。
而家普遍都係用LED螢幕或電視,咁就揀digital monitor/tv;用投影機就揀projecter。

properties螢幕設定,最高RGB output levels用電腦螢幕就揀PC、電視就TV;bitdepth(色深)就要睇番裝置既數值,但螢幕既色深就未必用bit黎代表,通常用可輸出既色量黎代表,如果係1千67萬(16.7M)色深就係8bits,如果係10.7億(1.07B)色深就係10bits;3D format我就唔識,因為我冇3D野睇。
唔同牌子螢幕既可視顏色都用唔同字眼表示,但意思都相近類似下面咁。

calibration就要睇你有冇校色既裝置黎校準螢幕既顏色,而我就冇校色既設備所以呢部份我係完全唔識,不過最好剔左disable GPU gamma ramps,防止顯示卡驅動影響螢幕伽傌,從而影片螢幕顏色。

display modes:當影片播放時自動切換螢幕既更新率,可以係下面空格打你想要既解像度同更新率,然後會根據你影片既解像度同fps就將螢幕切換成唔同模式,最主要係更變螢幕既更新率成影片既fps,咁樣就可以令影片盡量同螢幕同步,減低畫面疾既感覺。詳細關於影像同步既原理可以睇我之前reclock既文。
http://ppkkkp.blogspot.com/2016/07/reclock.html

treat 25p movies as 24p:呢個功能要配合reclock一齊用,因為佢會將歐洲格式既25p影片用reclock既功能將影片稍微減速成24p,冇看開歐洲格式片既用家唔洗理呢部份。

color&gamma呢度既設定就個人喜好,上面既選項我就鐘意唔調整既,最多會校下gamma,不過其實都冇咩點校。

hdr就係最近更新既功能,即係高動態範圍(high dynamic range),啟用左hdr功能就會將hdr標準既影片以更廣闊的色域同光暗度黎呈現以提供更真實既官能體驗,而且hdr亦都係次世代電視既一個標準,所以對螢幕既級數有一定要求。
而我就冇睇開hdr既片同埋呢個功能岩岩新增,所以未算穩定而我又對呢樣野無咩認識,因為hdr既電影好似未有正式有出過碟,而家都睇緊一啲demo既片,所以我都唔多作解釋。

processing對影像進行前期既處理,防止喺之後既處理上放大一啲瑕疵。

deinterlacing(去交錯):madvr有自己既去交錯設定,對會用電腦播放器睇電視節目既用家有用,因為電視既訊號格式通常係1080i而唔係1080p,i字尾係代表interlaced隔行掃描;而p字尾係代表progressive逐行掃描。係下圖左方係逐行掃描,而右邊就係隔行掃描,逐行掃描就唔需要deinterlacing既功能因為已經係一個完整既影像,而隔行掃描就需要deinterlacing將兩個影格運算番一個正常既影格,因為播放隔行掃瞄既影像時由於影像只原來既有一半,所以會出現閃爍既現象。

而madvr就可以自行偵測影片是否需要去交錯,但難免會有唔肯定既時侯,所以有得喺懷疑影片可能係隔行掃瞄時會否進行去交錯。
if in doubt,activate deinterlacing:懷疑時會去交錯。
if in doubt,deactivate deinterlacing:懷疑時唔會去交錯。

disable automatic source type detection:強制使用以下兩種去交錯方法之一黎處理影片
force film mode:強制使用IVTC(Inverse Telecine) 既方法,將隔行掃瞄既60i影片重建成逐行掃瞄24p既影片。大約係下圖既情況。咁樣就還原到原來既影像

force video mode:強制使用DXVA既去交錯方法,會根據你顯示卡驅動既去交錯設定黎運行。

artifact removal可以消除畫面既一啲瑕疵,

reduce banding artifacts就可以消除一啲色帶既問題,
default debanding strength:設定去除色帶既強度。
strength during fade in/out:設定畫面淡出/淡入時既除色帶強度。
reduce ringing artifacts就可以消除一啲光環/光邊型既瑕疵。

下圖係示範deband效果既原圖,眼利既用家會睇到黑色漸層有色帶存在

未deband會見到漸層過渡得唔平均同會有啲雜訊。

deband後見到雜訊消失左而且漸層過渡得平均。

image enhancements當中有唔同方法增強畫面既細節,但要注意過度調節會有反效果。

sharpen edges銳利邊緣,將圖像邊緣變得更分明令影像更加立體。

crispen edges,另一種Finesharp,同樣令畫面更銳利,不過運算既方式唔同所以得出既效果亦都有別於其他選項。

thin edges,將圖像既線條變得更幼令影像更加細緻,適合較舊既動畫例如得DVD嗰類。

enhance detail加強細節,將整個畫面唔同部份都變得分明,我個人認為適合電影。

LumaSharpen亮度銳利,先模糊原本既像素同周圍既像素,再將之後得出既圖像中模糊既效果消除,從而得出更銳利既圖像。另外提一提lumasharpen都經常用喺SweetFX度,呢個係PC game既一個加強畫質既工具。

AdaptiveSharpen,都係一種銳利方法,過度調節會令畫面油畫感會好重。

activate anti-bloating filter,去減少一啲由過度銳利畫面而産生既瑕疵。
下圖同時開左sharpen egde、LumaSharpen同AdaptiveSharpen,會見到畫面銳利左,但係眼睛同背景既油畫感好重。
開左anti-bloating之後整體畫面既銳利度下降左,但係各方面既油畫感都減少左。

activate anti-ringing filter,去減少另一啲銳利畫面而産生既光環類瑕疵。
ringing(光環瑕疵)係常見銳利畫面既後遺症,尤其多種銳利法同時啟用就非常明顯,係下圖同時開左sharpen egde、LumaSharpen同AdaptiveSharpen就見到紅圈入面會多左層透明既邊係頭髮之外。
下圖係用左anti-ringing filter之後,見到頭髮外既透明邊細左。


zoom control,呢個功能對用4:3或近期陸續推出既21:9螢幕有用,因為主流螢幕比例係16:9所以市面上對此類影片處理成16:9比例,咁樣4:3同21:9既影片就會係上下或左右兩則加上黑邊黎變成16:9既比例方便呢個比例既用家,但係4:3或21:9既用家當播放呢類16:9為基礎既影片時就會再額外多左黑邊,變相浪費左螢幕既空間就好似下圖既情況。
用緊21:9螢幕播放本應21:9既影片,但礙於影片製作時以16:9既用家為主所以影片未能完全吻合21:9螢幕既用家。
所以呢度既功能可以去除多餘既黑邊令影片完全或更吻合螢幕既比例。但因為我用緊16:9螢幕所以入面既功能我無機會試,所以我都唔多作解釋。

Scaling algorithms呢個部份係madvr既精要,入面提供左唔同既運算方法黎將影像縮放,而且佢重將色度同亮度,放大/縮細都分開處理。當中唔同既算法消耗既性能係由上至下遞增

Chroma upscaling:將影像顏色像素放大至應有既數量,不過首先要知道我哋平時睇到既影片儲存方式唔係我哋想像咁用三原色,就好似下圖右方咁樣分開亮度同顏色黎儲存,當中有啲歷史既因由,因為當年由黑白電視過渡到彩色電視時候要保持黑白訊號而又要輸送彩色訊號,
將亮度訊號同顏色訊號分開處理,解決左黑白電視同彩色電視既兼容問題。


而且發現人眼對亮度比色彩敏感,所以引申左4:2:0既像素抽樣方法。
4:2:0當中顏色像素係比亮度像素少,因為我哋影片既像素格式通常係YCbCr 4:2:0,而YCbCr 4:2:0係一個咩概念?可以睇下圖,YCbCr當中Y係代表亮度數據;Cb代表藍色數據;Cr代表紅色數據。
4:2:0代表Y:Cb:Cr唔同數據既像素比例,4係代表亮度像素,2係代表藍色像素,0代表紅色像素。咁你會疑惑冇藍色像素咁套片咪冇左藍色?所以真實既對像素既抽樣係不斷4:2:0->4:0:2->4:2:0......咁樣重複。

所以一套4:2:0既1920x1080既片當中顏色既像素只有一半960x540,所以慳番唔少儲存數據。
咁每套4:2:0既影片都必須經過一個chroma upscaling既過程將顏色像素進行倍數放大轉換番成4:4:4既格式先再轉換成4:4:4既RGB格式呈現係我哋螢幕上。
所以一個高質素既色度升頻就可以還原更接近真實既影像。

下圖chroma upscaling用bicubic75+anti-ringing,見到頭髮顏色同邊緣既位置會有起格既情況。

下圖chroma upscaling用nnedi3 16,比較上圖頭髮顏色同邊緣既位置順滑左好多。

進一步鑽研Chroma Upscaling各種算法的不同效果可觀下方連結的文章,
http://ppkkkp.blogspot.com/2016/11/madvr-v09022chroma-upscaling.html

Image downscaling:當播放器畫面細過影片時,就會用呢度既算法去運算出應有既影像。
比較image upscaling呢度多左SSIM既方法。
image downscaling算法比較

Image doubling:呢個功能既效果類似NVIDIA既DSR同AMD既VSR,將圖像用高於螢幕既解像度黎處理,務求降低到螢幕大小時有更清晰既影像。
呢度既算法會將影像直接進行兩倍既縮放,如果兩倍縮放後既解像度大過播放器既解像度就會再經過image downscaling處理到要求既解像度,反之就會用image upscaling處理到要求既解像度。但你如果用4k螢幕或者睇低解像度既影片可以直接進行兩次倍數既高質素放大再用進行多次非整數既放大以螢幕。(因為nnedi3同super-xbr雖然效果好但只可以進行倍數既放大)
呢度既選項有啲複雜所以需要解釋吓
見到有double同quadruple resolution分別,double就代表做一次倍數放大,咁影像既解像度變成原本既2倍,quadruple就代表再做多次倍數放大所以要先用左double先可以選用,咁做兩次倍數放大最終既結果就比原來影像放大左4倍所以稱為quadruple。

only if scaling factor就係當播放器大過影片既解像度於某個倍數先會進行,而點解會係2.0、1.5同1.2呢三個數值,因為螢幕同影片解像度有一定既標準,假設我用緊1080p既螢幕,而我將唔同解像度既片以全螢幕方式觀看,如果睇720p既影片1080/720=1.5咁scaling factor設定為1.5/1.2就會啟用image doubling;如果睇360p既影片1080/360=3咁scaling factor設定為2/1.5/1.2都會啟用image doubling。
咁你可能疑惑1.2倍好似無用武之地,但如果你螢幕係1440p,咁播1080p既影片1440/1080=1.33......咁scaling factor要設定為1.2先會啟用到。
所以要有幾個scaling factor先令image doubling可以對應到多種解像度既螢幕。

always if upscaling is needed就只要播放器大小大於影片(即使係1.01倍)都會啟用image doubling。

always 2x supersampling就不論播放器大小點樣都會進行image doubling。

你睇到呢度又可能有個疑問,就係如果可以設定always 2x supersampling咁唔同解像度都可以啟用image doubling唔洗諗咩情況先會用image doubling,但係又出現另一個問題係如果播太高解像度既影片就會超過電腦既負荷導致"疾"既情況;如果播太低解像度既影片就會剩低好多電腦既性能未用盡,未能用盡電腦黎提高影片畫質。

所以之後會講點樣設定幾個設定集配合唔同image doubling既設定,令到某一個設定可以對應一定範圍內既解像度,可以用盡電腦既性能而又唔會超過負荷。

再提一提nnedi3可以分開luma(亮度)同chroma(色度)黎處理,所以好多用家會選擇只用luma(亮度),一黎可以慳啲性能,二黎chroma upscaling嗰陣都講過人眼對chroma(色度)唔敏感,所以各位可以先試下用埋chroma如果冇咩感覺就可以閂番去慳番啲性能。

Image upscaling:原理同Image downscaling一樣,只不過Image downscaling係縮細呢個係放大。

upscaling refinement:入面既功能同image enhancements既功能相同,只不過呢度既設定只會係放大過影片原本既大細先會啟用。
另外佢多左個SuperRes既功能,意思為Super Resolution,對畫質有可觀既提升而唔會太破壞原有既細節,不過相比其他消耗既性能都頗多。

renderinggeneral settings,呢度係一啲系統運行既設定。

delay playback start until render queue is full,即係當你想播片會等電腦處理一定既影格先開始播。
enable windowed overlay (Windows 7 and newer),呢個功能只係適用Nvidia同intel既GPU,用更底層既方法呈現畫面,避開顯示卡驅動既處理以得到更好既畫質。
enable automatic fullscreen exclusive mode,madvr可以獨佔螢幕既輸出,得到更穩定既表現,可以輸出8bit以上顏色信號到螢幕。
disable desktop composition,停用windows既aero功能,等aero自己既v-sync功能唔會影響到madvr。不過係windows 8同10既系統下係無法停用aero功能。
use Direct3D 11 for presentation,用Direct3D 11而唔用D3D9黎處理影像,呢個功能亦必須啟用先可以輸出8bit以上既顏色到螢幕。
present a frame for every VSync,唔用就會有新影格時先傳送到螢幕,啟用後就即使冇新影格都會重複影格俾螢幕。
use a separate device for presentation (Vista and newer):可能提升到nvidia顯示卡既性能,但唔同版本驅動可能有差別。
use a separate device for DXVA processing (Vista and newer):如果其他部份有選用DXVA既功能,剔左就可以提高性能。

CPU queue size:控制系統記憶體既使用量。
GPU queue size:控制顯示卡記憶體既使用量。

smooth motion:用影格合成(frame blending)既方法黎將影片既影格數同步螢幕既更新率,降低畫面顫動(judder)既感覺,但模糊既感覺可能會增加。

佢同SVP或bluesky frame rate converter等60fps添加影格程式既分別在於smooth motion唔會計算畫面中物件係新影格既下一個動作既模樣。
下面既影片係好好例子介紹frame blending既效果係點。

dithering:呢度係整個madvr運行既最後一步,madvr將影片提升至16bit色度處理但輸出至螢幕時需要降低至螢幕既色深,但係降低色深會損失顏色既細節,而下面唔同既選項就會補賞番色度既細節。

none:顧明思意,即係唔去補賞色彩上損失既細節,同時就唔需要額外既性能消耗。
random dithering:隨意加入顏色既噪點黎加強番顏色既細節。
ordered dithering:呢個選項會減少可見既顏色噪點,因為唔再隨意加上噪點,會補賞到色彩既細節而又唔會因為隨意加噪點而破壞番原有既畫面。
Error Diffusion:用Direct-Compute黎提供更高質素既dithering,有test option1同2俾你揀,兩個方法有一啲差異,但理論上都比上面2個方法好,所以消耗既性能都更多。
use colored noise:用更多色度既噪點黎代替亮度既噪點,以提高畫質

不過正常情況好難睇到唔同dithering既效果,要將dithering既效果變得清晰可以將螢幕既色深(bitdepth)校低到4bit以下就容易得睇到,建議啟用use colored noise。
下圖就係3bit無用dithering既情況;

3bit用random dithering;

3bit用ordered dithering;

3bit用error diffusion-option 1;

3bit用error diffusion-option 2;

trade quality for performance:唔同選項設定喺電腦負荷過重時自動轉換消耗較低既方法去處理畫面以保持影像順暢播放,但我唔建議用入面既選項,因為情願其他位置既設定校低啲都好過用呢度既方法,而且一般用intel內置顯示卡既電腦都可以順暢運行madvr預設既設定,如果電腦性能真係唔夠咁情願用番EVR。所以入面既選項我唔多作解釋。

講咁多都用張圖黎簡略說明madvr運作既步驟同先後次序。

將所有野介紹一次之後,會發現一種設定係唔可以通用係唔同解像度既片,因為設定得太高睇解像度高既影片會令顯示卡負荷過重導致"疾"既情況,但設定得低睇解像度低既影片又用唔盡顯示卡既性能黎提高畫質。
所以madvr可以建立設定集(profile group)為某個範圍解像度獨立運作,例如分成480p,720p同1080p,咁就有3種設定分別對應3種解像度既影片。

當中processing、scaling algorithms同rendering可以起個profile group,建立profile group既過程要你選擇邊啲功能需要分開幾個設定黎對應唔同解像度,因為某啲功能其實消耗既性能少可以通用係唔同解像,或者你個人覺得某啲設定必須套用係所有影片。(我scaling algorithms已經set好晒,所以用rendering做示範)

然後可以撳add profile去起唔同profile group,我個人習慣係scaling algorithms分480p,720p同1080p 3個group,然後唔同group都可以用自定既快捷鍵去啟用,不過記住快捷鍵唔好同播放器相撞。

跟住就需要少許coding既知識,因為要寫一段script去同madvr講咩情況下用邊個profile,而下面就係我用開既一段,但其實有其他寫法而又做到同樣效果,所以唔洗咁講究跟我既寫法。
咁我既寫法就細過或等於720p既片就用480p既設定;細過1080p既片就用720p既設定;大過或等於1080p既片就用1080p既設定。

到最後講下網上其他人推介既設定,下圖係一個日本網友分享既設定,level1就用最少性能;level7b就用最多性能,畫質亦根據消耗既性能亦同時提升。
佢個blog既link:http://blog.goo.ne.jp/heiseikiseki/e/25d378b063df4332710686f8dfaa4846

而我個人習慣係下面咁,因為我顯示卡散熱壞壞地所以啲設定唔太盡。
480p
chroma upscaling用nnedi3 64+anti ringing;
image doubling用luma nnedi3 32 + nnedi3 32,chroma唔開;
image upscaling同image downscaling用bicubic75;
upscaling method 就會開sharpen edge 1.5冋thin edge 1.5,因為我睇開動畫而我覺得crispen edge同echance detail比較適合電影,但各種方法既數值我唔建議開高過2,尤其thin edge因為過份將畫面線條變幼反而會破壞影像。

720p
chroma upscaling用bicubic100+anti ringing;
image doubling用super-xbr sharpness 100;
image upscaling同image downscaling用bicubic75;
upscaling method 就會開sharpen edge 1.5冋thin edge 1.5。

1080p
chroma upscaling用super-xbr+anti ringing;
image doubling 唔開啟;
image upscaling同image downscaling用bicubic 75;
upscaling method 就咩都唔開,因為我螢幕已經係1080p所以唔會再放大就算開左都冇效果。

轉左用madVR之後個OSD亦會隨之改變,當中有新增既數據,亦有啲數據改變左表達方式
1.display 你螢幕個更新率
2.用緊D3D11定D3D9既顯示模式,播放器既視窗模式,輸出至螢幕既色深。
3.影片既格式同解碼器轉換後既格式。
4.影片既影格數。
5.幾耐會重複/放棄一個影格。
6.前方係影片既解像度,後方係播放器既解像度。
7.chroma upscaling既方式。
8.前方係image doubling既方式,後方係image upscaling/downscaling既方式。
9.vsync係螢幕出現一個畫面既時間,frame係出現一個影格既時間。
10.dropped frames 播放過程掉失既影格。
11.delayed frames 播放過程延遲既影格。
12.rendering 電腦處理一個影格所需既時間,呼應番9個frame既時間,如果大過就代表電腦運算速度追唔到影片播放速度,少許超越會間唔中疾一下,大幅超越就會疾到睇唔到既地步。

後記:今次真係嘔心瀝血之作,篇野都用左三個禮拜黎熬,所以岩睇既share下。
另外有其他高手既文都推介:http://lysandria1985.blogspot.hk/2013/01/3-madvr.html

如果唔想咁煩而又想提高少少畫質可以入下面link
ffdshow raw video filter提高畫質
mpc-hc簡單提高畫質方法

4 則留言:

vk share