AVAssetWriter的输出(将UIImages写入视频)出现扭曲

4
我正在使用AVAssetWriter将一系列图像编码为电影文件,参考了Zoul的答案(如何将UIImage数组导出为电影?)。 简而言之,我的处理过程是:
  • 从.png文件创建UIImage
  • 从UIImage获取CGImage
  • 使用zoul的函数pixelBufferFromCGImage将CGImage转换为CVPixelBuffer
  • 使用AVAssetWriterInputPixelBufferAdaptor和AVAssetWriter将帧写入.mov
这在大多数情况下都正常工作,但有时编码的.mov文件会出现扭曲(如下图所示)。我想知道是否有人熟悉这种类型的扭曲图像输出,以及我可能在编码帧时采取的任何步骤会导致这种情况。当我使用Titanium中的ImageView.toBlob()调用生成源图像时,问题特别发生。除了Titanium方面外,对于可能出现这种结果的提示将非常有帮助!
谢谢, Alexander

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

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

Phalaenopsis_(aka)

3个回答

6
请查看此链接,它指出宽度应是16的倍数。只需获取size.width,计算最接近16的倍数的数字,然后在size.width的位置上硬编码即可。它有效 :)

4

好的,问题出在我读取图像的宽高比与我创建的PixelBuffer的宽高比不同。将它们设置为相等后就可以正常工作了。


1

虽然是旧帖子,但我的答案不同。我使用CVPixelBufferGetBytesPerRow来获取CGBitmapContextCreate的实际每行字节数,这样可以解决扭曲问题,保持高度/宽度不变。


您,先生,是个救星。谢谢!对于那些感到困惑的人,请将(zoul答案中的4 * width更改为CVPixelBufferGetBytesPerRow(pxbuffer)) - Daryl Teo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接