v4l2loopbackで仮想videoデバイスを作る

日本で使っていたWebカメラは処分してしまったので、デスクトップPCでビデオ会議するためには、また新しく買わないとなぁと思っていたのだが、 画質良いやつを買おうとすると、結構高いし悩む。(会議に画質をもとめなくてもいいとは思うが…w

スマホをWebcamとして使える方法ないのかな? と検索してみると、Androidだと DroidCam というアプリでまさにそういうことが出来そう。 ただ、専用のソフトウェア(Linuxの場合kernel module)をインストールする必要があって、あんまりやりたくない感じがする。

用途的におそらくカーネルモジュールは入れる必要はあるとは思うが、もう少しオープンなものor汎用的なものはないのかと探して見つけたのが、 v4l2loopback というプロジェクト。 これはv4l2の仮想入出力デバイスを作ってくれるもので、v4l2に対応してるアプリならなんでもつかえそうなのでなかなか良さそう。

とりあえず、

sudo modprobe v4l2loopback exclusive_caps=1
ffmpeg -re -i foo.mp4 -f v4l2 /dev/video0

として、適当な動画をChromeからwebcamとして使えるところまでは確認した。[1]

あとはffmpegに何らかの方法でスマホのカメラ画像を渡せばやりたいことはできそう。

この件には関係ないが、ffmpegの -re というoptionは初めて知った。入力を最速で処理するのではなく、動画の実時間で読みこんでくれるものらしい。ストリーミング入力をシミュレートしたりするのに使うようだ。