У меня есть 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. Что мне не хватает?