摘要
本地部署 AI 漫剧流水线可以摆脱云端平台计费、次数限制、角色画风漂移、素材版权不可控等痛点。本文面向 8G 显存消费级显卡,完整讲解 Wan2.2 系列视频模型本地推理环境搭建、显存分片优化、IPAdapter 角色锁定、分镜批量渲染、FFmpeg 成片混流,配套大量可直接运行的 Python 脚本、命令行指令,适配短剧成片规范,适合红果、番茄短剧漫剧素材量产。本文所有方案均为本地推理优化,不依赖第三方在线生成接口,所有脚本仅用于本地模型推理调度。
前置说明:本文环境基于 Windows + NVIDIA 显卡,CUDA12.1,适配 ComfyUI 工作流;所有显存优化参数针对 8G 显存调优,显存更小的设备需要进一步降低分辨率、缩短帧长。
完整资源教程请看这一篇文章:https://developer.aliyun.com/article/1771007?spm=a2c6h.13148508.setting.19.70f34f0en21ESF
一、环境前置校验脚本(先跑这个,确认显卡、CUDA 状态)
新建 check_gpu_env.py
import torch import platform import subprocess print("==== 系统与CUDA环境检测 ====") print(f"操作系统:{platform.system()} {platform.release()}") print(f"PyTorch版本:{torch.__version__}") print(f"CUDA是否可用:{torch.cuda.is_available()}") if torch.cuda.is_available(): print(f"GPU名称:{torch.cuda.get_device_name(0)}") print(f"GPU总显存:{torch.cuda.get_device_properties(0).total_memory / 1024 / 1024 / 1024:.2f} GB") print(f"当前已占用显存:{torch.cuda.memory_allocated(0) / 1024 / 1024 / 1024:.2f} GB") print(f"显存缓存:{torch.cuda.memory_reserved(0) / 1024 / 1024 / 1024:.2f} GB") # 输出nvidia-smi信息 try: result = subprocess.run(["nvidia-smi"], capture_output=True, text=True, encoding="utf-8") print("\n==== nvidia-smi 输出 ====") print(result.stdout) except Exception as e: print("nvidia-smi调用失败,请确认显卡驱动正常安装", e)
运行指令:
python check_gpu_env.py
如果 CUDA 显示 False,需要重装适配版本的显卡驱动、PyTorch CUDA 版本。
二、依赖安装指令(国内镜像加速)
# 基础依赖 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # Wan2.2额外依赖 pip install accelerate transformers diffusers imageio-ffmpeg safetensors peft pip install bitsandbytes
bitsandbytes 用于模型 Int8 量化,是 8G 显存能够跑通视频模型的核心依赖。
三、显存优化启动参数(关键,8G 显卡必加)
启动 ComfyUI 的 bat 脚本,核心环境变量,新建start_comfy_8g.bat
@echo off set CUDA_VISIBLE_DEVICES=0 # 显存分片优化 set PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:128 # 开启模型CPU卸载,显存不够自动把闲置模型移到内存 set ACCELERATE_CONFIG=auto set DIFFUSERS_CACHE=./model_cache set HF_HUB_ENABLE_HF_TRANSFER=1 python main.py pause
重点参数解释:max_split_size_mb:128:限制 CUDA 显存块大小,避免一次性申请大块显存直接 OOM; 推理时开启模型权重卸载、梯度检查点(gradient checkpoint),牺牲少量推理速度换取显存空间。
四、Wan2.2 量化加载推理脚本(文本生成视频,漫剧单镜头生成)
新建 wan_txt2video_8g.py
import torch from diffusers import WanPipeline from diffusers.utils import export_to_video # 强制释放显存 torch.cuda.empty_cache() # 8G显存配置:int8量化 + cpu_offload pipe = WanPipeline.from_pretrained( "./models/Wan2.2-ReMixV3.0", torch_dtype=torch.bfloat16, variant="fp16", load_in_8bit=True, ) pipe.enable_gradient_checkpointing() pipe.enable_model_cpu_offload() pipe.to("cuda") # 漫剧分镜提示词,适配短剧风格 prompt = "国风漫剧,年轻女生,面部稳定,镜头缓慢平移,柔和光影,清晰五官,同角色画风统一,竖屏9:16,无闪烁,流畅动作" negative_prompt = "画面闪烁,人物五官变形,穿帮,畸形,水印,模糊,画质崩坏,画风突变" video = pipe( prompt=prompt, negative_prompt=negative_prompt, num_frames=24, # 帧数,8G显存建议不要超过32帧 height=720, width=408, num_inference_steps=20, guidance_scale=7.5, ).frames[0] # 导出视频 export_to_video(video, "output_scene.mp4", fps=8) print("镜头生成完成,文件:output_scene.mp4") torch.cuda.empty_cache()
运行:
python wan_txt2video_8g.py
注意:分辨率、帧数拉高极易 OOM,8G 显存优先控制:竖屏 408*720,24 帧以内。
五、IPAdapter 角色特征缓存脚本(解决 AI 漫剧角色漂移,高频痛点)
漫剧最大问题就是多镜头之间人物长相变了,提前提取角色参考图特征,缓存到本地,后续镜头直接加载,不用反复重提取: 新建 save_character_embedding.py
import torch from PIL import Image from diffusers import IPAdapterMixin torch.cuda.empty_cache() # 加载IPAdapter模型 from transformers import CLIPVisionModelWithProjection image_encoder = CLIPVisionModelWithProjection.from_pretrained( "./models/ip-adapter-plus", torch_dtype=torch.bfloat16 ).to("cuda") ref_img = Image.open("./character_ref.jpg").convert("RGB") ref_img = ref_img.resize((512,512)) # 提取角色特征 with torch.no_grad(): img_emb = image_encoder.encode_image(ref_img) torch.save(img_emb, "./char_emb/character_01.pt") print("角色特征向量保存成功,后续镜头直接加载,锁定人物长相")
后续渲染脚本直接加载这个 pt 文件,多个分镜共用同一个角色 embedding,保证角色一致性。
加载调用示例:
char_emb = torch.load("./char_emb/character_01.pt", map_location="cuda")
六、批量分镜渲染脚本(读取剧本分镜 json,自动循环生成漫剧镜头)
新建 batch_scene_render.py
import json import os import torch from wan_txt2video_8g import pipe torch.cuda.empty_cache() # 读取分镜脚本,提前写好每个镜头的提示词 with open("./script/scene_list.json", "r", encoding="utf-8") as f: scene_data = json.load(f) out_dir = "./output_scenes" os.makedirs(out_dir, exist_ok=True) for idx, scene in enumerate(scene_data): prompt = scene["prompt"] neg_prompt = scene["negative"] scene_name = scene["scene_name"] print(f"====开始渲染:{scene_name}====") video = pipe( prompt=prompt, negative_prompt=neg_prompt, num_frames=24, height=720, width=408, num_inference_steps=20, guidance_scale=7.5 ).frames[0] out_path = os.path.join(out_dir, f"{idx}_{scene_name}.mp4") export_to_video(video, out_path, fps=8) print(f"{scene_name} 渲染完成 -> {out_path}") torch.cuda.empty_cache() print("全部分镜渲染完毕")
配套 scene_list.json 示例:
[ { "scene_name":"scene_01开场", "prompt":"国风漫剧男生,安静站在屋檐下,缓慢转头,柔和自然光,竖屏漫剧,五官稳定", "negative":"闪烁,变形,画风错乱" }, { "scene_name":"scene_02对话", "prompt":"同一个男生,微微抬头,轻微手部动作,镜头固定,漫剧画风,角色不变", "negative":"闪烁,变形,画风错乱" } ]
运行批量渲染:
python batch_scene_render.py
七、FFmpeg 指令合集(镜头拼接、压缩、统一参数、字幕混流,短剧成片)
全部在 cmd 直接运行,批量生成红果短剧标准成片,9:16 竖屏,码率规范
7.1 按顺序拼接所有分镜视频
新建 concat_list.txt
file 'output_scenes/0_scene_01开场.mp4' file 'output_scenes/1_scene_02对话.mp4'
拼接指令:
ffmpeg -f concat -safe 0 -i concat_list.txt -c copy raw_all.mp4
7.2 统一视频编码、压缩,适配短剧平台(控制文件大小,画质不崩坏)
ffmpeg -i raw_all.mp4 -c:v libx264 -preset medium -crf 24 -b:v 800k -r 24 -vf "scale=408:720" -c:a aac final_drama.mp4
参数说明:crf 越小画质越高,文件越大;800k 码率适合短视频平台上传。
7.3 批量嵌入 srt 字幕
ffmpeg -i final_drama.mp4 -vf "subtitles:subtitle.srt" -c:a copy drama_with_sub.mp4
7.4 批量统一帧率、消除镜头间速度断层
ffmpeg -i raw_all.mp4 -filter:v fps=24 -c:a copy fixed_fps.mp4
八、显存溢出自动重试脚本(渲染失败自动清理显存、重试,量产必备)
import subprocess import time def run_render_with_retry(max_retry=3): retry = 0 while retry < max_retry: try: result = subprocess.run(["python", "wan_txt2video_8g.py"], timeout=600) if result.returncode == 0: print("渲染成功") return True except Exception as e: print(f"渲染异常,OOM?等待10s重试,重试次数:{retry+1}") subprocess.run(["python", "-c", "import torch;torch.cuda.empty_cache()"]) time.sleep(10) retry += 1 print("多次重试失败,请降低分辨率/帧数") return False if __name__ == "__main__": run_render_with_retry()
九、常见 OOM 报错排查与优化方案
CUDA out of memory
- 优先开启
load_in_8bit、enable_gradient_checkpointing、cpu_offload - 降低分辨率、减少帧数,不要同时加载多个大模型
- 关闭其他占用显卡的软件(直播、剪辑软件)
- 画面持续闪烁
- 增加 IPAdapter 角色特征锁定,提示词固定画风、镜头运动方式
- 推理步数不要过低,建议≥18 步
- FFmpeg 导出音频异常
- 生成视频阶段先生成无声画面,后期单独 TTS 配音混流,减少视频模型负担
十、拓展:本地 TTS 配音混流(和漫剧流水线打通)
# 配音音频audio.wav,和视频合并 ffmpeg -i final_drama.mp4 -i audio.wav -c:v copy -c:a aac -shortest drama_final.mp4
十一、文章收尾
这套流水线完全跑在本地,所有模型、脚本都在本机运行,没有云端次数限制,适合长期批量产出 AI 漫剧素材。整套脚本可以打包进资源包,搭配 ComfyUI 工作流 json 文件、提示词模板一起分发。