Настройка длительности кадра AVMutableComposition

Я играю с проектом AVEditDemo из набора образцов Apple WWDC 2010 и пытаюсь изменить частоту кадров экспортируемого видео. Видео экспортируется с использованием AVMutableComposition, для которого задано значение frameDuration следующим образом:

videoComposition.frameDuration = CMTimeMake(1, 30); // 30 fps

По какой-то причине изменение 30 на 25 не меняет framerate видео, экспортируемого с AVAssetExportSession. Кто-нибудь знает, почему?


person MonsieurDart    schedule 15.03.2012    source источник


Ответы (3)


отвечая на ответ MonsieurDart: я не пробовал AVEditDemo, но у меня нет этой проблемы на iOS 8 и на iOS 7.

Я использую AVMutableVideoComposition и устанавливаю его как видеокомпозицию AVAssetExportSession's.

.
.
AVMutableVideoCompositionInstruction * instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
AVMutableVideoCompositionLayerInstruction *layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
AVMutableVideoComposition *compositionInstruction = [AVMutableVideoComposition videoComposition];
compositionInstruction.instructions = @[instruction];
compositionInstruction.frameDuration = CMTimeMake(1, 30);
.
.    
AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:composition AVAssetExportPresetHighestQuality];
exporter.videoComposition = compositionInstruction;

где videoTrack — это AVMutableCompositionTrack созданный из актива

person Oferm    schedule 27.10.2014

Кажется, пресет AVAssetExportSession имеет приоритет над пресетом AVVideoComposition frameDuration. Я открыл отчет об ошибке:

http://openradar.appspot.com/11127156

person MonsieurDart    schedule 27.03.2012
comment
Вы знаете, было ли это исправлено? - person smdvlpr; 13.04.2014
comment
Никаких новостей от Apple… :-( - person MonsieurDart; 16.09.2014
comment
Вы тестировали на iOS 8 или OS X Yosemite? - person smdvlpr; 21.09.2014
comment
Неа... Если бы кто-то это сделал, мне был бы интересен ответ. - person MonsieurDart; 24.09.2014

Клиент может установить sourceTrackIDForFrameTiming в kCMPersistentTrackID_Invalid и frameDuration в соответствующее значение, чтобы указать максимальную выходную частоту кадров, независимую от синхронизации исходной дорожки.

videoComposition.sourceTrackIDForFrameTiming = kCMPersistentTrackID_Invalid;
videoComposition.frameDuration = CMTimeMake(1, 30);
person yong wei    schedule 02.07.2019
comment
Как вы узнали, что можно установить для параметра sourceTrackIDForFrameTiming значение kCMPersistentTrackID_Invalid? - person Drew; 01.03.2020