我正在使用 AVFoundation
通过自定义视频合成器来编辑电影,但我似乎无法使用核心动画来实现这一点。播放效果很好,但当我尝试导出时,我得到了意想不到的结果。
我的代码是这样的:
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
videoComposition.instructions = videoInstructions;
videoComposition.frameDuration = CMTimeMake(1, videoTrackA.naturalTimeScale);
videoComposition.renderSize = size;
videoComposition.customVideoCompositorClass = self.project.videoEdits.editClass;
if( isExport )
videoComposition.animationTool = [self createAnimationToolForSize:size];
其中 createAnimationToolForSize
:看起来像这样:
-(AVVideoCompositionCoreAnimationTool *) createAnimationToolForSize:(CGSize) size
{
CATextLayer *titleLayer = [CATextLayer layer];
titleLayer.string = @"Text goes here";
titleLayer.font = (__bridge CFTypeRef)(@"Helvetica");
titleLayer.fontSize = size.height / 20;
titleLayer.cornerRadius = size.height / 50;
titleLayer.foregroundColor = [UIColor blackColor].CGColor;
titleLayer.backgroundColor = [UIColor whiteColor].CGColor;
titleLayer.frame = CGRectMake(size.width/4, size.height/4, size.width/2, size.height/2 );
titleLayer.opacity = .5;
//CALayer *parentLayer = [CALayer layer];
//CALayer *videoLayer = [CALayer layer];
//parentLayer.frame = CGRectMake(0, 0, size.width, size.height);
//videoLayer.frame = CGRectMake(0, 0, size.width, size.height);
//[parentLayer addSublayer:videoLayer];
//[parentLayer addSublayer:titleLayer];
//return [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
return [AVVideoCompositionCoreAnimationTool
videoCompositionCoreAnimationToolWithAdditionalLayer:
titleLayer
asTrackID:2];
}
所写的代码导出了一个黑色背景和一个没有文本的白色圆角矩形的视频。原本应该在背景中看到的原始视频,在边缘附近是不可见的。
如果我用注释行替换最后一行,我只会得到没有动画的原始图像。
是否可以同时获取电影和动画(包括文字)?难道我做错了什么?我是否需要以某种方式考虑我的合成器中的动画层,或者这是一个阻止您在 AVFoundation
中将 core animation
与自定义合成器一起使用的错误?
最佳答案
如果我为它创建一个新轨道,我能够让动画显示,但是我的自定义渲染器需要能够处理不同数量的轨道(n
在实时渲染时,因为动画在 CALayer 中,与电影和导出时 n+1
分开,因为该层现在作为轨道存在)。这当然是可行的,即使它很复杂,但它留下了一些 Unresolved 问题:例如,我从来没有弄清楚为什么我的文本没有显示在我的 CATextLayer
中。
因此,即使我确实重写了我的代码,我也不清楚这个策略是否有效。
关于ios - AVFoundation 使用 customVideoCompositorClass 和 animationTool 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23682147/