Insta360 Go2 の購入をキッカケに色々な問題が露呈した件。

Insta360 Go2(以下、Go2)を使い始めて、色々な問題に直面した。前にも書いたタイムスタンプ問題だが、更に様々な事がわかった。Go2の静止画は.inspという拡張子のファイルになっていて、アプリを使わないとjpegに落とせないのだが、androidアプリを使うとタイムスタンプが無くなってしまうことが判明。ちなみに、元データとなる拡張子inspのファイルは実際には半天球jpegファイルになっていて、丸い画像ではあるが、普通のフォトビューアで見ることが出来た。

これをアプリを使って変換すると、樽形歪の少ない広角写真として切り出される。この時にInsta360アプリのWindows版を使えばタイムスタンプが保持されたjpegファイルが出力される事がわかった。結局、Go2をUSBでWindowsPCに繋ぎ、動画(.mp4)は「リニアモード」で撮影しているので、そのままダウンロード、静止画(.insp)はアプリを経由してjpegにエクスポートするという方法に落ちついた。

写真を整理していると、更に別の問題にも遭遇した。過去に1つのイベントで複数に分かれていた動画を繋いで1つのファイルにまとめた物があったのだが、これにタイムスタンプが埋め込まれていない事が判明。ファイル編集を行った際にタイムスタンプが消えてしまっていたのだ。ファイル名を日付(年月日)名にしていたので、これを使ってタイムスタンプを埋め込めないかと調べてみると、ffmpegを使えばなんとか出来そうな事が判明。ファイル名からタイムスタンプ文字列を作り、これをffmpegの引数に与える事で、何とか埋め込みに成功した。更に静止画にもタイムスタンプ無しの物が大量に見つかり…。

ffmpeg -i inputFile -c copy -metadata creation_time="2012-10-31T00:00:00.000000Z" outputFile

今までは、jheadというアプリをタイムスタンプの校正に使っていたので、これでできないかとやってみたのだが、タイムスタンプが書かれていないファイルにタイムスタンプを追加する事はできなかった。困った…。さがしてみるとexiftoolというアプリを発見。このアプリ、タイムスタンプを追加するとオリジナルファイルは別名でバックアップして新たにタイムスタンプを追加したjpegファイルが生成された。素晴らしい。

exiftool -CreateData="2012:10:31 12:34:56" inputFile

更に過去に保存してあった動画に、拡張子がm4vのかなり大きなサイズの物がある事が判明。ffmpegのデフォルトの設定でmp4にコンバートしてみると画質の劣化も殆ど無いのに1/3位のサイズになったので、これを採用。

と、ここまでやって確認のためにPS3のメディアプレイヤーで再生してみる。とGo2で撮った動画が見られない。

ん?破損データ

では、PS4ではどうだろうか?。スマホやWindowsPCでは問題なく再生できることは確認済だ。PS4のメディアプレイヤーを立ち上げて見てみると、何と上下が逆さまになって映像が表示された!。早速ffprobeという(ffmpegのサブセット版?の)情報表示ツールに掛けて上下反転しない過去の動画と比べてみると、rotate = 180という属性が付いていることが分かった。もしや?と思いGo2を横向きや逆さまで撮影してみると、このrotate属性が90や270(逆さまのときは0になっているためかrotate属性は無い)になっていた。ということは、この値を基にしてローテートさせれば良いのではないか。ffmpegに動画を回転させるオプションがあったので、rotate属性を基に適宜回転させればいいだろうと思いついたが、もっと手間のかからないオプションを発見。

ffmpeg -i inputFile -c:a copy outputFile

-c:a を使うとrotate属性から所望の回転をしてファイルを出力してくれる。回転させた動画をPS4で再生させると、すべてのカメラ向きで正しく再生できた。もしや、と思い淡い期待でPS3でも再生してみると、問題なく再生できた。rotate属性が有るだけで「破損データ」扱いなの?

結局、

  • 過去データのタイムスタンプ付け直し
  • Go2のファイルはWindowsPCで取り出し
  • renameアプリ(スクリプト)作成
  • ffmpegで動画はすべてmp4に変換
  • Go2で撮った動画の適宜回転

を行い、ようやくバックアップ作業の準備が完了した。あとはNAS(時間がかかる)とリムーバブルHDDにバックアップしておしまい。