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

0. 遊戲初始化還未完成
這時讓OBS去game capture擷取會造成卡住或當掉 (OBS嘗試inject去hook會失敗)
OBS先切到其他scene,等遊戲啟動完才切回去
或遊戲啟動完再開OBS

1. OBS設定錯誤
全螢幕和視窗的定義,不是遊戲畫面多大 (很多人以為畫面塞滿就是全螢幕)
可以切換game capture的mode試看看
全螢幕的遊戲,切出來看OBS預覽似乎一定是黑畫面 (可用手機或別台電腦確認實況畫面)
不行就改回window capture/display capture試試吧

Windows.Graphics.Capture (新視窗擷取)
Win10 1903+限定,可抓到開啟硬體加速的firefox/chrome或cef,UWP程式
一般而言開啟硬體加速的程式效能會比沒開高,畫面比較順,延遲比較低
https://github.com/obsproject/obs-studio/pull/2208

調整Allow transparency (每個遊戲不一定)
在東方th14打開會變成黑畫面,只有按Esc時有畫面

在HackNet要打開,否則抓不到畫面

如果你有把多張顯卡連接,SLI/Crossfire Capture mode要打開 (效能會降低,沒用別開)
多顯卡的系統 (通常是NB/laptop),OBS和遊戲使用的顯卡不同,要改一樣

2. 權限不合,遊戲用管理者跑,OBS也必需用
ex: Garena LOL (Garena沒有好的理由強迫全部要用admin跑,riot官方就不用)
右鍵選擇以系統管理員身分執行
覺得每次都要跳提示很煩,可以參考 OBS跳過UAC提示的方法
https://craftwarblog.blogspot.com/2017/10/obs-run-obs-as-administrators-without.html

3. 遊戲公司擋掉或其他因素
a) 被擋掉
ex: 客服超濫的Garena,關於這個問題4次填單客服都是文不對題或罐頭回應及敷衍
第2次我就指出真正問題點,客服還是一樣,沒有溝通意願
過了一個月也沒解決,所我不再完他們遊戲了
在玩G社遊戲時沒有一次填單問題被解決/回答過,我哪有這麼M繼續玩他們遊戲

Destiny2有擋 (官方說不給用game capture,不知道政策改了沒)

b) 因為Garena盜用OBS程式碼,會和OBS做同樣的事造成衝突 (GTV的功能內有盜用)
ex: 台服LOL,所以從競時通按下啟動LOL後,一定要重開OBS,否則無法使用game capture,其他Garena代理的遊戲應該也會有相同問題
已經退坑了,不確定問題還在不在

4. 防毒擋掉
https://github.com/jp9000/obs-studio/pull/1124#issuecomment-354619901
把 data\obs-plugins\win-capture加入例外

5. 不支援的模式或支援不完全

畫面根本抓不到,或是放影片時就抓不到 (變黑畫面)

以WA2為例,放影片時會生出一個child window,game capture抓原本的,當然沒畫面


有些遊戲可以調模式,改成不同模式試試
1) OpenGL常會有問題 (當掉或是擷取不到)
Mac新版不打算支援OpenGL,OBS應該也不太修正了
實例: nox https://craftwarblog.blogspot.com/2017/12/obs-android-emulator-nox-crash.html
2) 可以嘗試改成DirectX或是改變DirectX使用的版本
據說DX12有些遊戲抓不到,要改DX11


DirectDraw不支援
打開 obs-studio\plugins\win-capture\get-graphics-offsetsddraw-offsets.cpp
/* TODO */
根本沒做阿

DirectDraw已被Direct2D/DirectWrite取代,應該不會有人做,也只有舊程式有影響
ex: diablo2, starcraft聽說是用directdraw
OBS Classic 好像有支援DirectDraw (沒加進OBS Studio)
有問題的話,可以試試

DirectX hook大概還不完全
所以遊戲明明是寫說用DirectX9或8做,卻抓不到只能用Window capture,
遊戲跑到一半game capture突然抓不到影片畫面 (應該是改成不支援的模式)

Vulkan遊戲已在OBS 25.0.0支援 (選擇game capture就可以了)

其他API的可能也會抓不到,沒有遊戲測試

6. 瀏覽器
改用上面1.提到的Windows.Graphics.Capture,下面保留給舊系統使用者看

Google Chrome (含使用cef的程式 ex: Discord)
某版後? 用game capture會抓不到

Win7可直接用window capture抓到 (不用關硬體加速)
Win8/10要關掉硬體加速 (Chrome會降低效能) 才能用window capture擷取,或用display capture

Win8以後Direct2D是用Direct3D 11.1 API做的
DirectWrite底層好像也是Direct2D
obs game capture對D3D11似乎沒有很完全,可能是這原因抓不到
或是程式使用了非一般的寫法

用Spy++可以看到Chrome是D3D11的window


建議改用Firefox,可在開啟硬體加速下,用Window capture抓到
如果白畫面可以去檢查是否webrender被打開
去about:support看,Compositing是否為webrender
2019/6/13 目前好像只有nvidia顯卡會開啟webrender
Graphics
Features
Compositing    Direct3D 11 (Advanced Layers)
↑我關掉webrender後,Firefox就改回舊模式,在D3D下還是有硬體加速比Chrome要全關好一點

解法是強制關掉webrender
要去about:config 在webrender.force-disabled改成true

或是用sandboxie開Firefox,可擷取到

7. Window Capture無法抓取最小化的視窗
Windows的系統限制,無解,只能換別種擷取法嘗試
視窗不可最小化,可以不用在最上層 (實際上實況主看不到,較不影響體驗)

8. 軟體衝突 (會在遊戲顯示overlay的軟體都可能,沒有overlay有hook 的也有可能)
可能有時候成功,有時候失敗 (不是每次都發生)
也有可能出現遊戲, 程式或OBS當掉的訊息提示

已知衝突名單 https://github.com/obsproject/obs-studio/wiki/Known-Conflicts
解法,關掉和OBS衝突的程式

關掉Windows 10 Gaming Features
game bar和game dvr最好都關掉
某レミリア嫁的蘿莉控 反映game dvr關掉後,就能用game capture擷取到HELLDIVERS

放鳥星提供,razor的程式會影響csgo的game capture

顯示卡的驅動程式可能也有關係 (特別是使用硬體壓縮的場合)
我有遇過某幾版Nvidia driver會導致nvenc不穩定


9. 如果都抓不到最後一招就是用display capture,直接抓螢幕畫面
OBS擷取效能最差,通常是其他方法都不能用才考慮
ex: layered window必須用display capture

10. 多顯卡的配置 (筆電Laptop/Notebook)
遊戲和OBS必須跑在同一個GPU (說顯卡可能比較好懂?)
否則會抓不到,詳細情況不清楚,我沒用過筆電實況
要去筆電或顯卡的程式設定目標程式使用哪個GPU

11. Vulkan game 當掉
可能是OBS Vulkan implicit layer和遊戲衝突,可在環境變數設定DISABLE_VULKAN_OBS_CAPTURE=1關掉
或等OBS嘗試修正


其他原因不明的問題
抓不到畫面 (game capture設定畫面有抓到,OBS控制面板/實況無畫面)
這是我朋友的問題,原因未知,有問題的人可以嘗試看看,我以前用Win7完全正常

猜測: Win7必須windows update更新到最新,否則會有這問題
 
 

留言

  1. 非常感謝你!原來是硬體加速的關係才導致視窗擷取都全黑…找了好久的問題終於解決了QAQ
    (幫你多點幾下文章旁的廣告♥)

    回覆刪除
    回覆
    1. 寫文分享用意是受惠於其他前輩寫的文,該做點回饋,廣告只是順便,能有點收入當然更好。我寫的文太冷門讀者數不多(通常只對沒人寫過的東西有興趣), 累積不到能領出,幫忙分享給更多人知道就可以了。

      刪除
  2. 想請教遊戲擷取突然無法擷取的問題 這是我的dc:The Killing Juke#3403 希望能幫個忙

    回覆刪除

張貼留言

這個網誌中的熱門文章

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

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