Jellyfin Plugin MetaTube 深度指南:元数据抓取、在线预告片、人脸识别与自动翻译全解析

📅 发布时间:2026/10/15 3:23:09
Jellyfin Plugin MetaTube 深度指南:元数据抓取、在线预告片、人脸识别与自动翻译全解析
后端任务调度【免费下载链接】jellyfin-plugin-metatubeMetaTube Plugin for Jellyfin/Emby项目地址https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube点击查看免费下载MetaTube 是为 JellyfinEmby 开发的一款元数据插件支持从大量数据源抓取影片与演员信息、在线播放预告片、通过计划任务自动整理与更新、内置人脸识别裁剪海报并可自动将元数据翻译为所需语言。本文以仓库 README.ja.md 为核心骨架结合Jellyfin.Plugin.MetaTube/下的源码实现逐项剖析其功能原理、配置参数与使用要点帮助你完整掌握该插件的部署与调优方法。项目概览为 JellyfinEmby 打造的元数据插件MetaTube 是一个面向 Jellyfin 与 Emby 媒体服务器的插件核心定位是元数据Metadata增强当你的媒体库中包含大量影片资源时它负责从后端 MetaTube Server 拉取完整的影片信息、演员资料与图片并回填到媒体库条目中。从仓库结构看插件本体位于 Jellyfin.Plugin.MetaTube/ 目录包含以下几大核心模块ProvidersProviders/实现 JellyfinEmby 元数据提供器接口的影片、演员、图片与外部链接提供器ApiClientApiClient.cs封装与 MetaTube Server 之间的全部 REST API 通信ScheduledTasksScheduledTasks/三个计划任务负责预告片生成、元数据整理与插件自动更新TranslationTranslation/元数据自动翻译引擎与翻译辅助逻辑ConfigurationConfiguration/插件配置模型与网页配置界面Helpers / Extensions / ExternalIds / Metadata辅助工具、扩展方法与数据模型。插件的入口类是 Plugin.cs其中定义了插件常量ProviderName MetaTube与ProviderId MetaTube以及固定的插件 GUID01cc53ec-c415-4108-bbd4-a684a9801a32。值得注意的是该插件通过#if __EMBY__条件编译同时适配 Jellyfin 与 Emby 两套 APIJellyfin 版本继承BasePluginPluginConfiguration目标框架为 .NET 9对应 Jellyfin 10.11.xEmby 版本继承BasePluginSimpleUIPluginConfiguration目标框架为 .NET 8对应 Emby 4.9.x。具体构建配置见 Jellyfin.Plugin.MetaTube.csprojJellyfin 构建引用Jellyfin.Controller / Jellyfin.Model10.11.0Emby 构建引用MediaBrowser.Server.Core4.9.1.80Release构建会自动把 DLL 打包为Jellyfin.MetaTubev{version}.zipRelease.Emby则打包为Emby.MetaTubev{version}.zip。提示README 声明本项目仅支持 JellyfinEmby 的稳定版本并标记了对应的平台版本号使用前请确认你的服务器版本与之匹配。六大核心特性及其源码实现README.ja.md 在「特徴」一节列出了插件的六项核心能力下面逐项结合源码展开。1. 完整元数据标题、简介、类型、导演、演员、发行商等插件能够获取远超基础信息的完整影片数据。在 ApiClient.cs 中定义了一组 REST 端点常量插件通过它们与 MetaTube Server 通信端点常量路径用途MovieInfoApi/v1/movies获取影片详细信息MovieSearchApi/v1/movies/search搜索影片ActorInfoApi/v1/actors获取演员详细信息ActorSearchApi/v1/actors/search搜索演员PrimaryImageApi/v1/images/primary主海报图ThumbImageApi/v1/images/thumb缩略图BackdropImageApi/v1/images/backdrop背景图TranslateApi/v1/translate文本翻译请求全部走GET并携带Accept: application/json与User-Agent: MetaTube/{版本号}请求头若配置了 Token还会附加Bearer认证头见 ApiClient.cs。影片信息的数据模型定义在 MovieInfo.cs 与 MovieSearchResult.cs 中包含以下字段基础标识id、provider、homepage、number番号、title内容信息summary简介、genres类型、director导演、actors演员列表发行信息release_date、maker制作商、label发行标签、series系列、runtime评分score社区评分媒体资源cover_url、thumb_url、preview_images、preview_video_url、preview_video_hls_url2. 强大搜索跨多数据源检索影片与演员插件的搜索能力体现在 MovieProvider.cs 与 ActorProvider.cs 中。当条目没有绑定 MetaTube ID 时插件会调用SearchMovieAsync/SearchActorAsync进行模糊搜索若已绑定 ID则直接按provider:id精确拉取详情。搜索接口支持q查询词、provider指定数据源与fallback是否回退三个查询参数。搜索结果会以[{Provider}] {Number} {Title}的格式命名展示演员为[{Provider}] {Name}并附带主海报预览。这样即使同一部作品存在多个数据源记录也能一眼区分来源。3. 预告片功能无需下载即可在线观看README 明确说明该功能以.strm文件形式在线播放预告片无需下载整段视频。对应的实现是计划任务 GenerateTrailersTask.cs任务名Generate Trailers默认在每天凌晨 1:00触发TimeSpan.FromHours(1)只处理带有MetaTubeProvider ID 的Movie类型条目GenerateTrailersTask.cs影片元数据中的preview_video_url或preview_video_hls_urlHLS 流会被写入到影片目录下trailers/子文件夹内的片名首个词-Trailer.strm文件GenerateTrailersTask.cs文件采用UTF-8 无 BOM编码写入内容即预告片直链 URLGenerateTrailersTask.cs若预告片 URL 变化或影片元数据更新任务会对比文件修改时间与内容自动刷新或清理过期.strm文件在trailers/目录放置.ignore文件可跳过该影片。开启方式在插件配置页勾选Enable trailersEnableTrailers并在服务器中将影片的预告片类型Emby 需要独立库或设置指向该目录即可。需要说明的是.strm文件只记录 URL实际播放仍由 JellyfinEmby 客户端在线拉流完成。4. 计划任务自动整理类型标签与自动更新插件插件内置三个计划任务均在ScheduledTasks/目录下任务名类文件默认触发时间作用Generate TrailersGenerateTrailersTask.cs每日 01:00生成/清理预告片.strm文件Organize MetadataOrganizeMetadataTask.cs每日 03:00整理影片类型标签、中文字幕标记与角标Update PluginUpdatePluginTask.cs每日 05:00检查并自动升级插件仅 Emby 构建生效Organize Metadata整理元数据的职责比较有趣它会自动为影片添加或移除「中文字幕」类型标签检测逻辑包括文件名包含中文字样或带C、UC、ch等标签OrganizeMetadataTask.cs同目录下存在匹配文件名的外部字幕扩展名匹配.ch.*、.zh*等中文字幕特征OrganizeMetadataTask.cs若开启了Enable badges还会同步为海报打上「中文字幕」角标默认角标 URL 为zimu.png见 PluginConfiguration.cs。此外该任务还会执行类型替换表EnableGenreSubstitution的替换、去重与排序最终通过UpdateItemAsync写回媒体库。Update Plugin自动更新仅存在于 Emby 构建文件整体被#if __EMBY__包裹。它每 5 小时检查一次 GitHub Releases API若发现新版本且配置了EnableAutoUpdate会下载以Emby开头的 zip 资产解压到插件目录并通知服务器重启生效UpdatePluginTask.cs。5. 人脸识别以人脸为中心自动裁剪海报「顔認識機能」指内置的人脸识别引擎会对主图进行以人脸为中心的自动裁剪。从 ApiClient.cs 的ComposeImageApiUrl可以看出图片接口携带以下参数url原始图片地址ratio目标宽高比PrimaryImageRatiopos裁剪位置Positionauto是否启用自动裁剪人脸识别badge角标 URLqualityJPEG 压缩质量DefaultImageQuality默认 90。在 MovieProvider.cs 与 ActorImageProvider.cs 中图片请求普遍使用autotrue与ratio0.5演员或ratio1.0影片搜索结果。也就是说实际的裁剪计算发生在 MetaTube Server 端插件只负责把 URL 参数传递给服务端由服务端的人脸检测引擎完成「以人脸为中心」的构图。这与「内置人脸识别」的表述一致插件本身是瘦客户端算法由配套后端提供。6. 自动翻译按需将元数据翻译为目标语言自动翻译是 README 强调的另一大特性其实现集中在 TranslationHelper.cs 与枚举定义 TranslationMode.cs、TranslationEngine.cs 中。翻译模式TranslationMode枚举值含义Disabled关闭翻译Title仅翻译标题Summary仅翻译简介Both同时翻译标题与简介翻译引擎TranslationEngine枚举值引擎请求限速Baidu百度翻译1 请求/秒GoogleGoogle 翻译需 API Key10 请求/秒GoogleFreeGoogle 免费接口10 请求/秒DeepLDeepL10 请求/秒OpenAiOpenAI可自定义模型1 请求/秒从 TranslationHelper.cs 可以看出实现细节每个引擎都有对应的限速延迟millisecondsDelay通过全局SemaphoreSlim串行化请求避免触发厂商限流请求失败时自动重试最多 5 次RetryAsync目标语言来自 JellyfinEmby 条目的MetadataLanguage当目标语言为日语ja时会直接抛出异常跳过翻译TranslationHelper.cs因为原始元数据多为日语无需翻译翻译请求由插件转发至 MetaTube Server 的/v1/translate端点由服务端实际调用各厂商 API插件只负责携带q、from、to、engine以及对应引擎的密钥参数。在 MovieProvider.cs 中只有当TranslationMode ! Disabled时才会触发TranslateMovieInfo翻译发生在标题替换Substitution之后因此最终的标题会被翻译覆盖。插件配置详解从 Server 到模板与替换表README 未逐一列出配置项但配置模型 PluginConfiguration.cs 与配置页面 configPage.html 提供了完整清单。在 Jellyfin 中插件页面通过GetPages()暴露内嵌的configPage.htmlPlugin.csEmby 则通过EditableOptionsBase自动渲染PluginConfiguration.cs。General常规配置项字段默认值说明ServerServer空MetaTube Server 的完整 URL推荐 HTTPS格式需匹配^https?://.$必填TokenToken空后端设置访问令牌则填写否则留空非空时会以Bearer方式附加Enable collectionsEnableCollectionsfalse按系列自动创建合集AddCollectionEnable directorsEnableDirectorstrue将导演写入影片人员信息Enable ratingsEnableRatingstrue展示原站社区评分score * 2见 MovieProvider.csEnable trailersEnableTrailersfalse生成.strm在线预告片Enable real actor namesEnableRealActorNamesfalse从 AVBASE 检索真实演员名并替换其中「真实演员名」功能的实现值得注意当影片来源属于DUGA、FANZA、Getchu、MGS之一时插件会用番号在 AVBASE 数据源上再次搜索并通过标题相似度CalculateTitleSimilarity基于 Levenshtein 距离归一化阈值 0.8匹配合适记录用其演员列表替换原数据MovieProvider.cs。相似度计算实现见 Levenshtein.cs。Badge海报角标配置项字段默认值说明Enable badgesEnableBadgesfalse在主海报上叠加中文字幕角标Badge urlBadgeUrlzimu.png自定义角标图片 URL推荐 PNG 格式该功能与 Organize Metadata 任务联动当检测到影片含中文字幕且配置开启时任务会调用SetPrimaryImage重新设置带角标参数badge的主海报 URLOrganizeMetadataTask.cs。Image图片配置项字段默认值说明Primary image ratioPrimaryImageRatio-1主海报宽高比设为负值使用后端默认值Default image qualityDefaultImageQuality90JPEG 压缩质量取值范围 0–100PrimaryImageRatio会通过ratio参数随每次图片请求发送ApiClient.csDefaultImageQuality则在ComposeImageApiUrl中统一附加ApiClient.cs。Provider数据源配置项字段默认值说明Enable movie provider filterEnableMovieProviderFilterfalse对影片搜索结果按数据源过滤并重排序Movie provider filterRawMovieProviderFilter空数据源名列表逗号分隔、不区分大小写、从左到右优先级递减过滤逻辑见 MovieProvider.cs先剔除不在过滤器中的数据源结果再按过滤器中的先后顺序稳定排序若开启了过滤但过滤器为空会输出警告日志。Template文本模板配置项字段默认值说明Enable templateEnableTemplatefalse启用自定义名称/标语模板Name templateNameTemplate{number} {title}影片名称模板Tagline templateTaglineTemplate配信開始日 {date}影片标语模板模板支持以下变量见 MovieProvider.cs变量含义变量含义{provider}数据源名{director}导演{id}作品 ID{actors}演员空格分隔{number}番号{first_actor}首位演员{title}标题{year}年份yyyy{series}系列{month}月份MM{maker}制作商{date}日期yyyy-MM-dd{label}发行标签模板渲染采用简单的字符串替换RenderTemplate见 MovieProvider.cs仅替换模板中实际出现的变量替换后自动Trim()去首尾空白。原始标题会被保留到OriginalTitle字段不会因模板而丢失。Translation翻译除前述的TranslationMode与TranslationEngine外还需按所选引擎填写对应密钥BaiduBaiduAppId、BaiduAppKeyGoogleGoogleApiKey可选GoogleApiUrl自定义翻译 API 地址DeepLDeepLApiKey可选DeepLApiUrl兼容 DeepL 的自定义 API 地址OpenAIOpenAiApiKey可选OpenAiApiUrlOpenAI 兼容 API 地址与OpenAiModel模型名。配置页面会根据所选引擎用 JavaScript 动态显示/隐藏对应输入框configPage.html。Substitution替换表配置项字段默认值说明Enable title substitutionEnableTitleSubstitutionfalse标题替换Title substitution tableTitleRawSubstitutionTable空标题替换表Enable actor substitutionEnableActorSubstitutionfalse演员替换Actor substitution tableActorRawSubstitutionTable空演员替换表Enable genre substitutionEnableGenreSubstitutionfalse类型替换Genre substitution tableGenreRawSubstitutionTable空类型替换表替换表格式为每行一条记录用等号连接源与目标目标留空表示删除该源子串/条目configPage.html。解析与替换逻辑见 SubstitutionTable.cs标题替换为子串级替换StringBuilder.Replace演员/类型替换为条目级替换整条目精确匹配才替换目标为空则删除该条目替换表键忽略大小写OrdinalIgnoreCase。替换顺序在 MovieProvider.cs 中明确为真实演员名 → 标题替换 → 演员替换 → 类型替换 → 翻译。影片元数据回填流程源码级调用链综合 MovieProvider.cs 与 ApiClient.cs一次完整的影片元数据获取流程如下JellyfinEmby 以MovieInfo调用MovieProvider.GetMetadata从条目的MetaTubeProvider ID 中解析出provider:id[:position][:update]格式见 ProviderId.cs若无绑定则先执行搜索并取第一个结果调用GET /v1/movies/{provider}/{id}?lazytrue获取MovieInfo依次执行真实演员名转换 → 标题/演员/类型替换 → 自动翻译若启用→ 去重清理空值根据模板渲染Name与Tagline设置OverviewSummary、PremiereDate、ProductionYear、Genres等通过SetPid写回 Provider ID含图片位置Position通过SetTrailerUrl保存预告片直链依据开关设置CommunityRatingscore * 2、集合、发行商、标签、导演与演员演员头像 URL 通过SearchActorAsync异步获取优先使用 Gfriends 数据源的头像见 MovieProvider.cs。图片方面MovieImageProvider.cs 会为每部影片提供Primary主海报、Thumb缩略图、Backdrop背景图三类远程图片其中预览图PreviewImages中的每一张都会生成三种类型ActorImageProvider.cs 则为演员提供以人脸为中心裁剪autotrue, ratio0.5的主图。插件还通过 ExternalUrlProvider.cs仅 Jellyfin 构建为影片和演员生成指向原始数据源的外部链接对应的外部 ID 定义在 MovieExternalId.cs 与 ActorExternalId.cs。安装与构建README 的「ドキュメント」章节列出了官方文档导航插件安装、后端部署、命名规则、自动翻译、源码构建、数据源说明这里结合仓库补充可直接验证的要点插件安装从 Release 下载对应平台的 zipJellyfin 为Jellyfin.MetaTubev*.zipEmby 为Emby.MetaTubev*.zip见 Jellyfin.Plugin.MetaTube.csproj解压到服务器的 plugins 目录后重启并启用后端部署插件本身依赖独立的 MetaTube Server 提供数据与图像处理人脸识别、图片裁剪、翻译代理均在服务端完成因此部署顺序应为「先部署后端再安装插件并在 Server 字段填写后端地址」命名规则媒体文件命名直接影响搜索匹配与中文字幕检测建议遵循官方 Wiki 的命名规范源码构建仓库根目录提供解决方案文件 jellyfin-plugin-metatube.sln构建 Jellyfin 版本使用默认Debug/Release配置.NET 9构建 Emby 版本使用Debug.Emby/Release.Emby配置.NET 8__EMBY__条件编译。常见使用建议与注意事项基于源码总结几点实操建议Server 必须使用 HTTPS配置页强制 URL 格式^https?://.$且推荐 HTTPS生产环境请配置合法证书翻译密钥只填所需引擎的配置页按引擎动态显示字段其他引擎密钥留空即可翻译请求限速在插件端已做节流但仍需留意厂商配额预告片依赖两个开关EnableTrailers负责生成.strm且任务默认只在每日 01:00 运行手动触发任务可即时生效.ignore文件可用于批量跳过类型整理会覆盖手动编辑Organize Metadata 每 3 小时会重排去重类型标签若你手动维护了类型列表需考虑关闭该任务或配合类型替换表规范化Emby 专属自动更新Jellyfin 构建不包含自动更新任务升级需手动替换 DLL原始标题保留即使启用了名称模板或翻译OriginalTitle始终保存后端返回的原始标题便于日后追溯。总结MetaTube 插件以「瘦客户端 强大后端」的架构为 JellyfinEmby 媒体库带来完整的影片元数据、跨源搜索、在线预告片、计划任务自动化、人脸识别构图与多引擎自动翻译能力。本文以 README.ja.md 的特征清单为主线逐项对照 PluginConfiguration.cs、ApiClient.cs 及Providers/、ScheduledTasks/、Translation/等目录下的源码还原了每一项能力的实现路径与配置方法。如果你正在为 JellyfinEmby 媒体库寻找一站式的元数据增强方案并愿意自建 MetaTube Server 后端这个插件值得一试。赞分享后端任务调度【免费下载链接】jellyfin-plugin-metatubeMetaTube Plugin for Jellyfin/Emby项目地址https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metatube点击查看免费下载相关推荐MetaTube插件在Jellyfin中元数据识别异常问题分析与解决方案MetaTube插件在Jellyfin中元数据识别异常问题分析与解决方案 问题现象描述 近期在使用MetaTube插件配合Jellyfin媒体服务器时部分用户后端任务调度Jellyfin插件Metatube中AniDB元数据爬取功能解析Jellyfin插件Metatube中AniDB元数据爬取功能解析 在Jellyfin媒体服务器生态中Metatube插件作为重要的元数据补充工具近期用户反后端任务调度Jellyfin MetaTube插件FC2影片元数据修复实战指南Jellyfin MetaTube插件FC2影片元数据修复实战指南 你是否曾经遇到过这样的情况精心收集的FC2影片在Jellyfin中显示为未知影片封面后端任务调度上一篇ComfyUI终极指南从零到精通AI内容创作的5步完整教程下一篇如何在Linux上快速解决Realtek WiFi 7网卡驱动问题rtw89完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考