ios裁剪视频 加水印
2015-09-15 09:58
501 查看
AVAsset *avAsset = [AVAsset assetWithURL:[NSURL fileURLWithPath:v_strVideoPath]];
AVMutableComposition *avMutableComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *avMutableCompositionTrack = [avMutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *avAssetTrack = [[avAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
NSError *error = nil;
[avMutableCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:avAssetTrack atTime:kCMTimeZero error:nil];
AVMutableVideoComposition *avMutableVideoComposition = [AVMutableVideoComposition videoComposition] ;
// 这个视频大小可以由你自己设置
if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset1920x1080]){
avMutableVideoComposition.renderSize = CGSizeMake(1080, 1080);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset1280x720]){
avMutableVideoComposition.renderSize = CGSizeMake(720, 720);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset640x480]){
avMutableVideoComposition.renderSize = CGSizeMake(480, 480);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPresetMedium]){
avMutableVideoComposition.renderSize = CGSizeMake(360, 360);
}
// avMutableVideoComposition.renderSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width);
avMutableVideoComposition.frameDuration = CMTimeMake(1, 24);
UIImage* waterMark=[UIImage imageNamed:@"视频水印"];
CALayer* aLayer=[CALayer layer];
aLayer.contents=(id)waterMark.CGImage;
//坐标是我自己的算法,换成自己的就行了,注意y坐标是反向的
aLayer.frame=CGRectMake(avMutableVideoComposition.renderSize.width-[NSObject convertPx:264],avMutableVideoComposition.renderSize.height-[NSObject convertPx:90] , [NSObject convertPx:238], [NSObject convertPx:62]);
CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];
parentLayer.backgroundColor=[[UIColor yellowColor]CGColor];
parentLayer.frame = CGRectMake(0, 0, avMutableVideoComposition.renderSize.width, avMutableVideoComposition.renderSize.height);
videoLayer.frame = CGRectMake(0, 0, avMutableVideoComposition.renderSize.width, avMutableVideoComposition.renderSize.height);
[parentLayer addSublayer:videoLayer];
[parentLayer addSublayer:aLayer];
avMutableVideoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
AVMutableVideoCompositionInstruction *avMutableVideoCompositionInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
[avMutableVideoCompositionInstruction setTimeRange:CMTimeRangeMake(kCMTimeZero, [avMutableComposition duration])];
AVMutableVideoCompositionLayerInstruction *avMutableVideoCompositionLayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:avAssetTrack];
[avMutableVideoCompositionLayerInstruction setTransform:avAssetTrack.preferredTransform atTime:kCMTimeZero];
avMutableVideoCompositionInstruction.layerInstructions = [NSArray arrayWithObject:avMutableVideoCompositionLayerInstruction];
avMutableVideoComposition.instructions = [NSArray arrayWithObject:avMutableVideoCompositionInstruction];
NSFileManager *fm = [[NSFileManager alloc] init];
if ([fm fileExistsAtPath:v_strSavePath]) {
NSLog(@"video is have. then delete that");
if ([fm removeItemAtPath:v_strSavePath error:&error]) {
NSLog(@"delete is ok");
}else {
NSLog(@"delete is no error = %@",error.description);
}
}
avAssetExportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset1280x720];
[avAssetExportSession setVideoComposition:avMutableVideoComposition];
[avAssetExportSession setOutputURL:[NSURL fileURLWithPath:v_strSavePath]];
[avAssetExportSession setOutputFileType:AVFileTypeMPEG4];
[avAssetExportSession setShouldOptimizeForNetworkUse:YES];
NSLog(@"start export time:%ld",(long)[[NSDate date]timeIntervalSince1970]);
[avAssetExportSession exportAsynchronouslyWithCompletionHandler:^(void){
switch (avAssetExportSession.status) {
case AVAssetExportSessionStatusFailed:
NSLog(@"exporting failed %@",[avAssetExportSession error]);
break;
case AVAssetExportSessionStatusCompleted:
NSLog(@"end export time:%ld",(long)[[NSDate date]timeIntervalSince1970]);
// 想做什么事情在这个做
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"export cancelled");
break;
}
}];
AVMutableComposition *avMutableComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *avMutableCompositionTrack = [avMutableComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *avAssetTrack = [[avAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
NSError *error = nil;
[avMutableCompositionTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:avAssetTrack atTime:kCMTimeZero error:nil];
AVMutableVideoComposition *avMutableVideoComposition = [AVMutableVideoComposition videoComposition] ;
// 这个视频大小可以由你自己设置
if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset1920x1080]){
avMutableVideoComposition.renderSize = CGSizeMake(1080, 1080);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset1280x720]){
avMutableVideoComposition.renderSize = CGSizeMake(720, 720);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPreset640x480]){
avMutableVideoComposition.renderSize = CGSizeMake(480, 480);
}else if([_captureSession.sessionPreset isEqualToString:AVCaptureSessionPresetMedium]){
avMutableVideoComposition.renderSize = CGSizeMake(360, 360);
}
// avMutableVideoComposition.renderSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width);
avMutableVideoComposition.frameDuration = CMTimeMake(1, 24);
UIImage* waterMark=[UIImage imageNamed:@"视频水印"];
CALayer* aLayer=[CALayer layer];
aLayer.contents=(id)waterMark.CGImage;
//坐标是我自己的算法,换成自己的就行了,注意y坐标是反向的
aLayer.frame=CGRectMake(avMutableVideoComposition.renderSize.width-[NSObject convertPx:264],avMutableVideoComposition.renderSize.height-[NSObject convertPx:90] , [NSObject convertPx:238], [NSObject convertPx:62]);
CALayer *parentLayer = [CALayer layer];
CALayer *videoLayer = [CALayer layer];
parentLayer.backgroundColor=[[UIColor yellowColor]CGColor];
parentLayer.frame = CGRectMake(0, 0, avMutableVideoComposition.renderSize.width, avMutableVideoComposition.renderSize.height);
videoLayer.frame = CGRectMake(0, 0, avMutableVideoComposition.renderSize.width, avMutableVideoComposition.renderSize.height);
[parentLayer addSublayer:videoLayer];
[parentLayer addSublayer:aLayer];
avMutableVideoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithPostProcessingAsVideoLayer:videoLayer inLayer:parentLayer];
AVMutableVideoCompositionInstruction *avMutableVideoCompositionInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
[avMutableVideoCompositionInstruction setTimeRange:CMTimeRangeMake(kCMTimeZero, [avMutableComposition duration])];
AVMutableVideoCompositionLayerInstruction *avMutableVideoCompositionLayerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:avAssetTrack];
[avMutableVideoCompositionLayerInstruction setTransform:avAssetTrack.preferredTransform atTime:kCMTimeZero];
avMutableVideoCompositionInstruction.layerInstructions = [NSArray arrayWithObject:avMutableVideoCompositionLayerInstruction];
avMutableVideoComposition.instructions = [NSArray arrayWithObject:avMutableVideoCompositionInstruction];
NSFileManager *fm = [[NSFileManager alloc] init];
if ([fm fileExistsAtPath:v_strSavePath]) {
NSLog(@"video is have. then delete that");
if ([fm removeItemAtPath:v_strSavePath error:&error]) {
NSLog(@"delete is ok");
}else {
NSLog(@"delete is no error = %@",error.description);
}
}
avAssetExportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset1280x720];
[avAssetExportSession setVideoComposition:avMutableVideoComposition];
[avAssetExportSession setOutputURL:[NSURL fileURLWithPath:v_strSavePath]];
[avAssetExportSession setOutputFileType:AVFileTypeMPEG4];
[avAssetExportSession setShouldOptimizeForNetworkUse:YES];
NSLog(@"start export time:%ld",(long)[[NSDate date]timeIntervalSince1970]);
[avAssetExportSession exportAsynchronouslyWithCompletionHandler:^(void){
switch (avAssetExportSession.status) {
case AVAssetExportSessionStatusFailed:
NSLog(@"exporting failed %@",[avAssetExportSession error]);
break;
case AVAssetExportSessionStatusCompleted:
NSLog(@"end export time:%ld",(long)[[NSDate date]timeIntervalSince1970]);
// 想做什么事情在这个做
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"export cancelled");
break;
}
}];
相关文章推荐
- IOS-通信录
- iOS开发工具Xcode 8.4版本 添加包的操作
- iOS学习笔记:懒加载
- iOS学习笔记:常用第三方框架
- iOS 技术分享
- iOS 9之3D Touch
- iOS证书说明和发布
- iOS开发中视图的下拉放大和上拉模糊的效果实现
- GitHub上值得关注的iOS开源项目
- IOS资源收集
- iOS block 陷阱解析
- iOS中nil 、NULL、 Nil 、NSNull的区别
- iOS - 正则表达式判断邮箱、身份证是否正确
- iOS 警告收录及科学快速的消除方法---来源董铂然
- IOS学习笔记 ---- 15/09/14
- 苹果开发 笔记(72)二维码
- iOS开发脚踏实地学习day08-QQ聊天界面
- ios-新浪微博(5)设置导航栏主题
- ioS
- ios开发 -新浪微博(4)封装item 添加分类