前言
当前 AI 漫剧动态视频生产,主流分为两种路线:图片序列帧动画、文生视频连续镜头。漫剧(条漫 / 分镜漫画)的核心痛点是:静态漫画图缺少动态、人物容易闪脸、镜头切换生硬、批量导出效率低。本文给出一套可直接部署的自动化流水线,使用 Python 作为调度脚本,对接 ComfyUI 工作流与万相 Animate 模型,实现批量读取漫画分镜图→生成动态漫镜头→自动拼接成片。
适用场景:漫剧短视频、AI 短剧漫化、条漫动态化;硬件最低要求:显存 12G 以上,推荐 RTX 4090/RTX A6000。
整体架构
- 输入目录:存放漫画分镜 PNG(每一张为一个镜头)
- Python 调度层:遍历图片、构造 API 请求、调用 ComfyUI 接口、保存输出视频
- ComfyUI 后端:加载万相 Animate/AnimateDiff 模型,执行图片驱动动画
- 后处理:ffmpeg 合并片段、统一帧率、加字幕轨道
- 输出:分段漫剧短片 + 完整成片
环境前置安装
# 基础依赖 pip install requests pillow tqdm # 视频编码依赖,Windows推荐下载ffmpeg并配置环境变量 # Linux: sudo apt install ffmpeg
完整资源教程:https://pan.quark.cn/s/25a4e2a2fd15
一、Python 核心调度代码(调用 ComfyUI API 批量生成漫剧动态视频)
使用说明:先在 ComfyUI 中搭建好漫剧图生视频工作流,保存为
manhua_workflow.json,工作流输入节点 ID 固定为10(图片输入),输出视频节点 ID 为30。
import requests import json import os from PIL import Image from tqdm import tqdm # ===================== 配置区,自行修改参数 ===================== COMFYUI_SERVER = "http://127.0.0.1:8188" # ComfyUI本地服务地址 WORKFLOW_PATH = "./manhua_workflow.json" # 漫剧工作流JSON INPUT_IMG_DIR = "./comic_frames/" # 漫画分镜图片文件夹 OUTPUT_VIDEO_DIR = "./manhua_output/" # 生成视频保存目录 FPS = 8 # 漫剧推荐帧率,不要太高避免闪烁 DURATION = 2.5 # 单镜头视频时长(秒) # ============================================================== os.makedirs(INPUT_IMG_DIR, exist_ok=True) os.makedirs(OUTPUT_VIDEO_DIR, exist_ok=True) # 加载ComfyUI工作流 with open(WORKFLOW_PATH, "r", encoding="utf-8") as f: workflow = json.load(f) # 获取ComfyUI上传文件接口 def upload_image(image_path): url = f"{COMFYUI_SERVER}/upload/image" with open(image_path, "rb") as f: res = requests.post(url, files={"image": f}) return res.json()["name"] # 提交任务到ComfyUI def queue_prompt(prompt): res = requests.post(f"{COMFYUI_SERVER}/prompt", json={"prompt": prompt}) return res.json()["prompt_id"] # 查询任务状态 def get_history(prompt_id): url = f"{COMFYUI_SERVER}/history/{prompt_id}" return requests.get(url).json() # 遍历漫画图片批量生成 img_list = [f for f in os.listdir(INPUT_IMG_DIR) if f.endswith((".png",".jpg"))] img_list.sort() for img_name in tqdm(img_list, desc="漫剧镜头生成"): img_full_path = os.path.join(INPUT_IMG_DIR, img_name) uploaded_name = upload_image(img_full_path) # 覆盖工作流图片输入节点 workflow["10"]["image"] = uploaded_name workflow["10"]["upload"] = "image" workflow["20"]["fps"] = FPS workflow["20"]["duration"] = DURATION prompt_id = queue_prompt(workflow) print(f"任务提交: {img_name} | prompt_id: {prompt_id}") # 轮询等待任务完成 while True: history_data = get_history(prompt_id) if prompt_id in history_data: outputs = history_data[prompt_id]["outputs"] video_info = outputs["30"]["videos"][0] video_filename = video_info["filename"] src_video_path = os.path.join( "C:/ComfyUI/output/", video_filename ) dst_video_path = os.path.join(OUTPUT_VIDEO_DIR, f"{img_name.split('.')[0]}.mp4") # 复制视频到输出目录 import shutil shutil.copy(src_video_path, dst_video_path) print(f"✅ {img_name} 动态漫镜头生成完成 -> {dst_video_path}") break # 全部镜头生成完成,调用ffmpeg拼接所有短视频片段 def concat_videos(input_video_folder, out_file): list_txt = os.path.join(input_video_folder, "list.txt") with open(list_txt, "w", encoding="utf-8") as f: for v in sorted(os.listdir(input_video_folder)): if v.endswith(".mp4") and not v == out_file: f.write(f"file '{v}'\n") cmd = f'ffmpeg -y -f concat -safe 0 -i "{list_txt}" -c copy "{out_file}"' os.system(cmd) concat_videos(OUTPUT_VIDEO_DIR, os.path.join(OUTPUT_VIDEO_DIR, "full_manhua_video.mp4")) print("🎉 全部漫剧视频拼接完成!")
二、ComfyUI 漫剧工作流核心配置(万相 Animate 图生漫)
工作流节点清单(对应代码 ID):
- 节点 10:Load Image(图片输入,接收漫画分镜)
- 节点 20:万相 Animate 图生视频模型加载器
- 模型:Wan2.2-ReMixV3 / 万相 Animate
- 采样器:Euler A
- 采样步数:20~28 步(漫剧 20 足够,速度更快)
- CFG Scale:1.5~2.5(数值太高画面容易变形,漫剧建议偏低)
- 运动幅度:0.35~0.65,不要大于 0.7,否则漫画人物五官崩坏闪烁
- 节点 30:Video Combine(视频编码输出 mp4)
关键优化要点: 漫剧条漫最大坑:人物面部闪烁。解决办法:开启参考图固定特征,
motion_bucket_id=120,降低运动幅度;不要使用过高帧数,8fps 是漫剧的黄金平衡点。
三、FFmpeg 视频后处理增强脚本(加字幕 + 调色)
保存为post_process.py,在视频生成完成后执行:
import os # 给成片增加字幕轨道、亮度微调,适合短视频平台 input_video = "./manhua_output/full_manhua_video.mp4" output_final = "./manhua_output/final_manhua_with_sub.mp4" subtitle_file = "./subtitle.srt" ffmpeg_cmd = ( f'ffmpeg -y -i "{input_video}" ' f'-vf "subtitles={subtitle_file},eq=brightness=0.05:contrast=1.05" ' f'-c:a copy "{output_final}"' ) os.system(ffmpeg_cmd) print("✅ 字幕+调色完成,最终成品已导出")
字幕文件示例 subtitle.srt:
1 00:00:01,000 --> 00:00:03,000 她攥紧拳头,强压下心底的委屈。 2 00:00:03,500 --> 00:00:06,000 婆家的刁难,从来没有停止过。
四、常见故障排错(漫剧 AI 视频高频问题)
- 人物持续闪烁、五官变形
- 原因:motion 幅度太高,CFG 过高,缺少参考图锁定
- 修复:motion 降到 0.4 以内,CFG=2,开启 ip-adapter 锁定漫画人物特征
- ComfyUI API 提交失败
- 确认 ComfyUI 启动时开启 API,启动命令:
python main.py --enable-cors-header
- 显存溢出 OOM
- 降低输出分辨率,漫剧短视频推荐 720×1280(竖屏短剧尺寸);开启模型 CPU 卸载,分块编码视频
- ffmpeg 拼接音频错乱
- 单镜头生成时统一音频参数,全部镜头采样率 44100,双声道
五、批量生产流水线操作步骤
- 把你的漫画分镜图片按顺序命名:
001.png,002.png,003.png放入comic_frames文件夹 - 在 ComfyUI 导入
manhua_workflow.json,加载万相 Animate 模型,测试单张图片能正常出视频 - 修改代码配置区路径,运行 python 脚本,自动循环生成每一个镜头
- 脚本自动调用 ffmpeg 拼接全部镜头
- 运行 post_process.py 添加字幕、微调画面,输出最终可直接发布的漫剧短视频