【StreamFX】任意のWEB会議ソフトでバーチャル背景を設定する【OBS-Studio】

# はじめに
WEB会議が主流になる昨今、様々なWEB会議アプリを利用する機会があると思います。Zoomなどではバーチャル背景を設定することができますが、全てのWEB会議アプリがバーチャル背景を設定できるわけではありません。私は部屋の中が散らかっているので、全てのWEB会議で絶対にバーチャル背景を設定したいと考えています（←部屋を片付けるべきですが）。
そこで本記事では、「OBS-Studioの仮想カメラ」とその拡張プラグインである「StreamFX」をを用いて、バーチャル背景を設定してその映像をWEB会議に流すことを目的とします。

# 各種ソフトウェアのインストール
今回は以下の３種類をインストールします。
1. OBS-Studio
1. StreamFX
1. NVIDIA BROADCAST

## OBS-Studioのインストール
[コチラの公式ページ](https://obsproject.com/ja/download)から自身の環境に合ったインストーラをダウンロードしてください。
https://obsproject.com/ja/download

## 拡張プラグイン「StreamFX」のインストール
[コチラのGitHubのページ](https://github.com/Xaymar/obs-StreamFX/releases/tag/0.11.0)下部にあるAssetsから自身の環境に合ったインストーラをダウンロードしてください。
https://github.com/Xaymar/obs-StreamFX/releases/tag/0.11.0
Windowsなら「streamfx-windows-2019-0.11.0.0-g31d56703.exe」、 ~~Macなら「streamfx-macos-10.15-0.11.0.0-g31d56703.pkg」~~ をダウンロードしてインストールしてください。（最新のバージョンがあれば適宜変更してください。本記事では「0.11.0」をインストールしています。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/bf372919-ecf1-9953-4706-b9b312c9c10d.png)

※指摘を受け訂正（@mmdisc様、ご指摘ありがとうございました。）
> StreamFXはWindows/Mac/Linuxに対応していますが、OSによって使える機能が異なります。
https://github.com/Xaymar/obs-StreamFX/wiki
今回の「バーチャルグリーンスクリーン」はWindowsにしか対応していません。
https://github.com/Xaymar/obs-StreamFX/wiki/Filter-Virtual-Greenscreen
同じようなことをMacやLinuxで実現しようとしたら以下のようなプラグインを使うことになります。
Background Removal プラグイン
https://obsproject.com/forum/resources/background-removal-portrait-segmentation.1260/
Background Removal プラグイン
https://obsproject.com/forum/resources/obs-virtual-background-plugin.1371/

## NVIDIA BROADCASTのインストール
[コチラのNvidiaのページ](https://www.nvidia.com/ja-jp/geforce/broadcasting/broadcast-sdk/resources/)から自身のGPUに合ったビデオエフェクトパッケージをダウンロードしてください。
https://www.nvidia.com/ja-jp/geforce/broadcasting/broadcast-sdk/resources/
下図の真ん中にあるビデオエフェクトパッケージから自身の環境に合わせてインストーラをダウンロードしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/877422fd-8d8b-44d9-1c9c-4009521b6933.png)

# バーチャル背景を設定

バーチャル背景を設定する手順としては、以下の通りです。
1. OBSでカメラ映像を取り込む
1. フィルタ機能を用いて人物だけを抽出する
1. 背景画像を差し込む
1. バーチャルカメラを起動して、WEB会議ソフトでその映像を選択する

## OBSでカメラ映像を取り込む
先ほどインストールしたOBS-Studioを起動します。まず、左下のシーンの＋ボタンを押して、新しいシーンを作成します。（今回は「qiita」という名前にしました。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/234afaac-1d1c-6aba-1b05-098a88058f9d.png)

次に、その隣にあるソースのプラスボタンを押して、「映像キャプチャデバイス」から利用するカメラを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/aa905204-4829-7e1e-1c4b-c8c7415a80b5.png)

これで、OBSのプレビュー画面上にカメラ映像が映っていれば成功です。

## フィルタ機能を用いて人物だけを抽出する
このままでは、後ろの汚い部屋が映りこんでしまうので、StreamFXのフィルタ機能にある「バーチャルグリーンスクリーン」を利用して人物だけを抽出します。
先ほど、ソースに追加したカメラを右クリックして、フィルタを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/297020e8-a35c-216e-5ba1-0c9f5e558eae.png)
フィルタ画面の左下にある「エフェクトフィルタ」にある＋ボタンを押して「バーチャルグリーンスクリーン」を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/6270c1d7-6b44-309c-9d08-e9c681bb00b4.png)
すると、右上のプレビューに背景が除去された映像が出力されていると思います。（モードは品質、プロバイダーは自動にしました。）
これで、汚い背景が映りこむことが少なくなりました。

## 背景画像を差し込む
このままでは、人物だけが浮いているので、カメラ映像の後ろに背景画像を差し込みます。
ソースに「画像」を追加して、好きな画像を選択してください（本記事では「back」という名前にしました）。そして、ソース内のレイヤーを以下のように（カメラ映像が上になるように）並べ替えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/d5cb0b2b-79e5-3460-1d89-fffd01881563.png)
すると、人物だけが切り取られたカメラ映像の後ろに選択した背景が表示され、あたかも背景画像内に人物がいるように映ります（以下の写真では、恥ずかしいので顔の部分は切り取っています）。
![bbb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300353/9cdb1d8a-cad1-8484-da3d-77e1f3f5401e.png)

## 仮想カメラを起動して、WEB会議ソフトでその映像を選択する
流したい映像はこれで作れたので、後はWEB会議にこの映像を流すだけです。ここでは、OBS-Studioの機能にある「仮想カメラ」を利用します。右下のコントロール内にある「仮想カメラ開始」を選択すると「OBS Virtual Camera」がWEB会議ソフトで選択できるので、それを選択すると今回作成した映像をカメラ映像として出力することができます。

# おわりに
今回は私が元々OBSを利用していたため、OBSを活用したバーチャル背景作成に取り組みましたが、今回の方法以外にもバーチャル背景を生成する専用のアプリなどもありますので、自身に合った方法でオンライン時代に対応していきましょう～！それでは、お疲れさまでした。

# 参考
[OBSの神プラグインにまた新機能。配信やWeb会議の画面を拡張現実っぽく見せることが可能に](https://pc.watch.impress.co.jp/docs/topic/feature/1388528.html)