22 Kasım 2015 Pazar

PHP ile Altyazı Dosyalarını Düzenlemek ve Senkron Kaymasını Çözmek

Altyazılı film izlerken en çok can sıkan meselelerden birisi altyazıda senkron kayması olması ve altyazıların konuşmalardan farklı zamanlarda gelmesidir. Bu sorun video oynatıcı üzerinden ayarlama yapılarak giderilebilir ancak bazen bu mümkün olmaz...

Yine böyle bir durumda altyazı ve konuşmalar arasındaki farkın yaklaşık 30 sn olduğu bir durumda altyazı dosyasını düzenleyerek tüm zamanları 30 sn kaydırmayı ve senkronu sağlamayı düşündüm. Elimdeki altyazı dosyası aşağıdaki formattaydı...

1
00:01:49,067 --> 00:01:52,064
Ne zaman karşılıklı yarışacağız?

2
00:01:54,562 --> 00:01:57,259
Gunma'daki tüm sürücüler
yenildikten sonra,
 
Bu dosyayı okuyup zamanların üzerine 30sn ekleyecek ve çıktıyı ekrana basacak bir PHP betiği yazmaya karar verdim ve apartopar aşağıdaki kodları yazdım ve yeni altyazı dosyası oluşturdum... :)

 <?php
$file="x.srt"; #Okunacak altyazı dosyası

$f=file_get_contents($file);
$f2=(explode("\n", $f));

foreach($f2 as $l){
    $l = trim($l);
    if(preg_match("/^[0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3} --> [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3}/",$l)){
            list($t1,$tmp,$t2)=explode(" ",$l);
            list($saat1,$kuyruk1)=explode(",",$t1);
            list($saat2,$kuyruk2)=explode(",",$t2);
            $q = strtotime("$saat1")+30; #30 sn ekleyelim...
            $ysaat = date('H:i:s', $q) .",$kuyruk1";
            $q2 = strtotime("$saat2")+30; #30 sn ekleyelim...
            $ysaat2 = date('H:i:s', $q2) .",$kuyruk2";
            echo "$ysaat --> $ysaat2\n";
    }else{
        echo "$l\n";   
    }
}
?>

Daha sonra bu betiği altyazı.php adıyla kayıt edip aşağıdaki gibi çalıştırarak yeni altyazı dosyamı elde ettim...

harun@gondor ~ $ php -f altyazi.php > yeni.srt

Yeni dosyamın içeriği aşağıdaki gibi oldu ve senkron sorunum ortadan kalktı... :)

1
00:02:21,067 --> 00:02:24,064
Ne zaman karşılıklı yarışacağız?

2
00:02:26,562 --> 00:02:29,259
Gunma'daki tüm sürücüler
yenildikten sonra,

Bunu yapmanın muhakkak daha iyi bir yolu vardır. Ancak ben aklıma ilk gelen hızlı ve kirli çözümle film keyfine gölge düşürecek bir altyazı sorununu çözmüş oldum... Daha sonra yine lazım olduğunda bulabileyim diye kodları buraya not alıyorum... :)



1 yorum:

  1. Selam , faydalı bir makale,ayrıca çok sık karşılaşılan bir probleme yaratıcı bir çözüm tebrikler :)

    YanıtlaSil