OBS StudioでmacOSのウィンドウ
キャプチャの仕組みが変わっていた

  • OBS 29以降、macOSでウィンドウキャプチャを使うとアプリ再起動のたびに設定がリセットされます。
  • 原因はScreenCaptureKitの仕様で、ウィンドウIDが再起動ごとに変わるためOBSが同じウィンドウを追跡できません。
  • 代替手段としてアプリケーションキャプチャが安定していて、ScreenCaptureKitとの相性も良好です。
  • どうしても画面全体を避けたい場合は、画面キャプチャにクロップを組み合わせる方法が設定の崩れにくい選択肢になります。

関連記事

1. OBS Studioでウィンドウを記憶できない?

OBS 29以降、macOSでウィンドウキャプチャを使うと、アプリを再起動するたびにウィンドウを選び直す必要が出てきました1

macOS ウィンドウキャプチャの変化 Before 設定を記憶 OBS 29〜 After 毎回選び直し CGWindowsList API → ScreenCaptureKit

前は記憶してくれていたのに、仕様が変わっているのです。

1.1. CGWindowsList API

以前のOBSはmacOSのCGWindowList APIを使ってウィンドウを取得していました2
この方式ではウィンドウのタイトルやIDをOBS側で保持できたため、一度設定したウィンドウを自動で再認識できることが多かったのです。

2. ScreenCaptureKitに変わった(macOS 13〜)

しかし、macOS 13以降、AppleはScreenCaptureKitという新しい画面キャプチャフレームワークを導入しました3

ScreenCaptureKit への移行 CGWindows List API ウィンドウID を記憶 〜macOS 12 macOS 13〜 Screen CaptureKit 再起動ごとに 新しいIDを 割り当て OBS 29〜対応 自動追跡 不可 設定が毎回 リセット これはOBSのバグではなくAppleの仕様

OBSはこれに対応する形で内部を切り替えており、旧来のCGWindowList方式は非推奨になっています。

ScreenCaptureKitはキャプチャ対象をユーザーが都度許可する設計で、ウィンドウIDがアプリの再起動や再生成のたびに変わります。
同じウィンドウとして追跡し続けるしくみを持たないため、OBSはウィンドウを自動追跡できなくなりました4

この変更はOBSのバグではなく、ScreenCaptureKitの設計によるものです。
OBSの開発者フォーラムでも同様の説明がされています。

方式安定性備考
画面キャプチャ範囲はクロップで調整
アプリケーションキャプチャ中〜高複数ウィンドウ時は注意
ウィンドウキャプチャ再起動のたびに再設定が必要になることがある

2.1. ウィンドウキャプチャを使い続けるなら

ウィンドウを閉じないことが前提になります。

ScreenCaptureKitはウィンドウ生成のたびに新しいIDを割り当てるため、一度閉じると別物として扱われてしまうからです5

特に再設定が起きやすいケースは、

  • アプリを再起動したり、ウィンドウを閉じて開き直した
  • ChromeやSlackなどのElectron/Chromium系アプリを使っている
  • macOS Sonoma以降を使っている6

3. アプリケーションキャプチャを使う(推奨)

むしろ、アプリケーションの画面を追跡するなら、アプリケーションキャプチャを使う方が適切です。

ScreenCaptureKit への移行 CGWindows List API ウィンドウID を記憶 〜macOS 12 macOS 13〜 Screen CaptureKit 再起動ごとに 新しいIDを 割り当て OBS 29〜対応 自動追跡 不可 設定が毎回 リセット これはOBSのバグではなくAppleの仕様

ウィンドウを開き直しても設定が維持されやすく、ScreenCaptureKitとの相性も良好です7

Chrome、VS Code、Terminalなど多くのアプリで安定して動作します。

ただし同じアプリで複数ウィンドウを開くと、どれが表示されるかが変わることがあります。

3.1. 【別解】画面キャプチャ+クロップ

あるいは、画面全体を取得すれば、ウィンドウの再生成に影響されません。
OBSではOptionキーを押しながらドラッグすることでキャプチャ範囲をトリミングできます8。配信者や講義録画でよく使われる方法で、設定が壊れにくいのが特徴です。

  1. ScreenCaptureKitへの対応はOBS 28のベータ版から始まり、OBS 29で正式に移行が完了しています。なお、macOS 12ではScreenCaptureKitの不具合が多かったため、OBS 29ではmacOS 12向けのScreenCaptureKit機能を一部無効化し、macOS 13以上へのアップデートを推奨する対応が取られました。 – OBS Studio 29.0 Release Notes
  2. CGWindowList APIはAppleがWWDC22(2022年)の時点で将来的な非推奨を予告していたAPIです。ScreenCaptureKitの登場とともに、CGWindowListおよびCGDisplayStreamは段階的に廃止される方向とAppleが説明しています。 – Meet ScreenCaptureKit – WWDC22
  3. ScreenCaptureKitはWWDC22で発表されたフレームワークで、macOS 12.3から利用可能です。ただしmacOS 12での動作に不安定な点が多かったため、OBSでの実質的な推奨環境はmacOS 13以降となっています。 – Meet ScreenCaptureKit – WWDC22
  4. OBSの開発者フォーラムでは、この挙動をユーザーがバグとして報告しましたが、開発側は「意図した動作(intended operation)」と回答しています。誤ったウィンドウを誤って配信することを防ぐためのセキュリティ上の判断とされています。 – How do you make macOS Screen Capture less clunky? – OBS Forums
  5. KeynoteやPowerPointでは、プレゼンテーション開始時にエディタウィンドウが閉じられて新しいウィンドウが生成される仕様のため、同じアプリ内での操作でもウィンドウIDが変わります。OBSのGitHub Issueでも同様の動作が報告されています。 – macOS window capture loses track of Keynote or Powerpoint presentation windows – GitHub
  6. macOS Sonoma(14)ではScreenCaptureKit自体のパフォーマンスが低下するという問題がOBSの開発者によってAppleにフィードバック(FB13691162)されています。特にWindow Captureモードでのレンダリング遅延が顕著とされており、Display CaptureやApplication Captureと比べても影響が大きいと報告されています。 – macOS Screen Capture performance degradation in macOS Sonoma – GitHub
  7. Application Captureは初期のScreenCaptureKit対応版(OBS 28ベータ)では黒画面になるなど不安定な時期がありましたが、その後のアップデートで改善されています。現在はWindow Captureよりも安定した選択肢として推奨されています。 – Application/Window Capture Beta Issue – GitHub
  8. クロップはソースを右クリックして「変換」→「変換を編集」から数値で指定することもできます。配信中に細かく調整したい場合は数値入力の方が正確です。