(エンコード速度を上げるために)複数のコンピューターにx264エンコードジョブを分散する方法はありますか?


29

エンコードFPSを向上させるために、多くのコンピューター(ネットワーク経由)でx264ビデオをエンコードする現在のアクティブなソリューションを知っている人はいますか?

ブラウニーはクロスプラットフォームでオープンソースを指しますが、皆さんご存知のように、私は通常Windowsを使用しています。


私が聞いたプログラム、およびそれらが適切であると信じない理由:

  • x264farm:積極的に開発されていません。良好なインターフェースですが、2パスエンコーディングをサポートしておらず、新しいx264ビルドでは失敗します。
  • 高齢者:繰り返しますが、積極的に開発されていませんが、私の問題は新しいx264ビルドでは動作せず、設定が非常に困難だったことです(ランダムに動作を停止しました)。

積極的に開発されているプログラムは絶対に必要ではありませんが、2パスエンコーディングサポートし、new(er)x264ビルドで動作するプログラムが必要です。


追加情報:これまで、2年以上前に最初に投稿して以来、この質問に対して2つの賞金を提供(および授与)しましたが、この問題の解決策はまだ見つかりません。私が基本的に探しているのは、LANで接続された複数のコンピューターの処理能力を使用してx264ビデオをエンコードできるようにする簡単なプログラムです。さらに、new(er)x264ビルドで動作し、2パスエンコーディングをサポートしていると便利です。

誰かがいつでも更新された答え、またはこの問題の新しい解決策を持っている場合、それを投稿してください、それはいくつかの考慮が与えられます。


2016更新

コンピューター/マシンビジョンでの多くの実務経験の後、大量の共有データ/メモリに関連するオーバーヘッドと、それがもたらす潜在的なボトルネックが、潜在的なメリットを上回る可能性があることに気付きました。

いくつかのデバイスのアイドルコンピューティングパワーを活用できるものを見つけたいと思いますが、現時点では、最新のGPGPUベースのエンコーダーは、改善された/リアルタイムエンコーディングが必要な場合に、はるかに優れたアプローチです。これは、大規模ではありますが、ほとんどのクラウドベースのビデオエンコーディングプラットフォームが提供するものです(SaaSまたはクラウドコンピューティングに興味がある場合は別の選択肢です)。


まだこれに取り組んでいます。x264farmは単なるレンダーマネージャーです。好きなバージョンのx264をスレーブPCに配置できるはずです。これを試してみましたが、試してみるとどのようなエラーが表示されますか
ケック


1
これは古いスレッドであることがわかりましたが、個人的な経験を共有する必要があると思います。1つのジョブを複数のマシンに分配しないでください。時間の無駄です。複数のコアに分配すると、すでにパフォーマンスが低下します。複数の物理プロセッサ、複数のマシンがあり、それぞれIOの問題と遅延があります。そうは言っても、本当に必要な場合にのみ使用してください。複数のファイル(ジョブ)があり、ファイルごとに分散する場合、Squeezeは複数のマシンに負荷を分散できますが、それは非常に高価です。
シェーン・スー

@ShaneHsu共有してくれてありがとう。私は、最初の4年以上前にこの質問を書いた、そしてその時、私はこの仕事をするために使用したマシンではなかった、ほとんどそれがこのルートを行くことを当時多くの意味を成していたので、などの強力な私が今持っているものとして。今日、私はあなたに同意する必要があります-レンダリング速度が問題になる場合は、単一のジョブを複数のチャンクに分割するのではなく、ジョブ全体を別のマシンにオフロードするのが最善です(そして1つのh.264エンコーダインスタンスが処理します必要に応じて、マルチスレッド/マルチコアエンコーディング)。
ブレークスルー

私は同じことをしようとしていますが、残念ながら、このスレッドはほとんど存在しない中途半端なソリューションやプロジェクトでいっぱいになっているようです。これを行う必要性は薄れているように見えますが、前回更新してから考えられる解決策に関する情報があれば、お知らせください。
ロックスリュー

回答:


6

ビデオの別々のチャンクをレンダリングし、VirtualDubを使用して、コピーモード(エンコードを行わない)ですべてをつなぎ合わせることができます。実際の分散エンコーディングなどではありませんが、最も単純なソリューションが最適な場合があります。


5
繰り返しますが、これに関する唯一の問題は、ビデオをレンダリングする際のI / Bフレームの配置により、品質が低下することです。シーン検出アルゴリズムは...あなたはまさにそのフレームでビデオを分割する必要があるだろう、何とかそれを分割し、場所を決定するために使用される必要があるであろう
画期的

VirtualDubには、シーン切り替えの検出に役立つ「緑と赤」のアイコンがあります。数年前の私の記憶が私に正しく役立つなら、それは非常にうまくいきました。しかし、再び、私はビデオとビデオのエンコードに関してはアマチュアです。
イヴァンヴチカ

AFAIK VirtualDubには「次のフレームに移動」コマンドがあります。手動で分割しただけです。
カミロマーティン

@Breakthrough必要なのは、シーン変更の境界でビデオ入力をチャンクに分割するフィルターだけです(そのため、これらは別々にエンコードできます)。それは十分簡単です。他に問題はありますか?
-GroovyDotCom

@GroovyDotComに加えて、すべてのサポートソフトウェア(たとえば、分割フィルターを開始するサーバー、エンコーダーを実行しているすべてのクライアントノードに配布し、ジョブをキューに入れ、ファイルをメインサーバーに転送し、結果)に対処する必要がありますが、個々のセグメントで大きなビデオをエンコードする方法で発生する可能性のある品質/効率の問題にはまだ対処していません。また、この質問はこの時点でほぼ6年前であることに注意してください。そのため、分散エンコーディングに関しても多くの変更が加えられたと確信しています。
ブレークスルー

4

ベータ版ですが、機能的です。それほど単純ではありませんが、機能します。Windowsベースで無料です。

ELDER一部Doom9の男から


2
私もそれを見ましたが、x264farmに匹敵するものを望んでいました。x264farmで品質に打撃はありません...また、プロジェクトはかなり長い間放棄されました。
ブレークスルー

1
私はもともとこの答えに50ポイントの報奨金を授与しました。それは当時最も近い解決策だったからです。ただし、このプログラムは、単一コンピューターのエンコーダーと比較して品質がいくらか低下していました。私は品質への打撃を避けたいと思っています。
ブレークスルー

@Breakthrough 10%悪化した場合など、設定(detail / framesize / etc)を10%高くした場合など、少し高めにしたい場合はどうでしょうか。
-tobylane

@tobylane、問題はビデオをレンダリングするときのI / Bフレームの配置にあります。シーン検出アルゴリズムを使用して、分割する場所を決定する必要があり、どういうわけか、正確にそのフレームでビデオを分割する必要があります。ソース素材によっては、これを完全に行うことは不可能な場合が多いため、通常、ビデオ全体を一度にエンコードすると、チャンクでレンダリングするよりも高品質になります。
ブレークスルー

2
デフォルトで@Breakthrough x264の最大GOPは250フレームで、HD素材はさらに少なくなります。いつかGOPを閉じます(微調整しない限り)。GOPが終了する場所を切り開いても品質の低下はありませんが、残念ながらあまり予測できません。いずれにせよ、1.5時間の映画では、15分で6つに分割されます。シーン変更時のチャンクは、圧縮性をそれほど害しません。そして、それは助けになります!
カミロマーティン

3

また、これを使用してみてください。これは、Windows用の並列/分散エンコーディングソフトウェアであり、適切に機能し、うまくスケールします。

Xcodeパラレルエンコーダーのグーグルをお試しください。

これらのリンクはより多くの情報を提供するはずです。

http://superscalar.pbworks.com/


無関係:AppleのXcodeドキュメントで、Xgridで並列コンパイルがどのように機能したかについてのネーミングがすぐに引き裂かれました。(IDE対ビデオエンコーダー)
Chealion

ic、私はMacユーザーではありませんが、これを試してみてください、Windows上でのみ動作します。約10 Ghzの処理能力と90分の長さのビデオの変換には平均30〜32分かかります(x.264 / AAC / 1800 kbs vbr / 256 kbsオーディオ)。
dxblitzx

ご回答ありがとうございます。このソリューションは私が探していたものに最も近いため、これを現在の正しい答えに変更しました!:)
ブレークスルー

2

Final Cut Studio(Macのみ)のユーザーの場合、QMasterを使用して作成されたクラスターで使用すると、x264 QuickTimeコンポーネントは非常にうまく機能します。ムービーをCompressorにロードすると、消えます。テストでは、特に共有ストレージポイントで作業しているときに、かなりの速度が向上することがわかりました。


3
くそ...私はWindowsユーザーです。それはかなりクールに見えますが、私が探しているものに似ています-それがマルチプラットフォームであることを願っています!
ブレークスルー

2

Mac OS X 10.5(10.6との互換性は不明)では、以前はVisualHubが使用されていたため、ローカルネットワークにグリッドファームをセットアップできました。現在は廃止されており、ReduxEncoderが代替品として登場しましたが、そのオプションが見つからないようです。


2

私は、Sony VegasのWindowsビデオ編集の大ファンです...そしてNetwork Renderという機能があります。:)ヤム。

Sony Vegasワークフロー

編集:これが実行可能なソリューションであるかどうかはあまりわかりませんが、ネットワークレンダリングをサポートするビデオエンコーディングアプリケーションを見つけるのではなく、アプリケーションが分散コンピューティングを利用できるようにするソフトウェアを見つけようとしました。そして、私はこれを見つけました-IAIDataShareServer

それは非常に強力に見え、サンプルの投稿結果は本当に素晴らしいです。試してみたい場合は、その仕組みを教えてください。

EDIT2 IAIDataShareServerは、個々のタスクを実行するようにマシンに指示しているようです。その範囲で、私は他の分散コンピューティングソリューションを調達しようとし、いくつかの有望なソリューションをリストしました。

  1. JPPF
  2. XOREAX
  3. DCEZ(これはよさそうだ)


1
@Breakthrough:やあ、新しい解決策が見つかった。しかし、自分ではテストしていません。編集済みの回答をご覧ください。がんばろう!
カリバン

2
@scopedreams:それは完璧だった...残念ながら、分散データ共有はそれに接続された各コンピュータ上のプログラムのインスタンスを実行することを考えていること、そして瞬時にIのこぎり-実行する場合に便利多くの仕事を、各クライアントは、一度に一つの仕事に取り組んで...しかし、私の場合は、1つのジョブだけを多数のコンピューター間で並列に計算する必要があります。
ブレークスルー

1
@Breakthrough:ええと、ウェブのトロールに戻ると思います。
カリバン

1
@Breakthrough:分散コンピューティングクライアントのリストを提供するために私の回答を更新しました。繰り返しますが、テストされていません。私の答えを受け入れることを心配しないでください、私は自分自身のために何か新しいことを学ぶためにそれをやっています。:)
カリバン

1

単純な事実は、現在のx264の分散TCP:IP / UDP汎用エンコーディングクライアント/サーバーパッチの作成と提出に煩わされている世界の開発者の1人ではないことです。今日の1745ではx264.nl/

汎用のクライアント/サーバーモデルは、クリーンなx264コードベースと同様によく理解されており、x264コードの明確化を求めることは、x264 dev IRCチャネルに参加して尋ねるだけの簡単な問題です。または、2つのコードセクションのしくみでクエリに答え、さらに進化しているコードを書き直して、x264(およびx262のx264ワールドクラスフレームワークに基づく新しいMpeg2エンコーダー)をより適切に書き直す方法の実用的なアイデアを取得します今)モデル。

あなたの開発者が品質と職業の32/64ビットx264分散ビデオエンコーディングの未来のためにあなたができる最高のことなら、実際にこれらの必要な基本的なクライアント/サーバーパッチを書いて x264のインスタンスまたは別のWeb / GUIを作成することです作成したこの新しいクライアント/サーバーx264 APIコードとのアプリインターフェースは、アクティブに検索し、単一のビデオの個別のエンコードセクションを、あなたが書いた新しい一致するマネージx264クライアントコードに割り当て、その場で渡します。

新しいクライアント/サーバーは、エンコードされたエンコードベースパッチを本当に分散させる必要がありません。

、x264開発者がやりたいことの1つとして、既存の遅いCコードを使用してセクションごとに最適化されたバージョンを記述しますが、実際に(パッチを歓迎します)実際のベータコードを最初に提出する必要があります最新のブランチOC

x264が10ビットの深度エンコード機能(高品質のHigh、High 10、High 4:2:2 Hを意味する)を取得したため、実際にこれらのx264サーバーを多くのx264クライアントパッチにコーディングする努力をする価値があります。 x264)を追加すると、264の計算集中型プロファイルが誰でも無料で利用できるようになりました。

すぐにアセンブリでスピードを上げるために最適化されるhttp://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

しかし、シングル8コアマシンでさえ、1080Pで妥当な時間内に最高品質の出力を提供するのに苦労します。まもなく2Kおよび4Kの超高解像度など、分散x264 / H.264ネイティブエンコードオプションの設定と使用は本当に簡単ですパッチ1つまたは2つです。

あなたの開発者なら、待ってはいけない、今日それをしてください。


実際、これを行うことを考えました。主な問題は、実際に2台のコンピューターに計算を実行させるのではなく、マシン間でワーキングセットデータを転送することです。1台のマシンでRAMにデータを出し入れするのははるかに簡単ですが(1秒あたり数ギガバイト)、LANでははるかに遅くなります(最大で1秒あたり100メガバイト)。
ブレークスルー

1

あなたは見ている可能性がありますMediaエンコーディングクラスタ

Media Encoding Clusterは、分散メディア(ビデオおよびオーディオ)エンコーディング用にC / C ++で記述された最初のオープンソースクラスターエンコーディングソリューションです。

Media Encoding Clusterは拡張可能なビデオエンコーダーであり、軽量のピアツーピアグリッドを使用して、MPEG4やH.264などの高度に圧縮されたビデオのエンコーディングを配布するために、通常のPCの処理能力を活用します。

ビデオチャンクをネットワーク経由でクライアントノードに配布し、1つのファイルのエンコードタスクを複数のコンピューターで並列化して、ファイルごとのエンコード時間を短縮します。

また、BadaboomがNvidiaに提供する別のアプローチ(試用版で39.99ドル)も提供されています

ElementalのBadaboomは、NvidiaのCUDAインターフェイスを使用して、かび臭い古いCPUの代わりにGPUを使用して、DVDリッピングの面倒な作業の多くを行います。

同様に、Wikipediaに記載されているATI Radeon用のAvivoビデオコンバーターもありますが、動作させるには多少の手間がかかる場合があります。


@Breakthrough:これらの製品を見たことがありますか?
harrymc

1

Rhozet Carbon Serverは少し過剰な提案かもしれませんが、説明した作業のために複数のCarbon Coderインスタンスをまとめることができます。

Rhozet Carbon ServerのWebサイト

複数のCarbon Coderノードをトランスコーディングファームとして構成し、1つ以上のCarbonサーバーで制御できます。Carbon Serverは、大量のトランスコーディングタスクの自動処理、Carbon Coderノードのサーバー制御フェイルオーバー、およびジョブ配布、ジョブの優先順位付け、負荷分散、FTP転送、ステータス監視、ジョブ通知の管理を可能にします。

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