1. 程式人生 > >利用AVMutableVideoComposition在特定時間新增水印

利用AVMutableVideoComposition在特定時間新增水印

今天下午,一個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 屬性做修改即可。