2

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

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

例如,转换这个

1 00:00:00,232 --> 00:00:05,665 文本 1

2 00:00:05,966 --> 00:00:08,909 文本 2

3 00:00:10,948 --> 00:00:14,550 文本 3

4 00:00:23,086 --> 00:00:25,817 文本 4

5 00:00:34,033 --> 00:00:35,847 文本 5

6 00:01:06,237 --> 00:01:07,716 文本 6

对此

1 00:00:00,732 --> 00:00:06,165 文本 1

2 00:00:06,466 --> 00:00:09,409 文本 2

3 00:00:11,448 --> 00:00:15,050 文本 3

4 00:00:23,586 --> 00:00:26,317 文本 4

5 00:00:34,533 --> 00:00:36,347 文本 5

6 00:01:06,737 --> 00:01:08,216 文本 6

因此,在这种情况下,为每个时间戳添加 0.5 秒。我知道这是可能的,但如何?

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

1 回答 1

0

看来您想将时间转移到字幕上。虽然它可以由视频播放器完成,但您仍然可以在 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");
}
于 2012-12-26T19:06:02.893 回答