1

我只想在几毫秒内将图像添加到视频中,所以我尝试使用CALayer来做到这一点,

UIImage *animationImage = [UIImage imageNamed:@"arrow.png"];
CALayer *overlayLayer1 = [CALayer layer];
[overlayLayer1 setContents:(id)[animationImage CGImage]];
//overlayLayer1.frame = CGRectMake(size.width/2-64, size.height/2 + 200, 128, 128);

overlayLayer1.frame = CGRectMake(0, 0, size.width, size.height);
[overlayLayer1 setMasksToBounds:YES];


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:overlayLayer1];

它可以工作,我可以制作输出视频,但在输出视频中显示箭头 png 图像整个持续时间,但我只想添加 2 秒。

有可能做到这一点吗?

4

3 回答 3

1

它使用 AVAssetWriter 从图像生成视频然后使用 AVMutableVideoComposition 组合资产的另一种方式。您可以调整资产的久期:

[compositionVideoTracks insertTimeRange:timeRange ofTrack:videoTrack atTime:_currentDuration error:&error];
于 2014-12-04T07:43:55.470 回答
0

它对我来说适用于文本层

- (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size{
// 1 - Set up the text layer
CATextLayer *subtitle1Text = [[CATextLayer alloc] init];
[subtitle1Text setFont:@"Helvetica-Bold"];
[subtitle1Text setFontSize:36];
[subtitle1Text setFrame:CGRectMake(0, 0, size.width, 100)];
[subtitle1Text setString:_subTitle1.text];
[subtitle1Text setAlignmentMode:kCAAlignmentCenter];
[subtitle1Text setForegroundColor:[[UIColor whiteColor] CGColor]];

// 2 - The usual overlay
CALayer *overlayLayer = [CALayer layer];
[overlayLayer addSublayer:subtitle1Text];
overlayLayer.frame = CGRectMake(0, 0, size.width, size.height);
[overlayLayer setMasksToBounds:YES];

// the code for the opacity animation which then removes the text
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[animation setDuration:2]; //duration
[animation setFromValue:[NSNumber numberWithFloat:1.0]];
[animation setToValue:[NSNumber numberWithFloat:0.0]];
[animation setBeginTime:5]; // time to show text
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[subtitle1Text addAnimation:animation forKey:@"animateOpacity"];
////

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:overlayLayer];

composition.animationTool = [AVVideoCompositionCoreAnimationTool
                             videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];}
于 2016-01-27T10:21:01.467 回答
-1

2 秒后,您必须overLayer1parentLayer.

[overLayer1 removeFromSuperlayer];
于 2014-12-04T07:16:00.623 回答