2017-11-13 20 views
-1

長さ(x)と高さ(y)が6144ピクセル(y)のビデオ画像を定義しているビデオファイルがある場合、そのビデオをモニタの最後に表示するようにしたい。言い換えれば、モニター上の位置0,0から始まるビデオの最初の1024ピクセル、次に位置0,64で始まるビデオピクセル1024から2047を表示し、すべての6144ピクセルがモニターに表示されるまでこれを繰り返します。つまり、ビデオは1024x768モニタで6回折り返す必要があります。ビデオをモニタにラップする方法は?

これを行うにはどのような方法が最適ですか? DirectX、DirectShow、Media Foundation、またはWindows Media PlayerのActiveXコントロールがこのラップを自動的に処理できますか?私はこれをC#で行うのが望ましいですが、C++のネイティブにドロップすることに反対しません。または、これを行う唯一の方法は、ビデオを6つのセクションに分割し、別々のウィンドウで再生することですか?それらを6つの別々のビデオに分割し、6つの別々のウィンドウで再生するのが唯一の合理的な方法です。どのようにして同期を開始するのですか?

ただ、以下のコメントあたり何かを考えることはffmpegの、および/またはC#このようなものには、この6144×64ピクセルのビデオファイルを変換できます。つまり

6144 x 64 ---> 0-1023 x 64 
       1024-2047 x 64 
       2048-3071 x 64 
       3072-4095 x 64 
       4096-5119 x 64 
       5120-6143 x 64 

それが包まれているように見えるものが、本当にただ一つのビデオそれは1024 x 384ですか?

+0

あなたのコード内でそのような作業をする代わりに、avisynthとvapoursynthのような新しい親戚を使うこともできます。 avisynthを使用する場合は、ソースプラグインffmpegsource(ffms2)に移動し、スクリプトの最後にconverttoyuy2()を使用することを忘れないでください。 – Harry

答えて

2

6144x64ビデオを問題の解像度(1024x768またはそれ以外)に変換し、それをプレイヤーパイプラインの1つに統合する変換を開発する必要があります。ビデオフレームを必要な解像度に変換すると、フレームは通常のビデオ再生と同様に表示されます。モニタ全体にまたがって再生する必要があります。プレゼンテーション終了時の再生は、標準のコンポーネントやAPIを使用できる通常のビデオファイルの再生とは異なります。

すべてのビデオAPIはネイティブです:ほとんどの場合、すべてではないにしても、C#ではなくC++でトランスフォーメーションを実装する方がよいでしょう。

DirectShowでは、通常、ビデオフレームを受け入れ、ピクセルデータを要件に合わせて再配置するトランスフォームフィルタを開発します。 Media Foundationでは、Media Foundation Transform(CPUまたはGPUドメインのデータ処理を使用)を開発することによって同様のタスクが達成されます。いずれの場合も、変換ステップをAPI定義フォームファクタにパックし、標準パイプラインを拡張しています。

また、再生パイプラインの外にフレームを準備し、準備したものを注入することもできます。可能であれば、もっと複雑な方法かもしれませんが、言及されたAPIに慣れていない方には好都合かもしれません。

プレゼンテーション用に再配置されたフレームをすぐに準備するときは、追加のプレゼンテーション同期を行う必要はありません。おそらく、これは部品への分割と同期されたプレゼンテーションの管理が前述の理由からより複雑になるという前述の作業を達成する方法です。

DirectShow vs. Media Foundation - 両方のAPIを使用すると、同じ品質とパフォーマンスでビデオを再生できます(ただし、GPUのみの処理が必要な場合があります。その場合はMedia Foundationが良い選択かもしれませんが、この利点を活用することができます)。

DirectShowは、開発の終わりに近づいていますが、オンラインチュートリアル、ディスカッション、マテリアル、ヘルパー、サンプルを提供しています。 Windows SDK 7.1 EzRGB24 Filter Sampleは、変換フィルタの開始点として適しています。

Media Foundationは、新しい「現在の」APIで、おそらくより合理的な選択肢です。Windows SDK 7.1は、開始開発ポイントとしてMFT_Grayscale Sampleを提供します。一般的には、Media Foundation用のC#MFTを実装することができます(それをしないとよい理由があります - 12)。 DirectShowはステップ学習曲線を持つAPIとして知られていますが、ビデオエフェクトデベロッパーのためにMedia Foundationはさらに複雑なAPIです。

一般に、APIの選択は、再生パイプラインに対するユーザーの好みを考慮して決定する必要があります。

+0

入力いただきありがとうございます。私が助けてくれるあらゆる種類のサンプルコード上記のようなビデオをラップするDirectShowトランスフォームフィルタまたはMF Transformのいずれかを開始しますか?私は最近、いくつかのMF Playerサンプルコードを試しています。このようなことを処理するには、変換を行う上でのあなたのメッセージからの私の理解が最善の方法です。 –

+0

ffmpegは、6144x64ビデオファイルを、上で定義したように1つのモニタで再生して、ラップされたように見せるビデオファイルに変換できますか?しかし、本質的には1024 x 768ビデオですか? –

+0

コマンドライン引数([video filters?](https://ffmpeg.org/ffmpeg-filters.html#Video-Filters))でffmpegを使用してデータを並べ替えることができるかどうかはわかりませんが、この出力をプログラムで消費するか、ffmpeg/ffplayを使用して再生する必要もあります。 –

関連する問題