我正在制作一个程序来加快和减慢部分视频的速度,并且我希望支持修改字幕的匹配时间。如何只在文本文件中搜索时间码并进行修改?
这是srt字幕文件的。时间码的格式为HH.MM.SS,mmm
。这些文件包含其他数字(例如,十六进制颜色),因此我只想搜索特定时间码格式的数字。
我已经具有一个以秒为单位的输入时间并以秒为单位的输出时间的功能。在“时间码”格式和以秒为单位的时间之间进行转换也应该相当容易。
这是文本文件的示例:
1
00:00:00,000 --> 00:00:09,138
<font color="#CCCCCC">alexxa</font><font color="#E5E5E5"> who's your favorite president</font>
2
00:00:04,759 --> 00:00:12,889
<font color="#E5E5E5">George Washington</font><font color="#CCCCCC"> has my vote Alexa</font>
剩下的唯一事情是如何仅接收时间码,然后将其替换为新的时间码? 不知道从这里去哪里。避免不必要地循环遍历文本文件也将是一件好事,因为会有很多时间代码需要更改。
答案 0 :(得分:1)
鉴于它是文本格式,所以匹配(并替换)文件中时间戳格式的最有效方法是使用正则表达式:https://en.cppreference.com/w/cpp/regex
您想要这样的算法:您从源文件中逐行读取 RE匹配的每个读取行,都用新的时间戳替换(即制作新行),并输出到新文件(或缓冲区,稍后可以在处理完成后提交到源文件中) 。读取时,其他行(RE不匹配的行)将完整输出。