WAN2.2文生视频教程:不用点界面,用Python脚本也能轻松玩转AI视频生成
WAN2.2文生视频教程:不用点界面,用Python脚本也能轻松玩转AI视频生成
1. 从手动点击到自动生成:为什么你需要Python脚本
如果你用过ComfyUI的WAN2.2工作流,一定体验过那种“输入文字、选择风格、点击执行”的便捷。看着AI把一段描述变成几秒钟的视频,确实挺有意思。但当你需要批量制作短视频素材,或者想把视频生成能力嵌入到自己的工具里时,一遍遍手动操作就显得效率低下了。
这时候,Python脚本的价值就体现出来了。想象一下,你写好一段代码,设定好要生成的视频主题和风格,然后泡杯咖啡的功夫,几十个视频素材就自动生成好了。这不仅仅是节省时间,更是把AI能力真正变成了你工作流的一部分。
WAN2.2模型本身对中文提示词的理解就很友好,加上SDXL Prompt Styler节点的风格加持,生成的视频质量相当稳定。而ComfyUI提供的API接口,让我们可以绕过图形界面,直接用代码控制整个生成过程。这篇文章,我就带你一步步实现这个自动化流程,从环境准备到代码编写,再到实际效果验证,保证你跟着做就能跑通。
2. 环境准备:确保一切就绪
2.1 确认ComfyUI服务状态
要让Python脚本能正常工作,首先得确保ComfyUI服务正在运行,并且API功能已经开启。很多人在这里会踩坑——默认情况下,ComfyUI启动后API是关闭的。
最直接的方法,是在启动ComfyUI时加上必要的参数。打开终端,切换到你的ComfyUI目录,然后运行:
python main.py --listen --port 8188 --api --enable-cors-header
这里有几个关键点:
--listen让服务监听所有网络接口--port 8188指定端口号(可以改成其他端口)--api这是最重要的,开启API服务--enable-cors-header允许跨域请求,方便调试
启动成功后,你可以打开浏览器访问 http://127.0.0.1:8188,应该能看到熟悉的ComfyUI界面。更重要的验证是访问 http://127.0.0.1:8188/object_info,如果返回一堆JSON数据,说明API确实已经就绪。
如果你使用的是CSDN星图镜像或者其他预配置的环境,API通常默认就是开启的。但为了保险起见,还是建议用上面的方法验证一下。
2.2 获取工作流JSON结构
这是整个自动化流程中最关键的一步。ComfyUI的API不接受简单的指令,它需要你提供完整的“工作流”定义。你可以把这个工作流理解为一套详细的施工图纸,告诉AI每一步该做什么。
获取这个图纸的方法很简单:
- 在ComfyUI界面中,点击左侧的“Load Workflow”按钮
- 选择
wan2.2_文生视频.json文件(或者你正在使用的其他工作流文件) - 加载成功后,按下
Ctrl+Shift+L(Windows/Linux)或Cmd+Shift+L(Mac) - 这时会弹出一个JSON编辑器,里面就是完整的工作流定义
把这个JSON内容复制下来,保存到一个文本文件里。它看起来可能很长很复杂,但别担心,我们只需要修改其中几个关键的地方。
3. 核心代码:用Python控制视频生成
3.1 完整的Python脚本
下面这个脚本,你保存为 generate_video.py,安装好requests库后就能直接运行。它会生成一段5秒钟、1024×576分辨率的视频。
import json
import requests
import time
import os
# === 配置部分:根据你的需求修改 ===
COMFYUI_URL = "http://127.0.0.1:8188" # ComfyUI服务地址
PROMPT_TEXT = "一只橘猫坐在窗台边,阳光洒在毛上,窗外是春天的樱花树" # 中文提示词
STYLE_NAME = "Cinematic" # 风格选择
VIDEO_WIDTH = 1024 # 视频宽度
VIDEO_HEIGHT = 576 # 视频高度
VIDEO_DURATION = 5 # 视频时长(秒)
# === 工作流模板(这里需要替换成你导出的完整JSON)===
# 注意:下面只是一个简化示例,实际使用时请用你从ComfyUI导出的完整JSON替换
workflow_template = {
"3": {
"class_type": "SDXL Prompt Styler",
"inputs": {
"text": "",
"style": ""
}
},
"5": {
"class_type": "WAN2.2 Sampler",
"inputs": {
"prompt": ["3", 0],
"width": VIDEO_WIDTH,
"height": VIDEO_HEIGHT,
"duration": VIDEO_DURATION,
"seed": -1
}
}
# ... 这里还有很多其他节点,实际JSON会更长
}
def generate_video():
"""生成视频的主函数"""
# 步骤1:准备请求数据
workflow = json.loads(json.dumps(workflow_template))
workflow["3"]["inputs"]["text"] = PROMPT_TEXT
workflow["3"]["inputs"]["style"] = STYLE_NAME
print(f"开始生成视频...")
print(f"提示词:{PROMPT_TEXT}")
print(f"风格:{STYLE_NAME}")
print(f"分辨率:{VIDEO_WIDTH}x{VIDEO_HEIGHT}")
print(f"时长:{VIDEO_DURATION}秒")
# 步骤2:提交生成任务
try:
response = requests.post(
f"{COMFYUI_URL}/prompt",
json={"prompt": workflow},
timeout=30
)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"提交任务失败:{e}")
return None
prompt_id = response.json()["prompt_id"]
print(f"任务已提交,ID:{prompt_id}")
# 步骤3:轮询任务状态
print("正在生成视频,请稍候...")
while True:
try:
history_response = requests.get(
f"{COMFYUI_URL}/history/{prompt_id}",
timeout=10
)
if history_response.status_code == 200:
data = history_response.json()
if prompt_id in data:
status = data[prompt_id].get("status", {}).get("status_str", "unknown")
if status == "success":
print("视频生成完成!")
break
elif status == "error":
print("视频生成失败")
return None
else:
# 显示进度信息
progress = data[prompt_id].get("status", {}).get("progress", 0)
print(f"生成进度:{progress:.1%}", end="\r")
except requests.exceptions.RequestException:
print("查询状态时出错,重试中...")
time.sleep(2) # 每2秒查询一次状态
# 步骤4:获取生成结果
print("\n正在获取视频文件信息...")
# 这里需要根据你的ComfyUI配置调整输出路径
# 通常视频会保存在ComfyUI的output目录下
output_filename = f"video_{prompt_id}.mp4"
print(f"视频文件:{output_filename}")
print("提示:你可以在ComfyUI的输出目录中找到生成的视频文件")
return output_filename
if __name__ == "__main__":
result = generate_video()
if result:
print(f"视频生成成功!文件名:{result}")
else:
print("视频生成失败,请检查错误信息")
3.2 关键参数说明
为了让脚本正常工作,有几个参数需要特别注意:
提示词(PROMPT_TEXT) 这是最重要的输入。WAN2.2对中文的理解相当不错,但写提示词还是有些技巧的。建议采用“主体+动作+环境+风格”的结构。比如:
- 不好的写法:“一个漂亮的风景”
- 好的写法:“黄昏时分,金色的阳光洒在雪山之巅,云海在脚下翻涌,电影感画面”
风格选择(STYLE_NAME) SDXL Prompt Styler提供了多种预设风格,你需要确保这里填写的风格名称和ComfyUI界面中的选项完全一致。常见的有:
Cinematic- 电影感Anime- 动漫风格Realistic- 写实风格Cyberpunk- 赛博朋克Watercolor- 水彩画风格
如果不确定有哪些选项,可以先在ComfyUI界面里看一下下拉菜单。
视频尺寸(VIDEO_WIDTH/VIDEO_HEIGHT) WAN2.2推荐使用16:9或9:16的比例。常见的分辨率有:
- 横屏:1024×576、1280×720
- 竖屏:576×1024、720×1280
使用非标准比例可能会导致画面被裁剪或变形。
视频时长(VIDEO_DURATION) 目前WAN2.2只支持3秒、5秒、8秒这三个选项。如果你填了其他数值,比如10秒,系统会自动调整为最接近的可用值。
4. 进阶使用技巧
4.1 控制生成结果的随机性
每次运行脚本生成视频时,AI都会使用一个随机数作为“种子”(seed)。这意味着即使提示词和参数完全一样,两次生成的结果也可能不同。这在创意探索时是好事,但当你找到满意的效果想要复现时,就需要固定种子。
在脚本中找到这一行:
"seed": -1
把 -1 改成具体的数字,比如:
"seed": 123456
这样,只要其他参数不变,每次生成的视频都会是一样的。你可以先用随机种子(-1)尝试不同的效果,找到满意的之后,记下当时的种子值,用于后续的批量生成。
4.2 批量生成多个视频
如果你需要制作一系列主题相关的视频,手动一个个生成太麻烦了。用Python脚本,可以轻松实现批量生成:
# 定义多个提示词
video_prompts = [
{
"text": "清晨的森林,阳光透过树叶洒下斑驳光影,小鹿在溪边喝水",
"style": "Cinematic",
"duration": 5
},
{
"text": "未来都市夜景,霓虹灯闪烁,飞行汽车在空中穿梭",
"style": "Cyberpunk",
"duration": 3
},
{
"text": "水墨画风格,孤舟蓑笠翁,独钓寒江雪",
"style": "Watercolor",
"duration": 8
}
]
# 批量生成
for i, config in enumerate(video_prompts, 1):
print(f"\n正在生成第 {i}/{len(video_prompts)} 个视频...")
# 更新工作流参数
workflow["3"]["inputs"]["text"] = config["text"]
workflow["3"]["inputs"]["style"] = config["style"]
workflow["5"]["inputs"]["duration"] = config["duration"]
# 提交生成任务
response = requests.post(f"{COMFYUI_URL}/prompt", json={"prompt": workflow})
if response.status_code == 200:
prompt_id = response.json()["prompt_id"]
print(f" 提示词:{config['text'][:30]}...")
print(f" 任务ID:{prompt_id}")
# 等待当前视频生成完成
wait_for_completion(prompt_id)
# 适当间隔,避免请求过密
time.sleep(2)
else:
print(f" 生成失败:{response.text}")
4.3 常见问题与解决方法
在实际使用中,你可能会遇到一些问题。这里列出几个常见的:
问题1:连接被拒绝
- 表现:脚本报错
Connection refused或ConnectionError - 原因:ComfyUI服务没有启动,或者端口号不对
- 解决:检查ComfyUI是否在运行,确认脚本中的
COMFYUI_URL地址和端口是否正确
问题2:工作流验证错误
- 表现:API返回
Workflow validation error - 原因:JSON格式有问题,或者节点ID不正确
- 解决:用在线JSON验证工具检查你的工作流JSON,确保格式正确
问题3:生成过程卡住
- 表现:状态一直显示
executing,长时间没有进展 - 原因:可能是显存不足,或者模型文件损坏
- 解决:检查显卡显存(WAN2.2需要至少12GB),尝试重启ComfyUI服务
问题4:视频只有一帧或黑屏
- 表现:生成了视频文件,但播放时只有一帧画面或全黑
- 原因:视频时长参数设置错误,或者分辨率不支持
- 解决:确认
VIDEO_DURATION是3、5、8中的一个,检查分辨率比例
问题5:中文提示词效果不好
- 表现:生成的视频和中文描述不符
- 原因:可能使用了不支持中文的模型版本
- 解决:确保你使用的是带中文CLIP编码器的WAN2.2模型
5. 不同风格的实际效果对比
为了让你更直观地了解不同风格的效果差异,我用同一句提示词测试了四种风格。提示词是:“古风庭院,石桥流水,一位穿汉服的女子撑伞走过”。
| 风格 | 画面特点 | 运动效果 | 中文理解 | 适合场景 |
|---|---|---|---|---|
| Cinematic | 电影感强,光影层次丰富,有景深效果 | 人物行走自然,衣袖飘动有物理感 | 准确识别“汉服”、“石桥”、“撑伞”等元素 | 宣传片、剧情短片 |
| Anime | 动漫风格,线条清晰,色彩明快 | 动作稍快,略带夸张效果 | 基本准确,偶尔会把“汉服”识别为“和服” | 二次元内容、动画 |
| Realistic | 照片级真实,纹理细节丰富 | 动作偏慢,强调静态构图 | 对“古风”、“庭院”理解到位 | 文旅宣传、实景还原 |
| Cyberpunk | 赛博朋克色调,加入霓虹元素 | 有镜头扫视和粒子特效 | 较低,会添加“机械义肢”等无关元素 | 创意实验、风格化内容 |
从测试结果看,Cinematic 风格的综合表现最好,既保持了画面美感,又准确理解了中文提示。Realistic 风格在细节还原上最出色,但运动相对保守。Anime 风格适合特定受众,而 Cyberpunk 风格虽然酷炫,但容易偏离原意。
选择风格时,关键不是哪个“最好看”,而是哪个“最适合你的内容”。做文旅宣传就用Realistic,做剧情短片就用Cinematic,做二次元内容就用Anime。
6. 总结:把AI视频生成变成你的生产力工具
通过Python脚本调用ComfyUI API,你实现了从“手动操作”到“自动生成”的跨越。这不仅仅是节省了几次点击的时间,更是把AI视频生成能力真正集成到了你的工作流中。
回顾一下关键步骤:
- 准备环境:确保ComfyUI服务运行且API开启
- 获取工作流:从界面导出完整的JSON定义
- 编写脚本:用Python控制提示词、风格、参数
- 处理结果:轮询状态,获取生成的文件
现在你可以在此基础上做更多事情:
- 封装成命令行工具,方便团队使用
- 集成到Web应用中,提供在线视频生成服务
- 结合其他AI工具,打造完整的内容生产流水线
- 定时批量生成,用于社交媒体内容更新
技术的价值,不在于它有多复杂,而在于它能让多少人更高效地完成工作。WAN2.2降低了视频生成的门槛,而Python脚本让这个能力变得可编程、可扩展。接下来要做的,就是发挥你的创意,把这些工具用在实际的项目中了。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐



所有评论(0)