6 ポイント 投稿者 GN⁺ 2024-07-30 | 1件のコメント | WhatsAppで共有
  • 32ビット ARM ビルドの終了

    • 新しい Node バージョンが 32ビット ARM をサポートしていない
    • セキュリティアップデートと依存関係の問題により、64ビット OS への移行が必要
  • MeTube の紹介

    • youtube-dl の Web GUI(yt-dlp フォークを使用)
    • YouTube および複数のサイトからの動画ダウンロードをサポート

Docker で実行

  • Docker コマンド

    docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
    
  • docker-compose の例

    version: "3"
    services:
      metube:
        image: ghcr.io/alexta69/metube
        container_name: metube
        restart: unless-stopped
        ports:
          - "8081:8081"
        volumes:
          - /path/to/downloads:/downloads
    

環境変数で設定

  • UID: MeTube を実行するユーザー ID(デフォルト: 1000)
  • GID: MeTube を実行するグループ ID(デフォルト: 1000)
  • UMASK: umask 値(デフォルト: 022)
  • DEFAULT_THEME: デフォルトテーマ(lightdarkauto、デフォルト: auto
  • DOWNLOAD_DIR: ダウンロード保存パス(デフォルト: /downloads
  • AUDIO_DOWNLOAD_DIR: 音声専用ダウンロードの保存パス(デフォルト: DOWNLOAD_DIR
  • DOWNLOAD_DIRS_INDEXABLE: ダウンロードディレクトリをインデックス可能にするかどうか(デフォルト: false
  • CUSTOM_DIRS: カスタムディレクトリへのダウンロードを有効にするかどうか(デフォルト: true
  • CREATE_CUSTOM_DIRS: ディレクトリの自動作成をサポートするかどうか(デフォルト: true
  • STATE_DIR: キュー永続化ファイルの保存パス(デフォルト: /downloads/.metube
  • TEMP_DIR: 一時ダウンロードファイルの保存パス(デフォルト: /downloads
  • DELETE_FILE_ON_TRASHCAN: UI で削除したファイルをサーバー上でも削除するかどうか(デフォルト: false
  • URL_PREFIX: Web サーバーのベースパス(デフォルト: /
  • PUBLIC_HOST_URL: UI に表示されるダウンロードリンクのベース URL
  • PUBLIC_HOST_AUDIO_URL: 音声ダウンロードリンクのベース URL
  • OUTPUT_TEMPLATE: ダウンロードファイル名テンプレート(デフォルト: %(title)s.%(ext)s
  • OUTPUT_TEMPLATE_CHAPTER: チャプター分割された動画ファイル名テンプレート(デフォルト: %(title)s - %(section_number)s %(section_title)s.%(ext)s
  • YTDL_OPTIONS: youtube-dl に渡す追加オプション(JSON 形式)
  • YTDL_OPTIONS_FILE: YTDL_OPTIONS を埋めるための JSON ファイルパス

ブラウザ Cookie の使用

  • docker-compose.yml に追加

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • Cookie 抽出拡張機能をインストール

    • Firefox
    • Chrome

ブラウザ拡張機能

  • Chrome: Google Chrome Webstore からインストール可能
  • Firefox: Firefox Addons からインストール可能

iOS ショートカット

  • iOS ショートカット: Safari から URL を MeTube に送信
  • サーバーアドレスとポートの入力が必要

iOS 互換性

  • iOS 動画ファイル要件: h264 または h265 動画コーデックと aac 音声コーデックが必要
  • MP4 形式でダウンロードする場合は "Best (iOS)" オプションを選択可能

ブックマークレット

  • Chrome ブックマークレット: 現在開いている Web ページを MeTube に送信
  • HTTPS ページで使用する場合は HTTPS リバースプロキシが必要

リバースプロキシ配下で実行

  • NGINX 設定例

    location /metube/ {
      proxy_pass http://metube:8081;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection "upgrade";
      proxy_set_header Host $host;
    }
    
  • Apache 設定例

    <Location /metube/>
      ProxyPass http://localhost:8081/ retry=0 timeout=30
      ProxyPassReverse http://localhost:8081/
    </Location>
    <Location /metube/socket.io>
      RewriteEngine On
      RewriteCond %{QUERY_STRING} transport=websocket [NC]
      RewriteRule /(.*) ws://localhost:8081/socket.io/$1 [P,L]
      ProxyPass http://localhost:8081/socket.io retry=0 timeout=30
      ProxyPassReverse http://localhost:8081/socket.io
    </Location>
    
  • Caddy 設定例

    example.com {
      route /metube/* {
        uri strip_prefix metube
        reverse_proxy metube:8081
      }
    }
    

yt-dlp の更新

  • 自動ナイトリービルド: 新しい yt-dlp バージョンがあれば自動でビルドし、Docker イメージを更新
  • watchtower のインストールと設定を推奨

トラブルシューティングと Issue 登録

  • MeTube は yt-dlp の UI: yt-dlp 関連の問題は MeTube プロジェクトに登録しない
  • yt-dlp コマンドを直接使うことを推奨: オプションをテストしてから YTDL_OPTIONS に適用

ローカルビルドと実行

  • 必要なツール: node.js および Python 3.11

    cd metube/ui
    npm install
    node_modules/.bin/ng build
    cd ..
    pip3 install pipenv
    pipenv install
    pipenv run python3 app/main.py
    
  • Docker イメージをローカルビルド

    docker build -t metube .
    

開発ノート

  • Windows、macOS、Linux で動作
  • VSCode でサーバーを実行する場合、ダウンロードフォルダはユーザーの Downloads フォルダ

GN⁺ のまとめ

  • MeTube は youtube-dl の Web GUI で、複数のサイトから動画をダウンロードできる機能を提供
  • Docker を使って簡単にデプロイと設定ができ、さまざまな環境変数でカスタマイズ可能
  • ブラウザ拡張機能と iOS ショートカットにより、手軽に動画をダウンロードできる
  • yt-dlp の最新バージョンを自動更新し、常に最新の状態を維持
  • 類似機能を持つプロジェクトには JDownloader、Video DownloadHelper などがある

1件のコメント

 
GN⁺ 2024-07-30
Hacker Newsの意見
  • Tube Archivistは技術系チャンネルのアーカイブとインデックス化に便利

    • 高度な全文検索とメタデータ検索機能を提供している
    • Alphabetよりはるかに優れた検索機能を提供している
  • YouTube TiVoのような機能が欲しい

    • よく視聴する100のチャンネルを見逃したくない
    • 優先順位付きフィードが必要
    • DLNA経由でダウンロードして視聴できればさらに良い
    • YouTubeはユーザーがお気に入りのコンテンツを見逃さないようにすることに関心がない
  • yt-dlpを使ってシンプルなアプリを作ろうかと考えている

    • サーバーでホストする必要はないと思う
    • 代替があるのか気になる
  • Jellyfinと連携するインターフェースがあるとよい

    • YouTubeを検索してyt-dlpでダウンロードし、その後広告なしでJellyfin経由でストリーミングできる
  • YouTubeのミラーリングツールがたくさんあるのは不思議

    • なぜ動画をダウンロード/アーカイブするのか気になる
    • 動画が削除された場合に備えてアーカイブするのは良いが、個人的にはめったに起きない
    • 動画を見た後にもう一度見る必要はないと思う
  • yt-dlpベースのサーバーが、PiHoleのようにシンプルなイメージャーとフロントエンドのクライアントアプリとしてパッケージ化されれば人気が出るかもしれない

    • Raspberry Piを購入し、microSDカードをイメージ化して、お気に入りのYTチャンネルを選び、クライアントアプリをインストールすれば、ローカルで広告なしのYTコンテンツを利用できる
  • TubeSyncを使っている

    • シンプルな機能と多くのバグにもかかわらず、十分うまく動作している
    • チャンネルやプレイリストを購読し、動画を指定パスにダウンロードし、1日に1回新しいコンテンツを確認する
    • 必要なのはチャンネル設定のためのUXだけ
    • ファイルを保存して、あとはPlexに処理させている
    • もっと良い選択肢があるのか気になる
  • Cobalt.toolsを使っている

    • 満足している
  • プレイリストに追加した動画をダウンロードして、共有Plexサーバーに保存している

    • 主にコンサート動画やスケートパートをアーカイブしている
  • 関連ツールとしてYark: YouTube Archiver with Offline UIがある