MegaTTS3
综合介绍
MegaTTS 3是字节跳动团队开发的一个文本转语音(TTS)模型。 它最核心的功能是声音克隆,只需要一段几秒钟的简短音频,就能模仿这个人的声音说出任何话。 这个模型在技术上做了一些创新,比如它不是直接处理原始的音频文件,而是先用一个叫WaveVAE的工具把音频压缩成数字摘要,这样处理起来更快。 然后,它使用一种类似AI画画的“扩散”技术,从随机的噪音数据开始,一步步生成清晰的语音。 为了让生成的声音听起来更自然,不像机器人,它还用了一种叫做“稀疏对齐”的技术来处理停顿和语调,使得说话的节奏感更像真人。 目前这个工具支持中文和英文。 虽然字节跳动开源了模型代码,但最初没有提供声音克隆所需的关键部分(WaveVAE编码器),后来由社区开发者发布了兼容的编码器,才让所有人都能使用完整的克隆功能。
功能列表
- 高质量声音克隆: 仅需一段简短的音频(最短3秒),即可克隆出非常逼真的声音。
- 支持双语: 支持中文和英文的文本转语音,也支持中英混合的文本。
- 可控制的口音: 用户可以调整参数来控制生成语音的口音强度,比如让一个非母语者说出更标准的普通话。
- 轻量化模型: 模型参数量只有4.5亿,相对较小,运行效率更高。
- 命令行界面: 提供了命令行工具,用户可以直接在终端中使用。
- 网页操作界面: 提供了一个基于Gradio的网页界面,方便不熟悉命令行的用户上传音频和输入文本进行操作。
- 跨平台支持: 提供了在Linux、Windows和Docker环境下的详细安装和使用说明。
- 多样的子模块: 项目包含了多个可以独立使用的子模块,如用于语音和文本对齐的Aligner模型、用于字素到音素转换的G2P模型等。
使用帮助
MegaTTS 3的使用方式主要分为两种:一种是直接在电脑上配置环境运行,另一种是使用Docker容器。无论哪种方式,都需要先下载项目代码和预训练模型。
第一步:下载项目和模型
- 克隆代码库首先,你需要从GitHub上把项目的代码下载到你的电脑里。打开终端(在Windows上是命令提示符或PowerShell),然后输入以下命令:
git clone https://github.com/bytedance/MegaTTS3 cd MegaTTS3
- 下载预训练模型模型文件存放在Google Drive或Hugging Face上。你需要手动下载这些文件,然后在项目文件夹(
MegaTTS3
)里创建一个名为checkpoints
的文件夹,再把下载好的模型文件放进去。
第二步:配置运行环境(三选一)
方式一:在Linux上安装
- 创建并激活Conda环境为了不和你电脑上其他的Python项目冲突,建议创建一个独立的环境。
# 创建一个名为megatts3-env的Python 3.10环境 conda create -n megatts3-env python=3.10 # 激活这个新环境 conda activate megatts3-env
- 安装依赖库项目所需的库都记录在
requirements.txt
文件里了。pip install -r requirements.txt
- 设置环境变量告诉系统项目的根目录在哪里,这样程序才能找到需要的文件。
# 注意把 "/path/to/MegaTTS3" 替换成你自己的实际路径 export PYTHONPATH="/path/to/MegaTTS3:$PYTHONPATH"
如果你打算用GPU来加速处理(推荐),还需要指定使用的显卡。
export CUDA_VISIBLE_DEVICES=0
方式二:在Windows上安装(仍在测试中)
- 修改
requirements.txt
文件打开requirements.txt
文件,找到并删除(或在前面加#
注释掉)这一行:WeTextProcessing==1.0.4.1
。 - 创建并激活Conda环境和Linux上的操作一样。
conda create -n megatts3-env python=3.10 conda activate megatts3-env
- 安装依赖库
pip install -r requirements.txt conda install -y -c conda-forge pynini==2.1.5 pip install WeTextProcessing==1.0.3
- 安装PyTorch(GPU版本)如果你的电脑有英伟达显卡,建议安装GPU版本的PyTorch。
# 这个命令是针对CUDA 12.6的,请根据你的显卡驱动版本到PyTorch官网查找对应的安装命令 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu126
- 安装ffmpeg如果后面运行时提示缺少
ffmpeg
或ffprobe
,可以用Conda安装。conda install -c conda-forge ffmpeg
- 设置环境变量在Windows上设置环境变量的方式略有不同。
# PowerShell用户使用这个命令,注意把 "C:\path\to\MegaTTS3" 换成你的实际路径 $env:PYTHONPATH="C:\path\to\MegaTTS3;%PYTHONPATH%"
方式三:使用Docker(仍在测试中)
- 构建Docker镜像在运行命令前,确保你已经下载了预训练模型并放到了
checkpoints
文件夹里。docker build . -t megatts3:latest
- 运行容器如果你有GPU:
docker run -it -p 7929:7929 --gpus all -e CUDA_VISIBLE_DEVICES=0 megatts3:latest
如果只有CPU:
docker run -it -p 7929:7929 megatts3:latest
运行后,在浏览器里打开
http://0.0.0.0:7929
就可以看到操作界面了。
第三步:开始使用
MegaTTS 3官方并没有提供声音克隆所需的WaveVAE
编码器,所以你需要一个.wav
音频文件和它对应的.npy
潜在表示文件才能进行推理。 官方提供了一些预先提取好的样本供测试。
使用命令行
这是一个基础的命令格式,用来将文本转换成语音。
python tts/infer_cli.py \
--input_wav 'assets/Chinese_prompt.wav' \
--input_text "这里输入你想要转换的中文或英文文本。" \
--output_dir ./gen
--input_wav
: 提供声音样本的.wav
文件路径。--input_text
: 你希望模型朗读的文字。--output_dir
: 生成的音频文件保存的目录。
你还可以通过调整参数来控制效果:
--p_w
(Intelligibility Weight): 声音清晰度权重。数值越高,发音越标准清晰,但可能会损失一些声音的自然感。--t_w
(Similarity Weight): 声音相似度权重。数值越高,生成的声音就越像你提供的声音样本。
例如,生成带有口音的TTS:
python tts/infer_cli.py \
--input_wav 'assets/English_prompt.wav' \
--input_text '这是一条有口音的音频。' \
--output_dir ./gen \
--p_w 1.0 --t_w 3.0
使用网页界面
如果你不习惯用命令行,可以直接运行网页服务。
python tts/gradio_api.py
程序运行后,会显示一个网址(通常是http://127.0.0.1:7860
),在浏览器里打开它。界面上会有上传音频文件、输入文本框和调节参数的选项,操作非常直观。
应用场景
- 内容创作视频创作者或播客主播可以利用MegaTTS 3为他们的内容快速生成旁白。只需提供一个简短的声音样本,就可以用克隆出的声音朗读所有文稿,无需本人反复录音,大大提高了内容制作的效率。
- 个性化虚拟助手开发者可以利用这个工具为个人用户或企业创建具有特定声音的虚拟助手。用户可以把自己的声音或者喜欢的声音克隆给助手,让语音交互变得更加亲切和个性化。
- 语言学习辅助由于模型支持口音强度控制,语言学习者可以用它来生成不同口音的音频。比如,一个正在学习中文的外国人,可以用自己的声音样本生成标准普通话读音的课文,对比听自己的发音和标准发音的区别,辅助纠正口音。
- 有声读物制作对于有声读物的制作,MegaTTS 3可以克隆专业播音员或作者本人的声音,来朗读整本书的内容。这不仅可以降低录制成本,还能为听众提供带有特定情感和风格的听书体验。
QA
- 这个工具可以克隆任何人的声音吗?理论上是的。只要你能提供一个目标声音的音频文件(
.wav
格式)和对应的特征文件(.npy
格式),MegaTTS 3就可以模仿这个声音来生成语音。但需要注意的是,字节跳动官方为了安全起见,并没有公开发布用于从.wav
文件提取.npy
文件的编码器。 目前社区中出现了第三方开发的兼容编码器,让普通用户也能实现完整的克隆流程。 - 我可以用它来生成非中文和英文的语音吗?目前官方模型只明确支持中文和英文。 虽然理论上模型可能对其他语言有一定效果(特别是在跨语言克隆时),但效果无法保证,可能会出现奇怪的口音或发音错误。
- 生成的语音听起来有多自然?根据介绍,MegaTTS 3通过“稀疏对齐”等技术,在声音的停顿、节奏和语调上都做了优化,目标是生成非常接近真人说话的自然语音,避免了传统TTS工具的机器感。
- 什么是
p_w
和t_w
参数,它们有什么用?这两个是命令行和网页界面里的重要参数。p_w
代表“清晰度权重”,调高会让发音更标准、吐字更清晰,适合需要准确传达信息的场景。t_w
代表“相似度权重”,调高会让生成的声音更像你提供的原始声音样本,适合需要高度还原特定音色的场景。