Files
MyTool/开发文档/03-音乐去重.md

4.4 KiB
Raw Blame History

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)的结果
  • 验证不同格式/码率的优先级规则