--- 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 步:提交生成 ```bash 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}}' ``` 返回: ```json {"name":"projects/wv-s-gemini0910/locations/global/publishers/google/models/veo-3.1-generate-001/operations/xxxx"} ``` ### 第 2 步:轮询(★ 关键,别用 GET) ```bash 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 步:取视频 ```json {"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"}` | ### 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 对英文更敏感。结构: ``` [主体] + [动作] + [环境] + [镜头] + [光线] + [风格] ``` 例: ``` A golden retriever running on the beach at sunset, tracking shot, warm golden hour light, cinematic, shallow depth of field, 4k ``` **中文提示词也能用,但英文出片质量更稳。** 技能默认把中文需求翻成英文再提交。 --- ## 七、脚本 `scripts/gen.mjs` —— 一条命令完成 提交→轮询→下载: ```bash 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` | | 视频 | 上游直连(不走计费) | 本文档第二节流程 |