将 ffmpeg 过滤器添加到运动图像输出

将 ffmpeg 过滤器添加到运动图像输出

我希望能够将梯形校正应用于网络摄像头流。原始图像流包含一个矩形背景,我使用矩形覆盖层,用户拖动其角以匹配图像中的实际角。最后,用户单击按钮将坐标发送到服务器。然后,服务器更新过滤器参数并重新启动流。使用ffmpegRTMP 流式传输到一切正常nginx,但生成的 HLS 流nginx滞后不令人满意和/或挂起。我使用过滤器如下:

-lavfi   "perspective=x0=100:y0=20:x1=520:y1=20:x2=100:y2=380:x3=520:y3=380:interpolation=linear:sense=source"

切换到使用motion流式传输图像具有更好的实时性能,我可以将图像完美地嵌入上述 HTML 中。问题是我找不到将过滤器插入流ffmpeg中的方法motion,我认为这仅适用于已保存的文件。可能吗?

答案1

在维护者的指点下motion,我已经完成了这项工作:

  1. 安装v4l2loopback设备。在我的例子中,它将环回设备报告为/dev/video2,因此ffmpeg命令从网络摄像头流经/dev/video0透视滤镜,校正梯形失真效果,并将结果放入/dev/video2
ffmpeg -f v4l2 -i /dev/video0 -f v4l2 /dev/video2 -lavfi \
     "perspective=x0=23:y0=43:x1=500:y1=38:x2=33:y2=467:x3=508:y3=471:interpolation=linear:sense=source"
  1. 按标准运行motion,但使用环回设备作为摄像头输入。

要顺利重新启动还需要做一些工作ffmpeg,但现在大部分已经完成了。

相关内容