MeTube:yt-dlp にブラウザ用ダウンロードパネルを追加する

MeTube の基本的な使い方を整理する。yt-dlp をセルフホスト型の Web パネルとして扱えるようにし、動画、音声、字幕、プレイリスト、チャンネル購読、多層的なダウンロード設定に対応する。NAS や自宅サーバーのユーザーに向いたツールだ。

MeTube は、yt-dlp にブラウザ画面を付けるセルフホスト型プロジェクトだ。価値はかなりわかりやすい。コマンド入力、パラメータ指定、パス管理、トラブルシュートが必要だったダウンロード作業を、Web パネル上で完結できるようにする。

すでに yt-dlp に慣れている人にとって、MeTube は代替品というより、日常利用や複数人での共有に向いた外側のインターフェイスだ。コマンドラインに触れたくない人にとっては、動画ダウンロードを「リンクを貼る、形式を選ぶ、タスクを送信する」という操作にまで下げてくれる。

MeTube が解決しやすいこと

yt-dlp 自体は強力だ。YouTube をはじめ多くの動画サイトに対応し、音声、字幕、サムネイル、プレイリスト、形式選択も扱える。ただし、コマンドラインツールには明確なハードルがある。

  • パラメータが多く、よく使う設定は覚えるかスクリプト化する必要がある;
  • ダウンロード先、ファイル名、音声・動画形式を間違えやすい;
  • 家族やチームに使ってもらう場合、全員にコマンドを覚えてもらうのは難しい;
  • チャンネル購読、バッチダウンロード、バックグラウンドキューは Web パネルで管理するほうが向いている。

MeTube は、これらの機能をブラウザに集約する。裏側では引き続き yt-dlp を呼び出し、表側ではタスク送信、キュー管理、品質選択、設定画面を提供する。

3つのダウンロード場面

MeTube のよくある使い方は、3つに分けられる。

1つ目は単一動画のダウンロードだ。リンクを貼り、動画品質または音声のみを選び、タスクを送信する。字幕やカバー用サムネイルなどの追加ファイルも同時に扱える。

2つ目はプレイリストとチャンネルのダウンロードだ。プレイリストやチャンネルのリンクを入力すると、MeTube が項目一覧を取得する。必要なものだけ選んでダウンロードすることも、一括でキューに入れることもできる。講座、ポッドキャスト、公開授業、動画資料のアーカイブに向いている。

3つ目は購読による自動ダウンロードだ。チャンネルやプレイリストを購読すると、MeTube は設定した間隔で新しい内容を確認し、更新があれば自動的にダウンロードキューへ追加する。デフォルトの確認間隔は 60 分で、サーバー負荷や更新頻度に合わせて調整できる。

Docker でのデプロイ

最も簡単なデプロイ方法は Docker だ。

1
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube

このコマンドは、コンテナの 8081 ポートをホストへマッピングし、ホスト側のダウンロードディレクトリをコンテナ内の /downloads にマウントする。NAS や自宅サーバーで Docker を使っているなら、docker-compose にして、リバースプロキシ、保存先、権限設定と一緒に管理すると扱いやすい。

yt-dlp のオプション管理

MeTube の yt-dlp オプション管理は3層に分かれている。安定したデフォルト値から一時的な上書きまで、段階的に制御できる。

1層目はグローバル設定だ。YTDL_OPTIONS で全ダウンロードタスクのデフォルト動作を指定できる。JSON ファイルを参照させることもでき、ファイル変更後はコンテナを再起動せずに自動リロードできる。

2層目はプリセットだ。プリセットは名前付きのオプションセットと考えればよい。たとえば「字幕を埋め込む」「SponsorBlock の区間をスキップする」「速度制限をかける」「音声だけ取得する」といった設定を用意できる。ダウンロード時に画面から選択でき、複数のプリセットを組み合わせることもできる。

3層目は単発の上書きだ。一時的な要件がある場合、画面上で JSON の上書きパラメータを入力できる。優先度は最も高い。この機能はデフォルトでは無効で、有効化する前に権限境界を考える必要がある。ユーザーが任意の yt-dlp オプションをコンテナ内に渡せるためだ。

優先順位はシンプルだ。単発の上書きがプリセットより強く、プリセットがグローバル設定より強い。

ファイル名とディレクトリ

MeTube は yt-dlp のファイル名テンプレート機能を継承している。よく使う設定は次の通りだ。

  • OUTPUT_TEMPLATE:単一動画のファイル名を制御する;
  • OUTPUT_TEMPLATE_PLAYLIST:プレイリストのダウンロードを制御し、通常はリスト名ごとにディレクトリを分ける;
  • OUTPUT_TEMPLATE_CHANNEL:チャンネルのダウンロードを制御し、通常はチャンネル名ごとにディレクトリを分ける;
  • AUDIO_DOWNLOAD_DIR:音声ファイルを指定ディレクトリへ分けて保存する。

ダウンロード量が多い場合は、一時ディレクトリを SSD に置くと、結合やトランスコードが速くなる。tmpfs も使えるが、メモリ上のファイルシステムはレジュームに影響する可能性があるため、短いタスク向きで、長時間の大容量ダウンロードには向きにくい。

MeTube はカスタムディレクトリにも対応する。有効にすると、ダウンロード画面にディレクトリ選択欄が表示され、新しいディレクトリ名を入力すれば作成して保存できる。NAS ユーザーにとっては、毎回パスを手入力するより便利で、ファイルが散らかりにくい。

ブラウザ拡張と外部連携

MeTube は、パネルを開いてリンクを貼るだけのツールではない。Chrome と Firefox の拡張機能があり、動画ページの右クリックメニューから MeTube へ送信できる。iOS ではショートカットを使い、Safari の共有メニューからリンクを送れる。ブックマークレットで任意のページの現在 URL を送ることもできる。

ブラウザ拡張を使う場合は、CORS と HTTPS を適切に処理する必要がある。よくある構成は、MeTube の前段に Nginx、Caddy、Apache などのリバースプロキシを置き、外部アクセスを HTTPS にしつつ、クロスオリジン設定を補う方法だ。

向いているユーザー

MeTube は次のような場面に向いている。

  • NAS、自宅サーバー、長時間稼働する Docker ホストがある;
  • 統一された動画ダウンロード入口を作りたい;
  • YouTube チャンネルやプレイリストを自動的にアーカイブしたい;
  • yt-dlp のコマンドラインは面倒だが、その機能は使いたい;
  • 家族、同僚、小さなチームに、コマンドを覚えなくても使えるダウンロード画面を提供したい。

一方で、たまに動画を1本落とすだけの人にはやや重い。その場合は、コマンドライン、デスクトップツール、一時的なスクリプトのほうが軽いかもしれない。MeTube の強みは、常駐運用、キュー管理、購読チェック、統一入口にある。

使うときの注意点

第一に、MeTube はあくまで yt-dlp の Web 管理画面だ。ダウンロード能力は yt-dlp 本体に依存する。対象サイトの仕様変更、ログイン制限、地域制限、利用できない形式などの問題は、最終的には yt-dlp の対応状況に戻ってくる。

第二に、複数人へ開放する前に権限を考える必要がある。特に単発の上書きパラメータ、カスタムディレクトリ、インターネット公開は、誤操作やセキュリティリスクにつながりやすい。より堅実なのは LAN 内で使い、外部公開が必要な場合はリバースプロキシ、認証、アクセス制限を追加する構成だ。

第三に、ダウンロードディレクトリは事前に設計したほうがよい。プレイリスト、チャンネル、音声、一時ファイルは分けておかないと、しばらく使っただけでファイルが混ざってしまう。

まとめ

MeTube の位置づけは明確だ。新しいダウンロードエンジンではなく、yt-dlp を長期運用向けの Web ダウンロードセンターにするためのツールである。NAS、自宅サーバー、動画資料をまとめてアーカイブしたい人にとっては、毎回コマンドを打つより安定し、他の人にも渡しやすい。

すでに Docker を使っていて、動画、音声、字幕、チャンネル内容をよくダウンロードするなら、MeTube は常駐ツールとして試す価値がある。

参考:知乎コラム原文

记录并分享
Hugo で構築されています。
テーマ StackJimmy によって設計されています。