Emby媒体库重复检测工具

Emby媒体库重复检测工具

 次点击
16 分钟阅读

Emby媒体库重复检测工具 v2.0

一个简单易用、零依赖的 Emby 媒体库重复内容检测与清理工具,专为解决“同大异名”重复文件设计。

✨ 核心特性 (v2.0 Ultimate)

  • 🎯 纯体积去重 (Size-Only):完全忽略 TMDB ID 和文件名,仅基于**文件体积(精确到字节)**识别重复。完美解决同一视频文件因命名不同(如 Movie.mkvMovie (1).mkv)导致的重复占用。

  • 💾 深度删除 (User Session):支持模拟 Emby 管理员登录,通过 API 触发删除操作,能够联动 Nastools/MoviePilot 等工具物理删除源文件。

  • 🛡️ 安全熔断机制:内置 ID 碰撞检测,防止因 Emby 跨库合并条目导致的误删(“连坐”)风险。

  • 手动精选模式:告别自动全删,提供交互式列表,由您亲自勾选要删除的副本,保留最佳版本。

  • 🖥️ 仪表盘界面:全新的 Dashboard 风格终端 UI,实时显示各媒体库容量与冗余空间。

  • 🔧 零依赖架构:移除 requests 库依赖,使用原生 urllib,无需安装 pip 包,开箱即用。

  • 📂 路径防呆:数据强制保存至用户家目录 (~/emby_scanner_data),解决管道运行时的路径权限问题。

🚀 快速开始

方法一:单行命令运行(推荐)

这是最快、最稳定的启动方式。脚本会自动在您的家目录下创建数据文件夹。

# 适用于所有 Linux 发行版 / macOS
python3 -u <(curl -sL <https://raw.githubusercontent.com/huanhq99/emby-scanner/main/emby_scanner.py>)

方法二:克隆仓库

如果您想查看源码或二次开发:

git clone <https://github.com/huanhq99/emby-scanner.git>
cd emby-scanner
python3 emby_scanner.py

📋 使用指南

1. 初始化配置

首次运行会自动进入向导,请输入:

  • Emby 地址:例如 http://192.168.1.100:8096https://emby.yourdomain.com

  • API 密钥:在 Emby 后台 -> 高级 -> API 密钥 中生成。

2. 扫描与清理流程

  1. 在主菜单选择 [1] 🚀 开始扫描

  2. 脚本将遍历所有媒体库,显示每个库的总容量重复占用的空间

  3. 如果发现重复,脚本会提示进入清理模式。

  4. 选择 手动精选模式,脚本会列出重复组的详细信息(分辨率、编码、路径)。

  5. 选择删除方式:推荐使用 [3] 立即登录删除,输入管理员账号密码。这会模拟网页端操作,通知 Emby 及联动工具删除源文件。

3. 文件存储位置

所有配置文件和扫描报告都统一保存在:

  • 路径~/emby_scanner_data/ (即您的用户家目录下的 emby_scanner_data 文件夹)

  • 文件

    • emby_config.json: 服务器配置

    • report_yyyymmdd_xxxx.txt: 详细扫描报告

    • clean_script_xxxx.sh: 生成的清理脚本(如果是本地模式)

📊 报告示例 (Size-Only 模式)

🎬 Emby 媒体库重复检测报告
======================================================
生成时间: 2025-11-19 12:00:00
检测逻辑: 仅基于文件体积 (Size) 匹配

📁 媒体库: 华语电影 | 库占用: 35.50 TB
🔴 发现 1 组体积完全一致的文件:

  📦 单文件体积: 10.48 GB | 冗余: 1 份 (共 2 个文件)
    - 消失的她 (2023) [MKV | 1080P | HEVC]
      路径: /mnt/media/movies/华语/消失的她.mkv
    - 消失的她_copy (2023) [MKV | 1080P | HEVC]
      路径: /mnt/download/temp/消失的她 (1).mkv

----------------------------------------

📁 媒体库: 欧美剧 | 库占用: 81.02 TB
✅ 该库未发现体积重复。

======================================================
共发现 1 组重复,可释放空间: 10.48 GB。

❓ 常见问题

Q: 为什么扫描剧集库时显示容量为 0 B? A: 旧版本只扫描了“剧集”层级。v2.0 Ultimate 已修复此问题,会自动深入扫描到“单集 (Episode)”层级,准确计算容量。

Q: “登录删除”安全吗?会不会盗号? A: 绝对安全。

  1. 您的密码仅在运行时用于获取一次性 Access Token不会被保存到任何文件。

  2. 脚本是开源的,您可以随时审查代码逻辑。

Q: 为什么我有两个文件体积一样,但脚本没扫出来? A: 脚本执行的是字节级对比。如果文件大小差 1 个字节(例如元数据不同),也会被视为不同文件。这是为了防止误删不同版本的影片(如 1080P 和 4K 版本体积通常不同)。

Q: 连接服务器失败? A: 请检查:

  • 地址是否包含 http://https://

  • API 密钥是否有权限。

  • 如果是 Docker 容器,请确认网络互通。

🤝 贡献与反馈

如果您遇到问题或有改进建议:

  1. 在 GitHub Issues 提交反馈,请附上报错截图。

  2. 欢迎 Fork 本仓库并提交 Pull Request。

📝 更新日志

v2.0 Ultimate (当前版本)

  • 🔄 重构:回归 v2.x 版本号体系,确立终极稳定版。

  • 新增:用户模拟登录删除功能,支持联动 Nastools/MP。

  • 新增:手动精选删除模式,支持多选。

  • 🛡️ 安全:增加 ID 熔断保护,防止 Emby 跨库合并条目被误删。

  • 💄 UI:全新的仪表盘风格界面。

v1.0

  • 基础扫描功能。

  • 基于 TMDB ID 的查重。

📄 许可证

MIT License

🔗 相关链接

注意: 本工具仅供个人学习与媒体库维护使用,请在执行删除操作前务必确认文件列表。

© 本文著作权归作者所有,未经许可不得转载使用。