VITS音频数据自动处理程序

VITS音频数据自动处理程序

​ 最近在玩自定义音色的模型,然后就找到了用的最多的这个项目,VITS。不过原本的,或者说最早的VITS程序已经没人维护了,设置原本的不支持中文,当初在尝试的时候改了好久后来实在是改不动就去网上找了找其他的。然后用的别人整合的So-VITS这个挺好用的然后还有其他版本都挺多的。但是不管什么版本作为最开始用来训练的音频数据还是需要自己来准备的。所以我这里就自己做了一个程序可以通过录制好的视频自动把视频内的语音拆分然后生成对应可以直接使用的音频数据。好接下来进行介绍。

1.视频的准备

​ 虽说可以对视频进行处理和识别。但是对于视频内的东西也还是有一定要求的。我这里以鸣潮内的长离作为例子。在其他的比如原神、明日方舟之类的游戏都可以尝试。

好开始说要求。

1.视频画质没有要求

​ 随便什么画质的视频都可以尽可能低一点会好因为这样不怎么占用存储空间,读取起来也会快一点

2.声音要求

​ 要求基本在这里,录制视频时要保证关闭游戏的其他音乐,不要出现先除了角色语音以外的其他声音。录制时不要开启麦克风录制这点很重要,一定要注意不要开麦克风。尽可能保证视频内的声音只有角色说话的声音。所以视频开始录制和结束录制的时间要找好。不然就后续剪辑一下。然后想角色语音比较多的就是。大概的地方就是像下面这样。

在这里插入图片描述

然后录制的时候记住一定一定一定要保证把那些背景音乐关闭!!!!一定要!!!

2.代码的实现

​ 代码的话不算长,但是也有些东西要提前准备,因为会使用到语音自动识别,所以会需要先准备好一个语音模型。我这里使用的是openai的whisper模型,最开始使用的是VOSK的模型,但是简单点的还行长的识别出来的太奇怪了。openai的就很方便。使用效果很好。

对应模型对应电脑要求

CPU 运行
  • 最低配置

    (适用于 tiny/base 模型):

    • 处理器: 双核处理器(如 Intel Core i3 或 AMD Ryzen 3)。
    • 内存 (RAM): 4 GB(tiny 模型)到 8 GB(base 模型)。
    • 存储: 至少 1-2 GB 空闲空间(用于模型文件和缓存)。
    • 性能: 处理速度较慢,尤其是长音频文件,可能需要几倍于音频时长的处理时间。
  • 推荐配置

    (适用于 small/medium 模型):

    • 处理器: 四核处理器(如 Intel Core i5 或 AMD Ryzen 5)。
    • 内存: 16 GB。
    • 存储: 5-10 GB(模型文件大小从几百 MB 到几 GB 不等)。
    • 性能: 处理中等长度音频(10-30 分钟)时较合理,但仍较慢。
  • 大型模型(如 large-v3):

    • 处理器: 高性能多核 CPU(如 Intel Core i7/i9 或 AMD Ryzen 7/9)。
    • 内存: 32 GB 或更高。
    • 存储: 10 GB+。
    • 性能: 仅靠 CPU 运行 large 模型会非常慢,推荐使用 GPU。
GPU 运行(推荐)
  • 显卡:
    • NVIDIA GPU(支持 CUDA),如 GTX 1060、RTX 2060 或更高。
    • 显存 (VRAM):
      • tiny: 2 GB。
      • base: 4 GB。
      • small: 6 GB。
      • medium: 8-10 GB。
      • large-v3: 10-12 GB(推荐 16 GB 以确保流畅运行)。
  • 内存: 16-32 GB(与 CPU 共享)。
  • 存储: 同 CPU 配置。
  • 性能: GPU 加速可将处理速度提高 10 倍以上,适合实时或批量处理。
模型文件大小
  • tiny: ~75 MB

  • base: ~142 MB

  • small: ~466 MB

  • medium: ~1.5 GB

  • large-v3: ~3.06 GB

    存储空间需预留这些大小,外加输入音频和输出文件空间。

模型下载链接
{
    "tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt",
    "tiny": "https://openaipublic.azureedge.net/main/whisper/models/65147644a518d12f04e32d6f3b26facc3f8dd46e5390956a9424a650c0ce22b9/tiny.pt",
    "base.en": "https://openaipublic.azureedge.net/main/whisper/models/25a8566e1d0c1e2231d1c762132cd20e0f96a85d16145c3a00adf5d1ac670ead/base.en.pt",
    "base": "https://openaipublic.azureedge.net/main/whisper/models/ed3a0b6b1c0edf879ad9b11b1af5a0e6ab5db9205f891f668f8b0e6c6326e34e/base.pt",
    "small.en": "https://openaipublic.azureedge.net/main/whisper/models/f953ad0fd29cacd07d5a9eda5624af0f6bcf2258be67c92b79389873d91e0872/small.en.pt",
    "small": "https://openaipublic.azureedge.net/main/whisper/models/9ecf779972d90ba49c06d968637d720dd632c55bbf19d441fb42bf17a411e794/small.pt",
    "medium.en": "https://openaipublic.azureedge.net/main/whisper/models/d7440d1dc186f76616474e0ff0b3b6b879abc9d1a4926b7adfa41db2d497ab4f/medium.en.pt",
    "medium": "https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt",
    "large-v1": "https://openaipublic.azureedge.net/main/whisper/models/e4b87e7e0bf463eb8e6956e646f1e277e901512310def2c24bf0e11bd3c28e9a/large-v1.pt",
    "large-v2": "https://openaipublic.azureedge.net/main/whisper/models/81f7c96c852ee8fc832187b0132e569d6c3065a3252ed18e56effd0b6a73e524/large-v2.pt",
    "large-v3": "https://openaipublic.azureedge.net/main/whisper/models/e5b1a55b89c1367dacf97e3e19bfd829a01529dbfdeefa8caeb59b3f1b81dadb/large-v3.pt",
    "large": "https://openaipublic.azureedge.net/main/whisper/models/e5b1a55b89c1367dacf97e3e19bfd829a01529dbfdeefa8caeb59b3f1b81dadb/large-v3.pt",
    "large-v3-turbo": "https://openaipublic.azureedge.net/main/whisper/models/aff26ae408abcba5fbf8813c21e62b0941638c5f6eebfb145be0c9839262a19a/large-v3-turbo.pt",
    "turbo": "https://openaipublic.azureedge.net/main/whisper/models/aff26ae408abcba5fbf8813c21e62b0941638c5f6eebfb145be0c9839262a19a/large-v3-turbo.pt",
}

这些下载链接在whisper库的__init__.py文件内都有可以自己查看。

完整代码

好的也不分析代码了我们来看看完整代码吧。代码进行过ai精简和分析愿意看的可以好好研究一下,不愿意的复制过去自己运行差了啥对应的补就好。

# 导入必要的库
import os  # 操作系统路径处理
from moviepy.editor import VideoFileClip  # 视频处理库
import whisper  # OpenAI的语音识别库
import opencc  # 简繁体转换工具
from pydub import AudioSegment  # 音频处理库

def extract_audio(video_path, output_wav="temp_audio.wav"):
    """从视频文件中提取音频并保存为WAV格式"""
    video = VideoFileClip(video_path)  # 加载视频文件
    audio = video.audio  # 提取音频轨道
    audio.write_audiofile(output_wav, fps=22050)  # 以22050Hz采样率保存音频
    return output_wav  # 返回生成的音频文件路径

def split_audio(audio_path, 
                output_dir="output4", 
                model_path="./model/medium.pt", 
                audio_prefix="changli", 
                path_prefix="data/changli/"):
    """核心处理函数:语音识别、音频分割和文件生成"""
    
    # 路径格式标准化处理
    path_prefix = path_prefix.rstrip("/") + "/"  # 确保路径前缀以斜杠结尾
    os.makedirs(output_dir, exist_ok=True)  # 创建输出目录(如果不存在)
    
    # 初始化模型和工具
    model = whisper.load_model(model_path)  # 加载Whisper语音识别模型
    converter = opencc.OpenCC('t2s')  # 创建繁简转换器(繁体转简体)

    # 语音识别处理
    result = model.transcribe(audio_path, language="zh", verbose=True)  # 识别中文语音
    segments = result["segments"]  # 获取时间分段信息

    # 准备音频处理
    audio = AudioSegment.from_wav(audio_path)  # 加载WAV音频文件
    file_list = []  # 初始化文件列表
    file_index = 1  # 文件编号计数器

    print("开始处理音频分割和识别...")

    # 遍历每个识别片段
    for segment in segments:
        start = segment["start"] * 1000  # 开始时间(秒转毫秒)
        end = segment["end"] * 1000  # 结束时间(秒转毫秒)
        text = segment["text"]  # 原始识别文本
        simplified_text = converter.convert(text)  # 转换为简体中文
        
        # 计算持续时间(秒)
        duration = (end - start) / 1000
        if duration >= 1.0:  # 过滤短于1秒的片段
            # 生成文件名和路径
            output_filename = f"{audio_prefix}_{file_index:03d}.wav"  # 格式化为三位数编号
            output_path = os.path.join(output_dir, output_filename)  # 完整输出路径
            
            # 音频分割处理
            segment_audio = audio[start:end]  # 截取音频片段
            segment_audio.export(output_path, format="wav")  # 保存为WAV文件
            
            # 控制台输出进度
            print(f"片段 {file_index:03d} ({os.path.basename(output_path)}): {simplified_text}")
            
            # 构建文件列表条目
            formatted_path = f"{path_prefix}{output_filename}"  # 组合前缀和文件名
            file_list.append(f"{formatted_path}|{simplified_text}")  # 按格式添加到列表
            file_index += 1  # 递增文件编号

    # 写入文件列表
    with open(os.path.join(output_dir, "filelist.txt"), "w", encoding="utf-8") as f:
        f.write("\n".join(file_list))  # 将列表转换为换行分隔的文本

    return file_list  # 返回生成的文件列表

if __name__ == "__main__":
    # ====================== 用户可配置参数 ======================
    video_path = "mp4flie/changli2_1.mp4"    # 原始视频文件路径
    model_path = "./model/medium.pt"         # Whisper模型文件路径
    output_dir = "output5"                   # 输出文件保存目录
    audio_prefix = "changli"                 # 输出音频文件名的前缀
    path_prefix = "data/changli/"            # filelist中显示的路径前缀
    # ==========================================================

    # 执行处理流程
    audio_path = extract_audio(video_path)  # 第一步:提取音频
    split_audio(  # 第二步:处理音频
        audio_path,
        output_dir=output_dir,
        model_path=model_path,
        audio_prefix=audio_prefix,
        path_prefix=path_prefix
    )
    print(f"处理完成!分割后的音频和文件列表已保存在 {output_dir}")

然后运行过程中会出现识别结果类似这样

在这里插入图片描述

可以看到识别出来的文本为繁体,这个是因为我使用的模型的原因,使用更好的模型理论上可以解决这个问题,但是性能消耗也高了。所以有使用opencc这个库进行繁体转简体就可以有如下结果

在这里插入图片描述

可以看的还是不错的。但是一些专用词,或者说同音字就不太准,但是不影响训练。应该。

<think>好的,我现在需要帮助用户查找关于VITS Svc4.1的教程和信息。首先,用户提到了参考站内引用中的两篇文章,一个是CSDN的博客,另一个是官方GitHub仓库。我需要先确认这些资源是否足够,或者是否需要补充其他信息。 首先,用户提供的引用[1]是一篇CSDN的博客,标题是“so-vits-svc4.1从零训练自己的模型。svc/rvc模型训练前的音频数据处理”,链接在这里。这篇文章可能详细介绍了如何准备训练数据,安装环境,以及具体的训练步骤。用户可能对数据预处理部分特别感兴趣,因为这是模型训练的关键步骤。我需要确保在回答中涵盖这些内容,并正确引用。 引用[2]是官方GitHub仓库,链接指向so-vits-svc的项目地址。官方仓库通常包含最新的代码、文档和基础教程,用户可能需要从这里获取最新的安装指南和配置说明。此外,官方文档可能还包含一些常见问题解答和社区支持信息,这对用户解决问题可能很有帮助。 接下来,用户询问的是关于VITS Svc4.1的教程和信息。我需要确保回答结构清晰,分步骤说明,并且每个部分都引用正确的来源。可能的结构包括安装指南、数据预处理、训练步骤、常见问题等。 同时,用户可能对实际应用场景和优化方法感兴趣,比如如何调整参数提高模型效果,或者如何处理不同的音频数据。根据示例中的问题生成部分,我需要生成相关的问题,帮助用户进一步探索。 需要注意的是,用户可能在使用过程中遇到环境配置问题,比如Python版本、依赖库冲突等。引用[1]中提到Python 3.8版本,这一点需要强调,避免用户使用不兼容的版本导致错误。 另外,数据预处理部分可能涉及音频分割、去噪、格式转换等步骤,这些都是训练前的必要操作。引用[1]中的博客可能详细介绍了这些步骤,因此在回答中需要提到并引用。 最后,生成相关问题时要考虑用户可能的后续需求,比如性能优化、应用案例、故障排除等,这些都能帮助用户更深入地理解和使用VITS Svc4.1。 总结来说,回答需要涵盖官方资源、社区教程、关键步骤和常见问题,同时结构清晰,引用正确,并生成相关的问题引导用户进一步学习。</think>### VITS Svc4.1 相关教程与信息 #### 1. **官方资源与基础教程** - **GitHub 仓库** So-vits-SVC 的官方项目地址提供了代码、文档和基础配置指南,包含环境依赖、安装步骤和基础模型训练方法[^2]。 主要步骤包括: - 安装 Python 3.8 环境(其他版本可能导致兼容性问题) - 克隆仓库并安装依赖: ```bash git clone https://github.com/svc-develop-team/so-vits-svc pip install -r requirements.txt ``` - 配置预训练模型和数据集路径 - **数据预处理** 训练前需对音频数据进行标准化处理,例如: - 格式统一为 WAV - 采样率调整为 44100 Hz - 静音段切除与噪声过滤 具体方法可参考引用[1]中的音频分割与特征提取步骤[^1]。 #### 2. **训练流程详解** - **数据集准备** 建议使用单人纯净语音数据,时长至少 1 小时。数据需按以下结构组织: ``` dataset/ ├── train/ │ └── audio_1.wav │ └── audio_2.wav └── val/ └── audio_test.wav ``` - **模型训练命令** ```bash python train.py -c configs/config.json -m svc_model ``` 配置文件 `config.json` 需指定学习率、批次大小等参数[^2]。 #### 3. **常见问题与优化** - **GPU 显存不足** 可尝试降低批次大小(`batch_size`)或使用梯度累积。 - **音质不理想** 检查音频预处理是否彻底,或调整模型中的傅里叶变换参数(如 `n_fft`)。 #### 4. **扩展应用** - **实时语音转换** 结合 ASR(自动语音识别)和 Vocoder(声码器)实现实时变声。 - **多语言支持** 通过替换音素编码器支持其他语言(如英文、日文)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值