Gibt es eine Möglichkeit, x264-Codierungsaufträge auf mehrere Computer zu verteilen (um die Codierungsgeschwindigkeit zu erhöhen)?

29

Kennt jemand eine aktuelle, aktive Lösung zum Codieren von x264-Videos auf vielen Computern (über das Netzwerk), um die FPS für die Codierung zu erhöhen?

Brownie-Punkte für Cross-Plattform und Open Source, aber damit Sie alle wissen, verwende ich normalerweise Windows.


Programme, von denen ich gehört habe und warum ich sie nicht für geeignet halte:

  • x264farm : Nicht aktiv entwickelt. Gute Schnittstelle, unterstützt jedoch keine Codierung mit zwei Durchläufen und schlägt mit neueren x264-Builds fehl.
  • ELDER : Wieder nicht aktiv entwickelt, aber mein Problem war, dass es mit neuen x264-Builds nicht funktionierte und dass es sehr schwierig zu konfigurieren war (lesen Sie: zufällig aufgehört zu arbeiten).

Ich brauche zwar nicht unbedingt ein Programm, das gerade aktiv entwickelt wird, aber ich hätte gerne ein Programm, das die Codierung in zwei Durchgängen unterstützt und mit neuen (er) x264-Builds arbeitet .


Zusätzliche Informationen : Bisher habe ich zwei unterschiedliche Prämien für diese Frage angeboten (und vergeben!), Seit ich sie vor über zwei Jahren zum ersten Mal veröffentlicht habe, und ich habe immer noch keine Lösung für dieses Problem gefunden. Was ich im Grunde suche, ist ein einfaches Programm, mit dem ich x264-Videos mit der Rechenleistung mehrerer Computer, die über ein LAN verbunden sind, kodieren kann. Darüber hinaus wäre es schön, wenn es mit neuen (er) x264-Builds funktioniert und die Codierung mit zwei Durchgängen unterstützt.

Wenn jemand zu irgendeinem Zeitpunkt eine aktualisierte Antwort oder eine neue Lösung für dieses Problem hat, posten Sie diese bitte, und es wird eine Überlegung angestellt.


Update 2016 :

Nach einem Großteil meiner Berufserfahrung mit Computer / Machine Vision habe ich festgestellt, dass der mit der großen Menge gemeinsam genutzter Daten / Speicher verbundene Overhead und der potenzielle Engpass die potenziellen Vorteile überwiegen könnten.

Während ich immer noch gerne etwas finden würde, das es mir ermöglicht, die ungenutzte Rechenleistung mehrerer Geräte zu nutzen, sind moderne GPGPU-basierte Encoder ein viel besserer Ansatz, wenn Sie eine verbesserte / Echtzeit-Codierung benötigen. Dies ist, was die meisten cloudbasierten Videokodierungsplattformen bieten (eine weitere Alternative, wenn Sie sich für SaaS oder Cloud Computing interessieren), wenn auch in größerem Maßstab.

Durchbruch
quelle
Ich arbeite immer noch daran. x264farm ist nur der Render-Manager. Anscheinend sollten Sie in der Lage sein, eine beliebige Version von x264 auf dem Slave-PC zu platzieren. Haben Sie dies versucht, und welche Fehler treten auf, wenn Sie dies getan haben?
Keck
1
Mir ist klar, dass dies ein alter Thread ist, aber ich denke, ich sollte meine persönlichen Erfahrungen teilen. Verteilen Sie einen Auftrag nicht auf mehrere Computer, da dies Zeitverschwendung ist. Die Verteilung auf mehrere Cores verringert bereits die Leistung, und es gibt mehrere physische Prozessoren und mehrere Computer, die jeweils ein E / A-Problem und eine Latenz aufweisen. Davon abgesehen, verwenden Sie es, wenn es nur wirklich gebraucht wird, wenn es mehrere Dateien (Jobs) gibt, die sich nach Dateien verteilen. Ich glaube, Squeeze kann die Last auf mehrere Maschinen verteilen, aber das ist ziemlich teuer.
Shane Hsu
@ ShaneHsu danke für das Teilen. Ich habe diese Frage vor über vier Jahren zum ersten Mal geschrieben, und damals war die Maschine, mit der ich diese Arbeit erledigte, bei weitem nicht so leistungsfähig wie die, die ich jetzt habe. Daher war es damals viel sinnvoller, diesen Weg zu gehen. Heute muss ich Ihnen zustimmen - wenn die Rendergeschwindigkeit ein Problem darstellt, ist es am besten, den gesamten Job auf einen anderen Computer zu verlagern, anstatt einen einzelnen Job in mehrere Chunks aufzuteilen (und sich um eine Instanz des h.264-Encoders zu kümmern ggf. Multithread- / Multicore-Codierung).
Durchbruch
Ich versuche das Gleiche zu tun, aber leider sieht es so aus, als ob dieser Thread hauptsächlich mit halbherzigen Lösungen oder Projekten gefüllt ist, die es nicht mehr gibt. Obwohl es so aussieht, als ob Ihr Bedarf nachgelassen hat, lassen Sie es mich bitte wissen, wenn Sie seit der letzten Aktualisierung weitere Informationen zu möglichen Lösungen haben.
Locksleyu

Antworten:

6

Sie können separate Teile des Videos rendern und VirtualDub verwenden, um alle Teile zusammen mit dem Kopiermodus (in dem keine Codierung erfolgt) zusammenzufügen. Es ist keine echte verteilte Codierung oder so, aber die einfachsten Lösungen funktionieren manchmal am besten.

Ivan Vučica
quelle
5
Auch hier ist das einzige Problem dabei , dass es wird ein Qualitätsverlust sein, aufgrund der Anordnung des I / B - Frames , wenn die Video - Rendering. Ein Szenenerkennungsalgorithmus müsste verwendet werden, um zu bestimmen, wo es aufgeteilt werden soll, und irgendwie müsste das Video genau an diesem Frame aufgeteilt werden ...
Durchbruch
VirtualDub verfügt über die "grün-roten" Symbole, die zur Erkennung von Szenenwechseln dienen sollen. Wenn mein Gedächtnis von vor ein paar Jahren mir richtig dient, hat es ganz gut funktioniert. Andererseits bin ich ein Amateur, wenn es um Video und Videocodierung geht.
Ivan Vučica
AFAIK VirtualDub hat einen Befehl "Gehe zum nächsten Frame". Ich würde es einfach manuell teilen.
Camilo Martin
@Breakthrough Alles, was Sie brauchen, ist ein Filter, der einen Videoeingang an Szenenänderungsgrenzen in Blöcke aufteilt (sodass diese dann separat codiert werden können). Das ist einfach genug. Gibt es noch ein anderes Problem?
GroovyDotCom
@GroovyDotCom auch darüber hinaus die gesamte unterstützende Software (z. B. ein Server zum Initiieren des Aufteilungsfilters, Verteilen an alle Clientknoten, auf denen Encoder ausgeführt werden, Einreihen der Aufträge, Übertragen der Dateien zurück zum Hauptserver und Zusammenführen der Ergebnis) muss noch behandelt werden, und dies behebt noch keine potenziellen Qualitäts- / Effizienzprobleme bei der Codierung eines großen Videos in einzelnen Segmenten. Beachten Sie auch, dass diese Frage zu diesem Zeitpunkt fast sechs Jahre alt ist. Ich bin sicher, dass sich seitdem auch in Bezug auf die verteilte Codierung viel geändert hat.
Durchbruch
4

Es ist Beta, aber funktionsfähig. Es ist nicht ganz so einfach, aber es funktioniert. Es ist Windows-basiert und kostenlos.

ELDER von einigen Doom9-Jungs

Keck
quelle
2
Ich habe das auch gesehen, habe aber auf etwas gehofft, das mit x264farm vergleichbar ist - es gibt keinen Qualitätsverlust bei x264farm ... Außerdem wurde das Projekt für einige Zeit aufgegeben.
Durchbruch
1
I ausgezeichnet ursprünglich eine 50 - Punkte - Prämie auf diese Antwort, weil es in der Nähe Lösung war zu dieser Zeit . Dieses Programm hatte jedoch im Vergleich zu einem Einzelcomputer-Encoder einen gewissen Qualitätsverlust. Ich hoffe, den Qualitätsverlust zu vermeiden.
Durchbruch
@Breakthrough Was passiert, wenn Sie ein bisschen höher zielen, beispielsweise, wenn es 10% schlechter wird, wenn die Einstellungen (Detail / Rahmengröße / usw.) 10% höher sind?
Tobylane
@tobylane, das Problem ist die Platzierung von I / B-Frames beim Rendern des Videos. Ein Szenenerkennungsalgorithmus müsste verwendet werden, um zu bestimmen, wo es aufgeteilt werden soll, und irgendwie müsste das Video genau an diesem Frame aufgeteilt werden. Abhängig vom Quellmaterial ist dies oft nicht perfekt möglich, und das Codieren eines ganzen Videos auf einmal liefert normalerweise eine bessere Qualität als das Rendern in Stücken.
Durchbruch
2
@Breakthrough x264 hat standardmäßig eine maximale GOP von 250 Bildern, bei HD-Material sogar noch weniger. Irgendwann wird die GOP geschlossen (es sei denn, Sie passen sie nicht an), und dann kommt es zu keinem Qualitätsverlust, wenn Sie genau dort schneiden, wo eine GOP enden würde. Leider ist dies nicht sehr vorhersehbar. In jedem Fall in einem 1,5-stündigen Film, der in 6 15-min aufgeteilt wird. Brocken direkt bei Szenenwechseln würden die Kompressibilität nicht wesentlich beeinträchtigen. Und es hilft!
Camilo Martin
3

Sie können auch versuchen, dies zu verwenden, eine parallele / verteilte Codierungssoftware für Windows, die gut funktioniert und sich auch gut skalieren lässt.

Probieren Sie xcode Parallel Encoder aus.

Diese Links sollten weitere Informationen enthalten.

http://superscalar.pbworks.com/

dxblitzx
quelle
Unabhängig: Die Benennung wurde direkt aus Apples Xcode-Dokument über die Funktionsweise der parallelen Kompilierung mit Xgrid übernommen. (Eine IDE im Vergleich zu einem Video-Encoder)
Chealion
ic, ich bin kein Mac-Benutzer, aber Sie sollten dies versuchen, funktioniert aber nur unter Windows. Ich habe ein Setup mit ca. 10 GHz kombinierter Rechenleistung und ein 90 Minuten langes Video benötigt durchschnittlich 30-32 Minuten für die Konvertierung (x.264 / AAC / 1800 kbs vbr / 256 kbs Audio).
dxblitzx
Danke für Ihre Antwort. Ich habe dies auf die aktuell richtige Antwort geändert, da diese Lösung der von mir gesuchten am nächsten kommt! :)
Durchbruch
2

Für Benutzer von Final Cut Studio (nur Mac) funktioniert die x264-QuickTime-Komponente besonders gut, wenn sie mit einem mit QMaster erstellten Cluster verwendet wird. Laden Sie Ihren Film in Compressor und los geht's. In Tests habe ich deutliche Geschwindigkeitssteigerungen festgestellt, insbesondere bei der Arbeit an einem gemeinsam genutzten Speicherpunkt.

Chealion
quelle
3
Verdammt ... ich bin ein Windows-Benutzer. Das sieht aber ziemlich cool aus und ähnelt dem, was ich suche - ich wünschte nur, es wäre Multi-Plattform!
Durchbruch
2

Für Mac OS X 10.5 (ich bin nicht sicher, ob es mit 10.6 kompatibel ist) gab es früher VisualHub , mit dem Sie eine Grid-Farm in Ihrem lokalen Netzwerk einrichten können. Jetzt wird es eingestellt und ReduxEncoder wird als Ersatz angezeigt , aber ich kann die Optionen dafür anscheinend nicht finden.

Tiago Veloso
quelle
2

Ich bin ein großer Fan von Sony Vegas für Windows-Videobearbeitung ... und es gibt eine Funktion namens Network Render. :) Yums.

Sony Vegas Workflow

BEARBEITEN: Ich bin mir nicht sicher, ob dies eine praktikable Lösung ist, aber anstatt zu versuchen, eine Videokodierungsanwendung zu finden, die Netzwerk-Rendering unterstützt, habe ich versucht, eine Software zu finden, mit der jede Anwendung die Vorteile von verteiltem Computing nutzen kann. Und ich habe dies gefunden - IAIDataShareServer .

Es sieht ziemlich mächtig aus und die Beispielergebnisse sind wirklich großartig. Wenn Sie es versuchen wollen, lassen Sie uns wissen, wie es funktioniert?

EDIT2: IAIDataShareServer scheint nur Maschinen anzuweisen, einzelne Aufgaben auszuführen. Insofern habe ich versucht, andere verteilte Computerlösungen zu finden und einige vielversprechende aufzulisten.

  1. JPPF
  2. XOREAX
  3. DCEZ (Dieser sieht gut aus)
Kaliban
quelle
3
Bist du dir da sicher? forums.creativecow.net/thread/24/895788
Durchbruch
1
@Breakthrough: Hey Kumpel, neue mögliche Lösung gefunden. Von mir selbst nicht getestet. Siehe bearbeitete Antwort. Viel Glück!
Caliban
2
@scopedreams: Ich habe das gesehen und dachte sofort, es wäre perfekt ... Leider werden auf dieser verteilten Datenfreigabe nur Instanzen von Programmen auf jedem angeschlossenen Computer ausgeführt - nützlich für die Ausführung vieler Jobs, wobei jeder Client jeweils einen Job bearbeitet ... Aber in meinem Fall möchte ich, dass nur ein Job auf vielen Computern parallel berechnet wird.
Durchbruch
1
@Breakthrough: verdammt noch mal, ich denke, zurück zum Durchforsten des Webs.
Caliban
1
@Breakthrough: Meine Antwort wurde aktualisiert, um eine Liste der verteilten Computer-Clients bereitzustellen. Wieder ungetestet. Mach dir keine Sorgen, dass du meine Antwort annimmst, ich tue es, um auch für mich selbst etwas Neues zu lernen. :)
Caliban
1

Die einfache Tatsache ist, dass sich NON der Entwickler der Welt bis heute die Mühe gemacht hat, verteilte TCP: IP / UDP-Patches für die generische Codierung von Client / Server für ein aktuelles x264-System zu schreiben und zu übermitteln.

Das generische Client / Server-Modell und die saubere x264-Codebasis sind gut bekannt. Wenn Sie zur Klärung von x264-Code aufgefordert werden, müssen Sie sich einfach dem x264-Dev-IRC-Kanal anschließen und innerhalb von Minuten nachfragen, ob Sie einen Schlüssel für x264-Dev haben oder zwei antworten auf Ihre Frage, wie dieser Codeabschnitt funktioniert, und erhalten sogar eine praktische Vorstellung davon, wie Sie Ihren sich entwickelnden Code neu schreiben könnten, um besser auf den x264 (und x262, einen neuen Mpeg2-Encoder, der auf dem x264-Weltklasse-Framework basiert, an dem gerade gearbeitet wird) zu passen jetzt) ​​modell.

Wenn Sie also ein Entwickler sind, ist das Beste, was Sie für die Zukunft der verteilten 32/64 Bit x264-Videokodierung von Qualität und Professionalität tun können, das Schreiben dieser erforderlichen grundlegenden Client / Server-Patches , um eine Instanz von x264 oder ein separates Web / GUI zu erstellen App-Schnittstelle mit diesem neuen Client / Server-x264-API-Code, den Sie schreiben, um aktiv nach separaten Codeabschnitten eines einzelnen Videos zu suchen und diesen zuzuweisen und sie im Handumdrehen jedem neuen passenden verwalteten x264-Client-Code zuzuweisen, den Sie auch schreiben.

Ihre neuen Clients / Server müssen wirklich verteilte Codebasis-Patches sein und müssen nicht einmal die besten sein. Es handelt sich lediglich um einfachen, aber funktionierenden und voll funktionsfähigen C-Code, der getestet und verwendet wird. doom10.org/index.php?action=unread

, da es eine Sache gibt, die die x264-Entwickler zu lieben scheinen, und die den existierenden langsamen C-Code nimmt und optimierte Versionen davon abschnittsweise schreibt, müssen Sie den tatsächlichen Beta-Code (Patches willkommen) zuerst gegen den einreichen neueste Filiale OK

Es muss sich lohnen, einen Blick darauf zu werfen und sich die Mühe zu machen, diese x264-Server für viele x264-Client-Patches zu codieren, da x264 gerade 10-Bit-Tiefencodierungsfunktionen hat (das bedeutet hohe Qualität, hohe 10, hohe 4: 2: 2 H). 264 rechenintensive Profile stehen jetzt allen kostenlos zur Verfügung (mit x264).

in Kürze für zusätzliche Geschwindigkeit bei der Montage optimiert werden http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

Aber selbst ein einzelner 8-Core-Rechner wird Schwierigkeiten haben, mit 1080P in einer angemessenen Zeit eine Ausgabe von höchster Qualität zu liefern. In Kürze werden 2K- und 4K-Super-High-Def usw. eine wirklich einfach einzurichtende und zu verwendende native x264 / H.264-Codierungsoption sein ein oder zwei Pflaster entfernt

Wenn Sie ein Entwickler sind, bitte warten Sie nicht, tun Sie es noch heute.

x264 verteilt
quelle
Eigentlich habe ich darüber nachgedacht. Das Hauptproblem besteht darin, nicht zwei Computer zur Durchführung der Berechnungen zu bewegen, sondern die Daten des Arbeitssatzes zwischen Maschinen zu übertragen. Das Ein- und Auslagern von Daten in den Arbeitsspeicher ist auf einem einzelnen Computer viel einfacher (in so vielen Gigabyte pro Sekunde), in einem LAN jedoch viel langsamer (maximal 100 Megabyte pro Sekunde).
Durchbruch
1

Sie könnten einen Blick auf Media Encoding Cluster werfen :

Media Encoding Cluster ist die erste Open Source-Cluster-Codierungslösung, die in C / C ++ für die verteilte Mediencodierung (Video und Audio) geschrieben wurde.

Media Encoding Cluster ist ein erweiterbarer Video-Encoder, der mithilfe eines kompakten Peer-to-Peer-Rasters die Verarbeitungsleistung regulärer PCs nutzt, um die Codierung von hochkomprimierten Videos, z. B. MPEG4 und H.264, zu verteilen

Es verteilt Video-Chunks über das Netzwerk an Client-Knoten und parallelisiert die Codierungsaufgabe für eine Datei auf sogar mehr als einem Computer, um die Codierungszeit pro Datei zu verringern.

Ein anderer Ansatz ist für Nvidia angeboten von Badaboom ($ 39.99 mit Testversion), auch überprüft hier :

Elementals Badaboom verwendet die CUDA-Oberfläche von Nvidia, um viele Aufgaben beim DVD-Rippen mithilfe der GPU anstelle Ihrer muffigen alten CPU zu erledigen.

Auf die gleiche Weise gibt es auch den in Wikipedia beschriebenen Avivo Video Converter für ATI Radeon .

Harrymc
quelle
@ Durchbruch: Haben Sie sich diese Produkte angesehen?
Harrymc
1

Rhozet Carbon Server ist zwar ein übertriebener Vorschlag, kann jedoch mehrere Carbon Coder-Instanzen für die von Ihnen beschriebene Arbeit zusammenführen.

Website für Rhozet Carbon Server

Mehrere Carbon Coder-Knoten können als Transcodierungsfarm konfiguriert werden, die von einem oder mehreren Carbon Servern gesteuert wird. Carbon Server ermöglicht die automatisierte Verarbeitung umfangreicher Transcodierungsaufgaben, das servergesteuerte Failover von Carbon Coder-Knoten sowie die Verwaltung der Auftragsverteilung, der Auftragspriorisierung, des Lastenausgleichs, der FTP-Übertragung, der Statusüberwachung und der Auftragsbenachrichtigung.

edusysadmin
quelle