Files
ttstd-infinite-canvas/docs/content/docs/backend/video-token-billing.mdx

66 lines
6.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 视频 Token 计费
description: 所有视频模型共用火山式公式定价、预留与用量结算
---
# 视频 Token 计费
所有系统视频模型均支持 `billingMode: "token"`,不设协议白名单,包括 `newapi-channel-2`、Ark、Agent Plan 和自定义视频协议。当前统一采用火山式像素帧公式:有有效上游用量时优先采用上游数值;没有有效用量时按提交时保存的公式 Token 数结算。图片和音频仍不开放 Token 定价。
## 管理员配置
视频 Token 单价单位是「积分 / 百万视频 Token」,保存为每百万 Token 的微积分价格。输入价与缓存价必须为 0,输出价允许为 0(明确免费),最大为 1,000,000 积分。平台不自动导入人民币报价,也不自动调整已有模型价格。
同一模型可以按生成方式、分辨率、时长、参考图数量、是否生成音频配置价格档。`selector.videoGenerateAudio` 为字符串 `"true"` 或 `"false"`;不限音频时省略该条件。参考视频使用已有 `operation: "video_to_video"`,不另加参考视频布尔字段。显式关闭音频的 `false` 参与匹配,不能当作未填写。
前台逻辑模型沿用渠道价时使用实际命中的规格价格;统一定价时使用逻辑模型的费率。报价和任务预留均按所选线路的上游模型 ID 识别 Seedance 代际,内部展示别名不改变像素表。
## 提交前估算与预留
参考[火山引擎模型价格](https://www.volcengine.com/docs/82379/1544106)与[视频生成说明](https://www.volcengine.com/docs/82379/2298881),平台统一按 24 FPS 为所有视频模型估算:
```text
公式 Token = ceil((参考视频总秒数 + 输出视频秒数) × 输出宽 × 输出高 × 24 ÷ 1024)
预留 Token = ceil(公式 Token × 1.10)
预留微积分 = ceil(预留 Token × 每百万 Token 微积分单价 × 平台倍率 ÷ 1,000,000)
```
10% 是平台预留策略,不属于火山引擎公式,也不保证覆盖最终费用。Seedance 2.x 参考视频有与清晰度、画幅及生成时长相关的最低消耗,供应商没有统一的闭式估算公式;实际费用可能超过预留。
像素表按模型代际区分,不将「720p」直接当成固定面积,也不因为模型名含 `fast` 就强制降为 720p。例如:
| 模型与规格 | 预估输出像素 |
| --- | --- |
| Seedance 1.0,720p,16:9 | 1248 × 704 |
| Seedance 1.5 / 2.0,720p,16:9 | 1280 × 720 |
| Seedance 2.5,480p,16:9 | 854 × 480 |
| Seedance 2.0,4K,4:3 | 3326 × 2494 |
完整表在 `backend/internal/app/video_token_billing.go`。自适应画幅使用该清晰度下最大的已知面积;上游型号无法识别代际时使用请求画幅下已知代际的最大面积,并标注尺寸为估算值。`size` 为明确的 `宽x高` 时直接使用像素;其他正数分辨率按短边和画幅推导,长边向上对齐偶数,2K 按 1440p、4K 按 2160p。缺少尺寸配置时平台计价约定为 720p、16:9,并标记尺寸估算;通用分辨率的自适应画幅按 16:9 推导。这些是平台计价规则,不保证上游输出相同像素。无效时长、非法尺寸和溢出仍拒绝,实际可生成规格仍由模型能力校验。
参考视频数量和时长限制由所选模型能力校验,通用计费公式不再强制套用 Ark 的 3 个、15 秒限制。任务包含时长元数据时按毫秒合计;时长缺失时公式采用已知时长与 15 秒中的较大值并标注估算。报价接口只接收素材数量,因此参考视频按 15 秒估算;任务创建时的公式快照可因实际元数据而不同。负时长、小数毫秒或整数溢出均拒绝。
例如,无参考视频的 Seedance 2.0、720p、16:9、5 秒:公式为 108,000 Token,平台预留 118,800 Token。若管理员配置 16 积分 / 百万 Token、平台倍率为 1,预留 1.9008 积分。16 只是计算示例,不是内置售价。
## 成功后的结算
Ark 协议读取[查询视频任务接口](https://www.volcengine.com/docs/82379/1521309)返回的 `usage.completion_tokens`,字段缺少时接受 `total_tokens`。其他视频协议按 `completion_tokens`、`output_tokens`、`total_tokens` 的顺序读取;优先字段存在但无效时不改用后续字段。视频不另收文本输入或缓存费用。0、负数、小数、字符串、空值、溢出和非成功状态的用量不视为有效上游用量,转为公式快照结算;不从输入量或不明用量字段推断视频消耗。
```text
实际微积分 = ceil(实际视频 Token × 订单快照中的单价 × 订单倍率 ÷ 1,000,000)
```
账单保存提交时的价格档、单价、倍率、预留量以及不含 10% 余量的 `videoFormulaTokens`。有效上游用量优先结算,记录 `usageSource: "provider"`、`usageAvailable: true`;否则新视频订单采用公式快照,记录 `usageSource: "video_formula"`、`usageAvailable: false`,`outputTokens` 为公式数,账本说明标明公式结算,不伪造上游调用日志。以上 5 秒示例缺少上游用量时结算 1.728 积分,退回预留差额 0.1728 积分。
较少的费用退回差额,较多的费用沿用现有补扣机制;Agent 硬预算上限继续生效。失败任务沿用退款或待核对规则,不因存在公式快照就自动收费。没有公式快照的历史收费订单仍要求有效上游用量,不从含预留余量的数量反推历史费用。免费档可零金额完成。数据库读取或实际金额计算出错时仍明确报错,不把错误当成缺少用量。
预估与结算共用 `internal/kernel/token_billing.go` 的整数金额算法,汇总 Token 费用、应用倍率后只对最终微积分向上取整,避免合法高单价因中间乘积溢出而被拒绝;最终金额超出 `int64` 范围时明确失败。
普通用户在模型选择器、画布生成入口与短剧生产页看到当前参数的「预计」金额,可查看公式 Token、预留余量以及估算边界。参数变更后重新报价;报价本身不创建账单、不冻结积分、不请求上游生成。
## 发布与验证
前后端需一起发布,并执行 schema v25 `video_token_formula_snapshot`:在 `billing_orders` 增加 `video_formula_tokens`(默认 0)与 `usage_source`(默认空字符串),不重算历史订单、不改既有模型售价。关闭自动迁移的部署先执行新版本 `migrate-schema up`、`migrate-schema verify`,然后启动后端。回退旧二进制需匹配数据库备份和 schema 版本,不能手工伪造迁移记录;旧程序也不支持新音频 selector 和非 Ark 视频 Token 配置。本次仅实现并测试迁移,没有操作真实账号数据库。
本地测试覆盖模型像素、公式取整、参考时长、音频分档、免费档、渠道与逻辑模型报价、任务预留一致性,以及真实用量的退差、补扣和非法值拒绝。真实账号页面及真实上游账单仍需按[待测试清单](/docs/progress/pending-test)验收。