我有一份文件,是一段视频采访的记录。视频本身嵌入了 SMPTE 时间码和刻录时间码 (BITC)。SMPTE 时间码和 BITC 对应于采访拍摄的时间,采用 24 小时制。
在转录文档中,[hh:mm]
格式为每两分钟一个方括号内的时间戳,但这些转录时间戳都是从‘00:00’开始的。
有没有办法使用一种“搜索和替换”功能来浏览文档,找到所有实例hh:mm
并为这些时间戳添加固定时间,从而反映一天中的时间,与 SMPTE 时间码相匹配?
完美的解决方案应该是一个能够:
[hh:mm]
查找格式的所有时间戳- 将采访开始时间“yy:yy”(24 小时格式)添加到所有原始时间戳“xx:xx”。
- 用新的、更正的时间戳“zz:zz”替换时间戳,其等于 xx:xx+yy:yy。
例如,如果我的采访在早上 9:30 开始,则每个时间戳将按以下方式替换:
- 00:00 + 9:30 = 9:30
- 00:02 + 9:30 = 9:32
- 00:04 + 9:30 = 9:34
- ETC。
答案1
我怀疑这是否是最好的方法,但这里有一个解决方案。显然,它不是很完善,因为我不确定您将如何输入时间增量,或者数据是否只是一个单元格中的一个段落,但它应该可以帮您完成大部分工作。
它将活动单元格值拆分成一个数组,寻找“[”,然后根据小时步长向上调整前 2 个字符,根据分钟步长向上调整字符 4 和 5,然后将它们全部重新组合在一起。
这也适用于 activecell,但不是一个很好的编码实践。
Sub update_times()
Dim sParts() As String
Dim input_text As String
Dim output_text As String
Dim split_on As String
Dim hours_add As Integer
Dim minutes_add As Integer
Dim hours_final As Integer
Dim minutes_final As Integer
split_on = "["
hours_add = 9
minutes_add = 30
input_text = ActiveCell.Value
sParts = Split(input_text, split_on)
output_text = sParts(0)
For i = 1 To UBound(sParts)
hours_final = Left(sParts(i), 2) + hours_add
minutes_final = Mid(sParts(i), 4, 2) + minutes_add
'checks to wrap data
If minutes_final > 59 Then
hours_final = hours_final + 1
minutes_final = minutes_final - 60
End If
If hours_final > 23 Then
hours_final = hours_final - 24
End If
'put the part back together with the new hour and minutes
sParts(i) = "[" & Format(hours_final, "00") & ":" & Format(minutes_final, "00") & Right(sParts(i), Len(sParts(i)) - 5)
'add the part to the final string
output_text = output_text & sParts(i)
Next
ActiveCell.Value = output_text
End Sub