AVVideoCompositionCoreAnimationTool使第一帧变黑

时间:2014-09-14 18:16:34

标签: objective-c iphone xcode avfoundation avmutablecomposition

当使用AVVideoCompositionCoreAnimationTool为我的某个视频添加文本叠加时,第一帧大部分时间都是黑色的。当我注释掉属于动画工具及其设置的所有代码时,一切都按预期工作,第一帧永远不会是黑色。因此,我开始认为用于构成完成视频的AVMutableComposition确实按预期工作并正确配置。以下代码用于设置文本图层:

CALayer* layer = [CALayer layer];
layer.frame = CGRectMake(0, 0, 480, 480);
layer.opacity = 0.0f;

CATextLayer* textLayer = [[CATextLayer alloc] init];
textLayer.frame = CGRectMake(0, 0, 450, 80);
[textLayer setString:@"mytext"];
textLayer.foregroundColor = [UIColor whiteColor].CGColor;
textLayer.alignmentMode = kCAAlignmentRight;
[textLayer setFont:CTFontCreateWithName((__bridge CFStringRef)@"HelveticaNeue", 18, &CGAffineTransformIdentity)];
[layer addSublayer:textLayer];

CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];

parentLayer.bounds = CGRectMake(0, 0, 480, 480);
parentLayer.anchorPoint =  CGPointMake(0, 0);
parentLayer.position = CGPointMake(0, 0);

videoLayer.bounds = CGRectMake(0, 0, 480, 480);
[parentLayer addSublayer:videoLayer];
videoLayer.position = CGPointMake(CGRectGetMidX(parentLayer.bounds), CGRectGetMidY(parentLayer.bounds));

textLayer.position = CGPointMake(CGRectGetMidX(layer.bounds), 20);

[parentLayer addSublayer:layer];
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:0)

请查看此链接

http://www.raywenderlich.com/30200/avfoundation-tutorial-adding-overlays-and-animations-to-videos

检查您是否从初始时间(0秒)开始视频对话。因为我在向视频添加文本时遇到同样的问题,我已经通过更改其初始时间来解决它。

希望这会对你有所帮助。

答案 1 :(得分:0)

对于未来的任何人来说,这就是我所做的:显然AVVideoCompositionCoreAnimationTool与AVMutableVideoCompositions不相称。因此,我首先使用AVAssetExportSession导出视频和音频但没有我的CALayer,然后在第二次传递中添加了覆盖层。我知道这可能不是一个“好”的解决方案,需要更多的处理,但最终它已经解决了。