Files
MyTool/03-音乐去重.md

126 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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)的结果
- 验证不同格式/码率的优先级规则