2016年7月7日 星期四

Reclock將畫面400%同步個螢幕

今次講reclock呢樣野唔係用黎睇片靚啲 雖然同樣麻撚煩 但可以防止睇片嗰陣畫面同螢幕唔同步跟住影像出現撕裂既現象




Reclock係slysoft論壇一名高手james開發的directshow音效濾鏡, 支援多種播放器包括mpc-hc、mpc-be、potplayer......等播放器。因為論壇已關閉所以主要的討論和更新已經移師到連結中的論壇https://forum.redfox.bz/threads/reclock-1-8-8-5.63521/

reclock有兩個主要特色,一個提高音質;另一個流暢影像。  
聲音方面支援XP(應該冇咩人用)中kernel streaming和win7的WASAPI音訊輸出,
另外可以把音訊的位元率轉換和重新取樣到更高頻率;

影像方面藉著稍微改變影片同聲音串流的速率,以完全同步螢幕的更新率,大幅減少因影像和螢幕唔同步而產生重複影像或缺少影格所導致的不協調感,就像疾一疾的感覺亦稱為judder。

而導致影像同螢幕唔同步或同步的原因,是螢幕的更新率和影片的影格數的比例,首先要知道我地常用的螢幕的更新率大多是60Hz,但係這不是精確的數字,可以去下方連結知道自己螢幕的更新率https://www.vsynctester.com/detect.html

上圖就是我的螢幕真正的更新率,而且最後3個數字不斷變動中,可見螢幕的更新率不穩定。

但一套影片是有固定的每秒影格數,如果是24fps即是每秒便呈現24個影格,但係螢幕更新率是60Hz,即是每秒呈現60個畫面。這就要把24fps影片的影格重複來填充每秒60個畫面的螢幕,但 60/24=2.5 每個影格要重複2.5次填補60個畫面,所以24個影格無法平均分配到60個畫面。

於是3:2 pull down的方法出現,3:2 pull down即是順序將一個影格重複2次然後下一個影格則重複1次,好似下圖,之前的算式得知1個影格重複2.5次,2個影格就要重複5次,3:2pull down就2個影格3+2合共重複5次,就係一個方法去配合到60Hz螢幕,但這個情況則稱之不同步。不同步既情況就會導致畫面會疾下疾下(judder)的感覺。

但如果影片係30fps,而螢幕既更新率維持係60Hz,60/30=2 每個影格重複2次黎填補60個畫面,咁樣影格就平均分配左到畫面更新率,而呢個情況就稱為同步,但實際上未必完全同步,所以要用到reclock使到完全同步。

上一段講過畫面更新率其實不斷變動,可能係
59.99hz,再用此更新率計算同步需要重複畫面的數量59.99/30=1.999...,得出1.999的數字反映本應同步的影片卻未能完全同步。

由於當影片速度快過螢幕更新率,就必須放棄(drop)一個影格(frame),或當影片速度慢過螢幕更新率,就必須重複(repeat)一個影格,才能維持到影像同聲音既同步,但係放棄或重複影格會在視覺上突然感到疾一疾的感覺。

但未感受過同步的感覺是很難單純觀看便知道影片是否同步,所以播放器的圖表,你會見到右下有個圖表,綠線係影片速度,紅線係螢幕更新率,下圖既影片原本係24fps但我加幀到60fps,所以理論上係同步,但事實未完全同步,所以兩條線會不斷重複平行,然後不斷接近至重疊,但綠線又會突然分開。呢個跳動就代表drop/repeat左一個影格


如果用madvr既OSD黎睇,會見到紅框入面1 frame repeat every XX.XX seconds,呢個時間就代表每幾耐就drop/repeat一個影格。

如果我播一套24fps既影片,需要用3:2pull down既關係,所以係唔同步,所以係圖表上會見到兩條線不斷變動。


亦都睇下madvr既OSD

假如用左reclock之後,原本理應同步既影片就會接近完全同步,就如下圖咁兩條線一直重疊,有啲情況會係兩條線雖然唔會重疊但係一直平行,但都係表示同步左。

如果用madvr既OSD黎睇,如果reclock設定得合適,drop/repeat影格既時間就可以減低到短則幾個鐘,長則幾日。咁樣影片播嗰陣就可以變得流暢。

試下24fps既效果


又睇下madvr個OSD,個drop/repeat frame既時間變到幾個鐘

講完啲原理同效果,咁就開始講安裝步驟同設定,首先都係要下載左reclock先,係一開頭條link度撳紅框下載個安裝檔。

跟住components揀full橫掂支援多啲野冇所謂,如果想裝少啲野就淨係剔頭2個就得。

然後安裝路徑改唔改就自行決定。

裝完就去reclock個目錄撳configure reclock,第一頁就係設定聲音既部份。

1.設定音訊既輸出方法,之前都提過可以使用WASAPI黎輸出,咁樣可以獨佔輸出既位置,然後只會聽到你影片既聲其餘既程式一概無聲,如果唔想其他程式都冇聲就維持原設。

2.音訊輸出既位置,左邊就對應番上面輸出既設定,再選擇呢個輸出用咩裝置輸出。

3.緩衝區既數值係越細就越好,不過校得太細會爛聲。

4.呢度sampling同format既設定要根據你聲效卡支援幾大既數值,理論上越高數值就越好聲,係windows開始例個右下角喇叭icon度右click,然後撳播放裝置,再撳你用開既裝置,然後再去進階,跟住下面就有得擇sampling同format。見到我最高支援既sampling數值係192kHz format既數值係24bit。
然後quality就擇Best Sinc Interpolation就ok啦。

然後就設定影像既部份,唯一要設定Assumed frame rate when not found,如果你清楚自己睇開某個fps既片咁就設定合適你既fps,如果你唔清楚或者睇多種fps既片咁就設定為unknown。
然後建議第一次裝就clean-up manual frame rates database,如果升級左顯示卡driver就最好再clean-up一次。

最後就advanced settings,呢度都冇咩野要設定,建議第一次裝就clean-up video clock timings database,如果升級左顯示卡driver就最好再clean-up一次。

跟住播放器既音訊輸出就要揀番reclock audio renderer。

然後就可以播套片試下,要知道reclock有冇正常執行咁就可以睇windows開始例右下角有冇多左個咁既icon,而且呢個icon重分左紅、黃、綠3種頻色。

紅色代表無法得到影片既fps所以reclock未能啟動;
黃色代表reclock正常啟動但係影片fps既關係所以影片都未能完全同步,就如上面講3:2pulldown既影片無法完全同步,但已經用reclock改善左drop/repeat影格既問題;
綠色代表reclock正常啟動而且影片亦完全同步,可以得到最好既體驗。

如果你撳reclock個icon重有其他設定同資訊。

1.影片的fps,解像度...等既資料,右邊可以選擇reclock根據什麼fps黎處理影片,一般選用automatic就可以。
2.螢幕的更新率同解像度。
3.影像輸出同音訊輸出的方法。
4.主要睇audio clock同audio correction,因為要令影片同步,所以聲音頻率作出極少的加速或減慢令音訊同步。而audio clock就係原本的頻率,audio correction就係音頻需要更改的幅度。
5.speed選擇reclock根據什麼速度處理影片,一般用auto就可以,如果你將數值調校得太高會令影片變得極快速地播放。

後話  如果想播30fps/24fps片都可以完全同步螢幕,最好買個120Hz既螢幕,因為120/30=4、120/24=5,不同主流影格數都可以將影格平均分配到螢幕,再配合reclock就任何fps的影片都可以完全同步。

如果想睇其他高手既文章我推介呢個http://lysandria1985.blogspot.hk/2013/01/5-reclock.html

2 則留言:

  1. MPV player 好像也有類似的功能,--video-sync=display-resample

    回覆刪除
    回覆
    1. 搭配這個 script 可以有接近 24hz 播放的效果:https://github.com/kevinlekiller/mpv_scripts/tree/master/autospeed/

      刪除