【问题标题】:Output from AVAssetWriter (UIImages written to video) distortedAVAssetWriter 的输出(写入视频的 UIImages)失真
【发布时间】:2011-11-11 18:33:48
【问题描述】:

我正在使用 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

【问题讨论】:

    标签: ios uiimage titanium avfoundation


    【解决方案1】:

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

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

    它有效:)

    【讨论】:

      【解决方案2】:

      好的,结果是我正在读取的图像的纵横比与我正在创建的 PixelBuffer 的纵横比不同。让他们平等,它工作正常。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您,先生,真是天赐之物。谢谢!对于那些感到困惑的人,请更改(zoul 对 CVPixelBufferGetBytesPerRow(pxbuffer) 的回答中的 4 * width)
        猜你喜欢
        • 2015-08-29
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多