- 查找重复文件(基于大小和修改时间的判断方式,以及基于文件 hash 值的判断方式)
- 文件同步与备份(增量备份、文件同步、备份还原)
- 根据记录还原文件
- 一键清除目录下所有空文件夹
- 搜索文件或者文件夹(可根据:文件名、文件大小、时间戳、文件数据类型、音视频时长、图像和视频分辨率、拍摄时间、文本内容搜索,支持正则匹配)
- 拷贝目录结构(导出到文件、从文件恢复目录结构、导出目录结构到新目录下)
- 比对文本文件内容(比对文章、文档、代码的差异并将结果输出,可批量比对)
- 计算文件 hash 值
- 提取视频帧图像(可以批量快速提取指定视频的某一帧或者某一秒的图像)
- 查找相似图片(计算图片的相似度,并将满足相似度阈值的图片移动到指定目录,可以有效找出不同分辨率、不同大小、经过裁剪或者加过水印的相似图片)
- 查找相似视频(比对视频帧图像的相似度找出内容一致但分辨率不一致的视频)
- 以图搜图(选中图片在另一任意目录中搜索与之相似的图片)
- 以视频搜相似视频(选中视频在另一任意目录中搜索与之相似的视频,主要用于找出内容一样但是分辨率不同,或者内容一样只是水印有差异的视频)
- 批量重命名
- 视频截取(用于截取视频片段,也可以批量对目录下的视频进行裁剪)
- 音频处理(用于从视频中提取音频、从音频中提取音频片段、转换音频格式)
- 图片处理(“WEBP转JPG”、“HEIC转JPG”以及其他常用图片格式转换)
- 文本编码转换(检索指定编码的文本,转换文本编码格式,Windows(CRLF) 与 Unix(LF)转换)
- 获取时间戳(时间与时间戳之间相互转换)、修改文件的时间戳、识别文件MIME数据类型、读取图片EXIF数据、视频和音频元数据并导出excel表格,修改照片、视频的时间戳为拍摄时间
所有的文件删除、文件更新操作进行防呆保护,最大限度保证数据安全!
所有操作都有日志,方便追溯和还原。涉及程序配置内容修改的操作会有权限验证。
注意:exif库在读取heic文件时会报错 exifread.heic.NoParser: hdlr,解决方法安装低版本,命令 pip install "exifread<3" 或 pip install exifread==2.3.2
注意:运行源码如果不是在pycharm中运行,项目所有代码目录下都要新建一个空白__init__.py文件(python包与模块的概念)
1.程序所需第三方包windnd, natsort, pywin32, pillow, pillow_heif, exifread, filetype, chardet, pymediainfo
安装方式 pip install xxxx
2.进入bin目录
运行方式 python filemanager.py
- 直接下载打包好的filemanager.zip
- 解压后运行目录下的filemanager.exe 即可
- 除非必要否则不要轻易修改设置内容
- 数据无价,谨慎操作!
- 过滤选项输入框输入 文件后缀名 即可,要过滤多种文件时,只需在每个后缀名用逗号 , 分隔就行,可以不区分中英文逗号 例如: jpg,mp4
- 勾选 根据修改时间排序 选项,则会将文件先按修改时间戳排序,再查找重复文件
- 勾选 导出所有hash值相同的文件 选项,则会将所有hash值相同的文件全部导出,否则会保留每组hash值相同的文件集合的第一个文件,而将其他重复文件导出
- 勾选 时间偏移 选项,则 同名且文件大小相同 并且时间戳差值在 时间偏移 范围内的文件会判定为文件一致!该选项主要用来解决不同文件系统记录的时间戳精度问题!(比如一个时NTFS,另一个是FAT),则可以勾选时间偏移修正,正常情况下,时间偏移修正 2 秒即可。
- 勾选 校验hash值 选项,则会通过校验文件hash值判定是否文件一致!注意:勾选该选项后比对文件耗时较长。
- new_old_record路径为之前程序操作导出的 新旧文件名记录 ,在程序界面会显示,或者在日志里也能找到,该记录文件一般保存至Record目录下,为文件名带有new_old_record标识的txt文件。
- 点击 还原 按钮,会将之前导出的文件还原回其原来的位置;点击 重做 按钮,会将文件重新进行一次导出操作,即撤销还原。
- 勾选 覆盖 选项,则在移动文件过程中遇到目标路径已存在的同名文件则会直接覆盖该文件,勾选 跳过 选项则会跳过移动该文件!
- 勾选 递归 选项时会搜索源目录下所有的子项目(包含子文件夹下的),不勾选则只会搜索源目录下的项目,对于子文件夹下的项目则不会搜索。
- 勾选 后缀名识别 选项,对无法根据字节码识别文件类型的,可根据后缀识别。例如纯文本文件、APE格式等
- 勾选 包含未知类型 选项,则搜索结果包含无法识别数据类型的文件,例如一些私有格式
- 勾选 分辨率位置严格一致 选项,输入的分辨率宽必须是宽、高必须是高。例如输入分辨率
1920x1080
,勾选该选项时强制匹配1920x1080
,不勾选则会匹配1920x1080
和1080x1920
。 - 关于 搜索语句 输入框内容
- 选择 文件名 搜索模式时,这里输入搜索语句 (支持正则语句)
- 选择 路径记录 搜索模式时,这里输入的是TXT文件的路径,注意:该TXT文件内,每个文件名或路径单独占一行,且该TXT最好为UTF-8编码,且每一行前后无空格,支持正则语句,比如
.*.jpg
或者.*/bin/.*.py
- 选择 数据类型 时,这里输入想要搜索的 数据类型(rar,jpg,mp4等),或者 文件类型(image,video等),支持通配符
*
匹配所有,支持^[ ]
排除选项,^[*]
用来排除所有可以识别的类型,例如:^[video,image,audio]
就表示排除视频、图片和音频文件,注意:排除项优先级最高! 搜索时*^[jpg,video]
表示匹配所有可以识别文件数据类型的文件,然后排除jpg和视频类型的文件! - 选择 文件内容 搜索模式时,输入搜索语句 (支持正则语句) ,会搜索源目录下纯文本文件内容
- 勾选 按时间筛选 选项,可以根据 创建时间、修改时间、拍摄时间 筛选搜索到的结果
- 关于 过滤 功能,过滤语句输入框,输入标准正则语句即可
- 关于 导出模式 选项
- 导出到单级目录,即会将搜索到的所有文件导出到目标目录下,这种情况是有文件覆盖风险的,谨慎选择!比如源目录下有两个文件
a/b.txt
和c/b.txt
虽然同名但是父目录不同,但是如果选择 导出到单级目录 就会出现文件重名,会有覆盖风险,导致数据损失! - 导出到单级目录并附带目录描述,例如
a/b/c.txt
和a/d/c.txt
导出到 e 目录下,则新文件名为c.txt__[a_b].txt
和c.txt__[a_d].txt
,能有效避免 不同目录下同名文件 移动到 同一目录 下的文件覆盖风险! - 保持原目录层次,即保留原目录结构,例如
a/b/c.txt
和a/d/c.txt
导出到 e 目录下,则新文件路径为e/b/c.txt
和e/d/c.txt
,也能有效避免文件覆盖风险!
- 导出到单级目录,即会将搜索到的所有文件导出到目标目录下,这种情况是有文件覆盖风险的,谨慎选择!比如源目录下有两个文件
- 关于 遇重名 选项,若目标路径存在同名文件,勾选 覆盖 则会覆盖该文件,勾选 跳过 则不会操作文件!
- 点击 文件覆盖风险检测 按钮,会检测 源目录 导出文件到 目标目录 是否存在文件覆盖风险。
- 关于 文本编码 如果不确定文本的编码格式可选择 自动适配,则程序会自动适配文件编码格式,但是耗时较长
- 关于 结果显示 勾选 全文显示 则会显示完整文本内容, 勾选 仅显示差异行 则只会显示内容有差异的前后行
- 勾选 修改HTML行宽 选项,则输出结果html文件行宽就设定为 用户输入的行宽 ,否则默认行宽为 100
- 注意: 模式选择 选项,只针对点击 浏览 按钮 选择文件或目录路径 时有效,如果直接 拖拽文件或目录 进入程序界面或者手动输入路径 时可以不用理会该选项
- 关于 切换大小写 选项,勾选 大写 则计算结果(Hash值)切换为英文大写,勾选 小写 则计算结果(Hash值)切换为英文小写
- 在底部输入框输入要搜索的内容 例如Hash值,点击 查找 按钮,会搜索之前计算的结果中符合的内容(目前不支持正则语句)
- 注意:浏览模式 选项 和 计算 按钮,都是搭配点击按钮选择文件或者手动输入路径时使用的,如果时直接拖拽文件,则不需要理会
- 选择 按秒数提取 选项,输入框可以接受 小数 和 负值(代表倒数时间,即视频总时长-该数值)
- 选择 按帧数提取 选项,输入框可以接受 整数(必须是正数),实现 每隔输入数值的帧数 提取一帧图像;勾选 限定帧范围(正整数) 选项,则整个按帧提取操作只会在指定范围内操作
- 勾选 继续上次进度 选项,当 目标路径已存在目标文件(要提取的图片文件) 时,直接跳过该文件,不再重复提取/操作,本程序多个页面有该选项,功能一致
- 勾选 启用多线程 选项,则开启多线程加速,否则默认为单线程提取。受限于python本身GIL、磁盘IO、多线程加锁等原因,多线程提速有限,不过比单线程还是快不少
- 相似度阈值 为两张图片相似度值,取值为 0-1 之间的小数,0.95-0.98 已经能识别大部分相似图片,包括 分辨率不同、轻微水印、轻微图片裁切 的同一内容图片,本程序后续几个页面都有该选项,后续不再赘述。
- 勾选 数据库加速 选项,则默认会使用数据库中的记录值,不再重复计算,程序运算效率提升特别大。注意:数据库的记录会和磁盘文件进行时间戳和文件大小双重比对,结果准确度有保障!
- 勾选 仅计算相邻图片 选项,则 每张图片只会和相邻图片进行相似度比对 ,而不再和全部图片做比对!
- 时间输入框接受 小数 和 负值(代表倒数时间),比对视频的 该时间的帧图像 相似度。
-
勾选 高亮显示 选项,会将匹配到的内容 以特别样式 高亮显示。
-
勾选 操作后缀名 选项,会操作 完整文件名(包含后缀名),不勾选则只会操作 文件名部分(不含后缀名)
-
勾选 匹配后缀名 选项,匹配时会匹配 完整文件名(包含后缀名),不勾选则只会匹配 文件名部分(不含后缀名),注意:该选项通常和 操作后缀名 成对使用!
-
勾选 按自然数排序 选项,文件会按自然数排序。否则会按字符串排序。
自然数排序 字符串排序 1.jpg 1.jpg 2.jpg 11.jpg 11.jpg 111.jpg 22.jpg 2.jpg 111.jpg 22.jpg -
匹配模式选择 正则匹配 时,可以勾选 忽略大小写差异 选项,可以兼容大小写,即正则开启 re.I 模式
-
关于 重命名模式
- 替换字符,即用新字符串替换掉搜索语句匹配到的内容
- 插入字符,在指定位置插入字符
- 插入编号,在指定位置插入自动递增编号
- 插入时间,在指定位置插入时间信息
- 删除字符,删除指定区间的字符
- 文件名重构,重新构造文件名,在新字符串输入框输入要重构的文件名模型,
%time
表示时间,%num
表示编号,%res
表示匹配到的内容 例如:新字符串输入框输入 旅游-IMG_%num_%time.jpg,编号初始值输入 0,零位数输入 3,时间格式输入框输入 %Y%m%d_%H%M%S,则所有文件名重命名为 旅游-IMG_001_20201020_131420.jpg 这种格式! - 后缀名还原,会将文件后缀名还原为真实文件类型后缀名,例如 png,jpg
-
关于 命名参数输入区
- 插入位置是 索引值(即第 n 个字符就输入 n-1 的值,要在第 2 位插入,就填 1),从 0 开始,-1 为最后一个,end 、e 、END 表示末尾
- 编号初始值 为第一个文件编号开始数值,零位数 为总编号位数
- 删除第几个字符至第几个字符(索引值!即第 n 个字符就输入 n-1,第一个字符就是 0),-1 为最后一个,end 表示末尾
- 标准时间格式:%Y四位数年份,%y两位数年份,%m月,%d日,%H时,%M分 ,%S秒,例如 %Y-%m-%d %H:%M:%S 就输出 2020-10-20 13:14:20
- 视频时长格式:%H%M%S,例如 %H小时%M分%S秒 就输出 2小时12分钟24秒,%Hhours%Mmins 就输出 2hours12mins
- 分辨率格式:%width|%w 和%height|%h,例如 %widthx%height 或者 %wx%h 就输出 1920x1080
-
操作顺序
- 输入路径、搜索语句,设置操作模式和搜索模式
- 点击搜索按钮,搜索符合条件的文件/目录
- 选择重命名模式,输入重命名模型或字符串,点击“预览”按钮,预览重命名效果
- 点击重命名按钮,执行重命名操作
- 勾选 修改格式、 修改帧率 选项,则会修改导出的文件格式以及参数,否则会保持原格式和参数
- 勾选 继承原修改时间 选项,则将导出的文件时间戳设置为原视频的修改时间
- 勾选 清空时间输入框内容 选项,则每次添加任务后会清空时间输入框的内容,不勾选则会保留输入框内容,方便下次复用,不用重新填写
- 勾选 去除音频 选项,则会输出无音频的视频。tips:本页面也可以操作音频文件,勾选该选项时会输出空白的音频文件!
- 点击 更改保存路径 按钮,可以设置视频导出路径,默认是保存在原视频目录下的videoCut目录中。
- 关于 时间输入区
- 可以输入负数,输入 负数 代表视频 总时长 减去 该输入框时间单位 乘以 输入数值
- 开始时间输入框不输入,则代表 0
- 结束时间输入框不输入,则代表 视频总时长
注意:若输入的路径是目录或者拖拽文件夹进入程序界面,则会批量操作该目录下的所有视频!
-
勾选 修改音频采样率 选项,则可以修改音频采样率,默认为 44100,亦为 44.1MHZ
-
勾选 修改音频比特率 选项,则可以修改音频比特率,192k、128k、320k
-
勾选 采用原编码 选项,导出音频时会采用原音频的编码,需注意,只有当 输出的音频格式 和 原音频格式 一致时才能使用这个选项!!!
目前发现ffmpeg导出aac格式音频之后会丢失时长信息,该音频文件可以正常使用,但是基于该音频的二次操作(涉及时间区间截取)就会出现时长出错的问题,如果不截取时间区间,只是单独转换格式没有问题
- 设置图片保存质量(取值 1-100) 以及 设置编码器子采样(取值 0,1,2),主要用在JPEG等压缩格式。
- 勾选 保留EXIF信息 选项,则会保留照片EXIF信息,目前该选项仅支持JPEG格式图片!
- 勾选 设置ICO图标的尺寸 选项,默认输出所有能支持的尺寸,也可以设置保存为某一种或某几种尺寸,ICO尺寸支持16x16,20x20,24x24,32x32,48x48,64x64,128x128,256x256 ,设置时只需输入需要的尺寸分辨率数值,例如 16,32,128即可
- 选择 转码 选项时,会将文本文件编码格式从第一种转码为第二种编码,例如 GBK 转UTF-8,已知文件编码的情况下,转码会很快! 注意:若第一个输入框不填,则会自动检测匹配源文件编码格式!
- 勾选 文件名添加编码 选项,则文件名添加文本编码描述,例如
1.txt_[UTF-8].txt
- 勾选 时间偏移 选项,修改时间戳的时候可以设置时间偏移,比如选 等差 输入 2,每个文件的时间戳会在上一个时间戳基础上 +2 秒,又比如选 随机 输入 -3, 则每个文件时间戳会在上一个时间戳基础上 减去0-3之间的一个随机小数 秒
- 勾选 按原文件时间修改 选项,则会按照 文件原本的时间戳 修改时间,否则 按输入时间 修改文件时间
- 时间输入框 输入时间格式为标准时间格式 *%Y-%m-%d %H:%M:%S,例如 2022-01-01 06:59:59
- 勾选 批量操作 选项, 可以同时操作多个项目,即可以同时选中多个文件或文件夹拖拽进程序界面,程序会批量操作这些项目
- 关于 递归操作 选项
- 勾选该选项后开启 递归遍历 功能,遇见文件夹会操作该文件夹下所有文件/子文件夹。不勾选,程序遇见文件夹的时候,只会操作该文件夹! 注意:该选项必须搭配 递归子文件 和 递归子文件夹 子选项使用!
- 同时勾选 递归子文件 ,会遍历路径下的所有子文件,即获取路径下所有文件!
- 同时勾选 递归子文件夹 ,会遍历路径下的子文件夹,即获取路径下所有目录!
- 勾选 后缀名识别 选项,遇见无法用字节码识别文件真实数据类型时可以使用后缀名识别文件类型,例如文本类型、ape等
- 勾选 读取文件元数据 选项,则会读取并显示 照片拍摄时间、经纬度、高度、拍摄设备、视频、音频分辨率、码率、比特率等信息
- 勾选 读取完整元数据 选项,则会读取并显示 完整照片EXIF、视频音频元数据
- 点击 获取当前时间 按钮,可以获取 当前时间戳和本地时间
- 点击 查看文件时间戳 按钮,可以查看 文件时间戳、数据类型、元数据等信息
- 点击 修改文件时间戳 按钮,可以修改当前文件路径下文件、目录时间戳信息,搭配递归操作选项实现更多功能
- 点击 修改媒体文件时间为拍摄时间 可以修改 照片、视频 时间戳为拍摄时间(若该文件无拍摄信息则跳过)
- 点击 导出媒体文件信息 按钮,可以导出 照片、视频、音频 文件信息(包含元数据信息)到excel文件
-
选择 文件类型 模式,可以按 文件类别(video,image) 或者 数据类型(jpg,mp4,text) 对文件进行分类
-
选择 自定义数据段 模式,可以根据 EXIF数据段、视频或音频元数据数据段对文件进行分类
-
勾选 后缀名识别 选项,对于无法用字节码识别数据类型的文件用后缀名识别
-
勾选 MIME归类 选项,则按MIME类型名创建目录层次
video/mp4/1.mp4
,不勾选则目录层次为mp4/1.mp4
注意:MIME类型数据类型名和我们常用的数据类型名可能会有些不一样 -
关于 参数设置
- 文件时间参数:(%Y四位数年份,%m月,%d日,%H时,%M分,%S秒)
参数 示例 %Y-%m-%d 2020-01-30 %Y-%m-%d_%H%M 2020-01-30_0930 - 视频时长参数:%H %M %S 组合
参数 示例 %H%M%S 1hour30min9sec %H 1hour %H%M 1hour30min - 文件大小参数:%MB %GB %KB %B 或者%M %G %K 组合
参数 示例 %MB 120.2MB %G 1.3GB - 分辨率参数:%width、 %height 或%w、 %h分别表示宽、高
- IO线程数、 计算线程数 提取视频帧图像、计算相似度时开启的线程数,受限于磁盘IO、硬件性能、不建议开启过多线程
- 勾选 使用安全删除 选项,删除文件不会直接从硬盘删除,而是会放到safe_del目录下,可以恢复(类似系统的回收站一样),防止误删造成损失
- 勾选 在文件所在分区创建safe_del目录 选项,删除文件会移动到该文件所处分区的safe_del目录,不勾选,则会移动到程序所在目录下的safe_del目录下
- 系统编码格式 目前windows中文是GBK编码
注意:设置界面,默认所有选项是不可操作,要想修改程序设置,需先进行 权限验证,修改后要点击 保存到设置 按钮,方才修改生效 为了数据安全考虑,每次修改设置后都将退出程序,需要手动重启程序!且程序有正在执行中的任务时,不允许修改设置!