3 puan yazan GN⁺ 2024-08-18 | 1 yorum | WhatsApp'ta paylaş
  • mpv, komut satırı odaklı, özgür ve açık kaynaklı bir medya oynatıcıdır; çeşitli medya dosyası biçimlerini, ses ve video codec'lerini ve altyazı biçimlerini destekler
  • Güçlü scripting özellikleri ve kullanıcı script koleksiyonları sayesinde varsayılan oynatıcıyı istediğiniz şekilde genişletmek kolaydır
  • Minimal tasarımını koruduğu için ayrı bir GUI yoktur, ancak videonun üzerinde temel işlemleri yapmayı sağlayan küçük bir ekran üstü denetleyici sunar
  • OpenGL, Vulkan ve D3D11 tabanlı yüksek kaliteli video çıkışı ile donanım kod çözme API desteği sayesinde farklı ortamlarda oynatma kalitesi ayarlanabilir
  • En baştan kütüphane entegrasyonu düşünülerek tasarlanmış bir C API'si vardır; bu sayede mpv başka uygulamaların içine yerleştirilerek kullanılabilir

Komut satırı odaklı medya oynatıcı

  • mpv, komut satırından kullanılan özgür bir medya oynatıcıdır
  • Çeşitli medya dosyası biçimlerini, ses ve video codec'lerini ve altyazı biçimlerini destekler

Scripting ve kontrol yöntemleri

  • Scripting özelliğiyle oynatıcının davranışı geniş ölçüde genişletilebilir
  • Minimalizmi hedeflediği için ayrı bir GUI sunmaz
  • Temel kontroller için videonun üzerinde gösterilen küçük bir ekran üstü denetleyici kullanılabilir

Video çıkışı ve kod çözme

  • OpenGL, Vulkan ve D3D11 tabanlı video çıkışı sunar
  • Video meraklıları için oynatma özellikleri de içerir
    • Yüksek kaliteli algoritmalara dayalı video ölçekleme
    • Renk yönetimi
    • Kare zamanlaması
    • Enterpolasyon
    • HDR
  • Çoğu platformda birden fazla donanım kod çözme API'sinden yararlanılabilir
  • Donanım kod çözme, çalışma sırasında gerektiğinde etkinleştirilebilir

Uygulama entegrasyonu ve geliştirme durumu

  • mpv, başka uygulamalara kolayca entegre edilebilmesi için en baştan bir C API tasarlamıştır
  • Proje aktif olarak geliştirilmektedir; odak noktası kod refactoring ve düzenleme ile özellik eklemedir
  • Özellik istekleri veya yamalar mpv GitHub issues üzerinden gönderilebilir

İlgili kaynaklar

1 yorum

 
GN⁺ 2024-08-18
Hacker News görüşleri
  • mpv harika bir medya oynatıcı. Oldukça minimal, performansı iyi ve yapması gereken işi doğru yapıyor.
    Yazarın locale konusunda öfkesini döktüğü harika bir commit de var: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... Gülerek okunmaya değer.

    • Kulağa garip gelebilir ama bu tür sorunlardan kaçınabilmek, Go, Rust, Swift gibi yeni dillerin sağladığı en büyük üretkenlik artışlarından biri olabilir. Yeni ekosistemler standart kütüphaneyi baştan yapma fırsatı elde ediyor ve locale ya da UTF-16 gibi, daha iyisi bilinmeden önce yapılmış korkunç miras tercihleri geride bırakabiliyor.
      Zig, Go, Rust vb. birçok dilin standart kütüphaneleri, C standart kütüphanesinin ya da POSIX API'lerinin çok ilerisinde. Tek başına bu bile onları kullanmak için yeterli sebep.
    • Uzun ve bilgilendirici bir yazı; içinde biraz küfür de var. Şiddetle tavsiye ederim.
      Spolsky 25 yıl önce “everything you wanted to know about Unicode and character sets” başlıklı bir yazı yazmıştı; Unicode/UTF sonrası dünyadan başka bir şey görmemiş kişiler için bile faydalı olabilir.
    • C locale API'sinin bozukluğu gibi errno için de böyle yapıldığını hayal edin denmesine ilişkin olarak, bunun gerçekten böyle olduğu bir örnek var: localtime, localtime_r, tzset gibi zaman fonksiyonları.
      Locale'e bağımlı olduğu için locale'e komşu bir alan sayılır; ancak saat dilimi de global state olduğundan, POSIX'e taşınabilir çok iş parçacıklı C kodunda yalnızca standart API'lerle başka bir saat dilimindeki zamanı elde etmek imkânsızdır.
    • “C locale ve wchar_t ikisi de bozuk, miras kalmış beyin ölümü durumlarıdır. C/POSIX standart komitesinde yetkin biri olsaydı çoktan terk edilmiş ya da kaldırılmış olurlardı. gets() kaldırılmadı mı? Bilmeyenlere hakaret gibi gelebilecek bu duygusal patlamayı gerekçelendirmek için uzun bir yazı yazacağım. Sert ifadelerden rahatsız olanlar bunu dini bir metin gibi düşünsün.”
      Gerçekten efsanevi.
    • O commit'in yazarının birkaç yıldır mpv geliştirmesi ile ilgisi olmadığını bilmekte fayda var.
  • Birkaç yıl önce Linux'ta kullanmaya başladım; artık Android tabletim dahil tüm cihazlarımda yüklü. Kusursuz. Minimal varsayılanlar, makul ayarlar, yüksek hız; sadece düzgün çalışıyor.
    Hatta SSH üzerinden yerel oynatma bile yapabiliyor, bu harika: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Yakın zamanda videoyu döndürmek için bir kısayola ihtiyacım oldu; diğer oynatıcılarda kolay görünmüyordu, mpv'de ise input.conf dosyasına r cycle_values video-rotate "90" "180" "270" "0" eklemek yeterli oldu.

    • HTTP üzerinden de video oynatabiliyor ve YouTube dahil birçok web sitesini destekliyor: mpv
  • Linux kullanıyorsanız donanım hızlandırmayı açmak için mpv.conf dosyasına hwdec=auto eklemeyi unutmayın. AMD/Intel/NVIDIA üzerinde çalışıyor.
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Meğer yıllardır mpv ile videoları donanım hızlandırma olmadan izliyormuşum. Bunu okuduğuma sevindim.
    • Ben şu şekilde ayarlayıp kullanıyorum: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Vulkan video çalışmazsa hwdec=vulkan yerine hwdec=vaapi kullanılabilir.
    • Bunun neden varsayılan olarak kapalı olduğunu merak ediyorum.
    • Nedenini tam bilmiyorum ama Fedora'da, muhtemelen kernel 6.10 ve Vega 64 kombinasyonunda performansın daha da kötüleştiği, gecikme ve takılma yaşandığı çok sorun gördüm. Her yıl bir kez tekrar deniyorum ama pek iyi gitmediği için yine vazgeçiyorum.
    • Az önce pacman ile mpv kurup 4K bir video açtım; CPU fanı hemen dönmeye başladı ve top içinde birden çok çekirdeğin kullanıldığını gördüm. Bu HN yazısında aşağı inmeye devam ederken hwdec=autoyu öğrendim.
      mplayer ve VLC kullanmış biri olarak aklıma hemen gelen soru şu: “Bakımcılar bunu varsayılan yapmayarak hangi trade-off'u göze almaya çalışıyor?”
  • Bu proje çok eski bir soyağacına sahip; eskiden mplayer olarak biliniyordu. 2001'e kadar uzanan 500 bin commit'i var; üstelik bu, CVS deposunun Subversion'a dönüştürülmesinden sonraki dönem için geçerli.
    Ubuntu çalıştıran fansız Minix z100 üzerinde streamlink ile mpv'yi birlikte kullanmak, Olimpiyat izleme deneyimi için neredeyse mükemmeldi.
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • mplayer ile mpv'nin aynı şey olduğunu söylemek zor. mpv'nin mplayer ve benzerlerinden fork edildiği doğru, ancak mplayer hâlâ ayrı bir proje.
  • Aptalca gelebilir ama kişisel olarak temel özellik, birden fazla altyazıyı aynı anda gösterebilmesi. Parça, ofset, konum, boyut vb. birkaç kısayolla kolayca ayarlanabiliyor
    Hiçbir yayın servisi bunu sunmuyor ve kullanıcının konumuyla “ilgili olmadığını” düşündükleri altyazı dillerini aktif olarak gizliyorlar. Böyle bir hizmete saygı duymak zor

    • Gerçekten harika bir özellik. Kısayolları da doğru dürüst ezberlemedim, muhtemelen ezberlemem gerekecek ama --sid1= ve --sid2= ile başlamak yeterince iyi çalışıyor
      Eşim de ben de ana dili İngilizce olan kişiler değiliz ve ana dillerimiz de farklı. Ben İngilizce konusunda oldukça rahatım ama bazı lehçeler zor geliyor; ses gürültülü olduğunda da kelimeleri kaçırabiliyorum, bu yüzden İngilizce altyazıyı tercih ediyorum. Eşim ise kendi ana dilindeki altyazıyı seviyor
      Birden fazla altyazı gösterebilmek, ekranda biraz yer harcama pahasına ikimize de istediğimiz izleme deneyimini sağlıyor; buna fazlasıyla değiyor
    • mpv altyazı işleme konusunda güçlü. Altyazı parçaları arasında geçiş yapıp konumu ayarlayabilmenin yanı sıra, videoyu oynatırken harici altyazı dosyalarını otomatik olarak bulup oynatabiliyor
      Bunun hakkında yazmıştım: https://www.baeldung.com/linux/mpv-subtitles-automatic. Ancak desteklenen altyazı biçimleriyle ilgili belgelerin yetersiz olması üzücüydü; gerçekten hangi biçimlerin desteklendiğini görmek için ffmpeg koduna bakmam gerekti
      Ayrıca https://subdl.com/ ve https://github.com/alexanderwink/subdl komut satırından altyazı bulmak ve indirmek için iyi kaynaklar
    • Özellikle dil öğrenimi için bu tür özellikler çok iyi. Ama Amazon gibi servisler, gerçekte yaklaşık 30 altyazıya sahipken yalnızca İngilizce ve yerel dil gibi iki tanesini gösteriyor. Altyazı ile dublaj arasındaki fark konusuna hiç girmeyeceğim
    • Konumla “ilgili olmayan” altyazı dillerini gizlemek, yasal meselelerden veya ilgili içerik hak sahibi ya da altyazı sağlayıcısıyla yapılan sözleşme kısıtlarından kaynaklanıyor olabilir
  • mpv her zaman iyi çalıştı ve önüne atılan neredeyse her şeyi kolayca halletti
    Şimdi değişmiş olabilir ama birkaç yıl önce ilk karşılaştığımda bu projeyi diğer oynatıcılardan ayıran şey, doğruluğa ve doğru oynatmaya çok önem verdiği izlenimiydi. Örneğin VLC’de renk üretiminin biraz tuhaf olması gibi garip sorunlar gösteren dosyalar mpv’de kusursuz oynatılmıştı

    • VLC’de garip sorunlar çıkarken mpv’de kusursuz oynatılması çok eskiden beri olan bir şey. 2000’lerin başındaki MPlayer döneminde de böyleydi
      Gerçi nedenini pek bilmiyorum. Çünkü ikisinin de birçok codec için genel olarak aynı kütüphanelere dayandığını düşünüyorum
    • VLC’nin fiilen kurşun geçirmez denecek kadar her dosyayı oynatabildiği düşünülürse, mpv’nin de o seviyeye çıkmış olması sevindirici
    • mpv’de “HDR” medyaları oynatırken renk sunumunda oldukça büyük bir sorun vardı
  • mpv harika. Sırasından bağımsız olarak tavsiye edilebilecekler: Seeds of Might/JySzE’nin temel mpv.conf dosyası, özellik açısından zengin ama hâlâ minimalist bir UI olan uosc, uosc veya başka özel UI’larla birlikte kullanılan hızlı küçük resim oluşturucu thumbfast, ses tabanlı olarak açılışları vb. atlayan Eisa01’in SmartSkip’i
    [1] Windows: https://gist.github.com/JySzE/db4149cad726b3b6955dca8d47a197..., macOS: https://gist.github.com/JySzE/34ee131da3974811a9469e1e3b7d4d...
    [2] https://github.com/tomasklaen/uosc
    [3] https://github.com/po5/thumbfast
    [4] https://github.com/Eisa01/mpv-scripts#smartskip

    • O eklenti üzerindeki emeği küçümsemek istemem ama bu, açılış atlamanın “temel” bir uygulaması
      Açılışları veya kapanış jeneriklerini güvenilir biçimde bulmak için yerel olmayan analiz gerekiyor. Temelde bir sezon ya da tüm yapımın bölümleri arasında ortak olarak görünen ses bölümlerini bulmak gerekiyor
      Bunu yapabilen bir CLI aracı yaptım ama aslında “tamamlanmış” durumda değil ve muhtemelen hiçbir zaman da olmayacak. İlk hedefim bir Jellyfin eklentisi geliştirmekti; sonra zaten böyle bir eklenti olduğunu öğrendim
      https://github.com/aksiksi/needle
  • Mevcut en iyi medya oynatıcı. Harika minimalist UI, donanım hızlandırmadan yararlanması ve sadece videoyu oynatması hoşuma gidiyor
    Sürekli bu kadar iyi olduğu için muhtemelen hayatım boyunca korsan içeriğe yönelmemin nedenlerinden biri olacak. Yayın servisleri oynatıcılarına milyonlarca dolar harcıyor ama yine de bu seviyeye yaklaşamıyor

    • YouTube, uygulama indirmeye ve Premium’a yükseltmeye teşvik etmek için web oynatıcısını bilerek zayıflatıyor gibi görünüyor
  • MPV’nin çok yönlü betikleri var. Örneğin izlediğiniz videoyu kesebilir veya kırpabilirsiniz[1]
    Diğer oynatıcılarda görmediğim işlevleri kısayol olarak da ekleyebilirsiniz. Bazen izlediğim sahnenin parlaklığını ve rengini normalize etmek için input.conf içine n vf toggle normalize=smoothing=100 yazıyorum; ancak donanım kod çözme kullanıyorsanız çalışmayabilir
    Video döndürme ise Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0" şeklinde ayarlanıyor
    [1] <https://github.com/occivink/mpv-scripts>

    • Kişisel olarak MPV’yi çoğunlukla FLAC dosyalarından oluşan müzik kitaplığımı çalmak için kullanıyorum ve JS ile yaptığım bir eklenti[1] sayesinde çalma geçmişini listenbrainz.org’a gönderiyorum. Çok basit ama son birkaç aydır sorunsuz çalıştı
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv’nin sağlam bir Lua betik arayüzü de var. Golang ve Lua ile bir araç geliştirip mpv’nin torrent dosyalarını ve magnet bağlantılarını HTTP bağlantıları gibi işlemesini sağladım; bunun sonucunda torrentleri doğrudan stream etmek mümkün oluyor
      Pek bilinmeyen bir nokta: mpv yalnızca YouTube videolarını stream etmekle kalmıyor, CLI’da mpv ytdl://ytsearch:query ile YouTube araması da yapabiliyor
      Ayrıca ASCII, sixel ve kitty görüntü protokolünü kullanarak videoları terminalin içinde doğrudan oynatmak da mümkün; bunlar arasında kitty görüntü protokolü kalite açısından açık ara en iyisi
  • Şimdiye kadar mpv’de en sevdiğim özellik, içeriklere gerçek zamanlı olarak CRT shader uygulanabilmesi. Bu yöntem HD videoyu gerçekten 240p’lik bir arabelleğe doğru şekilde downscale ediyor, ardından shader’ın ekran çözünürlüğüne göre upscale işlemini yapmasını da sağlıyor
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders