Speech-to-Text 用に音声ファイルを最適化する


このチュートリアルでは、Speech-to-Text で使用するために準備している音声ファイルのプリフライト チェックを実行する方法について説明します。音声ファイル形式に関する背景情報を提供し、Speech-to-Text で使用する音声ファイルの最適化の方法とエラーの診断方法を説明します。このチュートリアルは、技術者以外のメディア、エンターテイメントのプロ向けに作成されています。Google Cloud に関する深い知識は必要ありません。ローカルと Cloud Storage バケットの両方に保存されているファイルで gcloud コマンドライン ツールを使用する方法の基本知識のみが必要です。

目標

  • FFMPEG ツールをインストールします。
  • サンプル メディア ファイルをダウンロードします。
  • FFMPEG を使用して音声ファイルや動画ファイルを再生します。
  • FFMPEG を使用して音声ファイルのプロパティを抽出、コード変換、変換します。
  • Speech-to-Text をダイアログを含むさまざまなサンプル ファイルで実行します。

費用

このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。

料金計算ツールを使用すると、予想使用量に基づいて費用の見積もりを作成できます。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud CLI をインストールします。
  5. gcloud CLI を初期化するには:

    gcloud init
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. Google Cloud プロジェクトで課金が有効になっていることを確認します

  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    gcloud init

このチュートリアルでは、Cloud Shell を使用して、Cloud Storage バケットから Cloud Shell セッションにデータをコピーするなどの手順を実行します。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされています。このチュートリアルでは、多くの手順で gcloud CLI を使用します。また、後述のローカル ターミナルでチュートリアルの例を実行するのセクションで説明されているように、ソフトウェアとサンプル音声ファイルをローカルマシンにインストールして、ターミナルからこれらの同じ演習を実行します。

概要

このチュートリアルでは、音声と動画の録画、変換、ストリーミングを行うためのオープンソース ツールである FFMPEG を使用します。このチュートリアルの後半で、ツールの詳細について説明します。

音声ファイルの属性について

このセクションでは、メディア制作とポスト プロダクションのワークフローで使用される一般的な音声ファイル形式、サンプルレート、ビット深度、録音メディアについて説明します。

Speech-to-Text で最適な結果を得るには、音声文字変換に使用するファイルが、後半で説明する特定の最小仕様を満たすモノラル ファイルである必要があります。ファイルが仕様を満たしていない場合は、変更されたファイルの生成が必要な場合があります。たとえば、次の操作を行う必要があります。

  • 動画ファイルから音声データを抽出する。
  • マルチトラック音声ファイルから単一のモノラル トラックを抽出する。
  • 1 つの音声コーデックから、Speech-to-Text に適した別のコーデックにコード変換する。

サンプルレート(周波数範囲)

サンプルレートは音声ファイルの周波数範囲を決定します。音声ファイルを構成する 1 秒ごとのサンプルの数に基づいています。通常、デジタル音声ファイルの再現可能な最高周波数は、サンプルレートの半分に相当します。たとえば、44.1 kHz の音声ファイルから再生できる最高周波数はおよそ 22 kHz で、これは典型的なリスナーの聴覚の周波数応答範囲の上限かそれ以上です。

テレフォニーや通信のサンプルレートは、8 kHz から 16 kHz の範囲である傾向があります。このチュートリアルでは、メディアとエンターテイメント業界に特有の、一般的に 16 kHz よりも高い形式に焦点を当てています。テレフォニーやその他の音声アプリケーションについて詳しくは、拡張モデルによる電話音声の文字変換をご覧ください。

Speech-to-Text では、音声文字変換に使用する音声ファイルのサンプルレートには少なくとも 16 kHz をおすすめします。音声ファイルに見られるサンプルレートは、通常 16 kHz、32 kHz、44.1 kHz、48 kHz です。明瞭度は周波数範囲、特に高い周波数に大きく影響されるため、サンプルレートが 16 kHz 未満だと 8 kHz 以上の情報がほとんどない音声ファイルになってしまいます。これにより、Speech-to-Text が音声を正しく文字起こしすることができない場合があります。音声の明瞭度を保持するためには、2 kHz から 4 kHz の範囲の情報が必要ですが、より高い範囲の周波数の倍音(複数)も重要です。したがって、サンプルレートの最小値を 16kHz に保つことをおすすめします。

サンプルレートは別のサンプルレートに変換できます。ただし、周波数範囲の情報は低いサンプルレートによって制限され、高いサンプルレートに変換することで復元できないため、音声をアップサンプリングしてもメリットはありません。つまり、8 kHz から 44.1 kHz にアップサンプリングすると、再現可能な周波数範囲が低いサンプルレートの半分、つまりおよそ 4 kHz に制限されます。このチュートリアルでは、さまざまなサンプルレートとビット深度で録音された音声ファイルを聞いて、自分で違いを確認できます。

ビット深度(ダイナミック レンジ)

音声ファイルのビット深度は、最も静かな音から最も大きな音の範囲とファイルの信号対雑音比を決定します。ダイナミック レンジは周波数応答に比べて音声文字変換への影響は少ないですが、8 ビット以下のビット深度では音声トラックに過度の量子化ノイズが発生し、音声文字変換が困難になることがあります。(量子化誤差は、アナログ入力信号とその信号のデジタル出力値のマッピングの間の丸め誤差です。誤差は、音声の歪みの原因となり、音の再現性に直接影響を与えます。)Speech-to-Text を使用した分析のファイルの推奨ビット深度は 16 ビット以上です。サンプリングの周波数と同様に、ダイナミック レンジの情報は元の 8 ビット形式に限定されるため、ビット深度を 8 ビットから 16 ビットに変換するメリットはありません。

録音メディア

元の録音メディアは音声ファイルの品質にも影響します。たとえば、元々は磁気テープに録音されていた音声コンテンツには、ファイルにバックグラウンドの雑音が埋め込まれている場合があります。場合によっては、Speech-to-Text を使用する際に、音声文字変換の結果を改善するために、ノイズのある音声を前処理する必要があります。ノイズのある録音やバックグラウンド ノイズ干渉の扱いについては、このチュートリアルでは扱いません。詳しくは、Speech-to-Text ドキュメントのおすすめの方法をご覧ください。

FFMPEG の概要

このチュートリアルでは、音声ファイルを操作するために FFMPEG を使用します。FFMPEG ツールセットには、次のようなさまざまな機能があります。

  • 音声ファイルまたは動画ファイルを再生する。
  • 音声ファイルを Speech-to-Text で認識されたコーデックに変換する。
  • 音声ファイルのサンプルレートとビットレートを最適な構成に変換して、Speech-to-Text で分析する。
  • トランスポート ストリーム ファイルまたは動画ファイルから個別の音声トラックまたはストリームを抽出する。
  • ステレオ ファイルを 2 つのモノラル ファイルに分割する。
  • 5.1 音声ファイルを 6 つのモノラル ファイルに分割する。
  • イコライジングとフィルタリングを適用して音声を明瞭にする。

FFMPEG の ffprobe 関数を使用して、メディア ファイルに関連付けられているメタデータを表示することもできます。これは、機械学習分析のファイル形式と形式に関連する問題を診断する場合に重要です。

Speech-to-Text によって認識されるコーデック

Speech-to-Text は多数の音声ファイル形式を認識しますが、特定のコーデックを正しく読み上げたり分析したりしない場合があります。このチュートリアルでは、コンテンツがサポートされているファイル形式であることを確認する方法について説明します。

チュートリアルでは、Speech-to-Text を使用する前に、メタデータ情報を読み取り、潜在的な問題を明らかにして修正します。同じツールを使用して、互換性のないファイルを検出した場合は、サポートされている形式に変換できます。

Speech-to-Text は次のコーデックを認識します。

  • FLAC: Free Lossless Audio Codec
  • LINEAR16: WAV、AIFF、AU、RAW コンテナで使用される非圧縮パルス符号変調(PCM)形式
  • MULAW: 米国と日本での通信用に設計された PCM コーデック
  • AMR: 音声用に設計された適応型マルチレート コーデック
  • AMR_WB: AMR の 2 倍の帯域幅を持つ広帯域のバリエーション
  • OGG_OPUS: 低レイテンシ アプリケーション用に設計されたロッシー コーデック
  • SPEEX_WITH_HEADER_BYTE: ボイスオーバー IP(VOIP)アプリケーション用に設計されたコーデック

コーデックとファイル形式は同じではないことを理解しておく必要があります。ファイル名の拡張子は、ファイルの作成に使用されたコーデックが Speech-to-Text で読み取れることを示しているわけではありません。

このチュートリアルでは、メディアのワークフロー環境で頻繁に使用される FLAC コーデックと LINEAR16 コーデックに焦点を当てています。どちらもロスレス形式です。

Speech-to-Text で WAV ファイル(非圧縮リニア PCM 形式)を使用する場合、ファイルは最大 16 ビットの深度で、非浮動小数点形式でエンコードされている必要があります。.wav ファイル名の拡張子は、そのファイルが Speech-to-Text で読み取れることを保証するものではありません。このチュートリアルの分析用に音声ファイルを最適化するのセクションで、Speech-to-Text 内でファイルを文字起こしするために、ファイルを浮動小数点から整数(符号付き)ビット深度に変換する方法の例を示します。

環境の初期化

このチュートリアルのタスクを実行する前に環境を初期化する必要があります。FFMPEG をインストールし、いくつかの環境変数を設定して、音声ファイルをダウンロードしてください。Cloud Shell インスタンスと Cloud Storage バケットの両方に保存されているメディア ファイルを使用します。さまざまなソースを使用することで、Speech-to-Text のさまざまな機能を操作できます。

このセクションでは、Cloud Shell インスタンス ストレージと Cloud Storage バケット内のサンプルデータ ストレージの場所を指す FFMPEG をインストールし、環境変数を設定します。メディア ファイルはどちらの場所でも同じで、このチュートリアルの一部の例では、Cloud Shell と Cloud Storage バケットの両方のファイルにアクセスします。後述のローカル ターミナルでチュートリアルの例を実行するのセクションで説明するように、ローカルマシンに FFMPEG をインストールしてこれらの同じ演習を実行できます。

  1. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

  2. Cloud Shell で、現行バージョンの FFMPEG をインストールします。

    sudo apt update
    sudo apt install ffmpeg
    
  3. FFMPEG がインストールされたことを確認します。

    ffmpeg -version
    

    バージョン番号が表示されたら、インストールは正常に完了しています。

  4. プロジェクト ファイルのディレクトリを作成します。

    mkdir project_files
    
  5. 後の手順で作成する出力ファイルのディレクトリを作成します。

    mkdir output
    
  6. サンプル音声ファイルをダウンロードします。

    gsutil -m cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
    
  7. Cloud Storage バケット名の環境変数を作成します。

    export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
    
  8. ダウンロードしたサンプル音声ファイルを指す Cloud Shell インスタンス ディレクトリ パスの環境変数を作成します。

    export PROJECT_FILES=~/project_files
    

メディア ファイルのメタデータを調べる

Speech-to-Text で音声ファイルや動画ファイルを分析する場合は、ファイルのメタデータの詳細を知る必要があります。これにより、問題の原因となる可能性のある不整合や互換性のないパラメータを特定できます。

このセクションでは、FFMPEG の ffprobe コマンドを使用して、複数のメディア ファイルのメタデータを調べ、ファイルの仕様を理解します。

  1. Cloud Shell で、HumptyDumptySample4416.flac ファイルのメタデータを表示します。

    ffprobe $PROJECT_FILES/HumptyDumptySample4416.flac
    

    次のような出力が表示されます。

    Input #0, flac, from 'project_files/HumptyDumptySample4416.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 283 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, mono, s16
    

    この出力はファイルに次のようなメタデータがあることを示します。

    • 音声ファイルの長さは 26.28 秒です。
    • ビットレートは 1 秒あたり 283 KB です。
    • コーデックの形式は FLAC です。
    • サンプルレートは 44.1kHz です。
    • このファイルは単一チャンネルのモノラル ファイルです。
    • ビット深度は 16 ビット(符号付き整数)です。
  2. HumptyDumptySampleStereo.flac ファイルのメタデータを表示します。

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    次のような出力が表示されます。

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    このファイルと以前のファイルの違いは、このファイルは 1 つのモノラル トラックではなく 2 つのチャンネル再生を含むため、ビットレートが高いステレオ ファイル(283 KB/秒ではなく 378 KB/秒)であることです。他の値はすべて同じです。

    Speech-to-Text を使用して処理する音声ファイル内のチャンネル数を確認する必要があります。音声ファイルの音声チャンネルは 1 つだけにしてください。同じファイル内で複数の音声チャンネルを音声文字変換するには、後述の分析用に音声ファイルを最適化するのセクションで説明するコマンドをスクリプト化することをおすすめします。

  3. 5.1 音声ミックス ファイルのメタデータを表示します。

    ffprobe $PROJECT_FILES/Alice_51_sample_mix.aif
    

    次のような出力が表示されます。

    Duration: 00:00:58.27, bitrate: 4610 kb/s
        Stream #0:0: Audio: pcm_s16be, 48000 Hz, 5.1, s16, 4608 kb/s
    

    このファイルは、モノラル ファイルやステレオ ファイルとは異なるフォーマットであるため、追加情報が表示されます。この場合、音声はリニア PCM 形式で、サンプルレートは 44.1 kHz、ビットレートは 16 ビット(符号付き整数、リトル エンディアン)で録音されています。

    5.1 の名称に注目してください。音声ファイルには 6 つの音声トラックが含まれているため、このファイルのデータ通信速度は前の例のいずれよりも大幅に高い 4608 Kbit /秒です。

    このチュートリアルの後半では、Speech-to-Text を使用してこのファイルの文字起こしをしようとすると、エラーが発生する仕組みについて説明します。さらに重要な点として、Speech-to-Text でファイルをエラーなしで使用できるようにファイルを最適化する方法を確認します。

分析用に音声ファイルを最適化する

前述のように、Speech-to-Text を使用する場合は、音声文字変換プロセスでエラーが発生しないように、音声ファイルを単一チャンネルのモノラル ファイルにする必要があります。次のテーブルに、一般的な音声形式と、モノラル ファイルを処理するための変換プロセスを示します。

現在の音声形式 変換プロセス 出力音声形式
モノラル 抽出は不要 FLAC または LINEAR16
ステレオ 2 つのモノラル ファイルに分割するか、モノラル ファイルにダウンミックスする FLAC または LINEAR16
マルチトラック(5.1) 6 つのモノラル ファイルに分割 FLAC または LINEAR16
マルチストリームの音声/動画 独立したモノラル ファイルに分割 FLAC または LINEAR16

複数の音声トラックを含むファイルを処理するには、FFMPEG またはその他の音声編集ツールを使って、ステレオ ファイルからモノラル トラックを抽出します。または、Speech-to-Text のドキュメントの複数のチャンネルを含む音声の文字変換セクションで説明されているように、処理を自動化することもできます。このチュートリアルでは、FFMPEG を使用してステレオ ファイルから個別のモノラル トラックを抽出するオプションについて確認します。

前のセクションで示したように、ffprobe コマンドを使用してファイルに含まれる音声チャンネルの数を確認し、必要に応じて ffmpeg コマンドを使用してファイルを抽出または変換します。

無効な形式に基づいてエラーをプレビューする

正しくない形式が音声文字変換にどのように影響するかを確認するには、モノラル形式でないファイルで Speech-to-Text の実行を試すことができます。

  1. Cloud Shell で、HumptyDumptySampleStereo.flac ファイルに対して Speech-to-Text を実行します。

    gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \
        --language-code='en-US'
    

    次のような出力が表示されます。

    ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
    

    ファイルのコーデック形式、サンプルレート、ビット深度は正しいものの、ステレオ記述子は音声ファイルに 2 つのトラックがあることを意味します。そのため、Speech-to-Text を実行すると Invalid audio channel count エラーが発生します。

  2. ファイルに対して ffprobe コマンドを実施します。

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    次のような出力が表示されます。

    Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    これにより、Speech-to-Text のエラーがステレオ ファイルを処理しようとしたときに発生することがわかります。

スクリプトを使用してステレオ ファイルを管理する方法についての詳細は、Speech-to-Text ドキュメントの複数のチャンネルを含む音声の文字変換をご覧ください。

ステレオ ファイルを複数の FLAC モノラル ファイルに分割する

複数トラックのエラーを回避する方法の 1 つの例は、ステレオ音声ファイルから 2 つのモノラル トラックを抽出することです。抽出されるトラックは FLAC 形式で、出力ディレクトリに書き込まれます。ステレオ ファイルから 2 つのモノラル ファイルを抽出する場合は、抽出ファイル名を作成する際に元のファイル チャンネルの場所を示す名前を使用することをおすすめします。たとえば、次の手順では、接尾辞 FL を使用して左チャンネルを指定し、接尾辞 FR を使用して右チャンネルを指定します。

文字起こしする音声サンプルが両方のチャンネルにある場合は、音声文字変換に使用されるチャンネルは 1 つだけです。ただし、別のチャンネルに別の話者が録音されている場合は、チャンネルを別々に文字起こしすることをおすすめします。Speech-to-Text は 1 回の録音で複数の音声を認識できます。ただし、各音声を別々のチャンネルに分離することで、音声文字変換の信頼レベルが高くなります(信頼値は、音声認識ではワードエラー率または WER とも呼ばれます)。同じ録音で複数の音声を操作する方法については、Speech-to-Text ドキュメントの音声録音内の異なる話者の分離をご覧ください。

  • Cloud Shell で、HumptyDumptySampleStereo.flac ステレオ ファイルを 2 つのモノラル ファイルに分割します。

    ffmpeg -i $PROJECT_FILES/HumptyDumptySampleStereo.flac -filter_complex "[0:a]channelsplit=channel_layout=stereo[left][right]" -map "[left]" output/HumptyDumptySample_FL.flac -map "[right]" output/HumptyDumptySample_FR.flac
    

    出力は次のようになります。HumptyDumptySample_FL.flac(フロント左チャンネル)と HumptyDumptySample_FR.flac(フロント右チャンネル)のモノラル ファイルが表示されます。

    Output #0, flac, to 'HumptyDumptySample_FL.flac':
      Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
      Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    Stream mapping:
      Stream #0:0 (flac) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
    (...)
    Output #0, flac, to 'HumptyDumptySample_FL.flac':
    (...)
    Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'HumptyDumptySample_FR.flac':
    (...)
    Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    size=918kB time=00:00:26.27 bitrate= 286.2kbits/s speed= 357x
    video:0kB audio:1820kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
    

    このファイルは Speech-to-Text 用に最適化されました。

5.1 音声ファイルを複数のモノラル ファイルに分割する

音声ファイルを最適化する別の例として、5.1 音声ファイルを個別の FLAC モノラル ファイルに分割する方法があります。5.1 ミックスのようなマルチチャンネル ミックスのチャンネルを参照する場合、通常はステレオ ファイルやモノラル ファイルとは異なるファイル名を取得します。左チャンネルは通常フロント左の FL として指定し、右チャンネルはフロント右の FR として指名します。ここで言及される残りの 5.1 ミックスの名前は、フロント センターの FC、低周波数効果の LFE、バック左(サラウンド左とも呼ばれます)の BL、バック右(サラウンド右とも呼ばれます)の BR です。これらは標準的な呼称ではありませんが、音声ファイルの発生源を特定するための慣例です。

一般的に、映画やテレビのマルチチャンネル音声ファイルでは、メインのダイアログにはフロント センター チャンネルを使用します。通常、このファイルはミックス内のダイアログの大部分を含むため、Speech-to-Text を使用するときに選択します。

ポスト プロダクション環境では、ダイアログ、音楽、効果音の主要な要素はステムと呼ばれるグループに分けられ、最終的なミックスが終了するまで、ミックスのすべてのダイアログが音楽と効果音から隔離されます。ダイアログのステムはダイアログのみで構成されているため、Speech-to-Text がステムを文字起こしする際に最終的なミックスからセンター チャンネルを引き出すよりも良い結果をもたらします。これは、抽出されたセンター チャンネルがダイアログ以外の音と混ざって、聞き取りにくくなる可能性があるためです。

  1. Cloud Shell で、Alice_51_sample_mix.aif ファイルを FLAC ファイルに分割し、各チャンネルの出力ファイル名を指定します。

    ffmpeg -i $PROJECT_FILES/Alice_51_sample_mix.aif -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/Alice_FL.flac -map "[FR]" output/Alice_FR.flac -map "[FC]" output/Alice_FC.flac -map "[LFE]" output/Alice_LFE.flac -map "[BL]" output/Alice_BL.flac -map "[BR]" output/Alice_BR.flac
    

    次のような出力が表示されます。

    Duration: 00:00:55.00, bitrate: 4235 kb/s
      Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, 5.1, s16, 4233 kb/s
    Stream mapping:
      Stream #0:0 (pcm_s16le) -> channelsplit
      channelsplit:FL -> Stream #0:0 (flac)
      channelsplit:FR -> Stream #1:0 (flac)
      channelsplit:FC -> Stream #2:0 (flac)
      channelsplit:LFE -> Stream #3:0 (flac)
      channelsplit:BL -> Stream #4:0 (flac)
      channelsplit:BR -> Stream #5:0 (flac)
    Press [q] to stop, [?] for help
    Output #0, flac, to 'Alice_FL.flac':
    (...)
        Stream #0:0: Audio: flac, 44100 Hz, 1 channels (FL), s16, 128 kb/s
    (...)
    Output #1, flac, to 'output/Alice_FR.flac':
    (...)
        Stream #1:0: Audio: flac, 44100 Hz, 1 channels (FR), s16, 128 kb/s
    (...)
    Output #2, flac, to 'output/Alice_FC.flac':
    (...)
        Stream #2:0: Audio: flac, 44100 Hz, mono, s16, 128 kb/s
    (...)
    Output #3, flac, to 'output/Alice_LFE.flac':
    (...)
        Stream #3:0: Audio: flac, 44100 Hz, 1 channels (LFE), s16, 128 kb/s
    (...)
    Output #4, flac, to 'output/Alice_BL.flac':
    (...)
        Stream #4:0: Audio: flac, 44100 Hz, 1 channels (BL), s16, 128 kb/s
    (...)
    Output #5, flac, to 'output/Alice_BR.flac':
    (...)
        Stream #5:0: Audio: flac, 44100 Hz, 1 channels (BR), s16, 128 kb/s
    (...)
    
  2. 次のファイルをクリックして再生します。このファイルは Cloud Storage バケットにあり、名前をクリックすると、ブラウザの新しいタブでファイルが再生されます。

    Alice_mono_downmix.flac
    
  3. 先ほど作成した FC(センターのみのチャンネル ファイル)を再生します。(ダイアログは数秒の無音後に開始します)。

    Alice_FC.flac
    

    前のファイルとの明瞭度の違いに注目してください。このトラックは、ミックスのダイアログ部分のみをベースにしています。

音声ファイルの品質をテストする

Speech-to-Text を使用してメディア ファイルを変換する前に、ファイルを再生して、ML ツールで正確な結果が得られない可能性がある音質の異常値があるかどうかを確認することをおすすめします。このセクションでは、ファイル名をクリックしてブラウザでファイルを再生します(ヘッドフォンまたはダイナミック レンジの広いスピーカーを使用することをおすすめします)。

動画ファイルの音声を再生する

  1. 次のファイルをクリックして再生します。

    HumptyDumptySample4416.flac
    

    このファイルの周波数は 44.1 kHz で、ビット深度は 16 ビットです。このファイルの明確で歪みのない再現性と明瞭度に注目してください。これは、Speech-to-Text を使用した音声文字変換に適しています。

  2. 次の 5.1 形式の動画ファイルを再生して、センター チャンネルを除くすべてのチャンネルでダイアログなしのサラウンド ミックスを再生します。

    sample_51_mix_movie.mp4
    

    このファイルは 5.1 音声システムでの再生用に設計されています。ヘッドフォンのみを使用している場合や 2 チャンネルのシステムを使用している場合、再生中にすべてのチャンネルが聞こえるわけではありません(6 つのチャンネルすべてを聞くためには、5.1 システムで再生をデコードするか、2 チャンネルのステレオ ダウンミックスを作成する必要があります)。

    理想的には、ダイアログのみのチャンネルを Speech-to-Text に使用します。サンプル ファイルには、5 つのチャンネルに非ダイアログ音声、1 つのチャンネルにダイアログ音声があります。後述の分析用に音声ファイルを最適化するセクションでは、各トラックを聞くために、5.1 ファイルにエンコードされた 6 つのモノラル音声チャンネルを抽出する方法を学びます。これにより、Speech-to-Text の文字起こしの能力を向上させるために、ダイアログのみのチャンネル(通常センターまたはフロント センター チャンネル)を非ダイアログ チャンネルから分離できます。

同じファイルを異なるサンプルレートでテストする

以下のテーブルは、同じ音声ファイルの複数のバージョンの一覧です。それぞれ異なるビット深度とサンプルレートを使用しています。

音声ファイル サンプルレート/ビット深度
HumptyDumptySample4416.flac 44.1 kHz/16-bit Linear PCM
HumptyDumptySample2216.flac 22 kHz/16-bit Linear PCM
HumptyDumptySample1616.flac 16 kHz/16-bit Linear PCM
HumptyDumptySample1116.flac 11 kHz/16-bit Linear PCM
HumptyDumptySample0808.flac 8 kHz/8-bit Linear PCM
HumptyDumptyUpSample4416.flac 44.1 kHz(アップサンプリング)/16-bit Linear PCM
HumptyDumptySample4408.flac 44.1 kHz/8-bit Linear PCM
HumptyDumptySample4408to16.flac 44.1 kHz/16-bit Linear PCM(アップコンバーション)
  1. 上記のテーブルのファイルごとに、ファイル名をクリックして再生します(オーディオ プレーヤーがブラウザの新しいタブで開きます)。サンプルレートを下げると品質が異なることに注目してください。

    16 ビットのファイルでは、サンプルレートが低くなると再現性が低下し、8 ビットのファイル バージョンでは、量子化誤差により信号対雑音比が大幅に低下します。テーブルの最後のファイルは、元が 8kHz 8 ビットのファイルを 44.1kHz/16 ビットにアップサンプリングしたものです。音質が 8 kHz/8 ビットのファイルと同じであることに注目してください。

  2. Cloud Shell で、HumptyDumptySampleStereo.flac ファイルのメタデータを調べます。

    ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac
    

    次のような出力が表示されます。

    Input #0, flac, from 'project_files/HumptyDumptySampleStereo.flac':
        Duration: 00:00:26.28, start: 0.000000, bitrate: 378 kb/s
        Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
    

    出力には次の情報が表示されます。

    • ファイルの長さは 26 秒、28 フレームです。この情報は、gcloud speech recognize-long-running コマンドを使用して 1 分を超えるファイルを処理する場合など、高度なユースケースに役立ちます。
    • ファイルのビットレートは 378 kb/秒です。
    • ファイルのストリーム数は 1 です(これは、チャンネルの数によって異なります)。
    • ファイルのサンプルレートは 44.1kHz です。
    • 音声のチャンネルの数は 2(ステレオ)です。
    • ファイルのビット深度は 16 ビットです。

    トランスポート ストリームには、音声、動画、メタデータなど、複数のストリームを含めることができます。これらは、ストリームあたりの音声チャンネル数、動画ストリームのコーデック、動画ストリームのフレーム/秒の数など、それぞれ特性が異なります。

    メタデータから、これがステレオ ファイルであることがわかります。Speech-to-Text での分析に推奨されるデフォルトの音声チャンネルの数は 1 つのモノラル チャンネルであるため、これは重要です。

Speech-to-Text を使用してファイルの文字起こしを行う

モノラル ファイルを抽出したので、Speech-to-Text を使って音声トラックを文字起こしできます。gcloud ml speech コマンドを使用して、Speech-to-Text API を起動します。

  • クリーンな Alice_FC.flac ダイアログ ファイルの文字起こしをします。

    gcloud ml speech recognize ~/output/Alice_FC.flac \
        --language-code='en-US' --format=text
    

    音声文字変換には数秒かかります。次のような出力が表示されます。

    results[0].alternatives[0].confidence: 0.952115
    results[0].alternatives[0].transcript: the walrus and the carpenter were walking close at hand they whip like anything to see such quantities of sand if this were only cleared away they said it would be grand
    results[1].alternatives[0].confidence: 0.968585
    results[1].alternatives[0].transcript: " if 7 Maids with seven mops swept it for half a year do you suppose the walrus said that they could get it clear I doubt it said the Carpenter and shed a bitter tear"
    results[2].alternatives[0].confidence: 0.960146
    results[2].alternatives[0].transcript: " oysters come and walk with us the walrus did beseech a pleasant walk a pleasant talk along the Briny Beach we cannot do with more than four to give a hand to each the eldest oyster look at him but never a word he said the eldest oyster winked his eye and shook his heavy head"
    

「ダーティ」トラックの文字起こし

人が話している音声ファイルのダイアログに他の音の要素が混ざっている場合があります。これらは多くの場合、他の要素が混ざっていない「クリーン」なダイアログのみのトラックとは対照的に、「ダーティ」なトラックと呼ばれます。Speech-to-Text はノイズの多い環境でも音声を認識できますが、クリーンなトラックの場合に比べて精度が落ちる可能性があります。Speech-to-Text でファイルを分析する前に、ダイアログの明瞭性を向上させるために、追加の音声フィルタリングと処理が必要な場合があります。

このセクションでは、前の例で分析した 5.1 音声ファイルのモノラル ダウンミックスの文字起こしをします。

  1. Cloud Shell で、Alice_mono_downmix.flac ファイルの文字起こしをします。

    gcloud ml speech recognize $PROJECT_FILES/Alice_mono_downmix.flac \
        --language-code='en-US' --format=text
    

    次のような出力が表示されます。

    results[0].alternatives[0].confidence: 0.891331
    results[0].alternatives[0].transcript: the walrus and the carpenter Milwaukee Corsicana they reflect anything to see such quantity if this were only
    results[1].alternatives[0].confidence: 0.846227
    results[1].alternatives[0].transcript: " it's Sunday 7th March 23rd happy few supposed former said that they could get it clear I doubt it to the doctor and she said it did it to just come and walk with us"
    results[2].alternatives[0].confidence: 0.917319
    results[2].alternatives[0].transcript: " along the Briny Beach it cannot do with more than four to give a hand to each the eldest oyster look at him but he said it was poised to Rich's eye and shook his head"
    

    この分析の結果は、ダイアログをマスクする追加の音声のために不正確です。文字起こしの信頼レベルは 85% 未満です。出力からわかるように、テキストが録音内のダイアログと正確には一致しません。

さまざまなサンプルレートとビット深度の音声ファイルを文字起こしする

サンプルレートとビット深度が音声文字変換にどのように影響するかを理解するために、このセクションではさまざまなサンプルレートとビット深度で録音された同じ音声ファイルの文字起こしをします。これにより、Speech-to-Text の信頼レベルと全体的な音質との関係を確認できます。

  1. 次のテーブルのファイル名をクリックしてサンプルを聞き、品質の違いを確認します。ファイル名をクリックするたびに、ブラウザの新しいタブで音声ファイルが再生されます。

    音声ファイル名 ファイルの仕様
    Speech_11k8b.flac 11,025Hz サンプルレート、8 ビット深度
    Speech_16k8b.flac 16kHz サンプルレート、8 ビット深度
    Speech_16k16b.flac 16kHz サンプルレート、16 ビット深度
    Speech_441k8b.flac 44,100Hz サンプルレート、8 ビット深度
    Speech_441k16b.flac 44,100Hz サンプルレート、16 ビット深度
  2. Cloud Shell で、この例で最も低い音質を表す Speech_11k8b.flac ファイルの文字起こしをします。

    gcloud ml speech recognize $PROJECT_FILES/Speech_11k8b.flac \
        --language-code='en-US' --format=text
    

    次のような出力が表示されます。

    results[0].alternatives[0].confidence: 0.77032
    results[0].alternatives[0].transcript: number of Pentacle represent
    results[1].alternatives[0].confidence: 0.819939
    results[1].alternatives[0].transcript: " what people can get in trouble if we take a look at the X again"
    
  3. 大幅に高い再現性で録音された Speech_441k16b.flac ファイルの文字起こしをします。

    gcloud ml speech recognize $PROJECT_FILES/Speech_441k16b.flac \
        --language-code='en-US' --format=text
    

    次のような出力が表示されます。

    results[0].alternatives[0].confidence: 0.934018
    results[0].alternatives[0].transcript: that gives us the number of pixels per inch when magnified to a 40-foot screen size now we take that number and multiply it by the distance between our eyes the interocular distance of 2 and 1/2 inch number of 10 pixels in other words on a 40-foot screen 10 pixels of information represents 2 and 1/2 in anything farther apart than that and positive Parallax is going to start to force the eyes to rotate that word in order to use the image
    results[1].alternatives[0].confidence: 0.956892
    results[1].alternatives[0].transcript: " where people tend to get in trouble is by looking at these images on a small monitor now if we take a look at the same math using a smaller monitor in this case 60 in the screen size in the resolution to multiply It Again by the distance between our eyes we end up with eighty pixels of Divergence on a monitor which equals two and a half inches so on the monitor things might look fine but when magnified up to the larger screen in this case for defeat we've created a situation that's eight times what we can stand to look at its very painful and should be avoided"
    

    2 つの例の出力の信頼性の違いに注目してください。最初のファイル(Speech_11k8b.flac)は 8 ビット深度の 11kHz で録音され、信頼レベルは 78% 未満です。2 番目のファイルの信頼レベルは約 94% です。

  4. 必要に応じて、手順 1 のテーブルに記載されている他のファイルの文字起こしをして、音声ファイルのサンプルレートとビット深度の精度を比較します。

以下のテーブルは、前の手順 1 のテーブルに記載された各ファイルの Speech-to-Text の出力の概要を示しています。各ファイル形式の信頼値の結果の違いに注目してください(結果はわずかに異なる場合があります)。サンプルレートやビットレートが低い音声ファイルの音声文字変換は、音質が悪いために信頼性が低い結果を得る傾向にあります。

音声ファイル名 信頼度(セクション 1) 信頼度(セクション 2)
Speech_11k8b.flac 0.770318 0.81994
Speech_16k8b.flac 0.935356 0.959684
Speech_16k16b.flac 0.945423 0.964689
Speech_44.1k8b.flac 0.934017 0.956892
Speech_44.1k16b.flac 0.949069 0.961777

分析用に動画ファイルを最適化する

チュートリアルのこのセクションでは、ムービー ファイルから 5.1 音声を抽出するために必要な手順を説明します。

  1. Cloud Shell で 5.1 ムービー ファイルから 6 つのモノラル チャンネルを抽出し、個々のファイルを FLAC 形式に変換します。

    ffmpeg -i $PROJECT_FILES/sample_51_mix_movie.mp4 -filter_complex "channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" output/sample_FL.flac -map "[FR]" output/sample_FR.flac -map "[FC]" output/sample_FC.flac -map "[LFE]" output/sample_LFE.flac -map "[BL]" output/sample_BL.flac -map "[BR]" output/sample_BR.flac
    

    このコマンドは、次のファイルを出力ディレクトリに抽出します。

    sample_BL.flac
    sample_BR.flac
    sample_FC.flac
    sample_FL.flac
    sample_FR.flac
    sample_LFE.flac
    
  2. サンプル ファイルのメタデータを確認します。

    ffprobe $PROJECT_FILES/Speech_48kFloat.wav
    

    次のような出力が表示されます。

    Duration: 00:00:05.12, bitrate: 1536 kb/s
    Stream #0:0: Audio: pcm_f32le ([3][0][0][0] / 0x0003), 48000 Hz, mono, flt, 1536 kb/s
    

    pcm_f32leflt のメタデータ値は、このファイルが浮動小数点ビットレートであることを示します。浮動小数点ビットレートの WAV ファイルを符号付き整数形式に変換する必要があります。

  3. ファイルのビットレートを符号付き整数形式に変換します。

    ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav
    

    このコマンドは、ビットレートが符号付き整数形式の新しい WAV ファイルを作成します。

  4. 新しく作成したファイルのメタデータを確認します。

    ffprobe ~/output/Speech_48k16bNonFloatingPoint.wav
    

    次のような出力が表示されます。

    Duration: 00:00:05.12, bitrate: 768 kb/s
    Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 48000 Hz, 1 channels, s16, 768 kb/s
    

    メタデータは、変換後のファイルのビットレートが、pcm_s16les16 の名称で示されるように、符号付き整数(リトル エンディアン)形式であることを示します。

ローカル ターミナルでチュートリアルの例を実行する

このチュートリアルのすべてのサンプルは、ローカル コンピュータのターミナルから実行できます。サンプルをローカルで実行すると、単にブラウザで聞くのではなく、ffplay コマンドを使用して音声ファイルや動画ファイルを直接再生できます。

  1. ローカル コンピュータのターミナルに FFMPEG ツールをインストールします。

    sudo apt update
    sudo apt install ffmpeg
    
  2. サンプル ファイルをローカルマシンにダウンロードします。

    gsutil -m cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
    

    local_destination_path は、サンプル ファイルを配置する場所に置き換えます。

  3. LOCAL_PATH 環境変数を、サンプル ファイルをダウンロードしたパソコン上の場所に設定します。

    export LOCAL_PATH=local_destination_path
    

    local_destination_path は、前のステップで確認したパスに置き換えます。

  4. ターミナルで、ターミナルの ffplay コマンドを使用してサンプルの音声ファイルを聞きます。

    • 音声ファイル: ffplay $LOCAL_PATH/HumptyDumpty4416.flac
    • 動画ファイル: ffplay $LOCAL_PATH/sample_51_mix_movie.mp4
    • Cloud Storage バケットの再生: ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

    このチュートリアルの前半で使用したサンプルをローカル ターミナルでテストします。これにより、Speech-to-Text の最適な使用方法を理解できます。

トラブルシューティング

エラーはいくつかの要因によって引き起こされることがあるため、いくつかの一般的なエラーを検討し、それらを修正する方法を学ぶことをおすすめします。特定の音声ファイルに複数のエラーが発生し、音声文字変換処理が完了しない場合があります。

音声が長すぎます

gcloud speech recognize コマンドは、最大 1 分間のファイルを処理できます。たとえば、次の例を試してみましょう。

gcloud ml speech recognize $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

次のような出力が表示されます。

ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

このエラーは、speech recognize コマンドを使用して 1 分を超えるファイルを処理しようとした場合に発生します。

1 分より長く、80 分より短いファイルの場合は、speech recognize-long-running コマンドを使用できます。ファイルの長さを確認するには、次の例のように ffprobe コマンドを使用します。

ffprobe $PROJECT_FILES/HumptyDumpty4416.flac

出力は次のようになります。

Duration: 00:04:07.91, start: 0.000000, bitrate: 280 kb/s
Stream #0:0: Audio: flac, 44100 Hz, mono, s16

この音声ファイルの再生時間は約 4 分 8 秒です。

ローカル コンピュータから大きなファイルを読み取る

speech recognize-long-running コマンドは、ローカル コンピュータから最大 1 分間のファイルのみを処理できます。エラーが発生する可能性のある場所を確認するには、長い方のファイルに Cloud Shell で speech recognize-long-running コマンドを使用してみてください。

gcloud ml speech recognize-long-running $PROJECT_FILES/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

次のような出力が表示されます。

ERROR: (gcloud.ml.speech.recognize-long-running) INVALID_ARGUMENT: Request payload size exceeds the limit: 10485760 bytes.

このエラーは、音声の長さによるものではなく、ローカルマシン上のファイルのサイズによるものです。recognize-long-running コマンドを使用する場合、ファイルは Cloud Storage バケットに存在する必要があります。

1 分を超えるファイルを読み取るには、次のコマンドのように recognize-long-running を使用して Cloud Storage バケットからファイルを読み取ります。

gcloud ml speech recognize-long-running $GCS_BUCKET_PATH/HumptyDumpty4416.flac \
    --language-code='en-US' --format=text

このプロセスが完了するまでに数分かかります。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

プロジェクトの削除

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ