為什麼在一些視頻網站的以60幀錄製的遊戲視頻看起來比自己使用60hz屏幕玩同樣的遊戲要流暢的多?

自己玩的時候看到幀數一般在80-100幀,但是很明顯沒有60幀的視頻流暢。是因為玩遊戲時顯卡性能不足導致幀生成時間不穩定,還是因為屏幕刷新率趕不上遊戲幀率導致了跳幀所以感到卡頓?或者是因為視頻壓制方面有什麼影響?

我一開始想到可能是因為自己玩遊戲時因為顯卡性能不足導致幀生成時間不穩定。所以開啟了三重緩衝驗證,似乎開啟三重緩衝後的觀感是要比原來80fps流暢一點。但是還是沒有看那種60幀錄製的遊戲視頻那麼流暢。這個問題困擾了我很久,希望各位大神可以幫我解答一下


看上去感覺的流暢,其實是一種編碼導致的失真。

另一位答主說的編碼思路,就屬於常見的壓縮方式。比如我們存儲連續兩幀畫面的時候,其中含有大量重複信息,如果把這些信息都存兩遍的話,那就太佔地方了。所以我們要把第二幀和第一幀不一樣的地方找出來,記下來。這樣,只要根據存下來的第一幀就可以知道第二幀是什麼,這就是編碼過程。

極端一點,假設我要存儲一個長達一小時的全黑的視頻,你說我該怎麼辦呢,編碼的方式就是把第一幀畫面全部記錄下來,然後說以後全都是這樣的畫面一共n幀。不同的視頻格式(比如mp4等)往往對應著不同的編碼方式,比如我們熟知的avi,就是完全不壓縮,直接原樣存儲。

那我們的視頻播放器是做什麼工作的呢?在我們播放視頻的時候,播放器把已經編碼的視頻還原成顯示器上的像素點,也就是解碼。通常我們說的解碼是通過軟體進行解碼,這就是純CPU運算。但是現在隨著高端顯卡中往往集成了比如.264這樣的編解碼功能,我們經常在設置里看見「硬解碼」這個選項,其實硬解碼就是「硬體解碼」,意思就是利用顯卡的功能,省去CPU的負擔。

視頻編碼分為無損編碼和有損編碼。

如果是無損編碼,那麼解碼後的視頻里的每一幀應該與編碼前的視頻對應幀完全相同,注意是完全相同,所以這樣的編碼方式是保真度最高的。但是正因為要一點都不差地還原出來,所以就有很多細枝末節的信息需要存儲,所以視頻文件的體積就非常龐大。但是這樣的視頻,你在觀看的時候,效果與直接看原視頻是分毫不差的。

事實上我們在絕大多數情形下,比如題主說的看視頻,或者看直播的時候,用到的都是有損編碼。顧名思義,經過這種編碼後的視頻,是無法完全還原的,因為在編碼的過程中扔掉了很多細節,這樣會使得視頻文件體積大幅縮小,但是解碼後的視頻就有了細節模糊啊,解析度下降啊等等這些問題。

值得注意的是,編碼存在的唯一意義就是為了壓縮視頻體積,就是為了讓視頻傳輸起來更方便,更節省流量。編碼的存在,非但不會使得視頻質量提高,反而會產生模糊、掉幀、失真等等副作用。你看越保真的電影體積越大,就是因為用了損失小的編碼方式。

回到題目,題主問為什麼自己打60幀的遊戲和看別人打60幀的遊戲的視頻有差別,那我們就來分析一下兩者的過程。

一、自己打遊戲

在自己打60幀遊戲的過程中,其實是不存在編碼這個過程的,你看到的每一幀圖像的每一個像素點,都是由GPU(和CPU)按照遊戲程序計算出來,之後直接通過顯示器顯示出來的,所以理論上說,這是最原始也就是質量最高的畫面。

對於60幀的遊戲畫面和60hz的顯示器,顯示器就是每秒鐘刷新60次,每一次都是新的一幀。

對於60幀的遊戲畫面和高於60(比如144)Hz的顯示器,顯示器每秒鐘刷新144次,但是平均每刷新144/60=2.4次,才有一幀新的畫面。

對於高於60(比如120)幀的遊戲和60Hz的顯示器,顯示器每秒刷新60次,每一次刷新的過程中(因為顯示器是逐行刷新的)接收到2幀畫面,這時就會產生水平方向的畫面撕裂(這兩幀畫面各佔一半屏幕)。垂直同步就是強制將遊戲幀率降低到60Hz以與顯示器獲得同步。

當我們的顯卡不夠好的時候,遊戲里的畫面設置提供了降低解析度,降低貼圖質量,降低陰影效果等等選項,但就是沒有「使畫面模糊」這個選項,這是為什麼呢?就是因為「模糊」的這個效果,一般是「解碼」的副作用,雖然降低了圖像質量,但是並不能給GPU降低負擔。甚至要刻意做到模糊的效果,還要另外進行大量運算。

二、看別人打遊戲

當別人打遊戲開60幀的時候,其實你面前的畫面並不一定是60幀。

我們錄製遊戲視頻,需要用到錄製軟體(直播的原理是相同的)。值得注意的是,錄製軟體錄製出的視頻,幀率並不一定跟這個人遊戲的幀率相等。只不過是當錄製幀率高而遊戲幀率低的時候,錄製出來會有很多重複的幀。

類似的,你在你的顯示器上看到的這個遊戲視頻的幀率,其實不一定跟打遊戲的那個人看到的幀率相等。特別是如果使用了有損壓縮的話,你看到的視頻文件的細節,並不能反映真實的遊戲體驗。比如如果錄視頻的人遊戲出現了幀率波動或者卡幀,而錄製軟體並不會卡幀,所以它會將卡住的畫面分為好多幀進行保存。而後編解碼的過程中,這些保存了相同畫面的幀,會分別損失掉某些細節,從而變得不同。這樣,當你在你的顯示器上進行觀看的時候,這個「卡幀」的影響就降低了不少。

說白了,就是經過編解碼的視頻,會產生失真。但是這裡的「失真」,是指與原視頻產生差異,這些差異有可能反倒起到了平滑的作用,讓你看起來「更流暢了」。但實際上,你看到的視頻丟失了大量的細節,只是可能其中絕大多數不重要,被你忽視了。

舉個例子,如果對於四個像素點 left[ egin{array}{cc} a  b \ c  d end{array} 
ight ] 描述的一個一秒鐘內黑點從左上角運動到右下角的過程。第一幀圖像取值為left[ egin{array}{cc} 1  0 \ 0  0 end{array} 
ight ] ,最後一幀圖像取值為 left[ egin{array}{cc} 0 0 \ 0  1 end{array} 
ight ] 。如果我們的顯卡配置比較低(比方說只能穩定在2Hz),那麼我們看到的就是

left[ egin{array}{cc}1 0 \0  0end{array} 
ight ] 
ightarrow left[ egin{array}{cc}0 0 \0  1end{array} 
ight ] (1)

總共2幅畫面,每幅畫面顯示0.5秒。

這樣的效果是災難性的,我們會覺得這個畫面比較「鋒利」,比較「硬」,比較「卡」,不流暢。

所以如果我們的顯卡能穩定在4Hz,我們就可以看到如下過程(注意,這是直接從GPU輸出到顯示器上的,不經過視頻壓縮和編碼)

left[ egin{array}{cc}1 0 \0  0end{array} 
ight ] 
ightarrow left[ egin{array}{cc}0.75 0.25 \0.25  0end{array} 
ight ] 
ightarrow left[ egin{array}{cc}0 0.25 \0.25  0.75end{array} 
ight ]
ightarrow left[ egin{array}{cc}0 0 \0  1end{array} 
ight ](2)

總共4幅畫面,每幅畫面0.25秒。這樣的效果比剛才好了許多。

但是值得注意的是,上面的這個平滑,是基於高幀率的平滑,要求的是顯卡的硬實力,這個過程在完全保留了(1)中信息的基礎上,還增加了不少。

然而(1)中的2幀畫面,經過視頻壓縮解壓縮之後,上面的這個過程就會變成下面這樣:

 left[ egin{array}{cc}0.75 0.25 \0.25  0end{array} 
ight ] 
ightarrow left[ egin{array}{cc}0 0.25 \0.25  0.75end{array} 
ight ](3)

總共2幅畫面,每幅畫面0.5秒。

事實上,這個「平滑」抹去了這個點的邊緣的信息,如果擴展到整幅圖像上,就是顯得物體的邊緣模糊了。正因為丟失了邊緣信息,解壓後的視頻看上去,注意僅僅是看上去,顯得「順滑」了不少,這其實就是一種以丟失信息為代價的鈍化邊緣效果,能夠使得畫面「看上去不那麼鋒利」了。

所以如果你有一個帶的動4Hz的顯卡,當然過程(2)是最好的選擇。但如果只有2Hz,你會選擇(1)還是(3)呢?這就見仁見智了。

至於視覺暫留,其實視覺暫留決定了幀率越高看上去越真實,跟題主的問題方向不一樣,就沒有必要考慮了。


我們下載的片子是29.97或30fps,是不是都比你玩的遊戲流暢呀。因為有編碼這個東西存在,玩遊戲的每一幀都是顯卡從0開始繪製出來的,前後相鄰的幀並沒有關聯,60fps相當於顯卡一秒內畫出60張圖。而視頻中的編碼會將相鄰的幀中相同(或相似)的像素保留,只繪製不同的像素,這樣能提高編解碼效率,而且將人眼視覺暫留的效果最大化,所以你看視頻很流暢。我不是專業的,粗略的憑印象回答,不對的地方請指正。


作為一個視頻作者回答一下。

先說結論

1 60幀視頻甚至30幀視頻看的人都覺得流暢是因為——不用自己操縱角色。

2 以上結論只適用於30幀以上的前提下

當我們玩遊戲的時候對幀數是非常敏感的,主要是由於針對畫面我們身體進行條件反射(按出翻滾跳躍或者選擇施法)越是幀數低的情況下戰鬥過程本身就顯得卡頓不流暢。但是如果只是看而不需要反饋,自然沒辦法感受到戰鬥信號從視覺反饋到身體再反饋回畫面這一過程。特別是看攻略視頻的時候有時作者實力過於強悍身體反射帶預判戰鬥的畫面顯得行雲流水幀數即使壓製為30觀看的人還是覺得非常流暢。但是30幀以下的情況下觀眾光憑視覺也有可能感受到不流暢了,這個問題沒有涉及到就不多談了。


錄下的視頻是vfr,強轉成cfr有個blend的操作,看起來會流暢一些。


這個問題我研究過,不過懶得寫了,就提幾點吧。

一是輸入輸出延遲,二是幀生成時間,三是視覺暫留和視頻的拖影。

還有顯示器的刷新延遲問題,很多時候顯示器會把多的幀丟掉,自然就卡了。建議答主上帶G-SYNC的高刷新率顯示器或者沒條件的話,n卡可以吧驅動設置里的垂直同步設置到快那個選項也會有些改善的


第一,遊戲數據/圖像處理環境複雜,運算量相對視頻讀取更大,容易出現某些幀生成時間過長的情況,在優化層面形成卡頓(不流暢)

第二,看視頻只需要看,遊戲通常需要手動操作遊戲內元素,而觸覺感知比單純視覺更加靈敏。而且液晶屏會有一定的液晶延遲,對於互動式情景本身也會有影響(題外話了)

第三,視頻會經過動態模糊處理,物體高速運動的時候不容易給人產生瞬移的感覺,原理可以自己查查

非專業人士,內容也是道聽途說來的,僅供參考


其實很簡單 因為玩的時候滑鼠也參與其中

而觸覺要比視覺敏感很多


自己玩60fps的遊戲用錄製工具以60fps錄製的視頻,再回放都感覺比自己玩都要流暢。可能是要自己在玩的時候要操作的原因吧


自己玩遊戲時,從鍵鼠操作到畫面顯示有一個延遲

而看視頻不需要操作,所以感受不到延遲


推薦閱讀:

《守望先鋒》里的源氏是武士還是忍者?
堅持玩《我的世界》一年以上是種怎樣的體驗?
有哪些【文字冒險遊戲製作軟體】?
為什麼西方遊戲公司在日本頻頻折戟?
為什麼堡壘的戰鬥力能和守望先鋒其他英雄不相上下?

TAG:遊戲 | 顯示器 | 顯卡 |