2017-03-15 47 views
0

我從可變構圖生成動畫gif,其中我將AVMutableVideoComposition設置爲AVVideoCompositionCoreAnimationTool。核心動畫工具的問題是,當它設置生成的圖像在右邊有1列綠色像素。如果我不添加核心動畫工具,它完美的作品。生成的gif的AVAssetImageGenerator使用動畫工具和視頻合成生成具有綠色像素的圖像

實施例是在這裏:

enter image description here

這是我如何創建與層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) 

有誰知道我爲什麼有綠柱,我做錯了什麼?

回答

0

我發現問題是什麼。我指定的渲染尺寸爲AVMutableVideoComposition,寬度爲奇數(375px)。它看起來像我必須使用偶數,因爲渲染的視頻寬度爲376px,渲染器可能讓我知道它添加了1個額外的列。奇怪的是,這在wwdc視頻和編程指南中都沒有提及。