ven solucionar signo quitar que problema porque mis las imagenes fotos exclamación exclamacion cómo con como celular cargan borrosas ios swift video uiimage avasset

ios - solucionar - porque mis fotos se ven borrosas en mi celular



Swift: ¿la extracción de la imagen del video sale borrosa a pesar de que el video se ve bien? (1)

El siguiente código fue inspirado por otras publicaciones en SO y extrae una imagen de un video. Desafortunadamente, la imagen se ve borrosa a pesar de que el video se ve nítido y totalmente enfocado.

¿Hay algún problema con el código o es una dificultad natural extraer imágenes de los videos?

func getImageFromVideo(videoURL: String) -> UIImage { do { let asset = AVURLAsset(URL: NSURL(fileURLWithPath: videoURL), options: nil) let imgGenerator = AVAssetImageGenerator(asset: asset) imgGenerator.appliesPreferredTrackTransform = true let cgImage = try imgGenerator.copyCGImageAtTime(CMTimeMake(0, 1), actualTime: nil) let image = UIImage(CGImage: cgImage) return image } catch { ... } }


Tu código funciona sin errores ni problemas. Lo intenté con un video y la imagen tomada no era borrosa.

Intentaré depurar esto utilizando una escala de tiempo diferente para CMTime .

Con CMTimeMake , el primer argumento es el valor y el segundo argumento es la escala de tiempo.

Su escala de tiempo es 1, por lo que el valor está en segundos. Un valor de 0 significa primer segundo, un valor de 1 significa segundo segundo, etc. En realidad, significa el primer cuadro después de la ubicación designada en la línea de tiempo.

Con su CMTime actual, toma el primer fotograma del primer segundo: ese es el primer fotograma del video (incluso si el video es menor a 1s).

Con una escala de tiempo de 4, el valor sería 1/4 de segundo. Etc.

Intente encontrar un CMTime que se encuentre justo en un marco estable (depende de la velocidad de fotogramas de su video, tendrá que hacer pruebas).

Por ejemplo, si su video está a 24 fps, entonces para tomar exactamente un fotograma de video, la escala de tiempo debe estar en 24 (de esa forma cada unidad de valor representaría un fotograma completo):

let cgImage = try imgGenerator.copyCGImageAtTime(CMTimeMake(0, 24), actualTime: nil)

Por otro lado, mencionas que solo el primer y el último fotograma del video son borrosos. Como acertadamente adivinó, es probable que sea la causa real de su problema y se deba a la falta de estabilización del dispositivo.

Una nota: la codificación del video también puede desempeñar un papel. Algunos codificadores MPG crean cuadros incompletos e interpolados que se "recrean" cuando se reproduce el video, pero estos cuadros pueden aparecer borrosos cuando se los copyCGImageAtTime con copyCGImageAtTime . La única solución que he encontrado para este raro problema es tomar otro cuadro justo antes o justo después del borroso.