AVMutableVideoComposition frameDuration не работает

У меня есть AVMutableVideoComposition, и я хочу установить частоту кадров экспорта (например, 10 кадров в секунду):

videoComposition.frameDuration = CMTimeMakeWithSeconds(1, 10);

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

Вот мой код:

AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoCompositionWithPropertiesOfAsset:asset];
...
videoComposition.frameDuration = CMTimeMakeWithSeconds(1, 10);
AVMutableVideoCompositionLayerInstruction *transformInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];
instruction.timeRange = videoTrack.timeRange;
[transformInstruction setTransform:matrix atTime:kCMTimeZero];
instruction.layerInstructions = @[ transformInstruction ];
videoComposition.instructions = @[ instruction ];
[[NSFileManager defaultManager] removeItemAtURL:exportURL error:nil];
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset presetName:AVAssetExportPresetHEVCHighestQuality];
exportSession.outputURL = exportURL;
exportSession.outputFileType = exportOptions.fileType;
exportSession.videoComposition = videoComposition;
exportSession.shouldOptimizeForNetworkUse = exportOptions.shouldOptimizeForNetworkUse;

[exportSession exportAsynchronouslyWithCompletionHandler:^{
    //video is exported with all the settings correctly, except the frame rate.
}];

Я также пробовал AVAssetExportPresetPassthrough вместо AVAssetExportPresetHEVCHighestQuality в качестве предустановки сеанса экспорта, но ничего не изменилось.

Почему frameDuration игнорируется и как заставить его работать без использования другой сторонней библиотеки, такой как SDAVAssetExportSession?

Я уже видел установку длительности кадра AVMutableComposition, но там нет решения. Однако, когда я изучаю исходный код SDAVAssetExportSession, он использует свойство frameDuration так же, как и я (см. nofollow noreferrer">https://github.com/rs/SDAVAssetExportSession/blob/master/SDAVAssetExportSession.m#L308), но у меня почему-то не работает. Но поскольку это работает, должен быть обходной путь, даже если есть ошибка с AVKit от Apple. Что мне не хватает?


person Can Poyrazoğlu    schedule 04.02.2018    source источник
comment
Вы решили это?   -  person Roi Mulia    schedule 15.06.2018
comment
@RoiMulia нет, в итоге я смирился с тем, что не могу этого сделать (без изменения всей инфраструктуры конвейера), и принял частоту кадров как есть. Конечно, это НЕ решение.   -  person Can Poyrazoğlu    schedule 15.06.2018