Вывод из AVAssetWriter (UIImages, записанных в видео) искажен - PullRequest
4 голосов
/ 07 сентября 2011

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

Короче говоря, мой процесс:

  • создать UIImage из .png файла
  • Получить CGImage от UIImage
  • преобразование CGImage в CVPixelBuffer (точно используя функцию zoul 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)

Ответы [ 2 ]

6 голосов
/ 10 января 2013

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

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

Работает :) 1007 *

4 голосов
/ 07 сентября 2011

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

...