Evitar la borrosidad al inicio y al final del video (incluso después de usar setPreferredVideoStabilizationMode: AVCaptureVideoStabilizationModeAuto)?

setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto video en iOS usando setPreferredVideoStabilizationMode:AVCaptureVideoStabilizationModeAuto , pero el video a veces sale borroso al principio y al final (bien en el medio, sin embargo), lo cual es muy problemático porque tomamos el primer fotogtwig como imagen fija ( para habilitar las capacidades de video y fotos sin cambiar los modos de la cámara).

Colocar el dispositivo sobre un escritorio elimina todas las imágenes borrosas, por lo que todo el video es nítido. Esto sugiere que tiene algo que ver con la estabilización de video, pero ¿hay otra propiedad para establecer?

¿Importa el locking del modo de enfoque?

¿Algún otro consejo para solucionar problemas?

Aquí está la función de captura de video de PBJVision , que usamos:

 - (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]; }]; }]; } 

Este código configura PBJVision e inicia la captura de video:

 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() } 

Una vez que PBJ está listo con su vista previa, hacemos que la cámara se enfoque en el punto medio de la pantalla.

 // 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) } 

El video es borroso por naturaleza. El video de 24 o 30 fotogtwigs por segundo siempre tendrá un efecto borroso en la toma, porque así es como engañan a nuestros ojos para que crean que las imágenes se están moviendo realmente. La mayor velocidad de obturación permite que la cámara dé la impresión de movimiento.

Las fotos usan una velocidad de obturación mucho más corta (1/60 de segundo o menos) para dar una imagen clara y fija.

Aquí hay información sobre cómo tomar una foto mientras se graba un video:

Cómo realizar fotografías mediante progtwigción al grabar video

No conozco el marco de trabajo de PBJVision, pero puede verificar el enfoque de ajuste del dispositivo AVCapture antes de extraer la imagen que necesita.


Aparentemente, puede verificar el estado de enfoque del dispositivo utilizando el método PBJVision isAdjustingFocus .

    Intereting Posts