您的位置:首页 > 移动开发 > IOS开发

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;

        }

    }];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: