3

私の質問/問題が他の投稿と異なるのは、ビューをスケーリングするのではなく、アセットレイヤーの命令 (AVMutableVideoCompositionLayerInstruction) をスケーリングしていることだと思います。そのため、アンカー ポイント、view.center、CG Rect スケーリングの設定はすべて機能しません。

CGAffineTransformMakeTranslation を使用してアセットを移動して、中央に配置されているように見せますが、これは非常に不正確です。中央から拡大縮小する方法がわかりません。不足しているプロパティはありますか? ドキュメントとガイドはあまり役に立ちませんが、何か見落としている可能性があります。

コードは以下です。よろしくお願いします!!! :)

また、CGTransforms で avasset をエクスポートする方法を探している人のために、以下のコードはそこに到達するためのすべての手順です。もちろん、CMTimeRanges などの詳細を記入する必要がありますが、これが誰かがこの紛らわしいことを理解するのに役立つことを願っています。

-(void) goAssetsExport {
    AVMutableComposition *composition = [[AVMutableComposition alloc] init];

    AVMutableCompositionTrack *firstTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

    AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
    videoComposition.frameDuration = CMTimeMake(1,30);
    videoComposition.renderScale = 1.0;
    videoComposition.renderSize = CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height);

    NSURL *movieURL = [[NSBundle mainBundle] URLForResource:[NSString stringWithFormat:@"%@",   [preloadEffectsArray objectAtIndex:i]]  withExtension:@"mov"];
    AVURLAsset *firstAsset = [AVURLAsset URLAssetWithURL:movieURL options:nil];
    AVAssetTrack *firstAssetTrack = [[firstAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

    [firstTrack insertTimeRange:CMTimeRangeMake(firstTrackRangeMin, duration) ofTrack:firstAssetTrack atTime:firstTrackRangeMin error:nil];

    AVMutableVideoCompositionInstruction *transitionInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];

    AVMutableVideoCompositionLayerInstruction *fromLayer = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:firstTrack];


    //**This is where problem might be?**//
    CGAffineTransform Scaler = CGAffineTransformMakeScale(scaleNumber,scaleNumber);
    CGAffineTransform Mover = CGAffineTransformMakeTranslation(scaleNumber * -100, scaleNumber * -150);

    [fromLayer setTransform:CGAffineTransformConcat(Scaler,Mover) atTime:firstTrackRangeMin];

    transitionInstruction.layerInstructions = [NSArray arrayWithObject:fromLayer];

    videoComposition.instructions = instructionArray;

    [self exportVideo:composition withInstructionComposition:videoComposition];
}
4

1 に答える 1