使用boto3调用AWS Transcribe生成字幕时Subtitles参数报错如何解决?
问题原因
报错是因为本地使用的boto3版本过旧,旧版本内置的AWS Transcribe接口定义未包含Subtitles参数,因此会被识别为非法参数。
解决步骤
- 第一步:升级
boto3及依赖库botocore到最新版本,执行命令:pip install --upgrade boto3 botocore
升级完成后可以执行pip show boto3验证版本,只要boto3版本≥1.24.0即可支持字幕输出参数。 - 第二步:修正代码中3处问题:
- 原代码
Media参数后缺少等于号,需修正为Media={'MediaFileUri':job_uri} - 如需输出SRT格式字幕,将
Subtitles参数中Formats列表的值改为['srt'],也可以同时传入srt和vtt同时生成两种格式字幕 - 原循环逻辑中
break语句位置错误,会导致状态打印和等待逻辑永远不会执行,需调整缩进顺序
- 原代码
修正后代码示例
import time import boto3 # 替换为自身的密钥和区域配置 ACCESS_KEY = "你的AWS访问密钥" SECRET_KEY = "你的AWS私有密钥" region_name = "你使用的AWS区域,例如us-east-1" s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY,aws_secret_access_key=SECRET_KEY) transcribe = boto3.client('transcribe',aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY, region_name=region_name) job_name = "kateri1234" job_uri = "s3://transcribe-upload12/english.mp4" transcribe.start_transcription_job( TranscriptionJobName=job_name, Media={'MediaFileUri':job_uri}, MediaFormat='mp4', LanguageCode='en-US', Subtitles={'Formats': ['srt']}, OutputBucketName = "transcribe-output12" ) while True: status = transcribe.get_transcription_job(TranscriptionJobName=job_name) job_status = status['TranscriptionJob']['TranscriptionJobStatus'] if job_status in ['COMPLETED', 'FAILED']: print(f"任务最终状态:{job_status}") print(status) break print("Not ready yet...") time.sleep(5)
内容的提问来源于stack exchange,提问作者Chinmaya Urs
相关产品推荐
相关产品推荐

