v4l2loopbackで遊ぶ
v4l2loopbackを使うことで仮想カメラデバイスを作ってそこに映像とかをffmpegとかで流し込んだりすることでそのデバイスを使って映像を取得できたりできるみたいなのでちょっと使って遊んでみた
セットアップ
sudo modprobe v4l2loopback exclusive_caps=1
これで/dev/video[n]みたいなデバイスが作られるのでそこに映像を流し込んでいく
ffmpegを使って特定のウィンドウをキャプチャして流し込む
INFO=$(xwininfo)
W=$(echo "$INFO" | grep -oP 'Width: \K\d+')
H=$(echo "$INFO" | grep -oP 'Height: \K\d+')
X=$(echo "$INFO" | grep "Absolute upper-left X" | awk '{print $4}')
Y=$(echo "$INFO" | grep "Absolute upper-left Y" | awk '{print $4}')
W=$(( W / 2 * 2 ))
H=$(( H / 2 * 2 ))
ffmpeg -f x11grab -video_size "${W}x${H}" -i :0.0+${X},${Y} -vcodec rawvideo -f v4l2 -pix_fmt yuv420p /dev/video2
自分の場合は/dev/video2になったのでそこにウィンドウをキャプチャしたのを流しこんでいく
テスト
ffplay /dev/video2
これでウィンドウをキャプチャしてる画面が表示されればおk
OBSでv4l2デバイスを取り込む
ソースから映像キャプチャデバイス(V4L2)を選択してデバイスでv4l2loopbackで作ったデバイスを指定すればそこに流し込んでる映像がOBSのプレビューに表示されるはず
OBSにはウィンドウをキャプチャして配信するような機能がそもそもあるので別にこれ使わなくてもできる
終わり。で結局これ何に使えるのかってGeminiに聞いたところ

みたいな感じらしい
余談1: IP WebCamアプリを使ってスマホの画面をv4l2loopbackに流し込む
IP WebCamアプリを入れてから配信をスタート(特に別サービスと連携とか必要無し)させた状態で
ffmpeg -i http://スマホのIP:8080/video -vf "format=yuv420p" -f v4l2 /dev/video2
とかをやるとスマホで配信してる画面をv4l2デバイスに流し込めてそれを見ることができるようになる
普通にhttp://IP:8080/videoで見れるけどねw
余談2: scrcpyを使ってスマホの画面を流し込む
scrcpy --v4l2-sink=/dev/video2 -N
あとはffplay /dev/video2とかで見れる。見れるだけで操作とかはできないけどw