youcune.com

キッズカメラ(MiNiPiC)の写真と動画を時系列に写真アプリに取り込む方法

Childcare

子供がプレゼントでもらったキッズカメラを気に入って使っていて、iPadの写真アプリに撮影した動画と写真を取り込んであげたいと思いましたが、意外と苦戦したので方法をまとめておきます。ちなみに、MiNiPiCという機種を使っていて(わりとメジャーみたい)、iPadの写真アプリですが多分iPhoneでもmacOSでも同じような方法になるのではないかと思います。他の環境のことはよくわかりません。

前提

  • コマンド操作に慣れていること(これだけでむちゃくちゃハードルが高いので、このページにたどり着いた非エンジニアには若干申し訳ない)
  • 紹介している手順はmacOS Sequoiaで実行を確認できたもの
  • Homebrewなどで ffmpeg exiftool がインストールされていること

仕様理解

発売時期などによって差があるかもしれませんが、うちの環境ではMiNiPiCは以下の仕様のようでした。

  • 写真にExif情報が書き込まれない(商品紹介で「余計な機能を省いたシンプルなカメラ」と言っていて、日時設定機能があるくせに省かれているのには憤りを覚える)
  • 動画はAVI形式で保存される(iPadでは再生できないのでMP4に変換することにする)
  • MiNiPiCに直接USB-Cケーブルを接続して電源を入れると、microSDカードがマスストレージとして認識されるものの遅くて不安定。別にリーダーを準備するほうがよい。
  • microSDカードはFAT32フォーマットされており、macOSで見るとディレクトリ内にinodeが同じの同名ファイルが存在することがあった。

基礎知識

  • Exif情報は、写真に撮影日時などの情報を付与するための規格
  • Exifとしての日時はタイムゾーンをもたない
  • JPEGファイルのExif情報は、iPadの写真アプリに取り込むとローカルタイムと解釈される(Exifには日本時間で書くのが正しい)
  • MP4ファイルのExif情報は、iPadの写真アプリに取り込むとUTCと解釈されて、それが日本時間に変換されて時系列に並ぶ(ExifにはUTCで書くのが正しい)

具体的な手順

1. 作業用ディレクトリにコピー

DCIM ディレクトリはカメラ管理だろうしファイルが重複していたので、作業用ディレクトリにコピーします。以下コマンド例。 NO NAME などは適宜読み替えてくださいね。

$ cd /Volumes/NO\ NAME
$ cp -Rp DCIM work
$ cd work

cp -p オプションでファイルのタイムスタンプを保持します。

2. 写真にExif情報を付与する

ファイルの更新日時をExifの撮影日時にコピーします。 exiftool 自体はタイムゾーンを持たないので、ローカルタイムとして取得した日時が何も意識せずにExifに書かれます。

$ exiftool -overwrite_original "-DateTimeOriginal<FileModifyDate" *.jpg

3. 動画をMP4に変換し、Exif情報を付与する

for f in *.avi; do
  ts=$(stat -f "%m" "$f")
  ts_utc=$(date -jf "%s" $((ts - 9 * 3600)) "+%Y:%m:%d %H:%M:%S") # 9時間引いてUTCに変換
  out="${f%.avi}.mp4"
  ffmpeg -i "$f" -c:v libx264 -c:a aac "$out"
  exiftool -overwrite_original \
    "-CreateDate=$ts_utc" "-ModifyDate=$ts_utc" \
    "-TrackCreateDate=$ts_utc" "-MediaCreateDate=$ts_utc" "$out"
  rm "$f"
done

4. iPadにコピー

microSDカードをiPadに接続し、ファイルアプリを開き、「すべて選択」して「共有」メニューから写真アプリに保存できました。

まとめ

誰かの役に立てばいいなと思ってこの記事を捧げます。もし何かもっといい方法があれば教えてもらえるとうれしいです😊