0
CALayerを使用してビデオにテキストを挿入しようとしていますが、ドラッグ可能なビューが1つあります。私はこの位置でビデオをエクスポートするときにビデオの解像度、今エクスポート時にビデオのドラッグ位置ごとにCALayerが正しく設定されていない
ごとに、結果のビデオはこの1
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からこのテキスト座標の座標をどのように計算しますか? @Evgeniy Gushchin –
@VivekGoswamiそれはあなたがビデオをどのように取得するかによって異なります。 AVCaptureSessionを使用してビデオを撮影する場合、ビデオ出力用にSampleBufferDelegateを設定し、デリゲートメソッド 'captureOutput(_output:AVCaptureOutput、didOutput sampleBuffer:CMSampleBuffer、接続:AVCaptureConnection)でCMSampleBufferからビデオフレームの寸法を取得できます ' ビデオURLでアセットとして次のコードを使うことができます 'guard let track = AVURLAsset(url:url).tracks(withMediaType:AVMediaTypeVideo).first else {return nil} let size = track.naturalSize.applying(track.preferredTransform) ' –
実際に私は、事前に記録された、またはキャプチャされた写真からビデオを選択しています。このテキストラベルは、ビューとそのビューで追加しました。私はvideoviewでドラッグしています。AVAssetsビデオサイズ、このラベルはサイズ変更可能であるため、ビデオのサイズも変更する必要があります。 @Evgeniy Gushchin –