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

26154
Breakthrough

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

Brownie-Punkte für plattformübergreifende und Open-Source-Anwendungen. 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 Zwei-Pass-Kodierung und schlägt mit neueren x264-Builds fehl.
  • ELDER : Wieder nicht aktiv entwickelt, aber mein Problem war, dass es nicht mit neuen x264-Builds funktionierte und es sehr schwierig war, es zu konfigurieren (gelesen: zufällig aufgehört zu arbeiten).

Ich brauche zwar kein Programm, das gerade entwickelt wird, möchte aber eines, das die Zwei-Pass-Kodierung unterstützt und mit neuen (er) x264-Builds arbeitet .


Weitere Informationen : Bisher habe ich zwei separate Kopfgelder zu dieser 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 suche, ist im Grunde ein einfaches Programm, mit dem ich x264-Videos mit der Rechenleistung mehrerer über ein LAN verbundener Computer kodieren kann. Außerdem wäre es schön, wenn es mit neuen (er) x264-Builds funktioniert und die Zwei-Pass-Codierung unterstützt.

Wenn zu irgendeinem Zeitpunkt jemand eine aktualisierte Antwort oder eine neue Lösung für dieses Problem hat, poste es bitte, und es wird etwas erwogen.


2016 Update :

Nach einem Großteil meiner Arbeitserfahrung mit Computer / Bildverarbeitung erkannte ich, dass der mit der großen Menge an gemeinsam genutzten Daten / Speicher verbundene Overhead und der potenzielle Engpass, den er mit sich bringt, die möglichen Vorteile überwiegen könnten.

Obwohl ich immer noch gerne etwas finden würde, das es mir ermöglicht, die Rechenleistung mehrerer Geräte im Leerlauf zu nutzen, sind moderne, auf GPGPU basierende Encoder eine bessere Lösung, wenn Sie eine verbesserte / Echtzeit-Codierung benötigen. Dies ist, was die meisten Cloud-basierten Videocodierungsplattformen bieten (eine weitere Alternative, wenn Sie sich für SaaS oder Cloud Computing interessieren), wenn auch in größerem Maßstab.

29
Ich arbeite immer noch daran. x264farm ist nur der Render-Manager. Sie sollten in der Lage sein, jede beliebige Version von x264 auf dem Slave-PC zu platzieren. Haben Sie dies ausprobiert, und welche Fehler werden angezeigt? Keck vor 14 Jahren 0
http://forum.doom9.org/showthread.php?p=1184152#post1184152 Breakthrough vor 14 Jahren 1
Ich weiß, dass dies ein alter Faden ist, aber ich denke, ich sollte meine persönlichen Erfahrungen teilen. Verteilen Sie nicht einen Job auf mehrere Maschinen, es ist Zeitverschwendung, die Verteilung auf mehrere Kerne verringert bereits die Leistung, und es gibt mehrere physische Prozessoren und dann mehrere Maschinen mit IO-Problemen und Latenzen. Verwenden Sie es, wenn es nur wirklich benötigt wird, wenn es mehrere Dateien (Jobs) gibt, verteilen Sie es nach Dateien. Ich glaube, dass Squeeze die Last auf mehrere Computer verteilen kann, aber das ist ziemlich teuer. Shane Hsu vor 10 Jahren 1
@ShaneHsu thank you for sharing. I first wrote this question over four years ago, and at that time, the machine I was using to do this work was not *nearly* as powerful as the one I have now, so it made a lot more sense back then to go this route. Today, I'd have to agree with you - if render speed becomes an issue, it's best to offload the entire job to another machine, rather than split a single job into multiple chunks (and let one h.264 encoder instance take care of any multithreaded/multicore encoding if necessary). Breakthrough vor 10 Jahren 0
Ich schaue, um das gleiche zu tun, aber leider sieht es so aus, als ob dieser Thread meistens mit halbgefertigten Lösungen oder Projekten gefüllt ist, die nicht mehr existieren. Obwohl es so aussieht, als ob Ihre Notwendigkeit dazu verblasst wäre, wenn Sie seit der letzten Aktualisierung weitere Informationen zu möglichen Lösungen haben, lassen Sie es mich bitte wissen. Locksleyu vor 8 Jahren 0
@Locksleyu leider nein, aber ich suche immer nach neuen Lösungen. Nachdem ich jedoch viel Erfahrung mit dem Computer Vision gesammelt hatte, ist mir klar geworden, dass der mit der großen Menge an gemeinsam genutzten Daten / Speicher verbundene Overhead und der damit verbundene Engpass bei der Bandbreite die möglichen Vorteile überwiegen könnten. Moderne, auf GPGPU basierende Encoder sind meiner Meinung nach ein viel besserer Ansatz, und man kann bei Bedarf eine Renderfarm einrichten. Dies ist, was die meisten Cloud-basierten Videocodierungsplattformen bieten (eine weitere Option, wenn Sie sich für SaaS oder Cloud Computing interessieren), wenn auch in größerem Maßstab. Breakthrough vor 8 Jahren 0

9 Antworten auf die Frage

6
Ivan Vučica

Sie können einzelne Teile des Videos rendern und VirtualDub verwenden, um alles mit dem Kopiermodus (wo keine Kodierung erfolgt) zusammenzufügen. Es ist keine echte verteilte Kodierung oder irgendetwas, aber einfachste Lösungen funktionieren manchmal am besten.

Das einzige Problem dabei ist wiederum, dass * ein * Qualitätsverlust aufgrund der Platzierung von I / B-Frames beim Rendern des Videos auftritt. Ein Szenenerkennungsalgorithmus müsste verwendet werden, um zu bestimmen, wo er aufgeteilt werden soll, und irgendwie müssten Sie das Video genau in diesem Frame teilen. Breakthrough vor 14 Jahren 5
VirtualDub hat diese "grün-roten" Symbole, die bei der Szenenwechselerkennung dienen sollen. Wenn mein Gedächtnis von vor einigen Jahren richtig ist, hat es recht gut funktioniert. Andererseits bin ich ein Amateur, wenn es um das Kodieren von Videos und Videos geht. Ivan Vučica vor 14 Jahren 0
AFAIK VirtualDub hat den Befehl "Gehe zum nächsten Frame". Ich habe es einfach manuell aufgeteilt. Camilo Martin vor 12 Jahren 0
@Breakthrough Du brauchst also nur einen Filter, der einen Videoeingang an Szenenänderungsgrenzen in Blöcke aufteilt (damit diese dann separat codiert werden können)? Das ist einfach genug. Gibt es ein anderes Problem? GroovyDotCom vor 9 Jahren 0
@GroovyDotCom und die dazugehörige unterstützende Software (z. B. ein Server zum Einleiten des Aufteilungsfilters, Verteilung an alle Clientknoten, auf denen Encoder ausgeführt werden), Warteschlange für Aufträge, Übertragung der Dateien an den Hauptserver und erneutes Zusammenführen result) muss noch behandelt werden, und dies behebt immer noch keine potenziellen Qualitäts- / Effizienzprobleme bei der Kodierung 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 Kodierung vieles geändert hat. Breakthrough vor 9 Jahren 0
4
Keck

Es ist Beta, aber funktionell. Es ist nicht ganz so einfach, aber es funktioniert. Es basiert auf Fenstern und ist kostenlos.

ELDER von einigen Doom9-Jungs

Ich habe das auch gesehen, hoffte aber auf etwas, das mit x264farm vergleichbar ist - mit x264farm gibt es keinen Qualitätshindernis ... Auch das Projekt wurde lange Zeit aufgegeben. Breakthrough vor 14 Jahren 2
Ich hatte ursprünglich eine 50-Punkte-Prämie für diese Antwort vergeben, da dies die nächstliegende Lösung * war *. Dieses Programm hatte jedoch einen gewissen Qualitätsverlust im Vergleich zu einem Einzelcomputercodierer. Ich hoffe, den Qualitätshindernis zu vermeiden. Breakthrough vor 13 Jahren 1
@Breakthrough Was ist, wenn Sie ein wenig höher zielen, wie wenn es um 10% schlechter ist, nehmen Sie die Einstellungen (Detail / Bildgröße / etc) um 10% höher vor? tobylane vor 13 Jahren 0
@tobylane, das Problem ist die Platzierung von I / B-Frames beim Rendern des Videos. Ein Szenenerkennungsalgorithmus müsste verwendet werden, um zu bestimmen, wo er aufgeteilt werden soll, und irgendwie müssten Sie das Video genau in diesem Frame teilen. Abhängig vom Ausgangsmaterial ist dies oftmals nicht perfekt möglich. Wenn Sie also ein ganzes Video gleichzeitig kodieren, erhalten Sie in der Regel eine bessere Qualität, als wenn Sie es in Stücken darstellen. Breakthrough vor 13 Jahren 0
@Breakthrough x264 hat standardmäßig eine maximale GOP von 250 Frames, bei HD-Material sogar noch weniger. Es schließt die GOP irgendwann (es sei denn, Sie optimieren es nicht so), und dann wird es keinen Qualitätsverlust geben, wenn Sie genau dort schneiden, wo eine GOP enden würde. Leider ist das nicht sehr vorhersehbar. Auf jeden Fall, in einem 1,5 Stunden langen Film, teilen Sie ihn in 15 Minuten. Brocken direkt am Szenenwechsel würden der Kompressibilität nicht schaden. Und es hilft! Camilo Martin vor 12 Jahren 2
3
dxblitzx

Sie können auch versuchen, dies zu verwenden, es ist eine parallele / verteilte Kodierungssoftware für Windows und funktioniert gut und skaliert auch gut.

Versuchen Sie, den xcode Parallel-Encoder zu googeln.

Diese Links sollten weitere Informationen enthalten.

http://superscalar.pbworks.com/

Keine Beziehung: Die Benennung sieht direkt aus dem Xcode-Dokument von Apple über die parallele Kompilierung mit Xgrid aus. (Eine IDE gegenüber einem Videocodierer) Chealion vor 13 Jahren 0
ic, ich bin kein Mac-Benutzer, aber Sie sollten es versuchen, funktioniert aber nur unter Windows. Ich habe ein Setup mit etwa 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 vor 13 Jahren 0
Danke für Ihre Antwort. Ich habe dies zur aktuellen richtigen Antwort geändert, da diese Lösung dem entspricht, wonach ich gesucht habe! :) Breakthrough vor 13 Jahren 0
2
Chealion

Für Benutzer von Final Cut Studio (nur Mac) funktioniert die x264 QuickTime-Komponente in Verbindung mit mit QMaster erstellten Clustern bemerkenswert gut. Laden Sie Ihren Film in Compressor und los geht es. In Tests habe ich vor allem beim Arbeiten an einem gemeinsamen Speicherpunkt anständige Geschwindigkeitssteigerungen festgestellt.

Verdammt ... Ich bin ein Windows-Benutzer. Das sieht zwar ziemlich cool aus und ähnelt dem, wonach ich suche - ich wünschte nur, es wäre Multiplattform! Breakthrough vor 14 Jahren 3
2
caliban

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

Sony Vegas Workflow

BEARBEITEN: Nicht sicher, ob dies eine praktikable Lösung ist, aber anstatt zu versuchen, eine Videocodierungsanwendung zu finden, die Netzwerkrendering unterstützt, habe ich versucht, eine Software zu finden, mit der jede Anwendung das verteilte Computing nutzen kann. Und ich habe das gefunden - IAIDataShareServer .

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

EDIT2: IAIDataShareServer scheint Maschinen lediglich zum Ausführen einzelner Aufgaben anzuweisen. Insofern habe ich versucht, andere Distributed Computing-Lösungen zu finden und einige aussichtsreiche aufzuzählen.

  1. JPPF
  2. XOREAX
  3. DCEZ (das sieht gut aus)
Bist du dir da sicher? http://forums.creativecow.net/thread/24/895788 Breakthrough vor 14 Jahren 3
Haha, als ich das sah, sprang ich auf die Opposition, aber ich dachte, ich erinnere mich an etwas in meinem Hinterkopf dagegen ... Breakthrough vor 14 Jahren 0
@Breakthrough: Hey Mate, neue mögliche Lösung gefunden. Ungetestet von mir. Siehe bearbeitete Antwort. Viel Glück! caliban vor 14 Jahren 1
@scopedreams: Ich habe das gesehen und dachte sofort, es sei perfekt ... Unglücklicherweise werden auf jedem Computer, der mit dem verteilten Daten-Share verbunden ist, Instanzen von Programmen ausgeführt. Dies ist nützlich, um * viele * Jobs auszuführen, wobei jeder Client einen einzelnen Job in Angriff nimmt eine Zeit ... Aber in meinem Fall möchte ich, dass nur ein Job von vielen Computern parallel berechnet wird. Breakthrough vor 14 Jahren 2
@Breakthrough: argh verdammt, zurück zum Web, denke ich. caliban vor 14 Jahren 1
@Breakthrough: Meine Antwort wurde aktualisiert, um eine Liste der Clients für verteiltes Computing bereitzustellen. Wieder ungetestet. Machen Sie sich keine Sorgen, meine Antwort zu akzeptieren, ich lerne auch etwas Neues für mich. :) caliban vor 14 Jahren 1
2
Tiago Veloso

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

1
distributed x264

Die einfache Tatsache ist, dass sich NON des Entwicklers der Welt bisher nicht darum gekümmert hat, verteilte Client / Server-Patches für TCP / IP-Verschlüsselung für ein aktuelles x264 zu schreiben und einzureichen. Heute sind es 1745, siehe x264.nl/

Das generische Client / Server-Modell ist ebenso gut verstanden wie die saubere x264-Codebasis. Wenn Sie zur Klärung jedes x264-Codes aufgefordert werden, müssen Sie nur den x264 dev-IRC-Kanal anschließen und fragen. Innerhalb weniger Minuten erhalten Sie einen Schlüssel x264 Dev oder zwei beantworten Ihre Frage in der Funktionsweise dieses Codeabschnitts und erhalten sogar praktische Ideen, wie Sie Ihren weiterentwickelten Code möglicherweise für das x264 (und x262 einen neuen Mpeg2-Encoder basierend auf dem x264-Weltklassen-Framework, das gerade bearbeitet wird) besser neu schreiben jetzt) ​​Modell.

Wenn Sie also ein Entwickler sind, dann ist das Beste, was Sie für die Zukunft der Qualität und des Berufs tun können, die erforderlichen 32/64-Bit-x264-Videocodierungen. Sie schreiben diese erforderlichen grundlegenden Client / Server-Patches, um eine Instanz von x264 oder eine separate Web- / GUI zu erstellen App-Schnittstelle mit diesem neuen x264-API-Code für Client / Server, den Sie schreiben, um aktiv nach aktiven Codierungsabschnitten eines einzelnen Videos zu suchen, diese zuzuweisen und jedem neuen passenden verwalteten x264-Clientcode, den Sie auch schreiben, zuzuordnen.

Ihre neuen Clients / Server, die wirklich verteilte Encodebasis-Patches enthalten, müssen nicht einmal die besten sein, sondern nur grundlegenden, aber funktionierenden und voll funktionsfähigen C-Code, der getestet und verwendet wird: doom10.org/index.php?action=unread

Als eine Sache scheinen die x264-Entwickler es zu lieben, und das ist, indem sie den vorhandenen langsamen C-Code abschnittweise schreiben und optimierte Versionen davon schreiben, aber Sie müssen tatsächlich den (Patches welcome) tatsächlichen Beta-Code zuerst gegen den einreichen neueste Niederlassung OC

Es lohnt sich, einen Blick darauf zu werfen und sich die Mühe zu machen, diese x264-Server heute für viele x264-Patches zu codieren, da x264 gerade eine 10-Bit-Tiefencodierungsfunktion hat (dh hohe Qualität, hohe 10, hohe 4: 2: 2H-Werte). 264 rechenintensive Profile stehen jetzt jedem kostenlos zur Verfügung (x264).

Sehr schnell auf zusätzliche Geschwindigkeit bei der Montage optimiert zu werden http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

Aber selbst ein einzelner 8-Core-Rechner hat Schwierigkeiten, mit 1080P in einer vernünftigen Zeit eine qualitativ hochwertige Ausgabe zu liefern, und bald auch 2K und 4K Super-High-Def usw., eine wirklich einfach einzurichtende und benutzte x264 / H.264-native Kodierungsoption ein oder zwei Patches weg also.

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

Eigentlich habe ich darüber nachgedacht. Das Hauptproblem besteht darin, nicht tatsächlich zwei Computer für die Berechnungen zu erhalten, sondern die Daten des Arbeitssatzes zwischen den Computern zu übertragen. Es ist viel einfacher, Daten auf einer einzelnen Maschine in den RAM-Speicher zu verschieben (in vielen Gigabytes pro Sekunde), aber in einem LAN (mit max. 100 Megabyte pro Sekunde). Breakthrough vor 13 Jahren 0
1
harrymc

Vielleicht haben Sie einen Blick auf Media Encoding Cluster :

Media Encoding Cluster ist die erste Open Source Cluster Encoding-Lösung, die in C / C ++ für das Encoding von verteilten Medien (Video und Audio) geschrieben wurde.

Media Encoding Cluster ist ein erweiterbarer Video-Encoder, der ein leichtes Peer-to-Peer-Grid verwendet, um die Rechenleistung herkömmlicher PCs zu nutzen, um die Codierung hochkomprimierter Videos, z. B. MPEG4 und H.264, zu verteilen

Sie verteilt Video-Chunks über das Netzwerk an Client-Knoten und parallelisiert die Kodierungsaufgabe für eine Datei über mehr als einen Computer, um die Kodierungszeit pro Datei zu reduzieren.

Ein anderer Ansatz wird für Nvidia von Badaboom (39,99 USD mit Testversion) angeboten, der hier ebenfalls beschrieben wird :

Badaboom von Elemental verwendet die CUDA-Schnittstelle von Nvidia, um die meisterliche Arbeit beim DVD-Ripping zu erledigen, indem Sie die GPU anstelle Ihrer muffigen alten CPU verwenden.

In gleicher Weise gibt es auch Avivo Video Converter für ATI Radeon, der in Wikipedia beschrieben wird. Es kann jedoch einige Schritte dauern, bis er funktioniert.

@Breakthrough: Hast du dir diese Produkte angesehen? harrymc vor 13 Jahren 0
1
edusysadmin

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

Website für Rhozet Carbon Server

Mehrere Carbon Coder-Knoten können als Transcodierungsfarm konfiguriert werden, die von einem oder mehreren Carbon Servern gesteuert werden. Carbon Server ermöglicht die automatisierte Verarbeitung von Transcodierungsaufgaben mit hohem Volumen, servergesteuertes Failover von Carbon Coder-Knoten sowie die Verwaltung der Jobverteilung, Jobpriorisierung, Lastverteilung, FTP-Übertragung, Statusüberwachung und Jobbenachrichtigung.