内容提要
本文介绍Story2Video技术实践,利用Amazon Bedrock、ComfyUI和Fish-Speech构建从故事文本到短视频的端到端AIGC流水线。系统通过结构化脚本生成、角色一致性图像编辑、TTS语音合成及后期合成,解决结构不稳定、角色漂移和音画同步问题,并详细说明架构、流程及部署步骤。
延伸解读
结构化中间表示是流水线稳定的关键
Story2Video 将 LLM 输出约束为 StoryScript 和 StoryShot,每个镜头包含 audio_type、speaker、duration 等字段。这种结构化设计让后续模块无需重新解析自然语言,直接按字段分支处理,有效解决了结构不稳定问题。对于构建类似 AIGC 流水线的团队,值得借鉴的是:在生成模型与下游任务之间引入明确的中间数据协议,能显著提升系统可控性和可维护性。
角色一致性依赖图生图链路与参考图
项目通过人物参考图和 Qwen Image Edit workflow,将带人物的镜头路由到图生图链路,纯场景镜头则走文生图,从而在灵活生成画面的同时尽量保留人物一致性。这提示我们,在涉及多镜头叙事的内容生成中,单纯依赖文生图容易导致角色漂移,结合参考图编辑是当前可行的工程化方案,但效果仍受模型能力限制,需在部署前验证。
音画同步依赖后期合成模块的兜底处理
最终合成阶段会统一生成 SRT、合并 TTS 音轨,并对每个分镜时长进行裁剪或补齐,以修正生成模型导致的时长漂移。这说明即使前置生成环节存在不确定性,通过后期合成模块的强制对齐,仍能产出时间轴尽量准确的视频。对于实际部署,建议重视 video_editing 模块的调优,它是保证成片可用的关键。
生产部署需拆分服务并关注资源隔离
文章建议生产环境将 Gradio UI、ComfyUI、Fish-Speech 拆成三个服务,便于分别扩容和问题定位。同时强调输出目录应挂载持久化磁盘,多人场景需加鉴权,耗时任务可引入队列系统。这些实践提示,AIGC 流水线从原型到生产,除了模型效果,还需考虑服务隔离、资源管理和任务调度等工程问题。
Q&A
Story2Video 主要解决什么问题?
Story2Video 旨在将故事文本自动转化为可发布的短视频,解决内容创作中脚本、分镜、配音、口型同步和字幕等环节的链路长、一致性难以维持的问题。
Story2Video 如何保证角色一致性?
通过人物参考图和 Qwen Image Edit workflow,将带人物的镜头路由到图生图链路,纯场景镜头则走 Z-image 文生图,从而在灵活生成画面的同时尽量保留人物一致性。
Story2Video 的架构分为哪几层?
分为五层:交互层(Gradio UI)、编排层(story_to_video_pipeline.py)、数据协议层(story_shot.py)、生成能力层(story_writer.py、comfyui_client.py等)、后期合成层(video_editing.py)。
Story2Video 如何处理音画同步问题?
在最终合成阶段,系统统一生成 SRT 字幕、合并 TTS 音轨,并根据每个分镜的目标时长裁剪或补齐音频,最后拼接视频并替换音轨,从而减少生成模型导致的时长漂移,保证音画同步。
Story2Video 中 TTS 语音生成是如何路由的?
根据 audio_type 字段路由:dialogue 使用角色音色,从 character_voice_map 中查找对应参考音频;narration 使用旁白参考音频;bgm_only 不生成 TTS。
部署 Story2Video 需要哪些主要组件?
需要 Python 环境、AWS Bedrock(用于图像理解和脚本生成)、ComfyUI(用于图像生成和视频生成)、Fish-Speech(用于 TTS),以及 FFmpeg 和中文字体。
Story2Video 如何解决结构不稳定问题?
通过将 LLM 输出约束为结构化 StoryScript 和 StoryShot,每个镜头包含 audio_type、speaker、dialogue_text、narration、visual_prompt、camera_motion、character_id 和 duration 等字段,使后续模块能直接读取结构化字段进行决策。
Story2Video 的最终输出包含哪些文件?
输出目录包含 story_script.json、status.json、subtitles.srt、final_video.mp4,以及 images/、audio/、videos/ 子目录,分别存放分镜图、音频和分镜视频。