fix: 重复文件归类、图片探测与明暗分析健壮性

- organize/store: 按 MD5 去重,重复图片/视频/音频统一移入「重复文件」目录,不再覆盖已有记录
- probe/image: webp/bmp/psd/psb 专用解码失败后走 ffprobe 兜底,与通用路径一致
- probe/brightness: 大图内存缩放为缩略图再分析明暗,超4000万像素跳过分析防OOM
- README: 补充重复文件目录说明,修正 Go 版本为 1.25.0
This commit is contained in:
2025-04-12 21:02:16 +08:00
parent 39fe02b424
commit a667f7fa35
5 changed files with 162 additions and 38 deletions
+10 -2
View File
@@ -31,7 +31,7 @@
sh build.sh
```
- 依赖 Go 1.19+(`go.mod` 指定 1.19)
- 依赖 Go 1.25.0+(`go.mod` 指定 1.25.0)
- 构建时内嵌 **Windows 版 ffprobe**:`internal/probe/bin/ffprobe.exe`,需提前放置(未入库,见 `.gitignore`)
- `build.sh` 在 **Windows** 下 `go build` 后使用 `upx` 压缩,输出 `kenaito-media-picker.exe`
- 编译所需工具(ffmpeg / upx)压缩包已放在 `doc/` 目录,按需解压使用(upx 放置于项目根目录 `upx`)
@@ -81,6 +81,14 @@ kenaito-media-picker.exe
视频_已忽略 ← 非媒体文件或无法识别
```
### 重复文件
```text
重复文件 ← 与库中已有记录 MD5 相同的图片/视频/音频(不去重入库,单独存放)
```
> 文件按 MD5 去重:已入库的同一内容文件(不论图片、视频还是音频)统一移入「重复文件」目录。
> 视频时长与分辨率通过内嵌 ffprobe 读取(处理时会临时释放到当前目录、完成后自动删除);凡 ffmpeg 支持的视频/音频格式均可识别。
## 明暗评分算法
@@ -94,7 +102,7 @@ lightScore = 亮度 > 175 的像素占比
- **判定规则**:`lightScore` 高于 `darkScore` 15 个百分点以上归 `-bright_N`,反之归 `-dark_N`;差幅不足 15% 视为中性归 `-mid`(不强制二选一)
- **档位命名**:N 为占比四舍五入到 10% 的档位(10~100),如 darkScore 0.70 → `dark_70`,表示占比命中 [N-5%, N+5%) 区间
- **透明处理**:完全透明的像素(alpha=0)不计入统计,全透明图片归 `-mid`
- **性能**:大图(>100 万像素)自动采样加速
- **性能**:大图(>100 万像素)先等比缩放为最长边 512px 的缩略图(纯内存)再统计明暗,内存占用与耗时大幅下降;超 4000 万像素的图片直接跳过明暗分析(按中性 mid 归类)避免 OOM
## 目录结构