OBS Studioの出力映像を外部レコーダーで負荷分散するTips

OBS Studioは録画と配信が同時にできるスグレモノのフリーソフトですが、PCがあまりハイスペックではない場合(dGPU非搭載PC等)、1台に両方を賄わせようとすうると厳しいものがあります。そこでHDMI入力のある外部レコーダーやキャプチャ装置をつけた他のPCにどちらかを任せてしまうことを考えます。しかしその際に問題になるのが、PCの画面をHDMIでそのままミラーリング出力した場合、OBSのUIなども一緒に映り込んでしまいます。なんらかの方法で範囲指定してクロップした場合も、解像度が落ちてしまったり、うっかりウインドウ位置を変更したら録画位置から外れてしまうなどの問題があります。

これを解決するためのOBS Studioの便利技を見つけたので書き残しておくことにします。

皆さんは2画面モニタのPC(ノートPC+プロジェクターなどでも可能)PowerPointのスライドショーを使ったことはおありでしょうか。あれってメインモニタ(=内蔵モニタなど)側には様々な操作をするUI込みのスライドが映り、サブ画面(=プロジェクター側)にはスライドのみが全画面表示されます。あの状態であればサブ画面側のHDMI映像をそのまま録画すれば余計なものが映り込んだり、表示区域がズレたりといった事故は起きません。以下でお伝えるのはまさにそれをOBS Studioで実現するための方法です。

Windowsで説明しますが、Macでも基本同じようにできるはずです。

1) 録画(配信)機器をサブモニタとして認識させる

PCにサブ画面用のHDMI出力があればそこに録画機器をつなぎます。設定によってはメインモニタとサブモニタに同じ内容が表示されるミラーリング(複製)モードになっている場合があります。ディスプレイ設定を開き、「1|2」のような表示になっていたらミラーリングモードです。

ミラーリング設定になっている場合の表示

この場合、そのまま画面を下にスクロールし、「マルチディスプレイ」から「表示画面を拡張する」を選びます。

ミラーリング(複製)から拡張設定に変更

そうすると最初の図が下のように「1」と「2」が別々に分かれて配置されると思います。これでサブモニタが独立した第2モニタとして設定されたことを示します。1と2の位置関係は変更可能ですが、今回はどこにあっても構いません。解像度は録画機器が対応する最大解像度になっていると思いますが、必要なら変更しておきます。

デスクトップ拡張モードに変更した状態

■OBS Studioからサブモニタをプレビュー用に使う

次にOBSを起動し、プレビュー画面上で右クリックし下図のように「全画面プロジェクター」→外部モニタのモデル名を選びます。写真ではATEM Mini Proをつないでいますがメーカー名のBlackmagic Designを略した「BMD HDMI」という名前で認識されていました。

OBSのプレビューを右クリック

これで、OBSが出力用にレンダリングしている映像がセカンダリモニターに文字通り全画面表示されます。プライマリモニター上でOBSのサイズをかえたりしても影響を受けません。またスタジオモード(シーン変更などをプレビューしてから反映させる2画面モード)を使っても常に出力画面側が送られます。

後は録画機器側で録画するだけです。応用としては、外部接続を配信用のエンコーダー機器にするとか、HDMI-UVCキャプチャアダプタで別PCに取り込むとかも可能でしょう。

これでOBSが稼働するPC側では録画(配信)を行わなくてよくなるので、その分負荷を下げられるわけです。HDMIケーブル1本で接続できるので比較的距離をおいた場所に配置できる点も良いです。

試してないですが、キャンバスや出力解像度を4Kとかにして、Elgato 4K60S+のようなハードウェア4Kキャプチャ機器をつなげば、フルHD x4みたいなマルチカメラ映像も縮小無しで高解像度に安定して4Kキャプチャできちゃうのじゃないかなと。

参考になれば幸いです。

NDIを使ってTeamsインタビューの録画レイアウトをカスタマイズする

TeamsやZoomを使ってリモートUTやリモートインタビューを実施することも増えているご時世かと思います。こうしたオンライン会議ツールはボタンひとつで録画が行われるのも便利な部分ですが、UTに使うににはやや難点あります。それは複数の画面ストリーム(UTだと、参加者カメラ、モデレーターカメラ、画面共有など)を1つの録画映像としてレイアウトする時の自由度の低さです。UTでは画面共有がメインで大きくみたいことがほとんどだと思いますが、そこの制御が自動まかせで意図通りにいかないことがあります。3ストリームが単純2×2の四分割とかになると、無駄に顔が大きく映っていて、共有画面が小さく文字が読めない、しかも1/4は真っ黒で無駄、みたいな。Zoomだといくつかのパターンから選べるみたいですが、これもやっぱり制約は残ります。画面の右上が重要だから話者は左下に置きたい、とか。こうしたレイアウトはサーバー側で組まれた状態で配信されるので、クライアント側ではどうしようもないと思っていました。

しかし、TeamsでNDI出力という機能を使うと、参加者毎、画面共有、アクティブスピーカー(自動切り替え)といったストリームを個別に取り出せ、しかもOBS Studioのプラグインを使えば独立のソースとして扱えるということがわかりました。OBS上で独立ソースとして受けられるのであれば、レイアウトは好きに組み放題で、それを録画したり別のサービスに配信したりも可能です。またこれらの映像/音声はネットワークを経由した伝送になるので、TeamsクライアントとなるPCとOBS Studioで録画/配信を行うPCを分けることができ負荷分散させることもできます。

ということで早速テストしてみました。

Teamsの映像/音声を外部送信するのはプライバシー的な問題もあって許可設定が多段になっていているので順を追って説明します。

■Teams管理者画面でNDI出力を許可する

はい、いきなりこれが一番大きな壁です。大元のところでNDIを許可する必要があります。私は個人契約なのでホイっとONにするだけですが、企業アカウントとかだと管理者に事情を説明してONにしてもらうのが大変かも知れません。頑張ってください。全員まとめてON/OFFではなく会議ポリシーというのを複数作成してわけることができるので、きちんと設定すればリスクは最低限にできるはずです。

参考までに「Teams管理センター」(Web)の画面を貼っておきます「会議ポリシー」を開くと、作成済みのポリシーセット一覧画面になるので、許可したいポリシーセットを選びます。私は個人なので「グローバル(組織全体の規定値)」を選んで丸ごと許可してしまいました。「NDIストリーミングを許可する」を「オン」にします。以下の第二、第三の壁があるので、意図せず会議が盗聴されるようなリスクはほぼないんじゃないかなと思います。

Web管理画面

■Teamsクライアントアプリ上で有効化する

次がTeamsアプリ上での許可です(ブラウザやモバイルアプリではできません)。「アプリのアクセス許可」を開くと「ネットワークデバイスインターフェイス(NDI)」という項目があるので有効化します。

PC用Teamsアプリの設定

これはトラップがあって、「Teamsアプリを起動する度にオフに戻る」仕様となっています。うっかり有効化したままにならないようにとの配慮なんでしょうが、忘れがちなので↓の操作ができなかったらここを再確認してみてください。

■会議ごとの開始操作

最後に会議中の開始操作が必要です。三点メニューから「NDIで送信」を選びます(止める時も同じところから)。

会議中に個別に開始操作

ここまでしてようやくネットワーク上にNDIフォーマットでのポートが開くことになります。

■OBS Studioで受信する

NDIはNewTek社が策定した規格なので、準拠している製品からなら送信や受信ができます。ここでは無料ツールのOBS StudioをTeamsと同一PC上で起動してテストします。

OBS Studioの基本操作はこちらの記事などを参考にしてください。

OBS Studio単体ではまだNDIに対応しておらず、別途こちらのプラグインをインストールします。Releaseページからお使いのOSにあわせたインストーラーをダウンロードしインストールします(Windows版は再起動が必要でした)。

インストール後にOBSを起動すると、ソース一覧に「NDI Source」が出現するはずです。こちらを追加してやるとプロパティ画面が開き、「Source name」プルダウンメニューにTeams会議上の参加者別のストリームが現れます。

NDI Sourceからストリーム一覧が選べる

この例だと「ローカル」が同一PC上のカメラ画像、「古田一義」がスマホから参加したカメラ画像、「共有画面」はその名の通り共有画面で、「アクティブなスピーカー」は今しゃべっている人のカメラ画像に自動で切り替わるストリームだと思います。

必要な数宇だけ「NDI Stream」ソースを追加し、ここでそれぞれのストリームを選んでやるだけです。

ちなみにTeamsはネットワーク速度にあわせて解像度を変化させていまうので、それに追随させずに大きさを固定にする方法はこちらの記事が参考になります(「余談」のすぐ上の辺り)。

「アクティブなスピーカー」をソースにする場合も設定しておくのが良いかも知れません(スマホ参加者だと縦長になったり)。

■まとめ

今まで名前くらいしか知らなかったNDIという規格ですが、色々と使い道がありそうです。Teamsから個別のストリームが取り出せるならば、インタビューをTeamsで実施しつつ、OBSで特定の画面だけ取り出したり自在にレイアウトをした映像を見学者向けにZoomで配信したりとかもできます。

またスマホのカメラ映像をNDI出力するアプリを使えば、OBSのソースに直接取りこめるので、なんらかのツールでいちどPCの画面に映したものをOBSでウインドウキャプチャする、みたいなことをしなくて済むようになり、画面の使用効率を良くなるしおそらく負荷的にも軽くなるんじゃないかと期待されます。そうしたアプリとしてはNDI HX CameraがiOS、Androidともにあります。

iOS版がちと良いお値段しますが、憶えておいて機会ができたら試してみようと思います。

他にもHDMI入力をNDI出力したり、その逆をするハードウェア製品も存在するようで、思索が広がります。

ちなみにATEM Miniシリーズで有名なBlackmagic Design社からも似たようなネットワーク映像/音声ストリーム->HDMI変換装置Streaming Bridgeが出ていますが、NDIとは互換性がないようです。どちらかといえばRTMP勢で、ATEM MiniやOBSからの配信を受けてHDMIでモニターに映すなどするものと思っておけばよさそう。NDIはローカルネットワークでのやりとりに使うものですが、RTMPならインターネット経由でも使えるので、用途で使い分ける感じですね。こちらも機会があれば試してみたいものです。

 

ノートPCでOBS Studioの負荷テスト(3カメラ、USBマイク、Teams送信)

近く機材持ち込みUTで3カメラの映像をミックスしてTeamsに中継することになりそうなので、手持ち機材で追いつくかどうか検証してみました。

■機材説明

PC

2018年購入のDELL XPS 15 2-in-1(9575)で、第8世代のCore i7/定格3.1GHz、4コア8スレッドのCPUに、AMD Radeon Vega Mをオンチップで抱き合わせた8705Gという異色のモデル。メモリが16GB、SSDが1TBという感じ。

ゲーミングPCとまでは行かないまでも、独立GPU(dGPU)がついています。ただしOBS StudioはどちらかといえばNvidia (GeForce)贔屓で、最近ではNvidia Broadcast(音声ノイズ除去)相当のライブラリも搭載するなどして、「ノートでOBS Studio配信するならGeForce RTX搭載モデルだよね」という風潮があります。エンコード処理はCPU単体で回すかdGPUのハードウェア支援を受けられるかでかなり負荷が違うので、どうだろうなーと思っていました。

映像ソース

クライアントが所持するカメラを使用。UVC互換のフルHD Webカメラを3アングル。のでHDMIキャプチャなどは必要なし。そのままOBSの「映像キャプチャ」デバイスとして認識させられるはず。

今回のテストでは同型、同性能のWebカメラが3台手元になかったので、少し古い製品も含めての計測になりました。

  • 4K/60pのLogicool BrioをフルHD/30p設定
  • 同じくLogicoolのかなり古いWebカメラを864×480/15fps
  • XPS内蔵カメラを1280×720/30p

という設定。1920×1080/30pよりやや軽いコンディションになるので、代わりにというかタスクマネージャーのCPUグラフを「ウインドウキャプチャ」で取り込んで配置してみました。

(2021.6.15追記:フルHDx3ソースのテストも結果のところに追記しました)

BRIOはなぜかUSBハブ経由では映らず本体Type-Cポートに直結する必要がありました。ここらへん、当日のカメラでどうなるかわからないのでハブやA->C変換アダプタはいくつか予備をもっていこうと思います。

2021.6.15追記:BrioのハブはXPS9575の左側のThuderbolt3対応ポートにしたらハブ経由でも映像がとれました。

音声ソース

本番でも使う予定のRODE Wireless Go IIをUSB接続。送信機を2台起動しステレオの単一トラックとして入力。

またいつも使用しているNVidia Broadcastのノイズキャンセルが使えないので、代わりにKrispをインストールして試してみました。

設定周り

OBS Studioでのエンコード出力レートは2.5Mbps。また仮想ビデオ機能をオンにして、Teamsのカメラソースに選択し無人のオンライン会議に流した状態で計測を行いました。本番でも自分以外はすべて見学者でカメラ、マイクをオフにする想定なので、おそらくTe

■OBSでハードウェア支援は受けられる?

CPUダイにRadeon Vega Mが統合されているので、obs-media-encoderをインストールすればOBS Studioでハードウェア支援を受けられるかと思いきやメニューの現れず。

ただしIntel側の支援機能である「QuickSync H.264」が出ていたのでそれを使うことに。

■測定結果

結論からいうと「どうにかいけそう」という感じ。OBS上の読みで10%前後、タスクマネージャーによるシステム全体の負荷が50%前後で推移して30分くらいは正常に録画できました。録画したままKrispをインストールしたらOBSが落ちたのでそれはまぁそのせいだと思って一旦計測は終了。本来は90分程度のセッションになるので本番前に一度は回しておきたいところ。

そしてKrisp(CPU演算を使うノイズキャンセラー)を有効にしたところ、システム負荷が+10%といったところです。つまり60%台。一応余裕はあります。

ゲームをしながらOBSで録画/配信をするとなると厳しいですが、そういうメインタスクなしで純粋にエンコードするだけならなんとか賄えそうかなという感想です。各ソースが1080p/30pになったりするとどう変わってくるかですが、一応次のテストではこの構成でいってみようと思います。

あるいはそれまでにAMDのハードウェア支援も試してみたいところ。

追記:結局OBSでAMDのハードウェア支援(VCE)を有効にできてはいませんが、代わりにXSplit Broadcasterを使って同じフルHDx3ストリームで録画しながら仮想カメラ機能でTeams配信を行ってみたところ、システム全体のCPU使用率は50~60%の微増。かつ同時にブラウザを起動すると100%になりがちとなりました。警告ダイアログも出ました。OBS使用中でも同じ様に跳ね上がるものの80~90%台に収まる感じ。XSplitでは明示的にCPU/Intel QuickSyncVideo/AMD VCEの使い分けを指定できるので、QSVに固定してみても傾向はかわらず。XSplit自体の重さなんでしょうか。エフェクトなどは充実していてちょっと使ってみたいとも思ったんですが、今回の案件ではちょっと厳しいかな。余裕のあるリモート調査(デスクトップPCが使える時)などに試してみようと思います。

フルHD x3入力で追試

Brio、ATEM Mini Pro、AverMedia BU110を組み合わせて本番に近いフルHDの3入力体勢を組んで追試しました。結果は大差なし。むしろ下がったくらいで40%前後(タスクマネージャー読み)で録画&Teams配信できました。またソースをON/OFFしたり、入力解像度をフルHDと720pで切り替えたりしてもさほど変わらなかったことから、「入力ソース解像度に寄らず、レンダリング後の出力映像のエンコード負荷が大半を占める」ということが言えそうです。もちろんソースをOFFにする毎に僅かずつCPU負荷は下がっていくんですが、全部OFFにしてタスクマネージャーの画面キャプチャのみにしても30%台のままで、1ソース辺りの負荷は2,3%の誤差という感触でした。

OBS Studioでの録画(H.264変換)と、仮想カメラ機能を経由してTeamsがエンコードしてるのと同じ映像を2ストリームで変換してる気がしますが、どちらもハードウェアエンコードが効いているんでしょうかね。

■もしダメだったら…

近日中に予定されている接続テストで本番通りのセットアップをして検証する予定ですが、もし負荷が厳しそうとなったら、この辺りのeGPU箱を買って、自宅メイン機のRTX3070を一時的に付け替えてみようかと思っています。幸いXPS 9575はThunderbolt3に対応しています。これならばRTX Broadcastも使えた上でかなり余裕ができるんじゃないかと。

内蔵Radeonがある状態できちんと動いてくれればいいんですが、、、

もう少し安い3万円台のものもあるし、Chromaの光る要素とかは別にいらないですがw、USB3.1のAポートが4つと、Ethernetポートがついているので、ごちゃつきがちな出張荷物、配線を多少でもスッキリさせられるならこれでいっかなと思っています。

あるいはDSP内蔵オーディオインターフェイスのUA AppoloシリーズにC Suice C-Vox Noise & Ambience Reductionというノイキャンプラグインが出ていて気になっています。

これはプラグインソフトウェアをDSPで動かしPC側に負荷をかけないで音声フィルターをかけられる製品らしいのです。ただプラグインだけでも$300以上するし、ハードもDSPコア数が1つのもっとも安いものでも数万円。あわせると結構なお値段だし、そもそもこのプラグインが1DSPモデルでちゃんと動くかどうかもよくわからず手を出しあぐねています。自宅で使う分にはRTX3070 + NVidia Broadcastで特に不満がないので悩ましいです。

むしろ今後少しずつ会場実査が戻ってくるならばノート向けRTXグラフィックが載ったPCに買い換えるのが一番いいかなと思いいます。ちょうどRazerのBlade 14の新モデルが海外で発表され、中モデルが$2,200なら日本はいくらよ、、とドキドキしています。

■画面共有かカメラ映像か?

OBS Studioに「仮想カメラ」機能があるため、ついTeamsやZoomでは参加者カメラの映像として送信しがちですが、本当にそれがベストかはケースバイケースだと思います。まずZoomは基本的にカメラ映像が720pになる模様。法人ライセンスの場合は申請すれば1080p封印が解かれるらしいですが、それが難し場合は画面共有を使ってOBS Studioの画面なしろキャプチャした方が綺麗な可能性もあります。

Teamsの場合はネットワーク速度に応じて自動調整されてしまいますが、一応1080pが最初から使えるようです。

■Krisp所感

ついでにはじめて使ってみたKrispの感想をNvidia Broadcast(以下NB)と比べて。ぶっちゃけNBの方が品質は高いです。ノイズキャンセル力は甲乙つけがたいですが、フィルターをすり抜けた人の声がNBの方が自然で違和感がない。Krispのはよく聞くと人の声の中にノイズのようなクリップのようなザリザリ感があります。会場でどうにも外来ノイズが酷いようなら検討しますが、いまのところお金を払ってまで使いたいクオリティじゃないなというのが正直な感想です。

■まとめ

eGPUボックス買ったり、自宅デスクトップからRTX3070を付け外ししたりはしんどいなと思ってましたが、今回はCPUが100%に貼り付くみたいなギリギリ感はなくなんとか乗り切れそうな気がして一安心です。でもまぁファンはずっとシューシュー言い続ける状態だし、より静かに安定して実査録画ができるならeGPUボックス導入してしまうのもアリかなぁと思わなくもないです。ただIntel、AMD、NVidiaのグラボが混在してしまう状態になって、まともにOBS Studioが動いてくれるかって面も不安でいまいち思い切れないというところ。

大量の写真を(スクショ)を1枚1スライドでPowerPointに貼る

ユーザビリティ調査の報告書を作るとき、画面毎の考察をするセクションで大量のスクショを1枚1枚パワポに貼っていくことがあります。今回それが特に手間に感じる量だったので、なんかバッチ処理する方法がないか調べてみたところ、普通にPowerPointの機能がありました。

「挿入」→「フォトアルバム」がそれです。選択するとこんなダイアログが表示されます。

操作手順はこんな感じ。

  1. 「ファイル/ディスク(F)…」ボタンで取り込みたい写真を一括選択する。
  2. 「写真のレイアウト(P)」を「1枚の写真(タイトル付き)」にする。
  3. 「枠の形(M)」は「四角形、背景の影付き」がオススメ
  4. 「作成(C)」をクリック

「Boom!」(死語)

「挿入」のくせに新しいスライドファイルが作成されるのはご愛敬。また黒背景がデフォルトになっているので、「デザイン」タブで白地のものに切り替えます。

2.で「タイトル付き」を選ばないとスライド全面に写真が貼り付けられるのでリサイズが手間になります。3.で影付きを指定するのは、白背景のスクショだと背景との境界線がわからなくなるからですがそこは好き好きで。

あらかじめドキュメントテンプレートがある場合は「テーマ(T)」で選んでおいても良いでしょう。

[オマケ] スクショを連続撮影する時のおすすめツール

画面の特定部分をスクショするのはWindows10標準の「切り取り&スケッチ」でも可能ですが、ブラウザ内に表示されたプロトタイプの外枠にあわせて毎回矩形指定したり、ファイル名を指定して保存するのは手間です。そんな時は太古から存在するWinShotがオススメ。

ショートカットキーを自由に決めて、同じ矩形範囲をバシャバシャ撮れますし、保存先を決めておけば連番で自動保存できます。古すぎてPNG保存ができない(JPEG、BMPのみのが玉に瑕ですが、使い勝手でこれに勝るものに出会えていません(もしあったら教えてください!)。私はBMPで保存して(これまた古の)IrfanViewあたりでバッチ変換かけます。PhotoShopでももちろんできますがIrfanViewの方が手になじむ。

またカーナビなど実機製品の画面写真を撮りたい時は三脚を立てて画角を固定したカメラでバシャバシャ撮っておき、あとでLightroom Classicで切り抜き、角度補正、露出補正、ホワイトバランス補正などを一括でかけるのがオススメです。リモコンシャッターやリモートアプリが使えるカメラなら、シャッター押す度にちょっとずつカメラがズレるなんてことも防げるので確実です。