Вот решение на 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
Надеюсь это поможет :)
person
Darragh Enright
schedule
07.09.2015