0

我正在从我设置的可变组合生成动画AVMutableVideoCompositiongif 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)

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

4

1 回答 1

0

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

于 2017-03-16T16:22:40.643 回答