4.4 KiB
4.4 KiB
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. 前端交互流程
- 用户选择音乐库根目录和回收站目录
- 勾选去重策略(是否启用 MD5、是否启用元数据匹配)
- 执行任务后,通过 WebSocket 获取去重进度与当前处理文件
- 任务结束时展示:
- 扫描文件总数
- 识别的重复组数量
- 实际移动/复制的文件数量
7. 建议使用顺序
- 通常在完成以下步骤后使用去重:
- 使用刮削软件整理标签
- 可选:使用 01-音频文件汇聚 汇总散落文件
- 可选:使用 02-音频格式智能处理 统一为 FLAC
- 去重完成后再交由 05-音乐整理 和 06-整理入库 进一步规范库结构。
8. 测试用例需求
8.1 后端测试
单元测试:
- 测试 MD5 哈希计算的准确性与性能
- 测试元数据匹配逻辑(艺术家+标题+专辑+时长容差)
- 测试文件评分算法(格式、码率、文件大小、文件名匹配度)
- 测试重复组筛选与保留文件选择逻辑
- 测试文件名噪声识别与惩罚规则
集成测试:
- 准备测试数据集:
- 完全相同的文件副本(MD5 去重场景)
- 相同歌曲的不同版本(不同格式、不同码率)
- 标签不完整的文件(测试容错性)
- 测试完整的去重任务执行流程
- 验证去重结果的准确性:保留文件是否为最优选择
- 测试移动/复制模式的正确执行
- 测试异常场景:无标签文件、损坏文件、权限不足
8.2 前端测试
单元测试:
- 测试音乐库与回收站目录的路径校验
- 测试去重策略勾选的状态管理
- 测试去重结果统计的展示
集成测试:
- 测试完整的用户操作流程
- 测试去重结果预览(如果有)
- 测试任务进度与当前处理文件展示
测试数据:
- 小规模场景:100 个文件,10 对重复
- 中等规模场景:5000 个文件,500 对重复
- 大规模场景:50000+ 个文件,测试性能
- 边界场景:
- 全部文件都是重复
- 完全没有重复
- 标签缺失或错误
- 多个版本的重复组(3 个以上相同歌曲)
质量验证:
- 人工抽查去重结果,验证保留文件的合理性
- 对比专业去重工具(如 Mp3tag)的结果
- 验证不同格式/码率的优先级规则