You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pyttsx3生成的MP3保存到指定路径?程序运行后文件未找到

解决pyttsx3保存音频文件丢失的问题

可能的原因及修复步骤

1. 目录不存在或权限不足

  • 先确认C:\Users\Lenovo\OneDrive\Desktop\reddit video这个文件夹是否存在,pyttsx3不会自动创建目录,目录不存在会直接导致保存失败,手动创建该目录后重试。
  • 检查目录权限:OneDrive同步目录可能有读写限制,或者文件夹被设为只读。右键文件夹→属性→取消「只读」勾选,也可以换一个本地非同步目录测试,比如C:\temp\test.mp3。

2. 音频格式支持问题

pyttsx3依赖系统语音引擎(比如Windows的SAPI),部分引擎不支持直接保存MP3格式。先换成WAV格式测试:

output_path = r'C:\Users\Lenovo\OneDrive\Desktop\reddit video\test.wav'

如果WAV文件能正常生成,说明是MP3格式支持问题,后续可以用pydub等第三方库将WAV转成MP3。

3. JSON解析逻辑错误

原代码中raw_voice.replace("post_body","")会破坏JSON结构,导致final_voice内容异常(甚至解析失败),pyttsx3可能因内容无效跳过保存。

  • 先打印final_voice确认内容:
print(final_voice)
  • 如果你的JSON结构是{"post_body": "要转换的文本"},正确的提取方式应该是:
final_voice = json.loads(raw_voice)["post_body"]

4. 语音索引错误

不同系统的语音列表长度不同,voices[1]可能不存在,导致程序中途报错中断。先打印所有可用语音:

voices = engine.getProperty('voices')
for voice in voices:
    print(voice.id, voice.name)

根据输出设置正确的语音ID,或者暂时注释掉语音设置代码,先测试基础保存功能。

5. 捕获异常定位问题

在代码中添加异常捕获,查看具体报错信息:

import traceback

def finalvoice():
    try:
        engine = pyttsx3.init()  
        raw_voice = Path("post_data.json").read_text()
        final_voice = json.loads(raw_voice.replace("post_body",""))
        voices = engine.getProperty('voices')
        engine.setProperty('voice', voices[1].id)  
        engine.say(final_voice)
        output_path = r'C:\Users\Lenovo\OneDrive\Desktop\reddit video\test.mp3'
        engine.save_to_file(final_voice, output_path)
        engine.runAndWait()
    except Exception as e:
        print("错误信息:", e)
        traceback.print_exc()
finalvoice()

运行后查看控制台的错误日志,就能精准定位问题。


内容的提问来源于stack exchange,提问作者Prabhat Ghimire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:40:01