問題タブ [avvideocomposition]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1157 参照

avfoundation - AVAsynchronousCIImageFilteringRequest 内のフレーム番号にどのようにアクセスしますか?

CIFilterをとともに使用する場合、コールバックAVVideoCompositionで現在のフレーム番号にアクセスするにはどうすればよいですか?AVAsynchronousCIImageFilteringRequest

私ができる最善のことは、時間からフレーム番号を推定することです:

しかし、これは私にとって十分に正確ではありません。フレーム番号にアクセスする方法はありますか?

0 投票する
2 に答える
4397 参照

ios - カスタム AVVideoCompositing クラスが期待どおりに動作しない

CIFilter を AVAsset に適用し、フィルターを適用して保存しようとしています。私がこれを行う方法は、カスタムクラスを持つオブジェクトにAVAssetExportSessionwithvideoCompositionセットを使用することです。AVMutableVideoCompositionAVVideoCompositing

instructionsまた、AVMutableVideoCompositionオブジェクトの をカスタム合成命令クラス (に準拠) に設定していますAVMutableVideoCompositionInstruction。このクラスには、他のいくつかの重要でない変数とともに、トラック ID が渡されます。

残念ながら、問題が発生しましたstartVideoCompositionRequest:。カスタム ビデオ コンポジター クラス (に準拠AVVideoCompositing) の関数が正しく呼び出されません。

passthroughTrackIDカスタム命令クラスの変数をトラック ID に設定するとstartVideoCompositionRequest(request)、my の関数がAVVideoCompositing呼び出されません。

しかし、passthroughTrackIDカスタム命令クラスの変数を設定しないと、startVideoCompositionRequest(request) 呼び出されますが、正しくはありません。印刷request.sourceTrackIDsすると空の配列になりrequest.sourceFrameByTrackID(trackID)、nil 値になります。

私が見つけた興味深いことはcancelAllPendingVideoCompositionRequests:、フィルターを使用してビデオをエクスポートしようとすると、関数が常に 2 回呼び出されることでした。呼び出されない場合は、前後startVideoCompositionRequest:に 1 回、または連続して 2 回startVideoCompositionRequest:呼び出されます。

フィルターを使用してビデオをエクスポートするための 3 つのクラスを作成しました。基本的に関数を含みexport、必要なすべてのコードを呼び出すユーティリティ クラスを次に示します。

他の 2 つのクラスは次のとおりです。この投稿を短くするために、両方を 1 つのコード ブロックにまとめます。

これに関するガイダンスとして、 Apple の AVCustomEdit サンプル プロジェクトをよく調べてきましたが、これが発生する理由を見つけることができないようです。

request.sourceFrameByTrackID:関数を正しく呼び出して、CVPixelBuffer各フレームに有効な値を提供するにはどうすればよいですか?

0 投票する
3 に答える
11846 参照

ios - Swift 3: ビデオに透かしを追加する方法は? AVVideoCompositionCoreAnimationTool iOS 10 の問題

このコードは、以前は iOS9 でビデオに透かしとテキストを追加するために機能していましたが、iOS10 以降では機能しなくなりました。提出されたiOS 10 のバグがありますが、Apple からの回答はありません。ビデオに透かしとテキストを追加するための回避策を実装できませんでした。このコードを使用すると、ビデオが正常にエクスポートされる場合もありますが、ほとんどの場合、エクスポートされません。

AVVideoCompositionCoreAnimationTooliOS9と同じよう に使うにはどうすればいいですか?

注意: 削除するAVVideoCompositionCoreAnimationToolと、ビデオは常にエクスポートされますが、ビデオに透かしやテキストは表示されません。AVVideoCompositionCoreAnimationToolと競合しないようにするにはどうすればよいAVAssetExportSessionですか?

プロトコルを使用した回避策が実装されているものもcustomVideoCompositorClassありAVVideoCompositingますが、これは以前の動作に比べて重い回避策のようです。

0 投票する
1 に答える
2980 参照

ios - AVPlayer がビデオ合成結果を正しく再生しない

簡単なことが必要です。ビデオを回転させて適用CIFilterしながら再生します。

まず、プレーヤー アイテムを作成します。

次に、ビデオ構成を適用する必要があります。もともと、私はAVVideoComposition2 つの命令で作成することを考えていました.1 つはAVVideoCompositionLayerInstruction回転用で、もう 1 つはCIFilterアプリケーションです。ただし、「ビデオ構成に AVCoreImageFilterVideoCompositionInstruction のみが含まれることを期待しています」という例外がスローされました。これは、Apple がこれら 2 つの命令を組み合わせることを許可していないことを意味します。その結果、フィルタリングの下で​​両方を組み合わせました。コードは次のとおりです。

デバッグ中に作成したスクリーンショットは、画像が正常に回転し、フィルターが適用されたことを示しています (この例では、画像を変更しない ID フィルターでした)。上記のコメントでマークされたポイントで撮影されたスクリーンショット 1 とスクリーンショット 2 を次に示します。

ここに画像の説明を入力

ここに画像の説明を入力

ご覧のとおり、回転は正常に行われ、結果のフレームの範囲も正しくなりました。

このビデオをプレーヤーで再生しようとすると、問題が発生します。ここに私が得るものがあります:

ここに画像の説明を入力

そのため、すべてのフレームが縮小され、下にシフトされているようです。緑色の領域は空のフレーム情報です。範囲を固定してフレームのサイズを無限にすると、緑色ではなく境界ピクセルが表示されます。プレーヤーが から回転する前に古いサイズ情報を取得しているように感じます。そのAVPlayerItemため、上記の最初のコード スニペットでサイズと変換をログに記録していました。ログがあります。

プレーヤーは次のように設定されています。

最も重要なことに注意してください:これは、カメラを横向きのiPhone[6s] の向きで使用してアプリ自体によって録画され、以前にデバイスのストレージに保存されたビデオにのみ発生します。アプリが縦向きモードで記録するビデオはまったく問題ありません (ちなみに、縦向きのビデオはまったく同じサイズになり、横向きのビデオのようにログを変換します! 奇妙な...多分、iPhone はビデオに回転情報を入れて修正します)。そのため、ビデオのズームとシフトは、回転前の「アスペクト フィル」と古い解像度情報の組み合わせのように見えます。ちなみに、縦長のビデオ フレームは、アスペクト比が異なるプレーヤー領域を埋めるためにスケーリングされるため、部分的に表示されますが、これは想定された動作です。

これについてのあなたの考えを教えてください。私が必要とすることを達成するためのより良い方法を知っているなら、それを知っていただければ幸いです.

0 投票する
0 に答える
839 参照

avfoundation - AVAssetExportSessionのパフォーマンス(遅すぎる)

最近、AVFoundation フレームワークを使用して動画に透かしを追加し、AVAssetExportSession で新しい動画をエクスポートしました。以下のリンクは、方法と詳細を示しています。 https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_Editing.html#//apple_ref/doc/uid/TP40010188-CH8-SW1

しかし、エクスポートの速度が遅すぎます。iPhone 6sp で 1 分間の長さのウォーター マークのビデオをエクスポートするには、約 20 秒かかります。すぐにエクスポートする方法を知っている人はいますか?

PS: AVAssetExportSession でプリセット AVAssetExportPresetPassThrough を使用しようとしています。時間はかかりませんが、ウォーターマークはなくなりました。

0 投票する
0 に答える
423 参照

ios - iOSのビデオから指定されたCGRectをトリミングする

ビデオ ファイルから CGRect の特定の領域をトリミングしたいと考えています。このチュートリアルに従いました。

renderSizeのプロパティを使用AVMutableVideoCompositionして、指定されたサイズを取得しています。ビデオを指定したサイズにトリミングするために使用するコードを次に示します。

私の元のビデオはこのようなものです。画像

応募後の私の動画renderSizeAVMutableVideoCompositionこんな感じです。画像

ご覧のとおり、元のビデオから下の部分が正常に切り取られています。

サイズのあるビデオがあり、そのビデオ(1000,1000)の中央部分(500,500)の領域のみが必要だとしましょう。だから私のCGrectだろう(0,250,500,500)。私の場合、画像が存在する領域のみが必要なため、トップバーとボトムバーを切り取りたいと考えています。

だから私はこのように応募CGAffineTransformしましたAVMutableVideoCompositionLayerInstruction

この下の画像のようになりました。

画像

では、ビデオのトリミングにこの値を適用するにはどうすればよい(x,y)ですか。ここで何が間違っていますか。助けていただければ幸いです。