Amazon Transcribe で文字起こしをジョブ処理してWeb連携する
前投稿で、Amazon Transcribeについて、直接、AWSマネージメントコンソールから読み上げ内容を文字起こししてみましたが、Webアプリケーションとして、処理を連携することを考えると、S3に音声、動画データを置いて、ジョブ処理としてキューイングしておいて、結果を色々加工するのが有効そうです。
今回はジョブ処理を試してみようと思います。
まずはできることをAPIリファレンスから確認
APIリファレンス
boto3 boto3.client関数
機能 デフォルトのセッションを使用して、低レベルのサービスクライアントを作成する
構文 boto3.client(クライアント名)
戻り値 サービスクライアントのオブジェクト
Transcribe start_transcription_jobメソッド
機能 非同期ジョブを開始して、音声をテキストに変換します。
構文
{
"ContentRedaction": {
"RedactionOutput": "string",
"RedactionType": "string"
},
"IdentifyLanguage": boolean,
"JobExecutionSettings": {
"AllowDeferredExecution": boolean,
"DataAccessRoleArn": "string"
},
"LanguageCode": "string",
"LanguageOptions": [ "string" ],
"Media": {
"MediaFileUri": "string"
},
"MediaFormat": "string",
"MediaSampleRateHertz": number,
"ModelSettings": {
"LanguageModelName": "string"
},
"OutputBucketName": "string",
"OutputEncryptionKMSKeyId": "string",
"OutputKey": "string",
"Settings": {
"ChannelIdentification": boolean,
"MaxAlternatives": number,
"MaxSpeakerLabels": number,
"ShowAlternatives": boolean,
"ShowSpeakerLabels": boolean,
"VocabularyFilterMethod": "string",
"VocabularyFilterName": "string",
"VocabularyName": "string"
},
"TranscriptionJobName": "string"
}
戻り値
{
"TranscriptionJob": {
"CompletionTime": number,
"ContentRedaction": {
"RedactionOutput": "string",
"RedactionType": "string"
},
"CreationTime": number,
"FailureReason": "string",
"IdentifiedLanguageScore": number,
"IdentifyLanguage": boolean,
"JobExecutionSettings": {
"AllowDeferredExecution": boolean,
"DataAccessRoleArn": "string"
},
"LanguageCode": "string",
"LanguageOptions": [ "string" ],
"Media": {
"MediaFileUri": "string"
},
"MediaFormat": "string",
"MediaSampleRateHertz": number,
"ModelSettings": {
"LanguageModelName": "string"
},
"Settings": {
"ChannelIdentification": boolean,
"MaxAlternatives": number,
"MaxSpeakerLabels": number,
"ShowAlternatives": boolean,
"ShowSpeakerLabels": boolean,
"VocabularyFilterMethod": "string",
"VocabularyFilterName": "string",
"VocabularyName": "string"
},
"StartTime": number,
"Transcript": {
"RedactedTranscriptFileUri": "string",
"TranscriptFileUri": "string"
},
"TranscriptionJobName": "string",
"TranscriptionJobStatus": "string"
}
}
構文説明
URIリクエストパラメータ リクエストは、JSON形式で次のデータを受け入れます。
[ContentRedaction]
コンテンツ編集のリクエストパラメータを含むオブジェクト。
タイプ:ContentRedactionオブジェクト
指定は必須
[IdentificationLanguage]
自動言語識別を有効時、ture。(デフォルト:無効) LanguageCodeの値を入力すると、 BadRequestExceptionエラーが発生します。
タイプ:ブール
指定は必須ではない
[JobExecutionSettings]
トランスクリプションジョブの実行方法に関する情報を提供します。
同時実行制限に達し、スロットがなくてジョブをすぐに実行できない場合に、遅延実行のキューに入れることができます。
タイプ:JobExecutionSettingsオブジェクト
指定は必須ではない
[LanguageCode]
入力メディアファイルで使用される言語の言語コード。
現代標準アラビア語(ar-SA)で音声を転写するには、オーディオまたはビデオファイルを16000Hz以上のサンプルレートで
エンコードする必要があります。
タイプ:文字列
有効な値: af-ZA | ar-AE | ar-SA | cy-GB | da-DK | de-CH | de-DE | en-AB | en-AU | en-GB | en-IE | en-IN | en-US | en-WL
| es-ES | es-US | fa-IR | fr-CA | fr-FR | ga-IE | gd-GB | he-IL | hi-IN | id-ID | it-IT | ja-JP | ko-KR | ms-MY
| nl-NL | pt-BR | pt-PT | ru-RU | ta-IN | te-IN | tr-TR | zh-CN
指定は必須ではない
[LanguageOptions]
オーディオファイルのコレクションに存在する言語リストオブジェクト。
自動言語識別はリストからソースオーディオに最も適した言語を選択します。
タイプ:文字列の配列
配列メンバー:2項目の最小数。
有効な値: af-ZA | ar-AE | ar-SA | cy-GB | da-DK | de-CH | de-DE | en-AB | en-AU | en-GB | en-IE | en-IN | en-US | en-WL
| es-ES | es-US | fa-IR | fr-CA | fr-FR | ga-IE | gd-GB | he-IL | hi-IN | id-ID | it-IT | ja-JP | ko-KR | ms-MY
| nl-NL | pt-BR | pt-PT | ru-RU | ta-IN | te-IN | tr-TR | zh-CN
指定は必須ではない
[Media]
トランスクリプションジョブの入力メディアを説明するオブジェクト。
タイプ:メディアオブジェクト
指定は必須
[MediaFormat]
入力メディアファイルのフォーマット。
タイプ:文字列
有効な値: mp3 | mp4 | wav | flac | ogg | amr | webm
指定は必須ではない
[MediaSampleRateHertz]
入力メディアファイルのオーディオトラックのサンプルレート(ヘルツ単位)
メディアサンプルレートを指定しない場合、AmazonTranscribeがサンプルレートを決定します。
サンプルレートを指定する場合は、AmazonTranscribeによって検出されたサンプルレートと一致する必要があります。
ほとんどの場合、MediaSampleRateHertzフィールドを空白のままにして、AmazonTranscribeにサンプルレートを決定させる必要があります。
タイプ:整数
有効な範囲:最小値=8000 最大値=48000
指定は必須ではない
[ModelSettings]
このパラメーターで、文字起こしジョブに使用するカスタム言語モデルを選択します。
タイプ:ModelSettingsオブジェクト
指定は必須ではない
[OutputBucketName]
文字起こし結果をユーザーの S3 バケットに出力する場合、S3 バケット名を指定します。
AWS Key Management Service(KMS)キーをOutputEncryptionKMSKeyIdに指定して、文字起こし出力を暗号化できます。
KMSキーを指定しない場合、デフォルトのAmazonS3キーを使用します。
OutputBucketNameを設定しない場合、Amazon Transcribeは事前署名されたURL(安全なアクセスを提供する共有可能なURL)
を生成し、TranscriptFileUriフィールドに返します 。
タイプ:文字列
長さの制約:最大長=64
パターン: [a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]
指定は必須ではない
[OutputEncryptionKMSKeyId]
トランスクリプションジョブの出力を暗号化するために使用されるAWSKey Management Service(KMS)キーの
Amazon Resource Name(ARN)。
StartTranscriptionJob操作を呼び出すユーザー は、指定されたKMSキーを使用するためのアクセス許可を持っている必要があります。
次のいずれかを使用して、現在のアカウントのKMSキーを識別できます。
・KMSキーID:「1234abcd-12ab-34cd-56ef-1234567890ab」
・KMSキーエイリアス: "alias / ExampleAlias"
次のいずれかを使用して、現在のアカウントまたは別のアカウントのKMSキーを識別できます。
・KMSキーのAmazonリソース名(ARN): "arn:aws:kms:region:account ID:key / 1234abcd-12ab-34cd-56ef-1234567890ab"
・KMSキーエイリアスのARN: "arn:aws:kms:region:account ID:alias / ExampleAlias"
暗号化キーを指定しない場合、転記ジョブの出力はデフォルトのAmazon S3キー(SSE-S3)で暗号化されます。
出力を暗号化するためにKMSキーを指定する場合は、OutputBucketNameパラメーターで出力場所も指定する必要があります。
タイプ:文字列
長さの制約:最小長=1 最大長=2048
パターン: ^[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,2048}$
指定は必須ではない
[OutputKey]
Amazon S3バケット内の場所を指定して、文字起こしジョブの出力を保存できます。
出力キーを指定しない場合、Amazon Transcribeは、指定したAmazonS3バケットに文字起こしジョブの出力を保存します。
デフォルトでは、オブジェクトキーは「your-transcription-job-name.json」です。
出力キーを使用して、AmazonS3プレフィックスと文字起こし出力のファイル名を指定できます。
たとえば、AmazonS3プレフィックス「folder1 / folder2 /」を出力キーとして指定すると、出力は
「folder1 / folder2 /your-transcription-job-name.json」として保存されます。
出力キーとして「my-other-job-name.json」を指定すると、オブジェクトキーが「my-other-job-name.json」に変更されます。
出力キーを使用して、プレフィックスとファイル名の両方を変更できます。
出力キーを指定する場合は、OutputBucketNameパラメーターにS3バケットも指定する必要があります 。
タイプ:文字列
長さの制約:最小長=1 最大長=2048
パターン: [a-zA-Z0-9-_.!*'()/]{1,1024}$
指定は必須ではない
[Settings]
Settingsトランスクリプションジョブのオプション設定を提供するオブジェクト。
タイプ:設定オブジェクト
指定は必須ではない
[TranscriptionJobName]
ジョブの名前。文字列「.」または「..」を単独でジョブ名として使用することはできません。
名前は、AWSアカウント内でも一意である必要があります。
以前のトランスクリプションジョブと同じ名前のトランスクリプションジョブを作成しようとすると、
ConflictExceptionエラーが発生します。
タイプ:文字列
長さの制約:最小長=1 最大長=200
パターン: ^[0-9a-zA-Z._-]+
指定は必須
構文説明
URIリクエストパラメータ リクエストは、JSON形式で次のデータを受け入れます。
[ContentRedaction]
コンテンツ編集のリクエストパラメータを含むオブジェクト。
タイプ:ContentRedactionオブジェクト
指定は必須
[IdentificationLanguage]
自動言語識別を有効時、ture。(デフォルト:無効) LanguageCodeの値を入力すると、 BadRequestExceptionエラーが発生します。
タイプ:ブール
指定は必須ではない
[JobExecutionSettings]
トランスクリプションジョブの実行方法に関する情報を提供します。
同時実行制限に達し、スロットがなくてジョブをすぐに実行できない場合に、遅延実行のキューに入れることができます。
タイプ:JobExecutionSettingsオブジェクト
指定は必須ではない
[LanguageCode]
入力メディアファイルで使用される言語の言語コード。
現代標準アラビア語(ar-SA)で音声を転写するには、オーディオまたはビデオファイルを16000Hz以上のサンプルレートで
エンコードする必要があります。
タイプ:文字列
有効な値: af-ZA | ar-AE | ar-SA | cy-GB | da-DK | de-CH | de-DE | en-AB | en-AU | en-GB | en-IE | en-IN | en-US | en-WL
| es-ES | es-US | fa-IR | fr-CA | fr-FR | ga-IE | gd-GB | he-IL | hi-IN | id-ID | it-IT | ja-JP | ko-KR | ms-MY | nl-NL
| pt-BR | pt-PT | ru-RU | ta-IN | te-IN | tr-TR | zh-CN
指定は必須ではない
[LanguageOptions]
オーディオファイルのコレクションに存在する言語リストオブジェクト。
自動言語識別はリストからソースオーディオに最も適した言語を選択します。
タイプ:文字列の配列
配列メンバー:2項目の最小数。
有効な値: af-ZA | ar-AE | ar-SA | cy-GB | da-DK | de-CH | de-DE | en-AB | en-AU | en-GB | en-IE | en-IN | en-US | en-WL
| es-ES | es-US | fa-IR | fr-CA | fr-FR | ga-IE | gd-GB | he-IL | hi-IN | id-ID | it-IT | ja-JP | ko-KR | ms-MY | nl-NL
| pt-BR | pt-PT | ru-RU | ta-IN | te-IN | tr-TR | zh-CN
指定は必須ではない
[Media]
トランスクリプションジョブの入力メディアを説明するオブジェクト。
タイプ:メディアオブジェクト
指定は必須
[MediaFormat]
入力メディアファイルのフォーマット。
タイプ:文字列
有効な値: mp3 | mp4 | wav | flac | ogg | amr | webm
指定は必須ではない
[MediaSampleRateHertz]
入力メディアファイルのオーディオトラックのサンプルレート(ヘルツ単位)
メディアサンプルレートを指定しない場合、AmazonTranscribeがサンプルレートを決定します。
サンプルレートを指定する場合は、AmazonTranscribeによって検出されたサンプルレートと一致する必要があります。
ほとんどの場合、MediaSampleRateHertzフィールドを空白のままにして、AmazonTranscribeにサンプルレートを決定させる必要があります。
タイプ:整数
有効な範囲:最小値=8000 最大値=48000
指定は必須ではない
[ModelSettings]
このパラメーターで、文字起こしジョブに使用するカスタム言語モデルを選択します。
タイプ:ModelSettingsオブジェクト
指定は必須ではない
[OutputBucketName]
文字起こし結果をユーザーの S3 バケットに出力する場合、S3 バケット名を指定します。
AWS Key Management Service(KMS)キーをOutputEncryptionKMSKeyIdに指定して、文字起こし出力を暗号化できます。
KMSキーを指定しない場合、デフォルトのAmazonS3キーを使用します。
OutputBucketNameを設定しない場合、Amazon Transcribeは事前署名されたURL(安全なアクセスを提供する共有可能なURL)
を生成し、TranscriptFileUriフィールドに返します 。
タイプ:文字列
長さの制約:最大長=64
パターン: [a-z0-9][\.\-a-z0-9]{1,61}[a-z0-9]
指定は必須ではない
[OutputEncryptionKMSKeyId]
トランスクリプションジョブの出力を暗号化するために使用されるAWSKey Management Service(KMS)キーの
Amazon Resource Name(ARN)。
StartTranscriptionJob操作を呼び出すユーザー は、指定されたKMSキーを使用するためのアクセス許可を持っている必要があります。
次のいずれかを使用して、現在のアカウントのKMSキーを識別できます。
・KMSキーID:「1234abcd-12ab-34cd-56ef-1234567890ab」
・KMSキーエイリアス: "alias / ExampleAlias"
次のいずれかを使用して、現在のアカウントまたは別のアカウントのKMSキーを識別できます。
・KMSキーのAmazonリソース名(ARN): "arn:aws:kms:region:account ID:key / 1234abcd-12ab-34cd-56ef-1234567890ab"
・KMSキーエイリアスのARN: "arn:aws:kms:region:account ID:alias / ExampleAlias"
暗号化キーを指定しない場合、転記ジョブの出力はデフォルトのAmazon S3キー(SSE-S3)で暗号化されます。
出力を暗号化するためにKMSキーを指定する場合は、OutputBucketNameパラメーターで出力場所も指定する必要があります。
タイプ:文字列
長さの制約:最小長=1 最大長=2048
パターン: ^[A-Za-z0-9][A-Za-z0-9:_/+=,@.-]{0,2048}$
指定は必須ではない
[OutputKey]
Amazon S3バケット内の場所を指定して、文字起こしジョブの出力を保存できます。
出力キーを指定しない場合、Amazon Transcribeは、指定したAmazonS3バケットに文字起こしジョブの出力を保存します。
デフォルトでは、オブジェクトキーは「your-transcription-job-name.json」です。
出力キーを使用して、AmazonS3プレフィックスと文字起こし出力のファイル名を指定できます。
たとえば、AmazonS3プレフィックス「folder1 / folder2 /」を出力キーとして指定すると、
出力は「folder1 / folder2 /your-transcription-job-name.json」として保存されます。
出力キーとして「my-other-job-name.json」を指定すると、オブジェクトキーが「my-other-job-name.json」に変更されます。
出力キーを使用して、プレフィックスとファイル名の両方を変更できます。
出力キーを指定する場合は、OutputBucketNameパラメーターにS3バケットも指定する必要があります 。
タイプ:文字列
長さの制約:最小長=1 最大長=2048
パターン: [a-zA-Z0-9-_.!*'()/]{1,1024}$
指定は必須ではない
[Settings]
Settingsトランスクリプションジョブのオプション設定を提供するオブジェクト。
タイプ:設定オブジェクト
指定は必須ではない
[TranscriptionJobName]
ジョブの名前。文字列「.」または「..」を単独でジョブ名として使用することはできません。
名前は、AWSアカウント内でも一意である必要があります。
以前のトランスクリプションジョブと同じ名前のトランスクリプションジョブを作成しようとすると、
ConflictExceptionエラーが発生します。
タイプ:文字列
長さの制約:最小長=1 最大長=200
パターン: ^[0-9a-zA-Z._-]+
指定は必須
戻り値説明
アクションが成功すると、サービスはHTTP200応答を送り返します。
次のデータは、サービスによってJSON形式で返されます。
[TranscriptionJob]
非同期転記ジョブの詳細を含むオブジェクト。
タイプ:TranscriptionJobオブジェクト
エラー内容
BadRequestException
リクエストは1つ以上の検証テストに合格しませんでした。
たとえば、削除しようとしているエンティティが存在しない場合、またはジョブが進行中の場合。
HTTPステータスコード:400
ConflictException
その名前のリソースはすでに存在します。
HTTPステータスコード:400
InternalFailureException
内部エラーが発生しました。エラーメッセージを確認して、リクエストを再試行してください。
HTTPステータスコード:500
LimitExceededException
送信したリクエストが多すぎるか、入力ファイルが長すぎます。リクエストを再送信する前に待つか、
小さいファイルを使用してリクエストを再送信してください。
HTTPステータスコード:400
Transcribe get_transcription_jobメソッド
機能 ジョブに関する情報を返します。ジョブのステータスを確認するには、TranscriptionJobStatusフィールドを確認してください 。
ステータスがCOMPLETEDの場合、ジョブは終了し、TranscriptFileUriフィールドで指定された場所で結果を確認できます 。
構文
{
"TranscriptionJobName": "string"
}
戻り値
{
"TranscriptionJob": {
"CompletionTime": number,
"ContentRedaction": {
"RedactionOutput": "string",
"RedactionType": "string"
},
"CreationTime": number,
"FailureReason": "string",
"IdentifiedLanguageScore": number,
"IdentifyLanguage": boolean,
"JobExecutionSettings": {
"AllowDeferredExecution": boolean,
"DataAccessRoleArn": "string"
},
"LanguageCode": "string",
"LanguageOptions": [ "string" ],
"Media": {
"MediaFileUri": "string"
},
"MediaFormat": "string",
"MediaSampleRateHertz": number,
"ModelSettings": {
"LanguageModelName": "string"
},
"Settings": {
"ChannelIdentification": boolean,
"MaxAlternatives": number,
"MaxSpeakerLabels": number,
"ShowAlternatives": boolean,
"ShowSpeakerLabels": boolean,
"VocabularyFilterMethod": "string",
"VocabularyFilterName": "string",
"VocabularyName": "string"
},
"StartTime": number,
"Transcript": {
"RedactedTranscriptFileUri": "string",
"TranscriptFileUri": "string"
},
"TranscriptionJobName": "string",
"TranscriptionJobStatus": "string"
}
}
構文説明
リクエストは、JSON形式で次のデータを受け入れます。
[TranscriptionJobName]
ジョブの名前。
タイプ:文字列
長さの制約:最小長=1 最大長=200
パターン: ^[0-9a-zA-Z._-]+
指定は必須
戻り値説明
アクションが成功すると、サービスはHTTP200応答を送り返します。
次のデータは、サービスによってJSON形式で返されます。
[TranscriptionJob]
転記ジョブの結果を含むオブジェクト。
タイプ:TranscriptionJobオブジェクト
エラー内容
BadRequestException
リクエストは1つ以上の検証テストに合格しませんでした。
たとえば、削除しようとしているエンティティが存在しない場合、またはジョブが進行中の場合。
HTTPステータスコード:400
InternalFailureException
内部エラーが発生しました。エラーメッセージを確認して、リクエストを再試行してください。
HTTPステータスコード:500
LimitExceededException
送信したリクエストが多すぎるか、入力ファイルが長すぎます。リクエストを再送信する前に待つか、小さいファイルを使用して
リクエストを再送信してください。
HTTPステータスコード:400
NotFoundException
リクエストされたリソースが見つかりません。名前を確認して、リクエストを再試行してください。
HTTPステータスコード:400
Transcribe delete_transcription_jobメソッド
機能 以前に送信されたジョブを、他の生成された結果とともに削除します。
構文
{
"TranscriptionJobName": "string"
}
戻り値 アクションが成功すると、サービスは空のHTTPボディを含むHTTP200応答を送り返します。
構文の説明
リクエストは、JSON形式で次のデータを受け入れます。
[TranscriptionJobName]
削除する転記ジョブの名前。
タイプ:文字列
長さの制約:最小長は1。最大長は200。
パターン: ^[0-9a-zA-Z._-]+
指定は必須
エラー内容
BadRequestException
リクエストは1つ以上の検証テストに合格しませんでした。
たとえば、削除しようとしているエンティティが存在しない場合、またはジョブが進行中の場合。
HTTPステータスコード:400
InternalFailureException
内部エラーが発生しました。エラーメッセージを確認して、リクエストを再試行してください。
HTTPステータスコード:500
LimitExceededException
送信したリクエストが多すぎるか、入力ファイルが長すぎます。リクエストを再送信する前に待つか、
小さいファイルを使用してリクエストを再送信してください。
HTTPステータスコード:400
Transcribe list_transcription_jobメソッド
機能 指定されたステータスのジョブを一覧表示します。
構文
{
"JobNameContains": "string",
"MaxResults": number,
"NextToken": "string",
"Status": "string"
}
戻り値
{
"NextToken": "string",
"Status": "string",
"TranscriptionJobSummaries": [
{
"CompletionTime": number,
"ContentRedaction": {
"RedactionOutput": "string",
"RedactionType": "string"
},
"CreationTime": number,
"FailureReason": "string",
"IdentifiedLanguageScore": number,
"IdentifyLanguage": boolean,
"LanguageCode": "string",
"ModelSettings": {
"LanguageModelName": "string"
},
"OutputLocationType": "string",
"StartTime": number,
"TranscriptionJobName": "string",
"TranscriptionJobStatus": "string"
}
]
}
構文説明
リクエストは、JSON形式で次のデータを受け入れます。
[JobNameContains]
指定すると、リストに返されるジョブは、名前に指定された文字列が含まれているジョブに制限されます。
タイプ:文字列
長さの制約:最小長=1 最大長=200
パターン: ^[0-9a-zA-Z._-]+
指定は必須ではない
[MaxResults]
応答で返されるジョブの最大数。リスト内の結果が少ない場合、この応答には実際の結果のみが含まれます。
タイプ:整数
長さの制約:最小長=1 最大長=100
指定は必須ではない
[NextToken]
ListTranscriptionJobsへの前のリクエストの結果が切り捨てられた場合は、NextTokenを含めて、次のジョブのセットをフェッチします。
タイプ:文字列
長さの制約:最小長=1 最大長=8192
パターン: .+
必須:いいえ
[Status]
指定すると、指定したステータスのトランスクリプションジョブのみが作成日順に返されます。
ステータスを指定しない場合、Amazon Transcribeは、作成日順に並べられたすべての文字起こしジョブを返します。
タイプ:文字列
有効な値: QUEUED | IN_PROGRESS | FAILED | COMPLETED
必須:いいえ
戻り値説明
アクションが成功すると、サービスはHTTP200応答を送り返します。
次のデータは、サービスによってJSON形式で返されます。
[NextToken]
この操作は、一度に1ページのジョブを返します。ページの最大サイズはMaxResultsパラメータによって設定されます。
リストにページサイズよりも多くのジョブがある場合、AmazonTranscribeはNextPageトークンを返します。
ListTranscriptionJobs操作への次のリクエストにトークンを含めて、ジョブの次のページに戻ります。
タイプ:文字列
長さの制約:最小長=1 最大長=8192
パターン: .+
[Status]
要求されたジョブのステータスが返されました。
タイプ:文字列
有効な値: QUEUED | IN_PROGRESS | FAILED | COMPLETED
[TranscriptionJobSummaries]
転記ジョブの要約情報を含むオブジェクトのリスト。
タイプ:TranscriptionJobSummaryオブジェクトの 配列
エラー内容
BadRequestException
リクエストは0つ以上の検証テストに合格しませんでした。
たとえば、削除しようとしているエンティティが存在しない場合、またはジョブが進行中の場合。
HTTPステータスコード:400
InternalFailureException
内部エラーが発生しました。エラーメッセージを確認して、リクエストを再試行してください。
HTTPステータスコード:500
LimitExceededException
送信したリクエストが多すぎるか、入力ファイルが長すぎます。リクエストを再送信する前に待つか、
小さいファイルを使用してリクエストを再送信してください。
HTTPステータスコード:400
①mp3音声ファイルからテキストを生成するプログラム(transcribe.py)
文字起こししたいmp3音声ファイル(hachitokuma.mp3)をS3に用意したバケットにアップした上で、start_transcription_jobメソッドを呼び出して、文字起こし処理を行います。
メソッド処理結果から、結果テキストを含むJSONファイルのURIが得られるので、その情報からJSONファイルをダウンロードして、その中の文字起こし内容をファイルに書き込みます。
文字起こし処理には時間がかかるので、get_transcription_jobメソッドでジョブ状態を調べて、処理が終わるまでループして、完了したらダウンロードとファイル書き込みをしています。
最後にジョブの削除とバケット内のファイルを削除しています。
import boto3
import json
import pprint
import time
import uuid
import urllib
# バケットの作成
bucket = 'バケット名'
print('bucket:', bucket)
region = 'ap-northeast-1' # 東京リージョン
s3 = boto3.client('s3', region)
# mp3ファイルのアップロード
file = 'hachitokuma.mp3'
key = 'ohanasi' # ファイルのキー
s3.upload_file(file, bucket, key)
transcribe = boto3.client('transcribe', region)
job = str(uuid.uuid1()) # Job名として乱数を文字変換
uri = 'https://s3-'+region+'.amazonaws.com/'+bucket+'/'+key
# start_transcription_jobメソッドを起動
result = transcribe.start_transcription_job(
TranscriptionJobName=job, Media={'MediaFileUri': uri},
MediaFormat='mp3', LanguageCode='ja-JP')
print('start_transcription_job:')
pprint.pprint(result) # 結果を表示
start = time.time() # 開始時刻
while True:
# get_transcription_jobメソッドでジョブ状態を取得
result = transcribe.get_transcription_job(TranscriptionJobName=job)
# ジョブの進行状況を取得
status = result['TranscriptionJob']['TranscriptionJobStatus']
if status != 'IN_PROGRESS': # ジョブ進行中でなければbreak
break
time.sleep(10)
print('time:', time.time()-start) # 経過時間
print('get_transcription_job:')
pprint.pprint(result) # ジョブの結果を表示
# JSONファイルのURI
uri = result['TranscriptionJob']['Transcript']['TranscriptFileUri']
print('uri:', uri)
with urllib.request.urlopen(uri) as file_in: # JSONファイルを開く
transcripts = json.load(file_in) # JSONファイルをダウンロード
with open('transcribe_out.json', 'w', encoding='utf-8') as file_out: # 出力ファイルを開く
json.dump(transcripts, file_out, indent=4) # JSONファイルを出力ファイルにライト
print('transcript:')
for transcript in transcripts['results']['transcripts']:
print(transcript['transcript'])
transcribe.delete_transcription_job(TranscriptionJobName=job) # ジョブを削除
s3.delete_object(Bucket=bucket, Key=key) # ファイルを削除
それでは、mp3ファイルを用意して、Pythonで実行してみます!
PS C:\Users\mikol\transcribe> python transcribe.py
bucket: バケット名
start_transcription_job:
{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
'content-length': '315',
'content-type': 'application/x-amz-json-1.1',
'date': 'Fri, 02 Jul 2021 23:19:16 GMT',
'x-amzn-requestid': '01ddc379-e2a4-4e28-ae3f-999999999999},
'HTTPStatusCode': 200,
'RequestId': '01ddc379-e2a4-4e28-ae3f-999999999999',
'RetryAttempts': 0},
'TranscriptionJob': {'CreationTime': datetime.datetime(2021, 7, 3, 8, 19, 16, 475000, tzinfo=tzlocal()),
'LanguageCode': 'ja-JP',
'Media': {'MediaFileUri': 'https://s3-ap-northeast-1.amazonaws.com/バケット名/ohanasi'},
'MediaFormat': 'mp3',
'StartTime': datetime.datetime(2021, 7, 3, 8, 19, 16, 528000, tzinfo=tzlocal()),
'TranscriptionJobName': 'ea7bc5af-db8b-11eb-8c52-999999999999',
'TranscriptionJobStatus': 'IN_PROGRESS'}}
time: 10.161483526229858
time: 20.278788328170776
time: 30.407328844070435
time: 40.55110144615173
get_transcription_job:
{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
'content-length': '2105',
'content-type': 'application/x-amz-json-1.1',
'date': 'Fri, 02 Jul 2021 23:19:57 GMT',
'x-amzn-requestid': '653675b4-e27c-456d-beaf-999999999999'},
'HTTPStatusCode': 200,
'RequestId': '653675b4-e27c-456d-beaf-999999999999',
'RetryAttempts': 0},
'TranscriptionJob': {'CompletionTime': datetime.datetime(2021, 7, 3, 8, 19, 54, 252000, tzinfo=tzlocal()),
'CreationTime': datetime.datetime(2021, 7, 3, 8, 19, 16, 475000, tzinfo=tzlocal()),
'LanguageCode': 'ja-JP',
'Media': {'MediaFileUri': 'https://s3-ap-northeast-1.amazonaws.com/skillset3193/ohanasi'},
'MediaFormat': 'mp3',
'MediaSampleRateHertz': 44100,
'Settings': {'ChannelIdentification': False,
'ShowAlternatives': False},
'StartTime': datetime.datetime(2021, 7, 3, 8, 19, 16, 528000, tzinfo=tzlocal()),
'Transcript': {'TranscriptFileUri': 'https://s3.ap-northeast-1.amazonaws.com/aws-transcribe-ap-northeast-1-prod/999999999999/ea7bc5af-db8b-11eb-8c52-999999999999/e0ec344d-7a93-4666-b676-c9b244a1e88b/asrOutput.json?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAcaDmFwLW5vcnRoZWFzdC0xIkYwRAIgMSot84OD5bvyo5Rc68FPrkFsv5Wz8K6DcIQU7GBG7oYCIFcf2C3r%2BOQmglp%2FoRAXxY8%2B0UgcEjUgwdTU%2FR4msAcHKo0ECOD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQAhoMMDE1NTMzNTI3MTk1Igz1RGLA%2BsMs1vlm1msq4QOqUyFuvFNjibPKkfzYKL2YEjo%2FC5H%2Bu0O8bIjnjy4XWkLPPFZ1SCIhOvxB51Ik0ljCgvCjcwJScbPJVNVUDZuc2BGTTTwn49oX5bE3aWOLlmB1EHri2itB2EZOwcHpOy113ZaaEHcCDV5C7KZP9bZCr6NSwSidaCTfn9GCLisp1DtC5r%2FzTaaEaaSyCAcpxy8wrjkfS4Gme0Htyd0blbs%2Bc3Vz7SXfMNCfFB%2FxBZYk2mDgRG%2FyOSX%2B3jANU8f8nCGfIMWgjsuItBVZM2RfPfVxxDIDhhNKd780rFrpdRx00JH33cAWX2zzt0W5gpqpIAo8ln5TB2kEGIIaCMSvuL%2BuNALQLFY38Ycojxsh7oaRp%2BjhnE8Gdu1pO1qqlDvo%2BxDmvfn9K65ShFf235e6Yj2rpLTYAQLtymKA4kvOm%2FJ1zZ%2F3wTDdpqMcMMNoMMQY4ozWi1wtFIQvHp3i9m90s1VzAAzCx7WlR3bIaI8RT0yx8MoY192b1mQyVpbyvq0SRfLcajMGsS3AjsGBG6R52YMeUBKSEv5zXDTZ3yWbuZm1Lx6CVBcd4xcrsIOs87q8RT9krIXDePD%2FZOKjRYJN8ygu5lNLQavaPTFvGKZItS38QT4XnY0AGg9SFXx%2FEm8px3NtMNOv%2FoYGOqYB5fX21g34k5xvlIibbLsGK7NCdIXsV%2Bl4UxBKC%2FDXLvlnElbXoJ83KfuQ4vFLlWukclRoIorSoPYIQutZt0%2FccnlP3eutkZTVvjWrVMhlPGT3LZZqHiBk%2BumU%2FLiH%2BDGjXlsLPfA2Bw6pN8xKVjVcAdQDlZDyoc7y8N4Qmjl4%2FtZcla31oyXLWdlQCmBJgmDYbfjNBoGXuxiiNE1aFW1korJ0kHaYng%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20210702T231957Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIAQHHO62CN7ZXEKPV5%2F20210702%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Signature=984864db33d270bea0f21469a4ae92da87dc207f4eba2afa44dfb86f38cefb5f'},
'TranscriptionJobName': 'ea7bc5af-db8b-11eb-8c52-999999999999',
'TranscriptionJobStatus': 'COMPLETED'}}
uri: https://s3.ap-northeast-1.amazonaws.com/aws-transcribe-ap-northeast-1-prod/999999999999/ea7bc5af-db8b-11eb-8c52-999999999999/e0ec344d-7a93-4666-b676-999999999999/asrOutput.json?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEAcaDmFwLW5vcnRoZWFzdC0xIkYwRAIgMSot84OD5bvyo5Rc68FPrkFsv5Wz8K6DcIQU7GBG7oYCIFcf2C3r%2BOQmglp%2FoRAXxY8%2B0UgcEjUgwdTU%2FR4msAcHKo0ECOD%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEQAhoMMDE1NTMzNTI3MTk1Igz1RGLA%2BsMs1vlm1msq4QOqUyFuvFNjibPKkfzYKL2YEjo%2FC5H%2Bu0O8bIjnjy4XWkLPPFZ1SCIhOvxB51Ik0ljCgvCjcwJScbPJVNVUDZuc2BGTTTwn49oX5bE3aWOLlmB1EHri2itB2EZOwcHpOy113ZaaEHcCDV5C7KZP9bZCr6NSwSidaCTfn9GCLisp1DtC5r%2FzTaaEaaSyCAcpxy8wrjkfS4Gme0Htyd0blbs%2Bc3Vz7SXfMNCfFB%2FxBZYk2mDgRG%2FyOSX%2B3jANU8f8nCGfIMWgjsuItBVZM2RfPfVxxDIDhhNKd780rFrpdRx00JH33cAWX2zzt0W5gpqpIAo8ln5TB2kEGIIaCMSvuL%2BuNALQLFY38Ycojxsh7oaRp%2BjhnE8Gdu1pO1qqlDvo%2BxDmvfn9K65ShFf235e6Yj2rpLTYAQLtymKA4kvOm%2FJ1zZ%2F3wTDdpqMcMMNoMMQY4ozWi1wtFIQvHp3i9m90s1VzAAzCx7WlR3bIaI8RT0yx8MoY192b1mQyVpbyvq0SRfLcajMGsS3AjsGBG6R52YMeUBKSEv5zXDTZ3yWbuZm1Lx6CVBcd4xcrsIOs87q8RT9krIXDePD%2FZOKjRYJN8ygu5lNLQavaPTFvGKZItS38QT4XnY0AGg9SFXx%2FEm8px3NtMNOv%2FoYGOqYB5fX21g34k5xvlIibbLsGK7NCdIXsV%2Bl4UxBKC%2FDXLvlnElbXoJ83KfuQ4vFLlWukclRoIorSoPYIQutZt0%2FccnlP3eutkZTVvjWrVMhlPGT3LZZqHiBk%2BumU%2FLiH%2BDGjXlsLPfA2Bw6pN8xKVjVcAdQDlZDyoc7y8N4Qmjl4%2FtZcla31oyXLWdlQCmBJgmDYbfjNBoGXuxiiNE1aFW1korJ0kHaYng%3D%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20210702T231957Z&X-Amz-SignedHeaders=host&X-Amz-Expires=900&X-Amz-Credential=ASIAQHHO62CN7ZXEKPV5%2F20210702%2Fap-northeast-1%2Fs3%2Faws4_request&X-Amz-Signature=984864db33d270bea0f21469a4ae92da87dc207f4eba2afa44dfb86f38cefb5f
transcript:
一匹の小熊が森の中から鋸のこと日当たりの良いの間に出てきて倒れていたマルタの上に腰を下ろしてクリスにふっと笑いました
小熊は懐から八日を入れた都合を取り出して指でしゃくっってちびちびなめ始めました
い食べてもうまいの八代緻密に限るまくって楽しくてと独り言
を言いながらせっせとなめておりましたするとそこへ一滴のミツバチが文と飛んできて小熊の帽子の周りをぐるぐる巻いながら言いました小熊さん
僕は本当に花形って堪らないよ・・・
start_transcription_jobの実行結果がまず出力されて、その後、処理が40秒かかっています。
次に、get_transcription_jobの実行が実行されて、実行結果のJSONファイルをダウンロードして、
最後に、結果のテキスト内容が出力できていますが、ちなみに読み上げた内容の正解は以下です。
(朗読サイトから「はちとくま」の読み上げ内容を聞き取り、これをmp3ファイルに加工して、使ってみました)
一匹の子熊が、森の中から、のこのこと日当たりのいい、野原に出てきて、倒れていた丸太の上に腰をおろして、うれしそうにフフンとわらいました。
子熊はふところから、はちみつを入れた壺をとりだして、指でしゃくって、ちびちび舐め始めました。
「いつ食べても、うまいのはハチミツだ。ハチミツに限る。甘くって、おいしくって。」と独り言を言いながら、せっせと舐めておりました。
すると、そこへ、一匹のミツバチが、ブーンととんで来て、子熊の帽子の周りを、ぐるぐる舞いながら、言いました。
「子熊さん。僕は、ほんとに、はらが立つてたまらないよ。」・・・
若干の間違いがありますが、文字起こしはできています。
このくらいの精度であれば、色々と使う用途が考えられて、便利そうです!!!