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

如何用OpenCV持续保存以日期时间命名的1分钟视频

实现每分钟循环录制视频并按时间命名保存

原代码只能完成单次1分钟录制,要实现每分钟重复生成视频,需要调整逻辑,用调度工具循环执行录制任务,同时处理好每次录制的文件命名和目录创建。以下是修改后的完整代码:

import cv2
import time 
from datetime import datetime
import schedule
import os

# 配置参数
FPS = 24
RESOLUTION = '480p'
PREFIX = 'Cam'
EXTENSION = 'avi'
SAVE_DIR_BASE = "/home/Desktop/CAM/"

# 分辨率配置
STD_DIMENSIONS = {
    "480p": (640, 480),
    "720p": (1280, 720),
}

def change_res(cap, width, height):
    cap.set(3, width)
    cap.set(4, height)

def get_dims(cap, res=RESOLUTION):
    width, height = STD_DIMENSIONS["480p"]
    if res in STD_DIMENSIONS:
        width, height = STD_DIMENSIONS[res]
    change_res(cap, width, height)
    return width, height

def record_one_minute_video():
    # 初始化摄像头
    cap = cv2.VideoCapture(0)
    if not cap.isOpened():
        print("无法打开摄像头")
        return
    
    # 创建当天的保存目录
    today = datetime.now().strftime('%d-%m-%Y')
    save_dir = os.path.join(SAVE_DIR_BASE, today)
    os.makedirs(save_dir, exist_ok=True)
    
    # 生成当前时间的文件名
    current_time = datetime.now()
    file_name = f"{PREFIX}-{current_time:%d-%m-%Y %H:%M-%S}.{EXTENSION}"
    save_path = os.path.join(save_dir, file_name)
    
    # 初始化视频写入器
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    width, height = get_dims(cap)
    out = cv2.VideoWriter(save_path, fourcc, FPS, (width, height))
    
    # 录制1分钟视频
    start_time = time.time()
    while time.time() - start_time < 60:
        ret, frame = cap.read()
        if ret:
            out.write(frame)
            cv2.imshow('CAM', frame)
        
        # 按q退出程序
        if cv2.waitKey(1) & 0xFF == ord('q'):
            cap.release()
            out.release()
            cv2.destroyAllWindows()
            schedule.clear()
            exit()
    
    # 释放资源
    cap.release()
    out.release()
    cv2.destroyAllWindows()
    print(f"已保存视频: {save_path}")

# 调度每分钟执行一次录制任务
schedule.every(1).minutes.do(record_one_minute_video)

# 启动调度循环
print("开始循环录制,按q退出...")
while True:
    schedule.run_pending()
    time.sleep(1)

关键改动说明

  • 封装录制函数:把单次录制的逻辑打包成record_one_minute_video,方便调度重复调用
  • 自动创建目录:每次录制前检查并创建当天的保存目录,避免因目录不存在导致保存失败
  • 定时调度:用schedule库实现每分钟自动触发录制,替代原代码的单次执行逻辑
  • 动态生成文件名:每次录制都用当前时间生成新文件名,保证不会覆盖旧文件
  • 完善退出逻辑:保留按q退出的功能,同时停止调度任务并退出程序
  • 资源重复初始化:每次录制都重新打开摄像头和创建视频写入器,避免多次录制时的资源占用问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:57:49