转写文字要放进视频编辑器,还需要时间轴。本文承接 CPU 转写练习,利用 faster-whisper 分段结果的 start、end、text 字段,编写一个本站示例将它们保存为 SRT。代码没有加入智能断句或说话人识别。
先确认基础转写能够输出
先完成 录音转文字入门。确认音频能够读取、段落时间递增,再导出字幕。使用相同音频版本;若视频后续经过裁剪,字幕时间也需要相应调整。
编写 SRT 保存脚本
from faster_whisper import WhisperModel
def srt_time(seconds):
total = max(0, round(seconds * 1000))
hours, rest = divmod(total, 3600000)
minutes, rest = divmod(rest, 60000)
secs, millis = divmod(rest, 1000)
return f"{hours:02}:{minutes:02}:{secs:02},{millis:03}"
model = WhisperModel("small", device="cpu", compute_type="int8")
segments, _ = model.transcribe("audio.mp3", beam_size=5)
with open("subtitles.srt", "w", encoding="utf-8") as output:
for number, item in enumerate(segments, 1):
output.write(f"{number}\n")
output.write(f"{srt_time(item.start)} --> {srt_time(item.end)}\n")
output.write(item.text.strip() + "\n\n")每条字幕包含序号、起止时间和正文,条目之间留空行。脚本会覆盖当前目录中的同名字幕文件;修改前保存旧版。处理结束后应检查文件不为空,再导入支持 SRT 的播放器或编辑器。
用三个位置检查是否同步
- 播放开头,确认第一句的出现时间。
- 跳到中间一段,核对文字和发声是否对应。
- 播放结尾,检查是否逐渐偏移。
如果始终相差固定时间,检查音频是否有片头差异;如果偏差逐步增加,则要重新核对所用音视频是否属于同一剪辑版本。不要只修第一句就认为全部同步。
可导入不代表适合阅读
人工处理太长的条目、术语拼写和标点,必要时在编辑器中拆分并回听。模型分段不等于最佳字幕断句。保留首次导出和最终校对两个文件,便于判断后期改动。
常见问题
中文乱码怎么办?
本例使用 UTF-8,检查播放器导入编码以及文件是否被其他编辑器重新保存。
能直接获得逐字高亮吗?
本例是分段字幕。逐字时间和卡拉 OK 样式需要另外处理,不能仅靠把一段文字拆成单字获得准确时间。
Windows 实操:创建并验证字幕
- 先按本篇链接的入门教程创建虚拟环境、安装 faster-whisper,确认同目录下有
audio.mp3。 - 用记事本新建
make_srt.py,复制本文的完整 Python 示例并以 UTF-8 保存。务必选择“所有文件”,避免文件扩展名变成 .txt。 - 在同一文件夹打开 PowerShell,执行下面命令。首次下载模型和转写需要等待,不要在文件还没写完时关闭窗口。
.\.venv\Scripts\python.exe make_srt.py运行完成后应出现 subtitles.srt。记事本打开后的格式应类似下例;内容和时间会随你的音频而不同:
1
00:00:00,000 --> 00:00:02,500
这里是第一段识别文字。
2
00:00:02,500 --> 00:00:05,000
这里是第二段识别文字。在播放器打开对应音视频,通过播放器的字幕菜单加载 subtitles.srt;先看开头,再跳到中间和结尾。如果文件为空,检查音频是否有可识别语音、模型是否报错;如果报找不到文件,检查终端当前目录和文件名。手动校对后另存一个版本,原脚本再次运行会覆盖 subtitles.srt。
项目来源与许可
原项目:SYSTRAN/faster-whisper。许可说明:MIT,详见原仓库许可与说明。仓库与许可核验于 2026-10-31。本文为本站编写的中文导读与练习设计,不是原教程逐字翻译;未在读者环境执行,运行结果需自行核对。