AI 漫剧创作的专业工程化实践:从分镜 JSON 到成片合成
AI 漫剧不是“输入一句话生成一部剧”,而是一条工程流水线:选题、剧本、分镜、角色设定、画面生成、动态化、配音、字幕、合成、审核、复盘。专业视角下,核心是**结构化、可复现、可观测、可合规**。 ## 一、专业流程拆解 1. 选题:高频情绪、强冲突、明确受众。 1. 剧本:三幕结构,前 3 秒抓人,每 15 秒一个小转折。 1. 分镜:场景、景别、运镜、动作、对白、时长。 1. 角色卡:外形、服装、配色、比例、禁止项。 1. 视觉生成:文生图、图生视频、动态漫。 1. 音频:TTS、音效、BGM。 1. 合成:ffmpeg 拼接、字幕、转场。 1. 审核:版权、敏感内容、AI 标注。 ## 二、分镜结构化:让 LLM 输出可校验 JSON 自由文本难以编排,建议用 Pydantic 定义模型。 ``` import os, json from openai import OpenAI from pydantic import BaseModel, Field client = OpenAI( api_key=os.getenv("OPENAI_API_KEY"), base_url=os.getenv("OPENAI_BASE_URL"), ) class Shot(BaseModel): shot_id: int scene: str camera: str = Field(description="景别与运镜,如中景推近") action: str dialogue: str = "" duration: float = Field(ge=1, le=8) class Episode(BaseModel): title: str characters: list[str] shots: list[Shot] def generate_episode(theme: str) -> Episode: prompt = f""" 你是漫剧分镜师。根据主题生成 6 个镜头,每镜 3-5 秒。 主题:{theme} 要求:原创角色,无侵权元素,无真实品牌,无违法内容。 只输出 JSON,字段符合 Episode 模型。 """ resp = client.chat.completions.create( model=os.getenv("OPENAI_MODEL", "gpt-4o-mini"), messages=[{"role": "user", "content": prompt}], response_format={"type": "json_object"}, temperature=0.7, ) return Episode.model_validate(json.loads(resp.choices[0].message.content)) ep = generate_episode("原创小猫在雨夜寻找回家的路") print(ep.model_dump_json(indent=2)) ``` 关键点:角色名、场景名、风格词固定;单镜头只写一个动作;时长 3—5 秒,便于图生视频。 ## 三、角色一致性 每个角色建立角色卡: ``` 角色名:小灰 外形:原创灰色小猫,绿色眼睛,红色围巾,二头身 风格:扁平卡通,粗描边,低饱和,贴纸感 禁止:文字、Logo、真实动物照片、复杂背景 ``` 生成时固定 seed、模型、采样器,并使用参考图或 IP-Adapter。角色复杂可训练 LoRA。每次只改表情和动作,不改角色描述。 ## 四、图生视频与合成 将分镜图作为首帧,调用视频生成 API 生成 3—5 秒片段。 ``` def gen_video(image_path: str, motion_prompt: str) -> str: # 实际调用即梦、可灵、Runway 等官方 API # 参数:首帧图、运动描述、时长、比例、种子 return "outputs/shot_01.mp4" ``` 拼接所有片段: ``` # list.txt 内容:file 'outputs/shot_01.mp4' ffmpeg -f concat -safe 0 -i list.txt -c copy rough_cut.mp4 ``` 添加字幕: ``` ffmpeg -i rough_cut.mp4 -vf "subtitles=subtitle.srt" final.mp4 ``` ## 五、工程化与合规 1. 任务队列:每个镜头一个任务,支持重试、超时、取消。 1. 成本控制:低分辨率预览,定稿后高清生成。 1. 可观测:记录 trace_id、模型、耗时、token、视频时长。 1. 审核:敏感词、版权、肖像权、AI 标注。 1. 合规:只使用原创或授权素材;不生成违法、暴力、色情、歧视内容;不冒充真人;不绕过平台审核。 审核函数示例: ``` BAD_WORDS = {"违法", "暴力", "色情"} def audit(text: str) -> bool: if any(w in text for w in BAD_WORDS): raise ValueError("审核未通过") return True ``` ## 六、总结 AI 漫剧的专业流程是:结构化剧本 → 分镜 JSON → 角色卡 → 图生视频 → TTS/字幕 → ffmpeg 合成 → 审核发布。代码可以简单,但数据校验、角色一致性、任务编排和合规审查不能省。先跑通 15 秒短片,再扩展到系列化生产。不要承诺爆款,不要侵权,不要刷量,把内容质量和合规放在第一位。