Linux系统完全可以实现文字转语音功能,而且有多种成熟的方案可供选择,用户可以根据自己的使用场景和需求挑选合适的工具。

Linux自带的基础TTS工具
很多Linux发行版默认就预装了简单的文字转语音工具,最常见的就是espeak,它是一款轻量级的开源语音合成引擎,支持多种语言和发音调整。
espeak基础使用方法
如果系统没有预装espeak,可以通过包管理器安装,比如Ubuntu/Debian系统执行以下命令:
sudo apt update sudo apt install espeak
安装完成后就可以直接在命令行使用,把指定文字转换为语音播放:
# 直接朗读后面的文字内容 espeak "欢迎使用Linux文字转语音功能" # 调整语速,数值越大语速越快,默认是160 espeak -s 200 "这是调整语速后的朗读效果" # 调整音量,范围0到200,默认是100 espeak -a 150 "这是调整音量后的朗读效果" # 保存为wav音频文件 espeak -w output.wav "这段内容会保存为音频文件"
festival语音工具
festival是另一款经典的Linux语音合成工具,语音效果比espeak更自然,支持更多的自定义配置,安装方式如下:
# Ubuntu/Debian安装 sudo apt install festival festival-freebsoft-utils # CentOS/RHEL安装 sudo yum install festival
festival有两种使用方式,一种是直接传入文本朗读:
echo "这是使用festival朗读的内容" | festival --tts
另一种是进入交互模式,在交互模式下可以执行更多操作:
# 进入festival交互模式 festival # 交互模式下朗读文本 (SayText "交互模式下的朗读内容") # 退出交互模式 (quit)
更自然的第三方TTS引擎
如果对语音自然度要求比较高,自带的espeak和festival可能无法满足需求,可以选择以下更专业的开源引擎。
piper TTS
piper是一款基于机器学习的新一代轻量级语音合成引擎,语音自然度很高,支持多种语言,而且运行速度快,适合嵌入式场景和桌面使用。
安装piper后可以通过以下命令使用:
# 直接朗读文本 piper --model zh_CN-huayan-medium.onnx --output_file - <<< "这是piper的朗读效果" | aplay # 保存为wav文件 piper --model zh_CN-huayan-medium.onnx --output_file output.wav <<< "保存为音频文件的内容"
其中模型文件需要提前下载,不同语言有不同的模型可选,中文模型可以提供比较流畅的中文朗读效果。
Coqui TTS
Coqui TTS是另一个高质量的开源语音合成项目,支持多语言,提供多种预训练模型,语音自然度接近真人水平。
安装后可以通过Python代码调用实现文字转语音:
from TTS.api import TTS # 初始化TTS模型,选择中文模型 tts = TTS(model_name="tts_models/zh-CN/baker/tacotron2-DDC-GST", progress_bar=False, gpu=False) # 合成语音并保存为文件 tts.tts_to_file(text="这是Coqui TTS的中文朗读效果", file_path="coqui_output.wav")
不同TTS方案对比
为了帮助用户选择合适的方案,以下是几种常用Linux TTS工具的特点对比:
| 工具名称 | 语音自然度 | 安装难度 | 资源占用 | 适用场景 |
|---|---|---|---|---|
| espeak | 较低 | 低 | 极低 | 快速测试、低资源设备、简单提示语音 |
| festival | 中等 | 中等 | 较低 | 基础语音合成需求、自定义配置较多的场景 |
| piper TTS | 高 | 中等 | 低 | 对自然度有要求、需要快速响应的场景 |
| Coqui TTS | 很高 | 高 | 较高 | 高质量语音合成、应用程序集成 |
常见问题解答
为什么执行TTS命令后没有声音
首先检查系统音频服务是否正常运行,然后确认默认音频输出设备是否正确,部分TTS工具需要手动指定音频输出,比如piper需要配合aplay工具播放音频。
如何让TTS支持更多语言
大部分TTS工具都支持多语言,只需要安装对应的语言包或者下载对应语言的模型文件即可,比如espeak可以通过espeak --voices命令查看支持的语言列表。
可以批量转换文本文件为语音吗
可以,通过shell脚本遍历文本文件内容,逐行调用TTS命令即可实现批量转换,比如批量转换txt文件为wav音频:
#!/bin/bash
# 遍历当前目录下所有txt文件
for file in *.txt; do
# 获取文件名不带后缀
filename=${file%.txt}
# 使用espeak转换内容,每行生成一个音频文件
while IFS= read -r line; do
espeak -w "${filename}_${RANDOM}.wav" "$line"
done < "$file"
done
LinuxTTStext_to_speech语音合成修改时间:2026-06-15 17:33:40