本教學課程說明如何對準備用於 Cloud Speech-to-Text 的音訊檔案執行前置檢查。本文提供音訊檔案格式的背景資訊,說明如何最佳化音訊檔案以搭配 Cloud STT 使用,以及如何診斷錯誤。本教學課程專為非技術人員、媒體和娛樂業專業人士,以及後製專業人員設計。您不必深入瞭解Google Cloud,只要具備基本知識,知道如何搭配使用 gcloud 指令列工具,處理儲存在本機和
Cloud Storage 值區中的檔案即可。
目標
- 安裝 FFMPEG 工具。
- 下載範例媒體檔案。
- 使用 FFMPEG 播放音訊和影片檔案。
- 使用 FFMPEG 擷取、轉碼及轉換音訊檔案屬性。
- 對含有對話的各種範例檔案執行 Cloud STT。
費用
本教學課程使用下列 Google Cloud計費元件:
您可以使用 Pricing Calculator,根據您的預測使用量來產生預估費用。
事前準備
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
若您採用的是外部識別資訊提供者 (IdP),請先使用聯合身分登入 gcloud CLI。
-
執行下列指令,初始化 gcloud CLI:
gcloud init - 從影片檔案擷取音訊資料。
- 從多重音軌音訊檔案擷取單一單聲道音軌。
- 從某個音訊轉碼器轉碼至更適合 Cloud STT 的轉碼器。
- 播放音訊或影片檔案。
- 將音訊檔案轉換為 Cloud STT 支援的編解碼器。
- 將音訊檔案取樣率和位元率轉換為最佳設定,供 Cloud STT 分析。
- 從傳輸串流檔案或影片檔案中擷取個別音軌或串流。
- 將立體聲檔案分割為兩個單聲道檔案。
- 將 5.1 音訊檔案分割成六個單聲道檔案。
- 套用等化和篩選功能,提升音訊清晰度。
- FLAC:免費無損音訊轉碼器
- LINEAR16:未壓縮的脈衝編碼調變 (PCM) 格式,用於 WAV、AIFF、AU 和 RAW 容器
- MULAW:專為美國和日本電信設計的 PCM 編碼解碼器
- AMR:專為語音設計的自動調整多重速率轉碼器
- AMR_WB:AMR 的寬頻變體,頻寬是 AMR 的兩倍
- OGG_OPUS:專為低延遲應用程式設計的有損編解碼器
- SPEEX_WITH_HEADER_BYTE:專為網路電話 (VoIP) 應用程式設計的編解碼器
-
In the Google Cloud console, activate Cloud Shell.
在 Cloud Shell 中安裝目前版本的 FFMPEG:
sudo apt update sudo apt install ffmpeg確認已安裝 FFMPEG:
ffmpeg -version如果畫面顯示版本號碼,表示安裝成功。
為專案檔案建立目錄:
mkdir project_files建立輸出檔案的目錄,您將在後續步驟中建立這些檔案:
mkdir output下載範例音訊檔案:
gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* ~/project_files/為 Cloud Storage bucket 名稱建立環境變數:
export GCS_BUCKET_PATH=gs://cloud-samples-data/speech/project_files為 Cloud Shell 執行個體目錄路徑建立環境變數,指向已下載的範例音訊檔案:
export PROJECT_FILES=~/project_files在 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 位元 (帶正負號的整數)。
顯示
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/秒),因為它包含雙聲道播放,而非單一單聲道音軌。其他值都相同。
請檢查要使用 Cloud STT 處理的音訊檔案中的聲道數量,音訊檔案應只有一個聲道。如要轉錄同一個檔案中的多個音訊頻道,建議您按照稍後「最佳化音訊檔案以利分析」一節所述,編寫指令腳本。
顯示 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 個音軌。在本教學課程稍後,您會看到嘗試使用 Cloud STT 轉錄這個檔案時,會發生錯誤。更重要的是,您將瞭解如何最佳化檔案,以便搭配 Cloud STT 使用,不會發生錯誤。
在 Cloud Shell 中,對
HumptyDumptySampleStereo.flac檔案執行 Cloud STT:gcloud ml speech recognize $PROJECT_FILES/HumptyDumptySampleStereo.flac \ --language-code='en-US'輸出內容如下:
ERROR: (gcloud.ml.speech.recognize) INVALID_ARGUMENT: Invalid audio channel count
雖然檔案的轉碼器格式、取樣率和位元深度正確,但立體聲描述元表示音訊檔案中有兩個音軌。因此,執行 Cloud STT 會導致
Invalid audio channel count錯誤。對檔案執行
ffprobe指令:ffprobe $PROJECT_FILES/HumptyDumptySampleStereo.flac輸出內容如下:
Stream #0:0: Audio: flac, 44100 Hz, stereo, s16
這表示 Cloud STT 錯誤是因嘗試處理立體聲檔案而造成
在 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這個檔案現在已針對 Cloud STT 進行最佳化。
在 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 (...)按一下下列檔案即可聆聽。這個檔案位於 Cloud Storage 值區中,點選名稱後,檔案會在瀏覽器的新分頁中播放。
Alice_mono_downmix.flac
聆聽剛建立的 FC (僅限中央聲道檔案)。(對話會在幾秒鐘的靜默後開始。)
Alice_FC.flac
請注意,與先前的檔案相比,清晰度有所不同。這個音軌只會根據混音中的對話部分製作。
點選下列檔案即可播放:
HumptyDumptySample4416.flac
這個檔案的頻率為 44.1 kHz,位元深度為 16 位元。請注意這個檔案的清晰度、保真度,以及可辨識度。這很適合使用 Cloud STT 轉錄。
播放下列 5.1 格式的範例影片檔案,即可在中央聲道以外的所有聲道中聽到環繞混音,但不會聽到對白:
sample_51_mix_movie.mp4
這個檔案是為 5.1 音訊系統設計,如果你只使用耳機或雙聲道系統,播放時可能聽不到所有聲道。(如要聽到所有六個聲道,必須在 5.1 系統上解碼播放,或建立雙聲道立體聲下混音。)
建議您使用僅限對話的管道進行 Cloud STT。範例檔案有五個聲道含有非對話音訊,一個聲道含有對話音訊。稍後在「針對分析作業最佳化音訊檔案」一節中,您將瞭解如何擷取 5.1 檔案中編碼的六個單聲道音訊聲道,以便聆聽每個音軌。這樣一來,您就能將對話專用聲道 (通常是中央或前中央聲道) 與非對話聲道隔離,提升 Cloud STT 轉錄檔案的能力。
如要聆聽上表中的每個檔案,請按一下檔案名稱。(瀏覽器會在新分頁中開啟音訊播放器)。請注意降低取樣率時的音質差異。
在較低的取樣率下,16 位元檔案的保真度會降低,而由於量化錯誤,8 位元檔案版本的訊號雜訊比會大幅降低。表格中的最後一個檔案是原始的 8 kHz 8 位元檔案,已升頻至 44.1 kHz/16 位元。請注意,音質與 8 kHz/8 位元檔案相同。
在 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 位元。
傳輸串流可包含多個串流,包括音訊、視訊和中繼資料。這些串流各有不同特性,例如每個串流的音訊聲道數、視訊串流的轉碼器,以及視訊串流的每秒影格數。
請注意,中繼資料顯示這是立體聲檔案。這點非常重要,因為使用 Cloud STT 分析時,建議的預設音訊聲道數量為一個單聲道。
- 檔案長度為 26 秒 28 個影格。這項資訊適用於進階用途,例如您想使用
轉錄乾淨的
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"
在 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_11k8b.flac取樣率 11025 Hz,位元深度 8 位元 Speech_16k8b.flac取樣率 16 kHz,位元深度 8 位元 Speech_16k16b.flac取樣率 16 kHz,位元深度 16 位元 Speech_441k8b.flac取樣率 44100 Hz,位元深度 8 位元 Speech_441k16b.flac取樣率 44100Hz,位元深度 16 位元 在 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"
轉錄
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%。(選用) 轉錄步驟 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
檢查範例檔案的中繼資料:
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_f32le和flt中繼資料值表示這個檔案具有浮點位元率。您需要將浮點位元率 WAV 檔案轉換為帶正負號的整數格式。將檔案的位元率轉換為帶正負號的整數格式:
ffmpeg -i $PROJECT_FILES/Speech_48kFloat.wav -c:a pcm_s16le output/Speech_48k16bNonFloatingPoint.wav這個指令會建立新的 WAV 檔案,位元率為帶正負號的整數格式。
檢查新建立檔案的中繼資料:
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_s16le和s16指定項目所示。在本機電腦的終端機中,安裝 FFMPEG 工具:
sudo apt update sudo apt install ffmpeg將範例檔案下載至本機電腦:
gcloud storage cp gs://cloud-samples-data/speech/project_files/*.* local_destination_path
將 local_destination_path 改成放置範例檔案的位置。
將
LOCAL_PATH環境變數設為電腦上您下載範例檔案的位置:export LOCAL_PATH=local_destination_path
將 local_destination_path 替換為上一步的路徑。
在終端機中,使用
ffplay指令監聽範例音訊檔案:- 音訊檔案:
ffplay$LOCAL_PATH/HumptyDumpty4416.flac - 影片檔案:
ffplay $LOCAL_PATH/sample_51_mix_movie.mp4 - Cloud Storage bucket 播放:
ffplay$GCS_BUCKET_PATH/HumptyDumpty4416.flac
在本機終端機中,使用本教學課程稍早使用的範例進行實驗。這有助於您進一步瞭解如何充分運用 Cloud STT。
- 音訊檔案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
- 參閱 Cloud STT 說明文件。
- 請參閱 speech recognize 指令和 speech recognize-long-running 指令的說明文件。
- 逐步演練使用 Cloud Speech-to-Text API 將語音轉錄為文字程式碼研究室。
在本教學課程中,您會使用 Cloud Shell 執行程序,例如將資料從 Cloud Storage 值區複製到 Cloud Shell 工作階段。Cloud Shell 是已預先安裝 Google Cloud CLI 的殼層環境。在本教學課程中,您會在許多步驟中使用 gcloud CLI。您也會在本機電腦上安裝軟體和範例音訊檔案,並從終端機執行這些練習,詳情請參閱下文的「在本機終端機中執行教學課程範例」一節。
總覽
在本教學課程中,您會使用 FFMPEG,這是一項開放原始碼工具,可用於錄製、轉換及串流音訊和影片。本教學課程稍後會進一步說明這項工具。
瞭解音訊檔案屬性
本節說明媒體製作和後製工作流程中常見的音訊檔案類型、取樣率、位元深度和錄音媒體。
如要獲得最佳 Cloud STT 轉錄結果,請務必使用單聲道檔案,且檔案須符合特定最低規格 (詳見下文)。如果檔案不符合規格,可能需要產生修改後的檔案。舉例來說,您可能需要執行下列操作:
取樣率 (頻率範圍)
取樣率決定音訊檔案的頻率範圍。這是根據音訊檔案每秒的樣本數計算而得。數位音訊檔案可重現的最高頻率通常等於取樣率的一半。舉例來說,44.1 kHz 音訊檔可重現的最高頻率約為 22 kHz,這已達到或超出一般聽者的頻率響應範圍。
電話和電信的取樣率通常介於 8 kHz 到 16 kHz 之間。本教學課程著重於媒體和娛樂產業專用的格式,通常高於 16 kHz。如要進一步瞭解電話通訊和其他音訊應用程式,請參閱「使用強化版模型轉錄手機音訊」一文。
我們建議您在音訊檔案中使用至少 16 kHz 的取樣率,以便透過 Cloud STT 轉錄音訊。音訊檔案的取樣率通常為 16 kHz、32 kHz、44.1 kHz 和 48 kHz。因為可理解度會受到頻率範圍的影響 (尤其是較高的頻率),如果取樣率低於 16 kHz,音訊檔案在 8 kHz 以上的資訊就會很少或沒有。否則 Cloud STT 可能無法正確轉錄語音。語音清晰度需要 2 kHz 到 4 kHz 範圍內的資訊,不過高範圍內這些頻率的諧波 (倍數) 對於保留語音清晰度也很重要。因此,將取樣率維持在最低 16 kHz 是個好做法。
您可以轉換取樣率。不過,升頻音訊並無好處,因為頻率範圍資訊會受限於較低的取樣率,無法透過轉換為較高的取樣率復原。也就是說,如果從 8 kHz 升取樣至 44.1 kHz,可重現的頻率範圍會限制在較低取樣率的一半,也就是大約 4 kHz。在本教學課程中,您將聆聽以各種取樣率和位元深度錄製的音訊檔案,親自感受差異。
位元深度 (動態範圍)
音訊檔案的位元深度決定了音訊的音量範圍 (從最輕微到最大聲),以及檔案的訊號雜訊比。動態範圍對轉錄品質的影響,不如頻率響應那麼大,但位元深度若為 8 位元或更低,可能會導致音軌出現過多的量化雜訊,難以準確轉錄。(量化錯誤是指類比輸入訊號與該訊號數位輸出值對應之間的捨入誤差。錯誤會導致可聽見的失真,直接影響音訊保真度。) 建議使用 16 位元以上的位元深度,透過 Cloud STT 分析檔案。與取樣頻率相同,將位元深度從 8 位元升級至 16 位元沒有任何優勢,因為動態範圍資訊僅限於原始的 8 位元格式。
錄製媒介
原始錄音媒介也可能影響音訊檔案的品質。舉例來說,原本錄製在磁帶上的音訊內容,檔案中可能內建背景嘶嘶聲。在某些情況下,您可能需要預先處理有雜訊的音訊,才能在使用 Cloud STT 時,在轉錄過程中獲得更佳的結果。處理有噪音的錄音內容和背景噪音干擾不在本教學課程的討論範圍內。詳情請參閱 Cloud STT 說明文件中的最佳做法。
FFMPEG 簡介
在本教學課程中,您會使用 FFMPEG 處理音訊檔案。FFMPEG 工具組提供各種功能,包括:
您也可以使用 FFMPEG 的 ffprobe 函式,顯示與媒體檔案相關聯的中繼資料。如果您想診斷與機器學習分析的檔案類型和格式相關的問題,這項功能就非常重要。
Cloud STT 支援的轉碼器
雖然 Cloud STT 可辨識多種音訊檔案格式,但可能無法正確讀取或分析特定轉碼器。本教學課程說明如何確認內容是否為支援的檔案格式。
在本教學課程中,您會讀取中繼資料資訊,找出並修正潛在問題,然後再使用 Cloud STT。如果發現檔案不相容,您可以使用相同工具將檔案轉換為支援的格式。
Cloud STT 可辨識下列轉碼器:
請務必瞭解,編解碼器和檔案格式並不相同。檔案名稱副檔名不一定表示 Cloud STT 可以讀取建立檔案時使用的轉碼器。
本教學課程著重於 FLAC 和 LINEAR16 編碼器,因為這兩種編碼器經常出現在媒體工作流程環境中。這兩種格式都是無損格式。
如果使用 WAV 檔案 (採用未壓縮的線性 PCM 格式) 搭配 Cloud STT,檔案深度不得超過 16 位元,且必須以非浮點格式編碼。.wav 副檔名無法保證 Cloud STT 能讀取檔案。本教學課程的「最佳化音訊檔案以利分析」一節提供範例,說明如何將檔案從浮點轉換為整數 (帶正負號) 位元深度,以便在 Cloud STT 中轉錄檔案。
初始化環境
執行本教學課程的作業前,請先初始化環境,包括安裝 FFMPEG、設定一些環境變數,以及下載音訊檔案。您會使用儲存在 Cloud Shell 執行個體和 Cloud Storage bucket 中的媒體檔案。使用不同來源可讓您運用 Cloud STT 的不同功能。
在本節中,您將安裝 FFMPEG,並設定環境變數,指向 Cloud Shell 執行個體儲存空間和 Cloud Storage bucket 中的範例資料儲存位置。這兩個位置的媒體檔案相同,本教學課程中的部分範例會從 Cloud Shell 和 Cloud Storage 值區存取檔案。您可以在本機上安裝 FFMPEG,然後執行這些練習,詳情請參閱後續的「在本機終端機中執行教學課程範例」一節。
檢查媒體檔案中的中繼資料
使用 Cloud STT 分析音訊或影片檔時,您需要瞭解檔案中繼資料的詳細資訊。這有助於找出可能導致問題的不一致或不相容參數。
在本節中,您將使用 FFMPEG 中的 ffprobe 指令檢查多個媒體檔案的中繼資料,瞭解檔案規格。
最佳化音訊檔案以供分析
如先前所述,使用 Cloud STT 時,音訊檔案必須是單聲道檔案,才能避免轉錄過程發生錯誤。下表列出常見的音訊格式,以及將單聲道檔案轉換為可處理格式的程序。
| 目前的音訊格式 | 轉換程序 | 輸出音訊格式 |
|---|---|---|
| 單聲道 | 無須擷取 | FLAC 或 LINEAR16 |
| 立體聲 | 分割成 2 個單聲道檔案,或下混成 1 個單聲道檔案 | FLAC 或 LINEAR16 |
| 多軌 (5.1) | 分割成 6 個單聲道檔案 | FLAC 或 LINEAR16 |
| 多串流音訊/視訊 | 分割成個別單聲道檔案 | FLAC 或 LINEAR16 |
如要處理含有多個音軌的檔案,請使用 FFMPEG 或其他音訊編輯工具,從立體聲檔案中擷取單聲道音軌。或者,您也可以按照 Cloud 語音轉文字說明文件的「轉錄多頻道音訊」一節所述,自動執行這項程序。在本教學課程中,您將瞭解如何使用 FFMPEG 從立體聲檔案擷取個別單聲道音軌。
如上一節所示,您可以使用 ffprobe 指令判斷檔案包含多少個音訊聲道,然後視需要使用 ffmpeg 指令擷取或將檔案轉換為單聲道格式。
根據無效格式預覽錯誤
如要瞭解格式不正確對轉錄的影響,可以嘗試對非單聲道格式的檔案執行 Cloud STT。
如要瞭解如何透過指令碼管理立體聲檔案,請參閱 Cloud STT 說明文件中的「轉錄多聲道音訊」。
將立體聲檔案分割為多個 FLAC 單聲道檔案
舉例來說,如要避免多重音軌錯誤,可以從立體聲音訊檔案中擷取兩個單音軌。產生的音軌為 FLAC 格式,並會寫入輸出目錄。從立體聲檔案擷取兩個單聲道檔案時,建議為擷取的檔案建立名稱,指出原始檔案的聲道位置。舉例來說,在下列程序中,您會使用 FL 後置字元指定左聲道,並使用 FR 後置字元指定右聲道。
如果轉錄的音訊樣本同時位於兩個聲道,系統只會使用一個聲道進行轉錄。不過,如果不同說話者是透過不同聲道錄音,建議你分別轉錄各個聲道。Cloud STT 可辨識單一錄音中的多個聲音。不過,將每個聲音分別放在不同聲道,可提高轉錄的準確度。(在語音辨識中,信賴度值也稱為字詞錯誤率,或 WER)。如要進一步瞭解如何在同一段錄音中處理多個聲音,請參閱 Cloud STT 說明文件中的「在錄音中區分不同說話者」。
將 5.1 聲道音訊檔案分割成多個單聲道檔案
另一個音訊檔案最佳化範例是將 5.1 音訊檔案分割為個別的 FLAC 單聲道檔案。在多聲道混音 (例如 5.1 混音) 中參照聲道時,檔案名稱指定通常與立體聲或單聲道檔案不同。左聲道檔案通常會指定為前左 FL,右聲道則指定為前右 FR。5.1 混音的其餘聲道在此稱為「前中」FC、「低頻音效」LFE、「後左」(又稱「環繞左」) BL 和「後右」(又稱「環繞右」) BR。這些並非標準名稱,但這是識別音訊檔案來源的慣例做法。
通常在電影和電視的多聲道音訊檔案中,主要對話是由前置中央聲道傳送。使用 Cloud STT 時,通常會選擇這個檔案,因為當中通常包含大部分的對話。
在後製環境中,對話、音樂和音效的主要元素會分成稱為「主幹」的群組,因此混音的所有對話都會與音樂和音效分開,直到完成最終混音為止。由於對話主幹只包含對話,因此 Cloud STT 轉錄主幹時的結果會比嘗試從最終混音檔擷取中央聲道更好。這是因為擷取的中央聲道可能混有非對話聲音,導致語音清晰度不佳。
測試音訊檔案品質
使用 Cloud STT 轉換媒體檔案前,建議先聆聽檔案,判斷音質是否有異常,以免機器學習工具無法提供準確結果。在本節中,按一下檔案名稱,即可在瀏覽器中播放檔案。 (建議使用耳機或高動態範圍揚聲器)。
聆聽影片檔案中的音訊
以不同取樣率測試相同檔案
下表列出同一音訊檔案的多個版本,每個版本都有不同的位元深度和取樣率,供您聆聽。
| 音訊檔案 | 取樣率/位元深度 |
|---|---|
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 (升頻轉換) |
使用 Cloud STT 轉錄檔案
現在您已擷取單聲道檔案,可以使用 Cloud STT 轉錄音軌。您可以使用 gcloud ml speech 指令,叫用 Cloud Speech-to-Text API。
轉錄「不雅」曲目
您可能會有對話中混入其他聲音元素的語音檔案。這些通常稱為「髒」音軌,與沒有混入其他元素的「乾淨」對白音軌相對。雖然 Cloud STT 可以在吵雜環境中辨識語音,但結果可能不如乾淨音軌準確。您可能需要進行額外的音訊過濾和處理,才能提高對話的清晰度,然後再使用 Cloud STT 分析檔案。
在本節中,您將轉錄上一個範例中分析的 5.1 音訊檔案單聲道下混版本。
轉錄不同取樣率和位元深度的音訊檔案
如要進一步瞭解取樣率和位元深度對轉錄的影響,請在本節中轉錄以各種取樣率和位元深度錄製的相同音訊檔案。這可讓您查看 Cloud STT 的信賴度,以及信賴度與整體音質的關係。
下表摘要列出 Cloud STT 為上述程序步驟 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 音訊。
在本機終端機中執行教學課程範例
您可以在本機電腦的終端機執行本教學課程中的所有範例。在本機執行範例時,可直接使用 ffplay 指令播放音訊和影片檔案 (而非在瀏覽器中聆聽),這是一項重要功能。
疑難排解
錯誤可能由多種因素造成,因此建議您檢查一些常見錯誤,並瞭解如何修正。特定音訊檔案可能會發生多個錯誤,導致轉錄程序無法完成。
音訊過長
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 收取費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。