diff --git a/tools/build_trees.py b/tools/build_trees.py index 5eeeb56..c5fbd67 100644 --- a/tools/build_trees.py +++ b/tools/build_trees.py @@ -300,21 +300,21 @@ async def main_async(args: argparse.Namespace) -> None: async with video_sem: vid = video_path.stem logger.info("开始建树 {}", vid) - builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem) - srt_entries = _find_srt_entries(video_path, srt_dir) try: + builder = VideoTreeBuilder(vlm=vlm, llm=llm, config=tree_cfg, api_semaphore=api_sem) + srt_entries = _find_srt_entries(video_path, srt_dir) index = await builder.build_async(str(video_path), srt_entries) + tree_path = out_dir / vid / "tree.json" + tree_path.parent.mkdir(parents=True, exist_ok=True) + index.save_json(str(tree_path)) + await save_progress(progress_path, progress_lock, vid) + completed += 1 except Exception as exc: # WHY: 单视频错误隔离——一个视频失败不拖垮整批; # 失败清单汇总上报,vid 不进 progress,下次重跑自动重建。 logger.error("建树失败 {} ({}): {}", vid, type(exc).__name__, exc) failed.append(vid) return - tree_path = out_dir / vid / "tree.json" - tree_path.parent.mkdir(parents=True, exist_ok=True) - index.save_json(str(tree_path)) - await save_progress(progress_path, progress_lock, vid) - completed += 1 if completed % 5 == 0: elapsed = time.time() - start_time rate = completed / elapsed * 60 if elapsed > 0 else 0