0

我以 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 中保存该视频。我将视频保存在 Document 文件夹中。并获得 AVAssets。但效果不是 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) {

            }
        });
    }];

请任何专家帮助我。

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

这个问题有我的实际问题解释

4

0 回答 0