user6250: On my machine, Adobe Media Encoder is very slow. It takes 12 hours to render 4 minutes of 1080p video for YouTube (the video is based on Adobe After Effects project with an original MOV file and four effects: curves, remove grain, unsharp mask and hue/saturation.

I noticed that it doesn't use all the memory available, nor does it try to use as much CPU as possible. Here's the actual usage during the encoding process:


Is there a way to speed up the encoding process by convincing the application to use all CPU and all memory available?
As a side note, is it expected to be that slow? I can't possibly imagine movie making companies using it to encode a movie which usually is slightly longer than 4 minutes and has slightly more than four basic effects, even with a whole data center. Removing "remove grain" effect speeds up the encoding from 12 hours to 3:30.

user14504: While this question has already been answered; my recommendation:
Use AfterEffects for your rendering if you have a system with a high number of cores and a lot of RAM. 
My main workstation is a Dual E5-2697 v2 (24 Logical / 48 Hyper Threaded Cores); with 128 GB of RAM. 
If you have to do simply a transcode of a file; or can use Bridge to import your PPro Project into AE (barring your edits will remain intact); the feature under Memory (Edit -> Preferences) allow for you to use Multi-threading. 
That being said:
If I am doing just a straight render; or something simple; I can use AE to allocate 32 of my 48 HT cores; additionally; I can allocate 3 GB of ram to each Thread; which is depending on what type of encode I'm doing, anywhere between 2-100x faster in terms of rendering even with my Dual Titan Black GPUs. 
This of course; only applies if you have a LOT of cores; and a LOT of ram... 
Premiere; rendering through AME; will be limited to using only 1 Thread unfortunately; and will rely on your GPU unless you have that disabled to use software rendering under Project Settings. 
Hope this helps!

user2836: There might not be a way.  Based on your description of the problem, it sounds like the processing is the slow part.  While the video encoder itself is able to do multi-threaded processing, the image processing you are doing may not be able to.  By default, Premiere has always done as much parallel processing as possible for me and I frequently see it hit 99% CPU usage on my hyper-threaded quad core desktop.
The problem is most likely that some of your effects require the result of the previous frame to begin processing on the next frame.  If this is the case, there isn't an easy way to break it down across multiple threads and that would make it impossible to hit 100% CPU usage on a multi-core computer.
Similarly, RAM wouldn't be expected to cap on encoding as it is a stream operation.  There are some things that may need to be tracked over time, but for the most part, it is a stream operation with data going out as fast as it comes in, so there isn't much accumulation of data.
There are two main things that can improve the performance.  The first is GPU processing.  General purpose CPUs aren't really ideal for many audio/video processing tasks.  They are designed for doing a wide variety of general purpose operations, but aren't super efficient at basic operations.  GPUs, on the other hand, are designed for doing simple operations very quickly.  They can often reduce video processing tasks quite a bit.
A further improvement can be found in purpose built hardware.  There are professional cards designed specifically for processing video and provide real time processing and encoding of video.  These are often included in high end professional video editing workstations, but the price can be quite high.  It isn't unheard of for a professional video editing workstation to be able to get up in the $15,000 to $20,000 range or even higher, just for hardware.  They can go for a lot less if you don't mind waiting for renders (I work on a $2,350 system for my video work) but they can also get very high.

user1950: I'm not happy when I'm rendering unless I can actually smell burning plastic, nothing is more frustrating than AE telling you that your render won't complete until the heat death of the universe, while at the same time your CPU is barely raising a sweat. However there is something you can do about it.
After effects comes with a command line renderer called aerender.exe  plain ol' aerender on mac). It's in the AE program folder. Using it is a bit challenging for people unused to the -=awesome -=power of the command line, but it is definitely worth doing if you're doing some heavy lifting in After Effects, and you want to be able to harness all the power of your machine.
The beauty of it is that you can run as many instances as you like. What I normally do is keep adding instances until I start running low on memory. I have a 40 physical core machine and it takes a lot to max out the CPU but here's a screenshot where I finally managed it. Each one of those windows is a new instance of the AE render engine:

In that example the per-frame speed of each renderer barely decreased compared to a single instance, so I achieved a speed increase of roughly 4000%. YMMV, depending on how many cores and how much ram your machine has. I went to the effort because I had a project involving very long and and reasonably complex comps. The project would simply not have got done without this technique, or I would have had to farm it out to a commercial render farm.
Of course the speed-up comes at a price, which is a slight increase in complexity of your workflow. You need to set your comps to render as image sequences, and use the multi-machine settings so that each renderer will look for the next unrendered frame. At the end if you need a movie file you'll have to do a compression pass, but in my case I usually master to a png or tiff sequence, and then run off h.264 encoded copies for clients from the master.
And you need to know a little bit about the command line. Stop looking so glum—that's a GOOD thing, that's a GOOD thing.

Windows
The powershell command line I used in that scenario was:
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;
}

This is executed in a powershell window (type in WindowsR and then type powershell.exe). This is a shell scripting language integrated into modern versions of Windows that can be used for all kinds of stuff.
Mac
Using Bash version > 3 (default shell in current versions of OSX), or indeed with cooler shells like zsh, you can use this script:
for i in {1..40}; do
  /Applications/Adobe\ After\ Effects\ CC\ 2017/aerender -project ~/Path/to/myproject.aep &
  sleep 5
done

The script works thus:

starts a loop which goes for 40 repeats, you can change the 40 to whatever you think is a sane amount.
Then it starts aerender as a new process either with the start-process command in PS or with the & in bash, Obviously change the path to aerender.exe / aerender and your project to whatever it is on your machine. A quick and accurate way of filling in paths with the command line is to drag files and folders into it. Also using the tab to auto-fill paths saves a lot of typing and typos.
Finally it sleeps for 5 seconds—I found that opening too many instances of aerender too quickly was a reliable way to bluescreen / kernel panic my computer.


If you have multiple comps you can render them as movies but start a new renderer for each one. If you invoke aerender.exe like this

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

it will render the third comp on the render queue. Putting it into a script you can do:
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

That will start a new aerender instance for each comp–once again, change the 12 to however many comps there are in the queue. Note that this technique can run into problems if you have lots of comps in your queue–if you use all your physical memory things will come to a shuddering halt pretty quick. To keep the number of instances down you have to check how many aerender processes are running and only start a new one when a running one finishes. A simpler workaround is to make as many copies of your project as you want there to be instances, with the render queue divided up between them, and then render them all concurrently. So render thread one would be rendering comps 1,2,3, render thread two would be doing 3,4,5, and so on.
More details here (my blog).

6250: <p>On my machine, Adobe Media Encoder is very slow. It takes 12 hours to render 4 minutes of 1080p video for YouTube (the video is based on Adobe After Effects project with an original MOV file and four effects: curves, remove grain, unsharp mask and hue/saturation.</p>

<p><img src="https://i.stack.imgur.com/Y0CVN.png" alt="enter image description here"></p>

<p>I noticed that it doesn't use all the memory available, nor does it try to use as much CPU as possible. Here's the actual usage during the encoding process:</p>

<p><img src="https://i.stack.imgur.com/Zac98.png" alt="enter image description here"></p>

<p><img src="https://i.stack.imgur.com/lEpr2.png" alt="enter image description here"></p>

<p>Is there a way to speed up the encoding process by convincing the application to use all CPU and all memory available?</p>

<p><s>As a side note, is it expected to be <em>that</em> slow? I can't possibly imagine movie making companies using it to encode a movie which usually is slightly longer than 4 minutes and has slightly more than four basic effects, even with a whole data center.</s> Removing "remove grain" effect speeds up the encoding from 12 hours to 3:30.</p>
 14504: <p>While this question has already been answered; my recommendation:</p>

<p>Use AfterEffects for your rendering if you have a system with a high number of cores and a lot of RAM. </p>

<p>My main workstation is a Dual E5-2697 v2 (24 Logical / 48 Hyper Threaded Cores); with 128 GB of RAM. </p>

<p>If you have to do simply a transcode of a file; or can use Bridge to import your PPro Project into AE (barring your edits will remain intact); the feature under Memory (Edit -> Preferences) allow for you to use Multi-threading. </p>

<p><strong>That being said:</strong></p>

<p>If I am doing just a straight render; or something simple; I can use AE to allocate 32 of my 48 HT cores; additionally; I can allocate 3 GB of ram to each Thread; which is depending on what type of encode I'm doing, anywhere between 2-100x faster in terms of rendering even with my Dual Titan Black GPUs. </p>

<p>This of course; only applies if you have a LOT of cores; and a LOT of ram... </p>

<p>Premiere; rendering through AME; will be limited to using only 1 Thread unfortunately; and will rely on your GPU unless you have that disabled to use software rendering under Project Settings. </p>

<p>Hope this helps!</p>
 2836: <p>There might not be a way.  Based on your description of the problem, it sounds like the processing is the slow part.  While the video encoder itself is able to do multi-threaded processing, the image processing you are doing may not be able to.  By default, Premiere has always done as much parallel processing as possible for me and I frequently see it hit 99% CPU usage on my hyper-threaded quad core desktop.</p>

<p>The problem is most likely that some of your effects require the result of the previous frame to begin processing on the next frame.  If this is the case, there isn't an easy way to break it down across multiple threads and that would make it impossible to hit 100% CPU usage on a multi-core computer.</p>

<p>Similarly, RAM wouldn't be expected to cap on encoding as it is a stream operation.  There are some things that may need to be tracked over time, but for the most part, it is a stream operation with data going out as fast as it comes in, so there isn't much accumulation of data.</p>

<p>There are two main things that can improve the performance.  The first is GPU processing.  General purpose CPUs aren't really ideal for many audio/video processing tasks.  They are designed for doing a wide variety of general purpose operations, but aren't super efficient at basic operations.  GPUs, on the other hand, are designed for doing simple operations very quickly.  They can often reduce video processing tasks quite a bit.</p>

<p>A further improvement can be found in purpose built hardware.  There are professional cards designed specifically for processing video and provide real time processing and encoding of video.  These are often included in high end professional video editing workstations, but the price can be quite high.  It isn't unheard of for a professional video editing workstation to be able to get up in the $15,000 to $20,000 range or even higher, just for hardware.  They can go for a lot less if you don't mind waiting for renders (I work on a $2,350 system for my video work) but they can also get very high.</p>
 1950: <p>I'm not happy when I'm rendering unless I can actually smell burning plastic, nothing is more frustrating than AE telling you that your render won't complete until the heat death of the universe, while at the same time your CPU is barely raising a sweat. However there is something you can do about it.</p>

<p>After effects comes with a command line renderer called <strong>aerender.exe</strong>  plain ol' <strong>aerender</strong> on mac). It's in the AE program folder. Using it is a bit challenging for people unused to the -=<em>awesome -=power</em> of the command line, but it is definitely worth doing if you're doing some heavy lifting in After Effects, and you want to be able to harness all the power of your machine.</p>

<p>The beauty of it is that you can run as many instances as you like. What I normally do is keep adding instances until I start running low on memory. I have a 40 physical core machine and it takes a lot to max out the CPU but here's a screenshot where I finally managed it. Each one of those windows is a new instance of the AE render engine:</p>

<p><a href="https://i.stack.imgur.com/bwu9U.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/bwu9U.png" alt="enter image description here"></a></p>

<p>In that example the per-frame speed of each renderer barely decreased compared to a single instance, so I achieved a speed increase of roughly 4000%. YMMV, depending on how many cores and how much ram your machine has. I went to the effort because I had a project involving very long and and reasonably complex comps. The project would simply not have got done without this technique, or I would have had to farm it out to a commercial render farm.</p>

<p>Of course the speed-up comes at a price, which is a slight increase in complexity of your workflow. You need to set your comps to render as image sequences, and use the multi-machine settings so that each renderer will look for the next unrendered frame. At the end if you need a movie file you'll have to do a compression pass, but in my case I usually master to a png or tiff sequence, and then run off h.264 encoded copies for clients from the master.</p>

<p>And you need to know a little bit about the command line. Stop looking so glum—that's a GOOD thing, that's a GOOD thing.</p>

<hr>

<p><strong>Windows</strong></p>

<p>The powershell command line I used in that scenario was:</p>

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

<p>This is executed in a powershell window (type in <kbd>Windows</kbd><kbd>R</kbd> and then type <strong>powershell.exe</strong>). This is a shell scripting language integrated into modern versions of Windows that can be used for all kinds of stuff.</p>

<p><strong>Mac</strong>
Using Bash version > 3 (default shell in current versions of OSX), or indeed with cooler shells like zsh, you can use this script:</p>

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

<p>The script works thus:</p>

<ul>
<li>starts a loop which goes for 40 repeats, you can change the 40 to whatever you think is a sane amount.</li>
<li>Then it starts aerender as a new process either with the <code>start-process</code> command in PS or with the <code>&amp;</code> in bash, Obviously change the path to aerender.exe / aerender and your project to whatever it is on your machine. A quick and accurate way of filling in paths with the command line is to drag files and folders into it. Also using the <kbd>tab</kbd> to auto-fill paths saves a lot of typing and typos.</li>
<li>Finally it sleeps for 5 seconds—I found that opening too many instances of aerender too quickly was a reliable way to bluescreen / kernel panic my computer.</li>
</ul>

<p><hr>
If you have multiple comps you can render them as movies but start a new renderer for each one. If you invoke aerender.exe like this</p>

<pre><code>aerender.exe -project "c:\path\to\proj.aep" -rqindex 3
</code></pre>

<p>it will render the third comp on the render queue. Putting it into a script you can do:</p>

<p><strong>Windows</strong></p>

<pre><code>$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 &lt;&lt;version&gt;&gt;\Support Files\aerender.exe' -ArgumentList '-project', '$projpath', '-rqindex', '$i'
  sleep 5;
}
</code></pre>

<p><strong>Mac</strong></p>

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

<p>That will start a new aerender instance for each comp–once again, change the 12 to however many comps there are in the queue. Note that this technique can run into problems if you have lots of comps in your queue–if you use all your physical memory things will come to a shuddering halt pretty quick. To keep the number of instances down you have to check how many aerender processes are running and only start a new one when a running one finishes. A simpler workaround is to make as many copies of your project as you want there to be instances, with the render queue divided up between them, and then render them all concurrently. So render thread one would be rendering comps 1,2,3, render thread two would be doing 3,4,5, and so on.</p>

<p>More details <a href="http://blob.pureandapplied.com.au/finally-managed-to-peg-my-cpu/" rel="nofollow noreferrer">here</a> (my blog).</p>
