9

でAVMutableCompositionの上のCALayerをエクスポートする方法を、私はこの質問をする前に依頼された知っているが、私はちょうど私が間違ってやっているかを把握することはできません(例herehereのため)。適切AVAssetExportSession

私はAVMutableCompositionを持っています。私はいくつかのビデオクリップと、その上にアニメイトするCALayerを組み合わせて使用​​しています。

私はAVMutableCompositionを持って、AVPlayerLayerの中で再生するためにAVSynchronizedLayerと組み合わせて、すべて動作します。ビデオが正しく出力され、すべてが適切な位置に配置されます。

私の問題は、私の書き出されたムービーで、私は私が代わりにAVSynchronizedLayerAVVideoCompositionCoreAnimationToolを使用してみました。この事を輸出しようとしたとき(つまり、ドキュメントが、我々は、輸出のために使うべきと言うものだ)とAVAssetExportSession、何かがうまくいかないことをすべてのCALayerたです座標系が逆になっています。

再生中に0,0点は、画面の左上隅にある場合、私は0,0ポイントは左下隅にあるムービーを書き出すときに、したがって、私のアニメーションが行くナッツ。

私がきていたのと同じ問題を持っている人のために...

+0

これまでに回答が得られた場合は、私は興味があります。 – aLevelOfIndirection

+0

私は決してこれに対する良い答えを見いだせませんでした。私がやったことは、エクスポートの直前で、アニメーションを保持するレイヤーをカスタム関数に渡していました。この関数は、すべてのサブレイヤーを再帰的にトラバースして座標を変更します...これはハックと醜い解決方法ですが、私。 –

+0

いくつかのコードを提供できますか?私は同じものをやろうとしているし、完了することができません:( –

答えて

15

を、私はこのことについてすべての可能な記事を読んで、私はまた、AppleからAVVideoEditサンプルをダウンロードしたが、私はちょうど何が起こっているかを見ることができません最終的に答えが見つかりました。すべてというと呼ばれるプロパティがあり、エクスポートする直前にYESに設定する必要があります。詳細情報here

+0

なぜこれは必要ですか? –

0
Methods that fixing frames and points 
- (CGRect) fixRect:(CGRect)rect inRect:(CGRect)container 
{ 
    CGRect frame = rect; 
    frame.origin.y = container.size.height - frame.origin.y - frame.size.height; 
    return frame; 
} 
- (CGPoint) fixPoint:(CGPoint)point fromPoint:(CGSize)containerSize 
{ 
    CGPoint frame = point; 
    frame.y = containerSize.height - frame.y; 
    return frame; 
}