デスクトップをキャプチャしてストリームできると Discord などの通話で使ったりできて便利なのでやり方をまとめます。
- v4l2loopback のインストール
- v4l2loopback の読み込み
- Discord などで取り込めるように ffmpeg でデスクトップをキャプチャして v4l2loopback のデバイスに流し込む
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 として認識しているので手元では左右反転プレビューされますが、相手には正しい向きで表示されます)
便利になりました。