用虛擬 webcam 作為線上開會視訊 aka v4l2loopback on Ubuntu 18.04

會找這個來用是因為想把線上開會時的視訊整個替換掉。v4l2loopback 會在系統上做出 一個假的 webcam device,可以當成真的 webcam 來用,播放餵給它的東西。套件名稱是 v4l2loopback-utils 會依賴 v4l2loopback-dkms 一起裝進來,但版本太舊,跑起來問 題一堆,所以直接去 github 那邊抓了最 新 release v0.12.4 來用。

安裝就直接照 README.mdmake 然後 insmod v4l2loopback.ko 下去就行了。講 究一點可以照裡面說的跑 depmod -a 之類的讓它自動帶 dependencies. 先設定:

1
2
v4l2loopback-ctl set-caps 'video/x-raw,format=UYVY,width=640,height=640' \
/dev/video2

/dev/video2 是系統上 insmod 以後產生出的 device name, 然後 640x640 可以改成你 想要的解析度。

1
2
3
gst-launch-1.0 -v filesrc location="fakeportrait.jpg" \
! decodebin ! imagefreeze ! videoconvert ! videoscale \
! identity drop-allocation=1 ! v4l2sink device=/dev/video2

這例子是把一張靜態圖片做背景。用 zoom 可以看到沒問題,用 cheese 碰到問題就是不讓 我換預設 device,已經找過不用 cheese -d /dev/video2 改用 cheese --device="Dummy video device (0x0000)" 還是有問題,乾脆砍了。

zoom screenshot