From ccef935ca79b61007cad6d2ee523d16ea8704cc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=B5=E5=BA=94?= Date: Sun, 13 Sep 2026 23:11:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(worker):=20=E6=94=B9=E8=BF=9Bffmpeg?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF=E5=8F=AF=E8=A7=81=E6=80=A7?= =?UTF-8?q?=EF=BC=8Cstderr=E5=B0=BE=E9=83=A8=E4=BC=98=E5=85=88+error=5Fdet?= =?UTF-8?q?ail=E4=B8=8D=E4=B8=A2=E5=BC=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. error_message显示stderr尾部500字符(而非头部ffmpeg banner) 2. error_detail保留stderr尾部5000字符 3. generation任务RuntimeError保留error_detail 4. 缩略图ffmpeg错误同理 --- apps/worker/video_processing/render_adapter.py | 14 ++++++++------ apps/worker/worker_app/tasks/generation.py | 3 ++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/apps/worker/video_processing/render_adapter.py b/apps/worker/video_processing/render_adapter.py index ac87ab956..defb59068 100755 --- a/apps/worker/video_processing/render_adapter.py +++ b/apps/worker/video_processing/render_adapter.py @@ -221,17 +221,18 @@ class RenderAdapter: except subprocess.CalledProcessError as exc: stderr_text = (exc.stderr or "").strip() + stderr_tail = stderr_text[-5000:] if len(stderr_text) > 5000 else stderr_text logger.error( "[render-adapter] ffmpeg渲染失败: plan_id=%s job_id=%s exit_code=%d\nstderr:\n%s", plan_id, job_id, exc.returncode, - stderr_text[-2000:] if len(stderr_text) > 2000 else stderr_text, + stderr_tail, ) return RenderAdapterResult( success=False, - error_message=f"FFmpeg渲染失败(exit={exc.returncode}): {stderr_text[:200]}", - error_detail=stderr_text[-2000:] if len(stderr_text) > 2000 else stderr_text, + error_message=f"FFmpeg渲染失败(exit={exc.returncode}): {stderr_text[-500:]}", + error_detail=stderr_tail, ) except Exception as exc: logger.exception( @@ -721,16 +722,17 @@ class RenderAdapter: except subprocess.CalledProcessError as exc: stderr_text = (exc.stderr or "").strip() + stderr_tail = stderr_text[-5000:] if len(stderr_text) > 5000 else stderr_text logger.error( "[render-adapter] 内存模式渲染失败: plan_id=%s exit_code=%d\nstderr:\n%s", actual_plan_id, exc.returncode, - stderr_text[-2000:] if len(stderr_text) > 2000 else stderr_text, + stderr_tail, ) return RenderAdapterResult( success=False, - error_message=f"FFmpeg渲染失败(exit={exc.returncode}): {stderr_text[:200]}", - error_detail=stderr_text[-2000:] if len(stderr_text) > 2000 else stderr_text, + error_message=f"FFmpeg渲染失败(exit={exc.returncode}): {stderr_text[-500:]}", + error_detail=stderr_tail, ) except Exception as exc: logger.exception( diff --git a/apps/worker/worker_app/tasks/generation.py b/apps/worker/worker_app/tasks/generation.py index a429d7b47..171fa7f14 100644 --- a/apps/worker/worker_app/tasks/generation.py +++ b/apps/worker/worker_app/tasks/generation.py @@ -705,7 +705,8 @@ def _render_from_edit_plan( ) if not result.success: - raise RuntimeError(f"渲染失败: {result.error_message}") + detail_suffix = f"\n[detail] {result.error_detail}" if result.error_detail else "" + raise RuntimeError(f"渲染失败: {result.error_message}{detail_suffix}") render_elapsed = time.monotonic() - render_start logger.info(