XcodeでSwiftを用いて動画を正方形に切り抜こうと思っているのですが、ネットで検索してもあまりいい文献が見つからず、苦戦しているのでどうなたかご教授をお願いしたいです。
今現在は、以下のサイトを参考に左上から任意のサイズで切り抜くことはできたのですが、任意の座標から任意の大きさに切り抜きたいと思っております。
以下のコードは上記のサイトを参考に書いた、左上から任意の大きさに動画を切り抜き保存するコードです。これをどのようにしたら任意の座標からkりぬくようにできますか?どなたかご教授いただけると幸いです。
Swift
1func mergeMovie(url: URL) { 2 //元の動画のURLを取得 3 let baseMovieURL = url 4 5 //アセットの作成 6 //動画のアセットとトラックを作成 7 var videoAsset: AVURLAsset 8 var videoTrack: AVAssetTrack 9 var audioTrack: AVAssetTrack 10 11 videoAsset = AVURLAsset(url: baseMovieURL, options:nil) 12 let videoTracks = videoAsset.tracks(withMediaType: AVMediaType.video) 13 videoTrack = videoTracks[0] //トラックの取得 14 let audioTracks = videoAsset.tracks(withMediaType: AVMediaType.audio) 15 audioTrack = audioTracks[0] //トラックの取得 16 17 //コンポジション作成 18 let mixComposition : AVMutableComposition = AVMutableComposition() 19 // ベースとなる動画のコンポジション作成 20 let compositionVideoTrack: AVMutableCompositionTrack! = mixComposition.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid) 21 // ベースとなる音声のコンポジション作成 22 let compositionAudioTrack: AVMutableCompositionTrack! = mixComposition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: kCMPersistentTrackID_Invalid) 23 24 // コンポジションの設定 25 // 動画の長さ設定 26 try! compositionVideoTrack.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration), of: videoTrack, at: CMTime.zero) 27 // 音声の長さ設定 28 try! compositionAudioTrack.insertTimeRange(CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration), of: audioTrack, at: CMTime.zero) 29 // 回転方向の設定 30 compositionVideoTrack.preferredTransform = videoAsset.tracks(withMediaType: AVMediaType.video)[0].preferredTransform 31 32 // 動画のサイズを設定 33 let videoSize: CGSize = CGSize(width: 50, height: 50) 34 35 // 合成用コンポジション作成 36 let videoComp: AVMutableVideoComposition = AVMutableVideoComposition() 37 videoComp.renderSize = videoSize 38 videoComp.frameDuration = CMTimeMake(value: 1, timescale: 30) 39 40 // インストラクションを合成用コンポジションに設定 41 let instruction: AVMutableVideoCompositionInstruction = AVMutableVideoCompositionInstruction() 42 instruction.timeRange = CMTimeRangeMake(start: CMTime.zero, duration: videoAsset.duration) 43 let layerInstruction: AVMutableVideoCompositionLayerInstruction = AVMutableVideoCompositionLayerInstruction.init(assetTrack: compositionVideoTrack) 44 instruction.layerInstructions = [layerInstruction] 45 videoComp.instructions = [instruction] 46 47 // 動画のコンポジションをベースにAVAssetExportを生成 48 _assetExport = AVAssetExportSession.init(asset: mixComposition, presetName: AVAssetExportPresetHighestQuality) 49 // 合成用コンポジションを設定 50 _assetExport?.videoComposition = videoComp 51 52 // エクスポートファイルの設定 53 let exportPath: String = NSHomeDirectory() + "/tmp/createdMovie.mov" 54 let exportUrl: URL = URL(fileURLWithPath: exportPath) 55 _assetExport?.outputFileType = AVFileType.mov 56 _assetExport?.outputURL = exportUrl 57 _assetExport?.shouldOptimizeForNetworkUse = true 58 59 // ファイルが存在している場合は削除 60 if FileManager.default.fileExists(atPath: exportPath) { 61 try! FileManager.default.removeItem(atPath: exportPath) 62 } 63 64 // エクスポート実行 65 _assetExport?.exportAsynchronously(completionHandler: {() -> Void in 66 if self._assetExport?.status == AVAssetExportSession.Status.failed { 67 // 失敗した場合 68 print("failed:", self._assetExport?.error) 69 } 70 if self._assetExport?.status == AVAssetExportSession.Status.completed { 71 // 成功した場合 72 print("completed") 73 // カメラロールに保存 74 PHPhotoLibrary.shared().performChanges({ 75 PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: exportUrl) 76 }) 77 } 78 }) 79 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。