SKILL.md 15 KB


name: skill-video

description: 触发词:生成视频、做视频、AI视频、文生视频、图生视频、Veo、Sora。用 Veo 3.1 生成视频,含费用预估与省钱策略(按官方2倍计价)。

skill-video · Veo 3.1 视频生成

一、先看这段(必读)

网关 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)。

  • 上游 base: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(快速)

二、完整调用流程(三步)

第 1 步:提交生成

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"}

第 2 步:轮询(★ 关键,别用 GET)

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 → 完成了,取视频

第 3 步:取视频

{"done":true,"response":{"raiMediaFilteredCount":0,"videos":[{"bytesBase64Encoded":"...","mimeType":"video/mp4"}]}}

base64 解码写 mp4。注意 curl 要设 --max-time 300,视频有 2-3MB,默认超时会截断 JSON。

安全过滤

  • raiMediaFilteredCount > 0 → 有内容被安全策略拦了,看 raiMediaFilteredReasons
  • 视频为空 = 触发了内容审核,不扣费但也没结果

三、参数详解

instances(必填)

参数 类型 说明
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。

parameters(影响费用,重点看)

参数 可选值 默认 对费用影响
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 × 倍率

常用组合预算表(美元,已含 2 倍)

组合 标准版 快速版
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

★ 省钱四原则(技能要主动建议)

  1. 先 fast 试稿,定稿再用标准版 —— 省 75%。提示词没调好前,fast 足够看效果
  2. 时长按需缩短 —— 4s 比 8s 便宜一半。叙事能压到 4s 就压
  3. 一次多备选不如先出 1 条 —— 确认方向对了再加 sampleCount
  4. 1080p 留到最后 —— 720p 定稿再出高清,差 1.8 倍

技能必须做的费用前置动作

任何一次生成前,先报预估费用和替代方案:

本次预估: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 对英文更敏感。中文提示词也能用,但英文出片质量更稳。

6.1 两档用法:动态场景 vs 一场戏

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 秒装不下一场戏

6.2 图生视频能锁住什么

传 --image 后,Veo 会保持参考图的构图、人物外观、光影,只让画面动起来。

传参考图 不传参考图
人物长相稳定、构图可控 AI 自由发挥,容易跑偏
光影风格一致 光效可能突变
适合连续剧集 适合单条素材

做剧集的标准流程:先用图像模型(如 gemini-2.5-flash-image)出关键帧 → 确认画面 → 再用 --image 让关键帧动起来。

6.2.1 图生视频的坑:多人场景会丢人

实测问题:参考图里有两个人(少年坐地上、女孩站门口),但生成的视频里只剩少年一个人——Veo 把第二个人省略了。

原因:只描述画面,没描述"另一个人怎么进入、在做什么"。

正确写法:多人场景必须在时序里分别交代每个人的动作。

0-2s: 门开了,光进来,少年眯眼
2-5s: 女孩跨过门槛走进来,端着碗,停下
5-8s: 女孩递碗,说台词;少年看碗、再看她

这样 Veo 才知道第 2 个人物在第 2 秒才出现、怎么动、和主角什么关系。

铁律:画面里有几个人,时序里就要写几个人的动作。漏一个,AI 就删一个。

6.2.2 台词必须用中文原文

实测教训:给中国角色写英文台词 "Eat it. Then follow me.",出片说英文,全片废掉。

正确写法:台词照原著中文原文,并在提示词里同时标注语言。

Dialogue (in Chinese): Girl: "吃完。跟我走。"

如果 Veo 中文对白生成质量不稳定,有兜底方案:

  • 方案 B:视频不带对白,只留环境音
  • 后期用 TTS 配音 + 字幕烧录
  • 这样可控性更高,适合台词多的剧集

6.2.3 光影氛围要写全,不能只写"no sunlight"

实测教训:只写 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.

每次生成都带这段,省一个字都可能出问题。

6.3 让多个片段能连着看

多段拼成一条片子,观众能看懂,靠这四件事:

  1. 人物一致:所有片段用同一张人物参考图
  2. 动作衔接:上一段结尾的动作 = 下一段开场的状态
  3. 情绪曲线:平静 → 不安 → 恐惧 → 收束,不能全是平的
  4. 时长够:8 秒/段,4 秒只会出"动图"

自检:把 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 只算钱不生成 ---

九、Seedance 2.5(重要,但当前网关未接入)

为什么 Seedance 对漫剧至关重要

它是「连续叙事引擎」,Veo 是「镜头宝石打磨机」。 两者定位完全不同。

能力 Seedance 2.5 Veo 3.1
外部音频作为生成条件 ✅ 原生支持(TTS wav 直接喂进去) ❌ 硬隔离,无接口
中文台词/口型 ✅ 原生优化 ❌ 英文音素空间
单段时长 最长 30s(beta 宣称 180s) 8s
参考输入 数十张图/视频/音频 最多 3 张
片段续接 ✅ 支持 ❌ 每段孤岛
单帧质感 略弱 ✅ 顶级

结论:做中文漫剧,Seedance 是骨架,Veo 是高光。

当前网关实测状态(2026-11-05)

/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。

八、网关支持情况的实测结论(2026-11-05 验证)

网关 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
视频 上游直连(不走计费) 本文档第二节流程