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合併,結果視頻就沒問題。

謝謝!

回答

1

我能解決這個問題。

我的問題是我記錄AVFileTypeQuickTimeMovie較小的剪輯,但然後試圖導出AVFileTypeMPEG4視頻。將較小的剪輯錄製爲AVFileTypeMPEG4可解決問題。

相關問題