python - 使用python从网络摄像头修剪(删除帧)实时视频

标签 python ffmpeg video-streaming video-processing video-capture

我有一个捕获视频流的网络摄像头。 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.avioutput_1.avi .每 30 秒输出将在这些文件之间交替并覆盖早期版本。
您可以使用 -segment_wrap 1并且只输出 1 个文件,但您可能会丢失视频。例如,在 32 秒处停止录制会给您留下 2 秒的视频,而不是 30 秒的视频 + 2 秒的视频。

关于python - 使用python从网络摄像头修剪(删除帧)实时视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63828446/

相关文章:

IIS 服务器流式 Onvif IP 摄像机中的 FFMPEG 在线重新分发

ffmpeg - 如何将视频列表推送到 rtmp 服务器并保持连接

html - 允许为问题和其他用户交互嵌入 HTML 的视频播放器

python - SQLAlchemy 从查询结果中访问列类型

python - Re.sub 不适合我

linux - ffmpeg 序列从 30 开始,并在每个图像名称中添加 30

iphone - 在 iOS 5 上禁用字幕会在屏幕上保留最后显示的字幕文本

Python根据其他列(字典单词)计算出现次数

python - QuerySelectField 在一台服务器上工作,在另一台服务器上使用相同的代码中断

c# - 使用 C# 捕获嵌入式视频的屏幕截图