这是 PHP 中的一个解决方案,它是您指定的语言之一。
如果您可以将要应用的时间偏移表示为string
您可以使用DateTime
方法DateTime::modify()
,DateTime::createFromFormat()
并preg_replace_callback()
实现您想要做的事情。
SubRip Wikipedia 条目将时间码格式指定为:
时:分:秒,毫秒
所以我们可以写一个正则表达式来捕捉它;例如:/(\d+:\d+:\d+,\d+)/
- 尽管您可能希望对此进行改进。
假设您的 .srt 文件被读入 string $srt
,并且您希望将时间增加 5 秒:
<?php
$srt = <<<EOL
0
00:00:04,594 --> 00:00:10,594 this is a subtitle
1
00:00:40,640 --> 00:00:46,942 this is a subtitle
2
00:02:05,592 --> 00:02:08,694 this is a subtitle
EOL;
$regex = '/(\d+:\d+:\d+,\d+)/';
$offset = '+5 seconds';
$result = preg_replace_callback($regex, function($match) use ($offset) {
$dt = DateTime::createFromFormat('H:i:s,u', $match[0]);
$dt->modify($offset);
return $dt->format('H:i:s,u');
}, $srt);
echo $result;
在每个 上$match
,用于DateTime::createFromFormat()
将匹配的时间码转换为一个DateTime
对象,然后您可以将其修改并重新格式化为表示偏移时间的字符串。
您可以使用各种偏移值,DateTime::modify()
包括但不限于:+1 minute
、-30 seconds
等1 hour 2 minutes
。阅读链接的文档以获取更多详细信息。
这产生:
0
00:00:09,594000 --> 00:00:15,594000 this is a subtitle
1
00:00:45,640000 --> 00:00:51,942000 this is a subtitle
2
00:02:10,592000 --> 00:02:13,694000 this is a subtitle
希望这可以帮助 :)