Python中如何实现自动生成SRT文件?
最近在研究自动字幕,发现了这个程序:agermanidis/autosub。
这款程序可以做到实时生成 SRT 文件,我想问的是这款软件是怎么样做到生成时间轴的? 这块 分析语音的代码我没能看懂,麻烦能简单解释一下吗?提前感谢。
Python中如何实现自动生成SRT文件?
4 回复
代码没看完,这块代码大概是切分每句话的长度(帧)
要自动生成SRT字幕文件,核心是生成符合其格式规范的文本。SRT文件本质上是带时间戳的文本序列。下面是一个完整的Python实现,它接受一个包含时间戳和文本的列表,并生成对应的.srt文件。
def format_timestamp(seconds):
"""将秒数转换为SRT格式的时间戳:HH:MM:SS,mmm"""
hours = int(seconds // 3600)
minutes = int((seconds % 3600) // 60)
secs = int(seconds % 60)
millis = int((seconds - int(seconds)) * 1000)
return f"{hours:02d}:{minutes:02d}:{secs:02d},{millis:03d}"
def create_srt_file(subtitles, output_file="output.srt"):
"""
生成SRT文件。
参数:
subtitles: 一个列表,每个元素是一个字典,格式为:
{'start': 开始时间(秒), 'end': 结束时间(秒), 'text': '字幕文本'}
output_file: 输出的SRT文件名。
"""
with open(output_file, 'w', encoding='utf-8') as f:
for idx, sub in enumerate(subtitles, start=1):
start_time = format_timestamp(sub['start'])
end_time = format_timestamp(sub['end'])
text = sub['text']
# 写入序号、时间轴和文本
f.write(f"{idx}\n")
f.write(f"{start_time} --> {end_time}\n")
f.write(f"{text}\n\n")
# 使用示例:假设你从语音识别或手动输入获得了字幕数据
sample_subs = [
{'start': 0.0, 'end': 2.5, 'text': '大家好,欢迎来到这个教程。'},
{'start': 2.5, 'end': 5.8, 'text': '今天我们将学习如何自动生成SRT文件。'},
{'start': 5.8, 'end': 10.2, 'text': '使用Python可以轻松处理时间戳和文本格式。'}
]
create_srt_file(sample_subs, "my_subtitles.srt")
print("SRT文件已生成:my_subtitles.srt")
代码解释:
format_timestamp函数负责将浮点数秒(如 123.456)转换为00:02:03,456这样的标准SRT时间格式。create_srt_file是主函数。它遍历传入的字幕列表,每个字幕条目包含开始时间、结束时间和文本。- 写入文件时,严格按照
序号、时间轴 --> 时间轴、文本、空行的格式循环写入。
如何使用:
你只需要准备好你的字幕数据(subtitles列表),列表中的每个字典包含 start、end 和 text。这个数据可以来自:
- 手动输入
- 语音识别API的返回结果(如调用Azure、Google Speech-to-Text服务后,解析其返回的时间戳和文本)
- 其他视频处理工具的输出
运行后就会在指定路径生成一个可用的 .srt 文件,可以直接导入到视频编辑软件或播放器中使用。
一句话总结: 核心就是按照 序号\n时间轴 --> 时间轴\n文本\n\n 的固定格式循环写入文本文件。
看代码里面用到的 audioop.rms 函数的作用,就是在计算每个 chunk 的声音强度
https://docs.python.org/2/library/audioop.html#audioop.rms


