You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用OpenCV、imutils实现视频每分钟自动保存并重启录制

解决方案

要实现每分钟自动分段保存录制视频,核心逻辑是在帧循环中增加时间校验,达到设定时长后自动关闭当前视频写入器,生成新文件后继续录制。

完整修改后代码

import imutils 
import cv2
import time  # 新增:用于计算录制时长

# 配置参数
video = ""
SEGMENT_DURATION = 60  # 单段视频时长,单位秒,这里设60即1分钟
FPS = 25  # 录制帧率

if video == "":
    print("[webcam start]")
    vs = cv2.VideoCapture(0)
else:
    print("[video start]")
    vs = cv2.VideoCapture(video)

writer = None
segment_start_time = time.time()  # 记录当前分段的开始时间

while True:
    ret, frame = vs.read()
    if frame is None:
        break

    frame = imutils.resize(frame, width=320, height=240)
    cv2.imshow("frame", frame)

    # 原有的退出逻辑保留
    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        break

    # 新增:判断是否到分段时间
    if time.time() - segment_start_time >= SEGMENT_DURATION:
        # 关闭当前写入器,完成上一段视频保存
        if writer is not None:
            writer.release()
        # 重置写入器和分段开始时间,下一轮生成新文件
        writer = None
        segment_start_time = time.time()
        print("已完成1分钟分段录制,启动新片段录制")

    # 写入器为空时,创建新的视频文件,文件名带时间戳避免覆盖
    if writer is None:
        fourcc = cv2.VideoWriter_fourcc(*"MJPG")
        # 生成带时间戳的文件名,格式:result_video_年月日_时分秒.avi
        result_path = f"result_video_{time.strftime('%Y%m%d_%H%M%S')}.avi"
        writer = cv2.VideoWriter(result_path, fourcc, FPS, (frame.shape[1], frame.shape[0]), True)

    # 写入当前帧
    if writer is not None:
        writer.write(frame)

# 释放资源
vs.release()
# 新增:退出时释放当前写入器,保证最后一段视频正常保存
if writer is not None:
    writer.release()
cv2.destroyAllWindows()

核心改动说明

  • 新增time模块计算录制时长,可通过修改SEGMENT_DURATION参数自定义单段视频的时长
  • 每个分段视频使用带时间戳的独立文件名,不会出现旧文件被覆盖的问题
  • 达到分段时长时自动完成上一段视频的保存,自动初始化新的写入器开启下一轮录制
  • 补充了退出时的写入器释放逻辑,避免最后一段录制的视频文件损坏

内容的提问来源于stack exchange,提问作者MinJae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:27:00