你知道嗎,古巴以前曾經禁止人民觀看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架設。
安裝 Docker
新增docker-compose
mkdir ~/tubeArchivist
cd tubeArchivist
vim docker-compose.yml
- 填入以下內容,注意註解。本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:
- 為了防止權限錯誤,事先將儲存影片的目錄權限修改
sudo chown user:user "/影片目錄/"
- 啟動服務
docker compose up -d
- 使用瀏覽器開啟
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下載。
點選Tube Archivist右上角設定 → User → User Management → Admin Interface → Auth Token,按Add,新增API金鑰
開啟擴充功能,填入Tube Archivist的網址和API金鑰。勾選Sync Youtube cookies可以方便你下載會員限定影片。
如此一來,Youtube網頁就會出現按鈕。Subscribe是訂閱頻道,「下載」按鈕為下載單部影片。
只要一按下按鈕影片就會出現在Tube Archivist佇列。
4. 訂閱並下載整個頻道的影片#
在channel填入Yotuube頻道的網址(播放清單同理,不過要填寫的是&list=
後面的ID)
之後到downloads頁面,點選Rescan subscriptions,它就會開始抓取該頻道的全部影片。