Jump to content

Vapoursynth Video Encoding Rehberi


Kanpuu
 Share

Recommended Posts

Vapoursynth Rehberi

 

vapour_kapak.jpg

 

 

Vapoursynth Nedir

 

Aslında, Vapoursynth'ın geliştirici Vapoursynth'ın ne olduğunu kendi açıtığı resmi web sitesinde açıklamış. Ama Türkçe olarak bir açıklama yapayım.

Vapoursynth video işleme için geliştirilmiş bir çalışma ortamıdır. Eklenti olarak kullanılabilecek pek çok kütüphaneye çalışma ortamı sunar. Vapoursynth'ın kendi core kütüphaneleri C++ programlama dili ile geliştirilmiştir ve bu kütüphanelerin özelliklerine erişim ise bir Python modülü ile gerçekleştirilmektedir, diğer bir değişle Vapoursynth video script'leri Pyhton programlama dilini syntax'ındadır.

 

İndirme Bağlantıları

 

http://www.vapoursynth.com

veya

https://github.com/vapoursynth/vapoursynth/releases

 

 

Videolu Anlatım

Her şeyden önce burada yazdıklarımı tamamen gösteren bir videolu anlatım hazırladım ama isterseniz önce yazılı anlatımı okuyun sonra anlamazsanız videolu anlatımı izleyin.

 

 

Kuruluma Başlamadan Önce

Kuruluma başlamadan önce Codec Kurulumu rehberimi okumanızı tavsiye ederim. 

Düzgün bir codec kurulumu her zaman önemlidir.

 

Kurulum Bilgisi

 

Öncelikle vapoursynth.com'a gidip resmi dokumentasyonu okuyalım.

Resmi documentasyondan kurulum sayfasını açalım.

 

Kurulum sayfası --> http://www.vapoursynth.com/doc/installation.html#windows-installation-instructions

 

Alıntı

First download and install the prerequisites:

Python 3.9.x or Python 3.8.x – 32 or 64 bit version depending on which version of VapourSynth you want to install

 

Windows için kurulum ile ilgili yazan kısımları okursak Python'un 3.9 veya 3.8 sürümlerinden herhangi birine ihtiyaç duyduğunu görürüz.

 

Alıntı

Note that VapourSynth and Python have to be matched so both are either installed for all users or for only for the current user.

 

Buradan da anlaşıldığı üzere python'u ve vapoursynth'ı kurarken bizim için makul olan "tüm kullanılar için kurulum" seçeneği.

 

Yapılacaklar

Aşağıdaki adımları sırasıyla gerçekleştirin.

1. Python'un resmi sitesi üzerinden python 3.9'a dahil olan bir sürümü indirin ve kurun.

    Python indirmeleri için bağlantı --> https://www.python.org/downloads/

 

2. Vapoursynth'ı indirin ve kurun.

    Vapoursynth indirmeleri için bağlantı --> https://github.com/vapoursynth/vapoursynth/releases

 

Python Kurulumu

Aşağıdaki resimlerde numaralandırdığım şekilde kurulumu gerçekleştirin.

 

py01.png py02.png

 

py03.png py04.png

 

Vapoursynth Kurulumu

Aşağıdaki resimlerde numaralandırdığım şekilde kurulumu gerçekleştirin.

 

vs01.png  vs02.png

 

vs03.png  vs04.png

 

5'inci adımdan sonrasını "Next" butonuna basarak devam ettirip kurulumu tamamlayın.

 

Kurulumu test etme

Aşağıdaki görseldeki gibi basit bir python script'i yazın ve çalıştırın. Hata olmadan aşağıdaki gibi bir çıktı alıyorsanız kurulum başarılı demektir.

 

ins_test.png

Edited by Kanpuu
Link to comment
Share on other sites

Vapoursynth Rehberi - Videoyu Önizleme ve Plugin Yükleme

 

Her şeyden önce burada yazdıklarımı gösteren bir videolu anlatım hazırladım ama isterseniz önce yazılı anlatımı okuyun sonra anlamazsanız videolu anlatımı izleyin.

 

 

Bundan sonra videolu anlatım yapılmayacaktır.

 

Kütüphanleri/Eklentileri Yükleme (Vsrepo Kullanımı)

 

Bir önceki iletide Vapoursynth'ın kurulumunu anlatmıştım, kurulumun nasıl yapılacağını bilmiyorsanız ilk önce lütfen bir önceki iletiyi okuyun.

Bir videoyu izleyebilmek için sıkıştırılmış video verisinin çözülmesi gereklidir. Sıkıştırılmış video verisine "raw bitstream" denir.

Bu raw bitstream'i okuyacak bir kütüphaneye ihtiyacımı vardır.

Benim en çok kullandıklarım "FfmpegSource2" ve "LWLibavSource"tur. 

Ben yukarıdaki anlatım videosunda örnek olarak LWLibavSource kullandım.

 

LWLibavSource kütüphanesini yüklemek için Vapoursynth ile yüklenen Vsrepo'yu kullanacağız. Vsrepo, vapoursynth'ın sunduğu hizmetlerden biridir. İhtiyacımız olan kütüphaneleri tek bir komut satırı komutu ile kolayca yüklememizi sağlar.

Windows komut satırını açın ve Vsrepo'nun sorunsuz çalıştığından emin olmak için komut satırına "vsrepo -h" yazıp enter'a basın. Aşağıdaki gibi bir çıktı alıyorsanız sorun yok demektir.

 

vsrepo01.png

 

 

Şimdi Vsrepo'nun kullanımı anlatayım.

 

Kütüphane/eklenti yükelemek için "install" argümanından sonra yüklemek istediğiniz kütüphane/eklenti isimlerini aralarında boşluk olarak sıralamalısınız.

 

vsrepo install eklenti_alan_ismi_1 eklenti_alan_ismi_2

 

Eğer ffms2'yi ve LWLibavSource'u aynı anda yüklemek istiyorsak aşağıdaki gibi yazmalıyız

 

vsrepo install ffms2 lsmas

 

Hangi kütüphaneleri/eklentileri yükleyebileceğiniz görmek için https://vsdb.top adresini ziyaret edin. Buradan yüklemek istediğiniz kütüphaneleri alan isimlerini (namespace) görebilirsiniz, vsrepo ile yükleme yaparken alan isimlerini (namespace) kullanılır.  https://vsdb.top adresini ziyaret etmek istemezseniz "vsrepo available" komutunu kullanabilirsiniz, komutun kullanımı aşağıdaki kısımlarda açıklanacaktır.

 

Yükleme komutunun sonunda şöyle bir çıktı göreceksiniz.

 

vsrepo03.png

 

Eğer yüklü tüm eklentileri listelemek istiyorsanız aşağıdaki komutu çalıştırın.

 

vsrepo installed

 

vsrepo04.png

 

Eğer silmek istediğiniz bir kütüphane varsa aşağıdaki komutu çalıştırın.

 

vsrepo uninstall eklenti_alan_ismi

 

vsrepo05.png

 

Vsrepo üzerinden Vapoursynth ile uyumlu ve yükleyebileceğiniz tüm kütüphaneleri/eklentileri listeleyip, bunların alan isimlerini (namespace) görmenizin bir yolu var.

 

Bunu yapmak için aşağıdaki komutu çalıştırın.

 

vsrepo available

 

vsrepo06.png

 

Aşağıdaki komutlar ile yüklü olan tüm kütüphanelerinizi güncelleyebilirsiniz.

Aşağıda verdiğim sıra ile çalıştırın.

 

vsrepo update
vsrepo upgrade-all

 

vsrepo07.png

 

Benim tüm paketlerim güncel olduğu için bu ekran görüntüsünde herhangi bir güncelleme görünmemektedir.

 

VirtualDub2 Kurulumu

 

Özel bir kurulum gerektirmez aşağıdaki adresten indiriğ, 32bit veya 64bit sürümlerinden kendinize uygun olanı çalıştırın.

VirtualDub2 indirme bağlantısı --> https://sourceforge.net/projects/vdfiltermod/

 

Videoyu Önizleme 

 

Encode edeceğimiz video için yazacağımız her script'in sonuçlarını videoyu encode etmeden gözlemleyebilmemiz gerekmektedir.

 

Video üzerinde herhangi bir filtre uygulamadan sadece videoyu açmak için kullanabileceğimiz iki kütüphaneden yazımın başında bahsetmiştim, "FfmpegSource2" ve "LWLibavSource".

Bunlar videonun sıkıştırılmış verisi olan raw bitstream'i zaman damgalarından arınmış şekilde çözer ve videoyu ön izlemenizi sağlar. Zaman damgalarından arınmış olması karmaşık scriptler yazmak süretiyle ugulayabileceğiniz pek çok filtrenin sonucunu videoyu encode etmeden gözlemlemenizi sağlar.

 

Zaman damgalrından arınmış olması videoyu encode ettikten sonra video üzerinde büyük sorunların yaratacağını düşünebilirsiniz ama böyle bir sorun yoktur eğer videonuzun frame-rate'i sürekli değişkenlik göstermiyorsa. Her ne kadar önemli konular olsa da zaman dalgasından arınmışlıkla ilgili diğer konular üzerinde duramam. Şimdiden "Video Önizleme ve Plugin Yükleme" başlığı altında yazmak istediklerimden çok fazlasını yazmış bulunmaktayım. Bu konular başka bir güne kalsın.

 

Şimdi ilk vapoursynth script'imizi yazalım ve videonun ön izlemesini VirtualDub2 programı üzerinden alalım. Oluşan dosyaya istediğiniz gibi isim verin.

 

İlk önce sağ tıklayarak açılan menüden bir "VapourSynth Python Script" dosyası oluşturun. Bu dosya notepad ile açılıp düzenlenebilecek türden dosyadır, diğer bir deyişle bir text dosyasıdır yani herhangi bir metin editörü ile düzenlenebilir, uzuntısının ".vpy" olduğuna bakmayın. Oluşan dosyaya istediğiniz gibi isim verin.

 

virdub01.png

 

Daha sonra VirtualDub2'yi çalıştırın program penceresinin yukarı tarafından "Tools" menüsünü bulun bu menüden "Script Editör"e tıklayın.

 

virdub02.png

 

Açılan Scrip Editor penceresinden "Edit" menüsünü bulun ve bu menüden "Script Handling" sekmesinden "VapourSynth"a tıklayın, artık Vapoursynth scriplerinizin ön izlemesini VirtualDub2  ile yapabilirsiniz.

 

virdub03.png

 

Script editor üzerinden aşağıdaki script'i çalıştıralım. Script Editorde script'iniz yazılıyken klavyenizden f5 tuşuna basarsanız script'inize göre şekil alan videonun ön izlemesi VirtualDub2 üzerinde görünür. Tabii aşağıda yazan script sadece mevcut videonuz ne haldeyse onu gösterecek kadar basit bir script.

 

from vapoursynth import core
video = core.lsmas.LWLibavSource(r"test_vid.mp4")
video.set_output()

 

virdub04.png

 

Bu iletide anlatacaklarım bu kadar, bundan sonra Vapoursynth çıktısını Ffmpeg ile encode etmeyi göstereceğim.

Edited by Kanpuu
Link to comment
Share on other sites

Vapoursynth Çıktısını Ffmpeg İle Encode Etme (Vspipe Kullanımı)

 

Vapoursynth ile yazdığımız script'e göre önizlediğimiz videoyu bir çıktı olarak bir encoder'a nasıl aktaracağımızı göstereceğim.

 

Biliyorsunuz ki videoları encode etmek için kullandığımız yazılıma encoder denir.

 

Ffmpeg kütüphanesi pek çok özelliğinin yanı sıra video encode etmek için gerekli x264 ve x265 encoderlarını bünyesinde barındırır. Ffmeg'in içindeki encoderları kullanmak için vapoursynth scriptinizin çıktısının "Vspipe" kullanarak Ffmpeg'in girdisi olmasını nasıl sağlayacağınızı göstereceğim.

 

Her şeyden önce bilgisayarınızda Ffmpeg'in kurulu olması gerekmektedir. Ffmpeg'i nasıl kuracağınızı aşağıdaki konuda anlattım.

 

Ffmpeg Rehberi 

 

 

Vspipe Nedir

 

Vspipe, Vapoursynth script'iniz sonucu oluşan görüntüyü encode edilebilmesi için bir encoder'a aktarmak için kullanacağımız araçtır.

Vspipe, Vapoursnth ile beraber bilgisayarınıza kurulur.

 

Vspipe Kullanıımı

 

Komut satırını açıp sadece "vspipe" yazarsanız sorunsuzca aşağıdaki gibi bir çıktı almanız gerekir.

 

vspipe01.png

 

Komut satırına aşağıdaki gibi yazarsanız scriptinizin bilgilerini görüntüleyebilirsiniz.

 

vsrepo --info my_script.vpy

 

vspipe02.png

 

Aşağıdaki gibi yazarsanız da vapousynth scriptinizin çıktısını ffmpeg'e girdi olarak verebilirsiniz.

 

vspipe --y4m my_script.vpy -| ffmpeg -i pipe: -c:v libx264 output_video.mkv

 

Encode işlemi başlayınca aşağıdaki resimdeki gibi gözükecektir.

 

vspipe03.png

 

Yukarıda görselde default x264 parametleri ile videoyu encode etmekteyiz. Halbuki bu işlem için istediğiniz encode parametrelerini kullanabilirsiniz. 

Encode parametrelerini kullanmak için "-c:v libx264"ten sonra "-x264-params" yazıp encode parametrelerinizi sıralayabilirsiniz.

Örneğin ben aşağıda en son kullandığım parametreleri paylaşayım.

 

vspipe --y4m my_script.vpy -| ffmpeg -i pipe: -c:v libx264 -x264-params threads=8:lookahead_threads=1:me_range=32:qcomp=0.65:qpmin=10:aq-strength=0.90:ref=4:bframes=8:b_adapt=2:subme=8:deblock=-1,-1:trellis=2:psy-rd=0.85:keyint=230:me=umh:chroma-qp-offset=-4:crf=15:vbv_maxrate=50000:vbv_bufsize=50000 my_video.mkv

 

  • Encode parametreleriniz kullandığınız encoder'a göre değişir. Hangi parametreyi nasıl kullanacağınız siz kalmıştır. Encoder'ların encode parametreleri için rehber yazmayacağım. Ama siz encoder'ların dokumentasyonlarını  okuyarak bu parametlerin anlamını öğrenip biraz da özel araştırmayla nasıl kullancağınızı öğrenebilirsiniz. Videolarınızı iyi encode etmek için buna ihtiyacınız var.
  •  
  • x264 dokumentasyonu --> http://www.chaneru.com/Roku/HLS/X264_Settings.htm
  • x265 dokumentasyonu --> https://x265.readthedocs.io/en/master/
  •  
  • Hangi encoderı kullanırsanız kullanın videonuzda iyi sonuçlar almak istiyorsanız, kullandığınız encoderın özelliklerinin anlamlarını biliyor olmanız gereklidir. Hangi parametreye ne değerleri vereceğinizi bilebilmeniz buna bağlıdır. 

En son olarak belli frame'ler arasını encode etmeyi göstereyim.

 

vspipe --y4m my_script.vpy --start 51 --end 9269 -| ffmpeg -i pipe: -c:v libx264 output_video.mkv

 

Yukarıdaki komut ile 51'inci frame ile 9269'uncu frame arasını encode edilmektedir. --start ve --end parametrelerine istediğiniz değerleri vererek siz de bu komutu kullanabilirsiniz.

(Yine burada da encode parametrelerini kullanmak için "-c:v libx264"ten sonra "-x264-params" yazıp encode parametrelerinizi sıralayabilirsiniz.)

Bu durum yazdığınız vapoursynth scriptinin encode ettikten sonra gerçekten nasıl sonuçlar verdiğini görmek istediğiniz videonun tamamını encode etmeyi beklemek yerine küçük bir yerini encode ederek hızlı sonuçlar almanızda kullanışlı olabilir.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...