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
ファイルが生成されます。
.mov
ファイルのタイムスタンプをGPX
ファイルに合わせる
4. 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
ファイルのタイムスタンプが変更されます。
.mov
と.gpx
ファイルをGoogle Street View Studioへアップロード
5. 最後に、.mov
ファイルと.gpx
ファイルをGoogle Street View Studioへアップロードします。アップロード後、Street View
として公開されるまでしばらく時間がかかります。
Discussion