本文展示如何使用开源项目
so-vits-svc
实现声音克隆与视频音轨替换流程,适用于 AI 音频工程、声音合成等学习场景。所述内容仅限技术交流,禁止用于非法用途。
一、项目背景
此项目采用 so-vits-svc 4.1 开源框架,实现了“用明星声音替换视频原音轨”的实际测试。
整个过程分为 4 大部分:
- 抽取明星声音并培育声音克隆模型
- 用户输入声音进行转换处理
- 生成新音轨后替换原视频声音
- (可选)使用浅扩散增强音质
二、环境配置 & 源码下载
# 创建虚拟环境
conda create -n svc-env python=3.8 -y
conda activate svc-env# 克隆项目
git clone git@github.com:svc-develop-team/so-vits-svc.git
cd so-vits-svc
git checkout 4.1-Stable# 安装依赖
pip install -r requirements.txt
确保路径中有:
inference_main.py
logs/
用于存放模型dataset_raw/
用于处理训练数据raw/
用于进行声音转换测试
三、视频提音 & 数据准备
1.用 ffmpeg 抽取明星视频声音
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 44100 -ac 1 output.wav
2.分割音频为多段 5~15s 小段音频,并放入:
dataset_raw/my_star/
├── 001.wav
├── 002.wav
└── ...
3.执行训练前处理
python resample.py
python preprocess_flist_config.py --speech_encoder vec768l12
python preprocess_hubert_f0.py --f0_predictor rmvpe
4.进行模型训练
python train.py -c configs/config.json -m my_star
推荐 epoch 数至少 300~500,最佳用 G_500.pth 进行推理
四、进行转声推理
1.放入用户声音文件
raw/input.wav
2.执行推理:
python inference_main.py \-m logs/my_star/G_500.pth \-c logs/my_star/config.json \-n input.wav \-s my_star \-t 0
输出文件会生成在:
results/result_input_my_star_0key_sovits.wav
五、替换原视频音轨
ffmpeg -i input_video.mp4 \-i results/result_input_my_star_0key_sovits.wav \-map 0:v -map 1:a -c:v copy -shortest output_video.mp4
这样就完成了“用明星声音说你自己视频内容”的全过程
六、常见问题排查与解决
问题 | 原因 | 解决 |
---|---|---|
全是电流声 | 训练 epoch 太少 / 数据不纯 | 推荐训练 500+ epoch,使用更多无噪音音频 |
转声成效不精确 | F0 提取不准 | 试用 --f0_predictor crepe/dio 或 --auto_predict_f0 |
声音成效过低 | 少数数据读不出来主要特征 | 使用浅扩散 --shallow_diffusion 增强 |
七、对比常见的语音克隆方案
方案 | 特点 | 是否可进行语音替换 |
---|---|---|
so-vits-svc | 声音转换 (SVC),有模型需进行训练 | 是 |
SV2TTS / Real-Time-Voice-Cloning | 支持文字转声,不优化音高 | 是(有限制) |
Bark / XTTS | 可支持多类情感控制,生成效果好 | 是 |
ElevenLabs | SaaS类服务,优化好,非开源 | 是(但有付费) |
八、总结
今天我们实战完成了从明星视频提音 → 培育 so-vits-svc 模型 → 声音克隆 → 替换原视频声音的全流程,实际效果良好,应用环境可推广。
如需实现 Web UI / API 服务 / Flask 文本转声方案,我也可以接着支持。
🌟这篇文章由 YoanAILab 完成,欢迎点赞、收藏、分享