From fc2dc0a478171260bac0fa395101e591018ae493 Mon Sep 17 00:00:00 2001 From: Hare Date: Fri, 13 Feb 2026 00:05:55 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=91=E3=83=95=E3=82=A9=E3=83=BC=E3=83=9E?= =?UTF-8?q?=E3=83=B3=E3=82=B9#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/main.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/server/main.py b/server/main.py index 1e4b02a..416d62f 100644 --- a/server/main.py +++ b/server/main.py @@ -188,6 +188,23 @@ def process_video_task(task_id: str, req: GenerateRequest): # Clear buffer frame_buffer.clear() + # Seek once to the starting frame. Avoid random-access seek on every frame. + if req.start_frame > 0: + seek_ok = cap.set(cv2.CAP_PROP_POS_FRAMES, req.start_frame) + if not seek_ok: + print( + f"[FaceMask] Warning: CAP_PROP_POS_FRAMES seek failed, " + f"fallback to sequential skip ({req.start_frame} frames)" + ) + for _ in range(req.start_frame): + ret, _ = cap.read() + if not ret: + tasks[task_id].status = TaskStatus.FAILED + tasks[task_id].message = ( + f"Failed to seek to start frame: {req.start_frame}" + ) + return + # Process loop with batching current_count = 0 for frame_idx in range(req.start_frame, end_frame + 1): @@ -196,8 +213,7 @@ def process_video_task(task_id: str, req: GenerateRequest): tasks[task_id].message = "Cancelled by user" break - # Read frame - cap.set(cv2.CAP_PROP_POS_FRAMES, frame_idx) + # Read next frame sequentially (after one-time initial seek) ret, frame = cap.read() if ret: