如何以编程方式为视频文件添加水印
Posted
技术标签:
【中文标题】如何以编程方式为视频文件添加水印【英文标题】:How to programmatically watermark a video file 【发布时间】:2018-07-10 14:38:49 【问题描述】:我有一个用户从 iPhone 摄像头录制的视频文件。然后,我想生成一个新的视频文件,其中包含一个 PNG 图层,该图层位于其之上。
如何在Objective-C
中完成这样的任务?
我很高兴生成我的代码来展示我如何录制视频文件,但你可以假设它是一个普通的 .mov 文件。
非常感谢!
【问题讨论】:
【参考方案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];
【讨论】:
以上是关于如何以编程方式为视频文件添加水印的主要内容,如果未能解决你的问题,请参考以下文章