如何实现视频文件名自动递增 保存时避免覆盖已有同名文件
实现方案
你需要新增一个自动生成递增文件名的函数,逻辑为从序号1开始逐个判断对应文件是否已存在,直到找到第一个未被使用的序号,用它生成最终保存文件名,即可实现不覆盖已有文件的需求。
步骤1:新增递增文件名生成函数
import os.path as osp def get_incr_filename(save_dir, base_name="Summary", ext=".mp4"): idx = 1 while True: candidate_name = f"{base_name}_{idx}{ext}" full_path = osp.join(save_dir, candidate_name) if not osp.exists(full_path): return full_path idx += 1
步骤2:修改原有代码逻辑
你原有代码存在逻辑错误:判断保存目录不存在才创建视频写入器,正确逻辑是目录不存在时先创建目录,再生成合法文件名创建写入器,修改后完整代码如下:
import cv2 import h5py import os import os.path as osp import argparse parser = argparse.ArgumentParser() # 把原来固定的save_name拆分为前缀+后缀参数,方便调整 parser.add_argument('--save-name-base', type=str, default='Summary', help="保存文件名前缀") parser.add_argument('--save-ext', type=str, default='.mp4', help="保存文件后缀") parser.add_argument('--save-dir', type=str, default='log', help="保存文件目录") # 保留你原有需要的其他参数,示例如下,可按需调整 parser.add_argument('--fps', type=int, default=30, help="视频帧率") parser.add_argument('--width', type=int, default=1920, help="视频宽度") parser.add_argument('--height', type=int, default=1080, help="视频高度") parser.add_argument('--dataset', type=str, default='dataset.h5', help="数据集路径") args = parser.parse_args() def frm2video(frm_dir, summary): # 先判断保存目录是否存在,不存在则创建 if not osp.exists(args.save_dir): os.makedirs(args.save_dir, exist_ok=True) # 生成不重复的递增文件名 final_save_path = get_incr_filename(args.save_dir, args.save_name_base, args.save_ext) # 初始化视频写入器 vid_writer = cv2.VideoWriter( final_save_path, cv2.VideoWriter_fourcc(*'mp4v'), args.fps, (args.width, args.height) ) # 原有处理逻辑写在这里,遍历summary对应的帧写入视频 h5_res = h5py.File(args.dataset, 'r') # ===== 你的帧写入逻辑 ===== h5_res.close() vid_writer.release() print(f"视频已成功保存:{final_save_path}")
注意事项
- 单进程运行场景下上述代码可直接使用,无需额外调整
- 若有多进程同时写文件的需求,需要额外增加文件锁避免冲突
- 需要自定义文件名前缀时,直接修改
--save-name-base参数即可
内容的提问来源于stack exchange,提问作者user16319883
相关产品推荐
相关产品推荐

