AVAssetExportSession
初期化パラメータの 1 つとしてプリセットを受け取ります。
AVAssetExportSession(asset: AVAsset, presetName: String)
プリセットはAVAssetExportPreset640x480
やのような設定AVAssetExportPreset1920x1080
です。ただし、カスタム解像度 (250x400 など) を使用してエンコードしたい場合、それを行う方法はありますか?
AVAssetExportSession
初期化パラメータの 1 つとしてプリセットを受け取ります。
AVAssetExportSession(asset: AVAsset, presetName: String)
プリセットはAVAssetExportPreset640x480
やのような設定AVAssetExportPreset1920x1080
です。ただし、カスタム解像度 (250x400 など) を使用してエンコードしたい場合、それを行う方法はありますか?
これらのエクスポート オプションは定義されており、カスタム解像度を使用してエンコードすることはできません。または、このアプローチを試すことができます
func exportVideo(asset:AVAsset, renderedWidth: CGFloat, renderedHeight: CGFloat, exportCompletionHandler: (() -> Void)?) {
let videoTrack: AVAssetTrack = asset.tracksWithMediaType(AVMediaTypeVideo)[0]
let videoComposition = AVMutableVideoComposition()
videoComposition.frameDuration = CMTimeMake(1, 30)
videoComposition.renderSize = CGSizeMake(renderedWidth, renderedHeight)
let instruction: AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction.init()
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30))
let transformer: AVMutableVideoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack);
//Apply any transformer if needed
//
instruction.layerInstructions = [transformer]
videoComposition.instructions = [instruction]
//Create export path
let exportPath: NSURL = NSURL(fileURLWithPath: "export_path_here")
//
let exporter = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)
exporter?.videoComposition = videoComposition
exporter?.outputURL = exportPath
exporter?.outputFileType = AVFileTypeQuickTimeMovie
exporter?.exportAsynchronouslyWithCompletionHandler({ () -> Void in
//Do sth when finished
if let handler = exportCompletionHandler {
handler()
}
})
}
これがお役に立てば幸いです。
参考:https ://www.one-dreamer.com/cropping-video-square-like-vine-instagram-xcode/