重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
- (void)viewDidLoad
京山网站建设公司创新互联建站,京山网站设计制作,有大型网站制作公司丰富经验。已为京山上千多家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的京山做网站的公司定做!
{ [superviewDidLoad];
self.array 里面放的是两个视频的地址 ,类型为NSurl
path 是你合并后的存放的地址路径
[self mergeAndExportVideos:self.array withOutPath:path];
}
- (void)mergeAndExportVideos:(NSMutableArray*)videosPathArraywithOutPath:(NSString*)outpath
{
AVMutableComposition*mixComposition =[[AVMutableComposition alloc]init];
//音频轨道
AVMutableCompositionTrack*audioTrack = [mixCompositionaddMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
//视频轨道
AVMutableCompositionTrack*videoTrack = [mixCompositionaddMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
CMTime totalDuration =kCMTimeZero;
for(inti =0; i videosPathArray.count; i++) {
//AVURLAsset:AVAsset的子类,此类主要用于获取多媒体的信息,包括视频、音频的类型、时长、每秒帧数,其实还可以用来获取视频的指定位置的缩略图。
AVURLAsset*asset = [AVURLAssetassetWithURL:videosPathArray[i]];
NSError*erroraudio =nil;
//获取AVAsset中的音频
AVAssetTrack*assetAudioTrack = [[assettracksWithMediaType:AVMediaTypeAudio]firstObject];
//向通道内加入音频
BOOLba = [audioTrackinsertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration)
ofTrack:assetAudioTrack
atTime:totalDuration
error:erroraudio];
NSLog(@"erroraudio:%@%d",erroraudio,ba);
NSError*errorVideo =nil;
//获取AVAsset中的视频
AVAssetTrack*assetVideoTrack = [[assettracksWithMediaType:AVMediaTypeVideo]firstObject];
//向通道内加入视频
BOOLbl = [videoTrackinsertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration)
ofTrack:assetVideoTrack
atTime:totalDuration
error:errorVideo];
NSLog(@"errorVideo:%@%d",errorVideo,bl);
totalDuration =CMTimeAdd(totalDuration, asset.duration);
}
//创建合成后写入的路劲
NSURL*mergeFileURL = [NSURLfileURLWithPath:outpath];
if([[NSFileManagerdefaultManager]fileExistsAtPath:outpath])
{
NSLog(@"有文件");
return;
}
//这里开始导出合成后的视频
AVAssetExportSession*exporter = [[AVAssetExportSessionalloc]initWithAsset:mixComposition
presetName:AVAssetExportPreset640x480];
exporter.outputURL= mergeFileURL;
NSLog(@"%@",exporter.supportedFileTypes);
if([self.typeisEqualToString:@"mp4"]) {
exporter.outputFileType=AVFileTypeMPEG4;
}else
{
exporter.outputFileType=AVFileTypeQuickTimeMovie;
}
exporter.shouldOptimizeForNetworkUse=YES;
[exporter exportAsynchronouslyWithCompletionHandler:^{
//导出的状态
switch(exporter.status) {
caseAVAssetExportSessionStatusUnknown:
NSLog(@"exporter Unknow");
break;
caseAVAssetExportSessionStatusCancelled:
NSLog(@"exporter Canceled");
break;
caseAVAssetExportSessionStatusFailed:
//导出失败
NSLog(@"exporter Failed");
break;
caseAVAssetExportSessionStatusWaiting:
NSLog(@"exporter Waiting");
break;
caseAVAssetExportSessionStatusExporting:
NSLog(@"exporter Exporting");
break;
caseAVAssetExportSessionStatusCompleted:
//导出成功
NSLog(@"exporter Completed");
dispatch_async(dispatch_get_main_queue(), ^{
//这里是回到你的主线程做一些事情
});
break;
}
}];
}
}
}
- (void)clearCache
{
if([[NSFileManagerdefaultManager]fileExistsAtPath:self.outPath])
{
//这里是你可以删除你合成后的视频文件
//self.outPath 是你保存视频的路劲,当然你也可以通过该路劲删除它
NSLog(@"删除成功");
[[NSFileManager defaultManager] removeItemAtPath:self.outPath error:nil];
}
}
自己遇到的坑:
1.视频和音频需要分开合成;
2.竖屏拍摄的视频,合成后改变了方向, 只好自己更改方向
实现步骤:
在.h中添加合成时需要调用的方法
在.m中添加
我们可能有时会把视频分成几个片断拍摄,完成以后需要把它们合并成一个,那么,怎么把两个或多个视频合成一个视频呢?
开启分步阅读模式
操作方法
01
进入手机中的“附加程序”,找到"iMovie剪辑",打开它。
02
选择“创建项目”,可选择“影片”或“预先片”。
03
选择“创建影片”。
04
点击加号“+”。
05
进入视频,点击要选择的视频,然后点击一个圆圈内有加号的图标。
06
继续点击“+”,重复以上步骤, 添加两个或多个视频,右下角有个设置的小图标,点击它。
07
可以在这里添加滤镜、主题和音乐等,完了以后点击“完成”。
08
这样,两个或多个视频就被合并在一起了,我们点击底部中间的保存分享小图标。
09
点击“存储视频”,就可以到相册里播放视频了。
特别提示
可以重新进入iMovie剪辑观看视频。
如有帮助,不胜荣幸。