v4l2loopback虚拟摄像机

尝试用 v4l2loopback 虚拟了个摄像头

玩了玩 v4l2loopback 这个模块,还蛮有意思的,可以创建虚拟虚拟视频设备,普通的 v4l2 应用程序可以读取这些设备,就好像它们是普通的视频设备一样
这玩意搭配 FFmpeg 使用说不定就能模拟一个摄像头跟别人视频聊天,虽然人不在电脑前,但别人看到的还是我在电脑前 (o゜▽゜)o☆

v4l2loopback 使用

先安装这个模块,ArchLinx 的官方库里有,可以直接安装

1
sudo pacman -S v4l2loopback-dkms

运行模块

1
sudo modprobe v4l2loopback

这样就可以查看 /sys/devices/virtual/video4linux 中是否有虚拟的摄像头了

1
ls ls -1 /sys/devices/virtual/video4linux

/dev 中也能看到

1
cat /dev/video*

在运行 v4l2loopback 模块的时候可以选择加入参数

1
sudo modprobe v4l2loopback devices=2

devices 参数可以指定虚拟出多少个设备
如果要更改配置,需要先卸载模块,重新运行模块才可以

1
sudo modprobe --remove v4l2loopback

FFmpeg 把视频流推给虚拟摄像头

FFmpeg 是一个多媒体视频处理工具,有许多非常牛逼的功能,比如视频采集功能、视频格式转换、视频抓图、给视频加水印等
反正处理视频能力就是特别强

虽然虚拟了摄像头设备,但这些摄像头没有东西可以用,这里就需要使用 FFmpeg 把视频流推给它们

1
ffmpeg -re -stream_loop -1 -i 'video.mkv' -f v4l2 /dev/video2

各参数解释

  • -readrate : 读取速度
  • -re: 以本机帧速率读取,相当于 “-readrate 1”
  • -i: 输入源,一个视频
  • -f: 约束输出文件的格式容器,可以使用 v4l2
  • -stream_loop : 循环播放视频的次数,-1表示无线循环
  • /dev/video: 指定设备,这里用的是我虚拟出来的摄像头

测试效果

使用 ffplay 测试效果

1
ffplay /dev/video2 

这样就会打开一个窗口,这个窗口里播放的就是我刚推送的视频

使用 VLC 测试效果
打开 VLC ,左上角选择 媒体 -> 打开捕获设备
选择对应的设备
点击播放就能看到刚推送的视频了

使用 OBS 测试效果
先在 OBS 中开启虚拟摄像机

在来源中添加一个视频采集设备,设备选择虚拟摄像设备,就能看到刚推送的视频了


感觉开启了新大陆,如果在和别人视频聊天的时候,把摄像机设备换成虚拟的,那我不就能伪装成别人了吗
I am faker…