Ios 使用AVMutableComposition合并视频时出现问题
我正在用iOS设备录制短视频片段,然后尝试将多个片段合并到一个较大的视频中。一切正常,除了在最终视频中,在每个片段之间,它将闪烁第一个片段的第一帧 例如,我想合并clip1、clip2、clip3。结果是(clip1)->(clip1的第一帧)->(clip2)->(clip1的第一帧)->(clip3) 下面是我用来合并它们的代码Ios 使用AVMutableComposition合并视频时出现问题,ios,avfoundation,avassetexportsession,avmutablecomposition,avasset,Ios,Avfoundation,Avassetexportsession,Avmutablecomposition,Avasset,我正在用iOS设备录制短视频片段,然后尝试将多个片段合并到一个较大的视频中。一切正常,除了在最终视频中,在每个片段之间,它将闪烁第一个片段的第一帧 例如,我想合并clip1、clip2、clip3。结果是(clip1)->(clip1的第一帧)->(clip2)->(clip1的第一帧)->(clip3) 下面是我用来合并它们的代码 AVMutableComposition* mainComposition = [[AVMutableComposition alloc] init]; AVMu
AVMutableComposition* mainComposition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack* compositionVideoTrack = [mainComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
AVMutableCompositionTrack* compositionAudioTrack = [mainComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
CMTime insertTime = kCMTimeZero;
for (NSURL* clip in self.sessionClips)
{
AVURLAsset* asset = [AVURLAsset URLAssetWithURL:clip options:@{AVURLAssetPreferPreciseDurationAndTimingKey:@YES}];
AVAssetTrack* videoAssetTrack = [[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];
AVAssetTrack* audioAssetTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration) ofTrack:videoAssetTrack atTime:insertTime error:nil];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAssetTrack.timeRange.duration) ofTrack:audioAssetTrack atTime:insertTime error:nil];
insertTime = CMTimeAdd(insertTime, videoAssetTrack.timeRange.duration);
}
/* Export the video */
NSURL* exportURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@merged-video%@", NSTemporaryDirectory(), @".mov"]];
AVAssetExportSession* exporter = [[AVAssetExportSession alloc] initWithAsset:mainComposition presetName:AVAssetExportPresetPassthrough];
[exporter setOutputURL:exportURL];
[exporter setOutputFileType:AVFileTypeMPEG4];
[exporter exportAsynchronouslyWithCompletionHandler:^(void){
/* Finished exporting, save to photo album */
[[[ALAssetsLibrary alloc] init] writeVideoAtPathToSavedPhotosAlbum:exportURL completionBlock:^(NSURL* assetURL, NSError *error) {
if (error)
NSLog(@"%@", error);
}];
}];
所有视频片段都是用AVAssetWriter使用fileType:AVFileTypeQuickTimeMovie录制的
编辑:还想添加,如果我下载视频片段并将它们与Mac上的MP4Box之类的东西合并,则生成的视频就可以了
谢谢 我能够解决这个问题 我的问题是,我正在将较小的剪辑录制为AVFileTypeQuickTimeMovie,但随后尝试将视频导出为AVFileTypeMPEG4。将较小的剪辑录制为AVFileTypeMPEG4修复了该问题