From 18703328a03bcaba54ea34c4bd2fc64c3cc24b8b Mon Sep 17 00:00:00 2001 From: haha114514 <47912037+haha114514@users.noreply.github.com> Date: Thu, 2 Feb 2023 03:20:06 +1100 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20(#271)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 注销自动替换文件名中空格为_字符的功能,避免和录播完毕自动改名冲突 * 修改postprocessor,避免出现指令有问题导致反复从头开始执行任务的问题 即使输入的指令有问题,也会直接跳过并执行接下来的指令,不会反复重新执行(比如设置了该主播上传b站,在上传完毕之后,开始执行postprocessor,如果这个时候postprocessor里面的指令有问题,则会导致报错,并从头开始重新上传,如此反复) * 完善downloader的描述 * 补充toml里面漏掉的downloader设置 * 修复stream-gears录制文件名重复导致分段覆盖的问题 * 更新上传节点介绍 --- CHANGELOG.md | 10 +++++++++- biliup/engine/download.py | 10 ++++++---- biliup/engine/upload.py | 23 ++++++++++++++--------- public/config.toml | 2 ++ public/config.yaml | 6 +++--- 5 files changed, 34 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 367bc2e..ceb1a63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,15 @@ - 🔧已修复的问题 - ⚠️需要手动操作的更新信息 -## 0.3.10 +## 0.3.11 +- 更新时间:2023.02.02 +- 🔧修复config.yaml示例中filename_prefix配置格式 [@FairyWorld](https://github.com/FairyWorld) +- 🔧添加config.toml示例中缺失的关于downloader的设置 [@haha114514](https://github.com/haha114514) +- 🔧修改postprocessor,避免出现指令有问题导致反复从头开始执行任务的问题 [@haha114514](https://github.com/haha114514) +- 🔧去掉自动替换文件名中空格为_字符的功能,避免和录播完毕自动改名冲突 [@haha114514](https://github.com/haha114514) +- 🔧修复由于上一版的修改导致stream-gears录制文件名重复出现分段覆盖的问题[@haha114514](https://github.com/haha114514) + +## 0.3.10 ⚠️⚠️此版本存在stream-gears录制文件名重复导致覆盖上一段分段的问题,请勿使用 - 更新时间:2023.02.01 - 💡添加全局与单个主播自定义录播文件命名设置 [@haha114514](https://github.com/haha114514) - ⚠️新增与主播自定义录播文件命名设置的两个参数,如需使用此功能,请老版本用户参考config的示例添加。[@haha114514](https://github.com/haha114514) diff --git a/biliup/engine/download.py b/biliup/engine/download.py index 7e5bbec..7d0c2d0 100644 --- a/biliup/engine/download.py +++ b/biliup/engine/download.py @@ -53,7 +53,9 @@ class DownloadBase: def download(self, filename): if self.filename_prefix: # 判断是否存在自定义录播命名设置 - filename = time.strftime(self.filename_prefix.format(streamer=self.fname, room_title=self.room_title).encode('unicode-escape').decode()).encode().decode("unicode-escape") + filename = (self.filename_prefix.format(streamer=self.fname, room_title=self.room_title).encode('unicode-escape').decode()).encode().decode("unicode-escape") + else: + filename = f'{self.fname}%Y-%m-%dT%H_%M_%S' filename = get_valid_filename(filename) if self.downloader == 'stream-gears': stream_gears_download(self.raw_stream_url, self.fake_headers, filename, config.get('segment_time'), @@ -68,9 +70,9 @@ class DownloadBase: '-i', self.raw_stream_url, *self.default_output_args, *self.opt_args, '-c', 'copy', '-f', self.suffix] if config.get('segment_time'): - args += ['-f', 'segment', f'{filename} part-%03d.{self.suffix}'] + args += ['-f', 'segment', f'{time.strftime(filename)} part-%03d.{self.suffix}'] else: - args += [f'{filename}.{self.suffix}.part'] + args += [f'{time.strftime(filename)}.{self.suffix}.part'] proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) try: @@ -176,7 +178,7 @@ def get_valid_filename(name): >>> get_valid_filename("{self.fname}%Y-%m-%dT%H_%M_%S") '{self.fname}%Y-%m-%dT%H_%M_%S' """ - s = str(name).strip().replace(" ", "_") + #s = str(name).strip().replace(" ", "_") #因为有些人会在主播名中间加入空格,为了避免和录播完毕自动改名冲突,所以注销掉 s = re.sub(r"(?u)[^-\w.%{}\[\]【】「」]", "", s) if s in {"", ".", ".."}: raise RuntimeError("Could not derive file name from '%s'" % name) diff --git a/biliup/engine/upload.py b/biliup/engine/upload.py index b9ec4da..cf15ece 100644 --- a/biliup/engine/upload.py +++ b/biliup/engine/upload.py @@ -75,14 +75,19 @@ class UploadBase: dest = Path(post_processor['mv']) if not dest.is_dir(): dest.mkdir(parents=True, exist_ok=True) - #path.rename(dest / path.name) - shutil.move(path, dest / path.name) + try: + shutil.move(path, dest / path.name) + except Exception as e: + logger.exception(e) + continue logger.info(f"move to {(dest / path.name).absolute()}") if post_processor.get('run'): - process = subprocess.run( - post_processor['run'], shell=True, input=reduce(lambda x, y: x + str(Path(y).absolute()) + '\n', data, ''), - stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True) - if process.returncode != 0: - logger.error(process.stdout) - raise Exception("PostProcessorRunTimeError") - logger.info(process.stdout.rstrip()) + try: + process_output = subprocess.check_output( + post_processor['run'], shell=True, + input=reduce(lambda x, y: x + str(Path(y).absolute()) + '\n', data, ''), + stderr=subprocess.STDOUT, text=True) + logger.info(process_output.rstrip()) + except subprocess.CalledProcessError as e: + logger.exception(e.output) + continue diff --git a/public/config.toml b/public/config.toml index 5e74cf9..b7004f0 100644 --- a/public/config.toml +++ b/public/config.toml @@ -1,5 +1,7 @@ # 选择全局默认上传插件,Noop为不上传,但会执行后处理,可选bili_web,biliup-rs #uploader = "Noop" +# 选择全局默认的下载插件,默认为stream-gears。可选ffmpeg与stream-gears。 +#downloader= "ffmpeg" # b站上传线路选择,默认为自动模式,目前可手动切换为bda2, kodo, ws, qn, cos, cos-internal(支持腾讯云内网免流+提速) lines = "AUTO" # 单文件并发上传数,未达到带宽上限时增大此值可提高上传速度 diff --git a/public/config.yaml b/public/config.yaml index 8d5b6f2..28d49d1 100644 --- a/public/config.yaml +++ b/public/config.yaml @@ -1,7 +1,7 @@ # 选择全局默认上传插件,Noop为不上传,但会执行后处理,可选bili_web,biliup-rs #uploader: Noop -#downloader: ffmpeg # 可选stream-gears - +# 选择全局默认的下载插件,默认为stream-gears。可选ffmpeg与stream-gears。 +#downloader: ffmpeg # b站上传线路选择,默认为自动模式,目前可手动切换为bda2, kodo, ws, qn, cos, cos-internal(支持腾讯云内网免流+提速) lines: AUTO # 单文件并发上传数,未达到带宽上限时增大此值可提高上传速度 @@ -42,7 +42,7 @@ streamers: - mv: backup/ # 移动文件到backup目录下 - run: python3 path/to/mail.py # 执行一个 Python 脚本,可以用来发送邮件等,详见 https://biliup.github.io/biliup/Guide.html#%E4%B8%8A%E4%BC%A0%E5%AE%8C%E6%88%90%E5%90%8E%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5 - run: sh ./run.sh # 执行一个shell脚本,用途多样,主要调用系统内的cli工具。示例 https://gist.github.com/UVJkiNTQ/ae4282e8f9fe4e45b3144b57605b4178 -# - rm # 删除文件,为默认操作 + #- rm # 删除文件,为默认操作 tags: - biliup # 希望你可以保留软件出处 - 视频标签