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 для экспорта видео, которое работает, однако между каждым видео я получаю пустую / черную рамку, которую мне нужно удалить. У кого-нибудь была эта проблема раньше, и если да, то удалось ли ее исправить?

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

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

2 ответа

Решение

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

Если вы получили свои активы (asset1, asset2 и т. Д.), Экспортировав их из другого ресурса, который был создан с использованием снова insertTimeRange, то это тот же случай.

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

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

Я только что встретил ту же проблему. Оказывается, решение использует 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.

Другие вопросы по тегам