对于视频监控解决方案,我想将传入视频 (TS/UDP) 的缩略图推送到 S3 存储桶,然后这些缩略图会显示在网页上
目前以下 bash 循环正在运行:
while true; do
ffmpeg -i udp://:5010 -vf "select='eq(pict_type,PICT_TYPE_I)'" -frames:v 1 -vsync vfr -qscale:v 15 -an -s 320x180 -f image2pipe - | aws s3 cp - s3://bucketname/prefix/preview.jpg
done
因此,它会同步传入的 TS 流,获取 I 帧,将其缩放到 320x180,然后将其传送到 AWS 命令行以上传到存储桶。它会在 1 帧后停止,然后 while 循环会再次执行此操作
我现在正在寻找是否有办法优化并连续执行此操作而无需循环,以便获得更流畅的缩略图流程。
我尝试了以下操作:
ffmpeg -i udp://:5010 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr -qscale:v 15 -an -s 320x180 -f image2pipe - | aws s3 cp - s3://bucketname/prefix/preview.jpg
当然,它将缩略图作为连续流传输到 S3 对象中,该对象永远不会关闭,因此永远不会出现。
如果我在本地写入文件而不是通过管道传输
ffmpeg -i udp://:5010 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr -qscale:v 15 -an -s 320x180 -update 1 preview.jpg
我可以看到,对于每个缩略图,文件都会被关闭并在下一张图片中被覆盖。
因此,我正在寻找类似的方法将每个缩略图作为单独的对象(同名因此覆盖)推送到 S3。
我曾考虑使用 rclone/s3fs 将 S3 安装为本地路径,但我担心它将如何处理这种连续的文件流,它会增加一些延迟还是只上传一些文件。
我可以做一些 Python
提前致谢