diff --git a/apps/worker/video_processing/render_adapter.py b/apps/worker/video_processing/render_adapter.py index 770501038..bd14d13a0 100755 --- a/apps/worker/video_processing/render_adapter.py +++ b/apps/worker/video_processing/render_adapter.py @@ -584,7 +584,7 @@ class RenderAdapter: from video_processing.thumbnail_generator import extract_and_upload_cover_frames # 从 plan config 提取标题文字,叠加到封面候选帧上 - _title_cfg = plan_config.get("title", {}) or {} + _title_cfg = (plan_config or {}).get("title", {}) or {} _title_text = (_title_cfg.get("text", "") or "").strip() if _title_cfg.get("enabled", True) else "" cover_candidates = extract_and_upload_cover_frames( diff --git a/apps/worker/video_processing/thumbnail_generator.py b/apps/worker/video_processing/thumbnail_generator.py index dab1bec2a..04e2d44f7 100755 --- a/apps/worker/video_processing/thumbnail_generator.py +++ b/apps/worker/video_processing/thumbnail_generator.py @@ -145,7 +145,7 @@ def _overlay_title_on_image( # 转义 drawtext 特殊字符 # FFmpeg drawtext 需要转义: ' : % \ [ ] - escaped = title_text.replace("\\", "\\\\").replace("'", "’").replace(":", "\\:").replace("%", "%%") + escaped = title_text.replace("\\", "\\\\").replace("'", "’").replace(":", "\\:").replace("%", "%%").replace("[", "\\[").replace("]", "\\]") # 截断过长标题 if len(escaped) > 60: escaped = escaped[:57] + "..."