AVAssetWriter的输出(写入视频的UIImages)失真

时间:2011-09-07 01:03:05

标签: ios uiimage titanium avfoundation

我正在使用AVAssetWriter将一系列图像编码为电影文件,遵循Zoul的回答:How do I export UIImage array as a movie?

简而言之,我的过程是:

  • 从.png文件创建UIImage
  • 从UIImage获取CGImage
  • 将CGImage转换为CVPixelBuffer(完全使用zoul的函数pixelBufferFromCGImage)
  • 使用AVAssetWriterInputPixelBufferAdaptor和AVAssetWriter将帧写入.mov

这在大多数情况下都能正常工作,但有时编码的.mov文件会失真(参见下图)。我想知道这种类型的失真图像输出是否为任何人所熟悉,如果有任何步骤我可能会采用编码导致这种情况的帧。当我使用的源图像是通过Titanium到ImageView.toBlob()的调用生成时,会出现问题。除了Titanium方面,任何关于如何出现这种结果的提示都会很棒!

谢谢, 亚历山大

电影屏幕: http://tinypic.com/view.php?pic=8wkqys&s=7

原始图片:http://commons.wikimedia.org/wiki/File:Phalaenopsis_(aka).jpg

Phalaenopsis_(aka)

3 个答案:

答案 0 :(得分:6)

请查看this link。它说宽度应该是16的倍数。

只需获取size.width,计算最接近的数字,即16的倍数。 并用硬代码代替size.width。

有效:)

答案 1 :(得分:4)

好吧,这是一个问题,我正在阅读的图像的宽高比与我正在创建的PixelBuffer的宽高比不同。使它们相等,它工作正常。

答案 2 :(得分:1)

旧线程但答案不同,我没有乘以一个数字,而是使用CVPixelBufferGetBytesPerRow获取CGBitmapContextCreate每行的实际字节数,并修复了变形,使高度/宽度保持不变