Adobe Media EncoderがCPUとメモリを100%使用するように強制するにはどうすればよいですか?


8

私のマシンでは、Adobe Media Encoderが非常に遅いです。YouTubeで4分間の1080pビデオをレンダリングするのに12時間かかります(ビデオは、元のMOVファイルと4つのエフェクト(カーブ、粒子の除去、アンシャープマスク、色相/彩度)を含むAdobe After Effectsプロジェクトに基づいています。

ここに画像の説明を入力してください

利用可能なすべてのメモリを使用しているわけでも、CPUをできるだけ使用しようとしているわけでもないことに気付きました。エンコード処理中の実際の使用方法は次のとおりです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

利用可能なすべてのCPUとすべてのメモリを使用するようにアプリケーションを説得することにより、エンコーディングプロセスを高速化する方法はありますか?

余談ですが、それは遅いと予想されますか?データセンター全体でさえ、映画制作会社がそれを使用して、通常4分より少し長く、4つより少し多い基本的な効果を持つ映画をエンコードすることを想像することはできません。「粒子を取り除く」効果を削除すると、エンコーディングが12時間から3:30にスピードアップします。


1
利用可能なすべてのメモリが必要な理由はまったくありません。ビデオのエンコードは、入力フレームを開いて処理を適用し、出力フレームを保存する線形プロセスです。ストリームとして機能するため、メモリを大量に使用する必要はありません。一部のメモリはパターンマッチングに使用されますが、それでもかなり制限されます。
AJヘンダーソン

ffmpegを試してください。それを使用する方法を学ぶ必要があることの見返りは、それが私が今まで使ったどんなプロプライエタリな(ソフトウェア)メディアエンコーダーよりもずっと速いということです。
stib '20年

レンダリングする必要のあるタイプのエフェクトを追加すると、エクスポートに時間が追加されます。一部のエフェクトはリアルタイムでレンダリングされますが、「グレインの削除」などの他のエフェクトは、一致させる前にすべてのフレームを参照する必要があります。これには時間がかかりますコンプリート。PPを使用しているとき、16 GBのRAMを搭載した8コアマッハでも、LUTまたは単純な効果を追加するだけでレンダリングに時間がかかることがわかりました。場合によっては、レンダリングに夢中になって、そのままにしておく必要があります。エクスポートには12時間以上かかると言われていましたが、セクションが終了すると、エフェクトのレンダリングが終了したため、大幅に低下しました
Adam Mann Pro

参考までに、AEコンプをAMEからエクスポートする場合は、いわば実際にファイルを "エンコード"しているのではなく、最初にレンダリングしてからエンコードします。AMEはおそらくAEのサブプロセスを実行してこれらのフレームを取り出し、エンコードするため、この区別は重要です。したがって、ボトルネックは実際にはAEの内部レンダラーであり、私たちが知っているように恐ろしく非効率的であり、100%のCPUにヒットすることはありません。そのため、デグレインがこのような大きな違いを生み出します!そして最後に、Adobeは前回のリリースでそれをGPUに移行したと思います...
Spencer

回答:


5

方法がないかもしれません。問題の説明に基づいて、処理が遅いようです。ビデオエンコーダー自体はマルチスレッド処理を実行できますが、実行中の画像処理は実行できない場合があります。デフォルトでは、Premiereは常に可能な限り多くの並列処理を行っており、ハイパースレッドのクアッドコアデスクトップでCPU使用率が99%に達することがよくあります。

問題は、一部のエフェクトが次のフレームで処理を開始するために前のフレームの結果を必要とする可能性が高いです。これが事実である場合、複数のスレッド間でそれを分解する簡単な方法はなく、マルチコアコンピューターで100%のCPU使用率を達成することは不可能になります。

同様に、RAMはストリーム操作であるため、エンコードの上限はありません。時間の経過とともに追跡する必要のあるものもいくつかありますが、ほとんどの場合、データは入ってくるのと同じ速さで出力されるストリーム操作であるため、データの蓄積はそれほど多くありません。

パフォーマンスを改善できる主なものは2つあります。1つ目はGPU処理です。汎用CPUは、多くのオーディオ/ビデオ処理タスクにはあまり適していません。さまざまな汎用操作を実行するように設計されていますが、基本的な操作ではそれほど効率的ではありません。一方、GPUは単純な操作を非常に迅速に実行できるように設計されています。多くの場合、ビデオ処理タスクをかなり減らすことができます。

専用のハードウェアをさらに改善することができます。ビデオを処理するために特別に設計されたプロフェッショナルカードがあり、ビデオのリアルタイム処理とエンコーディングを提供します。これらは多くの場合、ハイエンドのプロフェッショナルビデオ編集ワークステーションに含まれていますが、価格が非常に高くなる可能性があります。ハードウェアだけで、プロのビデオ編集ワークステーションが15,000ドルから20,000ドル以上の範囲で立ち上がることができることは前例のないことではありません。レンダーを待つことを気にしない場合は、はるかに少なくなりますが(ビデオ作業のために$ 2,350のシステムで作業しています)、非常に高くなることもあります。


4

実際に燃えているプラ​​スチックのにおいがしない限り、レンダリングしているときは満足できません。AEが宇宙の熱死までレンダリングが完了しないことを告げるよりもイライラすることはありませんが、同時にCPUはほとんどありません。汗をかく。しかし、それについてあなたができることがいくつかあります。

After Effectsには、Macでaerender.exe plain ol ' aerenderと呼ばれるコマンドラインレンダラーが付属しています。それはAEプログラムフォルダにあります。これを使用することは、コマンドラインの-= 素晴らしい-=パワー慣れていない人にとっては少しやりがいのある作業ですが、After Effectsで大幅な作業を行い、すべての機能を活用できるようにしたい場合は、間違いなく実行する価値があります。あなたの機械の力。

それの美しさは、好きなだけインスタンスを実行できることです。通常は、メモリが不足するまでインスタンスを追加し続けます。私は40の物理コアマシンを使用しており、CPUを最大限に活用するには多くの時間がかかりますが、最終的に管理したスクリーンショットを次に示します。これらのウィンドウはそれぞれ、AEレンダリングエンジンの新しいインスタンスです。

ここに画像の説明を入力してください

この例では、各レンダラーのフレームごとの速度が単一のインスタンスと比較してほとんど低下していないため、約4000%の速度向上を達成しました。YMMV。マシンのコアの数とRAMの量によって異なります。私は非常に長く、かなり複雑なコンプを含むプロジェクトを持っていたので、その努力に行きました。このテクニックがなければプロジェクトは成功しなかったでしょう。あるいは、私はそれを商用のレンダーファームに送り出さなければなりませんでした。

もちろん、スピードアップには代償が伴いますが、これはワークフローの複雑さが少し増加します。画像シーケンスとしてレンダリングするようにコンプを設定し、マルチレンダー設定を使用して、各レンダラーが次のレンダリングされていないフレームを探すようにする必要があります。最後に、ムービーファイルが必要な場合は、圧縮パスを実行する必要がありますが、私の場合、通常はpngまたはtiffシーケンスにマスターし、マスターからクライアント用にh.264でエンコードされたコピーを実行します。

そして、コマンドラインについて少し知っておく必要があります。そんなに不機嫌そうに見えるのをやめてください。それは良いことです。それは良いことです。


ウィンドウズ

そのシナリオで使用したPowerShellコマンドラインは次のとおりです。

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;
}

これはpowershellウィンドウで実行されます(タイプしてWindowsRからpowershell.exeと入力します)。これは、Windowsの最新バージョンに統合されたシェルスクリプト言語で、あらゆる種類のものに使用できます。

Bashバージョン> 3(OSXの現在のバージョンのデフォルトシェル)を使用するMac、または実際にzshのようなよりクールなシェルでは、次のスクリプトを使用できます。

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

スクリプトは次のように機能します。

  • 繰り返しを40回繰り返すループを開始します。40を適切な量と考えるものに変更できます。
  • 次にstart-process、PS のコマンドまたは&in bashのいずれかを使用してaerenderを新しいプロセスとして開始します。明らかに、パスをaerender.exe / aerenderに変更し、プロジェクトをマシン上の任意のパスに変更します。コマンドラインでパスを入力する迅速かつ正確な方法は、ファイルとフォルダーをそこにドラッグすることです。また、tabパスを自動入力するためにを使用すると、入力や入力ミスを大幅に削減できます。
  • 最後に5秒間スリープします。大量のaerenderのインスタンスを開くのが速すぎると、コンピューターをブルースクリーン/カーネルパニックさせる信頼できる方法であることがわかりました。


複数のカンプがある場合、それらをムービーとしてレンダリングできますが、コンプごとに新しいレンダラーを開始できます。このようにaerender.exeを呼び出すと

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

レンダーキューの3番目のコンポーネントをレンダリングします。あなたができるスクリプトにそれを入れる:

ウィンドウズ

$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;
}

マック

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

これにより、コンプごとに新しいaerenderインスタンスが開始されます。12を変更して、キューにあるコンプの数を増やします。キューに多数のカンプがある場合、この手法は問題に遭遇する可能性があることに注意してください。すべての物理メモリを使用すると、非常に迅速に震えが止まります。インスタンスの数を抑えるには、実行中のaerenderプロセスの数を確認し、実行中のプロセスが終了したときにのみ新しいプロセスを開始する必要があります。より簡単な回避策は、インスタンスに必要な数だけプロジェクトのコピーを作成し、それらの間でレンダーキューを分割して、それらをすべて同時にレンダリングすることです。したがって、レンダリングスレッド1はレンダリングコンポーネント1、2、3をレンダリングし、レンダリングスレッド2は3、4、5を実行します。

詳細はこちら(私のブログ)。


1
あなたは伝説です!
トニーセピア

それは私が人々に伝え続けていることです。
stib 2017年

0

この質問はすでに回答されていますが、私の推薦:

多数のコアと大量のRAMを備えたシステムがある場合は、レンダリングにAfterEffectsを使用します。

私のメインワークステーションはデュアルE5-2697 v2(24論理/ 48ハイパースレッドコア)です。128 GBのRAM。

ファイルのトランスコードを行う必要がある場合は、またはBridgeを使用してPProプロジェクトをAEにインポートできます(編集を禁止すると、そのまま残ります)。[メモリ]([編集]-> [設定])の機能により、マルチスレッドを使用できます。

言われていること:

私がまっすぐなレンダリングをしているだけなら; または単純なもの; AEを使用して、48個のHTコアのうち32個を割り当てることができます。さらに; 各スレッドに3 GBのRAMを割り当てることができます。これは、実行しているエンコードの種類によって異なります。デュアルタイタンブラックGPUを使用した場合でも、レンダリングの点で2〜100倍高速です。

もちろんこれ。コアがたくさんある場合にのみ適用されます。たくさんのラム...

プレミア; AMEによるレンダリング。残念ながら1つのスレッドしか使用できません。プロジェクト設定でソフトウェアレンダリングの使用を無効にしない限り、GPUに依存します。

お役に立てれば!


0

Media Encoderを高速化してCPUを100%使用する方法 次に例を示します。ファイルを作成します。settings.iniをその中に配置します

[設定] mode = developer mthread = enabled mthreadcount = 3(4コア8スレッドマシンの場合、7など)sli = false slimode = all priority = high scaling = low cloud = false loadwhenneeded = true speakers = 2

Adobe Premiere、After Effects、およびMedia Encodersの実行可能フォルダーに配置します。

私のようなクアッドコア/ 4スレッドマシンの場合、これによりMedia Encoderは1コアから4つすべての96%を使用するようにジャンプしました。YouTubeビデオ「Render 300X FASTER | Premiere / After Effects / Media Encoder」を見る必要があります。CC2018製品でこれをうまく使用しています。


うわー、今それは面白いです!
スペンサー

0

Media Encoderでのレンダリング中はAfter Effectsを閉じます。そうすることで、CPU使用率は30%から60%になりました。AdobeがAEで同時に動作するためにCPUパワーを節約していないからだと思います。


これは、AdobeがRAMをバックグラウンドで割り当てる動的な方法によるものだと思います。オーバーフローなどを防ぐために、AdobeプロセスごとのRAMの量を制限します。したがって、1つのAdobeアプリを閉じると、理論的には別のRAMを解放することができます。
スペンサー

0

これは5年後の問題であることを提案できますか?すべてのAdobeアプリを閉じてからMedia Encoderを開く必要があります(それがレンダリング元である場合)最初に、そのアプリで利用可能なすべてのリソースを割り当てます。動的にリソースを共有することはありません。単に割り当てるだけです。 Adobeアプリを起動したときに開いているアプリの数に応じたCPU時間(これは繰り返し可能です。たとえば、レンダリングの前にLRを開いてみてください。CPUの10%しか使用しません。次にAMEを最初に開いてから、Lightroomを開いてください。 100%を得る)

このため、レンダリング時間が4倍になりました。それが役に立てば幸い。アドビの「リソース管理」はひどい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.