ocDownloader
つい最近NextCloudをインストールしました。2段階認証も出来とても気に入っています。
NextCloudにはいろいろなアプリがインポートできるようになっています。
私が使いたかったのはocDownloaderというアプリだったのですが今のバージョンでは動作確認されていないようで要確認アプリとなっています。
実際githubに上がっているインストール方法を確認しつつやってみたのですが、アプリが正常に動く様子はありませんでした。
そのインストールの途中でAndroidと連携が取れるというnextload-coreアプリが紹介されていました。
要点を言うと指定のフォルダにurlを記載したファイルを置くと自動的にダウンロードするようなシステムでした。
使っているシステムとしてはNextCloudのWebDAV機能を使って指定のフォルダを監視し、別スレッドでyoutube-dlを起動しているようでした。
これなら私の拙い頭を使っても実装できるのではと思い作り始めました。
このスクリプトの前提条件
このスクリプトは内部でエンコード処理を行っている為、仕様としてスクリプトを変更できない人は以下の前提が付きます。
- NextCloudに直接アクセスできる端末であること。(同一端末でも以下の条件下であれば可)
- CPUに第4世代IntelCoreシリーズなどffmpegでvaapiが叩ける環境であること。
- 上記以外でハードウェアエンコードができる場合はスクリプトの一部を変更できる技術のある方
- ソフトエンコードではかなりのスペックが必要になるのでやめておいた方がよい
言語どうしようか問題
私のできるプログラムとしてはPerl、シェル、時々Pythonという感じでした。最初perlで書き始めたのですがWebDAV関連で詰まってしまって断念。
次にシェルという感じだったのですがcurlで大体できたのですがいまいち汚い。人にお見せできるような物ができませんでした。
無い知恵を絞ってpythonを使ってみたところ、まあ人に見せられる位にはなったので披露しようかと思いました。
github
どんなライセンスにしようか未だに迷っていますがとりあえずUPします。
ソース
まずソースを見てもらいます。
vi .env
SRC_PATH=./src DAV_USER=username DAV_PASS=nextcloudで作ったapiキー DAV_SERVER=http://example.com/nextcloud/
ここで1行目は固定です。弄らないで下さい。
2行目から個人の設定です。WebDAVで接続するのでユーザー名とパスワードが必要になります。ユーザー名はそのままusernameを変更して下さい。
3行目のDAV_PASSですがこれはNextcloudでAPIキーを作成してください。NextCloudにWebログインして右上のアイコンを押下し、個人設定を開きます。その後「セキュリティ」に偏移し「デバイスとセッション」の最後にアプリ用のパスワードを作成するボタンがあります。適切なアプリ名を入れて押下するとワンショットのパスワードを発行してくれます。このパスワードをDAV_PASS=に続けて書き込んで下さい。
4行目ですが実際にNextCloudにアクセスするときのアドレスを入力して下さい。例ではサブディレクトリまで書かれていますが、無い人はhttps://example.com/という形です。最後のスラッシュは必須です。
出来上がるとこんな感じでしょうか。
SRC_PATH=./src DAV_USER=username DAV_PASS=xxxx-yyyy-zzzz-aaaa DAV_SERVER=http://example.com/nextcloud/
NextCloudの設定
事前に個人ディレクトリを中に作っておきます。
「nextload」というディレクトリを作って下さい。またその中に「videos」と「audios」とディレクトリを作って下さい。申し訳ありませんが環境変数等で変更できるようになるまでは固定という事で。
docker compose up -d –build
もともとNextCloudがdockerで動かしているのでdockerで作ってしまいました。アクセスできる端末があればどこでもいいのですがWebDAVに直接アクセスできる場所にあることが前提です。
このスクリプトはこのコンテナを動作させる端末が第4世代IntelCoreシリーズで作られています。他の環境の方はffmpegに渡すコマンドを変更して下さい。
コマンド自体はsrc/startup.pyの41行目と50行目です。例えばBroadwell世代の方ならh264_qsvが使えますし、RPi4とかであればh264_omxやv4l2m2m、NvidiaでNVEncが使える方はh264_nvencなどなど。コマンド指定に難はありますがffmpegをお使いの方であればビルドファイルやオプション変更はできると思います。
docker compose up -d --build
で起動します。必要なライブラリの取得やffmpegをビルドしていますので5分位かかるかもしれません。
動作について
デフォルトでは2分おきにNextCloudのnextloadに「url.txt」というファイルがあるか確認しに行ってあればyt-dlpで最高条件でダウンロードを実行し、モバイル用に縮小videoと音楽プレイヤーで使えるように音声だけ抜き出したファイルを生成します。
旅先で「あーこのYoutube動画いいな。ループで見たいし、音楽プレーヤーで流しておきたいな」というときにnextloadにアドレスを書き込んだテキストファイルを入れれば自動で変換してくれます。
最後に
本当はエンコード部分を別にして色々なマシンにあったセッティングができるように作ろうかと思ったのですがまだPythonの基本がなってないのでハードコーディングになってしまいました。申し訳ありません。できるだけ変更しやすいようにコメントはつけたつもりです。ぜひ使ってみて下さい。
追記1
RaspberryPi4用Raspian32bitベースで作り込んでみました。やはり非力ではありますが需要があるとの事なので。ぜひ使ってみて下さい。
追記2
RaspberryPi4用Ubuntu22.04LTSServerベースで作り込んでみました。追記1と同様ですがビルド方法とコマンドが多少違ってしまうので追加しました。使ってみて下さい。
ちなみにどちらもdockerは最新のを利用して作成しました。ご注意を。
コメント