(附代码)保姆级教程:用 Python 将 M4A 转换为 WAV 和 WRD 文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

一、环境准备

1.安装 Python 和必要依赖

2.安装 FFmpeg

3.安装ffmpy

4.下载 Vosk 模型

二、代码

三、总结


前言

在语音识别和音频处理领域,我们经常需要对音频文件格式进行转换,例如将 M4A 格式转为更常见的 WAV 格式。更进一步,在语音识别任务中,还需要将音频文件转录成文字或生成时间戳标记的 WRD 文件。

本文将手把手教你使用 Python,从零开始实现以下目标:

  1. 将 M4A 转换为 WAV:支持单文件或批量转换。
  2. 生成 WRD 文件:通过语音识别提取音频中的文字及时间戳。

无论你是新手还是音频处理领域的入门者,这篇教程都适合你!


一、环境准备

1.安装 Python 和必要依赖

首先,确保你的系统中安装了 Python(建议 Python 3.8+)。然后安装需要用到的 Python 包:

pip install pydub wave numpy vosk

依赖说明:

  • pydub:用于音频文件的加载与格式转换。
  • wave:标准库,用于处理 WAV 文件。
  • vosk:用于语音识别,生成 WRD 文件。
  • 2.安装 FFmpeg

    pydub 需要 FFmpeg 来处理音频文件格式。如果你的系统未安装 FFmpeg,请按以下步骤操作:

    1. 前往 FFmpeg 官方网站 下载 Windows 二进制文件。
    2. 解压后将 bin 文件夹路径添加到系统环境变量:

    首先打开系统环境变量,点击环境变量

    点击PATH,然后编辑

    点击新建

    将bin文件夹的路径添加后一直点击确认

    然后按 ctrl+r 输入cmd,点击确认

    在终端输入以下命令看是否成功配置

    ffmpeg -i

    出现如下即配置成功

    3.安装ffmpy

    ffmpy 是一个 Python 包,它提供了一个简单的接口来调用 FFmpeg 命令行工具。ffmpy 可以通过 pip 安装。但如果默认的 PyPI 镜像访问缓慢,可以使用国内镜像(如清华大学镜像):

    pip install ffmpy -i https://pypi.tuna.tsinghua.edu.cn/simple

    4.下载 Vosk 模型

    为了实现语音识别,我们需要下载适合的 Vosk 预训练模型。

    步骤

    1. 前往 Vosk 模型下载页面。
    2. 根据需要选择语言模型:
    3. 英文vosk-model-en-us-0.22
    4. 中文vosk-model-cn-0.22
    5. 下载完成后解压到本地,例如解压到 ./vosk-model/ 文件夹。

    恭喜!!环境已配置成功

    二、代码

    以下是完整代码,支持 M4A 到 WAV 和 WRD 的全流程处理:

    import os
    import wave
    import json
    from pydub import AudioSegment
    from vosk import Model, KaldiRecognizer
    
    # 文件夹路径
    input_folder = "./data/"
    wav_folder = "./output_wav/"
    wrd_folder = "./output_wrd/"
    os.makedirs(wav_folder, exist_ok=True)
    os.makedirs(wrd_folder, exist_ok=True)
    
    # 加载 Vosk 模型
    model_path = "./vosk-model-cn-0.22"
    model = Model(model_path)
    
    # 批量处理 M4A 文件
    for file_name in os.listdir(input_folder):
        if file_name.endswith(".m4a"):
            input_path = os.path.join(input_folder, file_name)
            wav_path = os.path.join(wav_folder, os.path.splitext(file_name)[0] + ".wav")
            wrd_path = os.path.join(wrd_folder, os.path.splitext(file_name)[0] + ".wrd")
    
            # M4A 转 WAV
            song = AudioSegment.from_file(input_path, format="m4a")
            song.export(wav_path, format="wav")
            print(f"转换完成:{wav_path}")
    
            # WAV 转 WRD
            with wave.open(wav_path, "rb") as wf:
                rec = KaldiRecognizer(model, wf.getframerate())
                rec.SetWords(True)
                results = []
                while True:
                    data = wf.readframes(4000)
                    if len(data) == 0:
                        break
                    if rec.AcceptWaveform(data):
                        results.append(json.loads(rec.Result()))
                results.append(json.loads(rec.FinalResult()))
    
            # 写入 WRD 文件
            with open(wrd_path, "w", encoding="utf-8") as wrd_file:
                for result in results:
                    for word in result.get("result", []):
                        start_time = int(word["start"] * 1000)
                        end_time = int(word["end"] * 1000)
                        wrd_file.write(f"{start_time} {end_time} {word['word']}\n")
            print(f"生成 WRD 文件成功:{wrd_path}")
    


    总结

    本文通过 Python 和相关工具实现了 M4A 转 WAVWAV 转 WRD 的全流程。无论是文件格式转换,还是语音识别生成时间戳,代码都具有可复用性。

    希望这篇保姆级教程对你有所帮助!如果觉得有用,欢迎点赞和分享!

    作者:深度学习浪人

    物联沃分享整理
    物联沃-IOTWORD物联网 » (附代码)保姆级教程:用 Python 将 M4A 转换为 WAV 和 WRD 文件

    发表回复