用户一边朗读文字稿 texttxt 文件一边录音得到 audiomp3 文件文字稿一行就是一句话如何通过 python 第三方库不用在线语音识别服务获得文字稿每行文字在录音中的起始时间
要实现这个功能,需要使用 Python 中的音频处理库 librosa 和文本处理库 nltk。具体步骤如下:
- 安装 librosa 和 nltk:
pip install librosa
pip install nltk
- 加载音频文件:
import librosa
audio_file = 'audio.mp3'
sig, sr = librosa.load(audio_file, sr=16000)
其中,sr 表示采样率,这里设置为 16000。
- 分割音频:
import numpy as np
frame_length = int(0.025 * sr)
frame_step = int(0.01 * sr)
frames = librosa.util.frame(sig, frame_length=frame_length, hop_length=frame_step).T
这里采用的是帧长为 25 毫秒,帧移为 10 毫秒的方式分割音频。
- 加载文字稿:
with open('text.txt', 'r') as f:
text = f.readlines()
- 对于每一行文字,使用 nltk 分词:
import nltk
tokens = []
for line in text:
tokens.append(nltk.word_tokenize(line))
- 对于每一个分词,找到其在音频中的起始时间:
start_times = []
end_times = []
for i in range(len(tokens)):
start_time = 0
end_time = 0
for j in range(len(frames)):
if tokens[i][0] in librosa.feature.extract_features(frames[j:j+1], sr=sr)[0]:
start_time = j * frame_step / sr
end_time = (j + len(tokens[i]) - 1) * frame_step / sr
break
start_times.append(start_time)
end_times.append(end_time)
在这个过程中,我们使用 librosa 的 extract_features 函数提取音频的特征,然后在特征中寻找当前分词的第一个词,并记录下其在音频中的起始和结束时间。
最终,start_times 和 end_times 就是每一行文字在音频中的起始和结束时间了。
原文地址: http://www.cveoy.top/t/topic/GB7 著作权归作者所有。请勿转载和采集!