この記事は Pythonista Advent Calendar 2017 の7日目の記事です。
ファイルサイズが大きくて扱いが難しい動画ファイルを、Pythonistaで AWS S3にアップしてみた話です。
概要
iPhone8で4k60pの動画が撮れるようになりましたね!
同じスペックで撮れるデジタルカメラがそう多くない状況で、身近なiPhoneが最新の映像規格をリードするのは非常に刺激的です。
iPhoneだけで短編映画を撮った作品で使われるほどに高品質なFilmic Proと言うアプリがあるのですが、
4k60pの動画ファイルをローカルストレージに保存しておくと、すぐに容量がいっぱいになってしまいます。
そこで、クラウドストレージの使用を検討してみました。
初めはGCPのストレージを使うつもりでAPI周辺のドキュメントを読んでいたのですが、
コマンドラインツール以外で認証させる仕組みがわからず、途方に暮れていました。
今回、AWSのS3を選んだ理由は、botoモジュールを使う事でiPhoneだけでシンプルにアップロードする事が出来たからです。
順を追って説明して行きます。
📱 iPhoneサイドの準備
- Pythonista
- stash
- boto モジュール
stashは bashをPythonで実装したサードパーティモジュールです。
以下のスクリプトを実行すると、pip が使えるようになります。
import requests as r; exec(r.get('http://bit.ly/get-stash').text)
Pythonistaを再起動したら、stash上で以下コマンドを実行します。
pip install boto3
これでクライアント側の準備は整いました。
🖥 AWSサイドの準備
S3をセットアップして行きます。既に環境をお持ちであれば読み飛ばしていただいて大丈夫です。
1. バケットを作成
今回は、qa-movie2017 と言うバケット名にしました。
2. アクセスキーを作成
ユーザ名 > セキュリティ認証情報 から、
アクセスキータブ > 新しいアクセスキーの作成でキーを作成。
3. バケット名とアクセスキー、秘密鍵
バケット名とアクセスキー、秘密鍵を控えておきます。
csvファイルをダウンロードできるので、Pythonista内に保存して読み込んでも良いかもしれません。
🐍 Pythonista側
控えておいたキーを入力します。
# uploadS3.py
import os
import appex
from boto.s3 import connection, key
BUCKET_NAME = ""
ACCESS_KEY = ""
SECRET_KEY = ""
def upload():
# 登録するファイル
filename = appex.get_file_path()
_f=os.path.basename(filename)
# コネクションの作成
conn = connection.S3Connection(ACCESS_KEY, SECRET_KEY)
# バケットの取得
bucket = conn.get_bucket(BUCKET_NAME)
k = key.Key(bucket, _f)
# ファイル名を指定してアップロード
size = k.set_contents_from_filename(filename)
return size
if __main__ == “__main__”:
upload()
Pythonista 右上のボタンより、
Share > Run Pythonista Script で、 uploadS3.py を登録しておきます。
あとは OpenIn からPythonistaに登録しておいたこのスクリプトを実行するだけで、
動画に限らず様々なフォーマットのファイルを S3の指定バケット内に保存することが出来ます。
まとめ
Pythonistaとbotoモジュールを使う事で、
AWSのS3をiPhoneだけで操作することが簡単に出来ました。
スマートフォンでクラウドをがっつり操作できれば、効率はさておきiPhoneだけで仕事する事も可能かもしれません。
ただ、AWSはGCP等と比べ料金が割高になる傾向にあるため、
長期的に保存する用途では、DropBoxなど他のストレージサービスを検討する方が良いと思います。
iPhone と Pythonista にクラウドを組み合わせると、いろいろな可能性が見えてくる一例を紹介しました。