Insta360 Go2の動画ファイルの向き問題。

以前、Insta360 Go2(以下Go2)で撮影した動画がPS3で再生出来なかった件で、rotate属性を解消 – 所定の回転を行って属性を反映 – すると再生可能になる事がわかったので、過去にGo2で撮影した全ての動画ファイルにこの対応を行っていた。

Go2では基本的に動画は15秒カットで撮影している。これをそのままにしておくと、再生するときに煩雑(15秒ごとに再生ファイルを選択すること)になるので、その日のイベントとして1本につなぐのだが、動画編集アプリに取り込んだ時には上下正しく表示されている。もしや?と思い、適当な動画を繋いでエクスポートしたものをPS3で見てみた。おぉっ、エラー出ないじゃん!。rotate属性、正しく反映された状態で出力されていたのだ…。

以前までの作業(連結なし)

  • 15秒カットの動画のファイル名を撮影日付を表す名前に付け替える。
  • それぞれのファイルを回転。タイムスタンプを付け直す。
  • バックアップドライブにコピー。

このあと、連結したくなり、

  • shotcutで連結、撮影日時を表す名前で保存。
  • 出来上がったファイルのタイムスタンプを付け直す。
  • バックアップドライブにコピー。

shotcutで回転属性が反映される事がわかったので、今後の作業手順は

  • 15秒カットの複数のファイルを動画編集アプリ、shotcutに取り込み連結、撮影日時を表す名前で保存。
  • 出来上がったファイルのタイムスタンプを付け直す。
  • バックアップドライブにコピー。

かなり手間が減らせそうだ。

ffmpegで動画のタイムスタンプが無くなったので対策

insta360 Go2で録った動画が上下反転(180度回転)してる事に気がついたのは、ファイル名を付け直してバックアップが一通り終わってから、PS4で再生したときだった。MP4動画ファイルの中にrotate属性があり、これを反映させれば正常な向きの動画(PS3ではこれを行わないと破損ファイル扱いになって再生できない)になる事がわかったので、ffmpegを使って回転するツール(スクリプト)を作り、対応した。が、この作業でタイムスタンプ属性(creation_time)が削除されてしまった。

続きを読む →

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にバックアップしておしまい。