利用AVMutableVideoComposition在特定時間新增水印
阿新 • • 發佈:2018-11-10
今天下午,一個csdn上的朋友加我QQ,問我如何在指定時間段內給視訊新增水印,很小眾的需求,但是確實有一些應用場景。我研究了一下,在之前加水印的基礎上,加了一個動畫,效果還可以,故分享給大家。
- (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size{
// 1 - set up the overlay
CALayer *overlayLayer = [CALayer layer];
UIImage *overlayImage = [UIImage imageNamed:@"waterMark"];
[overlayLayer setContents:(id)[overlayImage CGImage]];
overlayLayer.frame = CGRectMake(size.width - 146, 24, 135, 18);
[overlayLayer setMasksToBounds:YES];
// 2 - set up the parent layer
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];
//*********** For A Special Time
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"opacity" ];
[animation setDuration:0];
[animation setFromValue:[NSNumber numberWithFloat:1.0]];
[animation setToValue:[NSNumber numberWithFloat:0.0]];
[animation setBeginTime:5];
[animation setRemovedOnCompletion:NO];
[animation setFillMode:kCAFillModeForwards];
[overlayLayer addAnimation:animation forKey:@"animateOpacity"];
// 3 - apply magic
composition.animationTool = [AVVideoCompositionCoreAnimationTool
videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
}
其中,//* For A Special Time 程式碼段的內容,表示在第5秒的時候,將水印隱藏,從而達到了水印只顯示前5秒的效果。如果想實現其他效果,只要對layer的 opacity 屬性做修改即可。