From c46880b7017c4e6632a33f8ee279fc697d3f901f Mon Sep 17 00:00:00 2001 From: noone Date: Tue, 3 Mar 2026 14:08:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(meta):=20=E6=B7=BB=E5=8A=A0=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E5=B8=A7=E7=8E=87=E4=BF=A1=E6=81=AF=E8=A7=A3=E6=9E=90?= =?UTF-8?q?=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在MetaBase基类中新增fps属性用于存储帧率信息 - 实现MetaVideo中帧率信息的识别和解析逻辑 - 为MetaAnime添加帧率提取功能,与MetaVideo保持一致 - 更新测试用例以验证帧率信息的正确解析 - 在元数据测试数据中增加fps字段的预期值 --- app/core/meta/metaanime.py | 17 +++ app/core/meta/metabase.py | 13 +++ app/core/meta/metavideo.py | 27 ++++- tests/cases/meta.py | 214 ++++++++++++++++++++++++------------- tests/test_metainfo.py | 3 +- 5 files changed, 200 insertions(+), 74 deletions(-) diff --git a/app/core/meta/metaanime.py b/app/core/meta/metaanime.py index 691602d0..74d82e3b 100644 --- a/app/core/meta/metaanime.py +++ b/app/core/meta/metaanime.py @@ -17,6 +17,7 @@ class MetaAnime(MetaBase): """ _anime_no_words = ['CHS&CHT', 'MP4', 'GB MP4', 'WEB-DL'] _name_nostring_re = r"S\d{2}\s*-\s*S\d{2}|S\d{2}|\s+S\d{1,2}|EP?\d{2,4}\s*-\s*EP?\d{2,4}|EP?\d{2,4}|\s+EP?\d{1,4}|\s+GB" + _fps_re = r"(\d{2,3})(?=FPS)" def __init__(self, title: str, subtitle: str = None, isfile: bool = False): super().__init__(title, subtitle, isfile) @@ -173,6 +174,8 @@ class MetaAnime(MetaBase): self.audio_encode = anitopy_info.get("audio_term") if isinstance(self.audio_encode, list): self.audio_encode = self.audio_encode[0] + # 帧率信息 + self.__init_anime_fps(anitopy_info, original_title) # 解析副标题,只要季和集 self.init_subtitle(self.org_string) if not self._subtitle_flag and self.subtitle: @@ -182,6 +185,20 @@ class MetaAnime(MetaBase): except Exception as e: logger.error(f"解析动漫信息失败:{str(e)} - {traceback.format_exc()}") + def __init_anime_fps(self, anitopy_info: dict, original_title: str): + """ + 从原始标题中提取帧率信息,与MetaVideo保持完全一致的实现 + """ + re_res = re.search(rf"({self._fps_re})", original_title, re.IGNORECASE) + if re_res: + fps_value = None + if re_res.group(1): # FPS格式 + fps_value = re_res.group(1) + + if fps_value and fps_value.isdigit(): + # 只存储纯数值 + self.fps = int(fps_value) + @staticmethod def __prepare_title(title: str): """ diff --git a/app/core/meta/metabase.py b/app/core/meta/metabase.py index 9f260c87..76f9830f 100644 --- a/app/core/meta/metabase.py +++ b/app/core/meta/metabase.py @@ -66,6 +66,9 @@ class MetaBase(object): # 附加信息 tmdbid: int = None doubanid: str = None + # 帧率信息(纯数值) + fps: Optional[int] = None + # 副标题解析 _subtitle_flag = False @@ -448,6 +451,13 @@ class MetaBase(object): """ return self.audio_encode or "" + @property + def frame_rate(self) -> str: + """ + 返回帧率信息 + """ + return self.fps or "" + def is_in_season(self, season: Union[list, int, str]) -> bool: """ 是否包含季 @@ -581,6 +591,9 @@ class MetaBase(object): # 音频编码 if not self.audio_encode: self.audio_encode = meta.audio_encode + # 帧率信息 + if not self.fps: + self.fps = meta.fps # Part if not self.part: self.part = meta.part diff --git a/app/core/meta/metavideo.py b/app/core/meta/metavideo.py index 541d1424..bcc9dfbe 100644 --- a/app/core/meta/metavideo.py +++ b/app/core/meta/metavideo.py @@ -53,7 +53,7 @@ class MetaVideo(MetaBase): _resources_pix_re2 = r"(^[248]+K)" _video_encode_re = r"^(H26[45])$|^(x26[45])$|^AVC$|^HEVC$|^VC\d?$|^MPEG\d?$|^Xvid$|^DivX$|^AV1$|^HDR\d*$|^AVS(\+|[23])$" _audio_encode_re = r"^DTS\d?$|^DTSHD$|^DTSHDMA$|^Atmos$|^TrueHD\d?$|^AC3$|^\dAudios?$|^DDP\d?$|^DD\+\d?$|^DD\d?$|^LPCM\d?$|^AAC\d?$|^FLAC\d?$|^HD\d?$|^MA\d?$|^HR\d?$|^Opus\d?$|^Vorbis\d?$|^AV[3S]A$" - + _fps_re = r"(\d{2,3})(?=FPS)" def __init__(self, title: str, subtitle: str = None, isfile: bool = False): """ 初始化 @@ -129,6 +129,9 @@ class MetaVideo(MetaBase): # 音频编码 if self._continue_flag: self.__init_audio_encode(token) + # 帧率 + if self._continue_flag: + self.__init_fps(token) # 取下一个,直到没有为卡 token = tokens.get_next() self._continue_flag = True @@ -716,3 +719,25 @@ class MetaVideo(MetaBase): else: self.audio_encode = "%s %s" % (self.audio_encode, token) self._last_token = token + + def __init_fps(self, token: str): + """ + 识别帧率 + """ + if not self.name: + return + + re_res = re.search(rf"({self._fps_re})", token, re.IGNORECASE) + if re_res: + self._continue_flag = False + self._stop_name_flag = True + self._last_token_type = "fps" + # 提取帧率数值 + fps_value = None + if re_res.group(1): # FPS格式 + fps_value = re_res.group(1) + + if fps_value and fps_value.isdigit(): + # 只存储纯数值 + self.fps = int(fps_value) + self._last_token = f"{self.fps}FPS" diff --git a/tests/cases/meta.py b/tests/cases/meta.py index 7becefef..a67d91ea 100644 --- a/tests/cases/meta.py +++ b/tests/cases/meta.py @@ -1,5 +1,5 @@ meta_cases = [{ - "title": "The Long Season 2017 2160p WEB-DL H265 AAC-XXX", + "title": "The Long Season 2017 2160p WEB-DL H265 120FPS AAC-XXX", "subtitle": "", "target": { "type": "未知", @@ -12,10 +12,11 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "2160p", "video_codec": "H265", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": 120 } }, { - "title": "Cherry Season S01 2014 2160p WEB-DL H265 AAC-XXX", + "title": "Cherry Season S01 2014 2160p 60fps WEB-DL H265 AAC-XXX", "subtitle": "", "target": { "type": "电视剧", @@ -28,7 +29,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "2160p", "video_codec": "H265", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": 60 } }, { "title": "【爪爪字幕组】★7月新番[欢迎来到实力至上主义的教室 第二季/Youkoso Jitsuryoku Shijou Shugi no Kyoushitsu e S2][11][1080p][HEVC][GB][MP4][招募翻译校对]", @@ -44,7 +46,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "HEVC", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "National.Parks.Adventure.AKA.America.Wild:.National.Parks.Adventure.3D.2016.1080p.Blu-ray.AVC.TrueHD.7.1", @@ -60,7 +63,8 @@ meta_cases = [{ "restype": "BluRay 3D", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "TrueHD 7.1" + "audio_codec": "TrueHD 7.1", + "fps": None } }, { "title": "[秋叶原冥途战争][Akiba Maid Sensou][2022][WEB-DL][1080][TV Series][第01话][LeagueWEB]", @@ -76,7 +80,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "哆啦A梦:大雄的宇宙小战争 2021 (2022) - 1080p.mp4", @@ -92,7 +97,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "新精武门1991 (1991).mkv", @@ -108,7 +114,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "24 S01 1080p WEB-DL AAC2.0 H.264-BTN", @@ -124,7 +131,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC 2.0" + "audio_codec": "AAC 2.0", + "fps": None } }, { "title": "Qi Refining for 3000 Years S01E06 2022 1080p B-Blobal WEB-DL X264 AAC-AnimeS@AdWeb", @@ -140,7 +148,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "Noumin Kanren no Skill Bakka Agetetara Naze ka Tsuyoku Natta S01E02 2022 1080p B-Global WEB-DL X264 AAC-AnimeS@ADWeb[2022年10月新番]", @@ -156,7 +165,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "dou luo da lu S01E229 2018 2160p WEB-DL H265 AAC-ADWeb[[国漫连载] 斗罗大陆 第229集 4k | 国语中字]", @@ -172,7 +182,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "2160p", "video_codec": "H265", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "Thor Love and Thunder (2022) [1080p] [WEBRip] [5.1]", @@ -188,7 +199,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "5.1" + "audio_codec": "5.1", + "fps": None } }, { "title": "[Animations(动画片)][[诛仙][Jade Dynasty][2022][WEB-DL][2160][TV Series][TV 08][LeagueWEB]][诛仙/诛仙动画 第一季 第08集 | 类型:动画 [国语中字]][680.12 MB]", @@ -204,7 +216,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "钢铁侠2 (2010) 1080p AC3.mp4", @@ -220,7 +233,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "AC3" + "audio_codec": "AC3", + "fps": None } }, { "title": "Wonder Woman 1984 2020 BluRay 1080p Atmos TrueHD 7.1 X264-EPiC", @@ -236,7 +250,8 @@ meta_cases = [{ "restype": "BluRay", "pix": "1080p", "video_codec": "x264", - "audio_codec": "Atmos TrueHD 7.1" + "audio_codec": "Atmos TrueHD 7.1", + "fps": None } }, { "title": "9-1-1 - S04E03 - Future Tense WEBDL-1080p.mp4", @@ -252,7 +267,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "【幻月字幕组】【22年日剧】【据幸存的六人所说】【04】【1080P】【中日双语】", @@ -268,7 +284,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "【爪爪字幕组】★7月新番[即使如此依旧步步进逼/Soredemo Ayumu wa Yosetekuru][09][1080p][HEVC][GB][MP4][招募翻译校对]", @@ -284,7 +301,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "HEVC", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[猎户不鸽发布组] 不死者之王 第四季 OVERLORD Ⅳ [02] [1080p] [简中内封] [2022年7月番]", @@ -300,7 +318,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[GM-Team][国漫][寻剑 第1季][Sword Quest Season 1][2002][02][AVC][GB][1080P]", @@ -316,7 +335,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": " [猎户不鸽发布组] 组长女儿与照料专员 / 组长女儿与保姆 Kumichou Musume to Sewagakari [09] [1080p+] [简中内嵌] [2022年7月番]", @@ -332,7 +352,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "Nande Koko ni Sensei ga!? 2019 Blu-ray Remux 1080p AVC LPCM-7³ ACG", @@ -348,7 +369,8 @@ meta_cases = [{ "restype": "BluRay REMUX", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "LPCM 7³" + "audio_codec": "LPCM 7³", + "fps": None } }, { "title": "30.Rock.S02E01.1080p.UHD.BluRay.X264-BORDURE.mkv", @@ -364,7 +386,8 @@ meta_cases = [{ "restype": "UHD BluRay", "pix": "1080p", "video_codec": "x264", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[Gal to Kyouryuu][02][BDRIP][1080P][H264_FLAC].mkv", @@ -380,7 +403,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "H264", - "audio_codec": "FLAC" + "audio_codec": "FLAC", + "fps": None } }, { "title": "[AI-Raws] 逆境無頼カイジ #13 (BD HEVC 1920x1080 yuv444p10le FLAC)[7CFEE642].mkv", @@ -396,7 +420,8 @@ meta_cases = [{ "restype": "BD", "pix": "1080p", "video_codec": "HEVC", - "audio_codec": "FLAC" + "audio_codec": "FLAC", + "fps": None } }, { "title": "Mr. Robot - S02E06 - eps2.4_m4ster-s1ave.aes SDTV.mp4", @@ -412,7 +437,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[神印王座][Throne of Seal][2022][WEB-DL][2160][TV Series][TV 22][LeagueWEB] 神印王座 第一季 第22集 | 类型:动画 [国语中字][967.44 MB]", @@ -428,7 +454,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "S02E1000.mkv", @@ -444,7 +471,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "西部世界 12.mkv", @@ -460,7 +488,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[ANi] OVERLORD 第四季 - 04 [1080P][Baha][WEB-DL][AAC AVC][CHT].mp4", @@ -476,7 +505,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "[SweetSub&LoliHouse] Made in Abyss S2 - 03v2 [WebRip 1080p HEVC-10bit AAC ASSx2].mkv", @@ -492,7 +522,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "[GM-Team][国漫][斗破苍穹 第5季][Fights Break Sphere V][2022][05][HEVC][GB][4K]", @@ -508,7 +539,8 @@ meta_cases = [{ "restype": "", "pix": "2160p", "video_codec": "HEVC", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "Ousama Ranking S01E02-[1080p][BDRIP][X265.FLAC].mkv", @@ -524,7 +556,8 @@ meta_cases = [{ "restype": "BDRIP", "pix": "1080p", "video_codec": "x265", - "audio_codec": "FLAC" + "audio_codec": "FLAC", + "fps": None } }, { "title": "[Nekomoe kissaten&LoliHouse] Soredemo Ayumu wa Yosetekuru - 01v2 [WebRip 1080p HEVC-10bit EAC3 ASSx2].mkv", @@ -540,7 +573,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "EAC3" + "audio_codec": "EAC3", + "fps": None } }, { "title": "[喵萌奶茶屋&LoliHouse] 金装的薇尔梅 / Kinsou no Vermeil - 01 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]", @@ -556,7 +590,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "Hataraku.Maou-sama.S02E05.2022.1080p.CR.WEB-DL.X264.AAC-ADWeb.mkv", @@ -572,7 +607,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "The Witch Part 2:The Other One 2022 1080p WEB-DL AAC5.1 H264-tG1R0", @@ -588,7 +624,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC 5.1" + "audio_codec": "AAC 5.1", + "fps": None } }, { "title": "一夜新娘 - S02E07 - 第 7 集.mp4", @@ -604,7 +641,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[ANi] 處刑少女的生存之道 - 07 [1080P][Baha][WEB-DL][AAC AVC][CHT].mp4", @@ -620,7 +658,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "Stand-up.Comedy.S01E01.PartA.2022.1080p.WEB-DL.H264.AAC-TJUPT.mp4", @@ -636,7 +675,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "教父3.The.Godfather.Part.III.1990.1080p.NF.WEBRip.H264.DDP5.1-PTerWEB.mkv", @@ -652,7 +692,8 @@ meta_cases = [{ "restype": "WEBRip", "pix": "1080p", "video_codec": "H264", - "audio_codec": "DDP 5.1" + "audio_codec": "DDP 5.1", + "fps": None } }, { "title": "A.Quiet.Place.Part.II.2020.1080p.UHD.BluRay.DD+7.1.DoVi.X265-PuTao", @@ -668,7 +709,8 @@ meta_cases = [{ "restype": "UHD BluRay DoVi", "pix": "1080p", "video_codec": "x265", - "audio_codec": "DD+ 7.1" + "audio_codec": "DD+ 7.1", + "fps": None } }, { "title": "Childhood.In.A.Capsule.S01E16.2022.1080p.KKTV.WEB-DL.X264.AAC-ADWeb.mkv", @@ -684,7 +726,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "[桜都字幕组] 异世界归来的舅舅 / Isekai Ojisan [01][1080p][简体内嵌]", @@ -700,7 +743,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "【喵萌奶茶屋】★04月新番★[夏日重現/Summer Time Rendering][15][720p][繁日雙語][招募翻譯片源]", @@ -716,7 +760,8 @@ meta_cases = [{ "restype": "", "pix": "720p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[NC-Raws] 打工吧!魔王大人 第二季 / Hataraku Maou-sama!! - 02 (B-Global 1920x1080 HEVC AAC MKV)", @@ -732,7 +777,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "HEVC", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "The Witch Part 2 The Other One 2022 1080p WEB-DL AAC5.1 H.264-tG1R0", @@ -748,7 +794,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC 5.1" + "audio_codec": "AAC 5.1", + "fps": None } }, { "title": "The 355 2022 BluRay 1080p DTS-HD MA5.1 X265.10bit-BeiTai", @@ -764,7 +811,8 @@ meta_cases = [{ "restype": "BluRay", "pix": "1080p", "video_codec": "x265 10bit", - "audio_codec": "DTS-HD MA 5.1" + "audio_codec": "DTS-HD MA 5.1", + "fps": None } }, { "title": "Sense8 s01-s02 2015-2017 1080P WEB-DL X265 AC3£cXcY@FRDS", @@ -780,7 +828,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x265", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "The Heart of Genius S01 13-14 2022 1080p WEB-DL H264 AAC", @@ -796,7 +845,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "The Heart of Genius E13-14 2022 1080p WEB-DL H264 AAC", @@ -812,7 +862,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "2022.8.2.Twelve.Monkeys.1995.GBR.4K.REMASTERED.BluRay.1080p.X264.DTS [3.4 GB]", @@ -828,7 +879,8 @@ meta_cases = [{ "restype": "BluRay", "pix": "4k", "video_codec": "x264", - "audio_codec": "DTS" + "audio_codec": "DTS", + "fps": None } }, { "title": "[NC-Raws] 王者天下 第四季 - 17 (Baha 1920x1080 AVC AAC MP4) [3B1AA7BB].mp4", @@ -844,7 +896,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "AVC", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "Sense8 S2E1 2015-2017 1080P WEB-DL X265 AC3£cXcY@FRDS", @@ -860,7 +913,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "x265", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[xyx98]传颂之物/Utawarerumono/うたわれるもの[BDrip][1920x1080][TV 01-26 Fin][hevc-yuv420p10 flac_ac3][ENG PGS]", @@ -876,7 +930,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "flac" + "audio_codec": "flac", + "fps": None } }, { "title": "[云歌字幕组][7月新番][欢迎来到实力至上主义的教室 第二季][01][X264 10bit][1080p][简体中文].mp4", @@ -892,7 +947,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "X264", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "[诛仙][Jade Dynasty][2022][WEB-DL][2160][TV Series][TV 04][LeagueWEB]", @@ -908,7 +964,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "Rick and Morty.S06E06.JuRicksic.Mort.1080p.HMAX.WEBRip.DD5.1.X264-NTb[rartv]", @@ -924,7 +981,8 @@ meta_cases = [{ "restype": "WEBRip", "pix": "1080p", "video_codec": "x264", - "audio_codec": "DD 5.1" + "audio_codec": "DD 5.1", + "fps": None } }, { "title": "rick and Morty.S06E05.JuRicksic.Mort.1080p.HMAX.WEBRip.DD5.1.X264-NTb[rartv]", @@ -940,7 +998,8 @@ meta_cases = [{ "restype": "WEBRip", "pix": "1080p", "video_codec": "x264", - "audio_codec": "DD 5.1" + "audio_codec": "DD 5.1", + "fps": None } }, { "title": "[Hall_of_C] 诛仙 Zhu Xian (Jade Dynasty) - Episode 19", @@ -956,7 +1015,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "I Woke Up a Vampire S02 2023 2160p NF WEB-DL DDP5.1 Atmos H 265-HHWEB", @@ -972,7 +1032,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "2160p", "video_codec": "H265", - "audio_codec": "DDP 5.1 Atmos" + "audio_codec": "DDP 5.1 Atmos", + "fps": None } }, { "title": "Shadows of the Void S01 2024 1080p WEB-DL H264 AAC-HHWEB", @@ -988,7 +1049,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "1080p", "video_codec": "H264", - "audio_codec": "AAC" + "audio_codec": "AAC", + "fps": None } }, { "title": "【极影字幕社】★1月新番 Metallic Rouge/金属口红 第13话 GB 1080P MP4(字幕社招人内详)", @@ -1004,7 +1066,8 @@ meta_cases = [{ "restype": "", "pix": "1080p", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "title": "Mai Xiang S01 2019 2160p WEB-DL H.265 DDP2.0-HHWEB", @@ -1020,7 +1083,8 @@ meta_cases = [{ "restype": "WEB-DL", "pix": "2160p", "video_codec": "H265", - "audio_codec": "DDP 2.0" + "audio_codec": "DDP 2.0", + "fps": None } }, { "path": "/volume1/电视剧/西部世界 第二季 (2016)/5.mkv", @@ -1035,7 +1099,8 @@ meta_cases = [{ "restype": "", "pix": "", "video_codec": "", - "audio_codec": "" + "audio_codec": "", + "fps": None } }, { "path": "/movies/The Vampire Diaries (2009) [tmdbid=18165]/The.Vampire.Diaries.S01E01.1080p.mkv", @@ -1051,7 +1116,8 @@ meta_cases = [{ "pix": "1080p", "video_codec": "", "audio_codec": "", - "tmdbid": 18165 + "tmdbid": 18165, + "fps": None } }, { "path": "/movies/Inception (2010) [tmdbid-27205]/Inception.2010.1080p.mkv", @@ -1067,7 +1133,8 @@ meta_cases = [{ "pix": "1080p", "video_codec": "", "audio_codec": "", - "tmdbid": 27205 + "tmdbid": 27205, + "fps": None } }, { "path": "/movies/Breaking Bad (2008) [tmdb=1396]/Season 1/Breaking.Bad.S01E01.1080p.mkv", @@ -1083,7 +1150,8 @@ meta_cases = [{ "pix": "1080p", "video_codec": "", "audio_codec": "", - "tmdbid": 1396 + "tmdbid": 1396, + "fps": None } }, { "path": "/tv/Game of Thrones (2011) {tmdb=1399}/Season 1/Game.of.Thrones.S01E01.1080p.mkv", @@ -1099,7 +1167,8 @@ meta_cases = [{ "pix": "1080p", "video_codec": "", "audio_codec": "", - "tmdbid": 1399 + "tmdbid": 1399, + "fps": None } }, { "path": "/movies/Avatar (2009) {tmdb-19995}/Avatar.2009.1080p.mkv", @@ -1115,7 +1184,8 @@ meta_cases = [{ "pix": "1080p", "video_codec": "", "audio_codec": "", - "tmdbid": 19995 + "tmdbid": 19995, + "fps": None } }, { "path": "/movies/DouBan_IMDB.TOP250.Movies.Mixed.Collection.20240501.FRDS/为奴十二年.12.Years.a.Slave.2013.BluRay.1080p.x265.10bit.2Audio.MNHD-FRDS/12.Years.a.Slave.2013.BluRay.1080p.x265.10bit.2Audio.MNHD-FRDS.mkv", diff --git a/tests/test_metainfo.py b/tests/test_metainfo.py index d976bd1b..e54f16bf 100644 --- a/tests/test_metainfo.py +++ b/tests/test_metainfo.py @@ -30,7 +30,8 @@ class MetaInfoTest(TestCase): "restype": meta_info.edition, "pix": meta_info.resource_pix or "", "video_codec": meta_info.video_encode or "", - "audio_codec": meta_info.audio_encode or "" + "audio_codec": meta_info.audio_encode or "", + "fps": meta_info.fps or None } # 检查tmdbid