ios裁剪视频 加水印

 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;
        }
    }];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值