3步搞定NAS媒体库混乱:MoviePilot智能批量重命名实战指南
3步搞定NAS媒体库混乱MoviePilot智能批量重命名实战指南【免费下载链接】MoviePilotNAS媒体库自动化管理工具项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot你是否曾经面对NAS中杂乱无章的媒体文件命名而头疼不已The.Matrix.1999.REMASTERED.2160p.BluRay.x265.10bit.HDR.DTS-HD.MA.TrueHD.7.1.Atmos-SWTYBLZ.mkv这样的文件名不仅难以阅读更会导致Plex、Emby、Jellyfin等媒体服务器无法正确刮削元数据。MoviePilot作为一款专业的NAS媒体库自动化管理工具其智能批量重命名功能通过先进的元数据识别技术能够自动将混乱的文件名转换为规范格式让你的媒体库焕然一新。 智能识别引擎从混乱到有序的技术魔法MoviePilot的批量重命名功能核心在于其强大的MetaInfo引擎这个引擎通过多层解析机制提取媒体文件的关键信息。与传统的简单字符串匹配不同MoviePilot采用智能分析算法能够理解复杂的命名约定并提取结构化数据。文件名解析流程核心技术实现元数据识别的核心代码位于app/core/metainfo.py以下是关键实现逻辑def MetaInfo(title: str, subtitle: Optional[str] None, custom_words: List[str] None) - MetaBase: 智能元数据识别函数 # 保留原始标题用于后续处理 org_title title # 使用自定义识别词预处理标题 title, apply_words WordsMatcher().prepare(title, custom_wordscustom_words) # 提取标题中的媒体信息标签 title, metainfo find_metainfo(title) # 判断是否为媒体文件 media_exts settings.RMT_MEDIAEXT settings.RMT_SUBEXT settings.RMT_AUDIOEXT title_path Path(title) if title else None if title_path and title_path.suffix.lower() in media_exts: isfile True # 移除文件扩展名 title title_path.stem else: isfile False # 根据内容类型选择解析器 if is_anime(title): meta MetaAnime(title, subtitle, isfile) else: meta MetaVideo(title, subtitle, isfile) # 记录原始标题和应用的自定义词 meta.title org_title meta.apply_words apply_words or [] # 应用提取的元数据 if metainfo.get(tmdbid): meta.tmdbid int(metainfo[tmdbid]) return meta媒体类型智能判断MoviePilot能够智能区分电影、电视剧和动漫内容def is_anime(name: str) - bool: 动漫内容识别算法 if not name: return False # 动漫特有的命名模式识别 if re.search(r【[0-9XVPI-]】\s*【, name, re.IGNORECASE): return True if re.search(r\s-\s[\dv]{1,4}\s, name, re.IGNORECASE): return True if re.search(r\[[0-9XVPI-]]\s*\[, name, re.IGNORECASE): return True return False️ 批量重命名实战从配置到执行1. 命名规则配置MoviePilot支持灵活的命名模板系统通过变量占位符实现个性化命名变量占位符描述示例输出{{title}}媒体标题流浪地球2{{year}}发行年份2023{{season}}季数电视剧S01{{episode}}集数电视剧E03{{season_episode}}季集组合S01E03{{resolution}}视频分辨率2160p{{video_codec}}视频编码H.265{{audio_codec}}音频编码DTS-HD.MA{{release_group}}发布组SWTYBLZ2. 目录结构配置通过app/helper/directory.py中的目录管理模块MoviePilot能够智能匹配媒体文件到正确的媒体库目录def get_dir(self, media: MediaInfo, include_unsorted: Optional[bool] False, storage: Optional[str] None, src_path: Path None, target_storage: Optional[str] None, dest_path: Path None ) - Optional[schemas.TransferDirectoryConf]: 智能目录匹配算法 media_type media.type.value dirs self.get_dirs() matched_dirs: List[schemas.TransferDirectoryConf] [] for d in dirs: # 通用目录匹配 if not d.media_type: matched_dirs.append(d) continue # 精确类型匹配 if d.media_type media_type and not d.media_category: matched_dirs.append(d) continue # 分类匹配逻辑 if d.media_type media_type and d.media_category: if media.category and d.media_category in media.category: matched_dirs.append(d) return matched_dirs[0] if matched_dirs else None3. 批量处理流程 高级应用场景与技巧多层级元数据合并当媒体文件存储在多级目录中时MoviePilot能够智能合并各级目录的元数据def MetaInfoPath(path: Path) - MetaBase: 路径级联元数据识别 # 文件级别的元数据 file_meta MetaInfo(titlepath.name) # 父目录元数据 parent_meta MetaInfo(titlepath.parent.name) file_meta.merge(parent_meta) # 祖目录元数据如有 if path.parent.parent: grandparent_meta MetaInfo(titlepath.parent.parent.name) file_meta.merge(grandparent_meta) return file_meta自定义识别词配置通过自定义识别词系统你可以优化特殊文件名的解析效果# 自定义识别词配置示例 custom_identifiers [ # 格式原始词 替换词 Directors.Cut 导演剪辑版, Extended.Edition 加长版, IMAX IMAX版本, 4K.Remastered 4K修复版, # 格式前定位词 后定位词 偏移量 Season Episode -1, # 季偏移 Part Chapter 2 # 章节偏移 ] # 在系统中应用自定义识别词 meta MetaInfo( titleThe.Matrix.Directors.Cut.1999.mkv, custom_wordscustom_identifiers )媒体服务器路径同步重命名完成后MoviePilot可以自动更新媒体服务器的库路径def update_media_server_library(media_info: MediaInfo, new_path: Path) - bool: 更新媒体服务器库路径 try: # 获取媒体服务器客户端 client get_media_server_client() # 查找现有媒体项 existing_item client.find_item( titlemedia_info.title, yearmedia_info.year, media_typemedia_info.type ) if existing_item: # 更新路径 client.update_item_path( item_idexisting_item.id, new_pathstr(new_path) ) return True except Exception as e: logger.error(f更新媒体服务器失败: {e}) return False 故障排除与最佳实践常见问题解决方案问题1特殊字符导致重命名失败def sanitize_filename(filename: str, replace_char: str _) - str: 文件名安全处理函数 # Windows/Linux/Unix非法字符 illegal_chars [\\, /, :, *, ?, , , , |, \0] # 替换非法字符 for char in illegal_chars: filename filename.replace(char, replace_char) # 移除首尾空格和点 filename filename.strip(. ) # 限制文件名长度避免路径过长 max_length 255 if len(filename) max_length: name, ext os.path.splitext(filename) filename name[:max_length-len(ext)] ext return filename问题2同名文件冲突处理def handle_filename_conflict(base_path: Path, filename: str) - str: 智能文件名冲突解决 base_name Path(filename).stem extension Path(filename).suffix counter 1 new_filename filename while (base_path / new_filename).exists(): # 添加序号后缀 new_filename f{base_name} ({counter}){extension} counter 1 # 防止无限循环 if counter 100: # 添加时间戳作为最后手段 timestamp datetime.now().strftime(%Y%m%d%H%M%S) new_filename f{base_name}_{timestamp}{extension} break return new_filename问题3元数据识别不准确解决方案矩阵问题类型解决方案配置示例电影被识别为电视剧强制类型标记{typemovie}识别错误的TMDB ID直接指定ID[tmdbid12345]季集信息错误手动指定季集{s1}{e1-10}特殊版本识别失败自定义识别词Extended.Edition 加长版性能优化建议批量处理策略对于大型媒体库建议分批次处理避免单次处理过多文件缓存利用MoviePilot内置元数据缓存机制重复识别相同内容时速度更快并行处理系统支持多线程处理可在设置中调整并发数量增量处理仅处理新添加的文件避免重复处理已整理内容 实际效果对比处理前 vs 处理后混乱的原始文件名The.Matrix.1999.REMASTERED.2160p.BluRay.x265.10bit.HDR.DTS-HD.MA.TrueHD.7.1.Atmos-SWTYBLZ.mkv Inception.2010.1080p.BluRay.x264.DTS-HD.MA.5.1-RARBG.mp4 Stranger.Things.S01E01.Chapter.One.The.Vanishing.of.Will.Byers.2016.1080p.NF.WEB-DL.DDP5.1.x264-NTb.mkvMoviePilot智能重命名后电影/科幻/黑客帝国 (1999)/黑客帝国 (1999) [2160p HDR].mkv 电影/科幻/盗梦空间 (2010)/盗梦空间 (2010) [1080p].mp4 电视剧/科幻惊悚/怪奇物语/Season 01/怪奇物语 S01E01 第一章威尔拜尔斯的失踪.mkv 未来发展方向技术演进路线AI增强识别集成机器学习算法提高复杂文件名的识别准确率多语言支持优化非英语媒体文件的识别能力智能推荐基于用户习惯推荐个性化命名规则实时同步与媒体服务器深度集成实现实时路径更新社区贡献指南MoviePilot作为开源项目欢迎社区贡献代码贡献核心模块位于app/core/meta/目录规则优化提交自定义识别词规则到社区仓库插件开发基于插件系统扩展重命名功能文档完善帮助改进使用文档和故障排除指南最佳实践总结通过合理配置MoviePilot的批量重命名功能你可以统一命名规范确保整个媒体库使用一致的命名规则提升刮削准确率标准化命名有助于媒体服务器正确识别内容节省管理时间自动化处理大量媒体文件解放双手改善浏览体验清晰的文件名提升媒体库的可浏览性MoviePilot的批量重命名工具不仅是简单的文件重命名器而是一个完整的媒体库管理解决方案。通过智能的元数据识别、灵活的命名规则和强大的批量处理能力它能够将杂乱的媒体文件组织成结构清晰、易于管理的媒体库让你的NAS媒体管理体验达到新的高度。【免费下载链接】MoviePilotNAS媒体库自动化管理工具项目地址: https://gitcode.com/gh_mirrors/mo/MoviePilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考