首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免视频开始和结束时的模糊(即使在使用setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto)?之后

避免视频开始和结束时的模糊(即使在使用setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto)?之后
EN

Stack Overflow用户
提问于 2016-01-21 06:43:20
回答 2查看 1.3K关注 0票数 13

将设备平放在桌子上可以消除所有模糊,因此整个视频始终清晰。这表明它与视频稳定有关,但是否有其他属性需要设置?

锁定焦点模式重要吗?

是否有其他故障排除提示?

下面是我们使用的来自PBJVision的视频捕获函数:

代码语言:javascript
复制
- (void)startVideoCapture
{
    if (![self _canSessionCaptureWithOutput:_currentOutput] || _cameraMode != PBJCameraModeVideo) {
        [self _failVideoCaptureWithErrorCode:PBJVisionErrorSessionFailed];
        DLog(@"session is not setup properly for capture");
        return;
    }

    DLog(@"starting video capture");

    [self _enqueueBlockOnCaptureVideoQueue:^{

        if (_flags.recording || _flags.paused)
            return;

        NSString *guid = [[NSUUID new] UUIDString];
        NSString *outputFile = [NSString stringWithFormat:@"video_%@.mp4", guid];

        if ([_delegate respondsToSelector:@selector(vision:willStartVideoCaptureToFile:)]) {
            outputFile = [_delegate vision:self willStartVideoCaptureToFile:outputFile];

            if (!outputFile) {
                [self _failVideoCaptureWithErrorCode:PBJVisionErrorBadOutputFile];
                return;
            }
        }

        NSString *outputDirectory = (_captureDirectory == nil ? NSTemporaryDirectory() : _captureDirectory);
        NSString *outputPath = [outputDirectory stringByAppendingPathComponent:outputFile];
        NSURL *outputURL = [NSURL fileURLWithPath:outputPath];
        if ([[NSFileManager defaultManager] fileExistsAtPath:outputPath]) {
            NSError *error = nil;
            if (![[NSFileManager defaultManager] removeItemAtPath:outputPath error:&error]) {
                [self _failVideoCaptureWithErrorCode:PBJVisionErrorOutputFileExists];

                DLog(@"could not setup an output file (file exists)");
                return;
            }
        }

        if (!outputPath || [outputPath length] == 0) {
            [self _failVideoCaptureWithErrorCode:PBJVisionErrorBadOutputFile];

            DLog(@"could not setup an output file");
            return;
        }

        if (_mediaWriter) {
            _mediaWriter.delegate = nil;
            _mediaWriter = nil;
        }
        _mediaWriter = [[PBJMediaWriter alloc] initWithOutputURL:outputURL];
        _mediaWriter.delegate = self;

        AVCaptureConnection *videoConnection = [_captureOutputVideo connectionWithMediaType:AVMediaTypeVideo];
        [self _setOrientationForConnection:videoConnection];

        _startTimestamp = CMClockGetTime(CMClockGetHostTimeClock());
        _timeOffset = kCMTimeInvalid;

        _flags.recording = YES;
        _flags.paused = NO;
        _flags.interrupted = NO;
        _flags.videoWritten = NO;

        _captureThumbnailTimes = [NSMutableSet set];
        _captureThumbnailFrames = [NSMutableSet set];

        if (_flags.thumbnailEnabled && _flags.defaultVideoThumbnails) {
            [self captureVideoThumbnailAtFrame:0];
        }

        [self _enqueueBlockOnMainQueue:^{                
            if ([_delegate respondsToSelector:@selector(visionDidStartVideoCapture:)])
                [_delegate visionDidStartVideoCapture:self];
        }];
    }];
}

此代码配置PBJVision并启动视频捕获:

代码语言:javascript
复制
private func initPBJVision() {
    // Configure PBJVision
    pbj.delegate = self
    pbj.cameraMode = .Video
    pbj.cameraOrientation = .Portrait
    pbj.focusMode = .AutoFocus
    pbj.outputFormat = .Preset
    pbj.cameraDevice = .Back
    pbj.thumbnailEnabled = false

    // Log status
    print("Configured PBJVision")

    pbj.startVideoCapture()
}

一旦PBJ准备好预览,我们就让相机聚焦在屏幕的中点。

代码语言:javascript
复制
// Called when PBJVision preview begins
func visionSessionDidStartPreview(vision: PBJVision) {
    // Focus screen at midpoint
    let focus_x = CGFloat(0.5)
    let focus_y = CGFloat(0.5)
}
EN

回答 2

Stack Overflow用户

发布于 2016-01-27 03:48:32

视频本质上是模糊的。每秒24或30帧的视频总是会有一些模糊,因为这是我们的眼睛被欺骗的方式,让我们相信图片实际上是在移动的。较长的快门速度使相机给人一种运动的感觉。

照片使用更短的快门速度(1/60秒或更少)来提供清晰的静止图像。

这里有一些关于如何在录制视频时拍照的信息:

How to Programmatically Take Photos While Recording Video

票数 2
EN

Stack Overflow用户

发布于 2016-01-28 22:33:56

我不知道PBJVision框架,但您可以在提取所需图片之前检查AVCaptureDevice的adjustingFocus

显然,你可以使用PBJVision isAdjustingFocus方法来检查设备的对焦状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34912050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档