126 lines
4.4 KiB
Markdown
126 lines
4.4 KiB
Markdown
## 03 - 音乐去重
|
||
|
||
### 1. 功能概述
|
||
|
||
- **功能名称**:音乐去重
|
||
- **后端服务**:`DedupService`
|
||
- **前端组件**:`DedupTab.vue`
|
||
|
||
**主要用途**:
|
||
|
||
- 在大型音乐库中识别并处理重复文件,减少存储占用,保持库结构干净整洁。
|
||
|
||
> 去重结果高度依赖音频元数据(标签)的质量,建议先用专业刮削工具整理好标签。
|
||
|
||
### 2. 前置条件与推荐工具
|
||
|
||
- 去重算法依赖以下标签信息:
|
||
- 艺术家(Artist)
|
||
- 标题(Title)
|
||
- 专辑(Album)
|
||
- 时长(带一定误差容忍)
|
||
- **推荐刮削工具**:
|
||
- `MusicBrainz Picard`(开源免费,专业级)
|
||
- `音乐标签` PC 版(中文界面,更易上手)
|
||
|
||
### 3. 双重去重策略
|
||
|
||
#### 3.1 MD5 哈希去重
|
||
|
||
- 对每个音频文件计算 MD5 值
|
||
- 相同 MD5 值视为完全相同的二进制文件
|
||
- 适用于“完全拷贝”的重复场景(如不同目录下的同一文件)
|
||
|
||
#### 3.2 元数据匹配去重
|
||
|
||
- 按以下字段组合匹配:
|
||
- 艺术家 + 标题 + 专辑 + 时长(允许 ±5 秒误差)
|
||
- 对候选重复组内的文件进行打分,选出“保留对象”:
|
||
- **格式优先**:`FLAC` > 其他无损 > 有损
|
||
- **码率优先**:码率越高得分越多
|
||
- **文件大小**:更大的文件通常音质更好
|
||
- **文件名匹配度**:文件名包含艺术家/标题会加分
|
||
|
||
### 4. 智能评分与选择策略
|
||
|
||
- 为候选重复组内每个文件计算综合评分:
|
||
- 格式加权:FLAC 加较高权重
|
||
- 码率加权:高码率文件加分
|
||
- 文件大小:极小文件(疑似样本或损坏)会被减分
|
||
- 文件名噪声惩罚:数字前缀、无意义后缀、过多符号会被扣分
|
||
- 最终选择得分最高的文件作为“保留文件”,其他作为“候选删除/移动对象”。
|
||
|
||
### 5. 安全机制与执行模式
|
||
|
||
- **移动模式**:
|
||
- 将重复文件移动到指定“回收站”目录,可后续人工检查与恢复
|
||
- **复制模式**:
|
||
- 将重复文件复制到回收站目录,原库保持不变,适合试运行和验证规则
|
||
- 建议先使用 **复制模式** 验证规则效果,再切换到 **移动模式** 正式清理。
|
||
|
||
### 6. 前端交互流程
|
||
|
||
1. 用户选择音乐库根目录和回收站目录
|
||
2. 勾选去重策略(是否启用 MD5、是否启用元数据匹配)
|
||
3. 执行任务后,通过 WebSocket 获取去重进度与当前处理文件
|
||
4. 任务结束时展示:
|
||
- 扫描文件总数
|
||
- 识别的重复组数量
|
||
- 实际移动/复制的文件数量
|
||
|
||
### 7. 建议使用顺序
|
||
|
||
- 通常在完成以下步骤后使用去重:
|
||
1. 使用刮削软件整理标签
|
||
2. 可选:使用 **01-音频文件汇聚** 汇总散落文件
|
||
3. 可选:使用 **02-音频格式智能处理** 统一为 FLAC
|
||
- 去重完成后再交由 **05-音乐整理** 和 **06-整理入库** 进一步规范库结构。
|
||
|
||
### 8. 测试用例需求
|
||
|
||
#### 8.1 后端测试
|
||
|
||
**单元测试**:
|
||
- 测试 MD5 哈希计算的准确性与性能
|
||
- 测试元数据匹配逻辑(艺术家+标题+专辑+时长容差)
|
||
- 测试文件评分算法(格式、码率、文件大小、文件名匹配度)
|
||
- 测试重复组筛选与保留文件选择逻辑
|
||
- 测试文件名噪声识别与惩罚规则
|
||
|
||
**集成测试**:
|
||
- 准备测试数据集:
|
||
- 完全相同的文件副本(MD5 去重场景)
|
||
- 相同歌曲的不同版本(不同格式、不同码率)
|
||
- 标签不完整的文件(测试容错性)
|
||
- 测试完整的去重任务执行流程
|
||
- 验证去重结果的准确性:保留文件是否为最优选择
|
||
- 测试移动/复制模式的正确执行
|
||
- 测试异常场景:无标签文件、损坏文件、权限不足
|
||
|
||
#### 8.2 前端测试
|
||
|
||
**单元测试**:
|
||
- 测试音乐库与回收站目录的路径校验
|
||
- 测试去重策略勾选的状态管理
|
||
- 测试去重结果统计的展示
|
||
|
||
**集成测试**:
|
||
- 测试完整的用户操作流程
|
||
- 测试去重结果预览(如果有)
|
||
- 测试任务进度与当前处理文件展示
|
||
|
||
**测试数据**:
|
||
- 小规模场景:100 个文件,10 对重复
|
||
- 中等规模场景:5000 个文件,500 对重复
|
||
- 大规模场景:50000+ 个文件,测试性能
|
||
- 边界场景:
|
||
- 全部文件都是重复
|
||
- 完全没有重复
|
||
- 标签缺失或错误
|
||
- 多个版本的重复组(3 个以上相同歌曲)
|
||
|
||
**质量验证**:
|
||
- 人工抽查去重结果,验证保留文件的合理性
|
||
- 对比专业去重工具(如 Mp3tag)的结果
|
||
- 验证不同格式/码率的优先级规则
|