15.05.2008

Blu-Ray Sıkıştırma

Dp Forumlarında M-McFly arkadaşımızın hazırladığı anlatımı burada paylaşmak istiyoruz. Özellikle Bluray ve HD-DVD lerden direk rip yapmak oldukça sorun çıkarmaktadır. Ancak arkadaşımızın bu anlatımı gerçekten çok güzel olmuş ve buradan sizlere de ulaştıralım dedik. Kendisine bir kez daha teşekkür ediyoruz...

Gereksinimler:

- xport 1.01 veya üstü http://www.videohelp.com/tools/xport
- dgavcindex http://www.neuron2.net/dgavcdec/dgavcdec.html
- dgindex 1.4.9 veya üstü http://neuron2.net/dgmpgdec/dgmpgdec.html
- avisynth 2.5.7 veya üstü http://sourceforge.net/project/showfiles.php?group_id=57023
- eac3to 2.45 veya üstü http://www.videohelp.com/tools/eac3to
- MeGUI veya Virtualdubmod ikilisinden herhangi biri (ya da herhangi bir avisynth okuyucu sıkıştırma programı)
- ffdshow “directshowsource” avs script inde, h264 ve vc-1 kodlayıcısını çözmesi için gerekli (tavsiyem xxl sürümü)
- vc12avi http://forum.doom9.org/showthread.php?t=128943

------- Extra:
------- - tsremux http://www.videohelp.com/tools/TsRemux
------- - Windows Media Player 11 Codecs vc-1 kodlayıcısını çözmek için ffdshow a alternatif


1) DEMUX

İlk olarak, bluray diskten kopyalanan dosyaların içinde BDMV\STREAM klasörüne gelin. Genelde buradaki en büyük boyutlu m2ts dosyası filmin dosyasıdır. Diğer dosyalar ekstralar, menuler vs. gibi şeylerdir. Eğer film dosyası iki veya daha fazla parça halinde ise, aşağıdaki cmd komutuyla birleştirin:
copy /b birlesecekdosya1.m2ts+birlesecekdosya2.m2ts birlesim.m2ts

Daha sonra, görüntüyü ve sesi ham olarak m2ts dosyasının içinden dışarıya çıkartmalıyız (Eğer Bluray daki görüntü dosyası mpeg2 ise bu kısmı atlayıp Görüntü Sıkıştırma kısmına geçebilirsiniz, çünkü mpeg2 ile kodlanan bluray lar için daha kolay bir demux işlemi uygulayacağız). Bu işlem için kullanacağımız program da xport. Komut isteminden çalışan bir program (başlat > çalıştır > cmd) ve bizim kullanacağımız kısmı şöyle:
xport -h filmdosyasi.m2ts 1 1 1

Buradaki rakamlar sırasıyla; program, görüntü ve ses PID lerini temsil ediyor. Program numarası genellikle, hatta her zaman 1 olur. Aynı şekilde görüntü de öyle. Diğer yandan, eğer filmde birden fazla ses dosyası varsa, çıkarmak istediğimiz sese göre 3. rakamı değiştirebiliriz. Genellikle filmin orjinal sesi 1. ses olduğundan buradaki rakamı da 1 yapabiliriz.
(xport programı işlemi gerçekleştiremediyse, aşağıdaki ekstra bölümüne bakınız)

Bu işlemden sonra elimizde, mpv ve mpa dosyaları oluşacak. mpa dosyamızın uzantısını .mpa yerine sahip olduğu formata göre yeniden adlandıralım (ac3 ise .ac3, dts ise .dts, eac3 ise .eac3, truhd ise .thd, pcm ise .pcm gibi). Görüntü ve ses dosyalarımız ayrı ayrı sıkıştırılmaya hazır durumda.


2) GÖRÜNTÜ SIKIŞTIRMA

Bluray disklerin içlerindeki görüntü dosyaları, 3 farklı kodlayıcıyla bulunabiliyor; h264, mpeg2, vc1. Bu yüzden görüntü sıkıştırma kısmını 3 gruba ayırmamız iyi olur. Çünkü hepsi için farklı çözümler uygulanmalı:

A ) H264
Bunun için 2 ihtimalimiz var. 1. ve öncelikli ihtimalimiz dgavcindex. Bu program henüz yeni olduğundan, bazı ham h264 dosyalarını çözümleyemiyor. Ama önceliğimiz bu olduğundan (hem hız açısından hemde çok çok az bir kalite farkından), ilk olarak bunu deniyoruz. Önce mpv dosyamızı, .mpv yerine .h264 şeklinde yeniden adlandırıyoruz. Daha sonra programı açıp "File > Open" dan .h264 dosyamızı programa yüklüyoruz. "File > Save project" diyerek .dga dosyamızı oluşturuyoruz.

İşlem tamamlandıktan sonra, geriye avs script dosyamızı oluşturmak kalıyor sadece. Not defterini açıp aşağıdakini yazıyoruz:
avcsource("dgaDosyasiAdi.dga",audio=false)

Ve herhangi bir isimde (Türkçe karakter içermese iyi olur) .avs şeklinde dga dosyamızın olduğu dizine kaydediyoruz.

2. ihtimal ise, dgavcindex in çözümleyemediği h264 dosyaları için "directshowsource" avs scriptini kullanmak. Burada dikkat edilmesi gereken en önemli husus; bilgisayarda h264 çözücülü görüntüler için ayarlanmış olan çözücünün coreAVC olmaması. Çünkü bilindiği gibi coreAVC oynatım esnasında görüntü kalitesinden az da olsa taviz vererek çözme işlemini gerçekleştiriyor. Bu yüzden geçici olarak da olsa h264 çözmesi için ffdshow u ayarlamayı unutmayın (Eğer ffdshow un devrede olan filtreleri var ise onları da mutlaka kapatın ve “skip deblocking when safe” ile “skip deblocking always” ayarları açık olmasın).

Avs dosyamızın içeriği aşağıdaki gibi olacak:
DirectShowSource("filmdosyasi.mpv",audio=false,fps=23.976,framecount=xxxxx) # framecount parametresine, filmin toplam kare sayisini girmelisiniz. Ornegin 5 dk lik bir goruntu icin, 5 x 60 = 300 saniye. 300 x 23.976 = 7192 kare.

B ) MPEG2
Mpeg2 ile kodlanmış görüntülerdeki yapacağımız işlem, dvd yedekleme işlemine benzer bir işlem. DGIndex i açıyoruz ve “File > Open” diyerek m2ts dosyamızı ekliyoruz. Üst menüden “Audio > Output Method” da Demux Tracks ya da Demux All Tracks ı seçin. Daha sonra “Stream > Detect PIDs: PAT/PMT” kısmına gelin.

Burada dışarıya çıkarmak istediğimiz ses dosyasını seçeceğiz. Genelde 1. Ses orijinal sestir fakat bazen daha kaliteli ses dosyaları 2. veya 3. sırada olabiliyor (mesela üstteki örnekte daha kaliteli olan lpcm ile kodlanmış ses dosyası 2. sırada). Çıkarmak istediğiniz sesi seçin ve aşağıdaki “Set Audio” tuşuna basıp yanındaki “Done” a basarak küçük pencereyi kapatın. “File > Save Project” diyerek d2v dosyasını oluşturun.

İşlem tamamlandıktan sonra, geriye avs script dosyamızı oluşturmak kalıyor. Not defterini aşağıdakini yazıyoruz:
DGDecode_mpeg2source("d2vDosyasiAdi.d2v")

Ve herhangi bir isimde (Türkçe karakter içermese iyi olur) .avs şeklinde d2v dosyamızın olduğu dizine kaydediyoruz.

C ) VC-1
M2ts dosyasından çıkarttığımız mpv görüntü dosyamızı .mpv yerine .vc1 olarak yeniden adlandırın. Sonrasında vc12avi programını açın ve VC-1 ES kısmına .vc1 dosyamızı girin.

forum resmi

Aşağıdaki “Convert” tuşuna basın ve avi dosyasını oluşturun. Burada gözüken fps değeri sizi yanılmasın. 29,976 gözükmesine rağmen film aslında 23,976 (Zaten avs dosyamıza girdiğimiz parametre ile fps yi ayarlıyoruz). Avi dosyasını oluşturduktan sonraki işlem avs dosyasını oluşturmak. Buradaki önemli ayrıntı da, ffdshow un vc1 ile kodlanmış görüntüleri çözmesini sağlamak.

Not defterine aşağıdaki script i yazıp avs dosyamızı oluşturuyoruz ve herhangi bir isimde (Türkçe karakter içermese iyi olur) .avs şeklinde d2v dosyamızın olduğu dizine kaydediyoruz:
DirectShowSource("filmdosyasi.avi",audio=false,fps=23.976,framecount=xxxxx) # framecount parametresine, filmin toplam kare sayisini girmelisiniz. Ornegin 5 dk lik bir goruntu icin, 5 x 60 = 300 saniye. 300 x 23.976 = 7192 kare.

Gerekli çözücüler için gerekli işlemi yapıp avs dosyasını oluşturduktan sonra, herhangi bir avisynth okuyucu sıkıştırma programı ile görüntü sıkıştırma işlemine başlayabilirsiniz. Ayrıca oluşturduğumuz avs dosyasının içine istediğiniz script i ekleyebilirsiniz. Zaten amacımız, bu avs dosyasını oluşturup herhangi bir avisynth okuyucusu sıkıştırma programına gösterebilmekti (virtualdubmod veya megui gibi).

İşinize yarayacak diğer avisynth filtreleri:
spline36resize(XXX,XXX) # goruntuyu tekrar boyutlandirma icin gerekli filtre. birinci deger yatay cozunurluk bileseni, ikinci ise dusey cozunurluk
LanczosResize(XXX,XXX) # ustteki filtreye alternatif bir “resize” filtresi, daha keskin goruntu istenirse kullanilabilir
crop(x,x,-x,-x) # kenarlardan goruntuyu kesme filtresi. sirasiyla: sol, ust, sag, alt degerlerini alir.
ChangeFPS(24000, 1001) # fps degerini 23.976 olarak ayarlar.

Forumumuzda xvid için iki ayrı anlatım bulunuyor, biri virtualdubmod ile diğeri de megui ile. Görünü sıkıştırma işleminin bundan sonraki kısmına ilgili rehberlerden de devam edebilirsiniz.
Benim burada az da olsa bahsetmek istediğim konu, megui ile x264 kodlayıcısının ve mkv taşıyıcısının bir arada kullanıldığı sıkıştırma işlemi. Bunun için megui programını eksiksiz olarak kurmanız gerekiyor (Program güncellemelerini de mutlaka yapın. Kurulum yardımı için @zhochan ın hazırladığı buradaki rehberden faydalanabilirsiniz).

forum resmi

Daha sonra programı açıyoruz ve oluşturduğumuz avs dosyasını, “AviSynth Script” bölümüne giriyoruz. Alttaki “Codec” kısmında x264 ü, “File Format” kısmında da mkv yi seçiyoruz. “Video Profile” kısmında hazır profiller var, bunlardan her hangi birini kullanabilirsiniz. En kalitli görüntüyü alabileceğiniz profiller zaten verildikleri isimle anlaşılacaktır. Tabi aynı zamanda çok çok yavaş bir hızla işlemi gerçekleştirilecektir. Örneğin “HQ Insane” en yavaş işlemi yapan ve en kaliteli görüntüyü verebilen (zaman zaman) profildir (dxva ile uyumsuzdur). Ama bu demek değildir ki diğer profiller daha kötüdür. Dilerseniz deneme yanılma ile bakabilirsiniz hepsine. Farklı görüntülerde farklı profiller aynı kaliteyi daha kısa işlem süresinde gerçekleştirebiliyor zaman zaman. Hatta yandaki “Config” tuşuna basarak profil ayarlarını elle girip kendiniz bir profil oluşturabilirsiniz.

İşlem hızı ve kalite olarak iyi performans veren bir x264 örneği:
x264.exe --pass 2 --bitrate 1000 --stats ".stats" --ref 5 --mixed-refs --bframes 16 --b-pyramid --b-rdo --bime --weightb --direct auto --filter -2,-1 --subme 6 --trellis 1 --partitions p8x8,b8x8,i4x4,i8x8 --8x8dct --me umh --threads auto --thread-input --progress --no-psnr --no-ssim --output "output" "input"

(Bu ayarlardan faydalanarak, config bölümündeki ayarları benzer şekilde yapabilirsiniz, pencerenin alt kısmında girdiğiniz ayarlar gözükür. Bitrate değerini girmeyi de unutmayın tabiki.)

Benim buradaki tavsiyem, Level 4.1 profiline uygun sıkıştırma yapmanız. Profiller arasından DXVA ile başlayan herhangi bir profil, dxva ya uygun sıkıştırma yapılmasını sağlayacaktır. Buradaki en önemli ayrıntı, x264 codec ayarlarında “RC and ME” sekmesinde, Number of Referance Frames değerini 8’den yukarı yapmamanızdır. Eğer 8’den yukarda olursa dxva ile oynatım esnasında görüntüde kırılmalar olabilir, 10’dan yukarda olursa da sabit yeşil bir ekran gelir. Dxva uyumluluk konusu az da olsa diğer değerlere de bağlı. Bu yüzden sıkıştırmanıza başlamadan önce, sadece 5-10 saniyelik bir kısmı sıkıştırıp, dxva ile oynatarak denemeniz iyi olacaktır.

Dxva için bir örnek vermek gerekirse:
x264.exe --pass 2 --bitrate 1000 --stats ".stats" --level 4.1 --ref 3 --mixed-refs --bframes 3 --b-pyramid --b-rdo --bime --weightb --direct auto --filter -2,-1 --subme 6 --trellis 1 --partitions p8x8,b8x8,i4x4,i8x8 --8x8dct --me umh --threads auto --thread-input --progress --no-psnr --no-ssim --output "output" "input"

(Bu ayarlardan faydalanarak, config bölümündeki ayarları benzer şekilde yapabilirsiniz, pencerenin alt kısmında girdiğiniz ayarlar gözükür. Bitrate değerini girmeyi de unutmayın tabiki.)


“Config” bölümünde gerekli ayarları yaptıktan sonra, “Enqueue” tuşuna basın ve üstten “Queue” sekmesine gelin. Buradaki “Input” bölümünde az önce eklediğiniz avs dosyası, “Output” bölümünde çıktı olarak alacağınız mkv dosyası ve “Codec” bölümünde de kodlama yapacağınız AVC (h264, x264) gözükür. 2 satır gözükmesinin sebebi (job1, job2 şeklinde) 2 pass sıkıştırma işlemi yapılacağı içindir. Alt kısımdaki “Start” tuşuna basarak sıkıştırma işlemini başlatın. Eğer bir “Worker” yok gibi bir ileti alırsanız, herhangi bir isimde bir “Worker” oluşturup işlemi başlatın.

NOT: Sıkıştırma işlemine başlamadan önce, megui nin bitrate calculator programını kullanarak bitrate değerlerini nasıl vereceğinizi hesaplamanız iyi olacaktır.

3) SES SIKIŞTIRMA

Şimdi sıra ses dosyamızda. Kaynak diskte DTS veya ac3 ses var ise bunları sıkıştırmadan, yani m2ts dosyasından çıkarttığımız haliyle bırakabiliriz. Seçim sizin.
Ses sıkıştırma işlemi için kullanacağımız program eac3to. Arayüzü çok kolay ve anlaşılır. Programı açıyoruz ve "Source file" kısmına kaynak ses dosyamızı giriyoruz. Altındaki "Destination file" a da sıkıştırılmış ses dosyamızı kaydedeceğimiz yeri ve formatını (.ac3 .dts gibi) giriyoruz. Çevireceğimiz format ac3 ise, alttaki ac3 kısmından 640 kbps en iyi seçim olacaktır. Ama görüntü için daha fazla bitrate ayırmanız gerekiyorsa 448 kbps yi de seçebilirsiniz. Çevireceğimiz format dts ise de, yine alttan, bu sefer dts kısmından 1536 kbps veya 768 kbps yi seçebilirsiniz. Diğer ayarları olduğu gibi bırakabilirsiniz. Tabi farklı işlemler yapmak istiyorsanız orada ilgili seçenekler mevcut; sesi 16bit e düşürmek, 2 kanala düşürmek ya da gecikme ayarı gibi. Ayrıca, kaynak dosya DTS-HD, DTS-HD MA veya DTS-ES den biri ise ve çevireceğiniz format dts ise, dts bölümündeki Extract DTS Core seçeneğini seçmeniz kaynaktaki sesi büyük ölçüde korumanızı sağlayacaktır. Kalite açısından çok önemlidir, mutlaka işaretleyin.

forum resmi

Eac3to programının bazı gereksinimleri var, bunlar şöyle:
For best AC3 and E-AC3 decoding you need:
(1) Nero 7 (Nero 8 won't work!)
(2) Nero HD-DVD / Blu-Ray plugin

For best DTS decoding you need:
(1) "Sonic Cinemaster Audio Decoder 4.3" DirectShow filter

For DTS encoding you need:
(1) SurCode DVD DTS - version 1.0.21 or newer

4) REMUX

Görüntü ve ses dosyamızı sıkıştırdıktan sonra geriye kalan işlem bunları bir araya getirmek. Bunun için yine megui yi kullanabiliriz. Programı açtıktan sonra üstten “Tools > Muxer > MKV Muxer” e geliyoruz. Burada “Video input” ve “Audio input” a görüntü ve ses dosyalarımızı girip alttaki “Queue” tuşuna basıyoruz. Video kısmında FPS değerini girmenize gerek yok, diğer kutuları da isteğinize göre doldurabilirsiniz. Hatta “Subtitle 1” kısmından altyazı da ekleyebilirsiniz. 2. bir ses veya 2. bir altyazıyı koymak isterseniz, ilgili sekmeye sağ tıklayıp “Add Track” ı seçin ve açılacak olan yeni sekmeye 2. dosyayı girin. Ayrıca, oluşacak dosyayı bölmek istiyorsanız, “Output” sekmesinde “Splitting” e gerekli değeri girebilirsiniz.
Ayarlamaları yaptıktan sonra ana ekranda “Queue” sekmesine gelin ve aşağıdaki “Start” tuşuna basın.İşlem bitince sıkıştırılmış dosyamız hazır hale gelecek.

------------------------------------------------------------------------------------------------------------------------------

- EXTRA

- Eğer vc1 ile kodlanmış BluRay disklerde görüntüyü demux edip avi ye çevirdikten sonra sorun yaşarsanız (görüntüde karelenme, yeşil küçük parçalar, dosyanın küçüklüğü gibi), alternatif olarak demux edilmemiş ham dosya olan m2ts dosyasını da DirectShowSourceavs script ine verebilirsiniz. Yalnız bunun için sistemde Haali media splitter in kurulu olması gerekiyor (TS özelliği aktif halde). Avs dosyasının içeriği de şöyle olmalı:
DirectShowSource("filmdosyasi.m2ts",audio=false,fps=23.976,framecount=xxxxx) # framecount parametresine, filmin toplam kare sayisini girmelisiniz. Ornegin 5 dk lik bir goruntu icin, 5 x 60 = 300 saniye. 300 x 23.976 = 7192 kare.

- Eğer görüntü ve ses dosyasını filmden ham olarak xport ile çıkaramadıysanız bir alternatifimiz daha var. Tsremux programı ile de bu işlemi gerçekleştirebiliriz. Kullanımı, bir arayüze sahip olduğu için daha kolay gelebilir ama özellikle pcm ses formatlarının “demux”unda sorun çıkarabiliyor. Bu yüzden ilk tercih xport.
Programı açtıktan sonra, çıkaracağımız dosyanın üzerine gelip sağ tıklayıp "Demux ..... stream # .. to elementary stream" seçeneğini seçiyoruz ve yer belirtip ham dosyayı dışarıya çıkartıyoruz.

Görüntü ve sesi bu şekilde ham olarak çıkardıktan sonra işlemlere B kısmından devam edebilirsiniz.

- Avs dosyalarının içerisindeki directshowsource() fonksiyonuna fps parametresini girmezseniz, görüntü olduğundan hızlı oynatılacak ve oynatım süresi daha kısa olacaktır. Yani hızlı çekim modunda gibi oynatılacaktır. Bu yüzden fps parametresini girmeyi ihmal etmeyin.

- Bahsetmek istediğim diğer bir konu da quant değerleri. x264 ile sıkıştırma sonucunda program bir log dosyası gösterir. Burada 3 satırlık quant değerleri vardır. Bir örnek vermek gerekirse:
x264 [info]: slice I:1106 Avg QP:17.67 size:259340
x264 [info]: slice P:57444 Avg QP:19.73 size:101506
x264 [info]: slice B:71807 Avg QP:21.51 size: 31027

Bu quant değerleri size sıkıştırma kalitesi hakkında bilgi verir. Değerlerin ortalaması 25-26’nın üzerinde ise, sıkıştırma kalitesi kaynaktan epey uzaklaşmıştır. Karelenmeler, detay kayıpları çok fazla olur. Aynı şekilde 15-16’nın altında ise de verdiğiniz bitrate değeri fazla gelmiştir. Yani dosyanız 8.7 gb kaplamışsa, bu boyut bu sıkıştırmaya fazla gelmiştir. Bu kadar büyük boyuta gerek yoktur. Bitrate değerini düşürmeyi deneyebilirsiniz.

Kaynak: Dp Forumları/M-McFly

Hiç yorum yok: