英语听力转文本
为了应对英语听力,学习英语是不存在的,所以有了该脚本。
用 pythong3 调用百度AI语音识别转换为文字。因为百度AI不在场MP3格式,所以转换为wav格式。最大长度不能超过60秒,所以截取为55秒。有担心把单词截掉了,所以第二个55秒,往前移动5秒。即055秒截一下,50105秒截一下。。。
流程
将 233.MP3 文件每55秒截取为 16000比特率单身到的 wav,调用百度AI语音识别转换为文字,储存到 ytext.txt 文件中
源码
要修改为自己百度的 Key
源码已上传到 github项目
from pydub import AudioSegment
from aip import AipSpeech
import time
import os
APP_ID = 'xxxxxx'
API_KEY = 'xxxxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxx'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def listen(save_name1):
with open(save_name1, 'rb') as f:
audio_data = f.read()
result = client.asr(audio_data, 'wav', 16000, {
'dev_pid': 1737,
})
result_text = result["result"][0]
return result_text
soundy = AudioSegment.from_file('233.mp3')
soundytime=soundy.duration_seconds
a = int(soundytime)
b = 55
st = 0
sp = 55000
print("英语听力转文本,缺点没有标点符号")
print("学习英语,不可能的,这辈子都不存在")
print("原始音频长度:"+str(a)+"秒\n稍后分析出的内容会储存到 ytxt.txt 中")
song = AudioSegment.from_mp3('233.mp3').set_frame_rate(16000).set_channels(1).set_sample_width(2)
starttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
ytxt = open('ytxt.txt','a')
ytxt.write('开始时间:'+starttime+"\n")
ytxt.close()
while a>b:
word = song[st:sp]
save_name = (str(st/1000)+"-"+str(sp/1000)+".wav")
word.export(save_name, format="wav")
print("正在分析文件"+str(st/1000)+"秒到"+str(sp/1000)+"秒的音频")
btxt = listen(save_name)
ytxt = open('ytxt.txt','a')
ytxt.write(str(st/1000)+"秒到"+str(sp/1000)+"秒的内容:\n"+btxt+"\n")
ytxt.close()
os.remove(save_name)
st = sp-5000
sp = st+55000
a = a-b+5
sp = st+(a*1000)
word = song[st:sp]
save_name = (str(st/1000)+"-"+str(sp/1000)+".wav")
word.export(save_name, format="wav")
starttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("正在分析文件"+str(st/1000)+"秒到"+str(sp/1000)+"秒的音频")
btxt = listen(save_name)
ytxt = open('ytxt.txt','a')
enttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
ytxt.write(str(st/1000)+"秒到"+str(sp/1000)+"秒的内容:\n"+btxt+"\n结束时间"+enttime+"\n------分割线------\n\n")
ytxt.close()
os.remove(save_name)
版本2.0
添加了一些交互
from pydub import AudioSegment
from aip import AipSpeech
import time
import os
import urllib
import requests
import re
APP_ID = 'xxxxxx'
API_KEY = 'xxxxxxxxxxxxxx'
SECRET_KEY = 'xxxxxxxxxxxxxx'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
def listen(save_name1):
with open(save_name1, 'rb') as f:
audio_data = f.read()
result = client.asr(audio_data, 'wav', 16000, {
'dev_pid': 1737,
})
result_text = result["result"][0]
return result_text
starttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
ytxt = open('ytxt.txt','w+')
ytxt.write('开始时间:'+starttime+"\n")
ytxt.close()
print("英语听力转文本,缺点没有标点符号")
print("学习英语,不可能的,这辈子都不存在")
f = 0
while f==0:
inmp3 = input(u'请输入mp3文件的名称或者mp3的url:\n默认为 233.mp3\n')
if inmp3=="":
inmp3 = "233.mp3"
else:
s = re.search("https?://", inmp3)
if s:
print("正在下载文件")
urllib.request.urlretrieve(inmp3, "233.mp3")
print("下载成功")
inmp3 = "233.mp3"
m = re.search(".mp3", inmp3)
if m==None:
inmp3 = inmp3+".mp3"
if os.path.exists(inmp3)==False:
print("没有发现"+inmp3+"文件")
else:
f=1
song = AudioSegment.from_mp3(inmp3).set_frame_rate(16000).set_channels(1).set_sample_width(2)
songtime = song.duration_seconds
a = int(songtime)
print("原始音频长度:"+str(a)+"秒\n稍后分析出的内容会储存到 ytxt.txt 中")
b = 55
st = 0
sp = 55000
while a>b:
word = song[st:sp]
save_name = (str(st/1000)+"-"+str(sp/1000)+".wav")
word.export(save_name, format="wav")
print("正在分析文件"+str(st/1000)+"秒到"+str(sp/1000)+"秒的音频")
btxt = listen(save_name)
ytxt = open('ytxt.txt','a')
ytxt.write(str(st/1000)+"秒到"+str(sp/1000)+"秒的内容:\n"+btxt+"\n")
ytxt.close()
ltxt = open('ltxt.txt','a')
ltxt.write("\n@"+btxt+"@\n")
ltxt.close()
os.remove(save_name)
st = sp-5000
sp = st+55000
a = a-b+5
sp = st+(a*1000)
word = song[st:sp]
save_name = (str(st/1000)+"-"+str(sp/1000)+".wav")
word.export(save_name, format="wav")
starttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print("正在分析文件"+str(st/1000)+"秒到"+str(sp/1000)+"秒的音频")
btxt = listen(save_name)
ytxt = open('ytxt.txt','a')
enttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
ytxt.write(str(st/1000)+"秒到"+str(sp/1000)+"秒的内容:\n"+btxt+"\n结束时间"+enttime+"\n------分割线------\n\n")
ytxt.close()
ltxt = open('ltxt.txt','a')
ltxt.write("\n@"+btxt+"@\n")
ltxt.close()
os.remove(save_name)
pyinstaller 打包
pyinstaller -F xxx.py
原文作者: ababwbq
原文链接: https://www.unkaer.cf/totext.html
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)