GoPro MAXで撮影した360度動画をStreet View Studioへアップロードする
はじめに
今回はGoPro MAXで撮影した360度動画をGoogle Street View Studioへアップロードする方法について解説します。
作業の流れ
1. GoPro Playerでリフレーム
GoPro Playerで.360ファイルをリフレーム(エンコード)により正距円筒図法の動画(Equirectangular Movie, 拡張子は.mov)に変換します。変換設定は以下のとおりです。
- 解像度:
5.6K - コーデック:
HEVC - 画質:高
- ワールドロック:無効化
- 水平レベル:無効化
最後の2つは、こちらに書かれているジャイロスコープスタビライザーを無効にしますに対応する設定です。
2. ffmpegでGPS情報をバイナリデータとして抜き出し
ffmpegで.360ファイルからGPS情報が含まれているStreamを抜き出します。
まず、Streamの情報を確認します。
ffprobe PATH_TO_VIDEO
handler_nameがGoPro METになっているStreamを抜き出します。今回対象としているファイルですと以下のような出力が出てきているStreamです。
Stream #0:3[0x4](eng): Data: bin_data (gpmd / 0x646D7067), 93 kb/s (default)
Metadata:
creation_time : 2024-01-01T01:23:45.000000Z
handler_name : GoPro MET
ここで、Stream #0:3が対象のStreamです。このStreamをffmpegの-mapオプションを使って抜き出します。
ffmpeg -y -i PATH_TO_VIDEO -codec copy -map 0:3 -f rawvideo PATH_TO_BIN/BIN_NAME.bin
このようにすると、バイナリデータファイルBIN_NAME.binが生成されます。
3. gopro2gpxでGPXファイルに変換
gopro2gpxというツールを使って、バイナリデータファイルをGPXファイルに変換します。
gopro2gpx -vvv -b -s PATH_TO_BIN/BIN_NAME.bin PATH_TO_GPX/GPX_NAME
ここで-vvvはverboseモードで、vの数が多いほど詳細なログが出力されます。指定可能なのは-vから-vvvまでです。また、-bはバイナリデータファイルを読み込む引数で、-sはGPSFIXが0の点を除く引数です。
またGPX_NAMEは出力されるGPXファイルの名前で、拡張子は不要です。
このコマンドを実行すると、GPX_NAME.gpxファイルとGPX_NAME.kmlファイルが生成されます。
4. .movファイルのタイムスタンプをGPXファイルに合わせる
1で生成された.movファイルのタイムスタンプは、撮影時刻ではなくリフレーム(エンコード)時刻になっています。一方.gpxファイルは撮影時刻を記録しているため、.movファイルのタイムスタンプと.gpxファイルのタイムスタンプを合わせる必要があります。
まず、.gpxファイルのタイムスタンプを確認します。色々な方法があるかと思いますが、今回はGet-Contentコマンドを使って確認します。
$XML = [XML](Get-Content PATH_TO_GPX/GPX_NAME.gpx)
$XML.gpx.trk.trkseg.trkpt.time[0]
これによって、.gpxファイルの中にある最初のtimeタグの中身が表示されます。
2024-01-01T01:23:45.000Z
ここで表示された時刻を使って、.movファイルのタイムスタンプを変更します。ここでも様々なやり方があるかと思いますが、今回はexiftoolを使って変更します。
exiftool.exe -TrackCreateDate="2024:01:01 01:23:45" -overwrite_original PATH_TO_VIDEO
これによって、.movファイルのタイムスタンプが変更されます。
5. .movと.gpxファイルをGoogle Street View Studioへアップロード
最後に、.movファイルと.gpxファイルをGoogle Street View Studioへアップロードします。アップロード後、Street Viewとして公開されるまでしばらく時間がかかります。
Discussion