MeTube: chương trình tải xuống YouTube tự lưu trữ
(github.com/alexta69)-
Ngừng build ARM 32-bit
- Các phiên bản Node mới không hỗ trợ ARM 32-bit
- Cần di chuyển sang HĐH 64-bit do các vấn đề về cập nhật bảo mật và phụ thuộc
-
Giới thiệu về MeTube
- GUI web của youtube-dl (sử dụng nhánh fork yt-dlp)
- Hỗ trợ tải video từ YouTube và nhiều trang web khác
Chạy bằng Docker
-
Lệnh Docker
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube -
Ví dụ 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
Cấu hình bằng biến môi trường
- UID: ID người dùng chạy MeTube (mặc định: 1000)
- GID: ID nhóm chạy MeTube (mặc định: 1000)
- UMASK: giá trị umask (mặc định: 022)
- DEFAULT_THEME: giao diện mặc định (
light,dark,auto, mặc định:auto) - DOWNLOAD_DIR: đường dẫn lưu tải xuống (mặc định:
/downloads) - AUDIO_DOWNLOAD_DIR: đường dẫn lưu tải xuống chỉ âm thanh (mặc định:
DOWNLOAD_DIR) - DOWNLOAD_DIRS_INDEXABLE: có cho phép lập chỉ mục thư mục tải xuống hay không (mặc định:
false) - CUSTOM_DIRS: có bật tải xuống vào thư mục tùy chỉnh hay không (mặc định:
true) - CREATE_CUSTOM_DIRS: có hỗ trợ tự động tạo thư mục hay không (mặc định:
true) - STATE_DIR: đường dẫn lưu tệp duy trì hàng đợi (mặc định:
/downloads/.metube) - TEMP_DIR: đường dẫn lưu tệp tải xuống tạm thời (mặc định:
/downloads) - DELETE_FILE_ON_TRASHCAN: có xóa tệp trên máy chủ khi xóa trong UI hay không (mặc định:
false) - URL_PREFIX: đường dẫn cơ sở của máy chủ web (mặc định:
/) - PUBLIC_HOST_URL: URL cơ sở của liên kết tải xuống hiển thị trong UI
- PUBLIC_HOST_AUDIO_URL: URL cơ sở của liên kết tải xuống âm thanh
- OUTPUT_TEMPLATE: mẫu tên tệp tải xuống (mặc định:
%(title)s.%(ext)s) - OUTPUT_TEMPLATE_CHAPTER: mẫu tên tệp video được chia theo chương (mặc định:
%(title)s - %(section_number)s %(section_title)s.%(ext)s) - YTDL_OPTIONS: các tùy chọn bổ sung truyền cho youtube-dl (định dạng JSON)
- YTDL_OPTIONS_FILE: đường dẫn tệp JSON dùng để điền
YTDL_OPTIONS
Sử dụng cookie trình duyệt
-
Thêm vào docker-compose.yml
volumes: - /path/to/cookies:/cookies environment: - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"} -
Cài tiện ích trích xuất cookie
- Firefox
- Chrome
Tiện ích mở rộng trình duyệt
- Chrome: có thể cài từ Google Chrome Webstore
- Firefox: có thể cài từ Firefox Addons
Phím tắt iOS
- Phím tắt iOS: gửi URL từ Safari sang MeTube
- Cần nhập địa chỉ máy chủ và cổng
Tương thích iOS
- Yêu cầu đối với tệp video trên iOS: cần codec video h264 hoặc h265 và codec âm thanh aac
- Khi tải định dạng MP4 có thể chọn tùy chọn "Best (iOS)"
Bookmarklet
- Bookmarklet cho Chrome: gửi trang web đang mở hiện tại sang MeTube
- Khi dùng trên trang HTTPS cần reverse proxy HTTPS
Chạy phía sau reverse proxy
-
Ví dụ cấu hình 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; } -
Ví dụ cấu hình 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> -
Ví dụ cấu hình Caddy
example.com { route /metube/* { uri strip_prefix metube reverse_proxy metube:8081 } }
Cập nhật yt-dlp
- Bản build nightly tự động: nếu có phiên bản yt-dlp mới thì sẽ tự động build và cập nhật image Docker
- Khuyến nghị cài và cấu hình watchtower
Khắc phục sự cố và gửi issue
- MeTube là UI của yt-dlp: không gửi các vấn đề liên quan đến yt-dlp vào dự án MeTube
- Khuyến nghị dùng trực tiếp lệnh yt-dlp: kiểm tra tùy chọn trước rồi áp dụng vào
YTDL_OPTIONS
Build và chạy cục bộ
-
Công cụ cần thiết: node.js và 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 -
Build image Docker cục bộ
docker build -t metube .
Ghi chú phát triển
- Hoạt động trên Windows, macOS, Linux
- Khi chạy máy chủ trong VSCode, thư mục tải xuống là thư mục Downloads của người dùng
Tóm tắt của GN⁺
- MeTube là GUI web của youtube-dl, cung cấp khả năng tải video từ nhiều trang web
- Có thể triển khai và cấu hình dễ dàng bằng Docker, đồng thời hỗ trợ tùy biến qua nhiều biến môi trường
- Có thể tải video thuận tiện thông qua tiện ích mở rộng trình duyệt và phím tắt iOS
- Tự động cập nhật phiên bản yt-dlp mới nhất để luôn duy trì trạng thái cập nhật
- Các dự án có chức năng tương tự gồm có JDownloader, Video DownloadHelper, v.v.
1 bình luận
Ý kiến trên Hacker News
Tube Archivist hữu ích để lưu trữ và lập chỉ mục các kênh công nghệ
Muốn có tính năng kiểu YouTube TiVo
Đang nghĩ đến việc làm một ứng dụng đơn giản bằng
yt-dlpSẽ rất hay nếu có một giao diện tích hợp với Jellyfin
yt-dlp, rồi stream qua Jellyfin mà không có quảng cáoThấy lạ khi có rất nhiều công cụ mirror YouTube
Nếu một server dựa trên
yt-dlpđược đóng gói như PiHole với image đơn giản và ứng dụng client frontend, có lẽ nó sẽ trở nên phổ biếnĐang dùng TubeSync
Đang dùng Cobalt.tools
Tải các video đã thêm vào playlist và lưu vào server Plex dùng chung
Một công cụ liên quan là Yark: YouTube Archiver with Offline UI