UniLLM 视频生成 MCP
用一套统一接口生成视频,屏蔽各家协议差异。本 Skill 背后是一个 MCP Server。
支持 8 家厂商:豆包 Seedance(火山方舟)、通义万相 Wan、智谱 CogVideoX、MiniMax Hailuo、快手可灵 Kling、SiliconFlow,以及海外 Runway 与任意自定义端点。
> <skill-directory> 指本 Skill 所在目录,而非用户项目目录。
> MCP Server 源码位于 <skill-directory>/server/。
🎬 核心:视频要素必须明确
视频生成和图片生成最大的区别:参数错了代价极高。 一次视频生成要等 1~5 分钟、花真金白银,所以本 MCP 把分辨率、屏幕比例、时长当作一等公民显式建模 —— 每个调用的返回里都会明确标注这三项,参数不匹配时会在发起任务前就调整好并告知,绝不静默改参数。
三层视频要素
| 要素 | 参数 | 取值 | 作用 |
|---|---|---|---|
| 分辨率 | resolution |
480p / 720p / 768p / 1080p / 4k |
决定清晰度(像素密度)与费用 |
| 屏幕比例 | ratio |
16:9 / 9:16 / 1:1 / 4:3 / 3:4 / 21:9 / adaptive |
决定画幅形状(横屏/竖屏/方形/超宽) |
| 时长 | duration |
秒(各厂商不同,如 5 / 6 / 10) | 决定成片长度与费用 |
| 帧率 | fps |
30 / 60(仅部分厂商) |
决定流畅度 |
| 像素尺寸 | size |
1280x720 等 |
可替代上面前两项,会自动反推 |
> 关键理解:分辨率与屏幕比例共同决定输出像素尺寸。
> 1080p + 16:9 = 1920x1080,1080p + 9:16 = 1080x1920 —— 都是 1080p,只是画幅方向不同。
> 「短边」决定档位:1920x1080 与 1080x1920 的短边都是 1080。
屏幕比例速查
| 比例 | 含义 | 典型用途 |
|---|---|---|
16:9 |
横屏宽幅 | B站、YouTube、腾讯视频、网页嵌入 |
9:16 |
竖屏 | 抖音、TikTok、快手、小红书、Reels |
1:1 |
方形 | Instagram 信息流、商品卡 |
4:3 |
传统横屏 | 老电视、PPT、纪录片 |
3:4 |
传统竖屏 | 部分社交平台竖版 |
21:9 |
超宽银幕 | 电影感、宽幕沉浸式(仅豆包支持) |
adaptive |
自适应 | 跟随参考图比例(图生视频最省心) |
> 用 video_elements() 可查看完整速查表;video_elements(ratio="9:16") 可查某比例下的全部可用组合。
参数规范化:不会静默改
| 你填的 | 会发生什么 |
|---|---|
size: "1920x1080" |
自动反推 resolution=1080p、ratio=16:9 |
ratio: "21:9" + 可灵 |
可灵不支持 → 自动调整为 16:9,并在返回中明确提示 |
duration: 7 + 智谱 |
智谱只支持 5/10 → 取最接近的 5,并提示 |
ratio: "abc" |
无法识别 → 直接拒绝,列出合法值,不浪费一次生成 |
resolution: "4k" + 万相 |
万相不支持 4k → 降级到最接近档位并提示 |
⏱️ 核心:视频是异步长任务
一次视频生成通常需要 1~5 分钟。本 MCP 提供两种用法:
方式 A:一站式(省事,会阻塞)
video_generate(...) # 提交 + 轮询 + 下载,直到拿到视频文件
适合:单个任务、不在意等待。默认最长等 10 分钟(可调)。
方式 B:两步走(推荐,不阻塞)
video_submit(...) → 立刻拿到 taskId(不等)
video_task_status(taskId=...) → 稍后查询;成功则自动下载
适合:批量提交多个任务;或不想让单次工具调用长时间阻塞。
好处:工具调用超时 ≠ 任务失败 —— 拿到 taskId 就永远能事后查询。
工具一览
| 工具名 | 用途 | 阻塞 |
|---|---|---|
video_generate |
视频生成(T2V / I2V),轮询等待并落盘 | ⏳ 是 |
video_submit |
只提交任务,立即返回 taskId | 否 |
video_task_status |
查询任务状态,成功后自动下载 | 否 |
video_elements |
视频要素速查表(分辨率 × 屏幕比例 → 像素) | — |
video_list_providers |
列出厂商与视频要素能力矩阵 | — |
video_list_models |
列出厂商模型与完整规格 | — |
video_provider_status |
检查密钥配置(返回掩码) | — |
> 工具在 Agent 中的实际名称形如 mcp__plugin_unillm-video_unillm-video__video_generate,调用时用短名即可。
厂商能力矩阵
| provider id | 厂商 | 接口形态 | 分辨率档位 | 屏幕比例 | 时长 | 图生视频 | 音频 | 国内直连 |
|---|---|---|---|---|---|---|---|---|
doubao |
豆包 Seedance | 火山方舟 tasks | 480p/720p/1080p | 16:9 9:16 1:1 4:3 3:4 21:9 | 2~12s | ✅ | ✅ | ✅ |
qwen |
通义万相 Wan | DashScope 异步 | 480p/720p/1080p | 16:9 9:16 1:1 4:3 3:4 | 2~15s | ✅ | ✅ | ✅ |
zhipu |
智谱 CogVideoX | 异步 | 480p/720p/1080p/4k | 16:9 9:16 1:1 4:3 3:4 3:2 17:9 | 5/10s | ✅ | ✅ | ✅ |
minimax |
MiniMax Hailuo | 提交+查询 | 768p/1080p | adaptive(随首帧) | 6/10s | ✅ | — | ✅ |
kling |
快手可灵 | 提交+查询 | 720p/1080p | 16:9 9:16 1:1 | 5/10s | ✅ | — | ✅ |
siliconflow |
SiliconFlow | 提交+查询 | 480p/720p | 16:9 9:16 | 5/10s | ✅ | — | ✅ |
runway |
Runway Gen-4 | 提交+查询 | 720p/1080p | 16:9 9:16 | 5/10s | ✅ | — | ⚠️ 需代理 |
custom |
自定义端点 | 提交+查询 | 480p~1080p | 16:9 9:16 | 5/10s | — | — | ✅ |
屏幕比例表达方式(ratioMode):各厂商不同,本 MCP 已自动处理 ——
ratio-field(独立 ratio 字段:豆包、可灵、Runway)、
size-field(由像素推导:万相、智谱、SiliconFlow)、
from-image(首帧决定:MiniMax)。
分辨率档位说明
| 档位 | 短边 | 含义 |
|---|---|---|
480p |
480 | 标清,最省钱,适合试拍 |
720p |
720 | 高清,性价比高,适合迭代 |
768p |
768 | MiniMax 专有档位 |
1080p |
1080 | 全高清,成片发布标准 |
4k |
2160 | 超高清,仅智谱 CogVideoX 支持(3840x2160) |
When to Use
- 用户要做文生视频 / 图生视频:广告片、短视频、分镜预览、产品演示、动态海报。
- 用户要生成特定规格的视频:竖屏短视频(9:16)、横屏(16:9)、超宽(21:9)、4K。
- 用户需要首尾帧控制:让画面从 A 平滑过渡到 B。
- 用户要批量生成多个视频:用
video_submit并行提交。 - 用户问「支持哪些视频模型」「某厂商支持什么分辨率/比例」「密钥配了没有」。
- 需要把图片 MCP 的产出「动起来」:先用
unillm-image出图,再用本 MCP 当首帧。
When NOT to Use
- 只要静态图片 —— 请用配套的
unillm-image图片 MCP(更快更便宜)。 - 需要视频剪辑 / 转码 / 拼接 —— 本 MCP 只做生成,不做后期处理。
- 需要视频理解 / 摘要 —— 请用
unillm-multimodal多模态 MCP。
参数说明
video_generate / video_submit
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
prompt |
string | ✅ | 视频描述。建议结构:主体 + 运动 + 环境 + 运镜 + 风格 |
provider |
enum | 厂商 id,默认 doubao |
|
model |
string | 模型名,省略则用厂商默认 | |
resolution |
enum | 480p/720p/768p/1080p/4k |
|
ratio |
enum | 屏幕比例:16:9/9:16/1:1/4:3/3:4/21:9/adaptive |
|
size |
string | 具体像素如 1280x720,会反推档位与比例 |
|
duration |
number | 时长(秒),各厂商可选值不同 | |
fps |
number | 帧率 30/60(仅智谱等部分厂商) | |
seed |
number | 随机种子,固定可复现 | |
image |
string | 首帧图片(图生视频)。本地路径 / URL / data URI / base64 | |
lastFrame |
string | 尾帧图片(首尾帧模式,仅部分厂商) | |
withAudio |
boolean | 是否生成音频(豆包、万相、智谱支持) | |
mode |
enum | std(720p)/ pro(1080p)(可灵、Runway) |
|
negativePrompt |
string | 负向提示词 | |
apiKey / baseUrl |
string | 临时密钥 / 覆盖基址 | |
outputDir |
string | 保存目录,默认 unillm-videos |
video_task_status
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
taskId |
string | ✅ | video_submit / video_generate 返回的任务 id |
provider |
enum | ✅ | 必须与提交时一致 |
outputDir |
string | 视频保存目录 |
密钥配置
密钥只从环境变量读取,不会写入任何文件,也不会回显完整值。
export ARK_API_KEY="xxxxxxxx" # 豆包 Seedance / 火山方舟(国内直连)
export DASHSCOPE_API_KEY="sk-xxxxxx" # 通义万相(国内直连)
export ZHIPU_API_KEY="xxxxxxxx" # 智谱 CogVideoX(国内直连)
export MINIMAX_API_KEY="xxxxxxxx" # MiniMax Hailuo(国内直连)
export KLING_API_KEY="xxxxxxxx" # 快手可灵(需 AccessKey+SecretKey 签发的 JWT)
export SILICONFLOW_API_KEY="sk-xxxx" # SiliconFlow(国内直连)
export RUNWAY_API_KEY="key_xxxx" # Runway(需代理)
配置后用 video_provider_status(provider="doubao", liveProbe=true) 真实探测(不生成视频、不产生费用)。
调用示例
1. 竖屏短视频(抖音 / TikTok)
video_generate(
prompt="一只橘猫在月光下的屋顶上伸懒腰,缓慢推进镜头,电影感,暖色调",
provider="doubao",
resolution="1080p",
ratio="9:16", # ← 竖屏
duration=5
)
2. 横屏电影感(超宽银幕)
video_generate(
prompt="雪山日出,镜头缓慢横移,云海翻涌,航拍视角,电影级画质",
provider="doubao",
resolution="1080p",
ratio="21:9", # ← 仅豆包支持超宽
duration=5
)
3. 用像素直接指定
video_generate(
prompt="水墨风格的远山,雾气流动",
provider="qwen",
size="1920x1080", # ← 自动反推 1080p + 16:9
duration=5
)
4. 图生视频(让图片动起来)
# 先用图片 MCP 出一张图
# image_generate(prompt="赛博朋克城市夜景", provider="doubao")
# → 得到 ./unillm-images/doubao-t2i-xxx.png
video_generate(
prompt="镜头缓慢向前推进,霓虹灯闪烁,雨滴落下",
provider="kling",
image="./unillm-images/doubao-t2i-xxx.png", # ← 首帧
ratio="16:9",
duration=5,
mode="pro" # ← 1080p
)
5. 首尾帧控制(A → B 过渡)
video_generate(
prompt="画面从白天平滑过渡到黄昏",
provider="doubao",
image="./frame-a.png", # 首帧
lastFrame="./frame-b.png", # 尾帧
duration=5
)
6. 异步批量提交(不阻塞)
# 并行提交 3 个任务
video_submit(prompt="...", provider="doubao", ratio="9:16", duration=5)
video_submit(prompt="...", provider="qwen", ratio="9:16", duration=5)
video_submit(prompt="...", provider="zhipu", ratio="9:16", duration=5)
# 拿到 3 个 taskId 后,间隔 15~30 秒逐个查询
video_task_status(taskId="...", provider="doubao")
7. 查询视频要素速查表
video_elements() # 全部档位与比例含义
video_elements(ratio="9:16") # 哪些厂商支持竖屏、各是什么尺寸
选型建议
| 场景 | 推荐 |
|---|---|
| 国内首选 / 通用 | doubao/doubao-seedance-1-5-pro-251215 —— 支持 21:9、音频、首尾帧 |
| 竖屏短视频 | 任意厂商 + ratio="9:16" + resolution="1080p" |
| 超宽银幕 | 只有 doubao 支持 21:9 |
| 4K 输出 | 只有 zhipu/cogvideox-3 支持(3840x2160) |
| 长时长(>10s) | qwen/wan2.6-t2v(2~15s)或 doubao(2~12s) |
| 图生视频(比例跟随原图) | minimax(ratio=adaptive 自动跟随首帧) |
| 省钱迭代 | 先 480p + duration=5 试提示词,定稿再切 1080p |
| 带音效 | doubao(generate_audio)或 qwen(audio_url) |
迭代策略:短视频调优的正确姿势是「先低分辨率试运动,再高分辨率定稿」。
运动不对的时候,1080p 只是更贵地展示错误。建议 480p/720p 迭代 → 定稿切 1080p。
错误处理
| 错误码 / 现象 | 含义 | 处理方式 |
|---|---|---|
| 🚫 视频要素校验未通过 | 比例/尺寸写法非法 | 按提示改用合法值,用 video_elements() 查 |
| ⏳ 等待超时 | 任务未在时限内完成 | 任务没失败,用 taskId 查询;或调大 UNILLM_VIDEO_POLL_TIMEOUT_MS |
MISSING_API_KEY |
未配置密钥 | 按提示设置对应环境变量 |
AUTH_FAILED (401) |
密钥无效 | 检查是否有多余空格;可灵需 JWT 而非普通 Key |
INSUFFICIENT_BALANCE (402) |
余额不足 | 充值或换厂商 |
FORBIDDEN (403) |
网络受限/无权 | 用 baseUrl 指向中转网关 |
NOT_FOUND (404) |
模型名或路径有误 | 用 video_list_models 核对 |
RATE_LIMITED (429) |
触发限流 | 已自动退避;降低并发 |
TASK_FAILED |
生成任务失败 | 多因提示词违规/参考图不合规/欠费 |
DOWNLOAD_FAILED |
视频已生成但下载失败 | 返回里含视频直链,可手动访问 |
TIMEOUT |
请求超时 | 调大 UNILLM_VIDEO_TIMEOUT_MS |
注意事项
- 视频贵:一次生成可能数元。用 480p/720p 迭代,别用 1080p 试错。
- 要素必看:返回里的
spec字段明确给出实际使用的分辨率/比例/像素/时长,以它为准。 - 别重复提交:轮询是查同一个 taskId,不要反复调
video_generate(那会重复扣费)。 - 可灵鉴权特殊:需要 AccessKey + SecretKey 签发的短期 JWT,不是普通 API Key。
- 比例由首帧决定的厂商:MiniMax 图生视频时输出比例跟首帧图走,
ratio参数会被忽略(返回中会提示)。 - 4K 仅智谱、21:9 仅豆包 —— 选错了会被自动降级。
- 首尾帧模式:豆包要求
ratio="adaptive",本 MCP 会自动处理。
可配置项
| 环境变量 | 默认 | 说明 |
|---|---|---|
UNILLM_VIDEO_TIMEOUT_MS |
60000 |
单次 HTTP 请求超时(建任务/查询) |
UNILLM_VIDEO_POLL_INTERVAL_MS |
5000 |
轮询间隔 |
UNILLM_VIDEO_POLL_TIMEOUT_MS |
600000 |
轮询总超时(10 分钟) |
UNILLM_VIDEO_DOWNLOAD_TIMEOUT_MS |
300000 |
视频下载超时 |
UNILLM_VIDEO_MAX_RETRIES |
2 |
429/5xx/网络错误重试次数 |
UNILLM_VIDEO_OUTPUT_DIR |
unillm-videos |
视频保存目录 |
安装与自检
cd <skill-directory>/server
npm install && npm run build
node dist/index.js # stdio 启动;正常时 stderr 输出启动日志
若 MCP Server 未被加载,检查:
1. server/dist/index.js 是否已构建;
2. .mcp.json 中 ${CODEBUDDY_PLUGIN_ROOT} 是否被正确展开;
3. 插件是否在 settings.json 的 enabledPlugins 中启用。
> 配套技能:unillm-image(图片生成)、unillm-multimodal(多模态对话)、unillm-text(纯文本对话)。
> 四者共用同一套框架,可独立安装,也可组合使用 —— 例如「图片 MCP 出图 → 视频 MCP 让图动起来」。