こんにちは、エンジニアのオオバです。
今まで普通にアップロードできていたのですが、最近SONYハンディカムで撮影したMTSファイルの一部がGooglePhotosにアップできなくなる現象が発生しました。原因不明案件です。
このようにエラーになってしまいます。
ちなみに、ブラウザ経由でファイルをD&DしてGooglePhotosへアップロードしています。諸事情でアプリは使用していません。
ぼくは子供の写真や動画を外付けローカルハードディスクとGooglePhotosの2つのバックアップで運用しています。
中でもGooglePhotosは両親への共有という役割も兼ねているため、この状況は非常に困りました。
そこでテクノロジーの力を使ってなんとかしてみます。
→11万文字で徹底解説した「DOTweenの教科書」Unityアニメーションの超効率化ツールはこちら
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を見てください。
GitHub - baobao/mts2mp4cloneExif
ひとこと
あけましておめでとうございます。
そろそろ新しいカメラが欲しいです。
この記事が気に入ったらフォローしよう
- macOS Mojave 10.14.1
- exiftool 10.59
- ffmpeg 3.4