From 388afa8d3cdaeb8d388ddda2955449dab854938d Mon Sep 17 00:00:00 2001 From: DDSRem <1448139087@qq.com> Date: Fri, 3 Apr 2026 04:44:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(meta):=20=E4=BF=AE=E5=A4=8D=E9=A6=96?= =?UTF-8?q?=E6=8B=AC=E5=8F=B7=E8=A2=AB=E8=AF=AF=E5=88=A0=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E6=A0=87=E9=A2=98=E8=AF=86=E5=88=AB=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 首括号包含完整发布名(如 [Movie.Name.2023.1080p.BluRay-GROUP])时, 保留内容去掉括号而非整体移除;同时修复 _name_movie_words 和 _name_se_words 列表误用为正则表达式的问题 Co-Authored-By: Claude Opus 4.6 --- app/core/meta/metavideo.py | 15 ++++++++--- tests/cases/meta.py | 51 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/app/core/meta/metavideo.py b/app/core/meta/metavideo.py index 1346c863..063c1749 100644 --- a/app/core/meta/metavideo.py +++ b/app/core/meta/metavideo.py @@ -85,7 +85,16 @@ class MetaVideo(MetaBase): self.total_season = 1 return # 去掉名称中第1个[]的内容 - title = re.sub(r'%s' % self._name_no_begin_re, "", title, count=1) + _first_bracket = re.match(r'^[\[【](.+?)[\]】]', title) + if _first_bracket: + _bracket_content = _first_bracket.group(1) + # 如果第一个括号内为点分隔的英文发布名格式(含年份+资源类型),保留内容去掉括号 + if re.search(r'[A-Za-z]+\..+(?:19|20)\d{2}', _bracket_content) \ + and re.search(r'(?:2160|1080|720|480)[PIpi]|4K|UHD|Blu[\-.]?ray|REMUX|WEB[\-.]?DL|HDTV', + _bracket_content, re.IGNORECASE): + title = _bracket_content + title[_first_bracket.end():] + else: + title = title[_first_bracket.end():] # 把xxxx-xxxx年份换成前一个年份,常出现在季集上 title = re.sub(r'([\s.]+)(\d{4})-(\d{4})', r'\1\2', title) # 把大小去掉 @@ -247,9 +256,9 @@ class MetaVideo(MetaBase): if not self.cn_name: self.cn_name = token elif not self._stop_cnname_flag: - if re.search("%s" % self._name_movie_words, token, flags=re.IGNORECASE) \ + if re.search("|".join(self._name_movie_words), token, flags=re.IGNORECASE) \ or (not re.search("%s" % self._name_no_chinese_re, token, flags=re.IGNORECASE) - and not re.search("%s" % self._name_se_words, token, flags=re.IGNORECASE)): + and not any(w in token for w in self._name_se_words)): self.cn_name = "%s %s" % (self.cn_name, token) self._stop_cnname_flag = True else: diff --git a/tests/cases/meta.py b/tests/cases/meta.py index 4a3ed7e8..3ee5c870 100644 --- a/tests/cases/meta.py +++ b/tests/cases/meta.py @@ -1234,4 +1234,55 @@ meta_cases = [{ "video_codec": "x265 10bit", "audio_codec": "2Audio" } +}, { + # 第一个括号包含完整发布名称(含年份+分辨率),应提取标题而非丢弃 + "title": "[Caligula.The.Ultimate.Cut.2023.2160p.UHD.Blu-ray.HEVC.DTS-HD.MA.5.1-BHYS@OurBits][DIY中字原盘] [罗马帝国艳情史:最终剪辑版][澳大利亚版UHD原盘 DIY 简体简英字幕][91.86GB].iso", + "subtitle": "", + "target": { + "type": "未知", + "cn_name": "", + "en_name": "Caligula The Ultimate Cut", + "year": "2023", + "part": "", + "season": "", + "episode": "", + "restype": "UHD", + "pix": "2160p", + "video_codec": "HEVC", + "audio_codec": "DTS-HD MA 5.1" + } +}, { + # 第一个括号包含完整发布名称(含年份+BluRay),应提取标题 + "title": "[The.Shawshank.Redemption.1994.1080p.BluRay.x264-GROUP][中文字幕]", + "subtitle": "", + "target": { + "type": "未知", + "cn_name": "", + "en_name": "The Shawshank Redemption", + "year": "1994", + "part": "", + "season": "", + "episode": "", + "restype": "BluRay", + "pix": "1080p", + "video_codec": "x264", + "audio_codec": "" + } +}, { + # 第一个括号为短标签(无年份无分辨率),应正常移除 + "title": "[YTS.MX] The Shawshank Redemption 1994 1080p BluRay x264", + "subtitle": "", + "target": { + "type": "未知", + "cn_name": "", + "en_name": "The Shawshank Redemption", + "year": "1994", + "part": "", + "season": "", + "episode": "", + "restype": "BluRay", + "pix": "1080p", + "video_codec": "x264", + "audio_codec": "" + } }]