SKILL.md 11 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.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 只算钱不生成 ---

八、网关支持情况的实测结论(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
视频 上游直连(不走计费) 本文档第二节流程