feat(ai-avatar): 配音前置 #1875
Reference in New Issue
Block a user
Delete Branch "fix/ai-avatar-tts-pre-step"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
配音前置——步骤1生成配音,音频直传对口型
后端: - packages/domain/sentence_timings.py:抽出 compute_sentence_timings / probe_audio_duration 等公共工具 - tasks/lipsync_tts.py:改为复用 sentence_timings 公共模块,保留 Celery 任务作为降级路径 - schemas/lipsync.py:新增 AiAvatarTtsPreviewRequest/Response;CreateLipsyncJobRequest 新增可选 audio_url/audio_duration/sentence_timings 字段 - services/lipsync_service.py:新增 preview_tts() 同步方法;create_job 支持 audio_url 直传模式(下载→ffprobe→(可选重算timings)→直接提交 MediaKit,job.status=submitted) - routes/lipsync.py:新增 POST /lipsync/jobs/tts-preview 鉴权路由 前端: - types.ts:AiAvatarState 新增 ttsPreview 字段,TtsPreviewStatus 类型 - hooks/useAiAvatar.ts:新增 handlePreviewTts/resetTtsPreview,文案/音色/语速变化自动重置 ttsPreview;handleGenerateLipsync 在预合成完成时把 audio_url/audio_duration/sentence_timings 直传给后端 - api/aiAvatar.ts:新增 previewTts() API 封装,createLipsyncJob 入参加可选音频直传字段 - AiAvatarPage.tsx:步骤1「下一步→」改为「🎵 生成配音」+ 进度 Modal(模拟进度/loading/错误重试);步骤2进入条件改为 ttsPreview.status==='done';B-roll 时间戳优先用 lipsyncJob、降级用 ttsPreview.sentenceTimings 测试: - tests/unit/test_lipsync_tts_preview.py:5个新用例覆盖成功/TTS失败/下载失败降级/零时长/no_audio_url - 全量 lipsync/tts/avatar/preview 相关 1330 用例全部通过,无回归🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1875 已关闭或合并,对应的预览环境已被清理。