Выход из AVAssetWriter (UIImages, записанный на видео) искажен

Я использую AVAssetWriter для кодирования серии изображений в файл фильма, после ответа Zoul здесь: Как экспортировать массив UIImage в качестве фильма?.

Короче мой процесс:

  • создать UIImage из файла .png
  • Получить CGImage из UIImage
  • конвертировать CGImage в CVPixelBuffer (с помощью функции zoul function pixelBufferFromCGImage)
  • записать кадры в .mov с помощью AVAssetWriterInputPixelBufferAdaptor и AVAssetWriter

В большинстве случаев это нормально работает, однако иногда файл .mov, который закодирован, искажен (см. рисунок ниже). Мне было интересно, знаком ли этот тип изображения с искаженным изображением кому-либо, и если есть какой-то шаг, который я мог бы сделать при кодировании фреймов, которые могли бы вызвать это. Проблема возникает, когда исходные изображения, которые я использую, генерируются вызовами в Titanium для ImageView.toBlob(). Помимо титановой стороны, любые подсказки о том, как может выглядеть этот тип результата, будут большими!

Спасибо, Александр

Экран из фильма: http://tinypic.com/view.php?pic=8wkqys&s=7

Исходное изображение: http://commons.wikimedia.org/wiki/File:Phalaenopsis_(aka).jpg

Phalaenopsis_(aka)

Ответ 1

Хорошо, это оказалось проблемой с соотношением сторон изображений, которые я читал, в отличие от соотношения сторон создаваемого PixelBuffer. Сделал их равными и отлично работает.

Ответ 2

Пожалуйста, посмотрите эту ссылку. Он говорит, что ширина должна быть кратной 16.

Просто получите size.width, вычислите ближайшее число, которое кратно 16. И жесткий код это вместо size.width.

Работает:)