Sayfalar

19 Şubat 2007 Pazartesi

ffmpeg Nasıl Kullanılır?

ffmpeg, bir çok görüntü türü arasında dönüşüm yapabilme imkanı sağlayan, açık kaynak kodlu bir uygulama (veya kütüphane) olarak tanımlanabilir.

Görüntü türleri arasında dönüşüm yapabilmeye örnek olarak, YouTube ve türevleri sitelerden indirilen .flv dosyalarının dönüştürülmesini ele alacağım.

Bilgisayarımda yer alan alelade bir flv dosyasının "/home/Chriseba/" dizini altında olduğunu varsayarak, konsoldan bu dizine geçiş yapıyorum (cd /home/Chriseba demem gerekmiyor sanırım). Söz konusu flv dosyasının adının "bill_hayes-1.flv" olduğunu varsayalım, o zaman konsoldan şu komutu vereceğim.
$ ffmpeg -i bill_hayes-1.flv bill_hayes-1.avi

Bu komutu verdikten sonra, aşağıdaki gibi bir çıktı alırsınız ve çevirme işlemine başlar;

$ ffmpeg -i bill_hayes-1.flv bill_hayes-1.avi
FFmpeg version SVN-r7868, Copyright (c) 2000-2006 Fabrice Bellard, et al.
Compiler did not align stack variables. Libavcodec has been miscompiled
and may be very slow or crash. This is not a bug in libavcodec,
but in the compiler. Do not report crashes to FFmpeg developers.
Seems stream 0 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Input #0, flv, from 'bill_hayes-1.flv':
Duration: 00:07:46.4, start: 0.000000, bitrate: 80 kb/s
Stream #0.0: Video: flv, yuv420p, 320x240, 25.00 fps(r)
Stream #0.1: Audio: mp3, 22050 Hz, mono, 80 kb/s
Output #0, avi, to 'bill_hayes-1.avi':
Stream #0.0: Video: mpeg4, yuv420p, 320x240, q=2-31, 200 kb/s, 25.00 fps(c)
Stream #0.1: Audio: mp2, 22050 Hz, mono, 64 kb/s
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame=11661 q=18.2 Lsize= 15775kB time=466.4 bitrate= 277.1kbits/s
video:11519kB audio:3644kB global headers:0kB muxing overhead 4.033155%
Şimdi yukarıdaki çıktıya bakıp, neler olduğuna bir göz atalım. Input (kaynak dosya) ve Output (hedef dosya) arasında bazı farklılıklar var. Mesela kaynak dosyada ses kalitesi 80kb/s iken bu değer hedef dosyada 64kb/s oluyor. Demek ki bazı değerlerin aynı kalması için bir takım komutları bizim vermemiz gerekiyor.

Bu dosyayı çevirmeye başlamadan önce
$ ffmpeg -i bill_hayes-1.flv
komutu ile kaynak dosyanın değerlerini görebiliriz ve buna göre komutlar verebiliriz.
$ ffmpeg -i bill_hayes-1.flv -f avi -vcodec mpeg4 -b 800k -acodec mp3 -ab 128 bill_hayes-1.avi
Buradaki komutları teker teker açıklayalım; -vcodec ile hangi vodeo codec'ini kullanacağınızı, -b ile video bitrate değerini, -ac ile ses codec'ini ve -ab ile ses bitrate değerini belirlersiniz.

Ya da bir DVD'yi VCD kalitesine indirmek için (formatı *.avi veya *.dat olabilir) aşağıdaki gibi daha basit bir komut kullanabilirsiniz:
$ ffmpeg -i VTS_01_1.VOB -target vcd VTS_01_1.avi
Burada -type parametresinin ardından vcd, svcd, dvd ve bir çok tanım verilebilir.

Eğer çevireceğiniz dosyanın adında boşluk varsa (örneğin: benim odam.wmv), o dosya adını tırnak işareti kullanarak girmelisiniz:
$ ffmpeg -i "benim odam.wmv" "benim odam.avi"
Bu konu ile ilgili daha detaylı belgelere /usr/share/doc/ffmpeg/ dizininden ulaşabilirsiniz.

ffmpeg ile şu ana kadar .wmv (Windows Media Video), .mov (QuickTime), .vob (DVD), (VCD) formatlarından DivX formatına başarılı bir şekilde video çevirisi yapabildim ve tam tersi de yapılabiliyor. İyi bir kalitede olması için -özellikle DVD'den çevirirken- kaynak dosyanın değerlerine dikkat etmekte yarar var.

Kolay gelsin...