# tts_vibevoice_cli **Repository Path**: sunshinewithmoonlight/tts_vibevoice_cli ## Basic Information - **Project Name**: tts_vibevoice_cli - **Description**: VibeVoice 长文本语音合成工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-14 - **Last Updated**: 2025-12-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VibeVoice 分段生成脚本 (tts_vibevoice_cli.py) 长文本 TTS 分段生成工具,支持多说话者,专为 macOS MPS 设备优化。 ## 功能特性 - **多说话者支持**:每个 Speaker 可使用不同声音 - 智能语义分片:按段落和句子边界切分,保持语义完整性 - 内存优化:每段生成后释放显存,支持长文本生成 - 音频后处理:RNNoise 降噪 + EBU R128 音量标准化 - 离线模式:优先加载本地模型缓存 ## 依赖 - Python 3.10+ - PyTorch (MPS 支持) - ffmpeg (含 arnndn 滤镜) - VibeVoice 模型 ## 环境部署(macOS) ```bash # 运行部署脚本(安装依赖) bash setup.sh ``` ### 激活虚拟环境 部署完成后,以及每次新开终端时,需根据你的 shell 激活虚拟环境: | Shell | 激活命令 | |-------|----------| | bash/zsh | `source .venv/bin/activate` | | fish | `source .venv/bin/activate.fish` | | csh/tcsh | `source .venv/bin/activate.csh` | | PowerShell | `.venv/bin/activate.ps1` | ## 使用方法 ### 单说话者 ```bash python3 tts_vibevoice_cli.py --txt_path VibeVoice/demo/text_examples/1p_vibevoice.txt \ --voice VibeVoice/demo/voices/zh-Anchen_man_bgm.wav ``` ### 多说话者 输入文件需包含 `Speaker N:` 格式(参考 `VibeVoice/demo/text_examples/2p_yayi.txt`): ```text Speaker 1: 波奇酱你搁这儿呢啊! 虽然不知道你咋整的... Speaker 2: 卧槽! 这谁啊? Speaker 1: 别整那些没用的了! ``` 执行命令: ```bash python3 tts_vibevoice_cli.py -o . --txt_path VibeVoice/demo/text_examples/2p_yayi.txt --speaker-format \ --voice 1:VibeVoice/demo/voices/zh-Bowen_man.wav \ --voice 2:VibeVoice/demo/voices/zh-Xinran_woman.wav ``` ### 完整参数 ```bash python3 tts_vibevoice_cli.py \ --txt_path VibeVoice/demo/text_examples/4p_climate_45min.txt \ --speaker-format \ --voice 1:VibeVoice/demo/voices/en-Alice_woman.wav \ --voice 2:VibeVoice/demo/voices/en-Carter_man.wav \ --voice 3:VibeVoice/demo/voices/en-Frank_man.wav \ --voice 4:VibeVoice/demo/voices/en-Maya_woman.wav \ --model_path microsoft/VibeVoice-1.5b \ --output_dir ./outputs \ --inference_steps 5 \ --chunk_duration 60 ``` ### 参数说明 | 参数 | 默认值 | 说明 | |------|--------|------| | `-t`, `--txt_path` | (必填) | 输入文本文件路径 | | `-v`, `--voice` | (必填) | 声音文件路径,可多次指定。格式: `/path/to/voice.wav` 或 `N:/path/to/voice.wav` | | `--model_path` | `microsoft/VibeVoice-1.5b` | 模型路径或 HuggingFace 模型名 | | `--output_dir` | 输入文件所在目录 | 输出目录 | | `--inference_steps` | `5` | DDPM 推理步数(越大质量越高但越慢) | | `--chunk_duration` | `60` | 每片目标时长(秒) | | `--speaker-format` | `false` | 输入文件已包含 "Speaker N:" 格式 | | `--no-normalize` | - | 禁用音量标准化 | | `--no-denoise` | - | 禁用 RNN 降噪 | ### 声音配置格式 `--voice` 参数支持两种格式: 1. **简单格式**:`--voice /path/to/voice.wav` - 所有说话者使用同一个声音 2. **映射格式**:`--voice 5:/path/to/voice_a.wav --voice 7:/path/to/voice_b.wav` - 为每个 Speaker ID 指定不同声音文件 - Speaker ID 与输入文件中的编号对应(可以是任意数字,如 5、7、100 等) - 脚本会自动将 Speaker ID 重映射为连续编号,确保声音正确对应 ### 合并模式 单独合并已生成的分片音频: ```bash python3 tts_vibevoice_cli.py merge \ --input "outputs/story_*/chunk_*.wav" \ --output outputs/final.wav ``` ### 降噪模式 对单个音频文件进行 RNN 降噪: ```bash python3 tts_vibevoice_cli.py denoise \ --input audio.wav \ --output audio_denoised.wav ``` 如果不指定 `--output`,默认输出为 `输入文件名_denoised.wav`。 ## 输入文本格式 ### 纯文本(默认) 自动分配给 Speaker 0: ```text 这是第一段内容。 这是第二段内容。 ``` ### Speaker 格式(`--speaker-format`) ```text Speaker 1: 主持人的台词。 Speaker 2: 嘉宾的台词。 Speaker 1: 主持人继续说。 ``` **注意**:Speaker ID 与 `--voice N:path` 中的 N 对应。ID 可以是任意数字(如 5、7),脚本会自动处理映射。 ## 输出文件 最终输出文件与输入文本文件同名,保存在 `--output_dir` 指定的目录(默认为输入文件所在目录): ``` {output_dir}/{input_filename}.wav ``` 分片音频存放在临时目录 `/tmp/tts_vibevoice_*`,生成完成后自动清理。 ## 时长估算 - 中文:约 4 字/秒 - 英文/数字:约 10 字符/秒 ## 致谢 - 感谢 [VibeVoice Community](https://github.com/vibevoice-community/VibeVoice) 维护的 VibeVoice 社区分支