Tällä skriptillä voit siirtää tekstityksen kaikkia aikoja eteen/taaksepäin tietyn määrän sekunteja, jos esim. latasit subtitlet, mutta siinä subtitlet alkaa väärästä kohdasta, jos on vaikka jotenkin erilainen alusta. Koodasin alunperin omiin tarpeisiin. SRT-subtitleille.
<?php // Monta sekuntia siirretään ja mihin suuntaan (esimerkissä 3 sekuntia taaksepäin) $amount=-3; // Subtitletiedosto jonka ajat muutetaan $in="joo.jee"; // Outputtitiedosto $out="jee.joo"; $f=fopen($in, "r"); $out=fopen($out, "w"); // Niin kauan kunnes tiedosto loppuu while(!feof($f)) { $row=fgets($f); // Jos se on tekstitysrivi if(ereg(" --> ", $row) && ereg(":", $row) && ereg(",", $row) && strlen(trim($row)) == 30) { // Paloitellaan kahteen aikaan $rivi=explode("-->", $row); // Erotetaan molemmista osa pilkun mukaan $vasen=explode(",", $rivi[0]); $oikea=explode(",", $rivi[1]); // Pilkotaan pilkun vasemmanpuolinen osa tunteihin, minuutteihin ja sekunteihin $vasenp=explode(":", $vasen[0]); $oikeap=explode(":", $oikea[0]); // Tehdään timestampit $vasenstamp=mktime($vasenp[0], $vasenp[1], $vasenp[2]); $oikeastamp=mktime($oikeap[0], $oikeap[1], $oikeap[2]); // Muutetaan timestamppeja $amountin verran $vasenstamp=$vasenstamp+$amount; $oikeastamp=$oikeastamp+$amount; // Tehdään uusi rivi muutetuilla asetuksilla, jos mikään aika ei pyörähdä ympäri, muuten jätetään alkuperäinen rivi if($vasenstamp >= mktime(0,0,0) && $oikeastamp > mktime(0,0,0)) { $row=date("H:i:s", $vasenstamp) . "," . $vasen[1] . " --> " . date("H:i:s", $oikeastamp) . "," . $oikea[1]; } } fwrite($out, $row); } fclose($out); fclose($f); ?>
Heh, onpas hyvä idea. Tulee kyllä käyttöön.
Koodista sen verran, että itse heittäisin noi explodet suohon ja hoitaisin homman säännöllisillä lausekkeilla:
<?php // Jos se on tekstitysrivi if(ereg("^([0-9]{2}):([0-9]{2}):([0-9]{2}),([0-9]{3}) --> ([0-9]{2}):([0-9]{2}):([0-9]{2}),([0-9]{3})",$row, $re)){ //Tehdään timestampit $vasenstamp=mktime($re[1], $re[2], $re[3])+$amount; $oikeastamp=mktime($re[5], $re[6], $re[7])+$amount; : : : $row=date("H:i:s", $vasenstamp) . "," . $re[4] . " --> " . date("H:i:s", $oikeastamp) . "," . $re[8] . "\n"; } ?>
En tiedä kumpi on optimaalisempi nopeuden kannalta ja sillähän ei ole tämänkaltaisessa skriptissä merkitystä, mutta ainakin lyhyempi tuo on ja koodarithan ovat tunnetusti laiskoja... :)
Joo muttakun olen niin laiska oppimaan noita regexpejä..
regexpit kannattaa opetella, tekstin käsittelyyn ei kyl parempaa keinoa löydy
Aihe on jo aika vanha, joten et voi enää vastata siihen.