これぞ最強のバ美肉 Zoom ビデオ会議 on Mac


2020-06-14 追記:

CamTwist よりも OBS の方が圧倒的に高機能で使いやすいので、OBS を使う方法に変更しました。

また、Zoom の Mac 版は 6.0.4 から再びバーチャルカメラが利用可能になったとのことですが、残念ながらそれはバーチャルカメラのホワイトリスト形式での利用可能で、OBS Mac VirtualCam Plugin はそのホワイトリストに含まれていないため、現状はこれまで通り手を加える必要があります。詳しくはやり方の 5.1. で説明します。


バ美肉 #とは

Wikipedia をご参考にどうぞ。(まあ簡単にいうとバーチャルな美少女に化けること)

用意するもの

ハードウェア

  • MacWindows ならそもそも FaceRig 等の手軽なツールがあるため本記事を読まなくても簡単にできる)
  • iPhone(可能なら Face ID 対応のもの)
  • スマホスタンド等の iPhone を正面に固定できるもの(なくてもいいけど手が疲れる)
  • iPhoneMac を直接接続するケーブル

ソフトウェア

  • OBS(画面合成用)
  • OBS Mac VirtualCam plugin(OBSの画面をバーチャルカメラとして出力用)
  • バーチャルカメラ対応のビデオ会議ツール(Zoom はちょっと手を加える必要がある;詳しくは後述)
  • Vtuber になるための iPhone アプリ(REALITY とか)

結果プレビュー

f:id:elhoshino:20200613152911p:plain
こんな感じで可愛い美少女になってビデオ会議に参加できる

やり方

以下のやり方は上記の用意するものが全てある前提で進めますので、まだの方は是非先に準備してから続きを読んで下さい。

1. Vtuberアプリで自分のアバターを作成

先に Vtuber アプリで自分のキャラクターを設定しておくこともお勧めします。アプリによっては live2D モデル対応だったり VRoid モデル対応だったりもしくは完全に独自カスタマイズアバター設定や内蔵キャラクターしか設定できないアプリもあるので、そこら辺は自分でいろいろ試して自分に合うアプリを決めましょう。筆者は REALITY を使っています、理由は live2D モデルとかに対応していないが独自のカスタマイズキャラクターが使えてしかも結構かわいいので。かわいいは正義

またもしこの時背景を単色に設定できるなら、グリーンスクリーンとかにしとくとあとで合成がしやすいのでおすすめです。例えば筆者はこんな感じです:

f:id:elhoshino:20200613160426j:plain

ちなみに今 REALITY はなんとアバターを cluster と連携できるようになったので筆者としてめちゃくちゃおすすめです。

2. iPhoneMac に繋いでスマホスタンド等で固定

先ほど決めた Vtuber アプリを顔トラッキングモードにして、ちゃんとキャラクターが自分の動きに合わせて動いてくれてる状態にします。ちなみに筆者はこんな感じの車載スマホホルダーでモニターの前に固定しています:

f:id:elhoshino:20200613154309j:plain

3. OBS を設定

3.1. 出力サイズとキャンバスサイズなどを設定

個人的には 1280×720 の解像度で 30 fps のフレームレートをお勧めしますが、もちろん自分のパソコンのスペックに応じてこれ以上上げることも可能です。

f:id:elhoshino:20200613230420p:plain

3.2. 入力ソースとして Mac に接続した iPhone を追加

まずは OBS のソースメニューからビデオキャプチャバイスを選択

f:id:elhoshino:20200613231306p:plain

名前を適当に決めて OK です

f:id:elhoshino:20200613231549p:plain

iPhone 直接が Mac に接続されてる場合、デバイスリストから iPhone の名前が表示されてるはずなので、それを選びます(私の iPhone の名前についてのツッコミは不要ですw);またなるべく高い解像度が使えるために、プリセットは High を選びます

f:id:elhoshino:20200614122716p:plain

もちろんこのままだと携帯画面の解像度が高すぎるので実質顔が見えないことになりますが大丈夫です、まだ色々設定しますので。その前に、まずこのままだと、画面の上下のあまり出したくない領域も出てしまいます。例えば下は LIVE ボタンとか(一回画面タップすると消えてくれますが、会議の途中で誤操作で出してしまったらかっこ悪いので)を隠したいし、上は通知が表示されちゃうこともあるので消したいですね。この時は、レイヤーにクロップフィルターをかけることでできます。というわけでまず iPhone 画面のソースに右クリックしてフィルターを選びましょう

f:id:elhoshino:20200614123333p:plain

フィルター設定画面でエフェクトフィルターからクロップを選び、名前を適当に決めます

f:id:elhoshino:20200614123526p:plain

クロップ領域の設定で相対サイズを選択し、最低限下は LIVE ボタン、上は通知が完全にクロップされるくらいまでクロップします。iPhone X の場合上は 400、下は 450 になりますが、機種によって数値が変わるかと思います(通知が来るタイミングじゃないとどこまでが通知の領域がわかりにくかったりするので、例えば Slack で自分に通知を送るとかの方法で出してみるといいかもしれません);またクロップ領域によっては iPhone 側のアバターのサイズや位置を調整する必要があります、RREALITY の場合は指 2 本で操作できます

f:id:elhoshino:20200614124358p:plain

ついでにもし背景色をグリーンスクリーンのような単色に設定してある方でしたら、せっかくなので背景を透過したいですよね。というわけで同じようにフィルターを追加します、今度はクロマキーです

f:id:elhoshino:20200614124535p:plain

グリーンスクリーンなら初期設定のままで基本大丈夫かと思います;ただしもちろん衣装がそもそも緑だったりすると、背景を別の色にする必要がありますので、その時はクロマキーのキーカラーとかをその背景色に合わせて設定しましょう。設定できたらプレビューで背景が消えるはずかと思います

f:id:elhoshino:20200614124847p:plain

ここまで設定したらとりあえず iPhone の画面の取り込み自体はほぼ終了なので、あとは出力に合わせてレイアウトを調整するだけです。というわけでフィルターの時と同じ要領で、今度は iPhone 画面のソースに右クリックして変換(Transform)メニューから、画面にフィットするを選ぶと楽にできちゃいます(もちろんこだわりがある方、例えば特定な場所に置きたいとか特定の大きさにしたいとかの場合は、直接変換の編集...(Edit Transform...)を選ぶと色々詳しい設定が可能です

f:id:elhoshino:20200614130122p:plain

ここまで設定できたら、自分のアバターが画面の真ん中にくるようにくるはずです

f:id:elhoshino:20200614130222p:plain

3.3. 背景として表示したい画像とかを追加

携帯の画面は基本縦長だけど、テレビ会議の場合は基本横長の画面になるので、多くの場合は左右に余白が出てしまって見栄えが悪いですし、そもそも今回の OBS のキャンバス解像度も 720p にしています。それにグリーンスクリーンを設定した方はクロマキーでアバターの背景を抜いたから、尚更背景が欲しいですよね。まあこれはキャラの追加と比べてだいぶ楽です。まず背景として表示したい画像を探して Mac に保存しておきましょう。この時キャンバスと同じアスペクト比の画像が一番理想です。それができたら iPhone の画面ソースと同じ要領でソースから画像を追加して名前を適当に決めます

f:id:elhoshino:20200614130738p:plain

次に設定画面から先ほど保存した表示したい画像を設定します。背景画像の解像度がキャンバスの解像度と一致しない場合は、iPhone 画面の時と同じく変換メニューから画面をフィットするとか、変換を直接編集して色々弄ってあげましょう

f:id:elhoshino:20200614131109p:plain

ところがこれだとアバターが背景に隠されてしまうので、レイヤの順番を変更しましょう。フィルターとか変換とかと同じ要領で、画像背景ソースを右クリックして順序(Order)メニューから最下部に移動(Move to Bottom)を選びましょう、そうすると背景画像が一番下のレイヤに行ってキャラクターが見えるようになります

f:id:elhoshino:20200614132258p:plain

3.4. 余裕がある方向け:さらに画面表示をパワーアップ

ここまできたら、もっと画面を華やかにしたかったりしますよね、例えば筆者はこんな感じにテキストウィンドウを追加してギャルゲーの UI っぽい風にしてみました(ちなみに本当はさらにリアルタイムテキスト起こしを入れて話したことをそのままテキストウィンドウ内で表示したかったんですけどね…そこまでできたらもう本当にギャルゲーの画面になりますがw)

f:id:elhoshino:20200614135139p:plain

そしてそれだけでなく、オンライン勉強会とかの時も Keynote スライドやライブコーディングに合わせて画面を作ったりすることも可能です

f:id:elhoshino:20200614135256p:plain

4. OBS の VirtualCam を起動

OBS Mac VirtualCam plugin がすでにインストールされ済みなら、ツールメニューから Start Virtual Camera のオプションがあるはずなので、それをクリックすればバーチャルカメラが起動されます

f:id:elhoshino:20200614133055p:plain

5. テレビ会議ツールを設定

テレビ会議ツールを直接設定する前に、macOS 10.15 (Catalina) からアプリが明示的に DAL を許可する entitlements を組み込む必要が出たため、一部のツールは本当は機能としてバーチャルカメラに対応していますが選べない状況になっています。この場合、自分でちょっと手を加えることで封印されたバーチャルカメラの利用機能が再び復活しますので、OBS Mac VirtualCam plugin の Compatibility ページからどのツールがこの処理が必要かが確認できます。とりあえず 2020-06-14 追記に書かれた通り今話題の Zoom(現時点最新バージョン:5.0.5)はこの処理が必要です。

5.1. 一部のツールのみ必要:DAL バリデーションを無効化する

DAL バリデーションの無効化は二通りの方法で回避できます:コードサインを削除する方法と、自分の開発者証明書で再コードサインする方法です。もし Apple Developer Program や Apple Developer Enterprise Program 等に入られていない方(そもそもこれらは何?という方は十中八九入ってないと思います)でしたらコードサインを直接削除しちゃえば一番楽です:Terminal から codesign --remove-signature "<アプリの絶対パス>" を打ち込んでください。例えば Zoom でしたらこんな感じです:

codesign --remove-signature "/Applications/zoom.us.app"

しかしこの方法ですと、ツールによってどうしてもコードサインが必要な機能の利用で支障がある可能性があります、例えば Zoom だと起動する度に毎回これが聞かされます:

f:id:elhoshino:20200615005846p:plain
「常に許可」を選んでも毎回起動する度に聞かれます;それにコードサインを無くすということは第三者がこのアプリを改竄し放題ということを意味しますので「拒否」を選んだ方が無難です

そのためもしすでに上記の ADP もしくは ADEP に契約されてる方でしたら、自分の証明書でコードサインし直した方がいいです。この場合、まずは Terminal から codesign -d --entitlements entitlements.xml "<アプリの絶対パス>" のコマンドで既存の entitlements を書き出します。例えば Zoom ならこんな感じです:

codesign -d --entitlements entitlements.xml "/Applications/zoom.us.app"

そしたら今いるところに entitlements.xml のファイルが書き出されているはずなので、これを開いて、先頭のゴミを削除し、com.apple.security.cs.disable-library-validation についての記述を追加します。例えば Zoom 5.0.5 の時点で書き出されたものなら修正後の内容はこんな感じになるはずです:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.security.automation.apple-events</key>
    <true/>
    <key>com.apple.security.device.audio-input</key>
    <true/>
    <key>com.apple.security.device.camera</key>
    <true/>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
</dict>
</plist>

ここまでできたら、最後は自分の証明書でコードサインし直すだけです。まず自分の証明書の名前を控えておきましょう、ADP か ADEP に契約されてる方なら Keychain から見つかるはずです:

f:id:elhoshino:20200615010758p:plain
枠に囲まれてる部分が自分の証明書の名前です

そして Terminal から codesign -f -s "<自分の証明書の名前>" --entitlements entitlements.xml "<アプリの絶対パス>" を打ち込めば終わりです。例えば上記の証明書で Zoom をコードサインするときはこんな感じになります:

$ codesign -f -s "Apple Development: XIANGXIN SHI (ExxxxxxxxD)" --entitlements entitlements.xml "/Applications/zoom.us.app"

こうすれば、きちんと署名がつくので、第三者の改竄を心配することなくかつ毎回毎回セキュリティ問題について聞かれることもないです。

5.2. ビデオ会議ツールでバーチャルカメラを利用

とりあえず今回は Zoom を例に説明します。上記のように DAL バリデーションを無効化すれば、Zoom の環境設定からビデオソースを OBS Virtual Camera に選ぶと使えるようになります。ちなみにその際は左右反転しない方がいいですね、これまで我々が画面作ってる時はそもそも反転で作っていないし、REALITY を利用してる場合は実は REALITY もフェイストラッキングの描画としては反転していますが、衣装の文字とかみてみるとわかるはずですが実は観客にもそのまま送信していてむしろ反転した方が文字が逆になっちゃいますので。

f:id:elhoshino:20200614134210p:plain

後書き

ちなみに iPhone とかを使わないで完全に Mac だけでできる方法もあります(というよりそもそも本記事はその記事を参考に作ったものです2020-06-14 版では CamTwist から OBS に変更したため違う構成になります)ので、もし iPhone とかを持っていない方でしたらこちらも試してみてもいいかもしれません。筆者が iPhone を使う方法にしたのはブラウザによる顔追跡は精度が低い&CPU使用率が高い&使いたいキャラクターがもともと REALITY で設定してたからです。

qiita.com