kookxiang / jellyfin-plugin-bangumi

bgm.tv plugin for jellyfin
GNU General Public License v2.0
592 stars 24 forks source link

一些 bad case 和一些建议 #33

Open Icemic opened 2 years ago

Icemic commented 2 years ago

首先是很多章节都被识别成了

图片

[2021][Tsuki ga Michibiku Isekai Douchuu][BDRIP][1080P][1-12Fin+SP] [2021][Eighty-Six][BDRIP][1080P][1-23Fin+SP] [2012][Shinsekai Yori][BDRIP][1080][1-25Fin+SP]

这样的格式基本都会识别成 https://bangumi.tv/subject/4314 应该是文件名解析的问题,但是我没找到为什么……(或许你们的解析器做个在线测试功能比较好?

另一个是一个bug,文件名没有反转义,就出现了这样的情况 图片

之后是建议的部分

  1. 建议切换到新版的搜索,等这个 issue 完成之后,搜索精准度应该会更好一些。(是的我本来也想做同样的东西但是发现搜索准确性太低了,就先去帮忙优化搜索了orz)
  2. 文件名大多是英文的(英文名或罗马音),这部分名称很可能没有记录在 bgm 条目中,导致搜索不到。或许可以考虑用tmdb或anidb拿到日文原标题辅助一下……
Icemic commented 2 years ago

还有一种情况就是 bgm 条目缺少分季标识导致的问题,比如 [Liuyun&VCB-S&ANK-Raws] Chihayafuru I+II [1080p] 就只能指定一个季度

chu-shen commented 2 years ago

关于文件名解析

  1. 设置里用的哪种解析方式?目前有:①此插件自带的解析;② AnitomySharp 解析
  2. AnitomySharp 装的哪个版本?

勾选「使用 AnitomySharp 猜测动画名」后结果应该是(先忽略 anilist ,详见「关于搜索」):

chrome_FG4zCW0oM5
[INF] [38] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: Start AniList... before Searching ("[2012][Shinsekai Yori][BDRIP][1080][1-25Fin+SP]")
[INF] [38] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: Start AniList... Searching("Shinsekai Yori")
[INF] [38] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: AnitomySharp 567ef672, ElementFileName: Shinsekai Yori
[INF] [38] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: AnitomySharp 567ef672, ElementAnimeTitle: Shinsekai Yori
[INF] [34] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching "Shinsekai Yori" in bgm.tv
[INF] [38] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching "新世界より" in bgm.tv

Parsing: [2012][Shinsekai Yori][BDRIP][1080][1-25Fin+SP]
ElementFileName: [2012][Shinsekai Yori][BDRIP][1080][1-25Fin+SP]
ElementSource: BDRIP
ElementAnimeType: SP
ElementAnimeYear: 2012
ElementVideoResolution: 1080
ElementEpisodeNumber: 1
ElementEpisodeNumber: 25
ElementReleaseInformation: Fin
ElementAnimeTitle: Shinsekai Yori

关于搜索

bgm没法匹配罗马音就很头痛 b38

目前插件是通过对搜索结果排序来提高正确率 https://github.com/kookxiang/jellyfin-plugin-bangumi/issues/8 ,期待新的搜索👍

罗马音文件夹我是这样处理的:启用 bangumi、anilist 插件(使用 AnitomySharp 识别文件夹),然后刷新元数据。

内部逻辑应该是:

  1. bangumi 识别罗马音返回零个结果,anilist 能识别并返回正确结果
  2. bangumi 使用 anilist 的结果(日文标题)重新搜索
  3. bangumi 返回正确结果

关于分季

分季不知道大家有没有什么好的想法。我先抛砖引玉,可以通过 AnitomySharp 的ElementAnimeSeason获得季度,不过识别规则还有待完善,至于如何对应bangumi的条目就不清楚了🤣

Parsing: [2020][Re:Zero Kara Hajimeru Isekai Seikatsu 2nd Season][BDRIP][1080P][1-25Fin+SP]
ElementFileName: [2020][Re:Zero Kara Hajimeru Isekai Seikatsu 2nd Season][BDRIP][1080P][1-25Fin+SP]
ElementVideoResolution: 1080P
ElementAnimeSeason: 2
ElementSource: BDRIP
ElementAnimeType: SP
ElementAnimeYear: 2020
ElementEpisodeNumber: 1
ElementEpisodeNumber: 25
ElementReleaseInformation: Fin
ElementAnimeTitle: Re:Zero Kara Hajimeru Isekai Seikatsu

Parsing: [Liuyun&VCB-S&ANK-Raws] Chihayafuru I+II [1080p]
ElementFileName: [Liuyun&VCB-S&ANK-Raws] Chihayafuru I+II [1080p]
ElementVideoResolution: 1080p
ElementAnimeTitle: Chihayafuru I+II
ElementReleaseGroup: Liuyun&VCB-S&ANK-Raws
Icemic commented 2 years ago

图片 插件是添加了 repository 之后安装的,应该都是最新版?

配合 anilist 的用法我再试试看

chu-shen commented 2 years ago

配合 anilist 的用法我再试试看

原版 AnitomySharp 无效的话替换成这个版本

anilist 也需要集成 AnitomySharp ,否则没法识别,用这个版本直接覆盖AniList_6.0.0.0

Icemic commented 2 years ago

能分享下你的两个插件的配置和存储库里的设置吗?我这里没有出现使用anilist获得的日文标题搜索bgm.tv的情况,log 都是

[10:13:44] [INF] [8] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:14:30] [INF] [48] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
chu-shen commented 2 years ago

能分享下你的两个插件的配置和存储库里的设置吗?我这里没有出现使用anilist获得的日文标题搜索bgm.tv的情况,log 都是

[10:13:44] [INF] [8] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:14:30] [INF] [48] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv

已经替换了吗?👇

配合 anilist 的用法我再试试看

原版 AnitomySharp 无效的话替换成这个版本

anilist 也需要集成 AnitomySharp ,否则没法识别,用这个版本直接覆盖AniList_6.0.0.0

配置和你的一样。目录结构:

$ pwd
/Jellyfin/Data/plugins

$ tree -L 3
|-- AniList_5.0.0.0
|   |-- Jellyfin.Plugin.AniList.dll
|   |-- jellyfin-plugin-anilist.png
|   `-- meta.json
|-- AniList_6.0.0.0
|   |-- AnitomySharp.dll
|   |-- Jellyfin.Plugin.AniList.dll
|   |-- jellyfin-plugin-anilist.png
|   `-- meta.json
|-- Bangumi
|   |-- Fastenshtein.LICENSE
|   |-- Fastenshtein.dll
|   |-- Jellyfin.Plugin.Bangumi.dll
|   |-- Newtonsoft.Json.dll
|   `-- meta.json

补下图: image image

Icemic commented 2 years ago

都替换过了,问题依旧,很迷。 说起来我这边一直在报这样的错误,似乎是应该返回json的接口返回了html,不知道有没有关联

[10:52:19] [INF] [3] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:52:20] [ERR] [3] MediaBrowser.Providers.TV.SeriesMetadataService: Error in Bangumi
System.Text.Json.JsonException: '<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0.
 ---> System.Text.Json.JsonReaderException: '<' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
   at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan`1 bytes)
   at System.Text.Json.Utf8JsonReader.ConsumeValue(Byte marker)
   at System.Text.Json.Utf8JsonReader.ReadFirstToken(Byte first)
   at System.Text.Json.Utf8JsonReader.ReadSingleSegment()
   at System.Text.Json.Utf8JsonReader.Read()
   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
   --- End of inner exception stack trace ---
   at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex)
   at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
   at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable`1 actualByteCount)
   at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan`1 json, JsonTypeInfo jsonTypeInfo)
   at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options)
   at Jellyfin.Plugin.Bangumi.BangumiApi.SearchSubject(String keyword, CancellationToken token)
   at Jellyfin.Plugin.Bangumi.Providers.SeriesProvider.GetMetadata(SeriesInfo info, CancellationToken token)
   at MediaBrowser.Providers.Manager.MetadataService`2.ExecuteRemoteProviders(MetadataResult`1 temp, String logName, TIdType id, IEnumerable`1 providers, CancellationToken cancellationToken)
[10:52:22] [INF] [24] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:52:23] [INF] [36] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:53:08] [INF] [15] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
[10:53:08] [INF] [38] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching Shinsekai Yori in bgm.tv
chu-shen commented 2 years ago

都替换过了,问题依旧,很迷。 说起来我这边一直在报这样的错误,似乎是应该返回json的接口返回了html,不知道有没有关联

重启下 jellyfin,只开启 anilist 插件然后刷新元数据,看下这个插件是否正常

看下插件是否是 Active

kookxiang commented 2 years ago

现在插件并没有针对名称搜索优化过,搜索关键字是 jellyfin 自动识别出来的,所以可能存在一定的错误识别的情况 上面提到的 AnitomySharp 应该能解决名称识别的问题

主要番剧名称不像是集数那样可以直接正则捞出来,目前的方案只能是手动重命名 / AnitomySharp 识别

其实 bgm 也是一定程度上支持罗马音搜索的,比如 https://bgm.tv/subject/349441

image

名称转义的问题是因为 API 输出的时候转义了两次 例如:https://api.bgm.tv/v0/subjects/72266 "name":"ガールズ\u0026amp;パンツァー 劇場版" 就会变成 ガールズ&amp;パンツァー 劇場版 我看看能不能统一处理下

chu-shen commented 2 years ago

都替换过了,问题依旧,很迷。 说起来我这边一直在报这样的错误,似乎是应该返回json的接口返回了html,不知道有没有关联

这个PR已经修复识别逻辑和报错的问题 https://github.com/kookxiang/jellyfin-plugin-bangumi/pull/23

我以为已经发版🤣 验证后才发现记错了,不好意思


可以拉取自行编译(action里的过期了)https://github.com/chu-shen/jellyfin-plugin-bangumi

或者这里下 https://airportal.cn/300599/VWPX0pCBz5/

Icemic commented 2 years ago

@chu-shen 2333刚想跟你说我发现我自己编译最新版就没问题了

kookxiang commented 2 years ago

确实好久没发过正式版了…

Icemic commented 2 years ago

又一个 bad case,中括号嵌套导致的大概是,应该不常见

(感觉这个 issue 可以转成 discussion 专门收集 bad case 了

[15:29:59] [INF] [42] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching name [AI-Raws][Fate/stay night [UBW](2014)][TV 00-25+SP Fin][BDRip][MKV] in bgm.tv
[15:30:02] [INF] [42] Jellyfin.Plugin.Bangumi.Providers.SeriesProvider: Searching extracted tittle ] in bgm.tv
[15:30:03] [INF] [15] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: Start AniList... before Searching ([AI-Raws][Fate/stay night [UBW](2014)][TV 00-25+SP Fin][BDRip][MKV])
[15:30:03] [INF] [15] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: Start AniList... Searching(])
[15:30:03] [INF] [15] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: AnitomySharp 2c2bef0f, ElementFileName: ]
[15:30:03] [INF] [15] Jellyfin.Plugin.AniList.Providers.AniList.AniListSeriesProvider: AnitomySharp 2c2bef0f, ElementAnimeTitle: ]
chu-shen commented 2 years ago

[AI-Raws][Fate/stay night UBW][TV 00-25+SP Fin][BDRip][MKV]

处理的结果如下,确实有问题

Parsing: [AI-Raws][Fate/stay night [UBW](2014)][TV 00-25+SP Fin][BDRip][MKV]
ElementFileName: [AI-Raws][Fate/stay night [UBW](2014)][TV 00-25+SP Fin][BDRip][MKV]
ElementAnimeType: TV
ElementAnimeType: SP
ElementReleaseInformation: Fin
ElementSource: BDRip
ElementVideoTerm: MKV
ElementAnimeYear: 2014
ElementEpisodeNumber: 00
ElementEpisodeNumber: 25
ElementAnimeTitle: ]
ElementReleaseGroup: AI-Raws

这个可能是 AnitomySharp 的边缘情况,代码里没有考虑到 https://github.com/erengy/anitomy/issues/8#issuecomment-283322252


Anitomy 的问题可以往这里提 https://github.com/erengy/anitomy

或者提交到 https://github.com/chu-shen/AnitomySharp

wzyboy commented 1 year ago

关于 Bangumi 不是所有条目都能用罗马音搜索到这件事,我已经放弃抵抗了。

现在我把所有动画都硬链接(cp -al)了一份,然后把目录名改成 Bangumi 上的原文标题。这样至少作品匹配不出问题了。单集的匹配的话,AnitomySharp 的效果还挺好的。

Icemic commented 1 year ago

能否增加“忽略一定时长以下文件”功能呢?

对应的 bad case 是随每集一起的小剧场或预告之类的,经常被识别为对应的集数

图片

希望能在设置中增加全局开关,并允许设置忽略的长度阈值,默认5min左右。 同时在每个 tv show 的层面支持开启/关闭这个功能,来避免泡面番受到影响。

kookxiang commented 1 year ago

这个插件无能为力,只能靠 jellyfin 本体支持了

Icemic commented 1 year ago

因为读取不到时长吗?我之前尝试加这个功能也是没找到这个数据,还以为是因为自己不熟悉API…

另外,刚才自动更新到 1.5.0.0 后,启动时炸了,没找到原因(

图片

kookxiang commented 1 year ago

插件没法控制隐藏或者显示某一集

启动失败的问题手动覆盖一下插件文件试试?

Icemic commented 1 year ago

插件没法控制隐藏或者显示某一集

启动失败的问题手动覆盖一下插件文件试试?

手动覆盖问题依旧,重新查看 log 发现最前面说 AnitomySharp.dll 加载失败自动禁用了插件。 手动用 anilist 6.0.0.0 的对应文件覆盖之后插件正常加载了。 似乎发布的版本中 AnitomySharp.dll 文件有问题?

图片

Icemic commented 1 year ago

插件没法控制隐藏或者显示某一集

其实我的想法不是隐藏或显示,而是当 Provider 里发现这个文件长度小于 5min 就返回未找到对应元数据就好了,现在是当成正常识别到的一集返回了。

chu-shen commented 1 year ago

能否增加“忽略一定时长以下文件”功能呢?

对应的 bad case 是随每集一起的小剧场或预告之类的,经常被识别为对应的集数

AnitomySharp做了一些修正,正在考虑将特典的识别加入到bangumi插件中

初版效果如下:image

不过由于之前误删分支,所以一切重来,敬请期待

我目前使用的早期版本:http://deershare.com/recv/829315

chu-shen commented 1 year ago

手动覆盖问题依旧,重新查看 log 发现最前面说 AnitomySharp.dll 加载失败自动禁用了插件。 手动用 anilist 6.0.0.0 的对应文件覆盖之后插件正常加载了。 似乎发布的版本中 AnitomySharp.dll 文件有问题?

是不是在插件目录放了两个 AnitomySharp.dll ?

Icemic commented 1 year ago

是不是在插件目录放了两个 AnitomySharp.dll ?

这提醒到我了,是不是 jellyfin 加载每个插件里的 dll 都是加载到全局命名空间的?那么应该就是和 anilist 里的冲突了……推荐用哪个?

chu-shen commented 1 year ago

这提醒到我了,是不是 jellyfin 加载每个插件里的 dll 都是加载到全局命名空间的?那么应该就是和 anilist 里的冲突了……推荐用哪个?

是会冲突。自然是推荐我魔改后的啊🤣👉https://github.com/chu-shen/AnitomySharp

bangumi插件用的是原版

kookxiang commented 1 year ago

诶,原来是原版么…

chu-shen commented 1 year ago

诶,原来是原版么…

是的,修改时间是18年。不过也可以用吧,太久忘了🥲 调用方法都是一样的

kookxiang commented 1 year ago

诶,原来是原版么…

是的,修改时间是18年。不过也可以用吧,太久忘了🥲 调用方法都是一样的

应该是因为没上 nuget 的原因吧😂 这次看下和 #53 一起改了

Icemic commented 1 year ago

插件没法控制隐藏或者显示某一集

ai 跟我说了一个办法(草),但是我不知道它是不是胡编的,麻烦看看能不能做到?

图片

chu-shen commented 1 year ago

插句嘴,关于长时长与电影:

动画目录下包含TV和Movie、OVA等多种类型(没有分开配置媒体库),而Movie文件名通常不带序号,导致无法和bangumi ep匹配

思考过通过时长进行判断并添加默认序号1来处理的方式,没有测试实践🤣,也没想到更好的处理方式