AVAssetExportSession以正常速率导出视频,即使视频为120FPS

时间:2019-01-07 06:11:55

标签: ios objective-c xcode avfoundation slowmotion

我以120FPS录制了视频。这是SLOW_Mo视频。如果我使用PHImageManager在CameraRoll中导出该视频。一切正常,就像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中。我将视频保存在“文档”文件夹中。并获得AVAsets。但是效果不是不是slow_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) {

            }
        });
    }];

请任何专家帮助我。

更新:这是我的实际问题。

This Question has my Actual problem explanation

0 个答案:

没有答案