(附代码)保姆级教程:用 Python 将 M4A 转换为 WAV 和 WRD 文件
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
一、环境准备
1.安装 Python 和必要依赖
2.安装 FFmpeg
3.安装ffmpy
4.下载 Vosk 模型
二、代码
三、总结
前言
在语音识别和音频处理领域,我们经常需要对音频文件格式进行转换,例如将 M4A
格式转为更常见的 WAV
格式。更进一步,在语音识别任务中,还需要将音频文件转录成文字或生成时间戳标记的 WRD
文件。
本文将手把手教你使用 Python,从零开始实现以下目标:
- 将 M4A 转换为 WAV:支持单文件或批量转换。
- 生成 WRD 文件:通过语音识别提取音频中的文字及时间戳。
无论你是新手还是音频处理领域的入门者,这篇教程都适合你!
一、环境准备
1.安装 Python 和必要依赖
首先,确保你的系统中安装了 Python(建议 Python 3.8+)。然后安装需要用到的 Python 包:
pip install pydub wave numpy vosk
依赖说明:
wave
:标准库,用于处理 WAV 文件。vosk
:用于语音识别,生成 WRD 文件。2.安装 FFmpeg
pydub
需要 FFmpeg 来处理音频文件格式。如果你的系统未安装 FFmpeg,请按以下步骤操作:
- 前往 FFmpeg 官方网站 下载 Windows 二进制文件。
- 解压后将
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 预训练模型。
步骤
- 前往 Vosk 模型下载页面。
- 根据需要选择语言模型:
- 英文:
vosk-model-en-us-0.22
- 中文:
vosk-model-cn-0.22
- 下载完成后解压到本地,例如解压到
./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 转 WAV 和 WAV 转 WRD 的全流程。无论是文件格式转换,还是语音识别生成时间戳,代码都具有可复用性。
希望这篇保姆级教程对你有所帮助!如果觉得有用,欢迎点赞和分享!
作者:深度学习浪人