AVAssetExportSession экспортирует видео в нормальном темпе, даже если видео составляет 120FPS - PullRequest
0 голосов
/ 07 января 2019

Я записал видео в 120FPS. Это SLOW_Mo видео. ЕСЛИ я экспортирую это видео в CameraRoll, используя PHImageManager. Все нормально, как VIDEO Effect - slow_mo. Я могу играть в нее, используя QuickPlayer и AVPlayer, и эффект составляет 120FPS.

Это мой рабочий код:

  PHAsset *oneVideo = [[PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil] lastObject];
    PHVideoRequestOptions *options = [PHVideoRequestOptions new];
    options.networkAccessAllowed = YES;
    options.version = PHVideoRequestOptionsVersionCurrent;
    options.deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat;
    [[PHImageManager defaultManager] requestAVAssetForVideo:oneVideo options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
        if(([asset isKindOfClass:[AVComposition class]])){
            BOOL bResult = FALSE;
            DebugLog(@"\navPlayer.outputFileURL.absoluteString:%@", URl);
            bResult = [[NSFileManager defaultManager] removeItemAtURL:URl error:nil];
            DebugLog(@"\nremoveItemAtPath:%d", bResult);
            //Begin slow mo video export
            AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetHighestQuality];
            exporter.outputURL = avPlayer.outputFileURL;
            // exporter.outputURL = urlFirstVideoPath;
            exporter.outputFileType = AVFileTypeQuickTimeMovie;
            exporter.shouldOptimizeForNetworkUse = YES;

            [exporter exportAsynchronouslyWithCompletionHandler:^{
                NSLog(@"Video test run exported video into file: %@", exporter.outputURL);
                NSLog(@"exportSession.status: %ld", (long)exporter.status);
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (exporter.status == AVAssetExportSessionStatusCompleted) {
                        NSLog(@"exportSession.status: okkkkkkk");
                    }
                });
            }];

        }
    }];

СЕЙЧАС Я не хочу сохранять это видео в CAMERAROLL. Я сохранил видео в папке «Документ». и получить AVAssets. Но эффект не медленный_mo 120FPS Я читал об этом и получил, что я должен использовать AVComposition для экспорта видео slow_mo. но я не могу этого сделать. Ниже мой НЕ рабочий код.

    AVAsset *assetURL = [AVURLAsset URLAssetWithURL:URl options:nil];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = paths.firstObject;
    NSString *myPathDocs =  [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"mergeSlowMoVideo-%d.mov",arc4random() % 1000]];
    NSURL *_filePath = [NSURL fileURLWithPath:myPathDocs];

    AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:assetURL presetName:AVAssetExportPresetHighestQuality];
    exporter.outputURL = _filePath;
    exporter.outputFileType = AVFileTypeQuickTimeMovie;
    exporter.shouldOptimizeForNetworkUse = YES;
    [exporter exportAsynchronouslyWithCompletionHandler:^{ //start
        NSLog(@"Export failed: %@", [[exporter error] localizedDescription]);
        NSLog(@"Video test run exported video into file: %@", exporter.outputURL);
        NSLog(@"export  %ld", (long)exporter.status);
        dispatch_async(dispatch_get_main_queue(), ^{
            if (exporter.status == AVAssetExportSessionStatusCompleted) {

            }
        });
    }];

Пожалуйста, помогите мне любой эксперт.

ОБНОВЛЕНИЕ: это моя актуальная проблема.

В этом вопросе содержится мое объяснение фактической проблемы

...