渋谷ほととぎす通信

完全趣味でやってる技術メモ。※所属団体とは一切関係がありません。

急にMTSがGooglePhotosにアップロードできなくなったので応急処置をした


今まで普通にアップロードできていたのですが、最近SONYハンディカムで撮影したMTSファイルの一部がGooglePhotosにアップできなくなる現象が発生しました。原因不明案件です。

f:id:esakun:20190105233712p:plain:w300
このようにエラーになってしまいます。

ちなみに、ブラウザ経由でファイルをD&DしてGooglePhotosへアップロードしています。諸事情でアプリは使用していません。

僕は子供の写真や動画を外付けローカルハードディスクとGooglePhotosの2つのバックアップで運用しています。
中でもGooglePhotosは両親への共有という役割も兼ねているため、この状況は非常に困りました。

そこでテクノロジーの力を使ってなんとかしてみます。

exif情報は据え置きでmp4へ変換

ハンディカムで書き込まれたMTSのファイル自体に問題があるのではないかという仮設から、とりあえず他の動画フォーマットに変換してみてアップロードを試してみることにしました。

結果、mp4に変換してみた所、GooglePhotosへのアップロードが成功しました。

しかしこのままでは、GooglePhotosへアップロードされた動画ファイルのソート順はアップロードしたタイミングとなります。理想は撮影タイミングでのソートです。 GooglePhotosのビューワーはexif情報に基づいてファイルソートしているため、exif情報を引き継ぐことは必須の要件となり、ffmpeg -i hoge.mts hoge.mp4という感じでただ単に変換すればOKということではありません。

そこで、exiftoolを使用して変換前のmtsのexif情報を保持し、変換後のmp4に書き込むという処理をはさみます。
※サンプルコードは記事の最後に載せています。

MTSとmp4のexif情報はフォーマットが異なる

ここはハマりポイントでした。てっきりMTSとmp4のexifフォーマットは同じかと思っていたのですが違いました。 何故気づいたかというと、うまく動かなかったからです。

exiftool -s 動画ファイルパス

とexiftoolのコマンドを実行すると、その動画に含まれるexif情報の全てがが列挙されます。 MTSファイルとmp4それぞれ実行してみると、フォーマットが違うことが分かります。

今回はファイル生成タイミングを操作したいため、そのプロパティを探します。

結論、MTSの場合は DateTimeOriginalで、mp4は CreateDateというプロパティ名なので実装する際は注意が必要です。

結局原因は不明だがなんとかなった

原因は追えていませんが、とりあえずなんとかGooglePhotosに動画をアップできるようになりました。 今まで普通にアップロードできていたので、原因としてはハンディカムが故障しているGooglePhotosの仕様が変わったということが考えられますが、ググっても情報が出てこないので、前者の可能性かなと思っています。

非常にニッチな内容で需要はほぼ無い気はしますが、以下にソースをアップしております。使い方はREADME.mdを見てください。

環境

  • macOS Mojave 10.14.1
  • exiftool 10.59 exiftool -ver
  • ffmpeg 3.4 ffmpeg -version
  • HDR-PJ630V

ひとこと

あけましておめでとうございます。
そろそろ新しいカメラが欲しいです。