AWS Transcribe を使用した文字起こしアプリケーションの実装
更新日:2025/03/06

1. AWS SDK for Node.js の利用方法
SDKのセットアップ
- AWS SDKのインストールと設定: AWS SDK for JavaScript (Node.js) をプロジェクトに導入します。例えば、
npm install aws-sdk
でインストールできます。また、AWS認証情報(アクセスキーIDとシークレット、リージョン設定など)を環境変数や設定ファイルで用意しますdocs.aws.amazon.com。SDKはこれらの認証情報を使用してAWSサービスにアクセスします。Node.jsからAWSを操作する前に、AWSアカウントで適切なIAMユーザ/ロールと権限を設定しておきます。
Transcribe API の使い方ひどうき
- クライアントの初期化: AWS SDKを読み込み、リージョンを設定してクライアントを初期化します。例えば以下のようにコードを記述します。
const AWS = require('aws-sdk');
AWS.config.update({ region: 'ap-northeast-1' }); // 東京リージョンを設定:contentReference[oaicite:1]{index=1}
const transcribe = new AWS.TranscribeService();
- これでTranscribeサービスを利用する準備が整います。SDKにより
AWS.TranscribeService
クラスが提供されており、これを使って文字起こしジョブの操作を行います。 - 文字起こしジョブの開始: Amazon Transcribeでは**音声ファイルをもとに「文字起こしジョブ」**を開始し、非同期に処理を行います。AWS SDKを使って
startTranscriptionJob
メソッドを呼び出すことで文字起こしジョブを作成できます。パラメータとしてジョブ名、言語コード、メディアの形式、音声ファイルの場所(S3のURI)などを指定します
非同期バッチ処理とリアルタイム処理の比較
バッチ(非同期)文字起こしジョブの場合は、入力の音声ファイルがS3上にあることが前提になります。Amazon Transcribe はジョブ作成時に「S3のURI(s3://...
)」を指定する仕様だからです。
▼ バッチ処理モードのAmazon Transcribeを使う場合の典型的な処理の流れ
docs.aws.amazon.com。たとえば:
const params = {
TranscriptionJobName: 'MyTranscriptionJob',
LanguageCode: 'ja-JP', // 日本語音声の場合
MediaFormat: 'wav', // 音声のフォーマット (例: wav, mp3 等)
Media: { MediaFileUri: 's3://<バケット名>/<音声ファイル名>' },
OutputBucketName: '<出力先のバケット名>' // オプション: 結果を保存するS3バケット
};
transcribe.startTranscriptionJob(params, (err, data) => {
if (err) console.error("Transcription start error:", err);
else console.log("Job started:", data.TranscriptionJob.TranscriptionJobName);
});
上記のように、S3上の音声ファイルURIを指定してジョブを開始できます。OutputBucketName
を指定すると文字起こし結果がそのバケットに保存されます(詳細は後述)。
音声ファイルのアップロードと文字起こし実行(サンプルコード)
- 一連の処理の例: アプリケーションでは、まず音声ファイルをS3にアップロードし、その後でTranscribeジョブを開始する流れになります。以下にNode.jsでの簡単な例を示します:
const AWS = require('aws-sdk');
const fs = require('fs');
AWS.config.update({ region: 'ap-northeast-1' }); // リージョン設定
const s3 = new AWS.S3();
const transcribe = new AWS.TranscribeService();
// 1. S3に音声ファイルをアップロード
const filePath = 'audio.wav'; // ローカルの音声ファイル
const bucketName = 'my-audio-bucket'; // アップロード先S3バケット
const keyName = 'uploads/audio.wav'; // S3上での保存キー
const fileContent = fs.readFileSync(filePath);
const uploadParams = { Bucket: bucketName, Key: keyName, Body: fileContent };
s3.upload(uploadParams, (err, data) => {
if (err) {
console.error('S3 Upload Error:', err);
return;
}
console.log('S3 Upload Success:', data.Location);
// 2. アップロードしたファイルを指定してTranscribeジョブを開始
const jobName = 'example-transcription-job';
const params = {
TranscriptionJobName: jobName,
LanguageCode: 'ja-JP',
MediaFormat: 'wav',
Media: { MediaFileUri: `s3://${bucketName}/${keyName}` },
OutputBucketName: bucketName // 結果も同じバケットに保存
};
transcribe.startTranscriptionJob(params, (err, data) => {
if (err) {
console.error('Transcribe Error:', err);
} else {
console.log('Transcription Job started:', data.TranscriptionJob.TranscriptionJobName);
}
});
});
- 上記コードでは、
audio.wav
ファイルを指定のS3バケットにアップロードし、アップロード完了後にそのファイルを入力として文字起こしジョブを開始しています。実際の運用では、ジョブ開始後にgetTranscriptionJob
でジョブのステータスを確認し、完了したら結果を取得するといった処理も必要です。
2. S3 の使用について
音声ファイルの保存・取得(一般的なユースケース)
- 音声データの保存: 音声ファイルはAmazon S3に保存して扱うのが一般的です。Amazon Transcribeのバッチ処理では、対象の音声をS3バケット上のオブジェクトとして入力に指定しますdocs.aws.amazon.com。アプリケーションから音声データを受け取ったら、まずS3バケットにそのファイルを保存します。上記のサンプルコードのようにAWS SDK経由で
putObject
やupload
メソッドを使ってプログラム的にアップロードできますdocs.aws.amazon.com。 - 音声データの取得: 音声ファイルを使用して文字起こしを行う際、Transcribeサービス自体がS3からファイルを読み取ります。アプリケーション側では、一度アップロードしてしまえば、あとはTranscribeにそのS3 URIを渡すだけで文字起こしが実行されます。また、Transcribeの出力結果(JSONや字幕ファイル)がS3に保存された場合、それを
getObject
で取得したり、S3コンソールやHTTP(S)経由でダウンロードしたりできます。
バケットの構成と権限(推奨設定)
- バケット構成: 音声入力用と文字起こし結果用にバケットやプレフィックスを分けて管理すると整理しやすくなります。例えば、
my-audio-bucket/uploads/
に音声ファイル、my-audio-bucket/transcripts/
に結果JSONを保存する、といった構成です。また、Transcribeジョブを実行するリージョンと音声ファイルが存在するリージョンを一致させることを推奨します。リージョンが異なるとジョブ作成時にエラーとなる場合があるため、基本的には同一リージョン内で完結させます。 - アクセス権限: S3バケットおよびオブジェクトには適切なIAMポリシーやバケットポリシーを設定し、必要最小限のアクセス権を付与します。文字起こしを行うIAMユーザ/ロールには、対象バケットに対する
GetObject
権限(入力音声の読み取り)とPutObject
権限(出力結果の書き込み)を与えてくださいdocs.aws.amazon.com。特に、OutputBucketName
に自分のバケットを指定する場合は、Amazon Transcribeにそのバケットへの書き込み権限を事前に付与しておく必要がありますdocs.aws.amazon.com。これはIAMロールを使用する場合、信頼ポリシーでTranscribeサービス(transcribe.amazonaws.com
)を信頼し、S3アクセス権を持つロールを指定する方法などで実現できます。 - バケットの公開設定: バケットやオブジェクトは原則非公開とし、必要に応じて一時的な署名付きURL(Presigned URL)を使って限定的にアクセスさせるのが安全です。誤ってバケットをpublicに開放することはセキュリティ上避けましょう。また、不要になったファイルはライフサイクルルールで自動削除するなど、保管期間を決めて運用するとストレージコスト管理に役立ちます。
3. 制限事項
AWS Transcribe の制限
- ファイル長・サイズ: Amazon Transcribeのバッチ処理では、1回のAPI呼び出しあたり最長4時間または最大2GBまでの音声ファイルしか処理できませんaws.amazon.com。4時間を超える長時間の音声や2GBを超える大容量ファイルはそのままでは処理できないため、必要に応じて音声を分割するなどの対策が必要です。
- 入力フォーマットの制限: 入力できる音声ファイルの形式も限定されています。対応フォーマットは例えばMP3、MP4(M4A)、WebM、WAV(リニアPCM)、FLAC、Ogg(Ogg Opusを含む)、AMR などですdev.classmethod.jpdocs.aws.amazon.com。動画ファイル(MP4やWebM)の場合も、その中の音声トラックが文字起こしの対象になります。またサンプルレートは8,000 Hz(電話音質)から48,000 Hz(高音質)まで対応し、**音声チャンネルは1チャンネル(モノラル)または2チャンネル(ステレオ)**までサポートされています。3チャンネル以上の音源は事前にミックスダウンしておく必要があります。
- 出力に関する制限: 文字起こし結果は通常JSONで提供されますが、Amazon Transcribe側でジョブの情報を保持している期間は90日間ですdocs.aws.amazon.com。デフォルトでは、ジョブ完了後90日が経過すると(サービス管理のバケット上に置かれた)トランスクリプトデータは削除されます。自分のS3バケットに出力を保存していれば消えずに残りますが、サービス側ではジョブ履歴が90日で消える点に注意が必要です。
S3 に関する制限
- オブジェクトのサイズ: Amazon S3に保存できる1ファイル(オブジェクト)のサイズは最大5TBですaws.amazon.com。非常に大きなファイルも扱えますが、1回のPUT操作でアップロードできるオブジェクトは最大5GBまでという別の制限がありますaws.amazon.com。5GBを超える場合はマルチパートアップロード(分割アップロード)機能を使ってアップロードする必要がありますaws.amazon.com。なお、AWS SDKの
upload
メソッドは内部で一定サイズ以上のファイルを自動的にマルチパートに分割して送信するため、大容量ファイルでも透過的にアップロード可能です。 - ストレージ容量: S3全体としての保存容量やバケット内のオブジェクト数に上限はありません。合計ストレージは無制限に利用できますaws.amazon.com(使用量に応じた課金となります)。したがって、音声ファイルや文字起こし結果が増加しても、S3の容量面で制約となることは基本的にありません。
- バケット数: S3バケットの作成数にはAWSアカウントごとにサービスクォータ(上限)が設定されています。2023年現在、デフォルトで1アカウントあたり最大1万個のバケットを作成可能ですdocs.aws.amazon.com(以前は100個まででしたが、AWSにより上限が引き上げられましたtekton.cloud)。通常のアプリケーションでそこまで大量のバケットを使うことは稀ですが、必要に応じてAWSサポートへの依頼で上限緩和も可能です。
4. タイムスタンプ付きの出力方法
- 出力フォーマット: Amazon Transcribeの文字起こし結果はJSON形式で提供されますdocs.aws.amazon.com。JSONには、全文テキスト(
transcripts
セクション)と、単語ごとの詳細情報(items
セクション)が含まれていますdocs.aws.amazon.com。各単語の開始時刻(start_time
)、終了時刻(end_time
)、認識された単語(content
)と信頼度(confidence
)などのデータが含まれており、タイムスタンプに基づいて音声中のどの位置でその単語が発せられたかが分かりますdocs.aws.amazon.com。 - タイムスタンプ情報の活用: 取得したJSONを解析することで、文字起こしテキストを時間情報付きで表示したり、字幕を生成したりできます。例えば、Node.js上でJSON文字列を読み込み各単語に対して開始時間とテキストを出力する処理は以下のように実装できます:
const transcriptData = JSON.parse(transcriptJsonString);
for (const item of transcriptData.results.items) {
if (item.type === 'pronunciation') {
const startSec = parseFloat(item.start_time);
const word = item.alternatives[0].content;
console.log(`${startSec}s: ${word}`);
}
}
このようにして各単語の開始秒数と内容を出力できます。応用すれば所定のフォーマットに整形して字幕ファイル(例えばSRT形式)を生成することも可能です。items
内でtype
がpronunciation
の要素が実際の発話単語で、punctuation
の要素は句読点なので、これらを組み合わせて元の文章を再現します。タイムスタンプ情報を利用することで、映像と同期したテロップ表示や、クリック時にその時間に音声をジャンプする機能など、さまざまなインタラクションを実現できます。字幕ファイルとしての出力: Amazon Transcribeは結果JSONだけでなく、**タイムスタンプ付きの字幕ファイル(WebVTTやSRT形式)**を直接出力することも可能です
docs.aws.amazon.com。ジョブのリクエストパラメータでSubtitles
オプションを指定し、例としてFormats: ['srt']
と設定すると、自動的にS3に字幕ファイル(.srt
形式)が保存されます。例えば先述のStartTranscriptionJob
のパラメータに:
Subtitles: { Formats: ['srt'] }
- を追加すると、ジョブ完了時に
<TranscriptionJobName>.srt
というファイルが結果バケットに出力され、各発話に対応した開始・終了時刻付きの字幕テキストが得られます。必要に応じてこの機能も活用すると良いでしょう。
以上、AWS SDKを用いたAmazon Transcribe実装のポイントを整理しました。S3を介した音声ファイルの管理やTranscribeサービスの制限を踏まえ、適切に設計・実装することで、音声の文字起こしアプリケーションを効率的に構築できます。
docs.aws.amazon.com「プロジェクト環境のセットアップ(SDKのインストールなど)と共有設定ファイルによる認証情報の配置」が必要です。また、SDK利用前にこれらの準備を完了させます。
docs.aws.amazon.comAWS SDK for JavaScript(v3)のコード例。StartTranscriptionJobCommand
に渡すパラメータとして、ジョブ名、言語コード、メディアフォーマット、メディアファイルのS3 URI、および出力バケット名を設定しています。
docs.aws.amazon.comAWS SDK for JavaScript(v2)での設定例。require('aws-sdk')
でSDKを読み込み、AWS.config.update({ region: "リージョン" })
でリージョンを設定してからサービスオブジェクトを生成します。
docs.aws.amazon.comAWS SDKを使ったS3ファイルアップロードのコード例。s3.upload(params, ...);
でファイルをアップロードし、コールバック内で結果を処理しています。
docs.aws.amazon.com「Amazon Transcribe は、音声データを Amazon S3 バケット内のファイルとして受け取りテキストに変換します。S3に保存されたメディアファイルを文字起こしする場合、バッチ文字起こしを実行します。」
docs.aws.amazon.com「自分の所有する Amazon S3 バケットにトランスクリプトを保存する場合は、文字起こしリクエストでバケットのURIを指定します。バッチ文字起こしジョブを開始する前に、必ずこのバケットのAmazon Transcribe書き込みアクセス許可を付与してください。」とあり、Transcribeに出力先バケットへの書き込み権限を与える必要が述べられています。
aws.amazon.com「Amazon Transcribe のサービス呼び出しは、バッチサービスの API コール 1 回につき 4 時間 (あるいは 2 GB) に制限されます。」と記載されています。
dev.classmethod.jp「Amazon Transcribeの場合、音声時間は最大4時間、サイズは最大2GBまでです。また、対応しているファイル形式は、mp3、mp4、webm、wav、amr、flac、oggです。」とあり、Transcribeの時間・サイズ制限と対応フォーマットが示されています。
docs.aws.amazon.comデベロッパーガイドに記載の対応メディア形式一覧。バッチ文字起こしでAMR、FLAC、M4A、MP3、MP4、Ogg、WebM、WAV形式がサポートされています。
docs.aws.amazon.com「Amazon S3 バケットを指定しない場合、Transcribeはサービスマネージドバケットを使用し、一時的なダウンロードURIを提供します。一時URIは15分間有効です… デフォルトバケットを選択した場合、ジョブの有効期限(90日)になると、トランスクリプトは削除されます。」と、出力の保持期間について説明されています。
aws.amazon.com「Amazon S3 に格納可能なデータの総量とオブジェクトの数には制限はありません。個別の Amazon S3 オブジェクトのサイズは、最低 0 バイトから最大 5 TB までさまざまです。1 つの PUT にアップロード可能なオブジェクトの最大サイズは 5 GB です。100 MB を超えるオブジェクトの場合は、マルチパートアップロード機能を使うことをお考えください。」と、S3オブジェクトサイズの上限が示されています。
docs.aws.amazon.comS3ユーザーガイドのバケットクォータに「デフォルトでAWSアカウントあたり1万個のバケットを作成可能」と記載されています。
tekton.cloudAWSのアップデート情報。「AWSはS3バケット作成上限を従来の100個から1000個に増加しました」と解説されています(現在はさらに上限が引き上げられていますが、過去との比較として参考)。
docs.aws.amazon.com「文字起こし出力は JSON形式です。トランスクリプトの最初の部分には段落形式の全文が含まれ、その後に単語ごとの開始時間、終了時間、信頼スコアなどの追加データが続きます。」と、出力JSONにタイムスタンプが含まれることが説明されています。
docs.aws.amazon.com文字起こし出力JSONの例の説明。「基本的なバッチ文字起こし結果はtranscripts
(全文)とitems
(単語ごとのデータ)の2つの主要部分から構成されます」と述べられています。
docs.aws.amazon.com「Subtitlesオプションを指定すると入力メディア用の字幕ファイルを生成します。WebVTT(.vtt)とSubRip(.srt)形式を指定できます。」と、字幕出力機能について記載があります。

-
検索
(例) debug search etc.. -
カテゴリー
-
【WordPress】カスタムフィールド作成の仕方「ACF」Advanced Custom Fieldsの使用法
更新日:2024/06/10
299 view
-
mixhostでのWordPress利用について
更新日:2024/04/02
296 view
-
scrollHint
更新日:2024/03/13
249 view
-
LOLIPOPでWordPressインストール(サブディレクトリにインストールしたWordPressをドメイン直下で表示)
更新日:2024/06/13
237 view
-
XML Sitemap Generator for Google不具合のダウングレード対応、代替プラグイン
更新日:2024/06/13
235 view
-
Sass導入方法
更新日:2024/03/13
207 view
-
【SnowMonkey】納品までのフローまとめ
更新日:2025/02/15
163 view
-
【Snow Monkey】Googleサーチコンソール登録
更新日:2024/05/28
157 view
-
ワードプレスでフォントを変えたいとき、プラグインを使えば初心者でも簡単
更新日:2025/02/16
144 view
-
【Googleサーチコンソール】検索画面で表示させたくない「Googleのインデックス削除」
更新日:2024/06/07
129 view
-
【ショートコード】編集画面で任意の場所にHTMLファイルを挿入
更新日:2024/01/26
122 view
-
キーワード検索で上位表示させる方法【SEO】
更新日:2023/10/28
120 view
-
tailwindcss使い方
更新日:2024/03/13
120 view
-
Recline: GitHub Copilotで動作するClaude 3.5 Sonnet搭載の開発支援ツール
更新日:2025/01/20
110 view
-
WordPressプラグイン「All-in-One WP Migration」のトラブル
更新日:2022/03/31
84 view
-
ワードプレスセキュリティー対策まとめ【2025年】「site guard wordpress」「BackWPup バージョン5でUI変更!?」
更新日:2025/02/25
76 view
-
SSHを使用してGitHubのリポジトリをクローン、複数の接続元で公開鍵をディレクトリで区別する方法
更新日:2025/01/13
47 view
-
VSCodeで開発効率を劇的に向上させる!Roo-Clineプラグイン完全ガイド【Gemini API】
更新日:2025/02/08
41 view
-
「JSONスキーマ」と「Few-shot Learning」で実現する次世代生成AIソフトウェア開発の可能性
更新日:2025/02/12
40 view
-
WordPressの無料画像素材のおすすめダウンロードサイト!
更新日:2022/02/22
35 view
-
リファクタリング【VSCode Javasctipt Python】
更新日:2025/03/09
35 view
-
形態素解析とは?初心者でもわかるツールの使い方と実践例
更新日:2025/02/08
33 view
-
【Next.js AWS】音声文字起こし&要約、分析アプリケーション(S3)(Transcribe)(Amazon Bedrock)
更新日:2025/02/13
30 view
-
VSCodeプラグイン「 Pretter – Code formatter」「PHP Intelephense 」
更新日:2025/01/06
26 view
-
WordPressでカスタムフィールドを使った記事のスコアリング 一定割合ランダム表示でε-greedy方策
更新日:2025/02/24
24 view
-
【CSS JavaScript サンプルコード】アコーディオン 続きを読む(Read more)Toggle 折りたたみコンテンツ
更新日:2025/02/05
24 view
-
【WordPress】SVGを投稿記事のサムネイルに!自作プラグイン(未実装🤷♂️)「nonce(ナンス)トークン」wp_postmetaテーブルを利用
更新日:2025/02/16
23 view
-
Googleアドセンスとは?〜前編〜
更新日:2025/02/16
22 view
-
【WordPressプラグイン】人気記事 管理 WordPress Popular Posts 実践的なカスタマイズ
更新日:2025/02/15
22 view
-
AWSのOCRサービス完全ガイド:Textract、Rekognition、Comprehendの使い分け
更新日:2025/02/09
19 view
-
スマートフォンファーストのWeb開発実践ガイド
更新日:2025/01/23
18 view
-
【WordPress】プラグイン不使用でカスタムタクソノミーを設定、絞り込み検索について
更新日:2025/01/26
18 view
-
Express、FastAPIを使用し、二重fetch構成のメリット
更新日:2025/03/09
18 view
-
サブディレクトリでインストールしたWordPressをルートディレクトリで表示させる方法(Xserver編)
更新日:2025/01/19
17 view
-
クッキーとセッションの違い
更新日:2025/03/09
17 view