為 Speech-to-Text 最佳化音訊檔案


本教學課程說明如何對準備搭配 Speech-to-Text 使用的音訊檔案執行前置檢查。本頁面會說明音訊檔案格式的背景資訊,並介紹如何最佳化音訊檔案,以便搭配 Speech-to-Text 使用,以及如何診斷錯誤。本教學課程專為非技術人員、媒體和娛樂業專業人士,以及後製專業人員設計。您不必深入瞭解Google Cloud,只要具備基本知識,知道如何搭配使用 gcloud 指令列工具,處理儲存在本機和 Cloud Storage 值區中的檔案即可。

目標

  • 安裝 FFMPEG 工具。
  • 下載範例媒體檔案。
  • 使用 FFMPEG 播放音訊和影片檔案。
  • 使用 FFMPEG 擷取、轉碼及轉換音訊檔案屬性。
  • 對含有對話內容的各種範例檔案執行語音轉文字。

費用

本教學課程使用下列 Google Cloud的計費元件:

您可以使用 Pricing Calculator,根據您的預測使用量產生預估費用。

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  6. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  11. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  12. 在本教學課程中,您會使用 Cloud Shell 執行程序,例如將資料從 Cloud Storage 值區複製到 Cloud Shell 工作階段。Cloud Shell 是已預先安裝 Google Cloud CLI 的殼層環境。在本教學課程中,您會使用 gcloud CLI 執行許多步驟。 您也可以在本機電腦上安裝軟體和範例音訊檔案,並從終端機執行這些練習,詳情請參閱後續的「在本機終端機中執行教學課程範例」一節。

    總覽

    在本教學課程中,您會使用 FFMPEG,這是一項開放原始碼工具,可用於錄製、轉換及串流音訊和影片。本教學課程稍後會進一步說明這項工具。

    瞭解音效檔案屬性

    本節說明媒體製作和後製工作流程中常見的音訊檔案類型、取樣率、位元深度和錄音媒體。

    如要獲得最佳 Speech-to-Text 轉錄結果,請務必使用單聲道檔案,且檔案須符合特定最低規格 (詳見下文)。如果檔案不符合規格,可能需要產生修改後的檔案。舉例來說,您可能需要執行下列操作:

    • 從影片檔案擷取音訊資料。
    • 從多重音軌音訊檔案擷取單一單聲道音軌。
    • 從某個音訊轉碼器轉碼為更適合 Speech-to-Text 的轉碼器。

    取樣率 (頻率範圍)

    取樣率決定音訊檔案的頻率範圍。這是根據音訊檔案每秒的樣本數計算而得。數位音訊檔案可重現的最高頻率通常等於取樣率的一半。舉例來說,44.1 kHz 音訊檔可重現的最高頻率約為 22 kHz,這已達到或超過一般聽者的頻率響應範圍上限。

    電話和電信的取樣率通常介於 8 kHz 到 16 kHz 之間。本教學課程著重於媒體和娛樂產業專用的格式,這類格式通常高於 16 kHz。如要進一步瞭解電話和其他音訊應用程式,請參閱「使用強化版模型轉錄手機音訊」。

    建議您在用於語音轉文字服務的音訊檔案中,使用至少 16 kHz 的取樣率。音訊檔案的取樣率通常為 16 kHz、32 kHz、44.1 kHz 和 48 kHz。因為可理解度會受到頻率範圍的影響 (尤其是較高的頻率),如果取樣率低於 16 kHz,音訊檔案在 8 kHz 以上的資訊就會很少或沒有。這可能會導致 Speech-to-Text 無法正確轉錄語音。語音清晰度需要 2 kHz 到 4 kHz 範圍內的資訊,不過高頻範圍內的諧波 (倍數) 對於維持語音清晰度也很重要。因此,將取樣率維持在最低 16 kHz 是個好做法。

    您可以轉換取樣率。不過,音訊升頻沒有任何好處,因為頻率範圍資訊會受限於較低的取樣率,無法透過轉換為較高的取樣率復原。也就是說,如果將取樣率從 8 kHz 升頻至 44.1 kHz,可重現的頻率範圍會限制在較低取樣率的一半,也就是大約 4 kHz。在本教學課程中,您將聆聽以各種取樣率和位元深度錄製的音訊檔案,親自感受差異。

    位元深度 (動態範圍)

    音訊檔案的位元深度決定了最安靜到最大聲的聲音範圍,以及檔案的訊號雜訊比。動態範圍對轉錄品質的影響,不如頻率響應那麼大,但位元深度若為 8 位元或更低,可能會導致音軌出現過多的量化雜訊,難以準確轉錄。(量化錯誤是指類比輸入訊號與該訊號數位輸出值對應之間的捨入誤差。這些錯誤會導致可聽見的失真,直接影響音訊保真度。) 建議使用 16 位元以上的位元深度,透過語音轉文字分析檔案。與取樣頻率相同,將位元深度從 8 位元升級至 16 位元並無優勢,因為動態範圍資訊僅限於原始的 8 位元格式。

    錄製媒介

    原始錄音媒介也可能影響音訊檔案的品質。 舉例來說,原本錄製在磁帶上的音訊內容可能在檔案中嵌入背景嘶嘶聲。在某些情況下,您可能需要預先處理有雜訊的音訊,才能在使用 Speech-to-Text 進行轉錄時獲得更佳的結果。本教學課程不會討論如何處理有雜訊的錄音內容和背景噪音干擾。詳情請參閱 Speech-to-Text 說明文件中的「最佳做法」。

    FFMPEG 簡介

    在本教學課程中,您會使用 FFMPEG 處理音訊檔案。FFMPEG 工具組提供各種功能,包括:

    • 播放音訊或影片檔案。
    • 將音訊檔案轉換為 Speech-to-Text 支援的編碼格式。
    • 將音訊檔案取樣率和位元率轉換為最佳設定,以便 Speech-to-Text 進行分析。
    • 從傳輸串流檔案或影片檔案中擷取個別音軌或串流。
    • 將立體聲檔案分割為兩個單聲道檔案。
    • 將 5.1 音訊檔案分割成六個單聲道檔案。
    • 套用等化和篩選功能,提升音訊清晰度。

    您也可以使用 FFMPEG 的 ffprobe 函式,顯示與媒體檔案相關聯的中繼資料。如果您想診斷與機器學習分析的檔案類型和格式相關的問題,這項功能就非常重要。

    Speech-to-Text 支援的轉碼器

    雖然 Speech-to-Text 可辨識多種音訊檔案格式,但可能無法正確讀取或分析特定轉碼器。本教學課程說明如何確認內容是否為支援的檔案格式。

    在本教學課程中,您會讀取中繼資料資訊,找出並修正潛在問題,然後再使用語音轉文字。如果發現檔案不相容,您可以使用相同工具將檔案轉換為支援的格式。

    Speech-to-Text 可辨識下列轉碼器:

    • FLAC: 免費無損音訊轉碼器
    • LINEAR16:未壓縮的脈衝編碼調變 (PCM) 格式,用於 WAV、AIFF、AU 和 RAW 容器
    • MULAW:專為美國和日本電信設計的 PCM 編碼解碼器
    • AMR:專為語音設計的自動調整多重速率轉碼器
    • AMR_WB:AMR 的寬頻變體,頻寬是 AMR 的兩倍
    • OGG_OPUS:專為低延遲應用程式設計的有損編解碼器
    • SPEEX_WITH_HEADER_BYTE:專為網路電話 (VoIP) 應用程式設計的編解碼器

    請務必瞭解,編解碼器和檔案格式並不相同。副檔名不一定表示 Speech-to-Text 可以讀取建立檔案時使用的轉碼器。

    本教學課程著重於 FLAC 和 LINEAR16 編碼器,因為這兩種編碼器經常出現在媒體工作流程環境中。這兩種格式都是無損格式。

    如果使用 WAV 檔案 (採用未壓縮的線性 PCM 格式) 搭配語音轉文字服務,檔案深度不得超過 16 位元,且必須以非浮點格式編碼。.wav 副檔名無法保證語音轉文字服務可以讀取檔案。本教學課程的「針對分析作業最佳化音訊檔案」一節提供範例,說明如何將檔案從浮點數轉換為整數 (已簽署) 位元深度,以便在 Speech-to-Text 中轉錄檔案。

    初始化環境

    執行本教學課程的作業前,請先初始化環境,包括安裝 FFMPEG、設定一些環境變數,以及下載音訊檔案。您會使用儲存在 Cloud Shell 執行個體和 Cloud Storage bucket 中的媒體檔案。使用不同來源可讓您運用語音轉文字的不同功能。

    在本節中,您將安裝 FFMPEG,並設定環境變數,指向 Cloud Shell 執行個體儲存空間和 Cloud Storage bucket 中的範例資料儲存位置。這兩個位置的媒體檔案相同,本教學課程中的部分範例會從 Cloud Shell 和 Cloud Storage 值區存取檔案。您可以在本機上安裝 FFMPEG,並執行這些練習,詳情請參閱「在本機終端機中執行教學課程範例」一節。

    1. In the Google Cloud console, activate Cloud Shell.

      Activate 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. 下載範例音訊檔案:

      gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/
      
    7. 為 Cloud Storage bucket 名稱建立環境變數:

      export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files
      
    8. 為 Cloud Shell 執行個體目錄路徑建立環境變數,指向已下載的範例音訊檔案:

      export PROJECT_FILES=~/project_files
      
    9. 檢查媒體檔案中的中繼資料

      使用 Cloud 語音轉文字分析音訊或影片檔案時,您需要瞭解檔案中繼資料的詳細資訊。這有助於找出可能導致問題的不一致或不相容參數。

      在本節中,您將使用 FFMPEG 中的 ffprobe 指令檢查多個媒體檔案的 metadata,瞭解檔案規格。

      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 秒。
        • 位元率為每秒 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
        

        這個檔案與先前的檔案不同,因為這是立體聲檔案,位元率較高 (378 KB/秒,而非 283 KB/秒),內含雙聲道播放,而非單一單聲道音軌。其他值都相同。

        請檢查要使用 Speech-to-Text 處理的音訊檔案聲道數,音訊檔案應只有一個聲道。如要轉錄同一檔案中的多個音訊聲道,建議您按照稍後「最佳化音訊檔案以利分析」一節所述,編寫指令腳本。

      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 指定項目。這個檔案的資料速率為每秒 4608 K 位元,遠高於先前的範例,因為音訊檔案包含 6 個音軌。

        在本教學課程的後續內容中,您會瞭解嘗試使用 Speech-to-Text 轉錄這個檔案時,會發生哪些錯誤。更重要的是,您將瞭解如何最佳化檔案,以便搭配語音轉文字服務使用,且不會發生錯誤。

      最佳化音訊檔案以供分析

      如前所述,使用 Speech-to-Text 時,音訊檔案必須是單聲道檔案,才能避免轉錄過程發生錯誤。下表列出常見的音訊格式,以及將單聲道檔案轉換為可處理格式的程序。

      目前的音訊格式 轉換程序 輸出音訊格式
      單聲道 無須擷取 FLAC 或 LINEAR16
      立體聲 分割成 2 個單聲道檔案,或下混成單聲道檔案 FLAC 或 LINEAR16
      多軌 (5.1) 分割成 6 個單聲道檔案 FLAC 或 LINEAR16
      多串流音訊/視訊 分割成個別單聲道檔案 FLAC 或 LINEAR16

      如要處理含有多個音軌的檔案,請使用 FFMPEG 或其他音訊編輯工具,從立體聲檔案中擷取單聲道音軌。或者,您也可以按照「語音轉文字」說明文件的「轉錄多頻道音訊」一節所述,自動執行這項程序。在本教學課程中,您將瞭解如何使用 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
        

        雖然檔案的轉碼器格式、取樣率和位元深度都正確,但立體聲描述元表示音訊檔案中有兩個音軌。因此,執行 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 單聲道檔案

      舉例來說,如要避免多重音軌錯誤,可以從立體聲音訊檔案中擷取兩個單音軌。產生的音軌為 FLAC 格式,並會寫入輸出目錄。從立體聲檔案擷取兩個單聲道檔案時,建議為擷取的檔案建立名稱,指出原始檔案的聲道位置。舉例來說,在下列程序中,您會使用 FL 後置字元指定左聲道,並使用 FR 後置字元指定右聲道。

      如果轉錄的音訊樣本同時位於兩個聲道,系統只會使用其中一個聲道進行轉錄。不過,如果不同說話者是透過不同聲道錄製,建議您分別轉錄各個聲道。Speech-to-Text 可以辨識單一錄音中的多個聲音。不過,將每個聲音分別放在不同聲道,可提高轉錄的準確度。(在語音辨識中,信賴度值也稱為字詞錯誤率或 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
        

        這個檔案現在已針對語音轉文字服務進行最佳化。

      將 5.1 聲道音訊檔案分割為多個單聲道檔案

      另一個音訊檔案最佳化範例是將 5.1 音訊檔案分割為個別的 FLAC 單聲道檔案。在多聲道混音 (例如 5.1 混音) 中參照聲道時,檔案名稱指定通常與立體聲或單聲道檔案不同。左聲道檔案通常會指定為前左聲道的 FL,右聲道則指定為前右聲道的 FR。5.1 混音的其餘聲道在此稱為FC (前中)、LFE (低頻音效)、BL (後左,又稱環繞左) 和BR (後右,又稱環繞右)。這些並非標準名稱,但這是識別音訊檔案來源的慣例做法。

      通常在電影和電視的多聲道音訊檔案中,主要對白是由前置中央聲道傳送。使用語音轉文字功能時,通常會選擇這個檔案,因為當中通常包含大部分的對話。

      在後製環境中,對話、音樂和音效的主要元素會分成稱為「主幹」的群組,因此混音的所有對話都會與音樂和音效分開,直到完成最終混音為止。由於對話主幹只包含對話,因此 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 轉換媒體檔案前,建議先聆聽檔案,判斷音質是否異常,以免機器學習工具無法提供準確結果。在本節中,按一下檔案名稱,即可在瀏覽器中播放檔案。 (建議使用耳機或高動態範圍揚聲器)。

      聆聽影片檔案中的音訊

      1. 點選下列檔案即可播放:

        HumptyDumptySample4416.flac
        

        這個檔案的頻率為 44.1 kHz,位元深度為 16 位元。請注意這個檔案的清晰度、保真度和可辨識度,這類內容很適合使用 Speech-to-Text 轉錄。

      2. 播放下列 5.1 格式的範例影片檔案,即可聆聽環繞混音效果,除了中央聲道外,所有聲道都不會出現對白:

        sample_51_mix_movie.mp4
        

        這個檔案是為 5.1 音訊系統設計,如果你只使用耳機或雙聲道系統,播放時可能聽不到所有聲道。(如要聽到所有六個聲道,必須在 5.1 系統上解碼播放,或是建立雙聲道立體聲下混音。)

        建議您使用僅含對話的管道進行語音轉文字。範例檔案有五個聲道包含非對話音訊,一個聲道包含對話音訊。稍後在「針對分析作業最佳化音訊檔案」一節中,您將瞭解如何擷取 5.1 檔案中編碼的六個單聲道音訊聲道,以便聆聽每個音軌。這樣一來,您就能將對話專用聲道 (通常是中央或前中央聲道) 與非對話聲道隔離,提升 Speech-to-Text 轉錄檔案的能力。

      以不同取樣率測試相同檔案

      下表列出同一音訊檔案的多個版本,每個版本都有不同的位元深度和取樣率,供您聆聽。

      音訊檔案 取樣率/位元深度
      HumptyDumptySample4416.flac 44.1 kHz/16 位元線性 PCM
      HumptyDumptySample2216.flac 22 kHz/16 位元線性 PCM
      HumptyDumptySample1616.flac 16 kHz/16 位元線性 PCM
      HumptyDumptySample1116.flac 11 kHz/16 位元線性 PCM
      HumptyDumptySample0808.flac 8 kHz/8 位元線性 PCM
      HumptyDumptyUpSample4416.flac 44.1 kHz (升頻)/16 位元線性 PCM
      HumptyDumptySample4408.flac 44.1 kHz/8 位元線性 PCM
      HumptyDumptySample4408to16.flac 44.1 kHz/16 位元線性 PCM (升頻轉換)
      1. 如要聆聽上表中的每個檔案,請按一下檔案名稱。(瀏覽器會在新分頁中開啟音訊播放器)。請注意降低取樣率時的音質差異。

        在較低的取樣率下,16 位元檔案的保真度會降低,而由於量化錯誤,8 位元檔案版本的訊號雜訊比會大幅降低。表格中的最後一個檔案是原始的 8 kHz 8 位元檔案,已升頻至 44.1 kHz/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/s。
        • 檔案中的串流數為 1。(這與頻道數量不同)。
        • 檔案的取樣率為 44.1kHz。
        • 音訊聲道數為 2 (立體聲)。
        • 檔案的位元深度為 16 位元。

        傳輸串流可包含多個串流,包括音訊、視訊和中繼資料。這些串流各有不同特性,例如每個串流的音訊聲道數、視訊串流的轉碼器,以及視訊串流的每秒影格數。

        請注意,中繼資料顯示這是立體聲檔案。這點非常重要,因為使用語音轉文字進行分析時,建議的預設音訊聲道數量為一個單聲道。

      使用 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 分析檔案,可能需要先進行音訊過濾和處理,提升對話的清晰度。

      在本節中,您會轉錄上一個範例中分析的 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%。 如輸出內容所示,文字與錄音中的對話內容不夠相符。

      轉錄不同取樣率和位元深度的音訊檔案

      如要進一步瞭解取樣率和位元深度對轉錄的影響,請在本節中轉錄以各種取樣率和位元深度錄製的相同音訊檔案。這可讓您查看語音轉文字的信賴度,以及信賴度與整體音質的關係。

      1. 按一下下表中的檔案名稱即可聆聽樣本,並注意音質差異。每次點選檔案名稱時,瀏覽器都會在新分頁中播放音訊檔案。

        音訊檔案名稱 檔案規格
        Speech_11k8b.flac 取樣率 11025 Hz,位元深度 8 位元
        Speech_16k8b.flac 取樣率 16 kHz,位元深度 8 位元
        Speech_16k16b.flac 取樣率 16 kHz,位元深度 16 位元
        Speech_441k8b.flac 取樣率 44100Hz,位元深度 8 位元
        Speech_441k16b.flac 取樣率 44100Hz,位元深度 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"
        

        請注意,這兩個範例的輸出內容中,信賴度有所不同。 第一個檔案 (Speech_11k8b.flac) 是以 11 kHz 錄製,位元深度為 8 位元,信賴水準低於 78%。第二個檔案的信賴水準約為 94%。

      4. (選用) 轉錄步驟 1 中表格列出的其他檔案,進一步比較音訊檔案取樣率和位元深度準確度。

      下表摘要列出上述程序步驟 1 中,每個檔案的語音轉文字輸出內容。請注意,每種檔案類型的信賴度值結果有所不同。(您的結果可能會稍有不同)。音訊檔案的取樣率和位元率越低,音訊品質就越差,轉錄結果的可信度也就越低。

      音訊檔案名稱 信心 (第一節) 信心 (第二節)
      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. 將範例檔案下載至本機電腦:

        gcloud storage 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 bucket 播放:ffplay $GCS_BUCKET_PATH/HumptyDumpty4416.flac

        在本機終端機中,使用本教學課程稍早使用的範例進行實驗。進一步瞭解如何善用語音轉文字功能。

      疑難排解

      錯誤可能由多種因素造成,因此建議您檢查一些常見錯誤,並瞭解如何修正。特定音訊檔案可能會發生多項錯誤,導致轉錄程序無法完成。

      音訊過長

      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 bucket 中。

      如要讀取超過 1 分鐘的檔案,請使用 recognize-long-running 從 Cloud Storage bucket 讀取檔案,如下列指令所示:

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

      此程序需要幾分鐘才能完成。

    清除所用資源

    如要避免系統向您的 Google Cloud 帳戶收取本教學課程中所用資源的相關費用,請刪除含有該項資源的專案,或者保留專案但刪除個別資源。

    刪除專案

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    後續步驟