本节摘要:不算账的流水线不知道自己的瓶颈在哪,也无法报价与复盘。本节建立五层成本模型:脚本 token(剧本与分镜的结构化生成)、生成秒数(视频模型按出片秒数计费,通常占大头)、TTS 字符(按配音字符计费)、算力时长(本地合成与转写的电费与折旧口径)、人工工时(审读与审核,常被漏算却最贵)。随后给出各层计价口径的量级示意(一律标注"以服务商现行价格页为准"),落到一张六十秒短剧的逐项核算示例表——合计约十美元量级,并指出重跑率与生成秒单价是最大的两个杠杆。记账实现为逐事件 JSONL 脚本,末尾给降本四招:缓存、预演、批量、错峰。
三个场景都离不开成本数字:对外报价——客户问一条六十秒竖屏短剧多少钱,答不出成本就定不出价;对内复盘——本月生成费用翻倍,是废片多了还是涨价了,没有分层账就吵不清;优化排序——降本手段有限的时间,先打最大的成本层。成本核算的关键纪律是:金额一律写"约 X 美元"并注明口径日期,因为模型服务价格变动频繁,任何不带口径的精确数字都是伪精确。
| 成本层 | 计件量 | 计价形态 | 成本量级印象 |
|---|---|---|---|
| 脚本 token | 输入加输出 token 数 | 按百万 token 计价 | 小 |
| 生成秒数 | 成片用掉的生成视频秒数 | 按秒计费,分辨率分档 | 大(通常过半) |
| TTS 字符 | 送入配音的字符数 | 按百万字符计价 | 小 |
| 算力时长 | 本地合成、转写、烧录的时长 | 电费加折旧口径 | 中 |
| 人工工时 | 审读、审核、返工沟通 | 时薪口径 | 波动最大 |
三层为变动成本(随条数线性增长),算力与订阅类素材库为半固定,人工工时建议单独记账不折进单条成本——它是产能带宽的实测值(第 9.3 节),混进变动成本会掩盖真实瓶颈。
以下示例表的量级为 2026 年 10 月的示意口径,实际以各服务商现行价格页为准:剧本层按主流大模型每百万 token 约二至八美元的档位取中值;生成层按云端视频模型每秒约零点一至零点三美元取中值;TTS 层按每百万字符约十五美元档。
| 行项 | 计件量 | 单价口径(示意) | 小计(示意) |
|---|---|---|---|
| 剧本与分镜结构化 | 约 60 千 token | 约每百万 token 4 美元 | 约 0.24 美元 |
| 首轮镜头生成 | 8 镜头各 5 秒,共 40 秒 | 约每秒 0.2 美元 | 约 8 美元 |
| 重跑(废片率三成) | 约 12 秒 | 同上 | 约 2.4 美元 |
| TTS 配音 | 约 450 字符 | 约每百万字符 15 美元 | 约 0.01 美元 |
| 混音、转写、烧录 | 本地约 20 分钟 | 电费口径 | 约 0.1 美元 |
| 人工审核 | 约 30 分钟 | 不入单条变动成本 | 单列台账 |
| 合计(变动部分) | — | — | 约 10.75 美元 |
读表要点:生成层占变动成本约八成,其中重跑贡献约两成;两个最大杠杆一目了然——生成秒单价(换档位、降分辨率)与废片率(第 10.2 节整节都在讲它)。TTS 与脚本层便宜到不值得优化,把精力花在它们上面是典型的优化错位。
核算表是事后估算,真正可信的是逐事件流水:每次真实调用发生时落一行 JSONL,日终与条终各汇总一次。
# cost_log.py —— 成本事件记账与汇总(单价为示意口径,以价格页为准) import json, os LOG = "ledger/cost_events.jsonl" UNIT_COST = {"script_token_m": 4.0, "video_sec": 0.20, "tts_char_m": 15.0} def log(stage, unit, qty, note=""): os.makedirs(os.path.dirname(LOG), exist_ok=True) unit_cost = UNIT_COST[unit] amount = qty / 1_000_000 * unit_cost if unit.endswith("_m") else qty * unit_cost row = {"stage": stage, "unit": unit, "qty": qty, "unit_cost": unit_cost, "usd": round(amount, 4), "note": note} with open(LOG, "a", encoding="utf-8") as f: f.write(json.dumps(row, ensure_ascii=False) + "\n") return row def summary(): rows = [json.loads(line) for line in open(LOG, encoding="utf-8") if line.strip()] by_stage = {} for row in rows: by_stage[row["stage"]] = round(by_stage.get(row["stage"], 0) + row["usd"], 4) total = round(sum(by_stage.values()), 4) for stage, usd in sorted(by_stage.items(), key=lambda kv: -kv[1]): print(f"{stage:8s} 约 {usd:.2f} 美元") print(f"{'合计':8s} 约 {total:.2f} 美元(示意单价口径)") if __name__ == "__main__": log("script", "script_token_m", 60_000, "一句话到分镜全流程") log("clips", "video_sec", 52, "8 镜头首轮加 30% 重跑") log("voice", "tts_char_m", 450, "双角色加旁白") summary()
记账入口埋在第 8.1 节技能执行器里:每个技能执行完顺手 log 一行,成本数据与执行状态同源,不需要单独的记账遍历。日终把 cost_events 按条聚合,就是第 9.3 节账目表的 gen_cost_usd 列。
第一招,缓存:相同提示词与参数的生成结果落盘复用,台词没改的句子不重配——第 8.3 节的幂等判据天然就是缓存命中。第二招,预演加成片:流程调试与分镜验证用低档模型低分辨率跑,定稿才用高档出片,等于把探索成本降一个数量级。第三招,批量与订阅:多数服务商对预付与批量有折扣档,日产能稳定后值得核算切换点。第四招,错峰与分档:非实时任务挪到低峰时段(部分服务分时定价);横屏转竖屏需求用一次高清生成加裁切,而不是两次生成。四招共同的副作用是可能增加复杂度或降低迭代速度——降本决策的准绳永远是核算表:省的钱要看得见。
以第二招算一笔账就明白杠杆在哪(单价与秒数均为示意值,以价格页为准):分镜探索期需要反复试错,若全程用出片档位跑三轮验证,花费约 24 美元;预演模式改用低档低分辨率跑两轮探索,定稿才上一轮高档出片,合计约 12 美元——省下的不是画质(成片档位没变),而是试错的价格:
| 迭代方式 | 生成轮次与秒数(示意) | 花费(示意) |
|---|---|---|
| 全程出片档位 | 三轮各 40 秒,约每秒 0.2 美元 | 约 24 美元 |
| 预演加定稿 | 低档两轮共 80 秒(约每秒 0.05 美元),高档一轮 40 秒 | 约 12 美元 |
注意对比的公平性:预演轮次里通过的镜头不能直接当成品用(分辨率与质感不达标),定稿轮必须重新生成——预演的价值是淘汰坏分镜,不是攒素材。
单条核算回答"这条多少钱",月度复盘回答"这个月为什么贵了"。场景走查(数字均为示意值):十月末拉总账,生成层从上月的约 83 美元涨到约 131 美元,涨幅约五成多;条数没变(八条),涨价从何而来?四步拆解,每步都有明确的查账位置:
| 步骤 | 问的问题 | 查哪里 | 本例结论(示意) |
|---|---|---|---|
| 一拆层 | 涨在哪个成本层 | cost_events 按阶段汇总 | 生成层独涨,其余层持平 |
| 二拆价量 | 单价涨了还是用量涨了 | 单价字段均值对比生成秒数合计 | 单价没动,秒数涨约五成 |
| 三拆条数 | 条数多了还是单条变贵 | 按条聚合看单条秒数 | 条数持平,单条从约 52 秒涨到约 82 秒 |
| 四拆原因 | 多出的秒数花在哪 | 按镜头号关联第 10.2 节废片台账 | 新题材线首周重跑集中,废片率偏高 |
拆到第四步,结论落地:不是涨价、不是加量,是新题材的提示词模板还没沉淀,语义跑偏抬高了重跑。对策随之明确——给该题材建专属风格前缀与负面词基线(第 9.2 节),两周后再看周趋势验证。复盘的价值不在表格本身,而在"每一步都有台账可查":没有逐事件流水,第二步就断线,只能停在"感觉贵了"。
问题一:流水账和账单对不平。 先查口径三连:失败调用是否也计费、缓存命中是否计零、单价快照是否过期。服务商账单的原始导出月末留档对一次总账,偏差在约五个百分点内(示意值)先怀疑口径,超过再逐条核。
问题二:人工工时怎么折进成本。 不折。人工单独记台账,它是产能带宽的实测(第 9.3 节);折进单条变动成本会把最贵的资源藏起来,恰恰掩盖瓶颈。
问题三:订阅与买断素材怎么入账。 订阅按月分摊,记半固定成本;一次性买断的字体与素材按项目摊销。它们都不进单条变动成本,但都要出现在月度总账里——固定成本不会被规模摊没,只会被不记账掩盖。
问题四:价格页更新了,历史流水怎么办。 记账时把单价快照写进事件(unit_cost 字段就是干这个的),历史事件不回改;单价变更后新事件用新口径并在备注里注日期,两套口径在月报里分段呈现。
问题五:要不要降分辨率档位省钱。 回到核算表算净效果:降档省下的单价,可能被废片率上升吃回去——低档位语义跑偏更多,重跑更勤(第 10.2 节)。降档适合预演轮,出片轮慎用。
成本账里最刺眼的那一行是重跑。重跑为什么发生、怎么少发生、发生几次该停手——下一节把废片率拆开揉碎。