ffmpeg 删除没有运动的部分

ffmpeg 删除没有运动的部分

我有一个 IP 安全摄像头(192.168.0.8),能够通过网络广播 rtsp 内容。

我能够使用计算机上的下一个 ffmpeg 命令保存该(RAW)内容而不进行任何更改:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -acodec copy -vcodec copy test-raw.mp4

我还可以随时调整其大小:

ffmpeg -i "rtsp://192.168.0.8/stream=0.sdp" -vf  "scale=640:-1" test640.mp4

但是如何仅保存包含运动检测部分的视频?

我尝试使用 ffmpeg 的场景变化滤镜,但没有运气。

我的目标是拥有一个通用的视频监控解决方案,它可以检测何时有人在摄像头附近移动并将其保存到视频文件中。我知道可能无法在流中即时执行此操作,因此我可以先保存大文件,然后用另一个 ffmpeg 命令处理它并生成仅包含运动检测部分的新视频文件。如果您能给我建议我应该进一步研究什么,我将不胜感激。

我的相机流传输时没有声音。因此,我可以从原始视频生成一组图像,然后挑选合适的图像,再从图像中保存新视频。

答案1

我要做的就是按照你说的做,保存一个大文件,然后使用select FFMPEG 过滤器使用scene表达式来比较连续帧的相似性: select=gt(scene\,0.003)例如。数字越高,帧之间的变化被忽略的就越多,在快速测试中,您可能需要将数字调低至 0.00001-0.00005,具体取决于您处理的素材类型。

将其与setpts 筛选,修改视频帧的“开始时间”,最终你会得到类似这样的结果(对于 25fps 的视频):

ffmpeg -i input.mp4 -vf "select=gt(scene\,0.003),setpts=N/(25*TB)" output.mp4

-vcodec copy请注意,当您使用视频过滤器时,您将无法使用。

相关内容