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

JavaScript如何将带时间戳的转录文本处理为标准化字幕格式

转录文本转字幕格式化实现思路

不要尝试用单个正则一次性匹配开始时间、文本、结束时间三个字段,场景兼容性会很差。最优实现思路分两步走:

  • 第一步:先提取全文所有时间戳的位置和值,拿到按出现顺序排序的时间戳列表,每个元素包含时间戳内容、在原字符串中的起始位置、结束位置
  • 第二步:遍历时间戳列表,两两配对为「开始时间-结束时间」,两个时间戳之间的所有字符串就是对应条目的Text内容,清洗空白后为空的条目直接丢弃即可

完整实现代码

function parseTranscript(str) {
  // 时间戳正则,可根据实际格式自行调整适配不同时间戳写法
  const timeReg = /\[?([01]\d|2[0-3]|\d):([0-5]\d):([0-5]\d)(?:\.(\d{2,3}))?\]?/g
  // 提取所有时间戳的完整信息
  const timeStamps = Array.from(str.matchAll(timeReg)).map(match => ({
    value: match[0],
    start: match.index,
    end: match.index + match[0].length
  }))
  const result = []
  // 两两配对处理时间戳和对应文本
  for (let i = 0; i < timeStamps.length - 1; i++) {
    const curr = timeStamps[i]
    const next = timeStamps[i+1]
    // 截取两个时间戳之间的文本并清洗空白
    const text = str.slice(curr.end, next.start).trim()
    // 过滤空文本的无效条目
    if (text) {
      result.push({
        Start: curr.value,
        End: next.value,
        Text: text
      })
    }
  }
  // 如需处理最后一个时间戳(无后续时间戳作为结束时间的场景),可在这里补充自定义逻辑
  return result
}

// 测试用例
const testStr = `[09:35:10.00]
1. Lorem ipsum...
[09:35:13.11]
[09:35:15.14]
2. sed do eiusmod...
[09:35:39.20]
3. anim id est laborum...
[09:35:43.17]`

console.log(parseTranscript(testStr))

运行输出示例

[
  {
    Start: '[09:35:10.00]',
    End: '[09:35:13.11]',
    Text: '1. Lorem ipsum...'
  },
  {
    Start: '[09:35:15.14]',
    End: '[09:35:39.20]',
    Text: '2. sed do eiusmod...'
  },
  {
    Start: '[09:35:39.20]',
    End: '[09:35:43.17]',
    Text: '3. anim id est laborum...'
  }
]

自定义调整说明

  • 可根据实际遇到的时间戳格式修改timeReg正则,只要能正确匹配所有时间戳即可,适配性远高于一次性匹配多字段的正则
  • 文本清洗规则可自行扩展,比如去掉行首序号、替换多余换行、过滤特殊字符等
  • 最后一个时间戳没有后续时间戳作为结束时间的场景,可自行补充逻辑,比如设置固定延长时长、直接取当前时间戳加固定偏移作为结束时间等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:24:02