優化實況(一) OBS設定 streaming settings

本文適用我做的開發版本 (可能含官方正式版還未加入的新功能)
非新手教學,解釋OBS機制/設定,讓使用者選擇適合的設定 (減少資源消耗...等)
目標記錄所有能優化的部分,新手閱讀可能會感到挫折, 看懂多少用多少吧
偏筆記的寫法
資料來源: OBS開發者間的交談內容, OBS程式碼及其他相關來源

要用哪一個OBS和系統?
實況配備需求
調整Win10
畫面相關的優化 (scene, source..etc)
編碼器encoder
其他

要用哪一個OBS和系統?
不維護的OBS Classic不要用,聽說有安全性問題,攻擊者可在你電腦隨意執行程式
換OBS Studio比較好 (畫質,效能, 功能上都贏),以下都直接稱作OBS,不打全名

新版本有匯入功能,可以從舊的Classic和其他實況軟體轉換過來
Streamlabs OBS(SLOBS),OBS的衍生版之一,功能較多設定較容易,消耗較多資源
有人問我閒置時(未實況)資源消耗過多,我就推薦去試用OBS,應該是個案,沒用不熟




64bit目錄內有64bit版本,能跑就用,設定和32bit通用 (效能較好,官方版標題會寫64bit,我的版本只提供64bit就不寫了)
官方OBS v22後有把32/64bit版本分離,缺空間可以移除重裝 (節省接近一半)
Win7無法發揮OBS全部功能,效能較差 (微軟2020/1/14停止支援Win7,建議升級)
OBS在Windows上效能和功能最好 (開發者人數Windows > Linux> Mac)


我改的OBS (效能/功能強化,可直接轉換或獨立安裝)
https://craftwarblog.blogspot.com/2017/09/obs-studioby-craftwar.html


實況配備需求
如果不開實況,遊戲能跑的順,開實況通常也不會有問題 (遊戲全開最低的,建議不要實況)
可嘗試更新OBS或調設定提高效能 (調低OBS或遊戲 設定,犧牲一點畫面)
還沒組電腦的人,先參考其他人的遊戲配備
先以不實況能遊戲的配備為基準,再往上調整因實況可能需要強化的部分
看他人分享的遊戲資源用量及fps (在某設定,CPU, 顯卡下的資源用量)
如果用量較高,你可能要提高該項配備或降低設定



調整Win10
關掉Win10新加的功能
Game Bar和Game DVR (會消耗額外資源+可能導致OBS異常)
同樣的功能OBS都可以辦到,不實況關掉也可以避免影響遊戲效能
關掉Game Bar和Game DVR的方法

Game Mode,OBS也建議關掉 (據說Windows 1809版本更新後會被自動打開)
April 2, 2019—KB4490481 (OS Build 17763.404) 更新修正這個問題,可以不用關
打開會讓遊戲有優先權,可能讓OBS拿不到足夠的資源,影響實況品質 (手動把遊戲調高優先權也有同樣的影響)
https://obsproject.com/wiki/How-to-disable-Windows-10-Game-Mode


畫面相關的優化 (scene, source..etc)
解析度輸入和輸出不同要轉換大小,有些是一次性,有些是每個frame都要運算
設定中Video tab的Base和Output Resolution設一樣可以省資源 (減少一次scale運算)
除非含實況和錄影要同時產生不同解析度的輸出 (實況平台幫轉的不算),否則沒有必要設不同
也避免畫質損失

也許比較新的OBS會修改,建議避開可能的額外消耗 (可能是某些設計考量保留彈性?)

source全部是global的(和Classic中有local/global不同),只有換scene collection時會清掉重新載入
看不到(不在目前的scene/不顯示)也要處理 (載入, 更新...etc),有些source有處理過,不顯示會停止更新減少消耗
解決辦法是一個scene collection中不要放太多scene和source
source只放真的有在用的,不要放一堆沒在用(只是關掉顯示),減少資源,這樣OBS啟動也比較快

消耗較大的source (image/browser可以選擇unload,ram不夠可開,切換會重讀比較慢)
image超過obs中顯示大小,先調整好再加入obs,讀取較快,用較少記憶體, 顯示品質較好
ex: 使用者很常把手機拍的照片直接拿去用,沒先處理過

[image的記憶體用量說明]
a 1920x1080 image takes up 8294400 bytes of VRAM. (7.91015625MB)
看來OBS內部是用 8294400 /1920/1080 = 4 bytes 表示一個pixel?
從Jim得知image source是把解壓後image丟進vram的
推測有畫面的都會用vram,如果有畫面以外的資料存ram
[/image的記憶體用量說明]

播放線上影片(ex: Nightbot點歌)選擇符合你畫面大小的品質,資源用量較低
縮小到同等大小下,由較高解析度轉小效果會比較好
browser plugin使用cef,每個source都是一個process,記憶體用量較高,但效能比抓外部瀏覽器較好
需要和網頁互動或想省記憶體可擷取Firefox (其他chrome基底的瀏覽器,不如直接用browser plugin)

source如果能設定fps (ex: browser plugin),不要設比你的實況還高太多,浪費資源
不放額外source(圖片,聊天室)時,實況畫面設定成和遊戲一樣大,壓縮效果比較好(畫質和流量),用第三方程式觀看也會比較好 (streamlink觀看會沒有黑邊)

擷取卡直接在OBS中以source加入 (透過擷取其他程式畫面,資源消耗和延遲較高)
圓剛(Avermedia)的不行,因為不照標準,又一直改,OBS團隊覺得要支援他們太累,就放棄了,聽說要擷取圓剛程式的畫面
OBS主力支援的擷取卡好像是DeckLink (滿常聽到開發者談到的)
其他家不確定,購買前請先查網路看使用經驗


編碼器encoder
目前2019/6/08,任何平台都是吃H.264的串流,軟體和硬體壓縮的差別只有由CPU或顯卡來壓成H.264,硬體壓縮有獨立晶片(除了某些選項要用GPU運算),對GPU負荷不大,通常影響遊戲較小
  • 軟體壓縮: 主要靠CPU
    x264 可加開opencl (cpu多了gpu幫忙,可能造成遊戲不順,OBS團隊說x264的opencl支援不穩定,建議不要用,我做的OBS直接在x264中拔掉opencl)
  • 硬體壓縮: 只支援顯卡 (不支援其他種硬體壓縮 ex: 擷取卡),可減少CPU和系統memory用量 (都移到顯卡去),能源效率比軟體壓縮好 (有壓縮特化的硬體,用電較少)
    如果硬體有支援卻無法使用,更新驅動程式看看,可能是版本太舊或踩到地雷版本
    順便一提,遊樂器內建的實況應該都是硬體壓縮
    1. Intel: Quick Sync,內顯要在bios內打開 (預設應該是有插顯卡就關掉內顯,要強制開)或用Xe獨立顯卡
    2. Nvidia: NVENC
    3. AMD: Video Coding Engine(VCE)/AMF (好像名字有改過,所以有兩種叫法,基本指的都一樣)
用一張卡遊戲,另一張卡壓縮會降低效能 (PCIe頻寬會被平分,除非你是高階板子才有例外)
在OBS支援hardware texture sharing encoding後,多卡實況效益不大了

OBS舊的硬體壓縮(v23以前),CPU先從顯卡拿資料,轉成硬體壓縮能用的格式再餵回去壓縮
2019/7/28 直接在顯卡壓縮的功能,Win7以下不能用(因為要用DirectX11.1),目前只有AMD沒支援

nvenc(new),名字好像決定叫Jim_nvenc了 (和Nvidia實況程式用同樣API效能應該也一樣)
根據Nvidia的測試,這個encoder是對fps影響最小的
https://www.nvidia.com/en-us/geforce/news/geforce-rtx-streaming/
實測後 和舊版nvenc(ffmpeg的)比較: CPU和ram用量下降


參考設定,建議依自己情況修改或用預設值 (我用GeForce GTX 1660 Ti)
或Output Mode用simple mode,不用改encoder會自動選用新版nvenc (我不知道隱藏起來的參數預設值會是什麼,沒在用,不太關心)


參數解釋
resacle output不要開,目前25.0.1開了就會切換成舊版nvenc,效能會下降很多 (因為目前rescale只能用cpu做)
GPU是GPU index,0是第一張顯卡 (好像是OBS使用的? 很多人不能用就是去亂改到這個)
two-pass, lookahead, CQ? 打開可提高畫質或降低上傳,會使用CUDA所以會影響到GPU
two-pass在OBS新版nvenc中設定隱藏起來了 (nvenc本身是獨立的設定)
lookahead會把frame buffer,和b/p frame有關,詳細不好解釋,實況增加延遲改進動態畫面品質
preset: Max Quality等於Quality多開two-pass (以前的high quality + two-pass)
Psycho Visual Tuning (nvenc的兩種CQ) 對GPU影響最大,除非配備很好,否則都不建議

Max B-frames 調高有可能增加畫質和延遲 (OBS程式限制最高4,nvenc本身好像沒這限制?)

[技術細節]
https://obsproject.com/mantis/view.php?id=610
v23 遊戲使用NV12時(Jim說只想支援NV12),不經過CPU轉換,顯卡直接壓縮 (如果不支援會自動跳回舊版的硬體壓縮)
官方說GPU的用量也會降低,資料傳送只需要一次(壓縮完傳到ram送出實況),可解決PCIe頻寬不夠的問題 (Nvidia 700系列以後?),Win7不能用(需要DX11.1),多顯卡也不能用 (texture sharing does not work cross-adapter)



quality/bps(同樣資料量下畫質): x264 > NVENC > Quicksync (Qsv) > VCE (AMF)
OBS論壇上的encoder比較資料
https://obsproject.com/forum/threads/comparison-of-x264-nvenc-quicksync-vce.57358/

Nvidia NVENC畫質 preset quality(舊版叫high quality) 和 x264 very fast差不多
x264 very fast < 10系列Pascal < x264 fast
x264 fast < 20/16系列 ~x264 medium (Nvidia說20系列約比10系列Pascal強化15%,同畫質下資料少15%)
encoder速度會受顯卡gpu和memory的clock速度影響

Intel  QSV 需要在bios中打開才能使用

AMD的硬體壓縮AMF據說會和Intel CPU的顯示衝突,目前解法是移除Intel顯示驅動 (不明原因會使用到,造成crash),用AMD顯卡可不裝Intel顯示驅動基本沒影響 (2018/12/2)

看剩餘資源決定用軟體或硬體壓縮 (用軟體監測用量判斷 ex: GPU-Z),不一定用哪個比較好 (PCIe bus, VRam, GPU 任何顯卡相關資源不夠用都會影響遊戲/實況體驗),實際使用看哪種效果比較好,如果遊戲全調最低了通常是顯卡不夠
一般情況,除非CPU有多餘核心 (核心不用和遊戲或其他程式共用),否則軟體壓縮通常對遊戲影響較大


用nvenc時,CPU用量極低平均約1%以下 (用AMD Ryzen5-1500X, 我改的OBS)



一般推薦用硬體壓縮,除非你想提供更高畫質可考慮用x264 (畫質要調到比硬體壓縮好,否則沒有多大意義)
要注意硬體壓縮使用VRam,顯卡需要的VRam會比沒實況高,VRam不夠用會對效能造成影響


實況推薦用Nvidia,因為AMD的硬體壓縮品質最差,先不考慮耗電,驅動又很常出問題 (2018/12/2)
用擷取卡時 (沒有在電腦上執行遊戲),可考慮改用x264並調高preset提高畫質,如果不順可加開OpenCL讓顯卡分擔


放鳥星 750ti CSGO 遊戲正常,硬體壓縮實況不正常 (舊版NVENC)
經檢測發現,fps無法穩定在設定的120,低的時候會在9x,猜測顯卡不夠力
換成x264降低顯卡負擔就改善了 (她說遊戲正常只是主觀感覺,不是正確的,因為習慣了)
也許改遊戲設定或是降低NVENC設定也可以?


x264 profile選high比main有更多功能 (消耗更多運算,壓縮效果更好)
流量不高時應該無感,你高興選high/main哪個都行 (舊設備只支援main)
主要影響畫質的設定是preset和上傳量 (調高會改善畫質,消耗更多資源)


畫面擷取方式的選擇
效能 game > window > display capture (依這個順序嘗試擷取)
官方說明 https://jp9000.github.io/OBS/general/whatcapture.html

game capture是inject hook進遊戲,遊戲更新畫面時複製一份讓obs使用


用game capture比較不順,設定不正確造成的結果
https://craftwarblog.blogspot.com/2018/06/game-capture-limit-capture-framerate.html

Advanced
顏色設定
color range理論上是full才正確,用partial的原因是播放器支援有問題,會顯示錯誤
2021/8/15,chrome和firefox都已支援full range
如果自用錄影,播放器正常,可以用full range
實況或分享影片,建議用sRGB/709 partial(因不知觀看者是否支援其他的),youtube似乎用sRGB會有問題,要用709,看使用的直播平台和觀看裝置的支援
https://obsproject.com/forum/threads/colors-yuv-full-partial-and-601-709.27128/
https://github.com/obsproject/rfcs/pull/7
https://github.com/obsproject/obs-studio/pull/3415
firefox91.0後已修正full range撥放顏色異常
https://bugzilla.mozilla.org/show_bug.cgi?id=1459526


low-latency mode
這個選項是讓OBS不要一次傳送太多,讓其他程式有機會用網路,減少延遲(latency),
CPU用量會提高,適合需要反應的連線遊戲


其他注意事項
實況靜音要在OBS或遊戲/軟體內設定,不是系統的混音 (系統靜音還是會出去)
OBS會用顯卡,遊戲沒限制可能會用光資源導致OBS運作出問題
遊戲fps和螢幕畫面更新率(Refresh Rate)的關係
https://craftwarblog.blogspot.com/2019/01/fpsrefresh-rate-vsync-g-sync-freesync.html


preview關掉能省資源 (因為OBS不需要做預覽縮圖,使用上會較不便)


寫了簡單自我介紹給想看的人

紀錄OBS的新功能
https://craftwarblog.blogspot.com/2018/01/obs.html


其他OBS文
https://craftwarblog.blogspot.tw/search/label/obs
優化相關
https://craftwarblog.blogspot.tw/search/label/optimization


How to Report Bugs Effectively (我的OBS使用或文件的改進意見回報方式,參照此文)
https://www.chiark.greenend.org.uk/~sgtatham/bugs.html

留言

這個網誌中的熱門文章

OBS 抓不到畫面, 視窗, 遊戲擷取, 黑或白畫面, 當掉 ,卡住, black/white screen, window game capture, crash, freeze

OBS plugin obs-text 顯示播放中音樂, display playing music