экспорт iphone - как поддерживать FPS на видео › 30 FPS

Мы пытаемся экспортировать видео и поддерживать их FPS. Что случилось:

Пример видеоклипа продолжительностью 1 секунда:

  • обычные видеоролики с движением, снятые со скоростью 30 кадров в секунду — экспорт со скоростью 30 кадров в секунду — всего 30 кадров
  • обычные видеоролики с движением, снятые со скоростью 60 кадров в секунду — экспорт со скоростью 30 кадров в секунду — всего 30 кадров
  • замедленные видеоролики, установленные в галерее камеры для воспроизведения в замедленном режиме, экспортируются со скоростью 30 кадров в секунду, но экспортируются каждый кадр, чтобы охватить более длительный период воспроизведения (например, 1-секундное видео со скоростью 240 кадров в секунду экспортирует 8 секунд видео со скоростью 30 кадров в секунду) — таким образом, 120 или всего 240
  • замедленное видео (120 или 240), настроенное на воспроизведение с исходной скоростью (или 1 секунду) — экспорт со скоростью 30 кадров в секунду — всего 30 кадров

Что мы хотим - экспортировать, чтобы камера соответствовала FPS во всех случаях. Мы также сжимаем видео.

Мы безуспешно пытались решить эти и другие проблемы:

Как мне контролировать AVAssetWriter для записи в правильном Частота кадров в секунду

Как установить ожидаемую частоту кадров для AVAssetWriterInput

Я предполагаю, что нам может понадобиться совершенно другой подход - не удалось решить - вот код, используемый для попытки загрузить видео со скоростью 240 кадров в секунду, которое настроено на воспроизведение с исходной скоростью - результат - 30 кадров в секунду 1-секундное видео ( вместо 240 кадров в секунду видео):

    PHVideoRequestOptions *options = [PHVideoRequestOptions new];
    options.version = PHVideoRequestOptionsVersionCurrent;

    [[PHImageManager defaultManager] requestAVAssetForVideo:_phasset options:options resultHandler:^(AVAsset * _Nullable asset, AVAudioMix * 

    _Nullable audioMix, NSDictionary * _Nullable info) 

    {
    if(([asset isKindOfClass:[AVComposition class]] && ((AVComposition *)asset).tracks.count == 2)) {
        SDAVAssetExportSession *encoder = [[SDAVAssetExportSession alloc] initWithAsset:asset];
        encoder.outputFileType = AVFileTypeQuickTimeMovie;
                            encoder.outputURL = url;
                            encoder.videoSettings = @
                            {
                            AVVideoCodecKey: AVVideoCodecH264,
                            AVVideoWidthKey: [NSNumber numberWithInteger:newWidth],
                            AVVideoHeightKey: [NSNumber numberWithInteger:newHeight],
                            AVVideoCompressionPropertiesKey: @
                                {
                                    //                                AVVideoAverageBitRateKey: [NSNumber numberWithInteger:bitrate * 1024],
                                AVVideoAverageBitRateKey: [NSNumber numberWithInteger:bitrate * 1024],
                                AVVideoProfileLevelKey: AVVideoProfileLevelH264High40,
//                                    AVVideoMaxKeyFrameIntervalKey: [NSNumber numberWithInt:240],
                                AVVideoExpectedSourceFrameRateKey: [NSNumber numberWithInteger:240]
                                },
                            };

                            encoder.audioSettings = @
                            {
                            AVFormatIDKey: @(kAudioFormatMPEG4AAC),
                            AVNumberOfChannelsKey: @1,
                            AVSampleRateKey: @44100,
                            AVEncoderBitRateKey: @128000,
                            };

            [encoder exportAsynchronouslyWithCompletionHandler:^{
                if (encoder.status == AVAssetExportSessionStatusCompleted) {
                    NSURL *URL = encoder.outputURL;
                    // exported video's fps is not 240 fps on here
                }
            }];
    } else {
        …
    }
}

Любые предложения о том, как исправить текущий код - или как подойти по-другому, который работает?


person drees    schedule 14.11.2018    source источник
comment
Вы когда-нибудь решали эту проблему? У меня та же проблема, я просто хочу преобразовать 5-секундное видео со скоростью 240 кадров в секунду в медленное видео со скоростью 30 кадров в секунду, что в 8 раз больше.   -  person johnrechd    schedule 23.04.2020