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

Python实现按分钟阈值依修改时间删重复视频 保留最早文件

AVI录像重复文件清理脚本实现

核心逻辑

针对网络摄像头生成的AVI格式录像,按自定义分钟间隔阈值清理重复片段,仅保留相邻阈值间隔内最早生成的文件,执行流程如下:

  • 扫描指定目录下所有.AVI后缀文件,读取每个文件的修改时间戳
  • 将所有文件按修改时间从早到晚升序排序
  • 从最早的文件开始遍历,记录上一个已保留文件的时间:若当前文件与上一个保留文件的时间差小于设定阈值,标记为待删除;若时间差大于等于阈值,则保留当前文件,更新时间标记
  • 默认开启试运行模式,先打印待保留/待删除列表供核对,确认无误后再执行真实删除,避免误删

对应给出的测试场景:当阈值设置为2分钟时,08:30:15的Ek001.AVI为最早文件直接保留,08:30:40的Ek002.AVI与Ek001间隔25秒小于阈值标记删除,08:32:55的Ek003.AVI与Ek001间隔2分40秒大于阈值保留,完全匹配预期结果。

完整代码

import os
import glob
from datetime import datetime

# -------------------------- 可配置参数 --------------------------
TARGET_PATH = 'C:\\Users\\xxx\\*.AVI'  # 待扫描的AVI文件匹配路径
THRESHOLD_MINUTES = 2  # 分钟间隔阈值,相邻保留文件的时间差不小于该值
DRY_RUN = True  # 试运行开关:True时仅打印结果不删除文件,确认无误后改为False再执行真实清理
# ----------------------------------------------------------------

# 读取所有AVI文件的修改时间和路径
file_list = []
for file in glob.glob(TARGET_PATH):
    mtime = os.path.getmtime(file)
    file_list.append((mtime, file))

# 按修改时间从早到晚排序
file_list.sort(key=lambda x: x[0])

if not file_list:
    print("未找到匹配的AVI文件")
    exit()

# 遍历判定待保留/待删除文件
keep_files = []
delete_files = []
# 排序后的第一个文件默认保留
last_keep_mtime, last_keep_path = file_list[0]
keep_files.append((last_keep_mtime, last_keep_path))

for mtime, file_path in file_list[1:]:
    time_diff_min = (mtime - last_keep_mtime) / 60
    if time_diff_min < THRESHOLD_MINUTES:
        delete_files.append((mtime, file_path))
    else:
        keep_files.append((mtime, file_path))
        last_keep_mtime = mtime

# 打印统计结果
print("=" * 60)
print(f"当前间隔阈值:{THRESHOLD_MINUTES}分钟")
print(f"扫描到文件总数:{len(file_list)} | 待保留:{len(keep_files)} | 待删除:{len(delete_files)}")
print("=" * 60)
print("\n【待保留文件】")
for mtime, f in keep_files:
    print(f"{datetime.fromtimestamp(mtime).strftime('%Y-%m-%d %H:%M:%S')} --> {os.path.basename(f)}")

print("\n【待删除文件】")
for mtime, f in delete_files:
    print(f"{datetime.fromtimestamp(mtime).strftime('%Y-%m-%d %H:%M:%S')} --> {os.path.basename(f)}")

# 执行删除操作
if not DRY_RUN:
    print("\n开始执行删除...")
    for mtime, f in delete_files:
        try:
            os.remove(f)
            print(f"已删除:{os.path.basename(f)}")
        except Exception as e:
            print(f"删除{os.path.basename(f)}失败:{str(e)}")
else:
    print("\n当前为试运行模式,未执行任何删除操作。核对列表无误后,将代码中DRY_RUN参数改为False即可执行真实清理。")

使用注意事项

  • 首次运行务必保持DRY_RUN = True,仔细核对输出的待保留、待删除列表,确认符合预期后再关闭试运行模式
  • 可根据实际录像重叠情况调整THRESHOLD_MINUTES参数,例如设置为1代表间隔小于1分钟的重复片段仅保留最早的1个
  • TARGET_PATH请替换为实际的录像存储路径,Windows环境下推荐使用原始字符串写法避免转义问题,例如r'C:\Users\你的用户名\摄像头录像\*.AVI'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:15:49