📷 mov/jpegからのLive Photo生成
「LivePhoto、外にでて猫とか撮らないと活用できないと思ってた。でも、movとjpegから生成できるようになれば、インドアでも十分使える。むしろインドア最高」ってばんじゅんさんが言ってて、ちょっと感動した。
— mzp (@mzp) October 5, 2015
要約
MOV動画とJPEG画像からLive Photoを生成するLoveLiverというツールを作った。
Live Photos の仕組み
Live PhotosはQuickTimeフォーマット(mov)とJPEG画像を組合せすることで実現されている。 TechCrunchのReview: Apple’s iPhone 6s And 6s Plus Go ‘Tick’ | TechCrunchの図が分かりやすい。
(http://techcrunch.com/2015/09/22/review-apples-iphone-6s-and-6s-plus-go-tick/#.ngcoh9:5tnw より引用)
ただ、図では45フレーム固定のようになっているが、実際には固定されていない。 iPhone 6sで撮影すると45フレームになるが、Live Photos自体はもっと長時間再生できる。 また、AppleWatchに転送して文字盤に設定した場合は、先頭20フレームくらい*1しか再生されない。
Live Photo の作り方
iOS
iOS 9.1でLive Photoを操作するAPIの追加が予定されている。ベータ版のiOSで利用可能になっているため、LivePhotoDemoのようなデモアプリが作成されている。
ただ、LivePhotoの再生等はできるが、フォトアルバムに保存することは実現できていないらしい。 この問題については Saving to Camera Roll #3 で議論されている。 ボクもいくつか試してみたが、保存は実現できていない。
iOS 9.1が正式にリリースされることには保存もできるようになっていると思う。
MacOS X
El Capitan の Photos.app(写真アプリ)でmovとjpegをまとめてインポートすると、1つのLive Photo としてインポートできる。
このとき、結びつけられるmovとjpegは以下の条件を満す必要がある。
- 拡張子を除いたファイル名が一致する。(例:
IMG_0042.JPG
とIMG_0042.MOV
) - JPEGとMOVのメタデータに共通のUUIDが保存されている。
- MOVのメタデータに
com.apple.quicktime.still-image-time
が保存されている。- metadataトラックとして保存する。
- 値の意味はよくわかってない。
この条件については、先程のIssues内で報告されている。
また、LoveLiverもこの仕組みを使っている。
その他メモ
ffmpegによる変換
ffmpeg でLive Photos用のmovを作るには、以下のようにする。
ffmpeg -r 15 -i source.mov -r 15 -an -vcodec h264 -pix_fmt yuv420p composed.mov
フレームごとに選びたい場合は、いったん画像に分割して必要なものを選ぶとよい。
ffmpeg -i source.mov frame%d.png # 必要な画像ファイルを45枚選ぶ ffmpeg -r 15 -i frame%d.png -r 15 -an -vcodec h264 -pix_fmt yuv420p composed.mov
Live Photo に向いてる動画
- 15fpsなので動きがおだやかなもの。
- 縦長の動画。
- 高解像度の動画。 ホーム画面・ロック画面は縦向きなのでフルHDでも若干不足である。
デレステのMV、シネマグラフィクス(一部だけ動くGIF動画)などをためしたが、しっくりこなかったのでMMDで動画を作成した。
そしてこうなります。LivePhoto最高!! pic.twitter.com/La5oeiXojD
— mzp (@mzp) October 8, 2015
*1:厳密な数字は未確認