Autor | Zpráva | ||
---|---|---|---|
MaxDJs Profil |
#1 · Zasláno: 16. 8. 2011, 23:05:55
Zdravím,
bylo by možno mi poradit jak sestavit skript, který bude procházet .srt soubor a ke každému času přičte časový posun? Stačí poradit kostru a já skript sestavím. .srt soubor je v tomto formátu 1 00:00:07,517 --> 00:00:09,417 Existuje Misto, Díky za odpověď |
||
Majkl578 Profil |
#2 · Zasláno: 16. 8. 2011, 23:13:13
1. načíst soubor přes file_get_contents
2. pomocí preg_replace_callback postupně najít každý výskyt času a v callbacku upravit (přičíst čas, milisekundy to trochu komplikují) 3. uložit pomocí file_put_contents |
||
Adrifinel Profil |
#3 · Zasláno: 16. 8. 2011, 23:15:51
Agiesub je program na tvorbu titulku, můžeš si pomocí něho vyspravit časování. Jinak být tebou tak bych naplánovala procházejí i ass souboru.
|
||
Alphard Profil |
#4 · Zasláno: 16. 8. 2011, 23:16:15
Použijte jak chcete, za nic neručím.
<style type="text/css"> td { padding: 3px 10px; } </style> <?php $filenameIn = 'name.srt'; $filenameOut = 'name.srt'; $start = '00:41:00.000'; $shift = -1.0; $in = file($filenameIn); $st = array(); $i = 0; $time = false; $last = ''; while ($line = array_shift($in)) { $line = trim($line); if (is_numeric($line) && empty($last)) { $i++; $time = true; $last = $line; continue; } $last = $line; if ($time) { $e = explode(' ', $line); $st[$i]['timeStart'] = timeToFloat($e[0]); $st[$i]['timeEnd'] = timeToFloat($e[2]); $time = false; continue; } if (!empty($line)) { $st[$i]['text'][] = $line; } } echo "<table>\n"; foreach ($st as $key => $line) { $s = $line['timeStart'] >= timeToFloat($start) ? $shift : 0; echo "<tr><td>$key</td>"; echo "<td>".floatToTime($line['timeStart']); echo " - ".floatToTime($line['timeEnd'])."</td>"; echo "<td>".floatToTime($line['timeStart']+$s); echo " - ".floatToTime($line['timeEnd']+$s)."</td><td>"; foreach ($line['text'] as $t) { echo $t, "<br>"; } echo "</td></tr>\n"; } echo "</table>\n"; $out = ''; foreach ($st as $key => $line) { $s = $line['timeStart'] >= timeToFloat($start) ? $shift : 0; $out .= $key.PHP_EOL; $out .= floatToTime($line['timeStart']+$s); $out .= ' --> '; $out .= floatToTime($line['timeEnd']+$s).PHP_EOL; foreach ($line['text'] as $t) { $out .= $t.PHP_EOL; } $out .= PHP_EOL; } file_put_contents($filenameOut, $out); function timeToFloat($time) { $e = explode(':', $time); $e[2] = strtr($e[2], ',', '.'); $f = 3600*$e[0] + 60*$e[1] + (float) $e[2]; return $f; } function floatToTime($f) { $h = floor($f/3600); $f -= 3600*$h; $m = floor($f/60); $f -= 60*$m; $s = $f; $h = str_pad($h, 2, '0', STR_PAD_LEFT); $m = str_pad($m, 2, '0', STR_PAD_LEFT); $s = str_pad(number_format($s, 3, ',', ''), 6, '0', STR_PAD_LEFT); return "$h:$m:$s"; } |
||
Časová prodleva: 13 let
|
0