我搜索了,没有发现类似的东西。
我要实现的目标是创建一个简单的PHP / js / jq脚本,该脚本可以从.srt文件中增加或减少几秒钟。我不确定正则表达式是我应该实现的东西还是其他东西。
用户将上载/复制srt文件的文本,然后将秒数添加到他们想要从SRT添加或减去秒的输入框中。
例如,如果用户向以下srt文件添加+4秒:
0
00:00:04,594 --> 00:00:10,594
this is a subtitle
1
00:00:40,640 --> 00:00:46,942
this is another subtitle
2
00:02:05,592 --> 00:02:08,694
this is one more subtitle
它看起来应该像这样:
0
00:00:08,594 --> 00:00:14,594
this is a subtitle
1
00:00:44,640 --> 00:00:50,942
this is another subtitle
2
00:02:09,592 --> 00:02:12,694
this is one more subtitle
最佳答案
这是您指定的语言之一的PHP解决方案。
如果您可以将要应用的时间偏移表示为string
,则可以使用DateTime
方法 DateTime::modify()
, DateTime::createFromFormat()
和 preg_replace_callback()
来实现所需的操作。
SubRip Wikipedia entry将时间码格式指定为:
因此,我们可以编写一个正则表达式来捕获此信息;例如:/(\d+:\d+:\d+,\d+)/
-尽管您可能希望对此进行优化。
考虑到将.srt文件读入字符串$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
希望这可以帮助 :)