【问题标题】:How to programmatically watermark a video file如何以编程方式为视频文件添加水印
【发布时间】:2018-07-10 14:38:49
【问题描述】:

我有一个用户从 iPhone 摄像头录制的视频文件。然后,我想生成一个新的视频文件,其中包含一个 PNG 图层,该图层位于其之上。

如何在Objective-C 中完成这样的任务?

我很高兴生成我的代码来展示我如何录制视频文件,但你可以假设它是一个普通的 .mov 文件。

非常感谢!

【问题讨论】:

    标签: ios objective-c ipad avfoundation


    【解决方案1】:

    在本地保存文件之前,创建一个 CATextLayer 并将其附加到视频中。我相信这段代码会帮助你,我为我的应用程序编写的代码。

    - (void)applyVideoEffectsToComposition:(AVMutableVideoComposition *)composition size:(CGSize)size
    {
        NSArray *fieldsArray = overlayFieldsArray;
        // 1 - Set up the text layer
        CATextLayer *subtitle1Text = [[CATextLayer alloc] init];
        subtitle1Text.wrapped=YES;
        subtitle1Text.alignmentMode = kCAAlignmentLeft;
        [subtitle1Text setFont:@"Helvetica-Bold"];
        [subtitle1Text setFontSize:textSize];
        [subtitle1Text setFrame:CGRectMake(0, 0, size.width, fieldsArray.count*textSize+20) ];
    
    
        NSMutableString *layerText = [NSMutableString stringWithCapacity:0];
    
        for(NSDictionary *fieldDictionary in fieldsArray){
    
            [layerText appendFormat:@" %@ :",[[fieldDictionary allKeys] objectAtIndex:0]];
    
            [layerText appendFormat:@" %@ \n",[_candidateDictionary valueForKey:[[fieldDictionary allValues] objectAtIndex:0]]];
        }
    
    
        [subtitle1Text setString:layerText];
    
        [subtitle1Text setForegroundColor:[[UIColor colorForText] CGColor]];
    
        // 2 - The usual overlay
        CALayer *overlayLayer = [CALayer layer];
        overlayLayer.backgroundColor = [UIColor colorForLayer].CGColor;
        overlayLayer.opacity=0.5f;
        CGSize maximumSize = CGSizeMake(600, 600);
        UIFont *myFont = [UIFont fontWithName:@"Helvetica" size:textSize];
        CGSize layerTextSize = [layerText sizeWithFont:myFont
                                     constrainedToSize:maximumSize
                                         lineBreakMode:UILineBreakModeWordWrap];
        overlayLayer.frame = CGRectMake(10, 0, layerTextSize.width*1.1, fieldsArray.count*textSize+20);
        [overlayLayer setMasksToBounds:YES];
    
        [overlayLayer addSublayer:subtitle1Text];
    
        CALayer *parentLayer = [CALayer layer];
    
        CALayer *videoLayer = [CALayer layer];
        videoLayer.frame = CGRectMake(0, 0, size.width, size.height);
        [parentLayer addSublayer:videoLayer];
    
    
        parentLayer.frame = CGRectMake(10, 0, layerTextSize.width*1.1, fieldsArray.count*textSize+20);
        [parentLayer addSublayer:overlayLayer];
    
    
    
        composition.animationTool = [AVVideoCompositionCoreAnimationTool
                                     videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
    
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-17
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多