AVMutableComposition - пустая / черная рамка между активами видео - PullRequest
4 голосов
/ 07 ноября 2011

В настоящее время я пытаюсь поместить 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 ]

2 голосов
/ 19 декабря 2011

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

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

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

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

0 голосов
/ 16 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...