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

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

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

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

Swift

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

Q&A

解決済

1回答

4301閲覧

【iOS,Swift2】動画の秒数間でのトリミングの方法

Kesth

総合スコア83

iOS

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

Swift

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

0グッド

2クリップ

投稿2015/12/23 08:16

こんにちは。
首記の件ですが、iOSで動画の秒数間でのトリミングを行うにはどのframeworkのメソッドを使えばよろしいでしょうか?
イメージとして、iPhoneのデフォルトの写真アプリで動画を選択し、編集ボタンを押した際に出てくる添付のスクリーンショットのようなものです。
恐らくAVFoundationのいずれかのメソッドかと思いますが、探してもなかなか出てこないのでアドバイス頂けると幸いです。
具体的な質問内容としましては、下記になります。
よろしくお願いします。

①トリミングを行うためのframeworkやメソッド名
②スクリーンショットのようなトリミングを行う画面において、下に出てくるサムネイルを表示するスライダーおよびカットする範囲を表す黄色い枠は、どのように作成しているのか?

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

①トリミングを行うためのframeworkやメソッド名

②スクリーンショットのようなトリミングを行う画面において、下に出てくるサムネイルを表示するスライダーおよびカットする範囲を表す黄色い枠は、どのように作成しているのか?

ご質問の箇所で稼働しているのは、UIKitUIVideoEditorControllerになります。
パーツ類はあらかじめ用意されています。
リファレンスをご覧いただくとわかると思いますが、設定が少なく、いじれません。

UIVideoEditorController Class Reference

IMPORTANT

The UIVideoEditorController class supports portrait mode only. This class is intended to be used as-is and does not support subclassing. The view hierarchy for this class is private; do not modify the view hierarchy. This class does not support modifications to its appearance by use of overlay views.

UIVideoEditorControllerでは不足だという場合は、AVFoundationAVAssetExportSession を使うことになります。
AVAssetExportSession Class Reference

UIVideoEditorControllerを使って遷移画面とか無しでごく簡単に書いてみました。お試しあれ。

swift

1import UIKit 2 3class ViewController: UIViewController, UINavigationControllerDelegate, UIVideoEditorControllerDelegate { 4 5 let _videoEditor = UIVideoEditorController() 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 // Do any additional setup after loading the view, typically from a nib. 10 } 11 12 override func viewDidAppear(animated: Bool) { 13 // 動画ファイルのパスを取得し、設定 14 let _videoPath = NSBundle.mainBundle().pathForResource("test", ofType: "mov") 15 _videoEditor.videoPath = _videoPath! 16 // トリミングの最大時間設定 17 _videoEditor.videoMaximumDuration = 30 18 // 画質設定 19 _videoEditor.videoQuality = .TypeMedium 20 21 _videoEditor.delegate = self 22 presentViewController(_videoEditor, animated: true, completion: {}) 23 } 24 25 override func didReceiveMemoryWarning() { 26 super.didReceiveMemoryWarning() 27 // Dispose of any resources that can be recreated. 28 } 29 30 // トリミングした動画ファイルのパスを取得 31 func videoEditorController(editor: UIVideoEditorController, didSaveEditedVideoToPath editedVideoPath: String) { 32 print("editedVideoPath: \(editedVideoPath)") 33 } 34 // 失敗時の処理 35 func videoEditorController(editor: UIVideoEditorController, didFailWithError error: NSError) { 36 print("error: \(error)") 37 } 38 // キャンセル時の処理 39 func videoEditorControllerDidCancel(editor: UIVideoEditorController) { 40 } 41 42}

投稿2015/12/23 16:15

izkn

総合スコア1698

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

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

Kesth

2015/12/25 00:35

お返事が遅れてしまい申し訳ありません。 コードサンプル含めご丁寧にありがとうございます! 自分が探していたのはまさにこれでしたので、本当に助かりました!
Kesth

2015/12/26 08:29

isknさん 度々すみません。 ご教授いただいたUIVideoEditorControllerを使用した所、トリミング機能& 表示周りは驚くほどスムーズに行ったのですが、やはりizknさんも書かれていたとおり UIの部分のコントロールが全く効かず、作成しているアプリとの親和性が非常に 悪いというのが気になったため、AVAssetExportSessionを使用して 自作のUIを作成する方法に切り替えることにしました。 そこで、AVAssetExportSessionのリファレンスなどを読んでいるのですが 初心者なもので理解するのに時間がかかっています。。。。 そこで質問なのですが、 UIVideoEditorControllerで用意されているようなパーツ(トリミング後の動画を表示する画面中央のエリア、トリミング範囲を指定するスワイプで動く黄色いつまみのようなバー、動画の秒数感でのサムネイルを表示している下部の長方形のエリア)については、AVAssetExportSessionを使用する場合は、自分でUIViewなどをカスタマイズして作成する必要がありますか? それともAVAssetExportSessionにおいて、これらのパーツの作成をサポートしてくれる何らかのプロパティなどがあるのでしょうか?
izkn

2015/12/26 11:26

AV Foundationにつきましては、日本語の公式ガイドもありますので、そちらをご覧いただければ、大丈夫でしょう。 AV Foundationプログラミングガイド https://developer.apple.com/jp/documentation/AVFoundationPG.pdf AV FoundationはUIKitよりも下位レイヤーに属するため、UIパーツはありません。自前で用意する必要があります。 ひとつ興味深いものを見つけました。(動作確認はしておりません) andrei200287/SAVideoRangeSlider https://github.com/andrei200287/SAVideoRangeSlider これを利用する、もしくは参考にすれば、ほぼトリミング画面の機能は満たされそうです。 では、これにて。
Kesth

2015/12/26 13:43

ご丁寧に教えて頂き、ありがとうございます。 教えていただいた情報を参考に何とか実装してみたいと思います。 本当にありがとうございました、今後ともよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問