使用ElevenLabs generate函数遇Text must be a string错误的解决咨询
解决ElevenLabs generate函数"Text must be a string when stream is False"错误
针对你遇到的问题——即使确认翻译后的文本是字符串类型仍触发报错,可尝试以下解决方案:
1. 过滤空文本或全空白文本
Whisper转录的部分segment可能是空字符串或仅包含空白字符,这类文本传入ElevenLabs API会触发错误。在生成音频前添加判断逻辑:
for segment in segments: segment_text = segment.text segment_text_translated = translator.translate_text(segment_text, target_lang="FR").text # 跳过空文本或仅含空白的文本 if not segment_text_translated.strip(): print(f"Skipping empty segment {segment.id}") continue # 后续生成音频代码 audio = generate( text=segment_text_translated, voice="Rachel", model="eleven_multilingual_v2" ) save(audio, f"segment_{segment.id}.mp3")
2. 强制转换为标准字符串并清理文本
虽然type()显示为字符串,但DeepL返回的可能是自定义字符串子类,或包含不可见特殊字符。通过str()强制转换并清理文本:
segment_text_translated = str(translator.translate_text(segment_text, target_lang="FR").text).strip()
3. 显式指定stream=False参数
尽管默认值为False,但显式传入该参数可避免函数内部参数解析异常:
audio = generate( text=segment_text_translated, voice="Rachel", model="eleven_multilingual_v2", stream=False )
4. 升级ElevenLabs SDK到兼容版本
你当前使用的elevenlabs==0.2.14版本较旧,存在参数处理类的bug。建议升级到0.3.x系列(兼容现有代码结构):
pip install --upgrade elevenlabs==0.3.0
若升级到最新v1.x版本,需注意API调用方式有较大变化,需调整代码(比如使用elevenlabs.client.ElevenLabs类初始化客户端)。
5. 检查单条文本长度
ElevenLabs API对单条文本长度有限制(免费版通常为5000字符),若segment文本过长,可拆分后再生成音频。
内容的提问来源于stack exchange,提问作者SHDDSFFDSDSAF
相关产品推荐
相关产品推荐

