语音转写的账单看起来只和“音频有多长”有关,实际总成本往往由更多因素叠加:无效静音、高码率文件、失败重试、切分重叠、重复提交、存储保留,以及转写后的人工校对。

本文不写固定单价,因为价格会调整,不同模型和不同网关的口径也不一样。更重要的是理解计费结构和成本动因,具体单价请以站内模型价格为准。

说明:OpenAI、Whisper 是其权利人的商标,本文仅作技术说明,与 OpenAI 无隶属关系。各模型的计费单位、可用地域和限制可能变化,请以官方文档和站内价格页为准。本文不含具体报价。

一、计费的基本单位是音频时长

传统 whisper-1 按提交音频的分钟数计费。较新的 gpt-4o-transcribe 系列按音频输入、输出 token 计费,价格页通常同时给出等效的每分钟估算;gpt-transcribe 等新模型的计价方式也在演进。

无论按分钟还是按 token,计费依据都是“提交上去的音频长度”,不是“其中有效说话的长度”。片头片尾、长时间静音、会议中场休息,都可能进入计费。控制成本的第一条原则是:上传前先裁掉不必要的声音。

二、文件大小与格式如何影响账单

官方接口的单文件上限是 25 MB,支持 mp3、mp4、mpeg、mpga、m4a、wav、webm。大小限制会间接影响成本:

  • 高码率 wav 体积大,长音频更容易超限,切分次数更多。
  • 文件越大,上传越慢,超时和重试概率越高。
  • 格式不兼容会直接失败,白白消耗请求和排查时间。
  • 转码本身通常不计入 API 账单,但会消耗服务器和存储资源。

统一转成 16 kHz 单声道 mp3 或 wav,通常能在可接受的质量下显著缩小体积。压缩前先确认业务能接受音质损失,涉及方言、专有名词时保留更高码率。

三、哪些操作会悄悄放大成本

成本项 是否进入 API 账单 控制方法
音频时长 是 去静音、裁片头片尾、只提交有效段落
失败重试 可能重复计费 限制重试次数,记录请求结果
切分重叠 是,重叠部分会被重复转写 重叠控制在 0.5–1 秒,合并时去重
转码与存储 通常不计入 API 账单 设置生命周期规则,及时清理
出网流量 视服务商与架构而定 同区域处理,避免反复下载
人工校对 不计入 API 账单 抽样校对、词表替换、分级审核

最常见的浪费不是单价,而是重复劳动:同一段音频因为超时被提交三次,或者为了拿时间戳把整段重新转写一遍。

四、重试、超时与重复计费

网络超时不代表服务端没有处理。请求已经计费但客户端没收到结果,重试就会产生第二次费用。工程上要做三件事:

  1. 用文件哈希或业务单号做幂等键,成功结果落库复用。
  2. 限制最大重试次数,例如三次,并使用指数退避。
  3. 只对 429、5xx 和超时重试;400、401、413 这类错误重试没有意义。

批量任务还要设置合理的连接超时和读取超时。超时太短会把正常的长音频判死,超时太长会拖住队列。

五、长音频切分与并发策略

超过 25 MB 的音频必须切分。切得越碎,请求数越多;切得越粗,失败重试的代价越大。可以按下面的顺序处理:

  1. 用 ffprobe 统计每个文件的时长和码率,先估算总分钟数。
  2. 统一转码为 16 kHz 单声道,控制单段体积。
  3. 优先按静音切分,其次按 10 分钟固定切分。
  4. 记录每段偏移量,合并时回填时间轴。
  5. 并发控制在账户限流以内,观察 429 比例再调整。
  6. 合并后去重,并对切点做抽样校对。
  7. 把实际提交分钟数与账单核对,找出异常。

并发本身不会改变按量单价,但会影响重试率和总时长。并发拉满导致大量 429,再叠加退避重试,通常比稳一点更贵。

六、存储与出网容易被忽略

音频文件、转写结果、日志和备份都会产生存储成本,其中音频体积最大。建议按业务分级:

  • 原始音频:转写完成后保留一段可回溯期,到期删除或转冷存储。
  • 转写文本:按项目保存,敏感内容加密并限制访问。
  • 请求日志:不记录完整音频 URL 和密钥,保留必要的请求 ID。
  • 备份:只备份结果,不重复备份原始音频。

如果音频和转写服务不在同一区域,上传和下载会产生出网流量。把处理流程放在离存储更近的区域,能减少这部分开销。

七、怎么做预算估算

不要用一个拍脑袋的单价乘总时长。更稳的估算公式是:

月成本 ≈ 有效音频分钟 × 单价 × 重试系数 + 存储与流量 + 人工校对

其中重试系数可以用实际监控数据估算,例如请求成功率是 97%,就要为失败部分留出余量。下面这段脚本只读取时长和单价,不写死价格:

import os, subprocess, json

UNIT_PRICE = float(os.environ["AUDIO_UNIT_PRICE"])  # 从价格页获取,元/分钟
files = ["meeting-01.mp3", "meeting-02.mp3"]
total_minutes = 0.0

for path in files:
    out = subprocess.check_output([
        "ffprobe", "-v", "error", "-show_entries", "format=duration",
        "-of", "json", path,
    ])
    total_minutes += float(json.loads(out)["format"]["duration"]) / 60

estimate = total_minutes * UNIT_PRICE * 1.1  # 预留重试与重叠
print(f"音频 {total_minutes:.1f} 分钟,预估 {estimate:.2f}")

预算还要加上存储、转码服务器、人工校对和开发维护。只比较 API 单价,容易低估总拥有成本。

八、上线后的对账与价格跟踪

  1. 按项目或 Key 拆分用量,避免所有业务混在一个账单里。
  2. 每周导出一次用量,和内部提交的音频分钟数对比。
  3. 对差异超过阈值的项目排查:重复提交、异常重试、切分参数错误。
  4. 设置预算告警,用量接近上限时提前处理。
  5. 关注模型和价格更新,切换前先用真实样本比较效果与成本。

价格会变,模型也会变。把单价配置化,不要写死在代码里;每次调价只需要更新配置并重跑一次估算。

常见问题

Whisper API 是按分钟还是按 token 计费?

whisper-1 按音频分钟计费;较新的 gpt-4o-transcribe 系列按音频输入、输出 token 计费,价格页会给出等效分钟估算。以站内模型价格和官方文档为准。

静音部分也会计费吗?

通常按提交的音频长度计费,静音也可能算进去。上传前做静音裁剪是最直接的成本控制手段。

失败重试会不会重复收费?

如果服务端已经处理了请求,只是客户端超时,重试可能产生第二次费用。用幂等键复用成功结果,并限制重试次数。

并发越高越省钱吗?

不会改变单价,也不一定缩短总成本。并发过高会触发 429,重试和排队反而增加时间与费用。

为什么文章不写具体价格?

音频模型价格调整频繁,不同网关的计价口径也不同。写死数字容易过期,按站内价格页估算更可靠。

下一步

先注册中商起航 AI 网关,用短音频跑通转写,统计真实分钟数后再做预算。模型与最新价格以模型价格为准。

相关阅读: