まえがき
【紹介している仕組みが ver 1.0.0 になったので一部更新】
前回のエントリでビデオチャットの品質向上として映像の質について言及しておいてその内容を書いていませんでした。今回はそれについて書きたいと思います。
ここで紹介する方法はアルファ版の OSS ソフトウェアを使います。使用にあたって機材が故障してもすべて自己責任でお願いします。
基本的にソフトウェアエンジニア向けの内容です。Git, Homebrew, ビルド etc というキーワードを聞いてピンとこない方はやめておいた方がいいと思います。このあたりがわからない方で「パソコン側の負荷を下げてつつ、ミラーレス一眼をウェブカムにしてクロマキー合成したい」という方は ATEM Mini の在庫が復活したころに札束で勝負することをおすすめします。*1(やったことがないけど多分できます)
目的
画質の向上です。
普段のミーティングなら表情などのビジュアル要素も重要なインプットとして使っているはずです。ビデオチャットになるとその情報の質がガクっと落ちてしまいます。そうなると効率が落ち、疲労感が出る(失った情報を別の要素で埋めようとして疲れる)のでどうにかしたいと思いました。
(実際には相手の画質が良くないと自分は結局疲れるんですが、まずは自分からと言うことで)
Before な環境
自宅には書斎があります。ただし、物干し部屋と兼用です。
窓を背にするようにL字型デスクを置いてあります。当然、洗濯物は窓側に干しています。つまりそのままビデオチャットをすると後ろにある干している洗濯物が丸見えになってまずいです。L字型の机の短い方に MacBook Pro を置くとカメラは壁向きになるので余計なものは映りません。ただそこに MacBook Pro を置くためには外部モニターとの接続をはずさないとケーブルの長さ的に足りません。普段はそちら側に iPad などを置いているのでそれをどかさないといけなくなりとても面倒な状況でした。
やりたいこと
- 後ろにある洗濯物など生活感が出るものは映さないようにしたい
- どうせなら zoom の virtual background みたいに何かを合成したい
- そして画質を上げる
やり方を考える
背景処理
そこそこ小綺麗なものが置いてあれば良いカメラとレンズで良い感じぼかしてやれますがそうもいかないので遮蔽物を置きます。WFH がいろんなところで本格的に実施され始めたころに @fladict さんが Twitter でつぶやかれていたグリーンバックの背景布 + スタンドを紹介されていたのでそれを買いました。
グリーンバックだけだとクロマキー合成ができなかったときに違和感があると思ったのでシンプルに黒幕も同時に買いました。後々この黒を買っていて良かったのは、グリーンだけだと若干記事が透けます。冒頭で説明したとおりデスクに向かった時に背後は大きな窓があるため日差しが入り込むので透けやすいのですが、この黒と2枚重ねにすることで透けを防止できました。
画質
昨年夏から飼い始めた猫の ぐりこさん を撮影するためにα6100を持っています。あとは、家にいっぱい転がっている iPhone。iPhone のカメラは下手なコンデジよりも性能が良いって言われることもあるので悪くないと選択だと思います。
今回は、α6100 でトライしてみました。
対策
@goando が使われている SIGMA fp は USB Video Class(UVC) に対応しているので USB 接続するだけで macOS がカメラをウェブカムとして認識してくれます。僕が持ってる α6100 (おそらくは他の SONY α 系も同様の模様)は USB で macOS と接続はできますがそれだけではウェブカムとしては認識してくれません。Elgato Cam Link 4K や ATEM Mini などの製品は、この製品に input としてカメラからの HDMI 出力を渡してあげると製品からの USB 接続は UVC として macOS が認識してくれるためそれだけで Web カムとして使えます。
ウェブカムとして認識してくれると何がうれしいかと言うと、ほとんどのカメラを使ったソフトウエアで汎用的にその映像が使えるところです。
などなど。実際のビデオチャットサービスに縛られないのは凄くありがたい仕組みですよね。
残念ながら現在 HDMI キャプチャデバイスと呼ばれるようなこの手の製品は軒並み品切れしています。僕も買おうかどうしようか迷っていた頃には在庫があったのですが決心をした頃には時既に遅しということで持っていません。ですので今回紹介する方法は HDMI キャプチャデバイスなしで行います。
今回の僕の目標にクロマキー合成が含まれているのでそれらを踏まえて以下のようなソフトウエアを使っていきます。
- Camera Live
- OBS
- obs-mac-virtualcam プラグイン
僕の環境はこちら
Camera Live
Camera Live
このソフトウエアは、Syphon と呼ばれる映像をソフトウエア間で渡すための仕組みを使って USB 接続した α6100 の映像を他のソフトウエアに渡してくれるものです。Syphon は VDJ 界隈ではポピュラーなものらしいです。Camera Live 自体は Syphon server として動作するので Camera Live が配信する映像を受け取る Client が必要になります。
OBS
OBS(Open Broadcaster Software) と呼ばれるソフトウエアを使います。このソフトウエアは twitch や YouTube などに配信するためのソフトウエアです。カメラ映像やテキスト、静止画などの様々な映像ソースや音声をミックスすることができます。
OBS は Syphon Client を映像入力として扱えます。つまり α6100 の映像を Camera Live を通じて OBS 上で表示ができるようになります。
また、OBS にはクロマキー合成を行う仕組みもはじめから入っています。
obs-mac-virtualcam プラグイン
obs-mac-virtualcam
このソフトウエアは OBS のプラグインです。OBS はデフォルトで各種ライブストリーミングサービスにそのままライブ配信できる機能があります。ローカルに動画ファイルとして残すこともできます。ただ、ビデオチャットサービスにはそのまま配信はできません。ビデオチャットサービスで使うためには Virtual Camera(仮想カメラ)として OBS で扱っている映像を出力する必要があります。obs-mac-virtualcam プラグインはそれを可能にしてくれるプラグインです。
Virtual Camera(仮想カメラ)というのは僕も最近知ったものですが、有名どころだと Snap Camera が Virtual Camera として振る舞っています。Snap Camera は FaceTime Camera などのカメラ映像を加工し、加工した結果を Virtual Camera として提供することでビデオチャットサービスにバーチャル背景や美肌効果が加わった映像を利用できるようにしています。
準備
Camera Live をダウンロード
Releases · v002/v002-Camera-Live
こちらのリリースページから新しいものをダウンロードします。現時点では 13(Alpha)
が1番新しいのでこれをダウンロードします。13(Alpha)
をクリックすると Assets のところに Camera.Live.zip
があるのでこれをクリックしてダウンロードします。
ダウンロードして解凍したらアプリケーションフォルダに移動させましょう。
OBS & obs-mac-virtualcam のビルド のインストール
obs-mac-virtualcam プラグインが順調に開発を重ね公式版になりました。以前は自分で OBS も含めてビルドしないといけなかったためエンジニアじゃない人にはハードルが高かったですが簡単な手順でインストールできるようになりました。
- 最新の OBS をダウンロードしてインストールしてください
- 最新の obs-mac-virtualcam プラグイン の pkg ファイル(拡張子が pkg に鳴っているファイル)をダウンロードしてください
- obs-mac-virtualcam プラグインの pkg ファイルをダブルクリックしてプラグインをインストールしてください
- もし OBS を起動している状態であれば OBS を一度終了し、再度起動させてください
- Web カムとして認識させたいソフトウエアがあればそのソフトウエアも再起動させてください
個人的にはプラグインのインストールが終わったら macOS 自体を再起動させるのがいろいろと手っ取り早くトラブルも少なくなるのでおすすめです。
普通であれば OBS を公式サイトからダウンロードして云々というステップなんですが、obs-mac-virtualcam プラグインが開発途中のため自分でリポジトリをクローンして手順にそってビルドしないといけません。
こちらのビルドガイド を上から順に実行するだけです。普段から macOS 上で開発をしているような人であれば Xcode や Homebrew などもインストールされていることも多いと思うのただひたすらビルドガイド通りにターミナルでコマンドを叩いていきます。
実際にやってみる
1. まずは α6100 の設定を開いて「USB接続」を「PC リモート」に切り替えてください。
2. 次に α6100 のモードを動画撮影に切り替えます。
3. α6100 と MacBook Pro を USB ケーブルで接続します。
4. Camera Live を起動します。
この段階では Camera Live の真ん中上部の表示は No Camera になっていると思います。
5. α6100 の電源を入れます。
Camera Live に USB PTP Class Camera と表示され*2、真ん中上部の表示が Active になっていれば大丈夫です。
6. 次に OBS を起動させます。
7. 起動すると自動構成ウィザードが表示されますので "はい" をクリックしてください。
8. 「録画のために最適化し、配信はしない」を選択した状態で "次へ" をクリックします。
*3
9. 基本(キャンバス)解像度を 1280×720 に変更してください。(最近他の解像度もサポートされたようですが当時のサポート解像度の 1280×720 が無難です)
FPS はデフォルト値でいいと思います。"次へ" をクリックしてください。
テストが走るのでしばらく待ちます。
テストが終わったら "設定を適用" をクリックします。
OBS の初期設定が終わったら早速カメラの映像を OBS 上に表示させましょう。
11. 下側にカラムが5個表示されていますが、左から2番目のソースカラムにあるプラスボタンをクリックしてください。
12. いくつかある項目の中からサイフォンクライアントを選択してください。名前を入力するためのシートが表示されますがここでは「サイフォンクライアント」としておいてください。
13. サイフォンクライアントのプロパティ設定ウインドウが表示されます。ソースをクリックして [Camera Live] USB PTP Class Camera
を選択します。
この段階でプロパティウインドウにカメラからの映像が表示されていればOKです。もし映っていないようならばカメラとの接続か Camera Live の状態を確認しください。特に USB ケーブルはものによっては充電用のものがあります。必ずデータ転送ができるものにしてください。
14. サイフォンクライアントのプロパティ設定ウインドウではあともう一つ設定します。「透過を許可」のチェックを有効にしておいてください。このチェックボックスの設定を忘れているとクロマキー合成がうまくいきません。
チェックボックスも有効にしたらプロパティウインドウを OK を押して閉じてください。
15. 出力サイズに対してカメラの映像を映し出すレイヤーのサイズが合っていませんが一旦スルーして、クロマキー合成を早速行います。*4
16. ソースカラムに追加したサイフォンクライアントレイヤーを右クリックして「フィルタ」をクリックしてください。
フィルタ設定ウインドウが表示されます。
17. 左ペインの下にある+ボタンをクリックしてください。
18. いくつか表示される選択肢の中から「クロマキー」を選択してください。フィルタの名前はデフォルトの「クロマキー」のままで結構です。もうこの段階で背景のグリーンが透過されていると思います。(事前にグリーンバックは用意しておいてくださいね)
細かい設定値がありますが、個人的にはデフォルト値のままでも十分だったのでそのままにして「閉じる」をクリックしてください。
19. 背景画像のレイヤーを追加します。
先ほどと同様にソースカラムの+ボタンをクリックして「画像」を選択してください。レイヤーの名前はここでは「背景画像」としておきます。
こちらも先ほどと同様に画像レイヤーのプロパティ設定ウインドウが表示されます。
ここでは背景画像として使用する任意の画像を設定して OK をクリックしてください。
20. そうすると設定した画像*5が前面に映ってしまいます。カメラ映像を手前に持ってきたいのでソースカラムに並んでいるレイヤーをドラッグ&ドロップして背景画像を並びの一番下に移動させます。
21. あとは、表示されているコンテンツの位置を微調整します。
ここまでできたらもう少し。
映像を Virtual Camera 化します。
22. OBS のツールメニューにある Start Virtual Camera
をクリックします。
もし、メニューバーがクリックできなければ適当な他のアプリにフォーカスを切り替えてからもう一度試してみてください。
23. Virtual Camera 化できているかを試すために QuickTime Player を起動してみてください。
【追記】: 僕の環境では QuickTime Player では OBS Virtual Camera は認識されても実際のカメラ映像が出力されない問題がありました。原因はまだ分かっていませんが、Hangouts などでのビデオチャットは問題なく動作しています。【追記終わり】
QuickTime Player を起動したらショートカットキー ⌘+⌥+N を押しください。カメラからの映像が QuickTime Player 上に表示されると思います。録画ボタンの横になるシェブロンをクリックして入力ソースのなかに OBS Virtual Camera
を選んでください。これで OBS 上のプレビューと同じ映像が QuickTime Player 上に表示されていれば成功です。
もし、入力ソースのなかに OBS Virtual Camera
が表示されない場合は QuickTime Player を再起動してみてください。
24. Google Hangouts を使ってみます。
Hangouts を開いてビデオハングアウトをクリックします。実際の通話相手は別に必要ありません。招待するためのウインドウとかも適当に閉じてください。OBS の映像が出てこない場合は Hangouts のカメラ設定を変更しないといけません。右上のギアアイコンをクリックして「ビデオ」のところから OBS Virtual Camera
を選択してください。OBS Virtual Camera
がない場合はブラウザの再起動をしてください。
tips
- OBS の映像を Virtual Camera として認識されない場合はビデオチャットサービスを再起動する(ブラウザベースのサービスならブラウザの再起動)
- OBS の
Start Virtual Camera
実行以降に起動したアプリケーションじゃないと Virtual Camera を認識してくれない模様
- クロマキー合成をする時には背景画像は背景の幕に近めの色が良い
- 赤っぽい背景画像にすると境界線が緑っぽく見えたり、グリーンバック自体についているしわや影のある部分が綺麗に合成されない
この方法のメリット・デメリット
メリット
- ミラーレス一眼カメラを使っているので圧倒的に画質がいい
- しっかりとクロマキー合成ができて、部屋の背景を気にしなくてもいい
- 現在入手困難な HDMI キャプチャデバイスがなくてもできる
- ソフトウエアが無料
デメリット
知識が必要
- 動作が不安定
特に Virtual Camera を認識させるためには先に OBS の Virtual Camera を動かしておかないといけない
- CPU 負荷が高くなる
- ごくまれにヒドいときは日本語入力がままならないですw
まとめ
今回紹介した方法に行き着くまでにもっと手軽な方法がないかなどいろいろと試してみましたが、結果的にこの方法がバランスが良かった感じです。
個人的なニーズをフルに満たすためには ATEM Mini を買うしかないと思っています。
興味のある人はチャレンジしてみてください。他にも良い方法があれば教えてください。
参考リンク