Emby媒体库重复检测工具 v2.0
一个简单易用、零依赖的 Emby 媒体库重复内容检测与清理工具,专为解决“同大异名”重复文件设计。
✨ 核心特性 (v2.0 Ultimate)
🎯 纯体积去重 (Size-Only):完全忽略 TMDB ID 和文件名,仅基于**文件体积(精确到字节)**识别重复。完美解决同一视频文件因命名不同(如
Movie.mkv和Movie (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:8096或https://emby.yourdomain.comAPI 密钥:在 Emby 后台 -> 高级 -> API 密钥 中生成。
2. 扫描与清理流程
在主菜单选择
[1] 🚀 开始扫描。脚本将遍历所有媒体库,显示每个库的总容量和重复占用的空间。
如果发现重复,脚本会提示进入清理模式。
选择
手动精选模式,脚本会列出重复组的详细信息(分辨率、编码、路径)。选择删除方式:推荐使用 [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: 绝对安全。
您的密码仅在运行时用于获取一次性
Access Token,不会被保存到任何文件。脚本是开源的,您可以随时审查代码逻辑。
Q: 为什么我有两个文件体积一样,但脚本没扫出来? A: 脚本执行的是字节级对比。如果文件大小差 1 个字节(例如元数据不同),也会被视为不同文件。这是为了防止误删不同版本的影片(如 1080P 和 4K 版本体积通常不同)。
Q: 连接服务器失败? A: 请检查:
地址是否包含
http://或https://。API 密钥是否有权限。
如果是 Docker 容器,请确认网络互通。
🤝 贡献与反馈
如果您遇到问题或有改进建议:
在 GitHub Issues 提交反馈,请附上报错截图。
欢迎 Fork 本仓库并提交 Pull Request。
📝 更新日志
v2.0 Ultimate (当前版本)
🔄 重构:回归 v2.x 版本号体系,确立终极稳定版。
✨ 新增:用户模拟登录删除功能,支持联动 Nastools/MP。
✨ 新增:手动精选删除模式,支持多选。
🛡️ 安全:增加 ID 熔断保护,防止 Emby 跨库合并条目被误删。
💄 UI:全新的仪表盘风格界面。
v1.0
基础扫描功能。
基于 TMDB ID 的查重。
📄 许可证
MIT License
🔗 相关链接
注意: 本工具仅供个人学习与媒体库维护使用,请在执行删除操作前务必确认文件列表。