-1

我有 3 个网络摄像头,它们在 Ubuntu 18.04 中注册为 /dev/video0、/dev/video1 和 /dev/video2。这三个在 Cheese 和 ffplay 中都很好(但由于某种原因不是 vlc ......对于这个问题并不重要)。

我想要的是打开一个查看窗口,让图像自动从设备 0 移动到设备 1 再到设备 2 并每隔 X 秒回到 0,而无需关闭窗口或调整大小。

我认为最终的解决方案将来自创建一个假视频设备(比如说 /dev/video3),用程序观看它并使用 ffmpeg 或其他命令行脚本来更改 /dev/video3 的流。(v4l2loopback 似乎很有希望)

不幸的是,我在这上面花了几个小时却一无所获。任何帮助,将不胜感激。

4

1 回答 1

1

假设所有 3 个剪辑具有相同的属性,基本语法是

ffplay -f lavfi -i movie=filename="/dev/video0":f=v4l2,setpts=PTS-STARTPTS[v1];movie=filename="/dev/video1":f=v4l2,setpts=PTS-STARTPTS[v2];movie=filename="/dev/video2":f=v4l2,setpts=PTS-STARTPTS[v3];[v2][v3]overlay=enable='between(mod(t,15),10,15)'[v23];[v1][v23]overlay=enable='between(mod(t,15),5,15)'

这将显示 5 秒的 video0,然后是 5s 的 video1,然后是 5s 的 video2。

由 OP 编辑​​:使用这个建议,我能够让 4 台相机工作。

ffplay -f lavfi "movie=/dev/video0:f=video4linux2, setpts=PTS-STARTPTS [zero];movie=/dev/video1:f=video4linux2, setpts=PTS-STARTPTS [one];movie=/dev/video2:f=video4linux2, setpts=PTS-STARTPTS [two];movie=/dev/video3:f=video4linux2, setpts=PTS-STARTPTS [three];[one][zero]overlay=enable='between(mod(t,20),5,10)'[conn1];[conn1][two]overlay=enable='between(mod(t,20),10,15)'[conn2];[conn2][three]overlay=enable='between(mod(t,20),15,20)'[out]"

它定义了 4 个摄像头输入,然后执行 3 个视频片段。第一个视频片段采用凸轮 0 和 1,并将 1 覆盖在 0 之上(但仅持续 5-10 秒)。第二段覆盖凸轮 0+1 流上的凸轮 2(但仅在 10-15 秒内)。第三段将凸轮 3 覆盖在凸轮 0+1+2 的组合流上(但仅持续 15-20 秒)。每个流仅在循环中的“回合”期间显示(同样,0-5、5-10、10-15、15-20 的倍数),由 Gyan 建议的覆盖命令和 between+modulus 魔法控制。

于 2018-12-26T17:41:50.583 回答