You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中根据指定时间戳从.srt文件提取字幕内容?

提取指定时间戳的SRT字幕条目方案

嘿,我刚好折腾过类似的需求,其实你试过的pysubs2和pysrt都能轻松实现这个功能,可能之前没注意到它们自带的时间属性处理~ 下面给你具体的实现思路和代码:

方法一:用pysubs2(推荐,时间处理更直观)

先安装依赖:

pip install pysubs2

然后写个简单的函数就能搞定:

import pysubs2

def get_subtitle_entry(subtitle_path, t):
    # 加载目标SRT文件
    subs = pysubs2.load(subtitle_path)
    # 将输入的秒数转成毫秒(pysubs2用毫秒存储时间戳)
    target_ms = t * 1000
    # 遍历字幕条目,匹配时间范围
    for subtitle in subs:
        if subtitle.start <= target_ms <= subtitle.end:
            return subtitle.text
    # 没找到对应时间的字幕时返回None
    return None

# 测试调用
if __name__ == "__main__":
    result = get_subtitle_entry("subtitle_file.srt", 51.500)
    print(result)  # 输出: Performing on the ed sullivan show.

pysubs2会自动解析SRT里的时间戳,每个字幕对象的start和end都是毫秒数值,直接和转换后的目标时间对比就行。如果你的字幕文件特别大,还能利用SRT按时间排序的特性,用二分查找优化遍历效率,日常使用的话普通遍历足够快了。

方法二:用pysrt

要是你更习惯用pysrt,也可以这么写:

import pysrt

def get_subtitle_entry_pysrt(subtitle_path, t):
    # 打开SRT文件
    subs = pysrt.open(subtitle_path)
    # 把秒数转换成pysrt的Time对象
    target_time = pysrt.SubRipTime(seconds=t)
    # 匹配时间范围
    for subtitle in subs:
        if subtitle.start <= target_time <= subtitle.end:
            return subtitle.text
    return None

# 测试调用
result = get_subtitle_entry_pysrt("subtitle_file.srt", 51.500)
print(result)

这里pysrt的时间是SubRipTime对象,直接用比较运算符就能判断是否在目标时间范围内,同样很方便。

两种方法都能满足你的需求,选哪个就看你个人习惯啦~

内容的提问来源于stack exchange,提问作者Festive Larry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:59:06