OBSを使ったオンライン勉強会の画面づくりの紹介 #3 コンテンツを表示する

kameneko
penguin-lab
Published in
21 min readMay 25, 2020

こんにちは、かめねこです。
今回は、OBS上でZoomとTwitterを表示するさいのTIPSについてご紹介します。特にTwitterは、YouTubeのコメントのように、背景を透過させたり、いいねボタンなどを消したりするような処理をする方法をご紹介します。

概要

#2では、配信の顔となるフレーム画像の作成方法についてご紹介しました。

3回目となる今回は、そのフレームの下に配置するコンテンツ…ZoomとTwitterの表示方法についてご紹介します。なお、本エントリーは「OBSを使ったオンライン勉強会の画面づくりの紹介」と題したシリーズの1つです。ぜひ他のエントリーもご覧いただけると嬉しいです!各エントリーは以下の記事にまとめています。

さて、今回はZoomとTwitterにフォーカスを当てて表示方法をご紹介します。単にウィンドウキャプチャして表示しても良いのですが、もうひと手間加えてかっこよく表示してみませんか?また、Zoomはそのウィンドウに少し癖があるため、単にウィンドウキャプチャすればOKというわけにもいかなかったりします。そのあたりをご紹介させていただきます。

なお、今回はOBSを色々と操作しますが、操作にあたって以下の記事でご紹介している初期設定を行うことをおすすめします。

シーンコレクションの利用

OBSを使う上でぜひとも覚えていただきたいテクニックの1つに、「シーンコレクション」があります。これは、OBSに配置されたシーンやソースなどの状態を複数保存しておく機能です。たとえば、ゲーム配信用とイベント配信用にそれぞれ作成したシーンコレクションを保存しておけば、ゲーム配信時にはそれのシーンコレクションを、イベント配信時にはそれのシーンコレクションを選択することで簡単に環境を構築できます。

新規にシーンを作成する

シーンを作成するのは非常に簡単で、OBS上部のメニューから「シーンコレクション」 → 「新規」と選び、名前を入力すれば作成されます。作成されたシーンは、シーンが1つだけ配置され、それ以外は何ない真っ白な状態になります。

また、特に意識していなければ「無題」というシーンが使われていると思いますので、これの名前を変更することも可能です。これも、「シーンコレクション」 → 「名前を変更」から簡単に変更できます。

なお、シーンコレクションには、フォルダのような機能はないため、たとえばイベントごとに分けてシーンコレクションを持っている場合はシーンコレクションがカオスになりがちです。ですので、私は以下のように先頭にPrefixをつけて管理しています。

シーンコレクションを利用することで、簡単にシーン構成を呼び出せるため、一時的に検証のためにまっさらな環境を用意して、終わったらすぐにもとに戻すことができます。また、JSON形式でインポート/エクスポートが可能ですので、作成したシーンコレクションを他人に渡す事もできます。その場合は、各種ファイルのPATHが絶対PATHとなっているので、環境によって置き換える必要があります。

Zoomのウィンドウをキャプチャする

Zoomのウィンドウをキャプチャするときの注意点

Zoomのウィンドウをキャプチャする際に気をつけなければならない点があります。まずは、実際に体験するために手元でZoomのミーティングを開始してみてください。可能であれば、複数のメンバーで接続し、誰かが画面共有するとより分かりやすいと思います。

以下の画像は、Zoomのミーティングを開始したときの、OBSのウィンドウキャプチャのウィンドウ一覧です。Zoom.exeから始まるウィンドウが全部で3つあることがわかります。これらのうち、どれをキャプチャしたらよいのでしょうか?それぞれ説明いたします。

まず、 [Zoom.exe]: Zoom となっている一番下のウィンドウですが、これは以下のようなZoomのトップメニューウィンドウです。Zoomはミーティングウィンドウと、メニューのウィンドウが分かれており、こちらはミーティングの状態に関わらず開いていれば常に存在します。

続けて、 [Zoom.exe]: (null) とあるウィンドウについてですが、これはミーティングウィンドウがフルスクリーン時に生成される疑似ウィンドウです。実際にはウィンドウとして表示されていないのですが、Zoomの仕様上、このウィンドウがシステム的には生成されます。このウィンドウは、Zoomミーティングウィンドウをフルスクリーンからウィンドウ表示もしくは全画面表示に切り替えることで消えます。通常選択することはありません。

最後に、 [Zoom.exe]: Zoom ミーティング とあるウィンドウについてご紹介します。このウィンドウは、Zoomミーティングウィンドウそのもので、配信時はこのウィンドウをキャプチャします。

ただし、初期状態ではその挙動に注意が必要です。ミーティングウィンドウの任意の場所をダブルクリックして、フルスクリーンとウィンドウモードを変更してみてください。OBSのキャプチャは正しく行えていますか?もしかして、OBS側のウィンドウキャプチャが停止してはいませんか?これは、フルスクリーンとウィンドウモードを変更するときに、Zoom側で新規にウィンドウを生成しているため、OBS側がキャプチャしているウィンドウが消えてしまったと認識されているためかと思われます(詳しくは分からないですが…

また、Zoomには便利機能として「誰かが画面共有したら、自動的にウィンドウをフルスクリーンにする」機能があります。便利ではあるのですが、画面共有を切り替えるたびに、ウィンドウのキャプチャをやり直さなければなりません。

そこで、次の設定を変更しましょう。Zoomクライアントの設定から、「画面を共有」→「参加者が画面を共有した場合、全画面に移行」のチェックボックスを外します。こうすることで、自動的に画面がフルスクリーンになる心配はありません。

ということで、Zoomのウィンドウをキャプチャするときには、以下の点に留意しておきましょう。

  • キャプチャするウィンドウは「 [Zoom.exe]: Zoom ミーティング 」ウィンドウ
  • フルスクリーン・ウィンドウモードを変更するとウィンドウキャプチャが外れる(基本的にどちらかに固定する)
  • 意図しないフルスクリーンを防ぐため「参加者が画面を共有した場合、全画面に移行」設定を外しておく

全画面モード

Zoomのウィンドウをキャプチャする際、ミーティングウィンドウをフルスクリーン・ウィンドウ・全画面モードのいずれかにしておく必要がありますが、おすすめは「全画面モード」です。

全画面モードは、ウィンドウ右上の全画面ボタンをクリックして変更します。これは中身は実質ウィンドウモードですので、全画面 ⇔ ウィンドウモードを切り替えてもキャプチャが外れることはありません。

さらに、全画面モードを選ぶ理由として、チャットなどの通知バッヂが出ないことが挙げられます。フルスクリーン時、ミーティングチャットに新規の投稿があった場合、以下のように画面上にオーバーレイして表示されます。

通常のミーティングであれば非常に便利ですが、勉強会の配信ではコンテンツを邪魔してしまう可能性があります。しかし、全画面モード(ウィンドウモード)では、サイドにチャットを埋め込むことができ、そこに表示されるためセッションを邪魔することがありません。

ウィンドウモードでは参加者とチャットをサイドに置いておける(便利

なお、全画面モードでは絶対に通知が出てしまうかというと、そんなことはありません。これはウィンドウモードでも利用可能ですが、チャットをウィンドウとして独立して表示させることができますので、これを表示させておくことで通知の表示を防ぐことができます。特に前面に表示させておく必要はなく、ウィンドウを出しておけば問題ありません👍

「それなら全画面モードでもいいじゃねーか!」と思われたかと思いますが、実際そのとおりです笑 ただし、全画面モードではチャットウィンドウを表示させる必要があるのですが、意外と忘れて本番を迎えてしまうものです。全画面モードであれば、以下のようなレイアウトに視覚的になるため、忘れてしまったことに気づきやすいという点で評価しています。

当日のオペレーションはできるだけ簡略化しておくほうが何かとメリットが多いので、そういう点を評価して全画面モードを推奨しています。

キャプチャ方法

さて、長々とご説明しましたが、それでは実際にZoomのミーティングウィンドウをキャプチャしてみましょう。

キャプチャする際は以下の手順を行います。

  • Zoomを「全画面モード」に切り替える
  • 参加者・チャットウィンドウをサイドに表示させておく

全画面モードには、ウィンドウの「全画面ボタン」を利用します。ウィンドウのタイトルバーが表示されていればOKです。参加者・チャットウィンドウはそれぞれウィンドウ下部のメニューから選択すればOKです。

もしも外部ウィンドウとして飛び出してしまったものを、ミーティングウィンドウに戻したい場合は、メニューから「会議ウィンドウにマージ」を選択すればスッっと戻ってくれます。

これで、以下のようにウィンドウを配置できればOKです。なお、前述したとおり、全画面でなくとも、ちゃんと各種ウィンドウを表示させておけばフルスクリーンでもOKです。

続けてOBSの操作に移ります。OBSのソースにZoomのウィンドウを追加しましょう。ソースウィンドウから 「+」 アイコンを押して「ウィンドウキャプチャ」を選択します。

Zoomなど適当な名前をつけ、プロパティ設定から対象のウィンドウを選びます。ウィンドウ名は「 [Zoom.exe]: Zoom ミーティング」です。併せて、Windows10であれば、そのままでは以下の画像のようにミーティング画面が真っ白になってしまいます。

これは、キャプチャ方法がレガシー「BitBlt」な手法を利用していることから発生します。

Windows10(1903以降)では、「Windows Graphics Capture」を選択することで正常にキャプチャされます。

さらに、このままではサイドの参加者ウィンドウなどが邪魔なので切り抜きます。Altキーを押しながらウィンドウキャプチャの辺をドラッグします。すると、以下のように緑色の線でコンテンツの一部を切り抜くことができます。

ちなみに、OBSで要素のサイズを変更させる方法として、以下の3つがあります。

  • 縦横比を維持したままサイズ変更: 何もキーを押さず辺や頂点をドラッグ
  • 自由変形: Shiftキーを押しながら辺や頂点をドラッグ
  • コンテンツを切り抜き: Altキーを押しながら辺や頂点をドラッグ

これで以下のようにウィンドウをキャプチャできました。フレーム画像との合成はこのあと行うため、今はウィンドウサイズなどは気にしなくてもOKです。

Twitterを表示させる

続けて、Twitterを表示させましょう。Twitterの表示方法にはいくつか方法がありますが、もっとも多いのが TweetDeck を表示する方法でしょう。

Twitterは、数年前に User Stream API の提供を廃止しており、リアルタイムなタイムラインの更新が実質できなくなりました。そんな現代において、唯一擬似的にリアルタイム更新を実現しているのが、公式のTweetDeckなのです。

TweetDeckは、正しくはリアルタイムではなく、実際には4秒に1回更新を行っています。それでも、開発者に提供されているAPIの15分/15回 (実質1分ごとに1回)の制約を受けていないため、現在においてもっとも現実的な選択肢であると言えるでしょう。

TweetDeckはブラウザ上で動くため、環境依存が少なく、ブラウザをキャプチャするだけで簡単に表示できますが、少し手を加えることでよりリッチに表示することができます。

ブラウザソースの利用

OBSに追加可能なソースの1つに、「ブラウザソース」があります。これは、OBS内蔵のブラウザを使ってWebサイトなどを表示する機能で、別途ウィンドウキャプチャをする必要がありません。

ブラウザソースを利用する場合と、ブラウザをキャプチャする方法では、大きくは結果は一緒ですが、次のようなメリットがあります。

  • OBS内のブラウザを利用するためホストの環境に依存しない
  • キャプチャ用にブラウザを立ち上げておく必要がない
  • OBS終了時に保存され、起動時に以前の設定を引き継いで起動してくれる

ブラウザリソースはその性質上、サンドボックス環境であるためホストOSの影響を受けづらいというメリットがあります。これは、たとえばキャプチャしているウィンドウにマウスが写り込んでしまったり、何かしらの理由によってブラウザがクラッシュしてしまった際に巻き込まれる心配がありません。

また、OBSは終了時に前回の設定を読み込んで再度展開してくれますが、特にブラウザソースはOBS内で完結しているため、特に何も気にせず立ち上がってくれます。つまり、別途ブラウザを立ち上げて、適切なサイズに変更して…というような作業は不要です。

そんなわけで、ブラウザソースの利用を推奨しています。以下から、ブラウザソースを使ってTweetDeckを表示する方法をご紹介します。

TweetDeckを表示してみる

ソースの「+」アイコンから「ブラウザ」を選択して新規にブラウザソースを任意の名前で作成します。「URL」に「https://tweetdeck.twitter.com」を入力しましょう。以下のようにログイン画面に遷移しているのがわかります。細かい設定は一旦置いといて、Twitterにログインします。「OK」を押してウィンドウを閉じます。

作成されたソースを右クリックし、「対話」をクリックしましょう。こうすることで、作成されたブラウザソースを直接操作することが可能です。

あとは通常の操作と同様に、ログインを行えばOKです。

なお、ブラウザソースではクリップボードが利用できないため、全て手打ちする必要があります。

併せて、手元のブラウザなどで予めTweetDeckにログインしておき、カラムを準備しておきます。というのも、OBSのブラウザソースでは、クリップボードが利用できない他に、日本語入力ができません。そのため、日本語のハッシュタグなどは入力できません。ただし、TweetDeckのカラム設定は全てサーバに保管されるため、どこかで変更した内容は、次回読み込み時に反映されます。ですので、一旦手元でログイン→カラム作成をして、TweetDeck側で反映させれば問題ありません。

カスタムCSSを当てる

さて、ログイン・カラムの反映が完了したら以下のような状態になっていると思います。

続けて、カスタムCSSを当てていきます。カスタムCSSを当てることで、背景透過やいいね・RTボタンの非表示を行っていきます。

まずは、ソースの幅と高さをそれぞれ以下のように変更します。

  • : 500
  • 高さ: 1080

幅はざっくりとした数値でOKです。高さは、OBSのカンバスの高さに比例します。つまり、4Kの場合は2160です。

続けて、「カスタムCSS」に以下のCSSを挿入します。既存のbodyセレクタの下に挿入してください。

*{background-color: rgb(0,0,0,0)!important;}
.js-column-header{display: none!important;}
.js-team-invitations-back{display: none!important;}
.tweet-footer{display: none!important;}
.column{width: 100%!important;}

それぞれの内容については一旦言及しませんが、これを挿入して「OK」を押します。すると、以下のように背景が透過され、いいねなどのアイコンが削除されていることがわかります。

さらに、左側のメニューは Alt+ドラッグで切り抜いてしまいましょう。微調整して、以下のようにツイートがいい感じに表示されればOKです。

フレーム画像とマージする

最後に、前回作成したフレーム画像とマージしていきます。

ソースウィンドウの「+」アイコンから「画像」ソースを選択し、適当な名前をつけます。

作成したフレーム画像を読み込みます。

以下のように、画像が読み込まれました。最後にこれらの配置を調整します。

また、このとき気をつけなければならないのが各ソースのレイヤーです。以下のように、必ずフレーム画像が最上位にある状態を意識してください。

Zoomウィンドウは特別な操作もなく、メインのスライド用ウィンドウにはめ込みます。このとき、フルスクリーンモードであれば16:9なのでほぼぴったりに合いますが、全画面モード(ウィンドウモード)であればサイズが合わないことがあると思います。こんなときは、別の人やマシンからミーティングに参加し、画面共有を行ってもらい、その結果に併せてサイズを変更します。上下左右のどこかに余白ができても問題ありません。また、上部のメンバー一覧は不要であれば切り抜いてしまっても良いと思います。

続けて、Twitterの表示を調整します。現在のままでは、枠に対して大きいので調整する必要があります。単にウィンドウをドラッグしてサイズを変更しても良いのですが、文字がぼやけてしまいます。

しかし、実は先程のカスタムCSSで、ウィンドウサイズに併せてTweetDeckのカラムサイズも伸縮するように変更してあります。そのため、ブラウザソースの幅を変更すれば、適切な解像度を維持したままサイズを変更できます。今回は450pxを指定したらちょうどいいサイズになりました。

あとは、縦が大きすぎるので、Alt + ドラッグで切り抜きます。なお、このとき下部から切り抜くように気をつけてください。そうでないと、最新のツイートが表示されません。以下のように、上の編は赤線(切り抜きを行っていない)状態であればOKです。

なお、プレビュー画面では本当に解像度が適切かどうか、分かりづらいことがあります。そんな場合は、何もソースを選択していない状態で、プレビュー画面左右の余白を右クリック → 「全画面プロジェクター(プレビュー)」を使用することで、適切なサイズでプレビューできます。

以下のようにカッチリと表示されていることがわかります。

その他、細かい点を修正して、フレーム画像とのマージが完了しました。かなり見栄えが良くなったのではないでしょうか?

最終的にZoomのウィンドウは参加者を切り抜きました

終わりに

今回は予想以上に長くなってしまいましたが、無事フレーム画像とマージしていい感じの画面を作ることができましたか?もし何かわからないことがあれば、コメントやTwitterでご連絡ください。

次回は、背景やその他のテキスト周りの処理についてご紹介します!

--

--

kameneko
penguin-lab

PrometheusとかKubernetesとか物理、配信とかが好きなしがないエンジニアです。さくらインターネットという会社であれこれしています。ペンギンがとても、とても好き。