From 431fc0433b99f86711d9e4da82db3d2e71535407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=85=E8=AF=BA=E7=8B=90?= <212194964+foxcyber907@users.noreply.github.com> Date: Mon, 25 Aug 2025 17:46:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/chat/utils/utils_video.py | 10 ++++++---- template/bot_config_template.toml | 4 +++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/chat/utils/utils_video.py b/src/chat/utils/utils_video.py index f90ff1d16..e40102902 100644 --- a/src/chat/utils/utils_video.py +++ b/src/chat/utils/utils_video.py @@ -55,6 +55,7 @@ def _extract_frames_worker(video_path: str, # 新模式:按时间间隔抽帧 time_interval = frame_interval_seconds next_frame_time = 0.0 + extracted_count = 0 # 初始化提取帧计数器 while cap.isOpened(): ret, frame = cap.read() @@ -69,20 +70,21 @@ def _extract_frames_worker(video_path: str, pil_image = Image.fromarray(frame_rgb) # 调整图像大小 - if max(pil_image.size) > self.max_image_size: - ratio = self.max_image_size / max(pil_image.size) + if max(pil_image.size) > max_image_size: + ratio = max_image_size / max(pil_image.size) new_size = tuple(int(dim * ratio) for dim in pil_image.size) pil_image = pil_image.resize(new_size, Image.Resampling.LANCZOS) # 转换为base64 buffer = io.BytesIO() - pil_image.save(buffer, format='JPEG', quality=self.frame_quality) + pil_image.save(buffer, format='JPEG', quality=frame_quality) frame_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8') frames.append((frame_base64, current_time)) extracted_count += 1 - logger.debug(f"提取第{extracted_count}帧 (时间: {current_time:.2f}s)") + # 注意:这里不能使用logger,因为在线程池中 + # logger.debug(f"提取第{extracted_count}帧 (时间: {current_time:.2f}s)") next_frame_time += time_interval else: diff --git a/template/bot_config_template.toml b/template/bot_config_template.toml index af0b15fe8..3e19f3c95 100644 --- a/template/bot_config_template.toml +++ b/template/bot_config_template.toml @@ -1,5 +1,5 @@ [inner] -version = "6.4.4" +version = "6.4.6" #----以下是给开发人员阅读的,如果你只是部署了麦麦,不需要阅读---- #如果你想要修改配置文件,请递增version的值 @@ -387,6 +387,8 @@ max_frames = 16 # 最大分析帧数(仅在 mode = "fixed_number" 时生效) frame_quality = 80 # 帧图像JPEG质量 (1-100) max_image_size = 800 # 单帧最大图像尺寸(像素) enable_frame_timing = true # 是否在分析中包含帧的时间信息 +use_multiprocessing = true # 是否使用线程池处理视频帧提取(推荐开启,可防止卡死) +max_workers = 2 # 最大线程数(建议1-2个,避免过度消耗资源) # 批量分析时使用的提示词 batch_analysis_prompt = """请分析这个视频的内容。这些图片是从视频中按时间顺序提取的关键帧。