:::

線上檔案語音轉文字字幕: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等社群媒體吧!感謝你的耐心閱讀,讓我們下一篇見。

總共33 則留言, (我要發問)

  1. 中英文轉錄逐字稿的能力到現在到底可以做多好呢?
    日前中國廠商科大訊飛發表語音轉寫逐字稿「訊飛聽見M1」,號稱辨識率高達95%,售價1299人民幣。
    https://unwire.hk/2018/10/23/voice-dictation-robot/life-tech/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+unwirelife+%28UNWIRE.HK+流動科技生活%29

    不過科大訊飛之前有誇大其詞的案例,他號稱現場英翻中並轉寫逐字稿,但實際上英翻中是人類即時同步口譯,機器只負責轉錄中文逐字稿。
    https://technews.tw/2018/09/25/iflytek-fake-ai/

    上網查了一下,關於「訊飛聽見M1」的消息並沒有很多,許多評測看起來也是事先寫好的業配廣告,沒有真的很多評測。

    究竟真實效果為何,仍然有待觀望。

    回覆刪除
  2. 您好,我目前在使用您寫的Web Speech to Text網頁,但是我想要增加日文語系的類別。
    我看到您說其他語系請參考的「Web Speech API Demonstration」列表。
    不過我參考了兩個網頁還有您在github上所放的原始檔,我只找到了在網頁上放置一個新的語系選擇方塊的位置。
    仍然無法識別日文語系的影片。
    如果可以的話希望您能夠增加日文語系,或是指教一下如何增加日文語系,謝謝您。

    回覆刪除
    回覆
    1. To 凜羿,

      我加入了「自選語言」的功能,並加入另一個比較完整的語言列表:
      https://www.science.co.il/language/Locale-codes.php

      日文的語言代碼就是ja
      我把日文、韓文都加入了下拉選單,其他語言可以填在「自選語言」就好。

      我以這個日文影片作為測試
      https://www.youtube.com/watch?v=P7qfM0Q2wkk

      看起來大致上都能辨識
      http://1.bp.blogspot.com/-pCCq2Jp-04o/XSL8ojZi03I/AAAAAAAEURs/vyPQs_pDyR4VG1HEf1DO1sIxFP4CcUxVACK4BGAYYCw/s1600/2019-07-08_161845.jpg

      那就這樣,有問題再說吧
      https://pulipulichen.github.io/HTML5-Speech-to-Text/

      刪除
    2. 好的,非常感謝您花時間修改,謝謝。

      刪除
    3. 請問?可否同樣加入粵語?因爲我已嘗試很多次,自選語言 zh-hk,都不能使用。如果可以廣東話轉繁體。實在太好了!拜託拜託!!!

      刪除
  3. 近日網友回報Web Speech to Text工具的問題

    1. 可能不能處理過長的影片,網頁會因為記憶體不足而當機
    2. 但是三小時內的影片、產生約70KB的srt字幕檔,是可以成功的

    為了長時間轉錄需求,未來Web Speech to Text可能需要以下功能
    1. 中間轉錄功能:指定轉錄開始到結束的時間
    2. 保存轉錄進度的功能:每隔10秒鐘,儲存現在轉錄的進度。下次開啟同一份檔案的時候,要詢問是否載入上次轉錄的進度。
    3. 保存轉錄文字的功能:每隔10秒鐘,儲存已經轉錄的文字。下次開啟Web Speech to Text時,預先載入上次已經轉錄的文字。
    4. 自動連續保存轉錄文字的功能:設為可選選項,預設關閉。開啟的話,每隔10分鐘就會自動開始下載檔案。開啟的時候,要先確認使用者是否開啟多重檔案下載的權限、以及關閉詢問儲存檔案功能的位置的Chrome設定。

    有時間再來處理吧。

    回覆刪除
  4. 十分感謝您開發的這程式,實際試用結果,你開發的這款比google文件的語音辨識、speechnotes等都還要好用。

    回覆刪除
    回覆
    1. 你好,

      能幫上你的忙,我很開心!

      不過其實這隻程式用的核心工具語音辨識API webkitWebSpeechRecognition,跟Google文件內建的語音辨識是一樣的工具。
      不過我加上了媒體播放時間跟辨識文字之間的對應,也就是你們看到的「字幕」(時間+文字),這樣子我覺得比較好用啦。

      刪除
  5. 請問?可否同樣加入粵語?因爲我已嘗試很多次,自選語言 zh-hk,都不能使用。如果可以廣東話轉繁體。實在太好了!拜託拜託!!!

    回覆刪除
  6. 現在都無法撥放youtube影片 請問要怎麼處理

    回覆刪除
    回覆
    1. 你好,

      我剛剛試著操作看看,是可以載入YouTube的
      https://pulipulichen.github.io/HTML5-Speech-to-Text/

      操作的時候要注意,不能直接按YouTube上面的播放按鈕
      請按「開始辨識」按鈕

      操作示意圖:
      http://2.bp.blogspot.com/-1_CDnfq3a9g/XVZxWrZD_EI/AAAAAAAEWvg/M4sABuCrcOgz3_h4YZ_hgccQR8TSrKemgCK4BGAYYCw/s1600/PicPick%2B20190816-165956-1.png

      刪除
  7. 非常感謝, 也非常實用, 對於整個的過程與原理, 有了概念, 至少知道我在做什麼步驟, 為什麼這麼做, 以及會得到什麼結果. 真的非常佩服你的才華.

    回覆刪除
    回覆
    1. To 賴銘松的國標舞世界,

      感謝你的稱讚,有幫上忙真是太好了。

      刪除
  8. 你好啊 ! 你的軟件實在太神了,謝謝你! 但我的chrome在播放影片時,每一次說話停頓後都要我再次允許麥克風,想請問有方法可改變嗎?謝謝你

    回覆刪除
    回覆
    1. To 恐懼鳥。

      請在Google Chrome裡面修改設定
      https://support.google.com/chrome/answer/2693767

      1. 開啟 Chrome Chrome。
      2. 依序按一下右上方的「更多」圖示 更多 接下來 [設定]。
      3. 按一下底部的 [進階]。
      4. 在「隱私權和安全性」底下,按一下 [網站設定]。
      5. 按一下 [麥克風]。關閉 [存取前詢問我] 設定。

      試試看吧。

      刪除
  9. 我發現我要同時在另一個分頁撥放YouTube影片和同時按下開始辨識才會辨識耶,很有趣

    回覆刪除
    回覆
    1. To AffordableEvaluator,

      呃...它是收電腦放出來的聲音
      正常來說應該是要在同一個分頁播放YouTube影片,同時收音並識別才對。

      比較有可能是你的YouTube一開始設為靜音
      所以開始識別並播放YouTube的時候,不會播放任何聲音

      現在的解決方法是,先在其他分頁開YouTube,確認聲音有播出
      再到線上檔案語音轉文字字幕開啟YouTube,開始識別
      這樣應該就可以了

      刪除
  10. 感謝 版主超厲害的程式.請教如何的得到較長時間的文稿?目前我轉檔的文稿只有4分鐘(.odt 又比 TXT 少 4 秒鐘),整個影片是54 分鐘.

    回覆刪除
    回覆
    1. To yehmy,

      應該直接播放影片慢慢轉錄就可以了吧?

      除非電腦記憶體用完,導致網頁當掉
      不然應該就只是普通的慢慢轉錄而已

      不行嗎?

      刪除
    2. 有的影片可以得到9分鐘的文稿.會不會是因為廣告片插播而轉檔中斷,使得54分鐘的影片只有4分鐘文稿?

      刪除
    3. To yehmy,

      理論上有聲音的話,他應該就只是普通的繼續轉錄。
      我還沒實際試過9分鐘以上的影片。
      如果你有沒辦法順利轉錄完成的影片網址的話,可以在這裡貼出來,好讓我檢查看看嗎?

      我有時間的時候會再來確認看看。

      刪除
    4. To yehmy,

      我找了一部14分鐘的影片來轉錄看看,就結論來說,是可以正常運作,不會中斷。
      https://youtu.be/Lyz5v1vZolY

      轉錄畫面
      http://2.bp.blogspot.com/-wZbKuCABHKk/Xc6dt_wKupI/AAAAAAAEbCg/gBDljh9iQJweCmtkw6ofONhku9cOYJGDQCK4BGAYYCw/s1600/anime%2B8%25E7%25A7%2592%25E7%259A%2584%25E4%25BA%258B%25E6%2583%2585.gif

      轉錄完成的畫面
      http://1.bp.blogspot.com/-bvyx7bA3Ikc/Xc6dvUZXZqI/AAAAAAAEbCo/k6yy1UwuywMYfA-kI2Qr5ixoASHJ-HHXwCK4BGAYYCw/s1600/2019-11-15_204106.png
      (本來想要錄影的,結果跑到最後太吃記憶體了,畫面還沒正常運作,它就跑完了)

      最後轉錄結果轉出的SRT檔案如下,效果就...你知道的,不能強求XD
      https://github.com/pulipulichen/blog-pulipuli-info-data-2019/blob/master/11/%E6%9C%89...%E6%9C%89%E6%8B%BF%E8%97%A5%E5%95%A6%EF%BC%8C%E4%BD%86%E6%B2%92%E4%B8%8D%E8%88%92%E6%9C%8D%E5%B0%B1.srt

      刪除
  11. 修正了一個小問題:

    開始播放YouTube影片時會強制放大音量和取消靜音,以確保轉錄可以正常運作。

    回覆刪除
  12. 謝謝布丁大師 ! 記憶體 3 G, 轉檔中 只用了 1.6G ,可能沒問題.
    請 試 看看 https://www.youtube.com/watch?v=I3-ToLpt4jA

    回覆刪除
    回覆
    1. To yehmy,

      今天實際上花了快1個小時轉錄看看。

      http://1.bp.blogspot.com/-_6Bw8tJnQBA/Xd57prj2iwI/AAAAAAAEbec/Q9LNFr21dm8JaoM7m5Ij3f9hck1iMLUbACK4BGAYYCw/s1600/2019-11-27_213411.png
      看起來是沒有問題的。

      刪除
  13. 調整過了功能,讓長時間轉錄也不會消耗太多記憶體
    https://www.youtube.com/watch?v=cUh978LguQk
    1:37:33 長時間演講,轉錄成功
    轉錄時不太會有當當的感覺了

    回覆刪除
  14. Thank you very much for seeing 밤알바 information.
    Thank you very much for seeing 밤알바 information.

    回覆刪除