質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

2回答

1220閲覧

[Xcode] Swiftで動画を正方形に切り抜く方法を教えていただきたいです。

Tommy716

総合スコア22

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2019/07/04 11:49

編集2019/07/04 12:05

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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

これで解決しました。

投稿2019/07/04 13:38

Tommy716

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HHK1/PryntTrimmerView
Crop video swift

参考サイトの提示しかできませんが,お力になれば。

投稿2019/07/04 13:29

fathy

総合スコア254

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tommy716

2019/07/04 13:38

ありがとうございます。けれど実は自己解決してしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問