9

次のことを行う効率的な方法を探しています。

いくつかのソース ビデオ (ほぼ同じ長さ) を使用して、それぞれが独自の領域で実行されるすべての元のソースで構成される出力ビデオを生成する必要があります (いくつかの異なるサイズのPIPの束のように)。したがって、最終的には、すべてのオリジナルがそれぞれの領域/ボックス内で並んで実行されます。

ソースと出力は必要でflvあり、私が使用しているプラ​​ットフォームは Windows (Windows 7 64 ビットの開発、Windows サーバー 2008 への展開) です。

私はavisynthを見てきましたが、残念ながらそれは処理できずflv、私が試したプラグインとflvスプリッターはどれも機能しませんでした.

私の現在のプロセスでは、次の方法でffmpegを使用しています。

  1. ffmpeg を使用して、ビデオごとに毎秒 25 個の png を生成し、必要に応じて元のサイズを変更します。
  2. 名前空間を使用してSystem.Drawing、フレームの各セットを新しい画像に結合します。静的な背景から始めて、各フレームを にロードImageし、背景Graphicsオブジェクトに描画します。これにより、結合されたフレームが得られます。
  3. ffmpeg を使用して、生成された画像をビデオに結合します。

これはすべて非常に IO 集約的であり (現時点ではこれが処理のボトルネックになっています)、目標を達成するためのより効率的な方法が必要だと感じています。私はビデオ処理の経験があまりなく、どのようなオプションがあるかわかりません。

これらを処理するより効率的な方法を提案できる人はいますか?

4

1 に答える 1

11

ffmpeg内ですべてを行います。ビデオ フィルタを使用すると、さまざまなことができます。たとえば、2 つのビデオを並べて結合するには:

ffmpeg -i input0.avi -vf "movie=input1.avi [in1]; [in]pad=640*2:352[in0]; [in0][in1] overlay=640:0 [out]" out.avi

@Oded: 基本的には、このコマンドが行うことです。フィルターを削除し、padフィルターのパラメーターを変更してoverlay、2 番目のビデオを好きな場所に移動できます。

ffmpeg -i big.avi -vf "movie=small.avi [small]; [in][small] overlay=10:10 [out]" out.avi

私が提供したリンクは、フィルター構文を説明しています。複数のフィルターを連鎖させることができます。

ffmpeg -i big.avi -vf "movie=small0.avi [small0]; [in][small0] overlay=10:10 [tmp];\
                       movie=small1.avi [small1]; [tmp][small1] overlay=30:10 [out]" out.avi
于 2011-09-28T10:55:45.660 に答える