AVMutableComposition — Пустая/черная рамка между активами видео

В настоящее время я пытаюсь поместить 5 видео подряд, используя AVMutableComposition, например:

[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset1.duration) ofAsset:asset1 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset2.duration) ofAsset:asset2 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset3.duration) ofAsset:asset3 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset4.duration) ofAsset:asset4 atTime:[mixComposition duration] error:nil];
[mixComposition insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset5.duration) ofAsset:asset5 atTime:[mixComposition duration] error:nil];

Затем я использую AVAssetExportSession для экспорта видео, которое работает, однако между каждым видео я получаю пустой/черный кадр, который мне нужно удалить. У кого-нибудь была эта проблема раньше, и если да, то удалось ли ее решить?

Кроме того, в исходных видеофайлах отсутствуют пустые кадры.

Заранее спасибо.


person AggroPanda    schedule 07.11.2011    source источник


Ответы (2)


У меня была такая же проблема на днях.

Если вы получили свои активы (актив1, актив2 и т. д.), экспортировав их из другого актива, который был создан с использованием снова вставкиTimeRange, то это тот же случай.

Проблема в том, что при экспорте ассетов, созданных с помощью insertTimeRange, экспорт идет некорректно, при прикреплении таких видео между ними появляются черные рамки.

Попробуйте использовать параметр «timeRange» в AVAssetExportSession и вырежьте нужный диапазон из основного актива. Тогда ваши активы будут прикреплены правильно.

person Vahram Dodoryan    schedule 19.12.2011

Я только что столкнулся с той же проблемой. Оказывается, решение использует AVMutableCompositionTrack и компоновку видеодорожек, что-то вроде этого.

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

[videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, asset.duration) ofTrack:[[asset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:composition.duration error:&error];

Для звуковой части, я думаю, вы должны добавить отдельную дорожку с типом AVMediaTypeAudio.

person vangoz    schedule 16.01.2012