Wie kann man Adobe Media Encoder zwingen, 100% CPU und Speicher zu verwenden?

8

Auf meinem Computer ist Adobe Media Encoder sehr langsam. Das Rendern von 4 Minuten 1080p-Video für YouTube dauert 12 Stunden (das Video basiert auf dem Adobe After Effects-Projekt mit einer Original-MOV-Datei und vier Effekten: Kurven, Körnung entfernen, unscharfe Maske und Farbton / Sättigung.

Geben Sie hier die Bildbeschreibung ein

Mir ist aufgefallen, dass nicht der gesamte verfügbare Speicher belegt wird und auch nicht versucht wird, so viel CPU wie möglich zu verwenden. Hier ist die tatsächliche Verwendung während des Codierungsprozesses:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Gibt es eine Möglichkeit, den Codierungsprozess zu beschleunigen, indem die Anwendung davon überzeugt wird, die gesamte CPU und den gesamten verfügbaren Speicher zu nutzen?

Wird erwartet, dass es so langsam ist? Ich kann mir unmöglich vorstellen, dass Filmemacher damit einen Film codieren, der normalerweise etwas länger als 4 Minuten ist und etwas mehr als vier grundlegende Effekte hat, selbst mit einem ganzen Rechenzentrum. Durch Entfernen des Effekts "Körnung entfernen" wird die Codierung von 12 Stunden auf 3:30 beschleunigt.

Arseni Mourzenko
quelle
1
Es gibt absolut keinen Grund, warum der gesamte Speicher verfügbar sein sollte. Das Codieren von Video ist ein linearer Prozess, bei dem Eingabeframes geöffnet, verarbeitet und dann der Ausgabeframe gespeichert wird. Es gibt keinen Grund, warum dies überhaupt viel Speicherplatz beanspruchen sollte, da es als Stream funktioniert. Ein Teil des Speichers wird für den Mustervergleich verwendet, aber selbst das ist ziemlich begrenzt.
AJ Henderson
versuche es mit ffmpeg. Die Auszahlung für das Erlernen der Verwendung ist, dass es viel schneller ist als jeder proprietäre (Software-) Mediencodierer, den ich jemals verwendet habe.
Stib
Wenn Sie eine beliebige Art von Effekt hinzufügen, der gerendert werden muss, wird der Export um einige Zeit verlängert. Einige Effekte werden als solche in Echtzeit gerendert, andere wie "Körnung entfernen" müssen jedoch auf jeden Frame verweisen, bevor sie übereinstimmen. Dies dauert einige Zeit Komplett. Ich fand heraus, dass das Rendern einige Zeit in Anspruch nehmen würde, wenn ich PP verwendete, nur eine LUT oder einen einfachen Effekt hinzuzufügen, selbst auf meinem 8-Kern-Mach mit 16-GB-RAM. Manchmal muss man nur das Rendering aufsaugen und es seine Sache machen lassen. Ich hatte mehr als 12 Stunden Zeit, um einen Export durchzuführen, aber als es einen Abschnitt beendet hatte, fiel es massiv ab, da der Effekt das Rendern beendet hatte
Adam Mann Pro
Zu Ihrer Information: Wenn Sie eine AE-Komposition aus AME exportieren, "codieren" Sie die Datei nicht sozusagen, sondern rendern sie zuerst, DANN codieren Sie sie. Die Unterscheidung ist wichtig, da AME vermutlich einen Unterprozess von AE ausführt, um diese Frames herauszuholen und sie dann zu codieren. Der Flaschenhals ist also tatsächlich der interne Renderer von AE, der, wie wir alle wissen, schrecklich ineffizient ist und definitiv nicht 100% der CPU erreicht. Deshalb macht Degraining einen so großen Unterschied! Und zu Ihrer Information, ich glaube, Adobe hat das in der letzten Version auf die GPU verschoben ...
Spencer

Antworten:

5

Es könnte keinen Weg geben. Basierend auf Ihrer Beschreibung des Problems scheint die Verarbeitung der langsame Teil zu sein. Während der Videocodierer selbst Multithread-Verarbeitung ausführen kann, ist die von Ihnen ausgeführte Bildverarbeitung möglicherweise nicht in der Lage. Standardmäßig hat Premiere für mich immer so viel Parallelverarbeitung wie möglich durchgeführt, und ich sehe häufig, dass die CPU-Auslastung auf meinem Quad-Core-Desktop mit Hyper-Thread 99% erreicht.

Das Problem ist höchstwahrscheinlich, dass für einige Ihrer Effekte das Ergebnis des vorherigen Frames erforderlich ist, um mit der Verarbeitung des nächsten Frames zu beginnen. Wenn dies der Fall ist, gibt es keine einfache Möglichkeit, es auf mehrere Threads aufzuteilen, und dies würde es unmöglich machen, eine 100% ige CPU-Auslastung auf einem Multi-Core-Computer zu erreichen.

In ähnlicher Weise wird nicht erwartet, dass der RAM die Codierung begrenzt, da es sich um eine Stream-Operation handelt. Es gibt einige Dinge, die möglicherweise im Laufe der Zeit verfolgt werden müssen, aber zum größten Teil handelt es sich um eine Stream-Operation, bei der Daten so schnell ausgehen, wie sie eingehen, sodass sich nicht viel Daten ansammeln.

Es gibt zwei Hauptpunkte, die die Leistung verbessern können. Der erste ist die GPU-Verarbeitung. Allzweck-CPUs sind für viele Audio- / Videoverarbeitungsaufgaben nicht wirklich ideal. Sie sind für eine Vielzahl von Allzweckoperationen konzipiert, bei Grundoperationen jedoch nicht besonders effizient. GPUs hingegen sind so konzipiert, dass einfache Vorgänge sehr schnell ausgeführt werden können. Sie können Videoverarbeitungsaufgaben oft erheblich reduzieren.

Eine weitere Verbesserung ist die speziell entwickelte Hardware. Es gibt professionelle Karten, die speziell für die Verarbeitung von Videos entwickelt wurden und die Echtzeitverarbeitung und -codierung von Videos ermöglichen. Diese sind häufig in professionellen High-End-Videobearbeitungsarbeitsplätzen enthalten, aber der Preis kann recht hoch sein. Es ist nicht ungewöhnlich, dass eine professionelle Videobearbeitungs-Workstation nur für Hardware im Bereich von 15.000 bis 20.000 US-Dollar oder sogar mehr aufstehen kann. Sie können viel weniger kosten, wenn es Ihnen nichts ausmacht, auf Renderings zu warten (ich arbeite an einem 2.350-Dollar-System für meine Videoarbeit), aber sie können auch sehr hoch werden.

AJ Henderson
quelle
4

Ich bin nicht glücklich, wenn ich rendere, es sei denn, ich kann tatsächlich brennendes Plastik riechen. Nichts ist frustrierender als AE, das Ihnen sagt, dass Ihr Rendern erst nach dem Hitzetod des Universums abgeschlossen wird, während gleichzeitig Ihre CPU kaum ausgelastet ist ins Schwitzen kommen. Sie können jedoch etwas dagegen tun.

After Effects wird mit einem Befehlszeilen-Renderer namens aerender.exe ( einfacher alter Aerender auf dem Mac) geliefert . Es befindet sich im AE-Programmordner. Die Verwendung ist für Leute, die nicht an die - = awesome - = Leistung der Befehlszeile gewöhnt sind, eine Herausforderung , aber es lohnt sich auf jeden Fall, wenn Sie in After Effects viel heben und in der Lage sein möchten, alle Funktionen zu nutzen Leistung Ihrer Maschine.

Das Schöne daran ist, dass Sie so viele Instanzen ausführen können, wie Sie möchten. Normalerweise füge ich so lange Instanzen hinzu, bis mir der Arbeitsspeicher ausgeht. Ich habe eine Maschine mit 40 physischen Kernen und es braucht viel Zeit, um die CPU zu maximieren, aber hier ist ein Screenshot, in dem ich es endlich geschafft habe. Jedes dieser Fenster ist eine neue Instanz der AE-Render-Engine:

Geben Sie hier die Bildbeschreibung ein

In diesem Beispiel hat sich die Geschwindigkeit pro Frame jedes Renderers im Vergleich zu einer einzelnen Instanz kaum verringert, sodass ich eine Geschwindigkeitssteigerung von ungefähr 4000% erzielt habe. YMMV, abhängig davon, wie viele Kerne und wie viel RAM Ihre Maschine hat. Ich habe mich bemüht, weil ich ein Projekt mit sehr langen und einigermaßen komplexen Kompositionen hatte. Das Projekt wäre ohne diese Technik einfach nicht zustande gekommen, oder ich hätte es auf eine kommerzielle Renderfarm bringen müssen.

Natürlich hat die Beschleunigung ihren Preis, was eine leichte Erhöhung der Komplexität Ihres Workflows bedeutet. Sie müssen Ihre Comps so einstellen, dass sie als Bildsequenzen gerendert werden, und die Einstellungen für mehrere Computer verwenden, damit jeder Renderer nach dem nächsten nicht gerenderten Frame sucht. Wenn Sie am Ende eine Filmdatei benötigen, müssen Sie einen Komprimierungsdurchlauf durchführen, aber in meinem Fall beherrsche ich normalerweise eine PNG- oder TIFF-Sequenz und führe dann h.264-codierte Kopien für Clients vom Master aus.

Und Sie müssen ein wenig über die Befehlszeile wissen. Hör auf, so bedrückt auszusehen - das ist eine gute Sache, das ist eine gute Sache.


Windows

Die Powershell-Befehlszeile, die ich in diesem Szenario verwendet habe, war:

for ($i = 0 ; $i -lt 40; $i++ ){
  Start-Process 'C:\Program Files\Adobe\Adobe After Effects <<version>>\Support Files\aerender.exe'-ArgumentList '-project', '"c:\path\to\project.aep"'
  sleep 5;
}

Dies wird in einem Powershell-Fenster ausgeführt (geben Sie Powershell.exe ein WindowsRund geben Sie dann ein ). Dies ist eine Shell-Skriptsprache, die in moderne Windows-Versionen integriert ist und für alle Arten von Dingen verwendet werden kann.

Mac Mit Bash Version> 3 (Standard-Shell in aktuellen OSX-Versionen) oder mit cooleren Shells wie zsh können Sie dieses Skript verwenden:

for i in {1..40}; do
  /Applications/Adobe\ After\ Effects\ CC\ 2017/aerender -project ~/Path/to/myproject.aep &
  sleep 5
done

Das Skript funktioniert folgendermaßen:

  • Startet eine Schleife, die 40 Wiederholungen umfasst. Sie können die 40 in einen für Sie vernünftigen Betrag ändern.
  • Dann wird aerender als neuer Prozess entweder mit dem start-processBefehl in PS oder mit &in bash gestartet. Ändern Sie natürlich den Pfad zu aerender.exe / aerender und Ihr Projekt zu dem, was sich auf Ihrem Computer befindet. Eine schnelle und genaue Möglichkeit, Pfade mit der Befehlszeile auszufüllen, besteht darin, Dateien und Ordner hineinzuziehen. Auch das tabautomatische Ausfüllen der Pfade spart viel Tipp- und Tippfehler.
  • Schließlich schläft es 5 Sekunden lang - ich fand, dass das zu schnelle Öffnen zu vieler Instanzen von aerender ein zuverlässiger Weg war, um Bluescreen- / Kernel-Panik auf meinem Computer auszulösen.


Wenn Sie mehrere Comps haben, können Sie diese als Filme rendern, aber für jeden einen neuen Renderer starten. Wenn Sie aerender.exe wie folgt aufrufen

aerender.exe -project "c:\path\to\proj.aep" -rqindex 3

Es wird die dritte Komposition in der Renderwarteschlange gerendert. Wenn Sie es in ein Skript einfügen, können Sie Folgendes tun:

Windows

$numcomps = 12
$projpath= "C:\path\to\project.aep"
for($i=1; $i -lt ($numcomps+1); $i++){
  Start-Process 'C:\Program Files\Adobe\Adobe After Effects <<version>>\Support Files\aerender.exe' -ArgumentList '-project', '$projpath', '-rqindex', '$i'
  sleep 5;
}

Mac

for i in {1..12}; do
  /Applications/Adobe\ After\ Effects\ CC\ 2017/aerender -project ~/Path/to/myproject.aep -rqindex $i &
  sleep 5
done

Dadurch wird für jede Komposition eine neue Aerender-Instanz gestartet. Ändern Sie die 12 erneut in die Anzahl der Kompositionen in der Warteschlange. Beachten Sie, dass diese Technik zu Problemen führen kann, wenn Sie viele Comps in Ihrer Warteschlange haben. Wenn Sie all Ihren physischen Speicher verwenden, werden die Dinge ziemlich schnell zum Erliegen kommen. Um die Anzahl der Instanzen gering zu halten, müssen Sie überprüfen, wie viele Aerender-Prozesse ausgeführt werden, und erst dann einen neuen starten, wenn ein laufender abgeschlossen ist. Eine einfachere Problemumgehung besteht darin, so viele Kopien Ihres Projekts zu erstellen, wie Sie möchten, dass Instanzen vorhanden sind, wobei die Renderwarteschlange zwischen ihnen aufgeteilt wird, und sie dann alle gleichzeitig zu rendern. Rendering-Thread 1 würde also Comps 1,2,3 rendern, Rendering-Thread 2 würde 3,4,5 ausführen und so weiter.

Mehr Details hier (mein Blog).

stib
quelle
1
Du bist eine Legende!
Tony Sepia
das erzähle ich immer wieder.
Stib
0

Während diese Frage bereits beantwortet wurde; meine Empfehlung:

Verwenden Sie AfterEffects für Ihr Rendering, wenn Sie ein System mit einer hohen Anzahl von Kernen und viel RAM haben.

Meine Hauptarbeitsstation ist eine Dual E5-2697 v2 (24 logische / 48 Hyper-Threaded-Kerne). mit 128 GB RAM.

Wenn Sie einfach eine Transcodierung einer Datei durchführen müssen; oder Sie können Bridge verwenden, um Ihr PPro-Projekt in AE zu importieren (sofern Ihre Änderungen nicht erhalten bleiben). Mit der Funktion unter Speicher (Bearbeiten -> Einstellungen) können Sie Multithreading verwenden.

Davon abgesehen:

Wenn ich nur ein gerades Rendern mache; oder etwas Einfaches; Ich kann AE verwenden, um 32 meiner 48 HT-Kerne zuzuweisen. zusätzlich; Ich kann jedem Thread 3 GB RAM zuweisen. Dies hängt davon ab, welche Art von Codierung ich mache, und zwar sogar mit meinen Dual Titan Black-GPUs zwischen 2 und 100 Mal schneller beim Rendern.

Das natürlich; gilt nur, wenn Sie viele Kerne haben; und viel Widder ...

Premiere; Rendern durch AME; wird leider auf die Verwendung von nur 1 Thread beschränkt sein; und wird sich auf Ihre GPU verlassen, es sei denn, Sie haben diese deaktiviert, um das Software-Rendering unter Projekteinstellungen zu verwenden.

Hoffe das hilft!

McFlySoHigh
quelle
0

Wie kann ich Media Encoder beschleunigen, um 100% Ihrer CPU zu nutzen? Hier ein Beispiel: Erstellen Sie eine Datei: settings.ini wird darin platziert

[Einstellungen] Modus = Entwickler mthread = aktiviert mthreadcount = 3 (für eine 4-Kern-8-Thread-Maschine sagen wir 7) sli = falscher Slimode = alle Priorität = hohe Skalierung = niedrige Wolke = falsche Last, wenn erforderlich = echte Lautsprecher = 2

Platzieren Sie sie in ausführbaren Ordnern von Adobe Premiere, After Effects und Media Encoders.

Bei einer Quad-Core / 4-Threaded-Maschine wie meiner sprang der Media Encoder von 1 Core auf 96% aller vier. Sie müssen das YouTube-Video "300X SCHNELLER rendern | Premiere / After Effects / Media Encoder" ansehen. Ich verwende es erfolgreich mit CC 2018-Produkten.

Dugadugalovelydid
quelle
Wow, das ist interessant!
Spencer
0

Schließen Sie After Effects beim Rendern mit Media Encoder. Dadurch stieg meine CPU-Auslastung von 30% auf 60%. Ich denke, weil Adobe nicht die CPU-Leistung spart, um gleichzeitig in AE zu arbeiten.

Roland
quelle
Ich glaube, dies liegt an der dynamischen Art und Weise, wie Adobe RAM im Hintergrund zuweist. Es wird die Menge an RAM pro Adobe-Prozess begrenzen, um einen Überlauf und so weiter zu verhindern. Wenn Sie also eine Adobe-App schließen, wird theoretisch mehr RAM für eine andere frei.
Spencer
0

Kann ich vorschlagen, dass dies auch nach 5 Jahren noch ein Problem ist? Sie müssen alle Adobe-Apps schließen und dann zuerst den Media Encoder öffnen (wenn Sie von dort aus rendern). Dann werden der App alle verfügbaren Ressourcen zugewiesen. Ich habe nicht gesehen, dass sie Ressourcen dynamisch freigibt. Sie werden einfach zugewiesen Die CPU-Zeit richtet sich nach der Anzahl der Apps, die beim Starten der Adobe-App geöffnet sind (dies ist wiederholbar. Versuchen Sie beispielsweise, LR vor dem Rendern zu öffnen. Es werden nur 10% der CPU verbraucht. Öffnen Sie dann zuerst AME, dann Lightroom und Sie 100% erhalten)

Dadurch habe ich die Renderzeiten um das Vierfache erhöht. Ich hoffe es hilft. Das "Ressourcenmanagement" von Adobe ist scheiße.

Mullazman
quelle