2011-07-04 18 views
10

アルファチャンネルの透明度を維持しながら、GLテクスチャ上にビデオを表示する最適な方法を理解しようとしています。iOS:アルファ透明度を持つGLテクスチャとしてのビデオ

GLテクスチャとしてのビデオに関する情報は、Is it possible using video as texture for GL in iOS?およびiOS4: how do I use video file as an OpenGL texture?です。

アルファ透明度を支援するためのffmpegを使用してではなく、アプリケーションストアにやさしいはここにある: iPhone: Display a semi-transparent video on top of a UIView?

ビデオソースは、クロマキー用グリーンスクリーンの前で撮影されるだろう。ビデオはそのまま緑色の画面を残すか、ビデオ編集スイートで処理し、アルファ付きQuickTimeアニメーションまたはApple Pro Res 4444にエクスポートすることができます。

私は潜在的に効果があると思うアプローチがいくつかありますが、完全な解決策が見つかりませんでした。

  1. 2本のビデオを一緒にブレンドアルファチャンネル
  2. を維持するために、上述したQuickTimeコーデックを使用する方法
  3. 図アウトを除去する緑色探してビデオのリアルタイム閾値処理:RGB 2と1)メインビデオ)アルファを持つ独立したビデオは、マスク

私はiOSとのOpenGL ES 2.0

感謝するための最良のアプローチに自分の考えを取得するのが大好きです。

+0

私にとって、あなたがしたいことは全くわかりません。あなたはどのようにしてビデオをアプリに持ってきますか? – tomk

+0

主なバンドルにローカルに格納されている可能性があります – ryatkins

+0

シェーダでは常にカラーキーイングを行うことができますが、これは非常に簡単な操作です。 –

答えて

0

アップルは、OpenGLテクスチャに渡されたビデオのフレームを扱い、操作し、オプションでビデオファイルに書き出す方法を示す、ChromaKeyと呼ばれるWWDCのサンプルアプリケーションを2011年に示しました。ビデオカメラからのフィードを使用するように書かれており、非常に粗クロマキーアルゴリズムを使用してい

(非常にパフォーマンスのように)

他のポスターは言ったように、あなたはおそらくクロマキーコードをスキップして、自分自身で事前にカラーノックアウトをしたいと思うでしょう。

カメラの代わりに入力としてビデオファイルを使用するようにChromakeyサンプルアプリを書き直すのは難しくありません。また、chormakeyコードを無効にするのは簡単です。

RGBまたはY/UVの代わりにRGBAデータが必要な場合は、ビデオ入力の設定を変更する必要があります。サンプルアプリケーションはRGBを使用するように設定されていますが、代わりにY/UVを使用するAppleの他のサンプルアプリケーションを見てきました。

4

ムービーと別のシーンを単純にブレンドするクロマキーイングを行う最も簡単な方法は、GPUImageフレームワークのGPUImageChromaKeyBlendFilterを使用することです。ムービーソースをGPUImageMovieとして提供し、背景のコンテンツとブレンドすることができます。クロマキーフィルターを使用すると、色、その色との近接性、および置換操作で使用するブレンディングの滑らかさを指定できます。このすべては、調整されたシェーダを介してGPUアクセラレーションされます。

画像、ムービー、ライブカメラはソースとして使用できますが、ムービーの背後にあるOpenGL ESコンテンツでレンダリングしたい場合は、OpenGL ESコンテンツをテクスチャベースのFBOにレンダリングして渡すことをおすすめしますそのテクスチャはGPUImageTextureInputを介して入力されます。

キーフレームの色を0色のアルファチャンネルの定数色に置き換えてムービーフレームを含むテクスチャを出力することもできます。このテクスチャは、GPUImageTextureOutputを使用して抽出し、後でOpenGL ESシーンで使用することができます。

0

アプリストアで無料の「APNG」アプリをご覧ください。アニメーションPNG(.apng)をiOSビューに直接レンダリングする方法を示します。重要なのは、APNGがファイル形式のアルファチャンネルをサポートしているため、すべてのビデオコンテンツで実際には機能しないクロマ技法を使いこなす必要はありません。このアプローチは、テクスチャがループ内で表示されるたびに別のラウンド処理が必要ないので、複数のレイヤーまたはクロマのトリックがより効率的です。

OpenGL ES2を使って回転キューブの側面にアルファチャンネルのアニメーションを表示する小さなサンプルのxcodeプロジェクトを見たい場合は、Load OpenGL textures with alpha channel on iOSにあります。このコード例はglTexImage2D()の簡単な呼び出しを示しており、ディスプレイリンクコールバックごとに一度だけグラフィックスカードにテクスチャをアップロードします。

関連する問題