1
我正在用iOS設備錄製短片段,然後嘗試將多個片段合併爲一個較大的視頻。一切工作正常,除了在最後的視頻中,每個片段之間它將閃爍第一個剪輯的第一幀。使用AVMutableComposition發佈合併視頻
例如,我想合併clip1,clip2,clip3。結果是(clip1) - >(clip1的第一幀) - >(clip2) - >(clip1的第一幀) - >(clip3)
下面是我用來合併它們的代碼。
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);
}];
}];
所有的視頻片段都使用fileType:AVFileTypeQuickTimeMovie與AVAssetWriter一起錄製。
編輯:還想添加,如果我下載了視頻片段並將它們與我的Mac上的MP4Box合併,結果視頻就沒問題。
謝謝!