我有ar-01.wav
格式的6秒钟录音(wav
)。我想使用亚马逊服务将音频文件转录为文本。为此,我创建了名称为test-voip
的存储桶,并将音频文件上传到存储桶。当我尝试将语音转换为文本时,6秒钟的音频需要13.12秒。这是我的代码段
session = boto3.Session(aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key)
transcribe = session.client('transcribe', region_name='us-east-1')
job_name = "audio_text_trail9"
job_uri = "https://test-voip.s3.amazonaws.com/ar-01.wav"
transcribe.start_transcription_job(
TranscriptionJobName=job_name,
Media={'MediaFileUri': job_uri},
MediaFormat='wav',
LanguageCode='en-US',
MediaSampleRateHertz=16000
)
while True:
status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED', 'FAILED']:
break
print("converted to text")
myurl = status['TranscriptionJob']['Transcript']['TranscriptFileUri']
print(myurl)
Text_Data = (requests.get(myurl).json())['results']['transcripts'][0]['transcript']
print(Text_data)
在这里,我的代码工作正常,即使在嘈杂的音频上,准确性也很棒,但是时间消耗太高。我在哪里犯了错误,是什么拖延了这么多的时间来转录?一旦获得转录的json
,提取所需信息的时间就可以忽略不计了。如何加快转录过程,或者还有其他更好的方法吗?
答案 0 :(得分:0)
对我来说,AWS Transcribe花了20分钟来转录一个17分钟的文件。一种可能的想法是将音频文件分成多个块,然后在EC2上使用具有16个内核的多处理程序,例如g3.4xlarge实例。
将音频文件分为16个部分,静默阈值为-20,然后转换为.wav:
$ sudo apt-get install mp3splt
$ sudo apt-get install ffmpeg
$ mp3splt -s -p th=-20,nt=16 splitted.mp3
$ ffmpeg -i splitted.mp3 splitted.wav
然后,将多重处理与16个内核同时进行转录,为TranscriptionJobName和job_uri中的每一个映射您的转录函数(transcribe.start_transcription_job):
import multiprocessing
output=[]
data = range(0,16)
def f(x):
job_name = "Name"+str(x)
job_uri = "https://s3.amazonaws.com/bucket/splitted"+str(x)+".wav"
transcribe.start_transcription_job(
TranscriptionJobName=job_name,
Media={'MediaFileUri': job_uri},
MediaFormat='wav',
LanguageCode='pt-BR',
OutputBucketName= "bucket",
MediaSampleRateHertz=8000,
Settings={"MaxSpeakerLabels": 2,
"ShowSpeakerLabels": True})
while True:
status = transcribe.get_transcription_job(TranscriptionJobName=job_name)
if status['TranscriptionJob']['TranscriptionJobStatus'] in ['COMPLETED','FAILED']:
break
def mp_handler():
p = multiprocessing.Pool(16)
r=p.map(f, data)
return r
if __name__ == '__main__':
output.append(mp_handler())
答案 1 :(得分:0)
我研究了没有运气的字幕速度保证
在this forum post(需要aws帐户)中,发帖人进行了基准测试,结果如下:
Amazon官方消息来源指出:“目前,对于30秒以上的音频,转录速度得到了更好的优化。当音频文件长度变长时,您将开始看到更好的处理时间与音频持续时间的比率大约需要2分钟或更长时间。话虽如此,我们正在努力提高整体转录速度”
我希望它对研究人员有帮助