关于 fish-audio-tts
fish-audio-tts 是用于通过 fish.audio 生成旁白音频的 OpenMontage 技能,支持选择后端模型和复用已创建的声音模型,并可调整语音表现与音频输出。
主要功能
- 01将文本生成为语音
- 02选择 fish.audio 后端模型
- 03通过 reference_id 复用声音
- 04调整延迟、韵律和音频输出
- 05在 S2 模型中使用内嵌情绪标签
适用场景
- 01为视频项目生成旁白音频
- 02在生成完整旁白前试听选定声音
- 03使用 S2 情绪标签生成富有表现力的语音
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ calesthio/ openmontage --skill fish-audio-tts安装后在 Claude Code 中输入/fish-audio-tts确认已加载。
详细介绍
fish.audio TTS
需要在 .env 中设置 FISH_AUDIO_API_KEY(可在 https://fish.audio/go-api/api-keys/ 创建)。
在 fish.audio playground 中创建语音模型,并将其 id 作为 reference_id 传入,即可复用克隆的语音。
当前 API
单次同步调用,返回原始音频字节:
POST https://api.fish.audio/v1/tts
Authorization: Bearer ${FISH_AUDIO_API_KEY}
Content-Type: application/json
model: <backend model> # HTTP header selects the backend, e.g. s1
后端模型通过 model HTTP header 选择,而不是通过请求体字段选择。在 OpenMontage 中,这对应工具的 model 输入。
后端模型
model 为必填项——没有默认值。请传入以下其中一个:
s2.1-pro— 最新一代。质量最佳:支持内联情绪标签、80 多种语言和多说话人。适用于主打旁白。s2.1-pro-free— 免费体验 s2.1-pro 的促销访问权限。仅在促销期内,草稿、样本和验证运行费用为 $0。根据 fish.audio 公告:免费期截至 2026 年 8 月 31 日,受公平使用政策限制,不保证 SLA/延迟,可能保留请求,且限制商业用途。切勿通过此模型生成生产内容或客户旁白。s2-pro— S2 的第一代产品。质量稳定、音质出色,并支持情绪标签。s1— 上一代旗舰模型。为兼容现有集成而保留。
费用按输入文本的 UTF-8 字节数 计费(而非字符数)。相同可见长度的中文、日文、韩文(CJK)文本和表情符号,费用是 ASCII 字符的 3–4 倍。当前标价:s1 / s2-pro / s2.1-pro = 每 1M 字节 $15,s2.1-pro-free = 仅在促销期内 $0(2026 年 8 月 31 日后,工具的 estimate_cost() 将切换为付费 s2.1-pro 费率)。进行大批量处理前,请在 https://docs.fish.audio/developer-guide/models-pricing/pricing-and-rate-limits 核实当前价格。
内联情绪标签(仅限 S2 模型)
s2-pro / s2.1-pro / s2.1-pro-free 会解析嵌入文本中的内联情绪标签:
[laugh]、[whispers]等标签会改变句子中途的表达方式。- 示例:
"That's hilarious [laugh] but let me explain seriously." s1不会解析情绪标签——可能会将其作为普通文本读出,因此使用 s1 时请删除这些标签。
语音选择(reference_id)
- 在 fish.audio playground 中创建或选择语音,然后复制其模型 id。
- 将其作为
reference_id传入。如果未提供reference_id,则选择器通用的voice_id会作为别名接受。 - 如果未提供
reference_id,fish.audio 会使用所选模型的默认语音。
此工具不支持即时内联克隆(每次请求上传参考音频和文本)——请先在 playground 中创建语音模型。
OpenMontage 用法
使用 TTS 选择器生成:
from tools.audio.tts_selector import TTSSelector
result = TTSSelector().execute({
"preferred_provider": "fish_audio",
"text": "Here's why compound interest quietly beats every get-rich-quick scheme.",
"model": "s1",
"reference_id": "<playground voice model id>",
"output_path": "projects/my-video/assets/audio/narration.mp3",
})
或直接调用提供方:
from tools.audio.fish_audio_tts import FishAudioTTS
result = FishAudioTTS().execute({
"text": "Short sample line for approval.",
"model": "s1",
"reference_id": "<playground voice model id>",
"output_path": "projects/my-video/assets/audio/fish_sample.mp3",
})
提供方会将音频写入 output_path,并返回 data.output 以及解析后的 model 和 reference_id。
质量与延迟调优
latency:normal(默认,质量最佳)、balanced(稍快)或low(最快,但会略微损失质量)。normalize:默认为true;请保持开启,以便自然地读出数字、日期和货币。prosody:可选的{ "speed": 1.0, "volume": 0 },用于微调语速和音量。mp3_bitrate:128是不错的默认值;若混音中音乐背景占比较大,可提高到192。temperature:默认为0.7。提高到接近0.9可让朗读更富表现力(使用情绪标签时推荐);调低则可让表达更稳定、更可预测。top_p/repetition_penalty:通常保持默认值(0.7/1.2)。
推荐工作流
- 正式付费生成旁白前,先使用选定的
model+reference_id生成 10–15 秒的样本。 - 请用户确认语音的自然度、情绪和语速。
- 仅在获得批准后生成完整旁白。
- 对于注重成本的批量处理或本地化变体,可先用
s2.1-pro-free制作原型(仅促销期内 $0;仅限非商业草稿),再用s2.1-pro生成最终版本。
故障排查
401 Unauthorized:FISH_AUDIO_API_KEY错误或缺失。402/ 付款错误:账户余额已用尽。404/ 语音无效:reference_id错误或不属于此账户。- 音频为空或过短:检查
text是否非空,以及normalize是否移除了全部输入内容。
安全
切勿将 API 密钥打印或写入日志、元数据、补丁或项目产物中。.env.example 只能包含空的变量名。