movファイルからLive Photoを生成するLoveLiverにGUIをつけた

f:id:banjun:20160213202915p:plain
Release OSX GUI Application · mzp/LoveLiver · GitHub

インドアLive Photo業界には mzp/LoveLiver というLive Photo生成ツールがある。

mzp.hatenablog.com

これを使って下記のような手順を踏めば,好きな動画の一部をiPhoneのLive Photo壁紙に設定できて便利。

しかし何度もやっていると,QuickTimeで3秒選んでトリムして保存して,LoveLiverのコマンドライン引数を書いて,というのが意外と手間に感じる。 というわけでOSXアプリケーションにすべく,GUIをつくった。

リリースしたGUIアプリはここの LoveLiver-1.0.0.zip からダウンロードできる。
Release OSX GUI Application · mzp/LoveLiver · GitHub

f:id:banjun:20160213203953j:plain

GUIにより,3秒動画を切り出して保存する必要はなくなり,単に使いたい動画をGUIで開けばよくなった。 Live Photoを生成するには,ポスターフレームを設定し,Live Photoを開始したい位置へシークし, Create Live Photoする。 コマンドライン版と同じようにLive Photo用のJPGとMOVを保存したあとは,Photos.appで自動的に開くようにしたので,Photos.app側でImportを押せばフローが完了するようになっている。

これで日々溜まっていく手持ちの動画のLive Photo化が捗るはずだ。

今後の課題

just worksな感もまだあるので,ざっくりと考えていること:

  • 3秒以外の長さを指定する
  • 切り出しをプレビューする
  • UIをなんとかする
  • Sketchを体験版から正式版にする(31日以内)

開発ネタ・雑感

今回のぶんのPull Requestはこちら。
github.com

  • もともとiOSで開発した NorthLayout※ikemenOSXアプリに適用してみた。
  • デフォルトのMainMenu.xibの編集は,メインウインドウの削除のみ。xibはあまり触りたくないがデフォルトのメニューは殺したくなかった。
  • 動画ファイルごとにウインドウを出すのであれば,NSDocumentControllerに任せてしまうのが早そう。ウインドウを閉じずにアプリを終了したときのResumeで再オープンも自動的に対応する。
  • NSDocumentControllerに登録するDocument Typesについては,Swiftクラス名はモジュールプレフィックスが必要だった。アプリ側ターゲットにいると意識しないが, LoveLiver.MovieDocument とする必要がある。あるいは @objc(MovieDocument) class MovieDocument とかにしてobjcに同名でエクスポートする。
  • 最近はNSWindowControllerとNSViewControllerがある程度いけるので,ドキュメントごとのxibは不要で,NorthLayoutのみでいけた。
  • AVPlayerViewとAVAssetExportSessionのおかげで,再生と切り出しはわりと簡単にできた。
  • キャプチャは requestedTimeToleranceBefore = kCMTimeZero requestedTimeToleranceAfter = kCMTimeZero しないとずれたフレームのキャプチャになる。デフォルトだとダメ。
  • fastlane/gymOSXアプリでも使えた。
  • アプリアイコンはSketchで描いてみた。色はデレステのデフォルトステージ衣装から拾った。操作に慣れたい。