如何获取未指定输出位置的AWS Transcribe转录文件并打印其内容
如何获取未指定输出位置的AWS Transcribe转录文件并打印其内容
我明白你现在的困惑——当你用Transcribe时没指定自己的输出桶,转录文件存在AWS托管的桶里,想拿到里面的文本确实需要几步操作,我来一步步给你讲清楚:
第一步:确认转录任务完成并获取TranscriptFileUri
首先,你需要调用get_transcription_job方法检查任务状态,只有当任务状态为COMPLETED时,才能拿到有效的转录文件URI。转录任务需要时间处理,所以你可以选择短时间轮询等待,或者用更稳妥的事件通知方式(后面会提到)。
示例代码片段:
import boto3 import time transcribe_client = boto3.client('transcribe') job_name = "你的转录任务名称" # 也就是调用start_transcription_job时指定的名称 # 轮询等待任务完成(注意Lambda的超时限制,建议设置合理的等待时长) while True: response = transcribe_client.get_transcription_job(TranscriptionJobName=job_name) status = response['TranscriptionJob']['TranscriptionJobStatus'] if status in ['COMPLETED', 'FAILED']: break print(f"转录任务正在处理中,当前状态: {status},5秒后重试...") time.sleep(5) if status == 'COMPLETED': # 提取转录文件的URI transcript_uri = response['TranscriptionJob']['Transcript']['TranscriptFileUri'] print(f"成功获取转录文件URI: {transcript_uri}") else: print(f"转录任务失败,状态: {status}") # 这里可以添加失败后的处理逻辑
第二步:解析URI并获取转录文件内容
拿到的TranscriptFileUri是AWS托管S3桶的对象地址,格式类似https://s3.<区域>.amazonaws.com/<托管桶名称>/<转录文件键名>.json。你需要解析这个URI得到桶名和对象键,然后用boto3的S3客户端获取文件内容,最后从JSON里提取转录文本。
接上面的代码继续添加:
import json s3_client = boto3.client('s3') # 解析URI获取桶名和对象键 parsed_uri = transcript_uri.split('/') bucket_name = parsed_uri[3] object_key = '/'.join(parsed_uri[4:]) # 获取S3对象内容 try: s3_response = s3_client.get_object(Bucket=bucket_name, Key=object_key) transcript_json = json.loads(s3_response['Body'].read().decode('utf-8')) # 提取最终的转录文本 transcribed_text = transcript_json['results']['transcripts'][0]['transcript'] print("\n转录文本内容:") print(transcribed_text) except Exception as e: print(f"获取转录文件失败: {str(e)}")
重要注意事项
- Lambda权限配置:你的Lambda执行角色需要添加以下权限:
transcribe:GetTranscriptionJob:允许查询转录任务状态s3:GetObject:允许读取AWS托管的Transcribe桶内的对象(可以指定桶名arn:aws:s3:::aws-transcribe-<你的账号ID>-<区域>来缩小权限范围)
- 避免Lambda超时:如果你的音频文件较长,转录时间可能超过Lambda的最大超时时间(15分钟),这种情况下建议不要用轮询,而是在调用
start_transcription_job时设置NotificationChannel参数,指定一个SNS主题,当转录任务完成时,SNS会触发另一个Lambda来处理结果,这样更高效可靠。 - 错误处理:记得添加异常捕获逻辑,比如任务失败、S3对象获取失败等情况,避免Lambda意外报错。
备注:内容来源于stack exchange,提问作者user13528908
相关产品推荐
相关产品推荐

