Python 如何将pyttsx3的结果保存为MP3或WAV文件
pyttsx3是一个提供了简单界面的Python库,用于使用TTS技术合成语音。文本转语音(TTS)将书面文字转换为口语。它主要用于从文本生成语音并自定义语音音频的各个方面。pyttsx3库生成的语音输出通常以MP3或WAV等流行格式保存为音频文件。本文将讨论如何将pyttsx3的结果保存为MP3或WAV文件。
步骤
将pyttsx3的结果保存为mp3或WAV文件的通用算法如下:
- 导入所需的库:pyttsx3、time和os。
-
使用pyttsx3.init()初始化pyttsx3引擎。
-
使用engine.setProperty(property_name, value)设置所需的TTS属性。此步骤是可选的。
-
使用engine.say(text)提供TTS合成的文本输入。
-
指定临时WAV文件的输出文件路径和名称。
-
使用engine.save_to_file(text, output_path)保存语音到临时WAV文件。
-
运行TTS合成并等待其完成,使用engine.runAndWait()。
-
使用音频转换工具(如ffmpeg)将临时WAV文件转换为MP3格式。使用os.system(“ffmpeg -i input.wav output.mp3”)执行转换。确保系统中已安装并可访问ffmpeg。
-
最终合成的语音现已保存为指定的MP3或WAV文件格式。
方法1:使用pydub库保存为MP3
pydub库简化了将pyttsx3结果保存为MP3格式的过程。只需几行代码,你就可以使用export()方法将临时WAV文件转换为MP3。它提供了一种方便的处理音频文件的方式,并且可以灵活处理不同的格式。
语法
audio.export(output_path, format="mp3")
在这里,使用pydub库的audio.export(output_path, format=”mp3″)用于导出一个音频文件。它指定了输出路径和格式,本例中将音频保存为MP3文件。
示例
在下面的示例中,通过pyttsx3生成的临时WAV文件,并使用pydub的export()方法将其转换为MP3文件。合成的语音将保存为名为”output.mp3″的MP3文件。pydub库简化了将音频文件导出为不同格式(包括MP3)的过程。
from pydub import AudioSegment
audio = AudioSegment.from_wav("output.wav")
audio.export("output.mp3", format="mp3")
输出
上面的图片展示了将 output.mp3 文件成功保存为当前目录下的 output.wav 文件。
方法2:使用wave模块保存为WAV格式
wave模块是Python内置的一个模块,它允许你将pyttsx3的结果保存为WAV格式。通过使用wave.open()函数,你可以设置WAV文件的必要参数,并将音频帧写入其中。这种方法提供了一种在Python中处理WAV文件的基本且直接的方式。
语法
audio_file.setparams(params)
在这里, audio_file.setparams(params) 与 wave 模块一起用于设置 WAV 文件的参数,例如通道数、采样宽度、帧率和压缩类型。
audio_file.writeframes(audio_data)
在这里,语法 audio_file.writeframes(audio_data) 用于将音频帧,由变量audio_data表示的音频数据,写入WAV文件。它根据指定的参数将音频数据保存到文件中。
示例
在下面的示例中,使用wave模块将pyttsx3生成的WAV音频数据保存到WAV文件中。它打开临时WAV文件,设置输出文件的参数(如通道数、采样宽度、帧速率和压缩类型),并将音频帧写入名为”output_saved.wav”的输出文件中。
import wave
audio = open("output.wav", 'rb').read()
params = (2, 2, 44100, 0, 'NONE', 'not compressed')
with wave.open("output_saved.wav", 'wb') as audio_file:
audio_file.setparams(params)
audio_file.writeframes(audio)
输出
上面的图片显示,output.mp3文件被转换为 output_saved.wav 文件并保存在当前目录中。
方法3:使用soundfile库保存为WAV格式
soundfile库提供了一个全面的解决方案,用于将pyttsx3的结果保存为WAV格式。它提供了一个高级接口,用于读取和写入各种格式的音频数据。通过利用write()函数,您可以轻松地将pyttsx3生成的音频数据保存到一个新的WAV文件中。
语法
soundfile.write(output_path, audio_data, sample_rate)
在这里,使用soundfile.write(output_path, audio_data, sample_rate)和soundfile库将音频数据保存到文件中。它将包含音频样本的audio_data数组写入由output_path指定的文件,使用给定的sample_rate。这种语法提供了一种方便的方式,可以将音频数据保存到具有所需采样率和文件路径的WAV文件中。
示例
在下面的示例中,我们使用soundfile库从pyttsx3生成的临时WAV文件中读取音频数据和采样率。然后,使用write()函数将音频数据保存到名为”output_saved.wav”的新的WAV文件中。soundfile库提供了一种简单的方式,可以将音频数据保存到具有可自定义选项的WAV文件中。
import soundfile as sf
audio, sample_rate = sf.read("output.wav")
sf.write("output_saved.wav", audio, sample_rate)
输出
在这里,mp3文件被转换为 .wav 文件,并保存为一个 output_saved.wav 文件,保存在与mp3文件相同的目录中。
结论
在本文中,我们讨论了如何通过将pyttsx3的结果保存为mp3或WAV文件来将文本转换为语音。我们涵盖了必要的步骤,从安装pyttsx3到初始化引擎,合成语音以及将输出保存到音频文件中。通过遵循这些步骤,您可以利用pyttsx3的功能生成高质量的语音,并将其以所需格式保存,以供应用程序或项目进一步使用。