obs-v4l2sinkを使ってLinux上のOBS Studioで合成した映像をSkypeやZoomに流す
2021/4/13追記
LinuxでOBS Studioを使う方法を検索していて検索エンジンでたどり着いた方は、こちらをご覧ください。
- 【2021年令和3年進化型最新版】LinuxでOBS Studioと仮想カメラを使う方法 - Days of Speed(2021-04-13): http://www.nofuture.tv/diary/20210413.html
先日、OBS Studioで合成したカメラの画像をSkypeやZoomに流すという記事を書きました。
その中で「obs-v4l2sinkがうまく動かなかった」と書きましたが、その原因がわかったので使い方を書きます。
- 参考: Nothing coming through on Skype when streaming to v4l2. · Issue #23 · CatxFish/obs-v4l2sink: https://github.com/CatxFish/obs-v4l2sink/issues/23
obs-v4l2sinkのサイトはこちら。
- CatxFish/obs-v4l2sink: obs studio output plugin for Video4Linux2 device: https://github.com/CatxFish/obs-v4l2sink
v4l2loopbackのインストール
以前の記事と同じくv4l2loopbackは必要なのでインストールしてください。Debian/UbuntuではパッケージがあるのでaptでインストールするだけでOKです。
$ sudo apt install v4l2loopback-dkms v4l2loopback-utils
v4l2loopbackを組み込む
v4l2loopbackはカーネルモジュールですが、自動的に組み込まれることはないので自分で組み込みます。ここで重要なオプションは「exclusive_caps=1」だけです。それ以外は適宜変更してください。
$ sudo /usr/sbin/modprobe v4l2loopback devices=1 video_nr=10 card_label="OBS Cam" exclusive_caps=1
横道の話ですが、このコマンドはGithubのIssueあったものをそのまま使ってます。デバイス番号に大きな番号を振るとv4l2loopbackデバイスの見分けがつきやすく、カードラベルを付けるとデバイス名が分かりやすくなるので今度から自分も真似します。
うまく組み込みめて問題がないようなら、毎回組み込みは面倒なので /etc/modprobe.d/v4l2loopback.conf というファイルを作って以下を追記しておきます。
options v4l2loopback devices=1 video_nr=10 card_label="OBS Cam" exclusive_caps=1
obs-v4l2sinkのインストール
これはビルド済みのdebパッケージobs-v4l2sink.deb(amd64用)をインストールして使います。
ここに1つ目の罠があります。このパッケージはOBSプラグインのある適切な場所(/usr/lib/x86_64-linux-gnu/obs-plugins)にプラグインをインストールしてくれません。これを正しい場所からシンボリックリンクを貼ってOBSに読み込ませます。
$ cd /usr/lib/x86_64-linux-gnu/obs-plugins
$ sudo ln -s /usr/lib/obs-plugins/v4l2sink.so .
OBS Studioの設定
OBS Studioの設定ですが、ここにも2つ目の罠があります。
OBS Studioの設定画面を開いて、[映像]にある「基本(キャンパス)解像度」をカメラの解像度と合わせてください。カメラがHD(1280x720)なのに、ここをフルHD(1920x1080)にしていると真っ暗なままで映らないので気をつけてください。
これを確認・変更できたら設定は終わりです。
Skypeに流す
OBS Studioでカメラや合成する画像などをセットしたら、OBS Studioのメニューの[ツール]に、[v4l2sink]があるので起動します。
v4l2sinkプロパティ画面が開いたら、VideoPathのところにビデオデバイス /dev/video10 と入力し、Video Formatは、そのままにしてStartボタンを押せば仮想カメラにOBS Studioの映像が流れます。
Skype側では設定を開いて、「音声/ビデオ」の右上にあるビデオデバイスを「OBS Cam」に変更するとOBS Studioの映像が流れてきます。
ここで流れない場合は、Webカメラの解像度とOBS出力の解像度が合っていないことが原因だと思うので、下のようにv4l2-ctlに--list-formats-extオプションを付けてWebカメラの解像度を確認して、OBSの解像度を合わせてみてください。
$ v4l2-ctl --list-formats-ext
まとめ
いやー、できてよかった。ffmpegも悪くはないのですが遅延がひどくてツラかったので、遅延なくできるのはありがたいです。自分に関係する話では、オンライン授業とかにも使えそうなので活用してみようかと思います。