Amazon Transcribeを使って録画したセッション動画の文字起こしを行う
この記事ではAWSを使用してコミュニティイベントのセッション動画の文字起こしを自動化する手順が詳しく解説されています。手順には、AWSを利用して音声ファイルを生成し、文字起こし、レポート作成する過程が含まれています。文章内では具体的な設定や注意点も紹介されており、Amazon TranscribeやAmazon Bedrockを使用して作業を効率化する方法が解説されています。
目次
この記事では、AWSといくつかのコマンドを利用して、コミュニティイベントのセッション動画の文字起こしを行う方法を紹介しています。「身の回りの困りごとを楽しく解決! by Works Human Intelligence Advent Calendar 2024」17日目として投稿しています。
やりたかったこと
月に1回以上のペースで、DevRelとしてStripeのコミュニティイベントに参加しています。イベントのアーカイブ動画をYouTubeに公開したり、社内へのレポートなどを作ったりもしているのですが、開催頻度が増えてきたため、どうしてもセッションレポート・紹介などの記事作成が遅れつつあります。そのため、できるだけ作業内容を自動化するべく、試行錯誤を重ねています。
今回試したこと
今は、AWSを利用して作業の一部を自動化することに挑戦しています。作業の流れとしてはおおよそ次の手順で進めています。
- イベントにて動画を撮影する
- できるだけイベント中にXへポストを行い、後でレポート作成に使えるようにする
- 動画を確認・編集しながら、レポート内容を考案する
- 動画の公開とレポート作成を行う
この手順をまず、自動化できるレベルに分解しました。特に動画からレポートを作る部分について、AWSのBuilding Blockに従って構成できるように、細かい作業内容を書き出します。
- 動画から音声ファイルを生成する
- 音声ファイルから文字起こしを作成する
- 文字起こし内容をもとに、レポートを作成する
このように手順を分解すると、それぞれのステップに利用できるAWSのサービスが見つかります。
- AWS Elemental Media Convert: 動画から音声ファイルを生成する
- Amazon Transcribe: 音声ファイルから文字起こしを作成する
- Amazon Bedrock: 文字起こし内容をもとに、レポートを作成する
今回はこの3ステップのうち、Amazon Transcribeを利用した文字起こしと、Amazon Bedrockでのレポート作成について紹介します。
Amazon Transcribeを利用して、文字起こしを作成する
文字起こしの作成には、m4aやmp3形式の音声ファイルが必要です。動画ファイルのみ手元にある場合は、ffmpeg
コマンドなどで音声データのみ作成しておきましょう。準備ができたら、Amazon Transcribe管理画面から作成を開始します。
Transcribeでは変換処理をジョブと呼びます。ジョブの設定では、文字起こしする音声の言語をまず指定します。自動認識もありますが、言語がわかっている場合は指定した方が精度が高まるそうです。
言語を指定しておきましょう。ジョブに利用するモデルも選択できますので、より専門的な内容についてのセッションを文字起こしすることが多い場合などでは、カスタム言語モデルの作成も検討すべきかもしれません。
そのご、生成する文字起こしファイルの形式や保存先を指定します。管理画面で操作後に手動でダウンロードする場合は、デフォルトの設定で良いと思います。指定したS3バケットに出力する設定にしておくと、EventBridgeを利用して生成完了後のワークフローも自動実行できるため、自動化を目指す場合はこちらを選びましょう。
もしS3バケットを指定する場合は、Amazon Transcribeのジョブを実行するリージョンと同じリージョンにあるバケットを指定しましょう。Transcribeはまだ全てのAWSリージョンで利用できませんので、Transcribe用のS3バケットを準備しておく方がよさそうです。
続いて変換する音声やコンテンツ内容についての設定を行います。ここではたとえばMTGや社内むけのイベントで発言された個人情報を削除・マスキングする設定や、不適切な発言があった場合のフィルタリングなどが行えます。
ただし試してみたところ、個人情報(PII)のマスキング機能は日本語では利用できませんでした。この辺りは今後のアップデートに期待ですね。
これらの設定が終われば、ジョブを実行しましょう。ジョブの完了には少し時間がかかりますので、完了するまでの間、別の作業を進めるか休憩としましょう。
Amazon Transcribeで生成したテキストを取得する
ジョブが完了すると文字起こし(トランスリプション)のプレビューが行えます。ここでは文字起こしされた結果や字幕化するためのデータを確認し、ダウンロードすることができます。ワードごとに信頼度や何秒目に出てきたかなどが表示されますので、表記ゆれや意図しない文字起こし結果が見つかった場合は、この辺りの情報をもとに元動画と比較を行いましょう。
開発者にとってありがたいのは、手動で実行したジョブをAWS SDKで実行するためのサンプルが生成されることです。そのため、手動でジョブを実行し、設定や生成結果を比較検討した後で、SDK組み込みに着手することができます。
生成結果は、.vtt
と.json
の2種類で取得できました。.vtt
ファイルは字幕向けのデータですので、秒数とその区間での文字起こし結果が出力されています。このファイルとファイル内のデータを利用して、動画の文字起こしが行えます。
.json
ファイルの場合、生成されたトランスクリプトや識別されたスピーカー情報などのデータがJSONで生成されます。区間ごとの細かいデータはありませんが、speaker_labels
などの情報が取得できます。自動化する場合は、この2ファイルを必要に応じて使い分けて利用しましょう。
生成AI(Amazon Bedrock with Claude Sonnet)でレポートにする
スクリーンショットで文字起こし結果を確認できたかと思いますが、話者とマイクの距離や機材などの録音環境によって生成精度が変わってきます。イベントのセッション動画を録画したファイルで文字起こしを行う場合、体感としては「そのまま使うことは難しい」と認識しています。そのため、表記ゆれやコンテキストなどを踏まえた整形作業が必要です。この作業を人力で行うのはなかなか大変ですので、ここで生成AIを利用します。現在はAmazon BedrockのClaude Sonnetシリーズを利用して、次のようなプロンプトを実行しています。
次の文字起こしは、ウェブアプリケーション開発に関するセッションの文字起こしです。 生成AIを利用したため、表記揺れなどがあることに注意して熟読してください。 その上で、以下の内容を生成してください。
- 1: セッションの内容を詳細にまとめてください。
- 2: この動画を紹介するための、YouTube動画紹介文章を作成してください。
- 3 "2"で作成した文章を、Markdown形式で再度生成してください
- 4: 最後に、この動画を紹介するブログ記事のスラッグを提案してください
== transcript start ===
あとは生成された文章を確認し、細かいニュアンスの調整などを施してレポート化します。生成AIを利用しても表記揺れなどが起こることはありますが、トランスクリプトそのものをレビューするよりは大幅に時間を削減できました。
最終的に目指したい自動化フロー
ここまででも手作業と比較してかなりの時間短縮ができました。ただしAWSを利用しているならば、まだまだ自動化を期待できます。現在構想しているフローとしては次のようなものを考えています。
- Amazon S3へ録画した動画ファイルをアップロードする
- Amazon EventBridge経由でAWS Step Functions またはAWS Lambdaを実行する
- ファイルの形式やパスなどの情報を確認する
- 動画ファイルがアップロードされた場合は、ffmpegまたはAWS Elemental Media Convertを利用して音声ファイルを作る
- Amazon Transcribeを利用して文字起こしを行う
- Amazon Bedrockを利用して文字起こし内容を整形する
- 生成した情報をDynamoDBまたはmicroCMSなどに保存し、
・動画ファイル形式がMP3、MP4、WAV、FLAC、AMR、OGG、WebMかを確認する
・上記以外の場合、mp3またはmp4へ変換するmedia convert jobを起動する
・上記の場合、次のステップに進む
・transcribeで文字起こしする
・bedrockで文字起こしした内容の不自然な部分を修正する