2023年2月22日 星期三

使用 OpenAI Whisper 製作影音的字幕或逐字稿

2023年2月22日 星期三

前言(廢話一堆,可忽略不看)

 試了不少影音編輯工具(平台)的自動語音辨識產生字幕的功能以後,發現很多看起來都差不多;後來看到了這個 auto-subtitle 的專案:

它是使用 OpenAI 的 Whisper 來進行語音辨識,哈!只能說自己實在太孤陋寡聞了,現在才注意到有 OpenAI Whisper。Whisper 有開源,它的專案連結在底下:

如果已經準備好 Python 的環境,可以將它安裝在本機上,在專案中有簡單的說明。如果想快速測試,那當然是直接使用 Google 的 Colab 來建置最方便。Colab 已經有基本的 Python 環境,Whisper 需要的 ffmpeg 及一些可能需要用到的套件都內建好了。

好康A~跟您分享

好東西,只給自己用太可惜了,所以我將自己在本機上實驗的程序,移植到 Google Colab 中,還加上了一些功能,大家可以直接使用,不用管安裝的過程。

這個 OpenAI Whisper@Colab 有以下的功能:

  • 可輸入 YouTube 影片的網址,產出影片的字幕檔後下載。
  • 可輸入 YouTube 播放清單的網址,產出清單中所有影片的字幕檔,並置入壓縮檔中後下載。
  • 可輸入 Vocaroo 線上錄音的網址,解析出音檔的文字內容。
  • 可讀取上載到 Colab 暫存空間的影音檔案,產出字幕內容後下載。
v.2 版增強的功能:
  • 可輸入已設定為「公開分享的」Google Drive 影音網址(v.2 版才支援)
  • 可輸入檔名為「.txt」的轉換清單檔案,裡面一行一個要辨識的網址或是檔名,執行時就可以批次進行辨識(v.2 版才支援)
  • 可自訂輸出的資料夾名稱(v.2 版才支援)
  • 可自訂是否要覆蓋已經辨識過的文字檔。(v.2 版才支援)

工具網址 (2023.04.12更新過程式)

這個「OpenAI-Whisper-語音辨識-製作字幕檔」的工具存放在 Google Colab 的筆記本,網址如下:

註:另一個選擇是使用 Faster Whisper,詳見這一篇:

影片說明

底下的影片,簡單地介紹一下如何使用這個工具製作字幕檔:

重點整理

關鍵程序截圖並說明如下:

建立自己的副本,才能執行裡面的程式。之後都開副本就好。

備註:不建立副本也可以使用,只是不會儲存設定的資料及執行時輸出的訊息;好處是我更新時,程式也是最新的,不用重新建立副本。

[圖1] 建立自己的 Colab 筆記副本

幫工具加上星號,在雲端硬碟比較好找。按一下 [圖2] 箭頭 1 所指的星星,即可將自己的副本列入 Google 雲端硬碟的左側欄的「已加星號」的分區中。

[圖2] 在自己的副本中操作

進行設定:如 [圖2] 的箭頭 2 ,輸入影音的路徑、選擇語言代碼、輸出的格式、使用的辨識模型...等設定。

執行程式:如 [圖2] 的箭頭 3,按一下「播放」鈕,即可以開始執行 Whisper 的安裝與語音辨識程序。

等候辨識結果:等候的時間需視影片或聲音檔的聲音長度及是否使用 GPU 運算,當然囉,選用 Whisper 的哪一種辨識 Model 也有差異,small 的 model 一定花的時間比 medium 的 model 要少很多,當然,辨識的正確率也會有差別。以前面的介紹影片為例,影片的片長是 5分22秒,選用 whisper  medium 的 model 來辨識,花了快二十分鐘。(註:後來開啟了 GPU,並使用 large 的 model,只花了一分多鐘,建議開啟 GPU 使用;Goolge 讓免費版的  Colab 一天可使用 12 小時左右的 GPU。)

[圖3] 等候時間隨選用的 model 而有差異

如何上載電腦的檔案到 Colab 並進行語音辨識

如果想辨識的影音不在網路上,可以立即上載到 Colab 的「暫存」空間,注意!它是「暫存的」,當我們下回重新開啟 Colab 的筆記本時,上載的檔案會不見哦!下面看一下如何使用這個暫存空間(它的額度和 Google 雲端硬碟是分開算的)。

展開「暫存空間」:按一下左側欄中的「資料夾」圖示,即可展開暫存空間來上載或管理檔案。

[圖4] 展開暫存空間

上載檔案:當「暫存空間」展開後,只要將想上載的檔案,以拖曳的方式,拉進「暫存空間」即可。

[圖5] 以拖曳的方式上載檔案

溫馨提醒,暫存區是會被清空的

[圖6] 暫存區是會被清空的警告訊息

設定檔案名稱:等影音檔案上載完畢,就可以設定要辨識的檔案名稱,如 [圖7] 箭頭1 ,在「url」的欄位中,輸入檔案的「完整名稱」。

[圖7] 設定檔案名稱並執行程式

執行程式:都設定參數了,就可以按 [圖7] 箭頭 2 所指的「播放」鈕來執行語音辨識的程序。

Q & A

  • Q : 可不可以辨識自己雲端硬碟中的影音檔案?
    A : 當然可以。看一下 Colab 「暫存區」上方的圖示,其中有一個是「連接雲端硬碟」的圖示,按下去以後,照指示,就可以將雲端硬碟變成暂存區中的一個資料夾來存取檔案了。找到要使用的檔案後,按一下檔案,檔案的右邊會有「三個點點」,按一下「三個點點」即可出現檔案管理的選單,按選單中的「複製路徑」,就可以取得「url」要填入的檔名。
  • Q : 如何加快辨識的速度?
    A : AI 需要大量的運算,如果能打開「GPU」的選項,速度會快很多倍,所以一定要在自己的 Colab 中,選用 GPU 的選項,設定的方法:
    1.在 Colab 上方主選單中,按一下「編輯」。
    2.按一下「筆記本設定」。
    3.在「筆記本設定」的「硬體加速器」中,選「GPU」。

相關連結


自己的雜記(還是廢話,請忽視)

順便筆記一下,免得忘記又重新掉坑的。

Windows 7 安裝最近版的 Anaconda ,出現「Failed to create menus」的錯誤訊息而無法安裝。因為系統太舊,無法安裝 Python 3.9,所以卡住。只好改用舊版的 Anaconda,像 2021.05 是使用 Python 3.8 的。舊版的可以在這裡找到:

最後改安裝「Anaconda3-2021.05-Windows-x86_64.exe」。

照說安裝完 openai-whisper 後,除了 python 的套件,應該也會有 .exe 的執行檔,但是我在一台沒有安裝過 Python ,全新安裝 Anaconda 的 Windows 10 上,直接執行 whisper 的命令卻出現找不到指令的錯誤訊息。查了一下,原來 whisper.exe 被安裝到使用者目錄(ex. userA) ,類似底下的路徑中:

Users\userA\AppData\Roaming\Python\Python39\Script 

為了方便使用,可以將該路徑加入環境變數中。

Windows 7 的舊版 Anaconda 則是將 whisper.exe 放到 ananconda 目錄中的 scripts 中,該路徑已經在環境變數的 PATH 裡了。版本不同,安裝方法不同,路徑就得特別注意一下。


23 則留言:

  1. 請問 您說的"可不可以辨識自己雲端硬碟中的影音檔案?"沒找到您說的暫存檔檔設定,主要是有背景音樂時翻譯的準確度下降很多,想去背景音業後再轉錄.所以想參考https://colab.research.google.com/drive/1waDNWIpwL5ftwJmvMRl-ec7akxNK9aDG?authuser=2 去音樂後再轉錄想請問如何能有效的整合為一個ipynb ,希望您能指導,謝謝你好用的工具.

    回覆刪除
    回覆
    1. 您好,
      在 Colab 的左側,有一個資料夾的圖示,按下去以後,即會打開資料夾的「側欄」,在側欄的上方有一個圖示是雲端硬碟的連線,如果是首次使用,按下去後,照指示去執行雲端硬碟的連線,連好以後,它就跟存取一般資料夾一樣囉!
      至於您提到先去掉背景音樂,這個我沒試過,等您分享囉!

      刪除
  2. 不知道有沒有可能做一個雙語版的~
    上面一行是透過音源的中文
    下面一行是翻譯過後的英文

    回覆刪除
    回覆
    1. 您好,看來您還需要這個工具 bilingual_book_maker :
      https://github.com/yihong0618/bilingual_book_maker

      刪除
  3. 您好, 感謝您無私地分享這麼棒的程式
    之前使用都正常, 近日使用時都會出現下列這行錯誤訊息
    WARNING: [youtube] ACeOb_hkuqE: nsig extraction failed: You may experience throttling for some formats
    Install PhantomJS to workaround the issue. Please download it from https://phantomjs.org/download.html
    n = KA_vFCeUgnQUSpfJqE ; player = https://www.youtube.com/s/player/8c7583ff/player_ias.vflset/en_US/base.js

    請問我可以忽略嗎? 還是程式碼有需要更新呢? 感恩您

    回覆刪除
    回覆
    1. 您好,
      據我之前的觀察,那個訊息是由下載影音檔的程序發出的warning,但並不影響整個流程,所以不用管它。
      哈!要是以我過去都求完美的個性,您應該看不到那警告的訊息的;不過,誰說一定要什麼都求完美呢?實用才是王道 ^_^

      刪除
    2. 您好,認真地查了一下 yt-dlp 專案中的 issues ,那個因為 Youtube 網站改了格式造成最近會產生 WARNING 的問題,開發專案的人認為是小問題,所以無解。我將 Colab 中的下載的參數多加了一個讓 yt-dlp 關掉警告訊息的參數了,如果您是建立副本使用的,又很在意那個訊息,請重新建立一份 2023-06-11 的副本就可以。

      刪除
  4. 您好,
    您提供的 Youtube 連結是歌曲的,因為人聲是用唱的,加上有吵雜的伴奏聲音,應該很難辨識得出來。如果您指的「其他中文」也是用唱的,建議您就別用本文中的工具來測試了,基本上是浪費時間而已。

    回覆刪除
  5. 感謝了解,謝謝您的解答,單獨的語音來試試,這創作很好。

    回覆刪除
  6. 在 Colab裡面,可否做一個文字轉語音的,可以訓練AI模仿到自己的聲音。感謝!

    回覆刪除
    回覆
    1. 您好,
      抱歉,這工具只是應用 OpenAI 釋放出來的 Whisper 專案,最重要的 AI 語音辨識並不是我開發的哦!
      至於您說的功能,是屬於 DeepFake 的部份,據我了解,在 Google 的使用規範中,並不允許人家在 Colab 中做這件事哦 ! 小心被停權,而無法再使用 Colab。

      刪除
    2. 您好,
      建議您自己看一下 Colab 的使用規範:
      https://research.google.com/colaboratory/faq.html

      在它的 FAQ 中有「Seems too good to be true. What are the limitations?」
      裡面有提到禁止的行為,最後一項: creating deepfakes

      沒被抓到的話,只能說運氣好,我當初不知道,被停權過,GPU 被禁用了一個多月。

      還有,哈哈哈~ 您既然知道有人做出來,是不是該請原作幫忙,而不是找我才對,我已經說了,個人並不會 AI 哦!

      刪除
  7. 您好請問安裝時出現部分錯誤資訊是正常的嗎?,如下:
    install whisper ...
    Installing build dependencies ... done
    Getting requirements to build wheel ... done
    Preparing metadata (pyproject.toml) ... done
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 20.4 MB/s eta 0:00:00
    Building wheel for openai-whisper (pyproject.toml) ... done
    ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
    llmx 0.0.15a0 requires cohere, which is not installed.
    llmx 0.0.15a0 requires openai, which is not installed.
    install yt_dlp ...
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 31.9 MB/s eta 0:00:00
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 194.4/194.4 kB 23.2 MB/s eta 0:00:00
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 72.3 MB/s eta 0:00:00
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 129.9/129.9 kB 10.3 MB/s eta 0:00:00
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 75.3 MB/s eta 0:00:00

    回覆刪除
    回覆
    1. 您好,
      我很久沒使用了,都不知道它在安裝時會出現錯誤訊息。
      剛剛以音檔測試過,可以正常進行語音辨識,應該不影響使用。等我有空了再來研究一下是哪裡有狀況。
      謝謝您的通報。

      刪除
    2. 我用了比較粗淺的方式就是前面加一段,請問這樣是可行的嗎?
      ! pip install llmx
      ! pip -q install git+https://github.com/openai/whisper.git

      刪除
    3. 您好,
      電腦有個好處,想法可不可行,試了便知道囉!
      個人放在 Colab 中的東西本就 OpenSource,您只要建立了副本,程式碼就在裡頭,加了、試了,便知可不可行。
      在猜想,可能是 Whisper 專案最近用了 tiktoken,而 tiktoken 和 llmx 又彼此相依,llmx 也需要 cohere 和 openai .....
      不過,如昨天所說的,目前看不出使用上有什麼問題。

      刪除
    4. 測試結果 可行!
      非常謝謝您!!

      刪除
  8. 您好,今天上午九點多使用Google Colab 筆記本https://tinyurl.com/gsyan-whisper2 這個版本時還是可以正常使用的,但下午五點多便一直出現錯誤,以下錯誤代碼供您參考。

    KeyError: '50'


    During handling of the above exception, another exception occurred:

    ExtractorError Traceback (most recent call last)

    ExtractorError: 18DR6nJfYVJD85rEg9B2LsPCIxRmzatpM: An extractor error has occurred. (caused by KeyError('50')); please report this issue on https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using yt-dlp -U


    During handling of the above exception, another exception occurred:

    DownloadError Traceback (most recent call last)

    /usr/local/lib/python3.10/dist-packages/yt_dlp/YoutubeDL.py in trouble(self, message, tb, is_error)
    982 else:
    983 exc_info = sys.exc_info()
    --> 984 raise DownloadError(message, exc_info)
    985 self._download_retcode = 1
    986

    DownloadError: ERROR: 18DR6nJfYVJD85rEg9B2LsPCIxRmzatpM: An extractor error has occurred. (caused by KeyError('50')); please report this issue on https://github.com/yt-dlp/yt-dlp/issues?q= , filling out the appropriate issue template. Confirm you are on the latest version using yt-dlp -U

    以上再麻煩您幫忙解決,非常感謝您!

    回覆刪除
    回覆
    1. 不好意思再次打擾了,稍早我試著將要辨識的20分鐘音檔拆成2段,分別都順利完成辨識及下載,所以問題應該是解決了,只是不知道為什麼會發生這樣的現象,因為以往長度三四十分的檔案也是可以順利完成,是不是因為這個檔案雜音較多,比較吃資源呢?

      總之目前問題已順利解決,也非常謝謝您無私提供這麼好用的資源,再次感恩!

      刪除
    2. 您好,
      由錯誤訊息中,並看不出問題點,只能知道是卡在影音下載的過程,這和 OpenAI Whisper 應該是無關;建議如果是這樣,先自行將影音下載至電腦,再由雲端硬碟或直接上載到 Colab 的方式,指定完檔案的路徑以後再執行語音辨識。
      個人有讓它辨識超過一個小時的音檔,所以跟影音的長短應該無關的。

      刪除
  9. 您好,現在有Whisper V3了 ,該如何用colab run呢?

    回覆刪除
    回覆
    1. 您好,
      如果您是使用我 Colab 裡 OpenAI Whisper Notebook 的 v.2 版本,它本就會自動安裝最新版本的 Whisper,而現在預設的 large model 應該就是 V3。您可以觀察一下下載回來的 model 檔案大小,如果顯示是 2.8GB 左右,是 V2 ;如果顯示的檔案大小是 3GB 以上,應該就是 V3 的 model。

      刪除
  10. 非常感謝大大無私的分享,之前有照一篇網誌在自己電腦裝PyThon....等可透過下whisper語法的方式去語音轉文字,不過自己電腦時在跑很慢,而且需要一個一個檔案的去下語法,感謝大大解決了我的困擾~,非常感謝!

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket