name: skill-video
网关 api.fmode.cn/v1/video/generations 目前不可用。
new-api 的 Google Veo 插件(plugins/tasks/google/plugin.js 第 44 行)用 GET 查任务,而 Google 要求 POST :fetchPredictOperation,所以永远返回 upstream task not found (HTTP 404)。
本技能绕过网关,直连上游 closeai。 通道已验证可出片(H.264 / 1280×720 / 8s)。
https://api.openai-proxy.org/google/opt/data/.fmode/secrets/closeai.key(渠道 3 的 key,勿外传)veo-3.1-generate-001(标准)、veo-3.1-fast-generate-001(快速)KEY=$(cat /opt/data/.fmode/secrets/closeai.key)
curl -s -X POST "https://api.openai-proxy.org/google/v1beta/models/veo-3.1-generate-001:predictLongRunning" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"instances":[{"prompt":"你的提示词"}],"parameters":{"aspectRatio":"16:9","durationSeconds":8}}'
返回:
{"name":"projects/wv-s-gemini0910/locations/global/publishers/google/models/veo-3.1-generate-001/operations/xxxx"}
OP="刚才返回的完整 name"
curl -s -X POST "https://api.openai-proxy.org/google/v1beta/models/veo-3.1-generate-001:fetchPredictOperation" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d "{\"operationName\":\"$OP\"}"
必须是 POST + :fetchPredictOperation。 GET 查会 404。
判断:
"done": false 或字段不存在 → 继续等(间隔 15-20 秒)"done": true → 完成了,取视频{"done":true,"response":{"raiMediaFilteredCount":0,"videos":[{"bytesBase64Encoded":"...","mimeType":"video/mp4"}]}}
base64 解码写 mp4。注意 curl 要设 --max-time 300,视频有 2-3MB,默认超时会截断 JSON。
raiMediaFilteredCount > 0 → 有内容被安全策略拦了,看 raiMediaFilteredReasons| 参数 | 类型 | 说明 |
|---|---|---|
prompt |
string | 文本提示词,英文效果更稳 |
image |
object | 图生视频:{"bytesBase64Encoded":"...","mimeType":"image/png"} |
命令行图生视频:
# 用关键帧生成视频(锁定构图与人物)
node scripts/gen.mjs \
--prompt "..." \
--image /path/to/keyframe.png \
--model standard --duration 8 \
--out /path/to/clip.mp4
--image 支持 .png / .jpg,脚本会自动 base64 编码并识别 MIME。
| 参数 | 可选值 | 默认 | 对费用影响 |
|---|---|---|---|
aspectRatio |
16:9 / 9:16 |
16:9 | 不影响 |
durationSeconds |
4 / 6 / 8 | 8 | ★ 核心变量,按秒计费 |
resolution |
720p / 1080p |
720p | 1080p 更贵 |
sampleCount |
1-4 | 1 | ★ 成倍增加费用 |
generateAudio |
true/false | — | 可能额外计费 |
negativePrompt |
string | — | 不影响 |
personGeneration |
allow_adult / dont_allow |
— | 含人物时注意合规 |
| 模型 | 官方基础价 | 我方倍率 | 实际扣费 |
|---|---|---|---|
| veo-3.1-generate-001 | $1.38 / 次(8s, 720p) | 2.0× | $2.76 |
| veo-3.1-fast-generate-001 | $0.35 / 次(8s, 720p) | 2.0× | $0.70 |
倍率说明:new-api 渠道当前
group_ratio=2.5,用户要求按 官方 2 倍 计。技能按 2.0 报预算,实际扣费以网关为准。
单条费用 ≈ 基础价 × (durationSeconds / 8) × (1080p ? 1.8 : 1.0) × sampleCount × 倍率
| 组合 | 标准版 | 快速版 |
|---|---|---|
| 8s · 720p · 1条 | $2.76 | $0.70 |
| 8s · 720p · 4条 | $11.04 | $2.80 |
| 4s · 720p · 1条 | $1.38 | $0.35 |
| 8s · 1080p · 1条 | $4.97 | $1.26 |
| 6s · 720p · 1条 | $2.07 | $0.53 |
sampleCount任何一次生成前,先报预估费用和替代方案:
本次预估:8s · 720p · 标准版 · 1条 = $2.76(约 ¥20)
省钱替代:先用 fast 试稿 $0.70,确认后再用标准版 = 合计 $3.46(比直接出 2 条标准版省 37%)
是否继续?
| 报错 | 原因 | 解决 |
|---|---|---|
upstream task not found (HTTP 404) |
用 GET 查了 | 改 POST :fetchPredictOperation |
Invalid task protocol request |
走了网关 /v1/videos |
直连上游,用 /v1beta/models/{m}:predictLongRunning |
json.decoder.JSONDecodeError |
curl 超时截断 | --max-time 300 |
raiMediaFilteredCount > 0 |
触发安全审核 | 改提示词,避开人物/暴力/违禁 |
| 401 | key 不对 | 重取 /opt/data/.fmode/secrets/closeai.key |
Veo 对英文更敏感。中文提示词也能用,但英文出片质量更稳。
A 档|动态场景(一条素材、一个动作)
[主体] + [动作] + [环境] + [镜头] + [光线] + [风格]
A golden retriever running on the beach at sunset, tracking shot,
warm golden hour light, cinematic, shallow depth of field
适用:产品展示、氛围空镜、单动作素材。
B 档|一场戏(有情节、有人物关系、能连着看)★ 做剧集必须用这档
只写"一个人在做一件事",出片就是一张会动的画。要让人看懂发生了什么事,必须写全时序和对白。
【场景】具体空间 + 光线条件 + 氛围
【开场状态】第一个瞬间画面是什么样
【人物】外观 + 姿态 + 在做什么(多人分别写)
【动作时序】按秒拆:
0-2s: ...
2-5s: ...
5-8s: ...
【对白】"说话人:台词"(Veo 3.1 会生成原生音频和口型)
【运镜】起始机位 → 结束机位
【光线】No sunlight, no cast shadows, flat diffused light
【风格】Cinematic 3D realistic style
实例:
A dark stone hut interior at night, the only light is a thin cold
phosphorescent glow seeping through a crack in the wall.
0-2s: Camera tilts down slowly from the glowing crack to the stone
floor, revealing a gaunt young man lying on his side, eyes open.
2-5s: His pupils slowly focus. His fingers twitch against the gravel.
He pushes himself up slowly, body weak.
5-8s: He sits up, head turning toward the wooden door on the left.
Outside, a low rumbling sound vibrates through the stone floor.
Dialogue: (none, only breathing)
Camera: tilt down from ceiling to floor level, ending in medium shot.
No sunlight. No cast shadows. Flat diffused cold grey light.
Cinematic 3D realistic style, shallow depth of field.
B 档的六个关键点:
| 要点 | 说明 |
|---|---|
| 动作分秒写 | 0-2s / 2-5s / 5-8s,Veo 才能排出节奏 |
| 写对白 | 用 说话人:"台词",Veo 生成原生语音 + 口型 |
| 写反应 | 一方说完,另一方给什么反应,这才是"戏" |
| 运镜写起止 | "从天花板下摇到地面",不是只写"推镜" |
| 多人分别写 | 每个人的位置、姿态、动作都要描述 |
| 时长用 8 秒 | 4 秒装不下一场戏 |
传 --image 后,Veo 会保持参考图的构图、人物外观、光影,只让画面动起来。
| 传参考图 | 不传参考图 |
|---|---|
| 人物长相稳定、构图可控 | AI 自由发挥,容易跑偏 |
| 光影风格一致 | 光效可能突变 |
| 适合连续剧集 | 适合单条素材 |
做剧集的标准流程:先用图像模型(如 gemini-2.5-flash-image)出关键帧 → 确认画面 → 再用 --image 让关键帧动起来。
实测问题:参考图里有两个人(少年坐地上、女孩站门口),但生成的视频里只剩少年一个人——Veo 把第二个人省略了。
原因:只描述画面,没描述"另一个人怎么进入、在做什么"。
正确写法:多人场景必须在时序里分别交代每个人的动作。
0-2s: 门开了,光进来,少年眯眼
2-5s: 女孩跨过门槛走进来,端着碗,停下
5-8s: 女孩递碗,说台词;少年看碗、再看她
这样 Veo 才知道第 2 个人物在第 2 秒才出现、怎么动、和主角什么关系。
铁律:画面里有几个人,时序里就要写几个人的动作。漏一个,AI 就删一个。
实测教训:给中国角色写英文台词 "Eat it. Then follow me.",出片说英文,全片废掉。
正确写法:台词照原著中文原文,并在提示词里同时标注语言。
Dialogue (in Chinese): Girl: "吃完。跟我走。"
如果 Veo 中文对白生成质量不稳定,有兜底方案:
实测教训:只写 no sunlight 出来的画面依然明亮干净,不恐怖。
恐怖氛围要写四个维度:
| 维度 | 提示词 |
|---|---|
| 亮度 | extremely dark, underexposed, barely visible |
| 方向 | flat diffused light from ALL directions, no directional light |
| 质感 | damp, cold, clammy, oppressive, claustrophobic, heavy air |
| 色彩 | highly desaturated: cold grey, ash blue, muddy brown, NO warm tones |
| 禁止 | No cast shadows anywhere — not from buildings, not from people |
合起来写死的段落:
Extremely dark and underexposed. No sunlight. No moonlight. No cast shadows
anywhere — not from buildings, not from people. Flat diffused grey-blue
ambient light from all directions with no directional source. Everything is
damp and cold. Heavy, oppressive, claustrophobic atmosphere. Faint grey mist
drifting. Highly desaturated palette: cold grey, ash blue, muddy brown.
No warm tones. Cinematic 3D realistic style.
每次生成都带这段,省一个字都可能出问题。
多段拼成一条片子,观众能看懂,靠这四件事:
自检:把 N 段拼起来放一遍,观众能说出"发生了什么事"才算成立;只能说"看了几张画"就是失败。
scripts/gen.mjs —— 一条命令完成 提交→轮询→下载:
node scripts/gen.mjs --prompt "..." --duration 8 --ratio 16:9 --model fast --out /path/to.mp4
参数:
--prompt 必填--duration 4/6/8(默认 8)--ratio 16:9 / 9:16--model standard / fast(默认 fast,省钱)--resolution 720p / 1080p--count 1-4(默认 1)--estimate-only 只算钱不生成
---它是「连续叙事引擎」,Veo 是「镜头宝石打磨机」。 两者定位完全不同。
| 能力 | Seedance 2.5 | Veo 3.1 |
|---|---|---|
| 外部音频作为生成条件 | ✅ 原生支持(TTS wav 直接喂进去) | ❌ 硬隔离,无接口 |
| 中文台词/口型 | ✅ 原生优化 | ❌ 英文音素空间 |
| 单段时长 | 最长 30s(beta 宣称 180s) | 8s |
| 参考输入 | 数十张图/视频/音频 | 最多 3 张 |
| 片段续接 | ✅ 支持 | ❌ 每段孤岛 |
| 单帧质感 | 略弱 | ✅ 顶级 |
结论:做中文漫剧,Seedance 是骨架,Veo 是高光。
/v1/models 全量 48 个模型 —— 无 seedance
new-api channels 全表 —— 视频渠道仅 1 个(Gemini-CloseAI,type=24)
试过模型名全部 503:
seedance-2.5 / doubao-seedance-2-5-pro / doubao-seedance-2-5
seedance2.0 / seedance-pro / doubao-seedance-1-0-pro / doubao-seedance-1-0-lite
结论:网关当前未接入 Seedance。 要用必须先加渠道。
POST /v1/video/generations
{
"model": "seedance-2.5",
"prompt": "人物口型严格跟随上传音频,不生成额外语音,只生成环境音效;
面部微表情、眨眼、视线、手势、重心起伏跟随音频韵律与台词情绪;
保持参考角色面部、体型不变;写实 PBR 3D 漫剧渲染",
"image": "<keyframe base64>",
"audio": "<tts wav base64>", ← 关键:音频作为生成条件
"duration": 8,
"resolution": "720p"
}
| 模型 | 中文口型 | 长处 | 接入成本 |
|---|---|---|---|
| Seedance 2.5(Dreamina/即梦) | ✅ | 叙事骨架、音频条件 | 需加渠道 |
| Kling 3.0 Omni | ✅✅ 最成熟 | 特写对话、物理稳定、4K | 需加渠道 |
| 万相 2.5 | ✅ | 阿里生态 | 需加渠道 |
| MiniMax Hailuo 02 | ✅ | 动作流畅 | 需加渠道 |
这些都需在 new-api 加渠道后才能用。当前只有 Veo。
网关 api.fmode.cn 的视频模型只有 2 个,且当前都不可用:
| 模型 | 状态 |
|---|---|
veo-3.1-generate-001 |
❌ 任务查询 404(插件 bug) |
veo-3.1-fast-generate-001 |
❌ 同上 |
以下模型网关均未接入(全部返回 503,不是名字写错,是通道不存在):
jimeng-3.0 / jimeng-video / seedance-1.0 / seedance-pro /
doubao-seedance-1-0-pro / doubao-seedance-1-0-lite /
kling-v2 / minimax-hailuo-02 / wan-2.5
有人会说「即梦的 Seedance」,注意区分: Seedream(doubao-seedream-4-0)是图像模型,网关支持且正常(走
/v1/images/generations)。 Seedance 是视频模型,网关没有。
结论:视频生成只能用 Veo 3.1,且必须直连上游 closeai,不能走网关。
如果任务需要「图片 + 视频」混合:
| 类型 | 走哪里 | 端点 |
|---|---|---|
| 图像 | 网关(走计费) | POST https://api.fmode.cn/v1/images/generations,模型 doubao-seedream-4-0-250828 |
| 视频 | 上游直连(不走计费) | 本文档第二节流程 |