gpt4 book ai didi

ios - 导出时 CALayer 未根据视频上的拖动位置正确设置

转载 作者:行者123 更新时间:2023-11-28 07:59:53 27 4
gpt4 key购买 nike

我正在尝试使用 CALayer 在视频上放置文本,我有一个可拖动的 View ,所以我想根据视频分辨率导出带有精确位置和文本大小的文本的视频,

enter image description here

现在,当我用这个位置导出视频时,结果视频看起来像这个

enter image description here

    let parentLayer = CALayer()
let videoLayer = CALayer()

parentLayer.frame = CGRect(x:0, y:0, width:clipVideoTrack.naturalSize.width,height: clipVideoTrack.naturalSize.height)
videoLayer.frame = CGRect(x:0, y:0, width:clipVideoTrack.naturalSize.width, height:clipVideoTrack.naturalSize.height)


let backgroundLayer = CALayer()
backgroundLayer.bounds = CGRect(x: 0, y: 0, width: clipVideoTrack.naturalSize.width, height: clipVideoTrack.naturalSize.height)
backgroundLayer.position = CGPointMake(clipVideoTrack.naturalSize.width / 2.0, clipVideoTrack.naturalSize.height / 2.0)

backgroundLayer.addSublayer(supplyView.layer)
backgroundLayer.masksToBounds = true

for (index, view) in views.enumerate(){
var layer = CALayer()
layer = view.layer
layer.frame = CGRect(x: supplyView.frame.origin.x, y: supplyView.frame.origin.y, width: supplyView.frame.size.width, height: supplyView.frame.size.height)

layer.beginTime = CFTimeInterval(Float(startingDurations[index]))
layer.duration = CFTimeInterval(Float(endingDurations[index]))
layer.setAffineTransform(view.transform)
layer.addAnimation(fadeAnimation, forKey: "scale")
backgroundLayer.addSublayer(layer)
print(index)
}
backgroundLayer.geometryFlipped = true
parentLayer.addSublayer(backgroundLayer)

let mainInstruction = AVMutableVideoCompositionInstruction()
mainInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, mixComposition.duration)
let videoLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: clipVideoTrack)
let videoAssetTrack = mixComposition.tracksWithMediaType(AVMediaTypeVideo).first

videoLayerInstruction.setTransform((videoAssetTrack?.preferredTransform)!, atTime: kCMTimeZero)
videoLayerInstruction.setOpacity(0.0, atTime: videoAsset.duration)
mainInstruction.layerInstructions = [videoLayerInstruction]

最佳答案

您应该将文本标签的坐标转换为视频帧坐标系。

例如你的videoLayer帧是(0, 0, 200, 200)

真实的视频帧可以是(0,0,640,...)

在这种情况下,坐标为 (100,100) 的文本标签将在您的视频中向上和向左移动。标签坐标应为 (300,300) 以保持与 View 中相同的位置

关于ios - 导出时 CALayer 未根据视频上的拖动位置正确设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46948600/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com