gpt4 book ai didi

ios - 使用 AVFoundation 裁剪 AVAsset 视频不适用于 iOS 8

转载 作者:搜寻专家 更新时间:2023-10-31 22:35:36 25 4
gpt4 key购买 nike

这在最后一天一直困扰着我,我曾经在 ObjC 中使用这种方法将视频裁剪成正方形,这似乎是我几年来发现的唯一有效的方法,但在最近尝试裁剪之后在 Swift 和 iOS 8 中使用它似乎根本不会裁剪视频,希望有人能帮忙吗?

func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) {
if error != nil {
println("Error Outputting recording")
} else {
self.writeVideoToAssetsLibrary(self.outputUrl!.copy() as NSURL)
}
}

func writeVideoToAssetsLibrary(videoUrl: NSURL) {
var videoAsset: AVAsset = AVAsset.assetWithURL(videoUrl) as AVAsset

var clipVideoTrack = videoAsset.tracksWithMediaType(AVMediaTypeVideo).first as AVAssetTrack

var composition = AVMutableComposition()
composition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID())

var videoComposition = AVMutableVideoComposition()

videoComposition.renderSize = CGSizeMake(clipVideoTrack.naturalSize.height, clipVideoTrack.naturalSize.height)
videoComposition.frameDuration = CMTimeMake(1, 30)


var transformer = AVMutableVideoCompositionLayerInstruction(assetTrack: clipVideoTrack)

var instruction = AVMutableVideoCompositionInstruction()
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30))

var transform1: CGAffineTransform = CGAffineTransformMakeTranslation(clipVideoTrack.naturalSize.height, (clipVideoTrack.naturalSize.width - clipVideoTrack.naturalSize.height) / 2)
var transform2 = CGAffineTransformRotate(transform1, CGFloat(M_PI_2))
var finalTransform = transform2


transformer.setTransform(finalTransform, atTime: kCMTimeZero)

instruction.layerInstructions = [transformer]
videoComposition.instructions = [instruction]

var exporter = AVAssetExportSession(asset: videoAsset, presetName: AVAssetExportPresetHighestQuality)
exporter.videoComposition = videoComposition
exporter.outputURL = videoUrl
exporter.outputFileType = AVFileTypeQuickTimeMovie

exporter.exportAsynchronouslyWithCompletionHandler({ () -> Void in
dispatch_async(dispatch_get_main_queue(), {
self.handleExportCompletion(exporter)
})
})
}

func handleExportCompletion(session: AVAssetExportSession) {
var library = ALAssetsLibrary()

if library.videoAtPathIsCompatibleWithSavedPhotosAlbum(session.outputURL) {
var completionBlock: ALAssetsLibraryWriteVideoCompletionBlock

completionBlock = { assetUrl, error in
if error != nil {
println("error writing to disk")
} else {

}
}

library.writeVideoAtPathToSavedPhotosAlbum(outputUrl, completionBlock: completionBlock)
}
}

最佳答案

所以事实证明,如果您尝试将导出器的 outputUrl 设置为与 Assets 相同,您的编辑就像我所做的那样,它不会编辑它,太愚蠢了!所以为了将来的引用,outputUrl 应该设置为一个新的唯一的

关于ios - 使用 AVFoundation 裁剪 AVAsset 视频不适用于 iOS 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29156053/

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