我有3个摄像头,它们在Ubuntu 18.04中分别注册为/ dev / video0,/ dev / video1和/ dev / video2。这三个函数在Cheese和ffplay中都显示良好(但由于某些原因而不是vlc ...对于这个问题并不重要)。
我想要打开一个查看窗口,使图像自动从设备0切换到设备1到设备2,并每隔X秒返回0,而无需关闭窗口或调整窗口大小。
我认为最终的解决方案将来自创建一个假冒的视频设备(假设为/ dev / video3),使用程序进行观看以及使用ffmpeg或其他命令行脚本来更改/ dev / video3的流。 (v4l2loopback看起来很有希望)
不幸的是,我在此上花了几个小时,却一无所获。任何帮助将不胜感激。
答案 0 :(得分: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个视频段。第一个视频片段采用cam 0和cam 1,并在0之上叠加1(但仅在5-10秒内)。第二段将凸轮2叠加在凸轮0 + 1的流上(但仅持续10-15秒)。第三段将凸轮3叠加在凸轮0 + 1 + 2的组合流上(但仅持续15-20秒)。每个流仅在循环中的“转弯”期间显示(再次为0-5、5-10、10-15、15-20的倍数),由叠加命令和Gyan建议的“ ++”模数魔术控制。