使用PHP向时间戳添加时间


Add time to timestamps with PHP?

我有一些文件在其内容中有时间戳,这不够准确。

所以,我在想,PHP可以将非固定数量的时间戳转换为准确的时间戳,而不触及其他内容。

例如,将

转换为

1 00:00:00 . 232 -> 00:00:05 . 665 Text1

2 00:00:05 . 966 -> 00:00:08 . 909 Text2

3 00:00:10 . 948 -> 00:00:14 . 550 Text3

4 00:00:23,086 -> 00:00:25,817 Text4

5 00:00:34 . 033 -> 00:00:35 . 847 Text5

6 00:01:06 . 237 -> 00:01:07 . 716 Text6

1 00:00:00,732 -> 00:00:06,165 Text1

2 00:00:6 . 466 -> 00:00:9 . 409 Text2

3 00:00:11 . 1448 -> 00:00:15 . 050 Text3

4 00:00:23,586 -> 00:00:26,317 Text4

5 00:00:34 . 533 -> 00:00:36 . 347 Text5

6 00:01:67 . 37 -> 00:01:81 . 16 Text6

在这种情况下,为每个时间戳增加0.5秒。我知道有可能,但怎么做呢?

$amount = $_POST['amount'];
$content = $_POST['text'];
$timestamp = ?
$newtime = $timestamp.$amount
$replacetime = str_replace($timestamp,$newtime,$content);
foreach(what to put here){
$replacetime;
}

看来你想把时间移到副标题上。虽然它可以由视频播放器完成,但你仍然可以在PHP中完成。

首先读取文件。

$c = file_get_contents("...file.srt");

提取内容

preg_match_all("|('d+)['r'n]+(['d,:]+) --> (['d,:]+)['r'n]+(.*)|", $c, $m);

现在为每次

增加0.5
$len = count($m[1]);
for($i=0;$i<$len; $i++){
    list($st, $sm)=explode(",", $m[2][$i]); // start time and milisecond
    // add 0.5 sec
    $sm+=500;
    if($sm>1000){
        $di = new DateInterval("P0000-00-00T$st");
        $di->add("P1S");
        $sm = $sm%1000;
        $st = $di->format("%H:%i:%s");
    }
    // store it back
    $m[2][$i] = "$st,$sm";
}

和结束时间一样。您也可以在同一个循环中执行此操作。

之后,把它放回原始文件。先测试其他文件

for($i=0;$i<$len; $i++){
    fprintf($fh, "$m[1][$i]'n");
    fprintf($fh, "$m[2][$i] --> $m[3][$i]'n");
    fprintf($fh, "$m[3][$i]'n'n");
}