【问题标题】:AVAssetImageGenerator generating images with green pixels using animation tool and video compositionAVAssetImageGenerator 使用动画工具和视频合成生成带有绿色像素的图像
【发布时间】:2017-08-06 22:53:45
【问题描述】:

我正在从一个可变组合生成动画 gif,我将 AVMutableVideoComposition 设置为 AVVideoCompositionCoreAnimationTool。问题在于核心动画工具,当它设置生成的图像在最右边有 1 列绿色像素。如果我不添加核心动画工具,它会完美运行。

生成的 gif 示例在这里:

这就是我创建带有层的AVVideoCompositionCoreAnimationTool 对象的方式。

let parentLayer = CALayer()
let videoLayer = CALayer()
let assetsLayer = self.assetsLayer!
assetsLayer.isGeometryFlipped = true
parentLayer.frame = CGRect(origin: CGPoint.zero, size: videoComposition.renderSize)
videoLayer.frame = CGRect(origin: CGPoint.zero, size: videoComposition.renderSize)
assetsLayer.frame = CGRect(origin: CGPoint.zero, size: videoComposition.renderSize)
parentLayer.addSublayer(videoLayer)
parentLayer.addSublayer(assetsLayer)
videoComposition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayer: videoLayer, in: parentLayer)

我发现如果我将视频层宽 2 个像素以使绿色像素不在屏幕上,它就会起作用。但这是肮脏的黑客攻击。

videoLayer.frame = CGRect(origin: CGPoint.zero, size: videoComposition.renderSize).insetBy(dx: -2, dy: -2)

有谁知道为什么我有绿色的专栏以及我做错了什么?

【问题讨论】:

  • 嘿彼得。我也在使用 AVVideoComposition。由于某种原因,我的一些帧根本没有渲染,给了我空的 NULL CGImage。您对这个问题有任何经验吗?

标签: ios swift avassetimagegenerator


【解决方案1】:

我发现了问题所在。我指定了AVMutableVideoComposition 的渲染大小,宽度为奇数(375px)。看起来我只能使用偶数,因为渲染的视频是 376px 宽,渲染器可能让我知道它添加了 1 个额外的列。奇怪的是,wwdc 视频和编程指南中都没有提到这一点。

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 2019-03-29
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多