Tem
25
2011

Dinamik olarak thumbnail oluşturma I.Adım

Merhaba arkadaşlar; Bu yazımızda uzaktaki bir sunucuya video yüklemeyi ve yüklediğimiz bu video’dan ffmpeg aracılığı ile nasıl dinamik olarak thumbnail (küçük resim) oluştururuz bunu konuşacağız. Bir local web sunucumuz olduğunu varsayarak, öncelikle ffmpeg nasıl kurulur? buna değinelim.

Windows sunucumuz için ;

http://ffmpeg.zeranoe.com/builds/ adresinden , 32-bit Builds (static) veya 64-bit Builds(static) başlıkları altından en son sürümünü indirebilirsiniz. Sıkıştırılmış dosyayı indirdikten sonra, \bin dizininden ffmpeg dosyasını, sunucumuzun dizinine ekliyoruz. ( ör : wamp server için C:\wamp\www )

Linux sunucumuz için ( ör : Ubuntu ) ;

Uçbirim (Linux kabuğu) ekranını açtıktan sonra,

  • sudo apt-get install ffmpeg ”    tümcesini icra etmek yeterli.

Şimdi ise bir video’dan PHP dili aracılığı ile nasıl thumbnail oluşturabiliriz ona bakalım;

Elimizde test.flv adında sunucumuzun kök dizininde bir video olduğunu varsayalım. İlave olarak bu videonun herhangi bir anından rastgele snapshot (anlık resim) çekelim.

if (preg_match(‘/Duration: ((\d+):(\d+):(\d+))/’, `$cmd`, $time))
{
$toplamSure= ($time[2] * 3600) + ($time[3] * 60) + $time[4];
$birAn= rand(1, ($toplamSure- 1));
}

$cmd = “ffmpeg -i test.flv”;

  • ffmpeg programına -i (input) parametresiyle birlikte video dosyamızı tanımlıyoruz.

`$cmd`

  • Ters tırnak ile $cmd içeriğini execute ediyoruz. ( işletiyoruz ) Tabi bunun sonucunda bize kocaman uzunlukta bir String ifade dönüyor. Bu dönen değerlerin içinde tanımladığımız video ile alakalı envay çeşit bilgi var. Bize ise şu anda sadece video nun süre bakımından uzunluğu gerekli. Hani bunu bir fonksiyon ile kolayca almakta mümkün gözükmüyor. Bu yüzden, Php dilindeki Regex ( Regular expression) yani düzenli ifadeler’ den yararlanacağız.

 

  • Burada Duration bölümünde videomuzun süresi 7 saniye 96 salise olarak gözüküyor.
  • preg_match() fonksiyonu iki ifadeyi regex’e tabi tutmakta ve uyuşan sonuçları, 3. parametreye yani burada $time değişkenine bir dizi olarak eklemektedir. Uyuşma varsa fonksiyondan true değeri dönmektedir.
  •  Kısaca /Duration: ((\d+):(\d+):(\d+))/ ifademizi açıklayalım;
    • /………/ arası bir bloğu temsil ediyor.
    • Açılıp kapatılan herbir parantez de ayrı bir bloğu temsil ediyor
    • \d+ ifadesi ise en azından bir decimal (ondalık tamsayı) karakter ve dahasını kabul ediyor.
    • ör : $time dizisini yazdırdığımızda ;
    • print_r($time); elde edeceğimiz sonuç şöyle olacak;
    • Array ( [0] => Duration: 00:00:07 [1] => 00:00:07 [2] => 00 [3] => 00 [4] => 07 )
    • Burada dikkat etmemiz gereken şey, ayraç olan (..) ve /../ arasındaki her ifade, ayrı ayrı bir dizi elemanını temsil ediyor, ve dış ayraçtan iç ayraca doğru diziye ekleniyor.

$cmd=“ffmpeg -i test.flv -deinterlace -an -ss $birAn -t 00:00:01 -y -vcodec mjpeg -f mjpeg -s 320×240 test.jpg “;
$return = `$cmd`;
echo  $return;

Şimdi ise elde ettiğimiz rastgele bir anın süre bilgisiyle, 320×240 boyutlarında bir imaj oluşturuyoruz.

Parametre özellikleri

-i (input)

-deinterlace ( kayma olmaması için )

-an ( ses yok )

-ss ( video üzerindeki herhangi bir nokta )

-t zz:yy:xx ( bulunan noktadan bu kadar ilerdeki an)

-vcodec ( video codec olarak mjpeg)

-f (mjpeg codec’ i kullanması zorlanıyor )

-s ( boyut )

-y ( üzerine yaz )

Yorum yapabilirsiniz..

Yazar : Rahman Usta

En son haber ve ücretsiz eğitimlere ulaşmak için üye olabilirsiniz