TOWN-TECH's log

2025年4月2日 11時41分

[PHP × Amazon Transcribe] PHPでサクッと文字起こしする

概要

妻が在宅の仕事を探し始めたので、クラウドワークス等で案件を概観していたところ「文字起こし」という分野に目が留まり、
「AWSの文字起こしサービス使えばお手軽&費用も抑え目でできないかな~」というところが発端です。

本記事では、ローカルのPHPスクリプトからAWSのS3へファイルアップロード、AWSのTranscribeで翻訳を実行、
文字起こしされたファイルをGETすることがゴールになります。

手持ちのサイト等で画面化も一瞬考えましたが、精度や使い勝手が未知数だったので、
とりあえず、というところでサクッとローカルPHPスクリプトでやっちゃいます。

Amazon Transcribeの概要

Amazon Transcribeは、機械学習(ML)を活用して音声ファイルを自動で文字起こしするAWSのサービスです。
以下の特徴があります:

  • 高精度の音声認識:ノイズが多い環境でもテキスト変換が可能
  • リアルタイム文字起こし:ストリーミング音声にも対応
  • 多言語対応:日本語を含む多数の言語をサポート
  • 話者識別(Speaker Diarization):複数の話者を認識し、区別できる
  • カスタム語彙(Custom Vocabulary):特定の専門用語や社内用語を登録可能
  • カスタム言語モデル(Custom Language Model, CLM):独自のデータを使って精度向上

環境構成

  • Win10
  • PHP 8.1.32
    • php.iniで下記は有効化しておいてください。
      • extension_dir = "ext"
        ~~~省略~~~
        extension=curl
  • composer 2.1.9

ディレクトリ構成

  • aws_transcribe
    • bin:実行用スクリプトを配置(CLIスクリプトなど)
    • data:音声データと変換結果を格納
      • in:文字起こし対象の音声ファイル
      • out:変換後のテキストファイル(JSONやTXT)
    • lib:AWS SDKや共通関数などのライブラリ
    • config.php:設定ファイル(AWSキーやS3バケット名)

手順

※phpとcomposerは事前にインストールしておいてください。

AWS SDK for PHPのインストール

cd C:\sites\aws_transcribe
composer require aws/aws-sdk-php

AWSマネジメントコンソール)アクセスキー情報を生成

  1. AWSマネジメントコンソールログイン
  2. サービス一覧から「IAM」を検索してクリック
  3. 左側のメニューから「ユーザー」を選択
  4. ボタン「ユーザーの作成」からユーザ作成
    1. 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
      1. AmazonTranscribeFullAccess
      2. AmazonS3FullAccess ※S3を使わない場合は不要
  5. 作成したユーザを選択。「アクセスキーを作成」からアクセスキーを生成する。下記をメモします。
    1. アクセスキー
    2. シークレットアクセスキー

AWSマネジメントコンソール)S3バケット作成

  1. AWSマネジメントコンソールログイン
  2. サービス一覧から「S3」を検索してクリック
  3. ボタン「バケットを作成」を選択
  4. ボタン「ユーザーの作成」からユーザ作成
    1. 「ポリシーを直接アタッチする」を選択。アタッチするポリシーは下記を選択
      1. AmazonTranscribeFullAccess
      2. AmazonS3FullAccess ※S3を使わない場合は不要
  5. 作成したユーザを選択。「アクセスキーを作成」からアクセスキーを生成する。下記をメモします。
    1. アクセスキー
    2. シークレットアクセスキー

ローカル)コーディング

下記3ファイルをコーディングしていきます。

config.php

bin/transcribe.php

lib/AwsTranscribe.php


ローカル)実行

cd C:\sites\aws_transcribe
php bin\transcribe.php

下記のようなメッセージが表示されれば成功です。

>php bin\transcribe.php
✅ 音声ファイルがS3にアップロードされました。
✅ Transcribeジョブが開始されました。
⏳ ジョブステータス: IN_PROGRESS
⏳ ジョブステータス: COMPLETED
✅ Transcribeジョブが完了しました。
✅ JSONファイルをダウンロードしました: C:\sites\aws_transcribe\bin/../data/out/transcribe-job-67eceb63e0ef9.json
✅ S3からJSONファイルを削除しました。
✅ S3からメディアファイルを削除しました。

以上です。