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

如何在VBScript中将时码字符串转换为帧数并执行运算

处理EDL时码:拆分、帧数转换及差值计算

需求场景

我手头有这样的EDL格式时码字符串:

002 0000 A C 00:00:20:01 00:00:31:23 00:01:29:24 00:01:41:21

之前已经用VBScript正则捕获到了目标子匹配时码,现在需要完成这几件事:

  • 把每个用:分隔的时码拆成「小时、分钟、秒、帧数」的列表
  • 按照25帧/秒的行业标准,将时码转换为总帧数
  • 计算两个时码的时间差并格式化输出

时码转帧数规则(25fps标准)

  • 小时转帧数:1小时 = 1 × 60 × (60 × 25) = 9000帧
  • 分钟转帧数:1分钟 = 1 × (60 × 25) = 1500帧
  • 秒转帧数:1秒 = 1 × 25帧
  • 最后直接加上时码末尾的帧数部分

举个实际例子:时码00:02:20:01的转换计算:
0小时×9000 + 2分钟×1500 + 20秒×25 + 1帧 = 0 + 3000 + 500 + 1 = 3501帧

最终实现的VBScript代码

我最终完成了时码差值计算的完整脚本,核心是用DateDiff计算秒差,再用TimeSerial转换为标准时间格式;为了避免输出AM/PM后缀,特意把系统区域设置为德国(强制24小时制):

Option Explicit 
'将系统区域设置为德国,模拟24小时制(无AM/PM标识)
setlocale "de-de"
'TBA读取整个数据文档以获取NameDetails和TC
Dim TC '临时数据集,需将每一行传入此搜索
TC ="002 0000 A C 00:00:20:01 00:00:23:23 00:01:29:24 00:01:41:21"
'定义每个时码元素的搜索条件
Dim re1
re1 =".*?" '非贪婪匹配填充内容
Dim re2
re2 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" '时-分-秒-帧格式匹配
Dim re3
re3 =".*?" '非贪婪匹配填充内容
Dim re4
re4 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" '时-分-秒-帧格式匹配
Dim re5
re5 =".*?" '非贪婪匹配填充内容
Dim re6
re6 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" '时-分-秒-帧格式匹配
Dim re7
re7 =".*?" '非贪婪匹配填充内容
Dim re8
re8 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)" '时-分-秒-帧格式匹配
'将时码搜索条件组合为搜索模式
Dim r
Set r = New RegExp
r.Pattern = re1+re2+re3+re4+re5+re6+re7+re8
r.IgnoreCase = True
Dim m, timeDur, ts, Timeofday
Set m = r.Execute(TC)
'遍历时码以计算前两个条目之间的时长
If m.Item(0).SubMatches.Count > 0 Then
 Dim time1
 time1=m.Item(0).SubMatches.Item(0)
 Dim time2
 time2=m.Item(0).SubMatches.Item(1)
 Dim time3
 time3=m.Item(0).SubMatches.Item(2)
 Dim time4
 time4=m.Item(0).SubMatches.Item(3)
 '计算前两个时间的差值,单位为秒
 timeDur=datediff("s", time1, time2)
 '将结果格式化为序列时间格式,例如00:00:00
 ts = TimeSerial(0, 0, timeDur)
 '输出时长结果,后续需附加轨道信息并重复操作,然后保存到文件
 MsgBox (ts)
End If

代码关键说明

  1. 区域设置:通过setlocale "de-de"强制启用24小时制,避免TimeSerial输出多余的AM/PM后缀
  2. 正则匹配:用组合的正则表达式一次性捕获EDL行内的4个目标时码
  3. 差值计算:用DateDiff("s", time1, time2)快速计算两个时码的秒数差,再通过TimeSerial转换为易读的标准时间格式输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:58:12