c++ - 如何只修改时间码而不修改文本文件中的其他数字或字母?

标签 c++ file-io subtitle

我正在制作一个程序来加快和减慢部分视频的速度,我想支持修改字幕时间以匹配。如何只搜索文本文件中的时间码并修改它们?

这是用于 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>

唯一剩下的就是如何只接受时间码,然后用新的时间码替换它们? 不知道从这里去哪里。最好避免不必要地循环遍历文本文件,因为会有很多时间码要更改。

最佳答案

鉴于它是文本格式,匹配(和替换)文件中时间戳格式的最有效方法是使用正则表达式:https://en.cppreference.com/w/cpp/regex

你喜欢这样的算法:你从你的源文件中逐行读取,对于 RE 匹配的每个读取行,您将其替换为新的时间戳(即创建一个新行)并输出到一个新文件(或一个缓冲区,稍后可以将其提交到源文件中 - 处理完成后) .其他行(RE 不匹配的地方)你原封不动地输出,因为它们被读取了。

关于c++ - 如何只修改时间码而不修改文本文件中的其他数字或字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55858810/

相关文章:

c++ - 使用 Boost Asio 设置帖子队列大小限制?

c++ - 如何链接一个使用其他库的静态 C 库

c++ - 使用 pow 评估指数时 NAN 但如果我迭代则正确答案?

audio - 使用语音框架iOS从音频文件生成字幕

带字幕的 Android 原生视频播放器

c++ - 如何提高疯子候机程序的效率

string - Python中的文件读取问题

javascript - 从 js 读取/写入 json 到服务器上的文件(不是服务器应用程序)

java - 如何在特定位置开始读取文件?

iphone - 是否可以在 iPhone 上播放视频并显示与其同步的字幕?