【Raspberry Pi × NAS × iPhone × Dropbox】家族の共用NASへ手軽に動画を保存するための仕組みを構築した

nas-architect

皆さんはスマホの動画などの管理はどうしていますか?

いままで動画や写真などの容量で困ったことはなかったんですが、子供が生まれてからというものの、毎日何かとiPhoneで動画を撮るようになりました。

そんなことをしていたらiPhoneの容量もGoogleDriveの容量もあっという間に満タンになってしまいました。。。

とはいえ、一応ラズパイやHDDといった道具は揃っているのに容量のために月額料金払うのはちょっと悔しかったので、ありものでなんとかできないか試行錯誤した結果を紹介します。

コンセプト

ランニングコストを掛けたくなかったのと、妻が持っている動画も一箇所にまとめたかったので下記の2点を意識しました。

  • 動画の保存作業そのものがストレスなくできること
  • すでに家にあるもので作ってみること

特に一つ目は重要で、動画の保存作業自体のオペレーションが面倒だと、保存作業自体をやめてしまう可能性がありました。

そのため、ここを可能な限りストレスなく保管できるようにiPhoneのショートカットを活用する形を採用しました。

また、動画の保存先は維持コストの観点からNASにしております。余っていたラズパイとHDDがあったので、この機会にNAS化して動画保管に活用することにしました。

冗長性を考えると、クラウドサービスに課金するのが一番安全だと思いますが、HDDなどすでに材料が揃っていること、ランニングコストをここで払ってしまうとあと戻りしづらい気がしたので、ローカル環境に保管する構成にしました。

HDDは一応2台で冗長構成を取るようにしております。

概要

流れとしては大きく分けて2つです。

まずは、iPhoneからDropBoxへ動画ファイルを保管しています。

先程述べたようにショートカットを作っており、ボタンをワンタップ→動画を選択するだけでDropboxの固定のパスに動画を保管できるようにしています。(やろうと思えば条件に一致する動画を自動的にアップロード、なんてこともできそうでした)

次にDropBoxに保存されている動画をラズパイ経由でNASにダウンロードし、Dropbox側の動画を削除をします。

ラズパイからdropboxのデータを操作するためにDropbox Uploaderというシェルを使っています。githubにコードが公開されているのでcloneして使いました。設定手順などはREADMEを読むか、他にも紹介しているブログがあるのでそちらを参考にしてみてください。

上記のシェルをcronで日時実行することで、NASへの動画のアップロードを実現しています。

なぜDropboxを採用しているのか?

ぶっちゃけDropboxは踏み台用です。

もともとiPhoneのファイルアプリから直接NASに書き込む設計で運用していたのですが、sambaの接続設定が切れてしまったり、一々ファイルパスを選択する必要があるなど、使い勝手が悪く動画をアップロードしなくなってしまう時期もありました。

しかし、Dropboxを仲介することで、iPhoneからスムーズにファイルの保存ができ、Dropbox側に保存したデータもDropbox uploaderというシェルを活用することで柔軟にファイル操作ができるのでこの構成に落ち着きました。

iPhoneからショートカットを使ってDropboxに動画をアップロードをもう少し詳しく

動画の保存に使っているiPhoneのショートカットについてもう少し詳しく書きます。

ショートカットでは大きく分けて下記のような操作を行っています

  • すべての動画から特定の条件に一致する動画のみを検索
  • 動画を選択する
  • 選択した動画をDropboxの特定のパスに保存する
  • その後アップロードした動画を特定のアルバムに追加する
  • iPhoneにアップロード完了を通知する

これによってDropboxの指定したパスに対して、iPhoneからファイルをアップロードすることができます。

ショートカットはホームアイコンに設定することもできるので、このアイコンをタップするだけで起動することもできます。あとは動画を選択するだけでアップロードは完了です。

また、アップロードしたファイルをアルバムAに移動させております。というのも、最初の動画選択画面では「アルバムA」の動画を選択対象から除外しており、誤って2回同じファイルをアップロードすることを防いでいます。

こうした細やかな設定も簡単にできるのがショートカットの強みです。

また、自分が作ったショートカットはiCloud経由で渡すこともできるので、これで家族に共有して使っています。

Dropboxのデータをdropbox uploaderを使ってNASにダウンロードする

ここまででDropboxに動画をあげることまではできました。

次はNAS側に保存する処理になりますが、少し前提を整理します。

私のDropboxは無料版は2GBのみです。課金していればDropboxに保存して終了なのですが、このままではあっという間に容量がいっぱいになってしまいます。

そのため、Dropboxのデータを自宅のラズパイ製のNASに保存するスクリプトを書いて実行しています。ラズパイからDropboxをCLIで操作するためにdropbox uploaderを使っています。初期設定などは他の記事があるのでそちらに譲ります。

cronでシェルを実行して、対象の動画をNASに保管後、削除するようにしています。ただ、ダウンロード以外のコマンドはlinuxとおなじように正規表現が使えなかったりと癖がありますのでちょっと不格好なスクリプトになっております。

#!/bin/bash

# 現在の日付をセットする (202108011310)
date=`date '+%Y%m%d%R'| tr -d :`

# Dropboxのhogeディレクトリにファイルがない場合は終了
target=`./xxx/dropbox_uploader.sh list /hoge`
expectedResult=' > Listing "/hoge"... DONE'
if [ "$target" = "$expectedResult" ]; then
  echo "処理を終了します"
  exit 0
fi

echo "処理を開始します"

# dropboxからマウントしているsambaにダウンロードする
./xxx/dropbox_uploader.sh -p download /hoge /mnt/hoge/hdd1

これを毎日夜中に実行してNASに保管されるようにしています。

Infuseを使ってNAS上の動画の参照する

これにてNASに動画を保管することができました!

保存した動画は、Infuseという無料のアプリを使っております。

sambaに接続設定をするだけで閲覧ができる手軽さ、リッチなUI、ラズパイ製のNASにも関わらずそれなりの速度で再生ができるなど、無料とは思えないメディアプレーヤアプリです。(他に良いアプリがあるなら是非教えてほしいです。)

昔の動画とかをまとめてみたいときはこのアプリを経由してNASの動画を閲覧するようにしています。今のところは自宅ネットワーク内でしかみれませんが、将来的にはリモート接続できるような構成にしたいと思っています。

まとめ

一連の流れは動画をショートカットで保管したら、次の日の朝にはNASに保管されている状態を実現することができました!ちなみにNASはrsyncでHDD2台構成にしております。

子供の動画をしっかり守れるように維持していければと思います。

これを通して、iPhoneのショートカットには可能性を感じました。かなり様々なAPIが用意されているのでので、他にも活用できることがないか触ってみたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です