Perşembe, Ocak 25, 2007

Çokluortam Operasyonları: DVD Sıkıştırma

Bir dizi yazı ile Linux'ta çokluortam ayırma (demux), ses/görüntü sıkıştırma ve birleştirme (mux ) işlemlerini, özelde DVD örneği üzerinde anlatmaya çalışacağım. Bu bilgiler TV kartından, ses/görüntü yakalama kartından, mikrofondan gelen dev veri "stream"ini, ve örneğin dijital kameranızda çektiğiniz filmleri sıkıştırmak için kullanılabilir.

Yazılar ben yeni şeyler öğrendikçe veya yanlışlarımı farkettikçe güncellenecektir.

Dizin
  1. Terimler ve genel bilgi
  2. Strateji ve verilmesi gereken kararlar
  3. Ses sıkıştırma
  4. Görüntü sıkıştırma
  5. Altyazılar
  6. Taşıyıcı format, birleştirme (Muxing)
  7. Ekler
Son güncelleme: 29.01.2007

1. Terimler ve genel bilgi

  • Ayırma (demux): Bir çoklu ortam dosyası bazı durumlarda birden fazla ses ve görüntü veri dizesinden (stream) oluşur. Bu akışlardan herhangi birini taşıyıcıdan çıkarma işlemine ayırma denir.

  • Birleştirme (mux): Ses, görüntü, altyazı gibi çeşitli çokluortam verisinin bir taşıcı format ile birleştirilerek tek bir dosya haline getirilmesi birleştirme olarak adlandırılır.

  • Bitrate: Bir veri akışının saniyede kullandığı bit miktarı. Bitrate'in birimi Kb/s'dir yani Kilobit/saniye. 128 Kb bitrate'i olan bir mp3 dosyası, içerdiğin sesin her saniyesi için 128/8= 16 KB veri kullanır. Bir akışın süresi, sabit veya ortalama bitrate'i ve taşıyıcı overhead'i biliniyor ise ortaya çıkacak dosyanın büyüklüğü rahatlıkla hesaplanabilir:

    Dosya Boyutu = [Bitrate * Süre + diğer overhead (ör. ses)] * Taşıyıcı overhead oranı

    Taşıyıcı overhead oranı Avi için azami 1.05 alınabilir (%5 overhead). Matruşka/MP4 için bu oran daha düşük, OGM için daha yüksektir.

  • Interleaving: Bir çoklu-ortam dosyasında ses ve görüntü "frame"leri karıştırılarak depolanmış ise bu interleaved bir dosyadır. Ses ve görüntü birbirinden tamamen ayrı bloklar şeklinde depolanmış ise bu non-interleaved bir dosyadır. Yani:
    Interleaved: [DVAVAAVVAAVAVVAA]
    Non-interleaved: [DVVVVVVVVVAAAA]
    Non-interleaved dosyalar özellikle CD veya ağ üzerinden oynatılırken oynatma performansı ciddi olarak düşer. Çoklu-ortam dosyasının "interleaved" olanı makbuldür.

  • Kb: SI birimi, Kilo bit. 1 Kb = 1000 bit . Kilo öneki daima büyük harfle yazılır.

  • KB: SI birimi, Kilo bayt, 1 KB = 1000 Bayt.

  • KiB: İkili sistem birimi, Kibi bayt, 1KiB = 1024 Bayt. Kibi ve Kilo ayrımı (aynı şekilde Mebi ve Mega..) oldukça kafa karıştırıcı olabiliyor ve bitrate hesaplarını hangi birimde yaptığınıza dikkat etmezseniz sıkıştırma sonucunda beklediğinizden oldukça farklı boyutta dosyalar elde edebilirsiniz.

    Linux'ta verilen dosya boyutları genellikle ikili sistem'de hesaplanıp olup SI birimleri ile yazılır. Yani örneğin ls -h komutu, Konqueror, MC dosya büyüklerini KiB, MiB, GiB cinsinden hesaplar ancak birimini hatalı olarak KB, MB, GB olarak söyler.

    İki birim sistemi arasındaki farka önemli bir örnek verelim; sıradan 80 dakikalık bir CD-R'ın kapasitesi 736.966.656 bayt = 702 MiB = 737 MB kadardır. Sabit disklerin pazarlandığı kapasite ile kullanılabilen kapasite arasındaki farkın önemli kısmı yine birim farkından kaynaklanır: Üreticiler kapasiteyi GB birimi ile verir, öte yandan işletim sistemleri kapasiteyi genelde GiB birimi hesapladıkları için kullanılır kapasite üreticinin söylediğinden düşük görünür.

    Ki kibi, Mi mebi, Gi ise gibi olarak adlandırılır.

    Veri birimleri hakkında daha detaylı bilgi burada [en.wiki].

  • Metadata: Veri hakkında veri. MP3 dosyasının ID etiketleri metadata içerir, çünkü bu etiket dosyadaki ses hakkında bilgi barındırır.

  • Overhead: Bu kelimenin Türkçe karşılığını bulamadım. Overhead, bir dosyada verinin depolanma mantığı için kullanılan veri miktarına karşılık gelir. Örneğin görüntü + ses bir Avi dosyasına koyulduğunda azami 5%'lik bir overhead oluşur, yani avi dosyası ses ve görüntü dosyalarının toplam büyüklüğünden 5% daha büyüktür. Bu veri Avi formatının kendi verisi için (örneğin içerik dizini) ve metadata için kullanılır. Overhead'i küçük olan taşıyıcı makbuldür, çünkü taşıyıcıdan tasarruf edilen bitler görüntü veya ses için kullanılabilir.

    Çokluortam dosyaları söz konusu olduğunda ve görüntü için kullanılabilecek azami bitrate hesaplanırken taşıyıcıya girecek olan ses verisi miktarı da overhead olarak adlandırılır.

  • PSNR, SSIM: Görüntü sıkıştırma işleminin ne kaliteyle yapıldığına dair objektif ve sayısal ölçütler. Birimleri genellikle dB'dir (desibel). x264 programı, ilgili seçenekler kapatılmadığı sürece görüntü sıkıştırma işlemininin sonunda üretilen görüntünün PSNR ve SSIM değerlerini rapor eder.

  • Sample rate: Örnekleme hızı. Bir ses dosyası sayısal ortama aktarılırken sesin genliği (amplitude) her saniye sample rate kez ölçülür. 44 KHz'lik ses dosyası, genliği saniyede 44.000 kere ölçülmüş ve depolanmış ses sinyalidir. (KHz = 1.000 Hz)

  • Taşıyıcı format: Avi, mpg, mkv, asx, mp4, ogg, ogm, mov, vob, divx, rm, rmvb ... bunların hepsi taşıyıcı (container) formattır. Taşıyıcı format içerdiği veriden bağımsızdır ve formata bakılarak içerdiği veri hakkında kesin birşey söylenemez. Bir avi dosyasında örneğin MJpeg, Xvid, DivX, Mp3, Wav/PCM, AC3.. verisi bulunabilir.
Son güncelleme: 29.01.2006

2. Strateji ve verilmesi gereken kararlar

DVD sıkıştırma zaman alan bir iş olduğu için öncelikle sıkıştırmalı mı sıkıştırmamalı mı da dahil bazı kararlar vermek gerekiyor:
  1. Genel Sorular
    1. Operasyonu ne amaçla yapıyorsunuz?
      Amacınız sadece DVD'nizi gelecekteki bir bozulmaya karşı yedeklemek ise donanım kaynaklarınıza göre iki seçeneğiniz var:
      1. DVD yazıcınız varsa:
        Bu durumda DVD'nizi sıkıştırmanıza gerek yok. DVD'nizdeki dosyaları doğrudan bilgisayarınıza aktarın ve boş bir DVD'ye yazın.
        Öte yandan eğer orijinal DVD'niz çift katmanlı ise çift katmanlı yazılabilir DVD'ler pahalı olduğu, ve bir sonraki maddedeki motivden ötürü sıkıştırmak istiyor olabilirsiniz.
      2. DVD yazıcınız yoksa
        Bu durumda DVD'nizi sadece CD-R'a yedeklemeniz gerekiyor. DVD'ler çok fazla veri içerdiği için fazla CD-R çıkacak ve bu durumda DVD'nizi sıkıştırmayı düşünebilirsiniz.
      Bunun dışında DVD'nizi elbette merak, sıkıştırma işlemini öğrenmek için de sıkıştırmak istiyor olabilirsiniz :)
    2. Üreteceğiniz veri ne büyüklükte olacak (veya kaç CD-R'a sığmalı)?
      DVD durumu için benim önerim sıkıştırma sonucu çıkacak verinin 2 CD-R'a sığacak kadar olması (2x699=1398 MiB). DVD yazıcınız varsa elbette bu kararda daha esnek olabilirsiniz.

      DVD dışında başka bir çokluortam stream'i sıkıştırıyorsanız üretilecek dosyanın boyutu değil kalitesi daha önemli olabilir.
    3. Eğer DVD'nizi sıkıştırmaya karar verdiyseniz, üretilen filmi DivX destekli DVD oynatıcınızda izleyebilmek istiyor musunuz?
      Bu durumda bazı modern sıkıştırma/format olanaklarından vazgeçmek zorunda kalabilirsiniz, sonuç ses/görüntü kalitesinde azalma anlamına gelecektir.
  2. Ses
    1. Sıkıştılmış filmde kaç ses izi (track) olacak?
      DVD'niz Türkçe ve örneğin İngilizce seslendirme içerebilir. Çıkan dosyaya bu izlerin sadece birini mi, birden fazlasını mı koyacaksınız? Bu karar görüntü bitrate'i hesaplarken ses dosyası overhead'i olarak önem kazanacak.
    2. Sesi sıkıştırmalı mı ya da doğrudan orijinal ses izini mi kullanmalı?
      Özellikle yeni çekilmiş DVD filmler AC3 formatında 6 kanal (Dolby Digital 5.1) ses içerir. Eğer ses izi için yeterince yeriniz varsa ve/veya tek ses izi kullanacaksanız DVD'nizdeki AC3 izini hedef dosyaya doğrudan koyabilirsiniz. AC3 ses izinin büyük bir overhead getireceğini vurgulamam gerekiyor.

      Ses kalitesinin -kişisel tercihlere de bağlı olarak- görüntü kalitesi kadar, hatta daha fazla önemli olduğunu unutmayın (görüntü beyinde "integratif", ses ise "differentiative" olarak işlenir).
    3. Hangi ses sıkıştırma formatını kullanmalı?
      Temelde dört seçeneğiniz var, her birinin kendine göre artıları ve eksileri var. Seçenekleri kabaca artan kaliteye göre sıralarsak:
      1. MP3 CBR (sabit bitrate):
        Avantaj: Filminizi DVD oynatıcınızda ve bilgisayarınızda izleyebilmek için en uygun formattır. AVI taşıyıcısı içine rahatlıkla koyulabilir.
        Dezavantaj: Sabit bitrate tüm ses izinin aynı kalitede olması anlamına gelir. Yani sıkıştırma esnasında sessiz/basit yerler için gerekenden fazla bit, karmaşık yerler için ise gerekenden az bit kullanılacaktır. Yüksek bitrate verirseniz (>160 Kb), karmaşık bölgeler de kaliteli olacaktır, ancak bu durumda çıkan ses dosyası büyük olacaktır.

        Ayrıca bazı eski filmler için ses izinin büyük kısmı için düşük bitrate yeterli olduğu halde (ör 96 Kb), bazı kısımları için yüksek bitrate gerekebilir. Böyle bir ses izini sabit 128 Kb ile sıkıştırırsanız görüntü için kullanılabilecek epeyce biti ziyan etmiş olursunuz.
      2. MP3 VBR (değişken bitrate):
        Avantaj: Kullanılan bit sayısı ses izinin karmaşıklığına göre dinamik olarak ayarlanır. Karmaşık olmayan kısımlarda tasarruf edilen bitler karmaşık bölgelerin daha iyi ifade edilmesi için kullanılabilir. Dosya boyutu ve kalitesi için CBR'den daha iyi sonuçlar verir. Lame çıkan dosyada kullanılan bitrate'i histogramladığı için Lame ile birlikte MP3-VBR kullanımını öneriyorum.
        Dezavantaj: VBR ses Avi taşıyıcısı içine konulursa Windows'ta izlerken sorun yaşanabilir. DVD oynatıcı cihazların MP3-VBR desteği hakkında bilgim yok. Ayrıca pratikte 6 kanal Dolby Digital ses izinin MP3'e sıkıştırılamayacağı söylenebilir. MP3-VBR değişken bitrate olsa da kullandığı bitrate'ler belli değerlerde kesiklidir (128-160-192...Kb gibi).
      3. Vorbis:
        Avantaj: Tabiatı gereği VBR'dir. Verilen kalite ayarlarına da bağlı olarak MP3'den biraz daha küçük dosyalar üretir ve biraz daha kaliteli sıkıştırma yapar. 6 kanal ses sıkıştırabilir. MP3-VBR'den farklı olarak kulandığı bitrateler daha az kesikli olduğu için genel olarak daha etkin sıkıştırma yaptığı söylenebilir.
        Dezavantaj: AVI taşıyıcısı içine konulamaz. 6 kanal ses sıkıştırabilir ancak kanallar arasındaki benzerliği dikkate almadığı için büyük ses dosyaları üretir.
      4. AAC:
        Avantaj: Vorbis ile hemen hemen aynı avantajları taşır ancak Vorbis ses kalitesinde AAC'den biraz daha iyidir. AAC'nin temel avantajı 6 kanal AC3 sesi Vorbis'ten daha etkin sıkıştırabilmesi.
        Dezavantaj: 6 kanal sıkıştırmada giriş kanalları ile çıkış kanallarının sırası karışabilir (aslında bu AAC'nin değil, daha genel bir sorun, 6 kanalın hangisi sola hangisi geriye ait, bu karışabiliyor). Bilgisayarınızda 6 kanallı ses çıkışı ve hoparlör sistemi yoksa bu özelliği kullanmanızı önermiyorum, çünkü sonucun doğruluğunu sınama şansınız olmaz.
  3. Görüntü:
    1. Görüntüyü hangi codec ile sıkıştırmalı?
      Temelde iki seçenek var:
      1. Xvid (MPEG-4 Bölüm 2/h263/ASP)
        Avantaj: ASP codecler içinde hemen tüm görüntü biçimleri için (ör. normal, aksiyon, anime) en kaliteli görüntüyü verir. Çıkacak görüntü verisinin miktarı codec tarafından rahatlıkla ayarlanabilir ve bitrate hesabına gerek kalmaz. MPEG-4 standardına uygun görüntü ürettiği için uygun four-cc ayarı DIVX verilirse DVD oynatıcı cihazınızda Xvid izleyebilirsiniz.
        Dezavantaj: AVC'den düşük kaliteli ve büyük görüntü verisi üretir.
      2. x264 (MPEG-4 Bölüm 10/h264/AVC)
        Genellikle MP4 taşıyıcısında bulunur, ancak AVI dışında hemen tüm modern taşıyıcı formatlara koyulabilir.
        Avantaj: En yeni nesil codec. Yüksek kaliteyi düşük dosya boyutunda verir.
        Dezavantaj: AVC videosunu DVD oynatıcı cihazınızda izleyemezsiniz. Karmaşık algoritmalar kullandığı için sıkıştırma (ve oynatma) yüksek CPU gücü ister. Bu sebepten bazı video oynatıcı cihazlarda izleyebilmek için sıkıştırma esnasında bazı seçenekleri kapatmanız gerekebilir.
    2. Hedef çözünürlüğünüz nedir?
      Düşük çözünürlük her zaman düşük görüntü kalitesi anlamına gelmez. Seçeceğiniz X ve Y çözünürlükleri 16'nın katları olmalıdır, bunlardan biri belirlendikten sonra görüntünün orijinal aspect oranı kullanılarak diğer çözünürlük belirlenir. Bu konuda daha detaylı bilgi görüntü sıkıştırma kısmında verilecektir.
  4. Hangi taşıyıcıyı kullanmalı?
    Çeşitli seçenekler var, her birinin kendine göre artıları ve eksileri var. Şu an yapacağınız seçim gelecekte dejavantajlı durum yaratırsa taşıyıcı içinden çoklu-ortam verisini çıkarıp yeni bir taşıcıya aktarabileceğinizi unutmayın. Taşıyıcı biçimler hakkında geniş bilgiyi burada [wiki.en] bulabilirsiniz.
    1. Avi: En yaygın taşıyıcıdır. Pek çok DVD/DivX oynatıcı cihaz avi içindeki veriye rahatlıkla erişilebilir. Eski bir taşıyıcı olduğu için modern taşıyıcıların sunduğu B-frame desteği, altyazı gömme, bölümler, AVC/AAC/Vorbis gömme gibi bazı olanaklardan yoksundur ancak yine de bu işler çeşitli "kurnazlıklarla", standart olmayan yollarla yapılabiliyor. Avi taşıyıcısına rahatlıkla birden fazla ses izi gömülebilir. Overhead'i orta düzeydir.
    2. Mkv (Matruşka): Modern bir taşıyıcı olarak içine mevcut olan tüm ses ve görüntü streamlerini, resim, yazıtipi hatta trojan da dahil hemen herşeyi koyabilirsiniz :) Mkvtool programının kullanımı oldukça rahat ve doküman bulma sorunu yok. Öte yandan bildiğim kadarı ile Mkv formatını okuyan cihaz bulunmuyor, ayrıca mevcut hali ile mkv'de DVD benzeri menüler yapılamıyor.
    3. MP4: Bu taşıyıcı hakkında bilgim ve deneyimim az. Overhead'i Mkv ile benzer (küçük). Detayları MPEG-4 standardı ile verildiği için h264 görüntü ve AAC ses verisi genellikle bu taşıyıcı içine konur. Standart gereği içine sadece TText altyazısı gömebiliyorsunuz, ancak MP4Box programı SRT altyazılarınızı TText biçimine otomatik olarak dönüştürebiliyor. Standardı olduğu için ben bu taşıyıcının geleceğini Mkv'den biraz daha parlak görüyorum. Öte yandan Mkv'nin komut satırı birleştiricisinin kullanımı MP4Box'tan çok daha rahat ve iyi dokümante edilmiş. MP4 taşıyıcısı kullanmak istiyorsanız MP4Box için yazılmış bir grafik arabirim kullanmanızı öneririm.
    4. Ogm: Büyük overhead yarattığı ve karşılığında belirgin bir avantaj sağlamadığı için bu taşıyıcıyı kullanmanızı önermiyorum. Ogm diğer taşıcılar gibi dizin içermediği için dosya içinde atlamalar yapmak zaman alır. İlle de Ogm kullanacağım diyorsanız kaynak kodunu indirin, kod içinde "hard coded" olan sayfa büyüklüğü parametresinin değerini artırın ve yeniden derleyin. Ogm'nin dev overhead'ini (Avi'den büyük) bu şekilde daha makul seviyelere indirebilirsiniz. Ayrıca Ogm'nin artık geliştirilmediğini de belirteyim.
Son güncelleme: 29.01.2007

3. Ses sıkıştırma

DVD'nizin üzerinde çalışmaya başlamadan önce vermeniz gereken son bir karar var: DVD'yi sabit diskinize aktaracak mısınız, ya da doğrudan sürücüye takılı DVD üzerinde mi çalışacaksınız?
  • DVD'nizi doğrudan, sıkıştırmadan yedekleyecekseniz ve bilgisayarınızda tek DVD sürücü varsa DVD'nizi sabit diskinize aktarmak zorundasınız.
  • Sabit diske aktarmak ve sıkıştırmayı oradan yapmayı seçerseniz tek katmanlı DVD için yaklaşık 5 GB yere ihtiyacınız olacak. Bu veri miktarı elbette çift katman DVD için daha da büyük.
  • Sabit diskinizden çalışırsanız ve tek DVD sürücünüz varsa sıkıştırma esnasında sürücü serbest olacaktır ve CD yazma gibi başka işler yapabilirsiniz.
  • Veriye sabit diskten erişmek daha hızlıdır ancak sıkıştırma işlemi uzun sürdüğü için hız farkı fazla avantaj sağlamaz. Öte yandan DVD sabit diske aktarılırken CSS çözümlemesi de yapıldığı için sıkıştırma süresini kısaltabilecek az miktar MİB gücü kazanılır.
DVD'nizi şu komut ile sabit diskinize aktarabilirsiniz:

vobcopy -m

Bu komut sabit diskinizde tüm dosyaları ile birlikte bir DVD kopyası oluşturur.

DVD'nizi yerel_DVD adlı bir dizine kopyaladığınızı varsayalım.

Ses sıkıştırmaya dönersek.. Ses sıkıştırma birden fazla yolla yapılabilir. Siz elbette sesi doğrudan mencoder ile de (hatta görüntü ile aynı anda) sıkıştırabilirsiz, ancak ben aşağıda kişisel tercihim olduğu için mplayer+sıkıştırma yazılımı yolunu anlatacağım. Neden derseniz:
  1. Sesi ayrı sıkıştırırsanız ortaya çıkan dosyanın boyutundan görüntü için ne kadar yeriniz olduğunu ve dolayısıyla kullanabileceğiniz bitrate'i daha net olarak hesaplayabilirsiniz. Öte yandan ses+görüntü sıkıştırma işlemi tercih edildiğinde, 1. geçiş esnasında mencoder size görüntü için kullanabileceğiniz bitrate için çeşitli seçenekler hesaplayarak ekranda yazacak.
  2. Sesi başka biçime çevirirken hedef biçimin kendi programını kullanmak size ayarlar konusunda mencoder'a göre daha fazla özgürlük sağlayabilir.
  3. Görüntüyü h264'e sıkıştırmak istiyorsanız ve mencoder'ınız x264 kütüphaneleri ile derlenmiş değil ise o zaman ya mencoder'ı x264 ile kaynak koddan kendiniz derleyeceksiniz, ya da görüntüyü x264 programı ile sesten ayrı olarak sıkıştıracaksınız.
  4. Lame ile VBR MP3 sıkıştırırken bitrate histogramı görürsünüz, mencoder+lame ile sıkıştırırken göremezsiniz.
  5. Sesi ayrı sıkıştırmak işi parçalara bölmek anlamına gelir, bu da çoğu durumda avantaj sağlar.
Mencoder kullanarak ses sıkıştırma işleminden görüntü sıkıştırma yazısında bahsedeceğim.

Şimdi ses sıkıştırma işlemine geçelim. DVD'nizdeki ses izlerinin 128'den başlayan etiket kodları vardır. DVD'deki ses izlerini ve kodlarını görmek için şu komutu girin:

mplayer dvd://1 -dvd-device yerel_DVD -endpos 20

Eğer DVD'nizi sabit diskinize kopyalamadıysanız komuttan "-dvd-device yerel_DVD" kısmını çıkarmanız gerekiyor. Bu komut Mplayer'ın terminalde DVD hakkında bazı bilgiler de görüntüleyerek video'nun ilk 20 saniyesini görüntülemesini sağlıyor. Bilgi dökümünden hangi kodlu izlerin hangi dile karşılık geldiğini görebilirsiniz. Döküm arasında aşağıdakine benzeyen satırlar arayın:

...
audio stream: 0 format: ac3 (5.1) language: en aid: 128.
audio stream: 1 format: ac3 (5.1) language: de aid: 129.
audio stream: 2 format: ac3 (5.1) language: es aid: 130.
audio stream: 3 format: ac3 (stereo) language: en aid: 131.
number of audio channels on disk: 4.
...

"aid" ("Audio ID"), ses'in iz koduna karşılık geliyor. Diyelim 128 kodlu stereo ses izini Vorbis codec'i ile sıkıştırmaya karar verdiniz. Aşağıdaki komutları girin:

%mkfifo audio.wav
%mplayer -quiet dvd://1 -dvd-device yerel_DVD -ao pcm:file=audio.wav:waveheader:fast -vo null -vc null -aid 128&
%oggenc -q 5 audio.wav -o dvd.128.ogg

İlk komut bulunduğunuz dizinde bir isimli boru ("named pipe") yaratır. İsimli boru iki programın veri alışverişinde bulunmasını kolaylaştıran ve veri barındırmayan özel bir dosya türüdür. Kullanım mantığı şöyledir: Önce bir program boruyu herhangi bir dosyaymış gibi açar ve içine veri yazmaya başlar. Başka bir program boru'daki veriyi okuyana dek Linux çekirdeği bu programı beklemeye alır. Veri ikinci bir program tarafından okunmaya başladığında ise köprü kurulmuş olur, çekirdek ilk programı yeniden başlatır ve veri tıpkı bir borudan sıvı akması gibi ilk programdan ikinciye doğru Linux çekirdeği üzerinden akar. İlk programın işi sona erdiğinde boruya "EOF" karakteri gönderir ("End of File") ve böylece ikinci program "dosyanın" sonuna geldiğini anlar. İkinci program ilk program EOF göndermeden sonlanırsa (mesela çökerek veya CTRL+C ile durdurularak), çekirdek "broken pipe" hatası verir ve ilk programı sonlandırır.

Bu işlemde isimli boru kullanmamızın nedeni Mplayer'ın Wav/PCM ses çıkışını sadece bir dosyaya yapabilmesi (yani stdout'a değil); eğer bu veriyi gerçekten bir dosyaya yazsaydık çok fazla disk alanı gerekecekti. İşlem isimli boru sayesinde disk alanı kullanmadan "havada" yapılıyor.

İkinci satırda Mplayer'a DVD'yi yerel_DVD dizini üzerinde gerçek bir DVD diski gibi erişmesini ve 128 kodlu ses izini Wav/PCM formatında audio.wav dosyasına yazmasını söylüyoruz.

Üçüncü satır ise Mplayer'ın audio.wav dosyasına (yani isimli boruya) verdiği verinin oggenc tarafından alınıp yüksek kalitede (5) sıkıştırılmasını sağlıyor.

Şayet ses izini (yüksek kalitede) MP3 formatına sıkıştırmak isterseniz yukarıdaki oggenc komut satırını aşağıdaki komutla değiştirin:

nice +5 lame --vbr-new -h audio.wav -o dvd.128.mp3

Aslında ses verisinin audio.wav dosyasında olduğunu ve gerekiyorsa Wav biçiminde olduğunu söyleyerek başka bir programla herhangi başka bir biçime dönüştürebilirsiniz (ör. Flac, AAC..).

Sıkıştırma işlemleri yoğun MİB gücü gerektirdiğinden bu işlemler sürerken bir yandan da bilgisayarınızı rahatlıkla kullanabilmek istiyorsanız oggenc veya lame'in yukarıdaki gibi "nice" ayarı artırabilir (yani işlemin öncelik ayarı). Yüksek "nice" düşük öncelik demektir. Nice'ın alabileceği en yüksek değer +19'dur ve normalin üstünde öncelik eksi değerler ile ifade edilir.

Son olarak eğer orijinal ses izini (genellikle Dolby Digital 5.1) sıkıştırmadan, doğrudan bir dosyaya atmak istiyorsanız girmeniz gereken komut şu:

mplayer -v dvd://1 -dvd-device yerel_DVD -aid 128 -dumpaudio -dumpfile dvd.128.ac3

Bu komut 128 kodlu ses izini olduğu gibi dvd.128.ac3 isimli dosyaya atar.

Salı, Ocak 23, 2007

Çokluortam Operasyonları: Müzik CD'si Yedekleme

Bu yazıda bir müzik CD'sinin yedeklenmek veya örneğin taşınabilir müzik çalarınızda dinlenmek üzere mp3, flac, Vorbis gibi çeşitli formatlara nasıl dönüştürüleceği anlatılmaktadır.

Gereken yazılım:
  • CD->Wav dönüşümü için cdparanoia paketi.
  • MP3 dönüşümü için lame paketi.
  • Ogg/Vorbis için vorbis-tools paketi.
  • AAC için faac paketi.
  • FLAC için flac paketi.
CD-DA -> X Dönüşümü
Öncelikle cdparanoia programını kullanarak CD'deki şarkılara wav formatında erişeceğiz. cdparanoia'nın kullanımı oldukça basit, örneğin:
cdparanoia 3 sarki.wav
komutuyla CD sürücünüzdeki müzik CD'sinin 3. şarkısını bulunduğunuz dizinde sarki.wav dosyasına wav formatında kaydedebiliriz. Dilerseniz bu wav dosyaları ile (ve cue sheetle birlikte) CD'nizi yedekleyebilirsiniz, ancak wav dosyaları büyük yer kapladıkları için yedekleme için onun yerine kayıpsız bir format (ör. flac) kullanmak daha mantıklı bir çözüm.

Yeri gelmişken bir not düşeyim: Ses sıkıştırma algoritmaları ikiye ayrılır, kayıplı ve kayıpsız algoritmalar. Flac kayıpsız bir algoritmadır, yani bir flac dosyasından üretilen ses, kaynak ses ile birebir aynıdır. Kayıpsız algoritmalar wav'dan küçük ama yine de kayıplı algoritmalara kıyasla büyük dosyalar üretir (wav'ın yaklaşık yarısı kadar).

Diğer tür algoritmalar kayıplıdır, yani kaynak dosyayı küçültebilmek için kaynak verinin bir kısmı atılır. Atılan veri çoğunlukla insan kulağının duyamayacağı frekanslar olduğu için birrate'e de bağlı olarak bu verilen üretilen sese etkisi oldukça azdır. Kayıplı formatlara örnek olarak mp3, ogg ve aac verilebilir. Kayıplı formatlar kayıpsız formatlardan çok daha küçük dosyalar üretirler.

İlk olarak şarkımızı flac formatında sıkıştıralım:
cdparanoia 3 - | flac --best -e - -o sarki.flac
Komut cdparanoia kullanarak 3. şarkıyı wav formatında stdout'a veriyor. Boru işlemi ile stdout'u flac'ın stdin'ine veriyoruz, böylece şarkıyı wav dosyasına yazmaya gerek kalmadan "havada" flac formatına çevirmiş oluyoruz. Flac kayıpsız olduğu için en iyi ses kalitesi diye bir şey söz konusu değil, ancak yüksek "kalite" ayarı sıkıştırma süresi ile üretilen dosyanın boyutu arasındaki dengeye karşılık gelir. Sıkıştırma işlemi gece veya bilgisayar kullanılmazken yapılabileceği için çokluortam sıkıştırma işlemlerinde genellikle sıkıştırma süresi yerine üretilecek dosyanın boyutu ve/veya dosya kalitesi dikkate alınır.

Diğer sıkıştırma işlemleri de aynı mantık ile olacak, yani cdparanoia'nın çıktısını doğrudan sıkıştıran programa vereceğiz. Aşağıdaki sıkıştırma işlemlerinde yüksek kalite ayarlarını kullanmaya çalıştığımı belirteyim:

Wav'ı AAC formatına çevirmek için:
cdparanoia 3 - | faac -w - -o sarki.aac
MP3 için lame'yi kullanıyoruz:
cdparanoia 3 - | lame --vbr-new -h - sarki.mp3
Ogg/Vorbis için:
cdparanoia 3 - | oggenc -q 6 -o - sarki.ogg
ve son olarak şarkıyı CD'den direk hoparlöre vermek için (yani basit bir terminal CD çaları):
cdparanoia 3 - | aplay - -t wav

Müzik Dosyalarını Etiketleme

Ürettiğiniz müzik dosyalarına etiket (tag), yani metadata eklemek, müziğinizi gelişkin müzik çalar programlarında ve cihazlarında organize edebilmek için büyük önem taşır.

Biliyorsunuz, CD-DA hakkındaki albüm adı, şarkı isimleri gibi bilgilere CDDB'den erişilebiliyor. Bu veriler indirilip, sıkıştırılırken metadata olarak dosyanın üzerine eklenebilir. Bir CD'nin CDDB verisine erişmek için CD'yi sürücüye koyun ve şu komutu girin:
cdda2wav -L 0 -J -g -v titles
Program CD için CDDB'de bilgi araması yapacak ve komutu çalıştırdığınız dizine her şarkı için o şarkı hakkındaki bilgileri içeren inf uzantılı bir dosya yazacak. Bu bilgileri sıkıştırma esnasında girmek için inf dosyalarının okunması ve sıkıştıran programın komut satırına girilmesi gerekiyor. Bu işi örneğin bir python betiği ile kolayca halledebilirsiniz.

Aşağıda örnek bir lame komut satırı bulunuyor:
cdparanoia 3 - | lame --vbr-new -h \
--tt "Sarki Ismi" \
--ta "Sanatcinin/grubun ismi" \
--tl "albumun adi" \
--tn 3 # CD'deki kacinci sarki oldugu \
--add-id3v2 # idv2 etiketi ekle \
- sarki.mp3
Notlar:
  1. Yazıda bahsi geçen tüm programların kullanım detayları için kılavuz sayfalarına bakınız (man <program>)
  2. MP3, Flac ve AAC formatındaki dosyalarınız Ipod'da dinleyebilirsiniz.
  3. Sıkıştıran program en az sıkıştırma formatı kadar önemlidir. İki ayrı program Wav'dan Mp3 kodlayabilir ancak üretilen dosyaların ses kalitesi ve/veya boyutu çok farklı olabilir. Mp3 söz konusu olduğunda lame bir numaralı codec'tir.
  4. Bu yazılar (çokluortam operasyonları) zaman zaman güncellenecektir.
Son güncelleme: 22.01.2007

Salı, Şubat 07, 2006

TCSH'den Ctrl+D ile Nasıl Çıkılır?

Bu gerçekten sinir bozucuydu. Bütün scriptlerimi TCSH için yazdığımdan shell olarak da TCSH kullanıyorum. TCSH'den çıkmak için Ctrl+D yaptığınızda şöyle bir mesaj görürsünüz:

Use "exit" to leave tcsh.

Ctrl+D'yi etkin hale getirmek oldukça basitmiş:

$unset ignoreeof

komutunu girmeniz yeterli. Elbette bunu her seferinde yazmamak için açılış script'ine koymalısınız.

Ben shell için yaptığım açılış tanımlarımı (path'ler, alias tanımları, vs.) .user diye bir dosyaya koyuyorum ve bu dosyayı login scriptinde source'luyorum. Böylesi daha temiz oluyor.

Perşembe, Ocak 26, 2006

KDE Paneline Firefox İkonu Nasıl Eklenir?

Linux'unuza Firefox tar.gz dosyalarını indirdiniz ve kurdunuz. Fakat o da nesi? KDE menüsünde Firefox ikonu yok ve Firefox'u terminalden başka bir yerden çalıştıramıyorsunuz. Masaüstüne Firefox için bir sembolik bağlantı koydunuz ama ona da ikon atama şansınız yok. Ne yapacağız? Anlatayım:
  1. KDE menü butonuna sağ tıklayıp "Menu Editor"ü seçin. (ekranın sol alt köşesindeki üzerinde K harfi ve dişli resmi olan menü butonu, yani Windows'daki başlat menüsünün KDE karşılığı)
  2. Açılan editör penceresinin solundaki KDE menü listesinden "Internet"e tıklayın.
  3. Toolbar'dan "New Item"a tıklayın.
  4. Menü ismi olarak "Firefox" girin.
  5. Firefox menünüze eklendi. Üzerine tıklayın.
  6. Firefox'u kurduğunuz dizin örneğin "/usr/share/firefox" olsun. Sağdaki özellikler kısmında "Command" metin kutusuna "/usr/share/firefox/firefox" yazın. Yani Firefox çalıştırılabilir dosyasının konumunu yazıyoruz buraya.
  7. "Name" ve "Comment" metin kutularının sağında bir kutucuk var ve içinde soru işareti var. Bu programımıza ikon atamaya yarıyor, henüz ikon atanmadığı için içinde soru işareti var. O kutucuğa tıklayın.
  8. Şu an KDE'nin sunduğu ikonları seçebiliyoruz ama biz orijinal Firefox ikonu istiyoruz. "Other Icons" radio butonunu seçin. "Browse" düğmesi basılabilir hale gelecek, basın.
  9. "/usr/share/firefox/icons/" dizinine gidin ve ikon için bir resim dosyası seçin (mesela "mozicon128.png").
  10. Artık Firefox KDE menünüze ikonuyla birlikte eklendi.
  11. Firefox'u panel menüsüne eklemek için menüde bir yere sağ tıklayın.
  12. Açılan context menüden şunları seçin: "Panel Menu" -> "Add" -> "Application button" -> "Internet" -> "Firefox".
  13. Firefox artık şık ikonuyla birlikte Panel menünüzde. Güle güle kullanın :)
  14. Bu işlemi tüm programlarınız ve scriptleriniz için kullanabilirsiniz. Eklemek istediğiniz programın ikonu yoksa KDE'nin kendi ikonlarından birini de seçebilirsiniz.

Çarşamba, Ocak 25, 2006

*Penguen Günlüğüne Hoşgeldiniz

Bu açıkgünlüğün amacı Linux kullanırken öğrendiğim ipuçlarını ve bilgileri sizlerle paylaşmak. Linux kullanırken insan zaman zaman problemlerle karşılaşıyor, ve bunları çözmek bazı durumlarda ciddi şekilde zaman alıyor. Bu çözümleri paylaşmak istiyorum burada, böylece siz benim gibi zaman kaybetmemiş olursunuz.

Ben de Linux üstadı değilim ama insan Linux'u zamanla öğreniyor ve öğrendikçe de bu işletim sisteminden aldığı keyif artıyor. Sonuçta Linux bir okyanus ve insan sürekli Linux hakkında yeni şeyler keşfediyor.

Birkaç şey daha:
  1. Bu açıkgünlük, Harika Şeyler Günlüğü'nde vermiş olduğum kural ve notasyonları izleyecektir.
  2. Aksini belirtmediğim taktirde burada anlattığım şeyler RedHat Linux 8.0, İngilizce sürüm için geçerlidir.
  3. Son olarak bunun sık güncellenen bir açıkgünlük olmayacağını hatırlatmak istiyorum.
  4. Bazı hakları saklıdır. Buradan bir yazı alıp sitenize veya açıkgünlüğünüze koyarsanız lütfen alıntı yaptığınız yazıyı kaynak gösteriniz.
Kolay gelsin, bol penguenli (ve bol sabırlı) günler ;)