0
셀프 비디오 저장 후 비디오 크기가 변경됩니다. 이 문제는 셀카 비디오를 찍을 때만 발생합니다.셀카 비디오 스위프트 저장 후 비디오 크기 변경 4
세로 방향과 가로 방향을 올바르게 지원하고 비디오 셀틱을 찍을 때 비디오 파일 출력에 올바르게 반영 되려면 어떻게해야합니까? 다음은 내가 작성한 전체 소스입니다 :
다음// File to composit
let asset = AVURLAsset(url: videoURL as URL)
let composition = AVMutableComposition.init()
composition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)
let clipVideoTrack = asset.tracks(withMediaType: AVMediaType.video)[0]
// Rotate to potrait
let transformer = AVMutableVideoCompositionLayerInstruction(assetTrack: clipVideoTrack)
var videoAssetOrientation_: UIImageOrientation = .up
var isVideoAssetPortrait_: Bool = false
let videoTransform:CGAffineTransform = clipVideoTrack.preferredTransform
if (videoTransform.a == 0.0 && videoTransform.b == 1.0 && videoTransform.c == -1.0 && videoTransform.d == 0)
|| (videoTransform.a == 0.0 && videoTransform.b == -1.0 && videoTransform.c == 1.0 && videoTransform.d == 0) {
isVideoAssetPortrait_ = true
}
if videoTransform.a == 0 && videoTransform.b == 1.0 && videoTransform.c == -1.0 && videoTransform.d == 0 {
videoAssetOrientation_ = .right
isVideoAssetPortrait_ = true
}
if videoTransform.a == 0 && videoTransform.b == -1.0 && videoTransform.c == 1.0 && videoTransform.d == 0 {
videoAssetOrientation_ = .left
isVideoAssetPortrait_ = true
}
if videoTransform.a == 1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == 1.0 {
videoAssetOrientation_ = .up
}
if videoTransform.a == -1.0 && videoTransform.b == 0 && videoTransform.c == 0 && videoTransform.d == -1.0 {
videoAssetOrientation_ = .down
}
transformer.setTransform(clipVideoTrack.preferredTransform, at: kCMTimeZero)
var naturalSize = CGSize()
if isVideoAssetPortrait_ {
naturalSize = CGSize(width: clipVideoTrack.naturalSize.height, height: clipVideoTrack.naturalSize.width)
} else {
naturalSize = clipVideoTrack.naturalSize
}
var renderWidth: CGFloat!
var renderHeight: CGFloat!
renderWidth = naturalSize.width
renderHeight = naturalSize.height
let parentlayer = CALayer()
let videoLayer = CALayer()
let watermarkLayer = CALayer()
watermarkLayer.contents = tempImageView.image?.cgImage
watermarkLayer.opacity = 1.0
parentlayer.frame = CGRect(x: 0, y: 0, width: renderWidth, height: renderHeight)
videoLayer.frame = CGRect(x: 0, y: 0, width: renderWidth, height: renderHeight)
watermarkLayer.frame = CGRect(x: 0, y: 0 ,width: renderWidth, height: renderHeight)
parentlayer.addSublayer(videoLayer)
parentlayer.addSublayer(watermarkLayer)
let videoComposition = AVMutableVideoComposition()
videoComposition.renderSize = CGSize(width: renderWidth, height: renderHeight)
videoComposition.frameDuration = CMTimeMake(1, 30)
videoComposition.renderScale = 1.0
// Add watermark to video
videoComposition.animationTool = AVVideoCompositionCoreAnimationTool(postProcessingAsVideoLayers: [videoLayer], in: parentlayer)
let instruction = AVMutableVideoCompositionInstruction()
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30))
instruction.layerInstructions = [transformer]
videoComposition.instructions = [instruction]
내가 비디오 셀카를 찍을 때와 같은 비디오 모습
내가 같은 문제가 ..하는 것을 잊지 마세요 한 비디오를 저장 해결책을 찾으면 여기에 대답하십시오. 아래의 – Vats
내 솔루션, 당신을 도울 수 있기를 바랍니다! – Falex