iosswiftavassetimagegenerator

AVAssetImageGenerator generating images with green pixels using animation tool and video composition


I am generating animated gif from a mutable composition where I am setting AVMutableVideoComposition with AVVideoCompositionCoreAnimationTool. Problem is with core animation tool, when it's set generated images have 1 column of green pixels on the very right. If I don't add core animation tool it works perfectly.

Example of generated gif is here:

enter image description here

This is how I am creating AVVideoCompositionCoreAnimationTool object with layers.

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)

I found out that if I make video layer 2 pixels wider so that green pixels are offscreen it will work. But it's dirty hack.

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

Does anyone know why I am having green column and what am I doing wrong?


Solution

  • I found out what the problem was. I was specifying render size of AVMutableVideoComposition with odd value of width (375px). It looks like I have to use even numbers only because rendered video was 376px wide and renderer probably let me know that it added 1 extra column. Strange that this is not mentioned in wwdc videos nor programming guide.