我有一些文件在其内容中有时间戳,这不够准确。
所以,我在想,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");
}