たのしい人生

Ubuntu でデスクトップをキャプチャして仮想カメラデバイスとして流す話

デスクトップをキャプチャしてストリームできると Discord などの通話で使ったりできて便利なのでやり方をまとめます。

v4l2loopback のインストール

v4l2loopback という module をインストールすると仮想カメラデバイスが作れます。Ubuntu は公式リポジトリホスティングしてくれています。

$ sudo apt install v4l2loopback-dkms

でインストールできます。

v4l2loopback の読み込み

まず v4l2loopback をロードする前に、現在のビデオデバイスを確認しておきます。

$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2  /dev/video3

確認したら以下のコマンドで v4l2loopback をロードします。

$ sudo modprobe v4l2loopback

その後、ビデオデバイス一覧を再確認してみます。

$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2  /dev/video3  /dev/video4

video4 が v4l2loopback で導入された仮想カメラデバイスになります。

Discord などで取り込めるように ffmpeg でデスクトップをキャプチャして v4l2loopback のデバイスに流し込む

なにもしなければ v4l2loopback デバイスは単なる空っぽのデバイスなので、ffmpeg で画面をキャプチャーして v4l2loopback に流し込みます。その際にキャプチャー範囲や出力解像度を調整します。

ffmpeg -f x11grab -r 15 -probesize 128M -s 3840x2160 -i :0.0+1920.0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 -vf 'scale=1280:720' /dev/video4

この状態で Discord などを開くと仮想カメラデバイスが選択でき、ffmpeg がいい感じにデスクトップキャプチャしてくれていればいい感じに表示されます。(Discord などは Web Camera として認識しているので手元では左右反転プレビューされますが、相手には正しい向きで表示されます)

f:id:biacco42:20200512233244p:plain

便利になりました。

Amazon.co.jpアソシエイト