关于 doubao-tts
面向 OpenMontage 音频生成流程的 Doubao TTS 技能指南,说明语音合成配置、输出文件和时间戳处理。还涵盖长篇旁白的异步接口及字幕制作建议。
主要功能
- 01配置 Doubao API 密钥与音色
- 02生成语音并保存音频文件
- 03获取句子和词语时间戳
- 04通过异步接口处理长篇旁白
- 05提供字幕制作与故障排查建议
适用场景
- 01为视频生成中文旁白
- 02试听并确认音色和语速
- 03依据语音时间戳制作字幕
- 04排查授权、配额或时间戳问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ calesthio/ openmontage --skill doubao-tts安装后在 Claude Code 中输入/doubao-tts确认已加载。
详细介绍
Doubao TTS
需要在 .env 中设置 DOUBAO_SPEECH_API_KEY。
设置 DOUBAO_SPEECH_VOICE_TYPE 以指定默认语音,或将 voice_id 传给工具。
当前 API
使用新版控制台的 API Key 流程:
X-Api-Key: ${DOUBAO_SPEECH_API_KEY}
X-Api-Resource-Id: seed-tts-2.0
使用新版控制台的 API Key 时,不要使用 X-Api-App-Id 和 X-Api-Access-Key。如果 API 返回 load grant: requested grant not found,则密钥类型或身份验证请求头可能有误。
对于长篇视频旁白,建议使用异步端点:
POST https://openspeech.bytedance.com/api/v3/tts/submit
POST https://openspeech.bytedance.com/api/v3/tts/query
它会返回 audio_url 以及 sentences[].words[] 时间元数据,可用于制作字幕。
OpenMontage 用法
使用 TTS 选择器生成:
from tools.audio.tts_selector import TTSSelector
result = TTSSelector().execute({
"preferred_provider": "doubao",
"text": "如果 AI 真的会改变未来,普通人到底该怎么参与?",
"voice_id": "zh_female_vv_uranus_bigtts",
"output_path": "projects/my-video/assets/audio/narration.mp3",
"speech_rate": 0,
"enable_timestamp": True,
})
或者直接调用提供方:
from tools.audio.doubao_tts import DoubaoTTS
result = DoubaoTTS().execute({
"text": "短样本试听文本。",
"voice_id": "zh_female_vv_uranus_bigtts",
"output_path": "projects/my-video/assets/audio/doubao_sample.mp3",
})
提供方会写入:
output_path:下载的音频文件metadata_path:完整的查询响应 JSON,默认为<output_path>.json
推荐工作流
- 在生成完整的付费旁白前,先生成一段 10-15 秒的样例。
- 请用户确认语音的自然度、口音和语速。
- 仅在用户确认后生成完整旁白。
- 保留查询 JSON。它是字幕时间信息的权威来源。
- 根据
sentences[].words[]制作字幕,不要根据文本长度估算。 - 在应用时间戳之前,按中文语义短语分组字幕。不要只按固定字数切分;这样可能会拆开“在不押单个公司的情况下”或“可能会被慢慢稀释”这样的短语,影响理解。
- 除非用户明确要求匹配先前的时长,否则应让视频时长遵循已确认的语音节奏。
参数
voice_id:Doubao 的speaker/语音类型。默认为DOUBAO_SPEECH_VOICE_TYPE。resource_id:Doubao Speech 2.0 语音使用seed-tts-2.0。speech_rate:0为正常语速,100为 2 倍速,-50为 0.5 倍速。sample_rate:默认为24000。enable_timestamp:默认为true。return_usage:默认为true,用于请求可用的用量元数据。
默认情况下不要传入 additions.explicit_language。有些端点/密钥组合会因 zh-cn 而返回 unsupported additions explicit language zh-cn。
对于平和的普通话讲解,建议从 speech_rate: 0 开始。如果结果对于已确认的格式来说太长,可先用 speech_rate: 25 或 50 生成一段简短的对比样例,再重新生成完整旁白。如果用户更喜欢 Doubao 自然的语速,不要仅仅为了匹配先前提供方的时长而加速。
故障排除
load grant: requested grant not found:密钥类型或身份验证请求头有误。新版控制台 API Key 请使用X-Api-Key。speaker permission denied:语音 ID 错误,或未获授权用于所选资源。quota exceeded:超出配额、生命周期字符数限制或并发限制。- 缺少时间戳:确认
enable_timestamp: true,保留查询 JSON,并确认所选端点返回了sentences。
安全
绝不要将 API Key 打印或写入日志、元数据、补丁或项目产物。.env.example 中只能包含变量名,且变量值留空。