問題タブ [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.
avfoundation - AVAsynchronousCIImageFilteringRequest 内のフレーム番号にどのようにアクセスしますか?
CIFilter
をとともに使用する場合、コールバックAVVideoComposition
で現在のフレーム番号にアクセスするにはどうすればよいですか?AVAsynchronousCIImageFilteringRequest
私ができる最善のことは、時間からフレーム番号を推定することです:
しかし、これは私にとって十分に正確ではありません。フレーム番号にアクセスする方法はありますか?
ios - カスタム AVVideoCompositing クラスが期待どおりに動作しない
CIFilter を AVAsset に適用し、フィルターを適用して保存しようとしています。私がこれを行う方法は、カスタムクラスを持つオブジェクトにAVAssetExportSession
withvideoComposition
セットを使用することです。AVMutableVideoComposition
AVVideoCompositing
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
各フレームに有効な値を提供するにはどうすればよいですか?
ios - Swift 3: ビデオに透かしを追加する方法は? AVVideoCompositionCoreAnimationTool iOS 10 の問題
このコードは、以前は iOS9 でビデオに透かしとテキストを追加するために機能していましたが、iOS10 以降では機能しなくなりました。提出されたiOS 10 のバグがありますが、Apple からの回答はありません。ビデオに透かしとテキストを追加するための回避策を実装できませんでした。このコードを使用すると、ビデオが正常にエクスポートされる場合もありますが、ほとんどの場合、エクスポートされません。
AVVideoCompositionCoreAnimationTool
iOS9と同じよう に使うにはどうすればいいですか?
注意: 削除するAVVideoCompositionCoreAnimationTool
と、ビデオは常にエクスポートされますが、ビデオに透かしやテキストは表示されません。AVVideoCompositionCoreAnimationTool
と競合しないようにするにはどうすればよいAVAssetExportSession
ですか?
プロトコルを使用した回避策が実装されているものもcustomVideoCompositorClass
ありAVVideoCompositing
ますが、これは以前の動作に比べて重い回避策のようです。
ios - AVPlayer がビデオ合成結果を正しく再生しない
簡単なことが必要です。ビデオを回転させて適用CIFilter
しながら再生します。
まず、プレーヤー アイテムを作成します。
次に、ビデオ構成を適用する必要があります。もともと、私はAVVideoComposition
2 つの命令で作成することを考えていました.1 つはAVVideoCompositionLayerInstruction
回転用で、もう 1 つはCIFilter
アプリケーションです。ただし、「ビデオ構成に AVCoreImageFilterVideoCompositionInstruction のみが含まれることを期待しています」という例外がスローされました。これは、Apple がこれら 2 つの命令を組み合わせることを許可していないことを意味します。その結果、フィルタリングの下で両方を組み合わせました。コードは次のとおりです。
デバッグ中に作成したスクリーンショットは、画像が正常に回転し、フィルターが適用されたことを示しています (この例では、画像を変更しない ID フィルターでした)。上記のコメントでマークされたポイントで撮影されたスクリーンショット 1 とスクリーンショット 2 を次に示します。
ご覧のとおり、回転は正常に行われ、結果のフレームの範囲も正しくなりました。
このビデオをプレーヤーで再生しようとすると、問題が発生します。ここに私が得るものがあります:
そのため、すべてのフレームが縮小され、下にシフトされているようです。緑色の領域は空のフレーム情報です。範囲を固定してフレームのサイズを無限にすると、緑色ではなく境界ピクセルが表示されます。プレーヤーが から回転する前に古いサイズ情報を取得しているように感じます。そのAVPlayerItem
ため、上記の最初のコード スニペットでサイズと変換をログに記録していました。ログがあります。
プレーヤーは次のように設定されています。
最も重要なことに注意してください:これは、カメラを横向きのiPhone[6s] の向きで使用してアプリ自体によって録画され、以前にデバイスのストレージに保存されたビデオにのみ発生します。アプリが縦向きモードで記録するビデオはまったく問題ありません (ちなみに、縦向きのビデオはまったく同じサイズになり、横向きのビデオのようにログを変換します! 奇妙な...多分、iPhone はビデオに回転情報を入れて修正します)。そのため、ビデオのズームとシフトは、回転前の「アスペクト フィル」と古い解像度情報の組み合わせのように見えます。ちなみに、縦長のビデオ フレームは、アスペクト比が異なるプレーヤー領域を埋めるためにスケーリングされるため、部分的に表示されますが、これは想定された動作です。
これについてのあなたの考えを教えてください。私が必要とすることを達成するためのより良い方法を知っているなら、それを知っていただければ幸いです.
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 を使用しようとしています。時間はかかりませんが、ウォーターマークはなくなりました。
ios - iOSのビデオから指定されたCGRectをトリミングする
ビデオ ファイルから CGRect の特定の領域をトリミングしたいと考えています。このチュートリアルに従いました。
renderSize
のプロパティを使用AVMutableVideoComposition
して、指定されたサイズを取得しています。ビデオを指定したサイズにトリミングするために使用するコードを次に示します。
応募後の私の動画renderSize
はAVMutableVideoComposition
こんな感じです。
ご覧のとおり、元のビデオから下の部分が正常に切り取られています。
サイズのあるビデオがあり、そのビデオ(1000,1000)
の中央部分(500,500)
の領域のみが必要だとしましょう。だから私のCGrect
だろう(0,250,500,500)
。私の場合、画像が存在する領域のみが必要なため、トップバーとボトムバーを切り取りたいと考えています。
だから私はこのように応募CGAffineTransform
しましたAVMutableVideoCompositionLayerInstruction
この下の画像のようになりました。
では、ビデオのトリミングにこの値を適用するにはどうすればよい(x,y)
ですか。ここで何が間違っていますか。助けていただければ幸いです。