Compare commits

...

1 Commits

Author SHA1 Message Date
业务服务器运维 ba8f786b60 fix: 修复 _storage_key 无法写入 EditPlanClip(slots=True)
EditPlanClip 使用 @dataclass(slots=True) 不允许动态添加属性,
改为将 _storage_key 存入 clip.config 字典,在 _resolve_clips
中传递到 ResolvedClip.config,gpu_direct_pipeline 从 config 读取。
2026-09-28 14:43:17 +08:00
3 changed files with 15 additions and 3 deletions
@@ -156,7 +156,7 @@ def build_direct_render(
# 1. 视频输入(原始素材签名 URL)
for i, clip in enumerate(resolved_clips):
sk = getattr(clip, "_storage_key", None)
sk = (getattr(clip, "config", None) or {}).get("_storage_key")
if not sk:
raise ValueError(f"clip {getattr(clip,'clip_id',i)} missing _storage_key")
fname = f"v{i}.mp4"
@@ -599,7 +599,10 @@ class RenderAdapter:
for c in clips:
sk = _storage_map.get(getattr(c, "asset_id", ""))
if sk:
setattr(c, "_storage_key", sk)
# EditPlanClip 使用 __slots__,不能 setattr,改存 config 字典
if not isinstance(c.config, dict):
c.config = dict(c.config) if c.config else {}
c.config["_storage_key"] = sk
result = render_svc.render()
# 4.5 渲染后校验输出完整性
@@ -1752,6 +1752,11 @@ class UnifiedRenderService:
trim_config=seg.trim,
)
resolved.append(rc)
# 传递存储键(GPU直连管线需要,从 EditPlanClip.config 读取)
_sk = (clip.config or {}).get("_storage_key")
if _sk:
for seg_rc in resolved[-len(resolved_segments):]:
seg_rc.config["_storage_key"] = _sk
continue
# 单段裁剪(或无裁剪)
@@ -1825,6 +1830,10 @@ class UnifiedRenderService:
actual_duration=actual_duration,
trim_config=effective_trim,
)
# 传递存储键(GPU直连管线需要,从 EditPlanClip.config 读取)
_sk = (clip.config or {}).get("_storage_key")
if _sk:
rc.config["_storage_key"] = _sk
resolved.append(rc)
# Debug日志:记录每个clip的时长信息
@@ -2247,7 +2256,7 @@ class UnifiedRenderService:
cg = ColorGradeConfig.from_dict(cc.get("color_grade"))
if cg.enabled and cg.has_effect():
return False
if not getattr(c, "_storage_key", None):
if not (c.config or {}).get("_storage_key"):
return False
return True
except Exception: # noqa: BLE001