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,不是太贵,就是转换的质量不如预期,但只要可以活动手边的工具,就可以让工具各自的优点相辅相成,快速产生精准的字幕啰!
微信扫码关注
抖音扫码关注