「GoProクラウド」に上げたメディアファイルを一括ダウンロードするCLIのコマンドを試した

「GoProクラウド」に上げたメディアファイルを一括ダウンロードするCLIのコマンドを試した
Page content

自動アップロードは便利だが逆はどうしよう

2023年12月某日より、アクションカメラの「GoPro HERO12 Black Creator Edition」が我が家の装備に加わった。遊び甲斐がたっぷりありそうなこの撮影機材を家族全員が楽に存分に活用できるようにGoProサブスクリプションを契約し、GoProの充電中に、GoPro内に保存したメディアファイル (撮影した動画など) が容量無制限の専用クラウドストレージ「GoProクラウド」へ自動的にアップロードされるように設定した。たとえば4K動画を数分間撮影するとどうやらSDカード容量を数GBは消費するので、頻繁にメディアファイルをクラウドへ逃がせるようにしておくことは必然的かもしれない。

GoPro公式ストア限定 GoPro HERO12 Black クリエーターエディション + 認定SDカード 【国内正規品】

GoPro公式ストア限定 GoPro HERO12 Black クリエーターエディション + 認定SDカード 【国内正規品】

GoPro(ゴープロ)

KIOXIA(キオクシア) 旧東芝メモリ microSDXCカード 256GB 高耐久 ドライブレコーダー対応 UHS-I U3 V30 Class10 最大読出速度100MB/s 国内サポート正規品 メーカー保証2年 KLMHA256G

KIOXIA(キオクシア) 旧東芝メモリ microSDXCカード 256GB 高耐久 ドライブレコーダー対応 UHS-I U3 V30 Class10 最大読出速度100MB/s 国内サポート正規品 メーカー保証2年 KLMHA256G

KIOXIA

一方、クラウドからのメディアファイルのダウンロードに関しては、GoProクラウドのメディアライブラリー https://plus.gopro.com/media-library/ には「一度にダウンロードできるのは25ファイルまで」という制限事項があったり、まず第一にGUI操作を前提とした作りとなっていてCLI派には使い勝手がいまいち。ダウンロードをバッチ処理したい自分としては色々悩ましいものがある。

そこで、GoProクラウドのダウンロード機能をCLIで扱えるツールを探してみたところ次のものを発見し、メディアファイルの一括ダウンロードが実際に行えることが分かったのでメモを残します。

gpcd (GoPro Cloud Downloader) の使い方

上記のgpcdの公式ページを参照して手順を進める。

Step-1. インストール方法

Ubuntu (amd64) の場合

$ export GPCD_VERSION=$(curl -s "https://api.github.com/repos/mvisonneau/gpcd/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
$ echo ${GPCD_VERSION}
$ wget https://github.com/mvisonneau/gpcd/releases/download/${GPCD_VERSION}/gpcd_${GPCD_VERSION}_linux_amd64.deb
$ sudo dpkg -i gpcd_${GPCD_VERSION}_linux_amd64.deb

## インストールしたgpcdにpathが通っていることを確認
$ which gpcd

macOSの場合

$ brew install mvisonneau/tap/gpcd

## インストールしたgpcdにpathが通っていることを確認
$ which gpcd

Step-2. 実行方法

gpcdに認証情報をどのように渡すのか、公式ページには具体的な方法の記述はなさそう。私なりにやってみてうまくいった方法を記録する。

  1. Chrome系ウェブブラウザを使って、GoProサイトにサインインした状態で https://plus.gopro.com/media-library/ を開く
  2. https://plus.gopro.com/media-library/ を開いた状態でブラウザ画面を右クリックして [検証] メニュー > [Network] タブを選択する
  3. 画面をreloadし、[Network] タブの Name=media-library/ の行を選択し、右タブで [Headers] を選択し、[Request Headers] グループの中にある、key「Cookie:」に対応しているvalue文字列 (2000文字ぐらい) をコピーする
  4. コピーした文字列の中から gp_access_token=XXXXX...; のXXXXX…部分 (1200文字ぐらい) を抽出する
  5. ターミナル画面で次のexportとgpcdコマンドを実行する
    $ export GPCD_BEARER_TOKEN=XXXXX... # XXXXX...は抽出した内容へ置き換える
    $ gpcd list
    
  6. 次のような実行結果が表示されると、GoProクラウドのメディアライブラリーからファイル情報が取得できていると分かる
    $ gpcd list
    LRwgeNRiRe9J3 | 2024-01-07 00:27:10 +0000 UTC | GX010132.MP4 - Video (2160p)
    wTvJ3VmqhgJJj | 2024-01-06 12:21:02 +0000 UTC | GX010131.MP4 - Video (2160p)
    znKsYadg9nnpg | 2024-01-06 11:37:32 +0000 UTC | GX010130.MP4 - Video (2160p)
    (以下省略)
    
  7. gpcdコマンドの--from--toオプションを併用して用いると、たとえば次のように、日本時間 (+09:00) の2024-01-04に記録したメディアファイルのみを選択して、listもしくはdownloadが可能だ
    $ export TMP_DATE=2024-01-04
    $ gpcd --from "${TMP_DATE}T00:00:00+09:00" --to "${TMP_DATE}T23:59:59+09:00" list     # 一覧表示の場合
    $ gpcd --from "${TMP_DATE}T00:00:00+09:00" --to "${TMP_DATE}T23:59:59+09:00" download # ダウンロードの場合
    

Step-3. ヘルプ内容

gpcdのヘルプは次の通りとなっている。一つのアイデアとしては、上記Step-2の--from--to--local-pathを組み合わせることで、日毎のフォルダに分けて、GoProメディアファイルを自動保存していくようなバッチ処理も楽に実現できそうだ。

$ gpcd
NAME:
   gpcd - download bulk medias from GoPro Cloud

USAGE:
   gpcd [global options] command [command options] [arguments...]

VERSION:
   0.0.1

COMMANDS:
   list      list available medias
   download  download medias
   help, h   Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --api-endpoint value              Go Pro Cloud API endpoint (default: "https://api.gopro.com/media/") [$GPCD_API_ENDPOINT]
   --local-path value                where the medias should be downloaded (default: "./medias") [$GPCD_LOCAL_PATH]
   --bearer-token value              Used to authenticate over your account [$GPCD_BEARER_TOKEN]
   --user-agent value                (default: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0") [$GPCD_USER_AGENT]
   --from value                      filter for medias captured after this date
   --to value                        filter for medias captured before this date
   --max-concurrent-downloads value  (default: 8)
   --help, -h                        show help (default: false)
   --version, -v                     print the version (default: false)

追記 [2024-01-08]: Livestreamの処理で終了してしまう

gpcdでダウンロードする対象に「Livestream」が含まれている場合、ダウンロードURLが見つからないためか、次のようなエラーメッセージを表示してgpcd (v0.0.1) は終了してしまう。複数のメディアファイルをダウンロードしている最中であっても、その段階で終了する。Livestreamは無視して次のダウンロードに進んでくれる処理がベストなのだが、さてどうしようか。

JPdFwunuAnyNM | 2023-12-27 10:54:42 +0000 UTC |  - Livestream ()
2024/01/08 20:27:46 unable to find a downloable URL for this media

参考リンク

GoProを使いこなすための、とても凝っているツールを紹介していると思われる次のリンクも発見した。ただし私の環境では stack install の途中でひとつエラーが発生し、不慣れなHaskellがらみで解決方法は分からなかったため、このツールの実行までは今回試せず。