我有一些文件在其内容中有时间戳,这些文件不够准确。
所以,我在想,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:06,466 - > 00:00:09,409 Text2
3 00:00:11,448 - > 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:06,737 - > 00:01:08,216 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;
}
答案 0 :(得分: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");
}