From fb21fe8e173ca00561fb50ebf2bb04c0a8f39af8 Mon Sep 17 00:00:00 2001 From: XuanRan_Nyan <31968665+xxxxuanran@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:12:36 +0800 Subject: [PATCH] fix: val name err (#962) * allowed u+00b0 u+30FB * fix error * change val name * fix wrong ffmpeg output format --- biliup/engine/download.py | 10 ++++++++-- biliup/plugins/huya.py | 18 +++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/biliup/engine/download.py b/biliup/engine/download.py index 4561564..99ed312 100644 --- a/biliup/engine/download.py +++ b/biliup/engine/download.py @@ -203,7 +203,13 @@ class DownloadBase(ABC): output_args += self.opt_args - args = ['ffmpeg', '-y', *input_args, *output_args, '-c', 'copy', '-f', self.suffix, + if self.suffix.lower() == 'ts': + output_args += ['-f', 'mpegts'] + elif self.suffix.lower() == 'mkv': + output_args += ['-f', 'matroska'] + else: + output_args += ['-f', self.suffix] + args = ['ffmpeg', '-y', *input_args, *output_args, '-c', 'copy', f'{fmt_file_name}.{self.suffix}.part'] with subprocess.Popen(args, stdin=subprocess.DEVNULL if not streamlink_proc else streamlink_proc.stdout, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) as proc: @@ -492,7 +498,7 @@ def get_valid_filename(name): '{self.fname}%Y-%m-%dT%H_%M_%S' """ # s = str(name).strip().replace(" ", "_") #因为有些人会在主播名中间加入空格,为了避免和录播完毕自动改名冲突,所以注释掉 - s = re.sub(r"(?u)[^-\w.%{}\[\]【】「」()\s]", "", str(name)) + s = re.sub(r"(?u)[^-\w.%{}\[\]【】「」()・°\s]", "", str(name)) if s in {"", ".", ".."}: raise RuntimeError("Could not derive file name from '%s'" % name) return s diff --git a/biliup/plugins/huya.py b/biliup/plugins/huya.py index e2f1ced..402b89b 100644 --- a/biliup/plugins/huya.py +++ b/biliup/plugins/huya.py @@ -73,17 +73,17 @@ class Huya(DownloadBase): logger.error(f"{self.plugin_msg}: 没有可用的链接") return False - cdnNameList = list(stream_urls.keys()) - if perf_cdn not in cdnNameList: - logger.warning(f"{self.plugin_msg}: {perf_cdn} CDN不存在,自动切换到 {cdnNameList[0]}") - perf_cdn = cdnNameList[0] + cdn_name_list = list(stream_urls.keys()) + if perf_cdn not in cdn_name_list: + logger.warning(f"{self.plugin_msg}: {perf_cdn} CDN不存在,自动切换到 {cdn_name_list[0]}") + perf_cdn = cdn_name_list[0] # 虎牙直播流只允许连接一次 if cdn_fallback: _url = await self.acheck_url_healthy(stream_urls[perf_cdn]) if _url is None: - logger.info(f"{self.plugin_msg}: 提供如下CDN {cdnNameList}") - for cdn in cdnNameList: + logger.info(f"{self.plugin_msg}: 提供如下CDN {cdn_name_list}") + for cdn in cdn_name_list: if cdn == perf_cdn: continue logger.info(f"{self.plugin_msg}: cdn_fallback 尝试 {cdn}") @@ -145,10 +145,10 @@ class Huya(DownloadBase): logger.error(f"{self.plugin_msg}: build_stream_url {stream_name} {anti_code}") return {} # HY 和 HYZJ 均为 P2P - sStreams = {item['sCdnType']: \ + streams = {item['sCdnType']: \ f"{item[f's{protocol}Url']}/{stream_name}.{suffix}?{anti_code}" \ for item in stream_info if 'HY' not in item['sCdnType']} - return sStreams + return streams def build_query(sStreamName, sAntiCode) -> str: @@ -191,4 +191,4 @@ def build_query(sStreamName, sAntiCode) -> str: "sdk_sid": str(int(time.time() * 1000)), "codec": "264", } - return '&'.join([f"{k}={v}" for k, v in anticode.items()]) + return '&'.join([f"{k}={v}" for k, v in anti_code.items()])