4 votes

La sortie d'AVAssetWriter (UIImages écrites sur la vidéo) est déformée.

J'utilise un AVAssetWriter pour encoder une série d'images dans un fichier vidéo, en suivant la réponse de Zoul ici : Comment exporter un tableau UIImage sous forme de film ? .

En bref, mon processus est le suivant :

  • créer une image UII à partir d'un fichier .png
  • Obtenir une image CGI à partir d'une image UII
  • convertir l'image CGI en CVPixelBuffer (en utilisant exactement la fonction pixelBufferFromCGImage de zoul)
  • écrire les images en .mov en utilisant un AVAssetWriterInputPixelBufferAdaptor et un AVAssetWriter

Cela fonctionne bien dans la plupart des cas, mais il arrive que le fichier .mov encodé soit déformé (voir l'image ci-dessous). Je me demandais si ce type de sortie d'image déformée était familier à quelqu'un, et s'il y avait une étape que j'aurais pu prendre dans l'encodage des images qui pourrait causer ce problème. Le problème se produit spécifiquement lorsque les images sources que j'utilise sont générées par des appels dans Titanium à ImageView.toBlob(). Outre le côté Titanium, toute indication sur la manière dont ce type de résultat peut apparaître serait la bienvenue !

Merci, Alexandre

Écran du film : http://tinypic.com/view.php?pic=8wkqys&s=7

Image originale : http://commons.wikimedia.org/wiki/File:Phalaenopsis_(aka).jpg

Phalaenopsis_(aka)

6voto

Mandar Points 118

Veuillez consulter ce lien . Il est indiqué que la largeur doit être un multiple de 16.

Il suffit d'obtenir la taille.largeur, de calculer le nombre le plus proche qui est un multiple de 16. Et le coder en dur à la place de size.width.

Cela fonctionne :)

4voto

Alexander Conway Points 81

Ok, cela s'est avéré être un problème avec le ratio d'aspect des images que je lisais qui était différent du ratio d'aspect du PixelBuffer que je créais. Je les ai égalisés et cela fonctionne bien.

1voto

Bluedays Points 151

Au lieu de multiplier par un nombre, j'utilise CVPixelBufferGetBytesPerRow pour obtenir le nombre réel d'octets par ligne pour CGBitmapContextCreate et cela a corrigé la distorsion, en laissant la hauteur/largeur identique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X