博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
合成视频
阅读量:4992 次
发布时间:2019-06-12

本文共 1838 字,大约阅读时间需要 6 分钟。

// 合成 我的视频大小都是一样的 所以没有对他们进行缩放裁剪等操作 

- (void)mergeAndExportVideos {

    if (videoArray.count==0) {

        return;

    }

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init];

  /// 从mixComposition取出音视频 轨道

        AVMutableCompositionTrack *audioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

        AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];

        CMTime totalDuration = kCMTimeZero;

        NSError *error = nil;

        for (int i = 0; i < [videoArray count]; i++) {

            AVAsset *asset = [AVAsset assetWithURL:[[NSURL alloc] initFileURLWithPath:videoArray[i]]];

            

            [audioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration)

                                ofTrack:[[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]

                                 atTime:totalDuration

                                  error:nil];

            

            [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,asset.duration)

                                ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]

                                 atTime:totalDuration

                                  error:&error];

            totalDuration = CMTimeAdd(totalDuration, asset.duration);

        }

  /// 合成视频文件存储的路径

        NSString *path = [self getVideoMergeFilePathString];

        NSURL *mergeFileURL = [NSURL fileURLWithPath:path];

        AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPreset640x480];

        exporter.outputURL = mergeFileURL;

        exporter.outputFileType = AVFileTypeQuickTimeMovie;

        exporter.shouldOptimizeForNetworkUse = YES;

        [exporter exportAsynchronouslyWithCompletionHandler:^{

            for (NSString *path in videoArray) {

                [self delFromLocal:path];

            }

            [videoArray removeAllObjects];

//            [self savePhotoCmare:path];//写入相册

      

        }];

    });

}

 

转载于:https://www.cnblogs.com/xia0huihui/p/5430800.html

你可能感兴趣的文章
【转】Apache Solr 访问权限控制
查看>>
LoadRunner压力测试实际运用的使用方法
查看>>
项目管理理论与实践(1)——企业项目管理介绍
查看>>
MySql学习20----数据库范式
查看>>
[Mark]The problems & solutions of vmware vsphere
查看>>
在centos7 上部署 vuepress
查看>>
struts2中的标签
查看>>
Beta版总结会议
查看>>
建造者模式(Builder Pattern)
查看>>
ajax&模板引擎
查看>>
浅析Java中的final关键字
查看>>
PHP批量删除
查看>>
Android Studio 提示gradle Plugin is too old
查看>>
Android Studio中搜索中文字符串
查看>>
PostgreSQL - 转义字符
查看>>
两步搞定一台电脑同时开启多个tomcat
查看>>
jQuery EasyUI弹出确认对话框(确认操作中.....)
查看>>
CentOS7 监控网络流量
查看>>
根据控件名称反射查找控件
查看>>
编写和执行C#代码的插件:CS-Script for Notepad++
查看>>