详细分析 ▾
运行时依赖
版本
从所有任务技能去重批量发布
安装命令
点击复制技能文档
使用ElevenLabs API从文本生成高质量语音音频。
认证
API密钥可通过环境变量获取:
ELEVENLABS_API_KEY
包含在请求头中:
xi-api-key: $ELEVENLABS_API_KEY
API端点
文本转语音
POST https://api.elevenlabs.io/v1/text-to-speech/{voice_id}
请求体:
{
"text": "Your text here",
"model_id": "eleven_turbo_v2_5",
"voice_settings": {
"stability": 0.5,
"similarity_boost": 0.5
}
}
响应: 音频字节(默认MP3格式)
常用语音ID
21m00Tcm4TlvDq8ikWAM- Rachel(女声,平静)EXAVITQu4vr4xnSDxMaL- Bella(女声,柔和)ErXwobaYiN019PkySvjV- Antoni(男声,温暖)TxGEqnHWrfWFTfGW9XjX- Josh(男声,深沉)
Python示例
import os import requestsELEVENLABS_API_KEY = os.environ.get("ELEVENLABS_API_KEY") VOICE_ID = "21m00Tcm4TlvDq8ikWAM" # Rachel
def text_to_speech(text, output_path): url = f"https://api.elevenlabs.io/v1/text-to-speech/{VOICE_ID}" headers = { "xi-api-key": ELEVENLABS_API_KEY, "Content-Type": "application/json" } data = { "text": text, "model_id": "eleven_turbo_v2_5", "voice_settings": { "stability": 0.5, "similarity_boost": 0.75 } } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: with open(output_path, "wb") as f: f.write(response.content) return True else: print(f"Error: {response.status_code} - {response.text}") return False
处理长文本
ElevenLabs每个请求有约5000字符的限制。对于长文档:
- 在句子边界处将文本拆分成块
- 为每个块生成音频
- 使用ffmpeg或pydub合并:
# 创建文件列表 echo "file 'chunk1.mp3'" > files.txt echo "file 'chunk2.mp3'" >> files.txt
# 合并 ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp3
最佳实践
- 在句子边界处拆分以避免切断单词
- 检查速率限制(因订阅等级而异)
- 缓存生成的音频以避免冗余的API调用