5

AV-Outを使用して2番目の画面の1280x720ウィンドウにコンテンツを表示するiOSプロジェクトに取り組んでいます。

私はMPMoviePlayerController背景としてのビューを持っており、その上にとのような他のさまざまな要素がUIImagesありUILabelsます。バックグラウンドムービーがループ再生されます。

次に、表示されているすべての要素を含むビュー全体を、透明度のある別のフルスクリーンアニメーションでオーバーレイして、下にあるビューの一部のみが表示されるようにします。

私は最初に。でpngアニメーションを試しましたUIImageView。私はそれが実際にiPhone5で動作することを知って驚いたが、もちろんpngはサイズが非常に大きいので、これはあまりにも多くのRAMを使用し、iPhone4sより下のすべてでクラッシュする。だから私は別の方法が必要です。

AVFoundationを使用して2番目の映画を同時に再生する方法を理解しました。ここまでは順調ですね。これでオーバーレイビデオを再生できますが、もちろんまだ透明ではありません。

GPUImageまた、ライブラリを使用GPUImageChromaKeyBlendFilterすると、ビデオから色をフィルタリングして透明にし、別のビデオと組み合わせることができることも学びました。

私がまだ理解していないことは、私の場合、私が望む結果を得るためにそれを実装するための最良の方法です。

トップビデオの下のビュー階層全体をの最初の入力として使用しGPUImageChromaKeyBlendFilter、グリーンスクリーンスタイルのビデオを2番目の入力として使用して、結果を720pでライブで表示できますか?どうすればいいですか?

またはGPUImageChromaKeyFilter、グリーンスクリーンスタイルのビデオを使用してフィルタリングし、他のすべてのビューよりも上のビューで再生する方がよいでしょうか。それでは、このビデオの背景は透明になりますか?

ご協力いただきありがとうございます!

4

2 に答える 2

3

AVFoundation.framework を使用してカスタム プレーヤーを構築し、アルファ チャネルを含むビデオを使用する必要があります。AVFoundation フレームワークを使用すると、MPMedia フレームワークの多くの制限なしで、より堅牢なビデオ処理が可能になります。カスタム プレーヤーを構築することは、人々が理解するほど難しくありません。ここにチュートリアルを書きました: http://www.sdkboy.com/?p=66

他の方法..........

フレームワークの SimpleVideoFileFilter の例は、ムービーをロードし、フィルタリングし、エンコードしてディスクに戻す方法を示しています。これを変更してクロマキーを実行すると、次のようになります。

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];
}];

上記のコードは、sample.m4v というアプリケーションのリソースからムービーをロードし、0.4 の感度で純粋な青をキーオフするように設定されたクロマ キー フィルターにフィードし、クロマ キーイングに使用する背景画像を添付します。次に、そのすべてをムービー エンコーダーに送信し、アプリケーションの /Documents ディレクトリに Movie.m4v を書き込みます。

しきい値と特定の青の色合いをニーズに合わせて調整したり、必要に応じて入力画像を別の映画や他のソースに置き換えたりすることができます。このプロセスは、iOS デバイスのカメラからのライブ ビデオにも適用でき、必要に応じて結果を画面に表示できます。

iOS 5.0 を実行している iPhone 4 では、クロマ キーイングはビデオの 640x480 フレームで 1.8 ミリ秒 (500+ FPS)、720p フレーム (15 FPS) で 65 ミリ秒かかります。新しい A5 ベースのデバイスは、これらの操作よりも 6 ~ 10 倍高速であるため、汗をかくことなく 1080p ビデオを処理できます。フレームのアップロードと取得の両方に iOS 5.0 の高速テクスチャ キャッシュを使用しているため、4.x よりもその OS バージョンでの処理が高速化されています。

これに関して私が持っている 1 つの注意点は、ムービー エンコーディングでオーディオを正しく録音できていないということですが、現在、それに取り組んでいます。

于 2014-02-24T05:28:09.960 に答える
0

フレームワークの SimpleVideoFileFilter の例は、ムービーを読み込み、フィルタリングし、エンコードしてディスクに戻す方法を示しています。これを変更してクロマキーを実行すると、次のようになります。

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"];
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL];

filter = [[GPUImageChromaKeyBlendFilter alloc] init];
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0];
[filter setThresholdSensitivity:0.4];

[movieFile addTarget:filter];

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
[sourcePicture addTarget:filter];

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"];
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie];
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)];
[filter addTarget:movieWriter];

[movieWriter startRecording];
[movieFile startProcessing];

[movieWriter setCompletionBlock:^{
    [filter removeTarget:movieWriter];
    [movieWriter finishRecording];
}];

上記のコードは、sample.m4v というアプリケーションのリソースからムービーをロードし、0.4 の感度で純粋な青をキーオフするように設定されたクロマ キー フィルターにフィードし、クロマ キーイングに使用する背景画像を添付します。次に、そのすべてをムービー エンコーダーに送信し、アプリケーションの /Documents ディレクトリに Movie.m4v を書き込みます。

しきい値と特定の青の色合いをニーズに合わせて調整したり、必要に応じて入力画像を別の映画や他のソースに置き換えたりすることができます。このプロセスは、iOS デバイスのカメラからのライブ ビデオにも適用でき、必要に応じて結果を画面に表示できます。

iOS 5.0 を実行している iPhone 4 では、クロマ キーイングはビデオの 640x480 フレームで 1.8 ミリ秒 (500+ FPS)、720p フレーム (15 FPS) で 65 ミリ秒かかります。新しい A5 ベースのデバイスは、これらの操作よりも 6 ~ 10 倍高速であるため、汗をかくことなく 1080p ビデオを処理できます。フレームのアップロードと取得の両方に iOS 5.0 の高速テクスチャ キャッシュを使用しているため、4.x よりもその OS バージョンでの処理が高速化されています。

これについて私が持っている 1 つの注意点は、ムービー エンコーディングでオーディオを正しく録音できていないことですが、現在取り組んでいます。

于 2014-02-24T05:37:00.897 に答える