X264 kodlama işlerini birden fazla bilgisayara dağıtmanın bir yolu var mı (kodlama hızını artırmak için)?


29

FPS kodlamasını artırmak için birçok bilgisayardaki (ağ üzerinden) x264 videoları kodlamanın güncel, etkin bir çözümünü bilen var mı?

Brownie, platformlar arası ve açık kaynak kodluyor, ancak hepinizin bildiği gibi, genellikle Windows kullanıyorum.


Duyduğum programlar ve neden uygun olduklarına inanmıyorum:

  • x264farm : Aktif olarak geliştirilmedi. İyi arayüz, ancak iki geçişli kodlamayı desteklemez ve yeni x264 sürümleriyle başarısız olur.
  • ELDER : Yine aktif olarak geliştirilmedi, ancak benim sorunum yeni x264 yapılarıyla çalışmadığı ve yapılandırılması çok zordu (okuma: rastgele çalışmayı durdurdu).

Aktif olarak geliştirilen bir programa kesinlikle ihtiyacım olmasa da , iki geçişli kodlamayı destekleyen ve yeni (x) x264 yapılarıyla çalışan bir program istiyorum .


Ek bilgi : Şimdiye kadar, iki yıl önce ilk gönderdiğimden beri bu soru için iki ayrı ödül teklif ettim (ve ödüllendirdim!) Ve hala bu soruna bir çözüm bulamadım. Temelde aradığım şey, bir LAN üzerinden bağlı birden fazla bilgisayarın işlem gücünü kullanarak x264 videoları kodlamama izin veren basit bir program. Ayrıca, yeni (x) x264 yapılarıyla çalışıp iki geçişli kodlamayı desteklemesi iyi olurdu.

Herhangi bir zamanda birisinin güncellenmiş bir cevabı veya bu soruna yeni bir çözümü varsa, lütfen gönderin ve bir miktar dikkate alınacaktır.


2016 Güncellemesi :

Bilgisayar / makine vizyonuyla yaptığım iş deneyiminin çoğundan sonra, çok sayıda paylaşılan veri / hafıza ve bunun getirdiği potansiyel darboğazla ilişkili ek yükün potansiyel faydalardan daha ağır basabileceğinin farkına vardım.

Her ne kadar birkaç cihazın boşta çalışma gücünü kullanmama izin verecek bir şey bulmayı çok isterdim, şimdilik, modern GPGPU tabanlı kodlayıcılar, gelişmiş / gerçek zamanlı kodlamaya ihtiyacınız varsa daha iyi bir yaklaşım olacaktır. Bu, bulut tabanlı video kodlama platformlarının çoğunun sağladığı şeydir (SaaS veya bulut bilgisayar kullanıyorsanız başka bir alternatif).


Hala bu konuda çalışıyorum. x264farm sadece render yöneticisidir, görünüşe göre x264'ün herhangi bir sürümünü köle bilgisayarlarına yerleştirebilmelisiniz. Bunu denedin mi ve yaptıysanız hangi hatalar ortaya çıkıyor?
Keck


1
Bunun eski bir konu olduğunun farkındayım, ancak kişisel deneyimimi paylaşmalıyım. Bir işi birden çok makineye dağıtmayın, bu zaman kaybettirir, birden çok çekirdeğe dağıtmak zaten performansı düşürür ve birden çok fiziksel işlemci vardır, daha sonra her biri IO sorunu ve gecikme süresi olan birden fazla makine vardır. Olduğu söyleniyor, sadece gerçekten ihtiyaç duyulduğunda kullanın, birden fazla dosya (iş) varsa, dosyaya göre dağıtın, Squeeze'nin yükü birkaç makineye dağıtabildiğine inanıyorum, ancak bu oldukça pahalı.
Shane Hsu

@ShaneHsu paylaştığınız için teşekkür ederiz. İlk dört yıl önce bu soruyu yazmış ve o zaman, bu işi yapmak için kullanıyordu makine değildi neredeyse çok daha fazla bu yolu gitmek için daha sonra tekrar anlamda yapılan bu yüzden, şu an olduğundan kadar güçlü. Bugün sizinle aynı fikirdeyim - eğer hız yapmak bir sorun olursa, tek bir işi birden fazla parçaya bölmek yerine tüm işi başka bir makineye boşaltmak en iyisidir (ve bir h.264 kodlayıcı örneğinin ilgilenmesine izin vermek en iyisidir) Gerekirse çok iş parçacıklı / çok çekirdekli kodlamalar).
Atılım

Aynı şeyi yapmak için bakıyorum, ama ne yazık ki bu iş parçacığı çoğunlukla yarı pişmiş çözümler ya da artık mevcut olmayan projelerle doludur. Bu işlemi yapma gereksiniminiz ortadan kalkmış gibi gözükse de, bu durumu en son güncellediğinizden bu yana olası çözümler hakkında daha fazla bilginiz varsa, lütfen bana bildirin.
Locksleyu

Yanıtlar:


6

Videonun ayrı parçalarını işleyebilir ve hepsini Kopyalama moduyla (kodlama yapmayan) birlikte dikmek için VirtualDub kullanabilirsiniz. Gerçek dağıtılmış kodlama veya herhangi bir şey değildir, ancak en basit çözümler bazen en iyi sonucu verir.


5
Yine, bu tek sorun orada olmasıdır edecektir video oluşturulurken nedeniyle G / B kareleri yerleşimi, kaliteli bir kayıp. Nerede bölüneceğini belirlemek için bir sahne algılama algoritması kullanılmalı ve bir şekilde videoyu tam olarak bu kareye bölmeniz gerekecek ...
Atılım

VirtualDub'da sahne anahtarı tespiti için kullanması gereken "yeşil ve kırmızı" simgeler bulunur. Birkaç yıl önceki hafızam bana doğru hizmet ederse, oldukça iyi çalıştı. Ama yine de, video ve video kodlama konusunda amatörüm.
Ivan Vučica

AFAIK VirtualDub "bir sonraki kareye git" komutuna sahiptir. Sadece manuel olarak bölerdim.
Camilo Martin

@Bağlantı Tek ihtiyacınız olan bir video girişini sahne değiştirme sınırlarındaki parçalara bölen bir filtredir (böylece bunlar ayrı ayrı kodlanabilir)? Bu kadar basit. Başka bir konu var mı?
GroovyDotCom

@GroovyDotCom buna ek olarak, tüm destekleyici yazılımlar (örneğin, bölme filtresini başlatan, kodlayıcıları çalıştıran tüm istemci düğümlerine dağıtan, işleri sıraya koyan, dosyaları ana sunucuya geri gönderen ve yeniden birleştiren bir sunucu) Sonuç) hala ele alınması gerekir ve bu yine de tek tek segmentlerde büyük bir video kodlama yöntemi ile herhangi bir potansiyel kalite / verimlilik sorununu ele almaz. Ayrıca, bu sorunun bu noktada neredeyse altı yaşında olduğuna dikkat edin, bu yüzden dağıtılmış kodlama konusunda o zamandan beri çok şey değiştiğinden eminim.
Atılım

4

Beta, ama işlevsel. O kadar basit değil, ama işe yarıyor. Windows tabanlı ve ücretsizdir.

BÜYÜKBAŞ bazı Doom9 adamlardan


2
Bunu da gördüm, ancak x264farm ile karşılaştırılabilir bir şey umuyordum - x264farm ile kalite çarpımı yaşanmadı ... Ayrıca, proje bir süredir terk edildi.
Atılım

1
O en yakın çözüm çünkü başlangıçta bu cevaba 50 puan ödül kazandı o zaman . Ancak, bu program, tek bir bilgisayar kodlayıcıya kıyasla bazı kalite kayıplarına sahipti. Kaliteden etkilenmekten kaçınmayı umuyorum.
Atılım

@Breakthrough Eğer biraz daha yüksek hedefliyorsanız,% 10 daha kötü hale getirirse ayarları (detay / çerçeve boyutu / etc)% 10 daha yüksek yaparsa ne olur?
tobylane

@ Tobylane, konu videoyu oluştururken I / B karelerinin yerleştirilmesiyle ilgilidir. Nerede bölüneceğini belirlemek için bir sahne algılama algoritması kullanılmalı ve bir şekilde videoyu tam olarak o kareye bölmeniz gerekecekti. Kaynak malzemeye bağlı olarak, bu işlemin mükemmel şekilde yapılması çoğu zaman imkansızdır ve bu nedenle bir videonun tümünü bir kerede kodlamak, genellikle parçalara dönüştürüldükten sonra daha iyi kalite sağlar.
Atılım

2
@Breakthrough x264, varsayılan olarak HD malzeme daha az olan maksimum 250 kare GOP'ye sahiptir. Bir zamanlar GOP'u kapatacak (eğer çırpmayacaksanız), ve eğer bir GOP'ın biteceği yerde kesilirseniz kalite kaybı olmayacak, ne yazık ki bu çok da öngörülebilir değil. Her durumda, 1,5 saatlik bir filmde 6 - 15 dakikaya bölünmüş. sahnedeki değişikliklerden ötürü topaklar çok fazla sıkıştırılabilirliğe zarar vermez. Ve yardımcı olur!
Camilo Martin

3

Ayrıca bunu kullanmayı deneyebilirsiniz, onun için bir paralel / dağıtılmış kodlama yazılımıdır ve pencereler için iyi çalışır ve iyi ölçeklenir.

Xcode Parallel enkoder için googling'i deneyin.

Bu bağlantılar daha fazla bilgi sağlamalıdır.

http://superscalar.pbworks.com/


İlişkisiz: Adlandırma, paralel derlemenin Xgrid ile nasıl çalıştığı hakkında Apple'ın Xcode belgesinden sökülmüş görünüyor. (Bir video kodlayıcısına karşı bir IDE)
Chealion

ic, ben bir mac kullanıcısı değilim ama bunu denemelisin, sadece windows üzerinde çalışıyor. Yaklaşık 10 GHz'lik birleşik işlem gücüne sahip bir kurulumum var ve 90 dakikalık bir video dönüşüm için ortalama 30-32 dakika sürer (x.264 / AAC / 1800 kbs vbr / 256 kbs ses).
dxblitzx

Cevabınız için teşekkürler. Bunu şu anki doğru cevaba değiştirdim, çünkü bu çözüm aradığım şeye en yakın olanı! :)
Atılım

2

Final Cut Studio kullanıcıları için (yalnızca Mac), x264 QuickTime bileşeni , QMaster kullanılarak oluşturulan küme ile kullanıldığında oldukça iyi çalışır. Filminizi Kompresöre yerleştirin ve uzağa gider. Testlerde, özellikle paylaşılan bir depolama noktasında çalışırken iyi bir hız artışı olduğunu gördüm.


3
Kahretsin ... Ben bir Windows kullanıcısıyım. Bu oldukça hoş görünüyor ve aradığım şeye benziyor - keşke çoklu platform olsaydı!
Atılım

2

Mac OS X 10.5 (10.6 için uyumluluğundan emin değilim) yerel ağınızda bir ızgara grubu kurmanıza izin veren VisualHub olarak kullanılıyordu . Şimdi artık üretilmiyor ve ReduxEncoder yerine geçti. Ancak bunun için seçenek bulamıyorum.


2

Windows video düzenleme için Sony Vegas'ın büyük bir hayranıyım ... ve Network Render adlı bir özellik var. :) Yums.

Sony Vegas İş Akışı

EDIT: Uygulanabilir bir çözüm olup olmadığından pek emin değil, ancak ağ oluşturmayı destekleyen bir video kodlama uygulaması bulmaya çalışmak yerine, herhangi bir uygulamanın dağıtılmış hesaplamanın avantajlarından yararlanmasını sağlayan bir yazılım bulmaya çalıştım. Ve bunu buldum - IAIDataShareServer .

Oldukça güçlü görünüyor ve yayınlanan örneklerin sonuçları gerçekten harika. Eğer deneyecekseniz, nasıl çalıştığını bize bildirin.

EDIT2: IAIDataShareServer, makinelere sadece bireysel görevleri yürütme talimatı veriyor gibi görünüyor. Bu ölçüde, diğer dağıtılmış bilgi işlem çözümleri için kaynak bulmaya çalıştım ve gelecek vaat eden birkaç çözümü listeledik.

  1. JPPF
  2. XOREAX
  3. DCEZ (Bu, iyi görünüyor)


1
@Breakthrough: hey dostum, olası yeni bir çözüm bulundu. Yine de kendim denemedim. Düzenlenmiş cevaba bakınız. İyi şanslar!
caliban

2
@scopedreams: Bunu gördüm ve anında mükemmel olduğunu düşündüm ... Ne yazık ki, dağıtılan veri paylaşımı, kendisine bağlı her bilgisayarda yalnızca program örnekleri çalıştırıyor - birçok müşterinin çalışması için kullanışlıdır , her müşterinin bir seferde tek bir işi ele alması ... Ama benim durumumda, sadece bir iş birçok bilgisayar arasında paralel olarak hesaplanması istiyorum.
Atılım

1
@Breakthrough: argh lanet, geri web sanırım.
kaliban

1
@Breakthrough: Dağıtılmış bilgi işlem istemcilerinin bir listesini sağlamak için cevabımı güncelledi. Yine denenmedi. Cevabımı kabul etme konusunda endişelenme, ben de kendim için yeni bir şeyler öğrenmek için yapıyorum. :)
caliban

1

basit gerçek şu ki, dünyadaki geliştiricilerin NON'u, şu anki x264 için şu anki x264 için istemci / sunucu yamaları kullanan dağıtılmış TCP: IP / UDP genel kodlama istemcisi / sunucu yamaları sunmaktan rahatsız olmak zorunda kaldı.

Genel istemci / sunucu modeli, temiz x264 kod tabanındaki gibi iyi anlaşılmıştır ve herhangi bir x264 kodunun netleştirilmesini istemek, x264 dev IRC kanalına katılmak ve genellikle bir x264 Dev anahtarına sahip olacak dakikalar içinde sormak için basit bir sorundur. ya da iki kişi, bu kod bölümünün nasıl çalıştığı konusundaki sorgunuzu yanıtlar ve hatta gelişen kodunuzu x264'e (ve x262 üzerinde çalışılan x264 dünya sınıfı çerçevesine dayanan yeni bir Mpeg2 kodlayıcısına daha iyi uyacak şekilde nasıl yeniden yazabileceğiniz konusunda pratik fikir edinin) şimdi) modeli.

Eğer bir Geliştiriciniz o zaman kalite ve mesleğin geleceği için yapabileceğiniz en iyi şey 32/64 bit x264 dağıtılmış video kodlaması aslında bu gerekli temel istemci / sunucu yamasını x264 veya ayrı bir web / GUI örneği yapmak için yazmaktır. Bu yeni istemci / sunucu x264 API koduyla uygulama arayüzü, etkin bir şekilde arama yapmak ve tek bir videonun ayrı kodlama bölümlerini yazmak için atadığınız ve anında ilettiğiniz tüm eşleşen yeni yönetilen x264 müşteri kodlarına iletin.

yeni istemcilerinizin / sunucunuzun gerçekten kodlanmış temel kod eklerini test etmesi ve kullanması için en büyük, sadece basit fakat çalışan ve tam olarak çalışan bir C kodu olması gerekmez, doom10.org/index.php?action=unread

Bu nedenle, x264 dev'in yapmayı sevdiği bir şey var ve bu, mevcut yavaş C kodunu alıyor ve optimize edilmiş versiyonlarını bölüm bölüm yazıyor; son şube OC

içine bakmaya değer olmalı ve aslında bu x264 sunucusunu bugün birçok x264 istemcisine bağlayan x264 sunucusuna kodlamak için çaba sarf etmek için çaba sarf etmek gerekiyor. 264 hesaplama yoğun profili artık herkes için ücretsiz olarak x264 ile eklendi).

çok yakında montajla ekstra hız için optimize edilecek http://mailman.videolan.org/pipermail/x264-devel/2010-Ekim/007858.html

ancak tek bir 8 çekirdekli makine bile 1080P ile makul bir sürede en yüksek kalitede çıktı sağlamak için mücadele edecek ve yakında 2K ve 4K süper yüksek Def vb. bir ya da iki uzakta

eğer bir dev, LÜTFEN beklemeyin, bugün yapın.


Aslında, bunu yapmayı düşündüm. Asıl sorun aslında hesaplamaları yapmak için iki bilgisayar almak değil, çalışma setini makineler arasında aktarmak. Verileri tek bir makinede (saniyede çok sayıda gigabaytta) RAM içine ve dışına taşımak çok daha kolaydır, ancak bir LAN üzerinde daha yavaştır (saniyede 100 megabaytta maksimuma çıkar).
Atlama

1

Medya Kodlama Kümesine bakabilirsiniz :

Medya Kodlama Kümesi, dağıtılmış Medya (Video ve Ses) Kodlaması için C / C ++ ile yazılmış ilk Açık Kaynak Küme Kodlama Çözümüdür.

Medya Kodlama Kümesi, yüksek oranda sıkıştırılmış videonun (örneğin MPEG4 ve H.264) kodlamasını dağıtmak amacıyla normal PC'lerin işlem gücünden yararlanmak için hafif eşler arası bir ızgara kullanan, genişletilebilir bir video kodlayıcıdır.

Video Üzerindeki Bileşenleri Ağ Üzerinden İstemci Düğümlerine dağıtır ve Dosya Başına Kodlama Süresini azaltmak için bir Dosya için Kodlama Görevini birden fazla Bilgisayar üzerinde paralelleştirir.

Diğer bir yaklaşım ile Nvidia için sunulan Badaboom da gözden (deneme ile $ 39,99), burada :

Elemental Badaboom, küflü eski işlemciniz yerine GPU'yu kullanarak DVD rip işlemlerinin büyük bir kısmını yapmak için Nvidia'nın CUDA arayüzünü kullanıyor.

Aynı şekilde, wikipedia'da açıklanan ATI Radeon için Avivo Video Dönüştürücü de var .


@Breakthrough: Bu ürünlere baktınız mı?
harrymc

1

Bir miktar öneri önerisi olsa da, Rhozet Carbon Server, tarif ettiğiniz iş için birden fazla Carbon Coder örneğini bir araya getirebilir.

Rhozet Carbon Server Web Sitesi

Birden fazla Carbon Coder düğümü, bir veya daha fazla Carbon Servers tarafından kontrol edilen bir kodlama çiftliği olarak yapılandırılabilir. Carbon Server, yüksek hacimli kodlama görevlerinin otomatik olarak işlenmesini, Carbon Coder düğümlerinin sunucu kontrollü yerine çalışmalarının yanı sıra iş dağılımını, iş önceliklendirmesini, yük dengelemeyi, FTP aktarımını, durum izlemeyi ve iş bildirimini yönetmeyi sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.