快轉到主要內容

Tube Archivist:批次下載YT影片,打造離線版YouTube

分類   Linux系統 Self-hosting自架
標籤   Yt-Dlp Youtube
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

你知道嗎,古巴以前曾經禁止人民觀看Youtube。於是在當地的黑市,商人販售含有最新Youtube影片的隨身碟給當地居民,用以滿足人們想看Youtube又沒辦法翻牆看的需求。

住在自由國家的我等,當珍惜自由觀看Youtube的權利。不過有時候Youtube的影片還是會因為各種原因從世界上消失,那麼你就需要一款Youtube影片批次下載工具。

今天分享的「Tube Archivist」軟體就是專為大量下載Youtube影片而生。

它整合了yt-dlp工具,可以批次下載Youtube影片

Tube Archivist還有簡單的網頁界面,能夠在自己的電腦建立離線版Youtube

彷彿就像看線上Youtube一樣,不只能瀏覽頻道,播放清單下面還會推薦影片。

但你可能會問說,大部分YouTube影片看過一次就不會再看了,使用這個服務的意義何在?

這裡舉幾個使用例:

  • 方便倉鼠症患者囤積與整理影片
  • 讓需要翻牆上YouTube的用戶有管道大量爬取影片
  • 保存愛po版權歌曲合集的頻道,防止優質頻道吃版權砲消失
  • 下載音樂專輯,建置離線版Youtube Music,演算法由本機程式定之
  • 建置離線版Youtube Kids,由你親自篩選過內容

1. 架設Tube Archivist
#

Tube Archivist是開源軟體,兼具下載Youtube影片與索引YouTube影片的功能,下載技術使用的是 yt-dlp,支援高速下載4K畫質的影片和自動轉檔。

至於索引部份,Tube Archivist使用Elasticsearch當作本機搜尋引擎,再加上媒體伺服器功能。

由於yt-dlp下載的影片沒有加密,你還可以將Tube Archivist的下載目錄與界面更成熟的 Jellyfin共用,並透過 Jellyfin TubeArchivist Plugin提供中繼資料給Jellyfin整理。

根據 官方文件說明,使用docker-compose架設。

  1. 安裝 Docker

  2. 新增docker-compose

mkdir ~/tubeArchivist
cd tubeArchivist
vim docker-compose.yml
  1. 填入以下內容,注意註解。本docker-compose包含三個服務:Tube Archivist、Redis、 Elasticsearch。
version: '3.5'

services:
  tubearchivist:
    container_name: tubearchivist
    restart: unless-stopped
    image: bbilly1/tubearchivist
    ports:
      - 8000:8000 # Tube Archivist網頁界面的通訊埠
    volumes:
      - media:/youtube  # 儲存影片的目錄,預設使用docker volume,可以改掛載其他目錄
      - cache:/cache
    environment:
      - ES_URL=http://archivist-es:9200     # 需要填寫http與port
      - REDIS_HOST=archivist-redis          # 不需要填http
      - HOST_UID=1000
      - HOST_GID=1000
      - TA_HOST=tubearchivist.local         # 必須修改成自己的hostname或IP
      - TA_USERNAME=tubearchivist           # 預設Tube Archivist帳號
      - TA_PASSWORD=verysecret              # 預設Tube Archivist密碼
      - ELASTIC_PASSWORD=verysecret         # Elasticsearch的密碼
      - TZ=Asia/Taipei                 # 時區
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 2m
      timeout: 10s
      retries: 3
      start_period: 30s
    depends_on:
      - archivist-es
      - archivist-redis
  archivist-redis:
    image: redis/redis-stack-server
    container_name: archivist-redis
    restart: unless-stopped
    expose:
      - "6379"
    volumes:
      - redis:/data
    depends_on:
      - archivist-es
  archivist-es:
    image: bbilly1/tubearchivist-es         # 本映像檔僅支援AMD64架構,ARM64請用 docker.io/library/elasticsearch:8.13.2
    container_name: archivist-es
    restart: unless-stopped
    environment:
      - "ELASTIC_PASSWORD=verysecret"       # 填入上述Elasticsearch的密碼
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "xpack.security.enabled=true"
      - "discovery.type=single-node"
      - "path.repo=/usr/share/elasticsearch/data/snapshot"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es:/usr/share/elasticsearch/data    # 使用bind的時候檢查權限
    expose:
      - "9200"

volumes:
  media:
  cache:
  redis:
  es:
  1. 為了防止權限錯誤,事先將儲存影片的目錄權限修改
sudo chown user:user "/影片目錄/"
  1. 啟動服務
docker compose up -d
  1. 使用瀏覽器開啟http://localhost:8000開啟網頁頁面,使用docker-compose填寫的帳密登入。

2. Tube Archivist的影片下載邏輯
#

Tube Archivist有頻道(Channel)、播放清單{Playlist)的頁面,輸入URL或者播放清單ID新增訂閱列表。

下載邏輯是這樣的:如果你直接訂閱(新增)頻道或者播放清單,則Tube Archivist會下載全部頻道內容的影片。

如果你只是想儲存特定影片,那麼推薦使用下載頁面的下載影片方式。

切到Tube Archivist的Downloads頁面。在這裡只要填入YoutTube影片或播放清單ID,再按Start Download就會開始下載影片。預設會抓最高畫質影片,你可以點Tube Archivist右上角設定,參考 yt-dlp參數調整詳細下載內容。

不論下載方式為何,Tube Archivist都會儲存影片的中繼資料,並將影片按照上傳者歸類,構成一個類似Youtube的界面。使用者可以瀏覽特定「頻道」已下載的所有影片。

實際下載的影片檔名以原始Youtube影片網址命名。而下載後檔案目錄的結構則為頻道名稱+影片名稱:

3. 使用擴充功能下載影片
#

Tube Archivist的擴充功能可以讓你看到喜歡的影片就一鍵傳給Tube Archivist下載。

  1. 點選Tube Archivist右上角設定 → User → User Management → Admin Interface → Auth Token,按Add,新增API金鑰

  2. 安裝Tube Archivist作者開發的擴充功能。 Firefox Chrome

  3. 開啟擴充功能,填入Tube Archivist的網址和API金鑰。勾選Sync Youtube cookies可以方便你下載會員限定影片。

  4. 如此一來,Youtube網頁就會出現按鈕。Subscribe是訂閱頻道,「下載」按鈕為下載單部影片。

  5. 只要一按下按鈕影片就會出現在Tube Archivist佇列。

4. 訂閱並下載整個頻道的影片
#

在channel填入Yotuube頻道的網址(播放清單同理,不過要填寫的是&list=後面的ID)

之後到downloads頁面,點選Rescan subscriptions,它就會開始抓取該頻道的全部影片。

相關文章

Piped,無廣告、支援手機背景播放、下載影片的Youtube鏡像站,可自架
分類   Linux系統 Self-hosting自架
標籤   Piped Youtube
Invidious用法:Youtube去廣告、網頁下載影片的開源前端網站,繞過禁止使用廣告攔截器
分類   Linux系統 Self-hosting自架
標籤   Invidious Youtube
Sunshine:Linux版Moonlight教學,自架免費雲端串流遊戲服務+遠端桌面
分類   Linux系統 Self-hosting自架 Linux玩遊戲
標籤   Cloud Gaming Remote Desktop Steam Linux

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請貼Imgur或Postimages。