iPhone/iPadで録画した動画の位置情報:記録方法や書き換え方
2018/04/07
iPhoneで撮影した動画には位置情報(ジオタグ)が記録されています。その記録内容や方法について調べました。
目次
動画の位置情報
iPhone/iPadで撮影した動画には位置情報が記録されています。
内蔵のGPSを利用して撮影当時の位置情報が記録されているわけですね(ジオタギングと呼ばれます)。位置情報の記録は写真だけでなく動画でも行っているわけですね。
動画には共通のフォーマットが無い
写真の場合は、撮影時の情報の記録方法がデファクトスタンダード(事実上の標準)として存在します。デジタル写真の記録で圧倒的に使われているファイル形式はJPEG(.jpg)ですね。これに「Exif」というフォーマットに従って、撮影機種、シャッタースピードや絞り値などの情報を記録しています。GPSもExifのデータとして記録されます。
一方動画ではGPSの記録方法として標準的な方法がありません。そもそも動画はファイル形式が色々と使われています。古くは .amc や .3gp,.3g2 などがあり、最近では .mp4 や .mov、中には .avi や .mts を使うものもあります。さらに内部の動画コーデックや音声コーデックも色々あるんですが、今回はそんな話ではないので割愛します。
ともかくファイル形式が一定じゃない。どれも動画を内部に格納しているのは同じですが、記録の仕方が異なります。GPSなどの付加的な情報(メタデータ)が共通しているはずもなく、記録の可否や記録方法はバラバラです。
iOSの動画記録方法
iOSでのビデオ撮影ではファイル形式 .mov が使われています。Appleのマルチメディア技術群「QuickTime」の動画ファイル形式ですね。
iPhoneで撮影した動画ファイルをGOMプレイヤーで再生し、ファイル情報を見てみると位置情報が記録されているのが分かります。
2箇所GPSデータがありますが、数値を書き換えてテストしたところ「com.apple.quicktime.location.ISO6709」の方を優先して参照、無ければもう一方の「ゥxyz」を参照して位置を表示していることが分かりました。
※追記 iOS9以降は「ゥxyz」の方が無くなりました。
ファイルの中身を見てみると、GPSデータがそのままASCIIで記録されています。
Google Mapの検索で「35.6340, 139.8772」と緯度経度の順にカンマ区切りで並べると地図上に位置が表示されます。移動しながら撮った動画で詳しく位置を調べてみると、撮影開始時点での位置情報が記録されていることが分かりました。
位置情報の書き換え方法
単に位置情報を書き換えるだけなら、バイナリエディタで直接緯度経度データを書き換えるだけで可能です。
位置情報が記録されてない動画に追加するには、movファイルのデータ構造をちゃんと勉強して追加するか、位置情報を追加できるソフトを使う必要があります。今のところiPhoneで読めるような位置情報を追加できるソフトは見つかっていません。
movファイル以外の動画ファイルの位置情報
他の動画ファイル形式でも、位置情報の記録について定義されているものもあります。2017年現在おそらく最も使われているであろう動画ファイル形式「.mp4」においても位置情報の記録が可能で、ffmpegで書き換えもできます。
ただし、ffmpegで記録したmp4の位置情報は、iOSは認識してくれませんでした。おそらくiOSはmovファイルの特定の形式(com.apple.quicktime.location.ISO6709)で記録されている場合のみ、位置情報付きの動画だと認識するようです。
mov → movの変換なら位置情報の維持が可能
今回調べたそもそもの出発点は、iPhoneで撮影した動画を再エンコード(圧縮)したファイルをiPhoneに「写真の同期」で戻すと位置情報が消えてしまうということでした。エンコードに使ったのはmp4(H.264+AAC)だったのでそのまま追加は難しそうですね。
全ファイルをmovで再エンコードするのであれば、位置情報の維持ができます。ffmpegでmovからmovに変換した場合、「com.apple.quicktime.location.ISO6709」は消えてしまいましたが、「ゥxyz」の方が残っていて、iOS上でも位置情報が認識されました。
※追記 iOS9以降で撮影した動画では「ゥxyz」の方が無くなってしまったので、残念ながら位置情報が消えてしまいます。
まとめ
iPhone(というかApple全般)は独自形式が多いんですが、動画の位置情報についてはそもそも標準が存在しないので仕方ありませんね。
今回はmov独自の形式だったので、movのまま変換することで目的を達成することができました。
※追記 iOS9以降で撮影した動画は残念ながら位置情報が保てませんでした。別のアイディアはあるので、今度はそちらで挑戦してみようと思います↓