美文网首页
iOS - 视频中的音频替换

iOS - 视频中的音频替换

作者: 壮骨 | 来源:发表于2017-11-27 15:26 被阅读0次

    需求: 替换某个视频中的音频
    基于 AVFoundation

    1.获取素材的地址

       // 创建素材地址
        NSURL *audioUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"audio.mp3" ofType:nil]];
        NSURL *videoUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video.mp4" ofType:nil]];
     
        AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioUrl options:nil];
        AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:videoUrl options:nil];
    

    2.创建一个合成视频的工程文件

        AVMutableComposition* composition = [AVMutableComposition composition];
    

    3.创建轨道 并插入素材

        // 创建音频轨道
        AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
        //在视频轨道插入一个时间段的视频
        [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:kCMTimeZero error:nil];
        
        // 创建视频轨道
        AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
        //在视频轨道插入一个时间段的音频
        [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil];
    

    4.导出合成的视频文件

        // 保存地址
        NSString* videoName = @"export.mov";
        NSString *exportPath = [NSTemporaryDirectory() stringByAppendingPathComponent:videoName];
        NSURL    *exportUrl = [NSURL fileURLWithPath:exportPath];
        
        if ([[NSFileManager defaultManager] fileExistsAtPath:exportPath])
        {
            [[NSFileManager defaultManager] removeItemAtPath:exportPath error:nil];
        }
        
        //导出视频
        AVAssetExportSession* assetExport = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetPassthrough];
        NSLog(@"%@",exportPath);
        assetExport.outputFileType = AVFileTypeQuickTimeMovie;
        NSLog(@"file type %@",assetExport.outputFileType);
        assetExport.outputURL = exportUrl;
        assetExport.shouldOptimizeForNetworkUse = YES;
        
        [assetExport exportAsynchronouslyWithCompletionHandler:
         ^(void ) {
             NSLog(@"status : %ld",assetExport.status);
         }];
    

    这样合成会有个问题,就是如果视频和音频的时长不一 会取更长的时长
    后期有时间会补上 视频的一些其他操作方法

    相关文章

      网友评论

          本文标题:iOS - 视频中的音频替换

          本文链接:https://www.haomeiwen.com/subject/lskkbxtx.html