我有一个捕获视频流的网络摄像头。 30 秒后,我想从一开始就删除 1 秒的视频并继续捕获视频流,依此类推。总之,我只想保存最近30秒的直播视频。
OpenCV 不提供视频处理
ffmpeg 修剪视频但创建一个新的输出文件,我不想保留副本。
#Create a video write before entering the loop
#Create a video write before entering the loop
video_writer = cv2.VideoWriter(
video_file, video_codec, fps, (int(cap.get(3)), int(cap.get(4)))
)
#video_file is the file being saved
start = time.time()
i=0
seconds='1'
while cap.isOpened():
ret, frame = cap.read()
if ret == True:
cv2.imshow("frame", frame)
if time.time() - start > 10:
print('video > 10 sec')
subprocess.call(['ffmpeg', '-i', video_file, '-ss', seconds, 'output.avi'])
break
# Write the frame to the current video writer
video_writer.write(frame)
if i%24 == 0:
cv2.imwrite('image'+str(i)+'.jpg',frame)
i+=1
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
我正在寻找的是我们如何才能触发实时视频并继续保存 future 的帧,以便视频不超过 30 秒并保持最新的帧。
最佳答案
您可以使用 segment muxer :
ffmpeg -i input -f segment -segment_time 30 -segment_wrap 2 -reset_timestamps 1 output_%d.avi
这将创建两个文件:output_0.avi
和 output_1.avi
.每 30 秒输出将在这些文件之间交替并覆盖早期版本。您可以使用
-segment_wrap 1
并且只输出 1 个文件,但您可能会丢失视频。例如,在 32 秒处停止录制会给您留下 2 秒的视频,而不是 30 秒的视频 + 2 秒的视频。
关于python - 使用python从网络摄像头修剪(删除帧)实时视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63828446/