:::

線上檔案語音轉文字字幕:Web Speech to Text / Speech recognition with Google Chrome: Web Speech to Text

語音轉文字的技術已經存在多年,現在這個技術已經普遍到大家手上的智慧型手機都內建了語音辨識輸入系統。除了從麥克風辨識語音之外,我們也很常需要從錄下來的影片、聲音檔中辨識文字。意外的是,這樣的技術其實不需要仰賴什麼雲端科技技術,也不用付出高昂的成本,只需要用你現在瀏覽網頁的Google Chrome就可以開始語音轉文字了。

我參考了陳鍾誠所撰寫的「Google 的語音辨識 API 之使用」,利用瀏覽器內建的Web Speech API開發成網頁應用程式「Web Speech to Text」,搭配Virtual Audio Cable讓電腦的聲音輸出的聲音轉到麥克風輸入,就能讓播放影片或聲音檔案的同時語音辨識為文字,最後轉為字幕檔案格式srt輸出。讓我們來看看怎麼做吧。



環境與準備 / Environment setup

Web Speech to Text需要在有支援Web Speech API的瀏覽器中執行,我推薦使用的是最新版的Google瀏覽器。目前我使用的版本是71.0.3578.98。作業系統是Windows 7。

Web Speech API只能接受從麥克風輸入的聲音,而網頁上播放的影片或聲音檔案則會從喇叭輸出。這時候我們只要使用Virtual Audio Cable,就能讓喇叭輸出的聲音轉向到麥克風輸入,接著便能使用Web Speech API接收聲音進行識別。

因此,在使用Web Speech to Text之前,我們要先準備好Virtual Audio Cable的設定。


虛擬音源線 / Virtual Audio Cable

安裝好Virtual Audio Cable後,你電腦的「聲音」設定裡面會出現Virtual Audio Cable模擬的裝置,在播放裝置和錄音裝置裡面各有一個。以下對「聲音」的設定,不同作業系統的做法都不一樣。以下是我電腦上用Windows 7環境的設定,如果是Windows 10,可以參考重灌狂人的說明。

在Windows 7中,聲音設定可以從通知列裡面找到喇叭圖示的聲音,按右鍵,開啟「播放裝置」或「錄音裝置」。

在「播放裝置」中,將Virtual Audio Cable選為預設。

在「錄音裝置」中,也一樣將VIrtual Audio Cable選為預設。這樣就設定完成了。

將Virtual Audio Cable設為預設值後,電腦輸出的聲就會直接從麥克風輸入。

Virtual Audio Cable的運作概念上就像是上圖一樣,聲音不是從喇叭輸出、麥克風輸入,而是透過Virtual Audio Cable來輸出與輸入。

必須要注意的是,將播放裝置的預設值設為Virutal Audio Cable之後,你的喇叭或耳機等平常輸出聲音的裝置,這時候就不會發出聲音。同理,你一般使用的麥克風這時候也不會接收聲音。因此,只有在要用Web Speech to Text從檔案識別文字時,再來設定Virtual Audio Cable即可。


線上語音轉文字 / Web Speech to Text

Web Speech to Text是以HTML5所撰寫的網頁,請使用Google瀏覽器開啟執行。程式碼內容已經保存到GitHub,供有興趣研究的朋友自行探索。

在前面設定好Virtual Audio Cable之後,我們就能使用Web Speech to Text了。

麥克風功能授權 / Microphone permission grant

剛開啟Web Speech to Text的時候,程式會提醒你需要開啟麥克風權限,這樣Web Speech API才能收到聲音。

這個動作只需要執行一次,第二次開啟就不會提示了。

檔案載入與設定 / File load and configuration

開啟網頁後,我們可以從左上角的「讀取本機檔案」跟「讀取網址」按鈕來開啟你需要的檔案,或是按「讀取展示影片」直接用預設的影片檔案做示範。

必須注意的是,Web Speech to Text可接受的檔案格式有所限制,只能使用網頁上可開啟的格式:

預設的影片檔案是聯經出版在YouTube發佈的「華語文能力測驗關鍵詞彙:牛刀小試篇」的片段。華語文能力測驗是為了外國人學習華語文測驗而錄製的影片片段,錄音品質佳而且發音標準。我擷取了其中對話的片段作為範例,讓我們來看看Web Speech to Text能夠識別到什麼程度。

檔案載入之後,我們還要選擇辨識語言。目前我只有設定「中文 (台灣)(cmn-Hant-TW)」、「普通话 (中国大陆)(cmn-Hans-CN)」和「英文(en-US)」。其他語系請參考的「Web Speech API Demonstration」列表。

開始辨識 / Recognition start

最後按下「開始辨識」按鈕,Web Speech to Text就會開始播放並同時進行語音辨識文字。讓我們來看看實際執行畫面:

Web Speech to Text不只識別文字,還會記錄每段話的開始時間和結尾時間,不僅方便製作字幕,也能夠讓人能根據錯誤識別文字的時間回頭去查看。

辨識期間請不要變更Virtual Audio Cable的聲音設定,也不要關閉網頁,放著讓它運作就好。影片或聲音檔案的播放時間有多長,它就需要同樣久的運作時間。你可以看完成時間來估計一下何時要再回來看看成果。

匯出 / Export

辨識完成後,我們可以選擇「輸出格式」,然後「下載」按鈕來儲存。

預設的輸出格式是SubRip字幕檔(.srt),這是一種泛用的字幕檔格式。你可以讓srt字幕檔搭配影片一起播放,或是在字幕檔編輯工具裡面去做進一步的編輯。當然,你也可以用Notepad++等純文字編輯軟體來開啟它。

開放文件試算表格式ods可以使用LibreOffice Calc開啟。裡面記錄開始時間、結束時間、以及辨識的文字,彙整成試算表的形式後就能方便整理做其他用途。

純文字txt格式可以用Notepad++等純文字編輯軟體來開啟,裡面依然記錄著開始時間、結束時間以及辨識的文字。

你也可以存成只有辨識文字的txt檔案,這時候只會有辨識的文字。方便你直接拿來做其他應用。

例如文字放到「文字探勘分析器」之中,就可以得到上面的文字雲圖。

最後我把辨識結果以srt格式輸出,結果如下:

1
00:00:01,589 --> 00:00:06,805
昨天晚上的約會怎麼樣介紹的對像不錯吧

2
00:00:06,805 --> 00:00:10,031
別忘了昨晚已經被問夠了

3
00:00:10,031 --> 00:00:15,009
他來的舅媽才見面就問了我一個問題

4
00:00:15,155 --> 00:00:24,685
工作薪水多少是家裡的老大嗎家裡有哪些人就像是警察問犯人一樣

5
00:00:24,826 --> 00:00:28,618
想閉上嘴什麼都不說

跟影片搭配起來的結果如下,一看就覺得這個字幕不太對:

儘管辨識結果雖然不算完美,但也的確幫我們辨識好了大部分的文字,時間偵測也算是正確。辨識完成輸出後,如果要追求完美的話,我們還需要手動修正字幕檔。


修正字幕檔 / Edit SRT subtitle

從Web Speech to Text辨識的資料並不完美,但因為Web Speech to Text並不具備字幕編輯的功能,所以最好是匯出srt字幕檔,再使用其他工具來編輯,例如純文字編輯器Notepad++,或是專門的字幕工具Subtitle Edit。

Subtitle Edit線上網頁版 / Subtitle Edit online BETA

Subtitle Edit online BETA提供了網頁版本的線上編輯工具,可以讓使用者能夠在網頁上載入srt字幕檔和讀取影片檔,就能直接比對和編輯字幕的時間和文字。它雖然提供了時間軸和合併字幕的功能,但是並沒有實作分割和微調時間的功能,我覺得只能說是基本但不能說是好用。

SubtitleEdit Windows版 / Subtitle Edit Windows Version

Subtitle Edit也有Windows的免安裝版本,但它的影片檔不支援MP4,只能支援AVI或MPEG,你可能要搭配轉檔到AVI格式的工具,例如Online AVI video converter。Windows版本Subtitle Edit具有分割功能,但分割之後的時間並不準確,而且一樣沒有微調時間功能,到頭來我還是手動編輯srt的時間。

這兩個免費工具我覺得都不太滿意,最後大部分還是手動修改。如果你知道有更好用的字幕編輯工具的話,歡迎在下面留言告訴我,感謝。

修正結果 / Edited Subtitle

修正之後的字幕看起來就比較合理了些,內容如下:

1
00:00:01,613 --> 00:00:04,000
昨天晚上的約會怎麼樣

2
00:00:04,000 --> 00:00:06,747
介紹的對像不錯吧

3
00:00:06,747 --> 00:00:09,355
別問了,昨晚已經被問夠了

4
00:00:09,355 --> 00:00:14,300
陪他來的舅媽才見面就問了我一堆問題

5
00:00:14,300 --> 00:00:17,000
在哪兒工作?薪水多少?

6
00:00:17,001 --> 00:00:20,359
是家裡的老大嗎?家裡有哪些人?

7
00:00:20,384 --> 00:00:23,512
就像是警察問犯人一樣

8
00:00:23,512 --> 00:00:28,618
我真想閉上嘴,什麼都不說

跟影片搭配的結果如下:


其他語音轉文字的方案 / Other Speech to Text solution

Web Speech to Text的操作很簡單,也沒有什麼特別的限制,問題就是辨識出來的準確度不完美。當然,就連真人,在很多時候也可能會聽錯話,要求機器達到完美是有點過於苛求了。

儘管如此,現代還是有很多語音轉文字的各種服務。早期有像是IBM的Waston Speech to Text (沒有中文就是了),或是中國的Arctime的語音識別功能,或是科技領導地位的Google也有推出語音轉文字的服務。

Google的語音轉文字 / Google Cloud Speech to Text

Google在語音轉文字上一直投入了不少心力。其實Web Speech to Text使用的Web Speech API,也是Google瀏覽器中的一個功能。不過,在Google投入深度學習領域後,語音辨識的技術又向前推進了一個世代,那就是Google Cloud Platform (又稱為GCP)中的Google語音轉文字。

Google語音轉文字提供了線上試用,你可以上傳1分鐘以內的聲音檔案,然後讓語音轉文字產生結果。我試用了一下,語音辨識非常完美。但如果語音檔案超過1分鐘,那你就必須透過比較複雜的手續,而且要將語音檔案放置到Google Cloud Platform的Google Cloud Storage上才能使用。雖然「Machine Learning(一):Cloud Speech API 介紹與實作」這篇有試用一下,但裡面太多Google雲端平台的細節要知道,門檻還是很高,我也就沒有深入研究了。


結語 / Conclusion

會想要製作Web Speech to Text是因為研究生常常需要打逐字稿,而這件事情非常花時間與精力。雖然大家嘴巴上都會說著「就播放錄音檔給Siri去做語音辨識吧」,或是使用Google DocEvernote內建的語音辨識軟體,或甚至是用「雅婷逐字稿」這類型的APP來做語音辨識,但實務上,這些做法都不太可行。

我在製作Web Speech to Text的時候,重點在於要能夠標記識別文字的時間。因為我本來就不會預期語音辨識能夠準確,但即使沒有全對,語音辨識還是能夠找出音近文字,以及這個音近文字的對應時間。

如果研究中使用了訪談資料,有些情況下我們不一定需要從頭到尾的全文逐字稿,而只是需要摘錄特定片段。Web Speech to Text能夠先幫你把訪談資料做一個草稿,即使不完全正確,因為研究者仍然會對訪談內容有些印象,這樣就能透過草稿來很快的找到重要的片段,然後再根據時間回放重要片段的錄音檔案。

但實際上,Web Speech to Text距離逐字稿錄音的實用程度還有很大一段差距。這是一來是因為我們訪談的錄音設備不夠專業,收錄的雜音過多,二來是訪談過程講話時往往文法不標準、語速停頓不流暢,跟範例檔照稿唸的標準發音差異甚大。因此最後辨識出來的文字非常少,而且至多只有功能詞,關鍵字大多都識別不出來。

我截取了一小段我口試時候的錄音,因為錄音裝置離我最近,所以我自己的聲音錄的還算清楚,不過我講話速度太快了,跟一般演講比起來差得太多。而Web Speech to Text辨識的結果非常糟,裡面很多雜音被辨識為「巧虎」、「彩虹」,大部分內容都辨識不出來,基本上是派不上用場的。

如果不能期待Web Speech API這種免費工具的效果,那我們不妨看看Googe語音轉文字能做到什麼程度。試用檔案辨識結果,找出了更多文字,但大概也只有找出我這段錄音檔的1成內容,而且一樣沒有包含關鍵字。既然Google雲端平台都只有如此了,那我想我們對普通錄音檔的語音辨識還是不要抱持著太大的期望好了。

說到頭來,那到底Web Speech to Text適合用在什麼地方呢?如果你的錄音是在講一些明確傳達資訊的對話,而且不要太多專有名詞的話,那辨識起來倒是還可以接受。我試了「【館長】金剛直播(20190114)」這個的影片,裡面是館長在講被傳喚到法庭的事情,辨識效果還可以接受,真讓我意外。

總之,Web Speech to Text的確不是一個萬能神器,但卻是一個有趣的小玩具。加入了播放YouTube功能之後,我就一直在嘗試各種影片,看看辨識的效果如何,一不小心又花了好多時間。大家就自行玩玩看,並在下面分享你的看法吧。


那麼這次對於Web Speech to Text的介紹就到這裡了。你會有需要從語音中辨識文字的需求嗎?什麼時候會想要用這個功能呢?你以前都是怎麼做的呢?你覺得Web Speech to Text能夠對你有什麼幫助嗎?歡迎在下面的留言處跟我們分享你的想法。如果你覺得我這篇教學寫的不錯的話,請幫我在AddThis分享工具按讚、將這篇分享到Facebook等社群媒體吧!感謝你的耐心閱讀,讓我們下一篇見。

總共116 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 回覆刪除
  2. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
    6. 回覆刪除
  3. 回覆刪除
  4. 回覆刪除
    回覆
    1. 回覆刪除
  5. 回覆刪除
  6. 回覆刪除
    回覆
    1. 回覆刪除
  7. 回覆刪除
    回覆
    1. 回覆刪除
  8. 回覆刪除
    回覆
    1. 回覆刪除
  9. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  10. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
  11. 回覆刪除
  12. 回覆刪除
    回覆
    1. 回覆刪除
  13. 回覆刪除
  14. 回覆刪除
    回覆
    1. 回覆刪除
  15. 回覆刪除
  16. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
  17. 回覆刪除
    回覆
    1. 回覆刪除
  18. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  19. 回覆刪除
    回覆
    1. 回覆刪除
  20. 回覆刪除
  21. 回覆刪除
  22. 回覆刪除
  23. 回覆刪除
    回覆
    1. 回覆刪除
  24. 回覆刪除
    回覆
    1. 回覆刪除
  25. 回覆刪除
    回覆
    1. 回覆刪除
  26. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
  27. 回覆刪除
    回覆
    1. 回覆刪除
  28. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  29. 回覆刪除
    回覆
    1. 回覆刪除
  30. 回覆刪除
    回覆
    1. 回覆刪除
  31. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
  32. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  33. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
    3. 回覆刪除
    4. 回覆刪除
    5. 回覆刪除
    6. 回覆刪除
    7. 回覆刪除
    8. 回覆刪除
    9. 回覆刪除
  34. 回覆刪除
    回覆
    1. 回覆刪除
  35. 回覆
    1. 回覆刪除
    2. 回覆刪除
  36. 回覆刪除
    回覆
    1. 回覆刪除
  37. 回覆刪除
  38. 回覆刪除
  39. 回覆刪除
    回覆
    1. 回覆刪除
    2. 回覆刪除
  40. 回覆刪除