如何解决FFMPEG保存运动前的最后10秒和接下来的30秒
我有一个监视摄像机,可以处理逐帧实时视频。如果要移动,我想保存一个视频,其中包含移动前的最后10秒和移动后的下30秒。 我相信(可能是我错了),应该在没有解码-编码过程的情况下获得最后10秒+接下来的30秒任务。
我尝试将python与fmmpeg管道一起使用,以创建读取器和写入器,但是读取器的接缝速度太慢,无法传输数据流,并且丢失了一些数据包(=保存文件的视频质量较差)。
这是我的代码
import ffmpeg
import numpy as np
width = 1280
height = 720
process1 = (
ffmpeg
.input('rtsp://.....',rtsp_transport='udp',r='10',t="00:00:30")
.output('pipe:',format='rawvideo',pix_fmt='yuv420p')
.run_async(pipe_stdout=True)
)
process2 = (
ffmpeg
.input('pipe:',pix_fmt='yuv420p',s='{}x{}'.format(width,height))
.output("prova-02-11-2020.avi",r='10')
.overwrite_output()
.run_async(pipe_stdin=True)
)
while True:
in_bytes = process1.stdout.read(width * height * 3)
if not in_bytes:
break
in_frame = (
np
.frombuffer(in_bytes,np.uint8)
)
#In future I will save in_frame in a queue
out_frame = in_frame
process2.stdin.write(
out_frame
.astype(np.uint8)
.tobytes()
)
process2.stdin.close()
process1.wait()
process2.wait()
如果我跑步
ffmpeg -i rtsp://... -acodec copy -vcodec copy -t "00:00:30" out.avi
看起来,解码/编码过程是以快速/智能的方式完成的,不会丢失任何数据包。 我的梦想是在监控摄像头的python上实现相同功能,但与分析流的代码集成在一起。
我希望创建文件的流程不需要解码+编码。最后10秒的帧在队列中,在特定事件下,队列的边界加上接下来的30秒的帧被保存到avi文件中
我在实时流媒体上具有实时运动检测的约束
您有任何意见或建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。