運用 AI 將語音轉成精準時間戳記 srt 字幕檔案
不知道大家有沒有「語音轉字幕」的需求呢?雖然現在 AI 蓬勃發展,但如果要精準做到語音轉換字幕,並且產生精確的時間戳記的 srt 檔案,不是需要額外花錢,就是產生的結果無法符合中文語系常見得需求 ( 例如中文、英文、數字或台語互相混雜的狀況 ),這篇教學會介紹運用 Google Colab 搭配 Gemini 的做法,讓產生具有精準時間戳記的 srt 字幕檔案。
快速導覽:
Google Colab 搭配 Gemini 的做法
Gemini 不僅可以生成文字、圖片、影片和聲音,還有一個神奇的隱藏功能「語音轉文字」,運用 Gemini 可以將錄製的聲音精準的轉換成逐字稿,過程中更能精準辨識中文、英文、台語、數字、語氣等內容,而且識別的正確率非常高,對於想要快速整理聲音檔案的人來說非常的方便。
雖然 Gemini 可以產生精準的逐字稿,但對於字幕檔案的「時間戳記」就非常不準確,不是無法正確對應語音,就是會將一整段很長的文字塞入一個時間戳記中,對於影片剪接而言非常不友善,為了改善時間戳記問題,可以搭配 Google Colab 輔助操作。
Google Colab 是一個 Google 推出的 Python 雲端運行環境,可在免費的狀態下,使用 Google 雲端平台分配的 CPU 或 GPU 運算資源,透過 Google Colab 執行 OpenAI 的 whisper 自動語音辨識模型,就能夠將語音檔案轉換成文字,產生具有精準字幕戳記的 srt 字幕檔案。
雖然 Google Colab 運行 whisper 可以產生精準時間戳字幕檔,但整體辨識的精準度仍有待加強,特別是不同語言混雜時,常常會就出現判斷錯誤的狀況,和 Gemini 的精準度仍有天壤之別。
因此最好的方式就是將 Gemini 的精準文字和 whisper 的精準時間戳互相整合,運用各自的優點,產生精準文字和精準時間戳記的字幕檔案,這也是接下來的步驟要介紹的重點。
使用 Gemini 將語音轉換成精準文字檔
開啟 Gemini,上傳要轉換的聲音檔案,輸入下方的提示詞 ( 自行修改語系名稱 ),模型選擇「思考型」,並強調不要加上任何額外文字或意見,避免 AI 幻覺或自作主張添加內容。
- 前往:https://gemini.google.com/
- 免費 Gemini 只支援 30 分鐘內的語音檔案。
附件是一段「中文」語音,幫我轉換成逐字稿。
注意:
- 轉換成「繁體中文」逐字稿。
- 語音內容可能會有中文、英文、數字或台語交錯的內容,請精準辨識。
- 逐字稿的中文字和英文數字之間保留半形空格。
- 不要加上任何額外文字或你自己分析意見,單純產生逐字稿。
送出提示詞之後,Gemini 就會產生逐字稿,產生的速度根據內容檔案的多寡決定,從下方「未經任何修正」的結果可以看出,產生的逐字稿非常的精準,連同台語都可以精準辨識 ( 除了圈叉叉圈沒有辨識為 OXXO ),完成後就可以將文字檔案內容存檔為「.txt」檔案。
使用 Colab 將語音轉換成精準時間戳記字幕
新增並開啟 Google Colab 專案 ( 參考「開始使用 Colab:撰寫第一支 Python 程式」),進入專案之後,首先要先選擇免費的「GPU」資源,執行的速度和準確率才會比較好,選擇「執行階段 > 變更執行階段類型」。
選擇「T4 GPU」硬體加速器,這是免費方案可以使用 GPU 資源,每天有免費的時間額度可以使用。
點擊右上角的「連線」,就可以和具有 T4 GPU 的雲端硬體連線,連線成功後就可以看到出現綠色的勾勾。
在中間區域輸入下列指令,點擊黑色箭頭「執行」,安裝 OpenAI 的 whisper 模組。
!pip install git+https://github.com/openai/whisper.git
點擊左上方「+ 程式碼」按鈕,在下方新增一個程式碼輸入與執行欄位。
點擊左側第一個按鈕,開啟左側選單,點擊「資料夾」圖示,開啟暫存用的雲端空間。
上傳剛剛的錄音檔案,注意,因為是暫存用的雲端空間,所以當 Colab 專案連線結束之後,就會刪除上傳的檔案。
在程式碼區域輸入下列提示詞,將「audio_path」更換成剛剛上傳的錄音檔案檔名,完成後按下前方圓形執行按鈕,就會開始進行字幕檔案的轉換,第一次轉換時會先下載 1.4G 左右的語言模型,在這次 Colab 專案連線過程中,就不會再重新下載。
import whisper
import os
from google.colab import files
from whisper.utils import get_writer
# 1. 載入模型
model = whisper.load_model("medium")
# 2. 設定檔案路徑
audio_path = "錄音.m4a"
# 3. 執行轉錄 (這部分維持原樣)
# Whisper 會自動在 result['segments'] 中儲存時間戳資訊
result = model.transcribe(audio_path, prompt="請轉錄以下繁體中文的內容:")
# 4. 產出 SRT 檔案
output_directory = "." # 輸出至目前目錄
file_name = os.path.splitext(os.path.basename(audio_path))[0]
# 使用 Whisper 內建的 writer 來處理 SRT 格式
# 參數說明: 格式("srt"), 輸出路徑
srt_writer = get_writer("srt", output_directory)
srt_writer(result, audio_path)
# 5. 下載檔案
files.download(f"{file_name}.srt")
執行完成後,就會自動產生並下載一個「.srt」字幕檔案,內容就是具有精準時間戳記的字幕檔案,下方是這個檔案「未修改的內容」,從中可以看出,雖然具有精準的時間戳記,但內容辨識度仍然有些不準確,和 Gemini 的精準文字辨識仍有差異。
1
00:00:00,000 --> 00:00:01,540
哈囉大家好
2
00:00:01,800 --> 00:00:03,840
我是圈XX圈
3
00:00:04,100 --> 00:00:09,480
今天要來跟大家介紹語音轉逐自稿的
4
00:00:09,740 --> 00:00:10,760
精準用法
5
00:00:11,520 --> 00:00:15,360
不知道大家有沒有聽過Gemini呢
6
00:00:15,880 --> 00:00:18,440
Gemini是Google的
7
00:00:18,940 --> 00:00:20,740
很好用的AI工具
8
00:00:26,360 --> 00:00:28,680
使用起來非常的讚喔
9
00:00:29,660 --> 00:00:32,220
今天我們就來試試看吧
10
00:00:32,720 --> 00:00:33,500
現在
11
00:00:34,260 --> 00:00:36,060
我來測試一下
12
00:00:36,560 --> 00:00:37,840
數字好了
13
00:00:38,360 --> 00:00:41,180
我現在說1 2 3 4 5
14
00:00:41,940 --> 00:00:44,500
台語是這兩三四五
15
00:00:44,760 --> 00:00:47,320
不知道能不能精準辨識呢
16
00:00:48,600 --> 00:00:50,900
如果可以精準辨識的話
17
00:00:51,160 --> 00:00:54,240
就表示這段語音逐自稿還不錯
18
00:00:54,740 --> 00:00:55,520
掰掰
使用 Gemini 產生精準字幕與時間戳記字幕
當 Gemini 的精準字幕和 whisper 精準時間戳都完成之後,接下來就可以運用下列的提示詞,讓 AI 將兩者結合在一起,下方使用 Gemini 示範。
有時候 AI 仍然會加入一些自己的臆測或幻覺,可使用「嚴格遵守」、「絕對」、「精確」等指令加強提示。
你是一個比對並修正字幕檔案的專家,我會提供你一份具有時間戳的 .srt 檔案與一份純文字 .txt 檔案,請幫我根據 .txt 檔,修正 .srt 檔案內容,過程中請嚴格遵守下方條件:
- 完成後用程式碼區塊提供我具有時間戳的 .srt 檔案。
- 完全精確保留 .srt 檔案的時間戳,只針對 .srt 內容修正。
- 每段字幕的「結尾」不需要逗號或句號,句中可以有標點符號 ( 根據語氣需求,結尾可以使用驚嘆號 )。
- 可適度移除語氣贅字!
- 絕對不要對 .srt 檔案時間戳進行任何更動!
- 不要加入自己的臆測或想法!
完成後就可以得到「精確時間戳 + 精確文字」的語音逐字稿,將文字儲存為「.srt」檔案,就可在影片中使用字幕。
1
00:00:00,000 --> 00:00:01,540
Hello 大家好
2
00:00:01,800 --> 00:00:03,840
我是圈叉圈
3
00:00:04,100 --> 00:00:09,480
今天要來跟大家介紹語音轉逐字稿的
4
00:00:09,740 --> 00:00:10,760
精準用法
5
00:00:11,520 --> 00:00:15,360
不知道大家有沒有聽過 Gemini 呢
6
00:00:15,880 --> 00:00:18,440
Gemini 是 Google 的一個
7
00:00:18,940 --> 00:00:20,740
很好用的 AI 工具
8
00:00:26,360 --> 00:00:28,680
使用起來非常的讚喔!
9
00:00:29,660 --> 00:00:32,220
今天我們就來試試看吧
10
00:00:32,720 --> 00:00:33,500
現在
11
00:00:34,260 --> 00:00:36,060
我來測試一下
12
00:00:36,560 --> 00:00:37,840
數字好了
13
00:00:38,360 --> 00:00:41,180
我現在說 1 2 3 4 5
14
00:00:41,940 --> 00:00:44,500
台語是 一二三四五
15
00:00:44,760 --> 00:00:47,320
不知道能不能精準辨識呢
16
00:00:48,600 --> 00:00:50,900
如果可以精準辨識的話
17
00:00:51,160 --> 00:00:54,240
就表示這段語音逐字稿還不錯喔
18
00:00:54,740 --> 00:00:55,520
Bye bye
常見問題與處理方法
這篇教學所介紹的做法,大部分的情況都可以正常運作,但有時 AI 仍然會發生奇怪的幻覺,在合併的過程中產生重疊或不流暢的時間戳記,因此建議使用「影片編輯器」進行最後檢查 ( 或上傳到 youtube 之後,透過 youtube 上傳字幕之後進行檢查 ),查看字幕是否可以正常運作,如果有發生字幕時間戳記問題,也可以直接在影片編輯中微調即可。
小結
其實產生精準的字幕往往是影片拍攝者最大的痛點,因為坊間語音轉字幕的軟體或 AI,不是太貴,就是轉換的品質不如預期,但只要可以活動手邊的工具,就可以讓工具各自的優點相輔相成,快速產生精準的字幕囉!
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~