Я искал и не нашел ничего подобного.
Я пытаюсь создать простой скрипт 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
Вот решение в PHP, которое является одним из указанных вами языков.
Если вы можете представить временной сдвиг, который вы хотите применить в качестве string
вы можете использовать DateTime
методы DateTime::modify()
, DateTime::createFromFormat()
а также preg_replace_callback()
достичь того, что вы хотите сделать.
SubRip Википедия определяет формат временного кода как:
часы: минуты: секунды, миллисекунды
Таким образом, мы можем написать регулярное выражение, чтобы захватить это; например: /(\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
Надеюсь это поможет 🙂
Если вы хотите поддерживать больше форматов на вашем сайте, вы можете использовать библиотеку:
$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();