4

我已经搜索并没有发现类似的东西。
我想要实现的是创建一个简单的 PHP/js/jq 脚本,该脚本可以从 .srt 文件中增加或减少秒数。我不确定正则表达式是否是我应该使用的东西来实现它或其他东西。
用户将上传/复制 srt 文件的文本,然后将秒数添加到他们想要从 SRT 中添加或减去秒的输入框中。

例如,如果用户将 +4 秒添加到以下 srt 文件:

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
4

2 回答 2

1

这是 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 seconds1 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

希望这可以帮助 :)

于 2015-09-07T22:20:09.100 回答
0

如果您想在您的网站上支持更多格式,您可以使用库:

$user_subtitles = $_POST['user_subtitles'];

$subtitles = Subtitles::load($user_subtitles, 'srt'); // you can load different formats of subtitles
$subtitles->time(4); // +4 seconds

echo $subtitles->content();

https://github.com/mantas-done/subtitles

于 2017-01-15T17:32:03.853 回答