mcpField
V
venice-audio-transcription

venice-audio-transcription

github.com/veniceai创意与媒体160165 次安装5 天前更新
代码仓库

关于 venice-audio-transcription

venice-audio-transcription 介绍 Venice 音频转录 API,面向需要将录音转换为文本的开发者。它兼容 OpenAI 音频转录接口,可选择多种语音识别模型,并按需返回时间戳。

主要功能

  1. 01通过 multipart/form-data 上传音频
  2. 02支持多种语音识别模型
  3. 03返回文本或带时间戳的 JSON
  4. 04提供词、片段或字符时间戳
  5. 05文件大小上限为 25 MB

适用场景

  1. 01转录会议录音或语音备忘
  2. 02为字幕或章节生成时间信息
  3. 03按模型需求处理多语言音频

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/veniceai/skills --skill venice-audio-transcription

安装后在 Claude Code 中输入/venice-audio-transcription确认已加载。

详细介绍

Venice 转录(/audio/transcriptions)

POST /api/v1/audio/transcriptions 接收一个音频文件并返回文本。它兼容 OpenAI,使用 multipart/form-data——OpenAI SDK 的 audio.transcriptions.create() 无需修改即可使用。

方法路径身份验证备注
POST/api/v1/audio/transcriptionsBearer 密钥或 x402(SIWX)multipart/form-data,文件字段为 file,最大 25 MB。按音频秒数计费。

适用场景

  • 需要为语音备忘录、会议、播客或短音频进行 STT(语音转文本)。
  • 需要用于字幕或章节的词级/片段级时间戳。
  • 想在 Venice 托管的 Parakeet、Whisper 系列模型、ElevenLabs Scribe 或 xAI STT 之间进行选择。

视频目前已没有转录端点——POST /video/transcriptions 已停用,会返回 410。请提取音轨并发送到此处,或通过支持视频的聊天模型 venice-chat 发起请求。

最简请求

curl https://api.venice.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $VENICE_API_KEY" \
  -F "file=@./meeting.m4a" \
  -F "model=nvidia/parakeet-tdt-0.6b-v3" \
  -F "response_format=json" \
  -F "timestamps=false"
{ "text": "Alright everyone, let's kick off the meeting...", "duration": 184.2 }

设置 timestamps=true 后,JSON 还会包含一个 timestamps 对象(见下文)。

请求(multipart/form-data)

只会读取以下字段;表单中的其他内容都会被忽略。

字段类型默认值备注
file二进制—必填。 必须是实际文件部分(不能使用 base64)。支持:wav/wave、flac、m4a、aac、mp4、mp3、ogg/oga、webm。先通过扩展名/MIME 类型检查,再检查二进制签名。最大 25 MB。
model字符串—请发送此字段。 OpenAPI 架构列出的默认值为 nvidia/parakeet-tdt-0.6b-v3,但实际上不会应用此默认值:省略 model 会返回 400 "model is required"。
response_formatjson / textjson仅支持这两种格式。text 会返回仅包含转录文本的 text/plain 响应正文。
timestamps布尔值(表单字符串形式的 true/false)false在 JSON 响应中添加 timestamps。
language字符串—ISO 639-1 提示(en、ja、……)。Whisper、Wizper、Scribe 和 xAI STT 会使用此字段;Parakeet 会忽略此字段(自动检测)。

响应

{
  "text": "…",
  "duration": 184.2,
  "timestamps": {
    "word":    [{ "word": "Alright", "start": 0.12, "end": 0.48 }],
    "segment": [{ "text": "Alright everyone…", "start": 0.12, "end": 4.9 }],
    "char":    [{ "char": "A", "start": 0.12, "end": 0.15 }]
  }
}

duration(秒)和 timestamps 均为可选项。具体返回哪些时间戳数组取决于所用模型:

模型时间戳粒度
openai/whisper-large-v3segment + word
fal-ai/wizpersegment
elevenlabs/scribe-v2word
stt-xai-v1word
nvidia/parakeet-tdt-0.6b-v3可能包含 segment、word 和/或 char

模型

以下五个模型都列在实时 GET /models?type=asr 列表中。价格字段为 model_spec.pricing.per_audio_second.usd。

模型 ID隐私级别备注
nvidia/parakeet-tdt-0.6b-v3private由 Venice 托管,速度快。忽略 language。
openai/whisper-large-v3private支持多语言;提供 language 提示;支持片段级和词级时间戳。
fal-ai/wizperprivateWhisper v3 变体;提供 language 提示;支持片段级时间戳。
elevenlabs/scribe-v2anonymized提供 language 提示;支持词级时间戳。
stt-xai-v1anonymized提供 language 提示;支持词级时间戳。

使用 modelPrivacy: PRIVATE_ONLY 的密钥调用 anonymized 模型会收到 403(PRIVATE_TEXT 密钥在此处不受限制)。转录失败不会收费。

OpenAI SDK

import OpenAI from 'openai'
import fs from 'node:fs'

const client = new OpenAI({
  apiKey: process.env.VENICE_API_KEY,
  baseURL: 'https://api.venice.ai/api/v1',
})

const out = await client.audio.transcriptions.create({
  file: fs.createReadStream('meeting.m4a'),
  model: 'openai/whisper-large-v3',
  response_format: 'json',
  language: 'en',
  // @ts-expect-error — Venice-specific extra, passes through multipart
  timestamps: true,
})

console.log(out.text)

长音频文件

服务端不会分块处理,上传文件大小上限为 25 MB。请在客户端拆分长录音(按静音处或固定时长分段),逐段转录,再结合偏移时间戳拼接结果。

ffmpeg -i long.mp3 -f segment -segment_time 600 -c copy chunk_%03d.mp3

错误

代码含义
400缺少 model、参数错误(例如 response_format 不是 json/text)、没有 file 部分(包括使用 JSON 请求体而非 multipart → "No audio file provided")、扩展名/MIME 不受支持,或无法识别二进制签名。
401身份验证失败。
402余额不足。Bearer → {"error":"Insufficient USD or Diem balance…"};如果达到密钥自身的上限,则为 `"API key USD
403PRIVATE_ONLY 密钥调用 anonymized 模型,或受到区域限制。
404未知 model。
413文件大于 25 MB({"code":"PAYLOAD_TOO_LARGE","error":"File exceeds the maximum allowed size of 25 MB."})。
422上游提供商无法处理音频(长度为零、无声、损坏、格式或语言不受支持,或提供商拒绝处理)。没有 suggested_prompt。
429请求频率受限。
500推理失败。
502上游 ASR 暂时性故障 — {"error":"Audio transcription failed due to a temporary upstream error. Please retry."}(没有 code 字段)。使用退避策略重试。
503模型暂时离线 — 使用抖动重试。

有关响应体格式和重试策略,请参阅 venice-errors。

注意事项

  • 始终发送 model — 文档中所述的默认值不会生效。
  • file 必须是实际的 multipart 文件部分。不支持 JSON + base64。
  • 不支持 verbose_json、srt 或 vtt。如需字幕,请使用 response_format=json + timestamps=true,并自行渲染时间戳。text 会完全丢弃时间戳。
  • 在基于 timestamps.word 与 timestamps.segment 构建功能之前,请先确认模型返回的粒度。
  • 文件即使扩展名有效,如果二进制签名不是音频,也会被拒绝;请重新编码为标准配置文件(例如 MP3 44.1 kHz 或 16 kHz)。
  • 遇到 429 时请采用退避策略;批量请求较多时应进行限流,不要一次性全部并行发送。

评论

支持 Markdown