如何用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
相关产品推荐
相关产品推荐

