chore(viral-video): #2106 删除 _step_musetalk 步骤(Seedance 直生口型) #2108

Merged
xiaoxia merged 1 commits from chore/2106b-remove-musetalk into develop 2026-09-30 21:12:33 +08:00
3 changed files with 7 additions and 38 deletions
+7 -20
View File
@@ -1,6 +1,6 @@
"""爆款视频 Celery 编排器 — ViralVideoOrchestrator.
10 步流水线:
9 步流水线(Seedance 2.5 直生口型,不再走 MuseTalk):
1. 图片 VLM 分析
1.5 [v1.3] 视频风格分析(如用户上传参考视频)
2. 用户文案意图解析
@@ -8,10 +8,9 @@
4. 分镜脚本生成
5. 合规审核(6 维度,不通过自动重写 1 次)
6. CosyVoice 配音
7. BGM 选择
8. UnifiedRenderService 渲染
9. 数字人口型(MuseTalk)
10. OSS 上传 + 通知 + 扣点
7. BGM 选择(素材未就绪时跳过)
8. Seedance 逐分镜生成 + ffmpeg concat + 混 TTS
9. OSS 上传 + 通知 + 扣点
"""
from __future__ import annotations
@@ -593,14 +592,6 @@ def _make_placeholder_clip(tmpdir, idx: int, duration: int):
return out
def _step_musetalk(job: ViralVideoJob, video_path: str) -> str:
"""步骤 9: 数字人口型。P1:MuseTalk GPU 端点未就绪前统一跳过。"""
if not job.persona_id:
return video_path
logger.info("[爆款视频] persona_id=%s 已设置,但 MuseTalk GPU 端点未就绪,跳过口型同步", job.persona_id)
return video_path
def _step_upload(job: ViralVideoJob, video_path: str) -> str:
"""步骤 10: OSS 上传。"""
try:
@@ -760,14 +751,10 @@ def resume_viral_video_pipeline(self: Task, job_id: str) -> dict:
video_path = _step_render(job, storyboard, tts_path, bgm)
_emit_progress(job_id, ViralVideoStage.RENDERING, 88.0, "渲染完成")
# ── Step 9: MuseTalk(P1:端点未就绪前跳过) ──
_emit_progress(job_id, ViralVideoStage.MUSETALK, 90.0, "正在处理数字人口型...")
final_video_path = _step_musetalk(job, video_path)
_emit_progress(job_id, ViralVideoStage.MUSETALK, 93.0, "数字人处理完成")
# ── Step 10: OSS 上传 + 扣点 ──
# ── Step 9: OSS 上传 + 扣点 ──
# 注:爆款视频由 Seedance 2.5 直接生成口型,不需要 MuseTalk 事后对口型(MuseTalk 是 AI 数字人路线用的)。
_emit_progress(job_id, ViralVideoStage.UPLOADING, 95.0, "正在上传视频...")
video_url = _step_upload(job, final_video_path)
video_url = _step_upload(job, video_path)
job.credits_cost = CREDITS_VIRAL_VIDEO_COST
# TODO: 调用 credits.deduct() 实际扣点(#1895 总开关为 false 时不扣,保留 TODO)
-3
View File
@@ -456,7 +456,6 @@ class TestPipelineIntegration:
"""流水线端到端集成测试(mock 外部依赖)。"""
@patch("apps.worker.worker_app.tasks.viral_video._step_upload")
@patch("apps.worker.worker_app.tasks.viral_video._step_musetalk")
@patch("apps.worker.worker_app.tasks.viral_video._step_render")
@patch("apps.worker.worker_app.tasks.viral_video._step_bgm_select")
@patch("apps.worker.worker_app.tasks.viral_video._step_tts")
@@ -481,7 +480,6 @@ class TestPipelineIntegration:
mock_tts,
mock_bgm,
mock_render,
mock_musetalk,
mock_upload,
):
"""测试 resume 流水线能从确认状态走到完成。"""
@@ -509,7 +507,6 @@ class TestPipelineIntegration:
mock_tts.return_value = None # P1: TTS 返回 Path|None,mock 用 None 跳过混音
mock_bgm.return_value = None # P1: BGM 未就绪前返回 None
mock_render.return_value = "/tmp/video.mp4"
mock_musetalk.return_value = "/tmp/video_final.mp4"
mock_upload.return_value = "https://oss.example.com/final.mp4"
result = resume_viral_video_pipeline.run("job-001")
-15
View File
@@ -155,21 +155,6 @@ class TestBGMSkip:
assert _step_bgm_select(mock_job) is None
class TestMuseTalkSkip:
def test_musetalk_no_persona_passes_through(self, mock_job):
from apps.worker.worker_app.tasks.viral_video import _step_musetalk
mock_job.persona_id = ""
assert _step_musetalk(mock_job, "/tmp/video.mp4") == "/tmp/video.mp4"
def test_musetalk_with_persona_still_skips(self, mock_job):
"""GPU 端点未就绪前,即使有 persona 也直接返回原路径。"""
from apps.worker.worker_app.tasks.viral_video import _step_musetalk
mock_job.persona_id = "persona-1"
assert _step_musetalk(mock_job, "/tmp/video.mp4") == "/tmp/video.mp4"
# ── P0-1: call_video_generation 参数构造 ──────────────────────────