想知道是否可以使用支持 v4l2 的 ffmpeg(例如在 Ubuntu Linux 上)来创建虚拟网络摄像头设备,该设备可呈现真实网络摄像头输出的转换版本。这个想法是虚拟网络摄像头设备随后可以被流行的视频会议应用程序(如 Teams、Zoom、Google Talk 等)使用。
我正在研究的转换的性质是裁剪一些边缘、应用覆盖文本、应用色度键控、背景替换等。我正在寻找一种系统开销最小的机制,这就是为什么考虑 ffmpeg。
答案1
是的,这是可能的。
- 获取
v4l2loopback
模块apt-get install v4l2loopback-dkms
- 加载模块
modprobe v4l2loopback exclusive_caps=1 card_label="Virtual Webcam" max_buffers=2
- 运行
ffmpeg(1)
阅读从实际/物理网络摄像头和写作到“虚拟”网络摄像头。例如,我有一个旧网络摄像头,仅支持 640 像素 × 480 像素 @ 30.00 FPS(以及其他模式),但我喜欢将其裁剪为 16:10 的宽高比:
注意参数的顺序。例如,这里必须指定ffmpeg -f v4l2 -i /dev/video0 -pix_fmt yuyv422 -vf crop=h=400 -f v4l2 /dev/video1
‑pix_fmt
前(任何)‑vf
。 - 如果您更改了分辨率:
v4l2-ctl -d /dev/video1 --set-fmt-video=width=640,height=400,pixelformat=yuyv422
- 使用应用程序中的虚拟相机来庆祝。
我认为不值得一提,但为了完整性:apt‑get(8)
和modprobe(8)
需要以root
特权执行,而ffmpeg(1)
和v4l2-ctl(1)
以普通用户身份运行通常(也)是该团体的成员video
。团体的所有权/dev/video*
。
附言:一些重复的问题/答案是可以的,特别是如果你不能合并它们,因为它们在不同的网站上。