使用語音轉換文字建立字幕
在本指南中,您將學習如何使用語音轉換文字建立字幕。 字幕功能是將電視廣播、網路廣播、電影、影片、即時活動或其他製作成果的音訊內容轉換成文字,然後在螢幕、監視器或其他視覺顯示系統上顯示文字的程序。
這些概念包括如何同步處理字幕與輸入音訊、套用不雅內容篩選、取得部分結果、套用自訂專案,以及識別多語情節的口語語言。 本指南討論語音字幕,但不涉及說話者識別碼或音效,例如鈴鐺聲。
以下是一些常見的字幕案例:
- 線上課程和教學影片
- 體育賽事
- 語音和視訊通話
以下是使用字幕時要考慮的層面:
- 讓您的觀眾知道字幕是由自動化服務產生。
- 字幕使用大型的醒目字型,水平置中顯示於畫面。
- 考慮是否使用部分結果、何時開始顯示字幕,以及一次顯示多少字。
- 認識 SMPTE-TT 等字幕通訊協定。
- 考慮輸出格式,例如 SRT (SubRip Text) 和 WebVTT (Web Video Text Tracks)。 其可載入至 VLC 等大部分的影片播放器,自動在影片中新增字幕。
字幕可伴附即時或預先錄製的語音。 無論顯示即時或錄製的字幕,您都可以使用語音 SDK 或語音 CLI來辨識語音並取得轉譯。 您也可以使用批次轉譯 API 處理預先錄製的影片。
字幕輸出格式
語音服務支援 SRT (SubRip Text) 和 WebVTT (Web Video Text Tracks) 等輸出格式。 其可載入至 VLC 等大部分的影片播放器,自動在影片中新增字幕。
提示
語音服務提供粗話篩選選項。 您可以指定要遮蔽、移除或顯示粗話。
SRT (SubRip Text) 時間範圍輸出格式為 hh:mm:ss,fff
。
1
00:00:00,180 --> 00:00:03,230
Welcome to applied Mathematics course 201.
WebVTT (Web Video Text Tracks) 時間範圍輸出格式為 hh:mm:ss.fff
。
WEBVTT
00:00:00.180 --> 00:00:03.230
Welcome to applied Mathematics course 201.
{
"ResultId": "8e89437b4b9349088a933f8db4ccc263",
"Duration": "00:00:03.0500000"
}
語音服務的音訊輸入
如需即時字幕,請使用麥克風或音訊輸入資料流,而不是檔案輸入。 如需如何從麥克風辨識語音的範例,請參閱語音轉換文字快速入門和如何辨識語音文件。 如需資料流的詳細資訊,請參閱如何使用音訊輸入資料流。
如需預先錄製的字幕,請將檔案輸入傳送至語音服務。 如需詳細資訊,請參閱如何使用壓縮的輸入音訊。
字幕和語音同步
無論是即時字幕還是預先錄製內容的字幕,您都會希望同步字幕和音軌。
語音服務會傳回已辨識語音的時間偏差和持續時間。
- 時間偏差:已辨識的音訊資料流時間偏差,以持續時間表示。 時間偏差是以刻度來測量的,從
0
(零) 刻度開始,與 SDK 所處理的第一個音訊位元組相關聯。 例如,當您開始辨識時,時間偏差就會開始,因為 SDK 這時會開始處理音訊資料流。 一個刻度代表一百毫微秒,即一千萬分之一秒。 - 持續時間:要被辨識語句的持續時間。 刻度中的持續時間不包含前後的無聲時間。
如需詳細資訊,請參閱取得語音辨識結果。
取得部分結果
考慮何時開始顯示字幕,以及一次顯示多少字數。 語句仍在辨識時,語音辨識結果可能會變更。 每個 Recognizing
事件都會傳回部分結果。 語音服務在處理每個字的時候,都會重新評估新內容中的語句,再次傳回最佳結果。 新結果不保證與前面的結果相同。 語句的完整和最終轉譯會隨 Recognized
事件一起傳回。
注意
部分結果不提供標點符號。
如需預先錄製語音的字幕或不在意延遲情況,您可以等待每個語句完整轉譯後,再顯示字幕。 假設語句中每個單字都有最終時間偏差和持續時間,您就能掌握音軌的節奏,顯示後續的字幕。
即時字幕要根據延遲與正確性有所取捨。 您可以儘快顯示每個 Recognizing
事件的文字。 但若可以接受一點延遲,即可顯示 Recognized
事件的文字提高字幕的正確性。 另外還有一些稱為「穩定部分結果」的中間地帶。
您可以要求語音服務傳回數量較少,但是正確性更高的 Recognizing
事件。 只要將 SpeechServiceResponse_StablePartialResultThreshold
屬性設定為 0
到 2147483647
之間的值即可。 您設定的這個值是語音服務傳回 Recognizing
事件之前,單字必須被辨識的次數。 例如,如果您將 SpeechServiceResponse_StablePartialResultThreshold
屬性值設定為 5
,語音服務要先確認一個字至少辨識五次,才會將部分結果隨 Recognizing
事件傳回給您。
speechConfig.SetProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig->SetProperty(PropertyId::SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.SetProperty(common.SpeechServiceResponseStablePartialResultThreshold, 5)
speechConfig.setProperty(PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
speechConfig.setProperty(sdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, 5);
[self.speechConfig setPropertyTo:5 byId:SPXSpeechServiceResponseStablePartialResultThreshold];
self.speechConfig!.setPropertyTo(5, by: SPXPropertyId.speechServiceResponseStablePartialResultThreshold)
speech_config.set_property(property_id = speechsdk.PropertyId.SpeechServiceResponse_StablePartialResultThreshold, value = 5)
spx recognize --file caption.this.mp4 --format any --property SpeechServiceResponse_StablePartialResultThreshold=5 --output vtt file - --output srt file -
要求更穩定的部分結果會減少「搖擺不定」或不斷變動的文字,但因為要等候更確定的結果,所以會增加延遲。
穩定部分結果閾值範例
在下列未設定穩定部分結果閾值的辨識序列中,"math" 會辨識為一個單字,但最終文字是 "mathematics"。 或者,辨識出 "course 2",但最終文字是 "course 201"。
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied math
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZING: Text=welcome to applied mathematics course 2
RECOGNIZING: Text=welcome to applied mathematics course 201
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
在上一個範例中,轉譯是加總的,而且不撤銷任何文字。 但有些時候,您可能會發現部分結果不正確。 無論哪種情況,顯示出的不穩定部分結果皆會視為「搖擺不定」。
在此範例中,如果穩定的部分結果閾值設為 5
,不會改變或撤回任何字詞。
RECOGNIZING: Text=welcome to
RECOGNIZING: Text=welcome to applied
RECOGNIZING: Text=welcome to applied mathematics
RECOGNIZED: Text=Welcome to applied Mathematics course 201.
語言識別
如果音訊中的語言可能變更,請使用連續語言識別。 根據支援的語言清單比較識別音訊中的口說語言時,會使用語言識別。 您最多可提供 10 種候選語言,音訊中至少會出現其中一種。 語音服務會傳回音訊中最可能的語言。
提高正確性的自訂項目
詞組清單是您在開始語音辨識之前提供的字詞清單。 將詞組新增到詞組清單會增加其重要性,使其更容易被辨識。
片語範例如下:
- 名稱
- 地理位置
- 同音異義字
- 您產業或組織的特有字詞或縮略字
有時候,定型自訂模型可能是提高正確性的最佳選擇。 例如,如果您要為齒顎矯正課程加上字幕,您可能會想要使用對應領域的資料來定型自訂模型。