6 คะแนน โดย GN⁺ 2024-07-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • ยกเลิกการบิลด์ ARM 32 บิต

    • Node เวอร์ชันใหม่ไม่รองรับ ARM 32 บิต
    • จำเป็นต้องย้ายไปใช้ OS แบบ 64 บิตเนื่องจากการอัปเดตความปลอดภัยและปัญหาการพึ่งพา
  • แนะนำ MeTube

    • เว็บ GUI ของ youtube-dl (ใช้ฟอร์ก 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: ID ผู้ใช้ที่ MeTube จะรันด้วย (ค่าเริ่มต้น: 1000)
  • GID: ID กลุ่มที่ MeTube จะรันด้วย (ค่าเริ่มต้น: 1000)
  • UMASK: ค่า umask (ค่าเริ่มต้น: 022)
  • DEFAULT_THEME: ธีมเริ่มต้น (light, dark, auto, ค่าเริ่มต้น: 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: พาธฐานของเว็บเซิร์ฟเวอร์ (ค่าเริ่มต้น: /)
  • PUBLIC_HOST_URL: URL ฐานของลิงก์ดาวน์โหลดที่แสดงใน UI
  • 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: พาธไฟล์ JSON สำหรับเติมค่า YTDL_OPTIONS

ใช้คุกกี้ของเบราว์เซอร์

  • เพิ่มใน docker-compose.yml

    volumes:
      - /path/to/cookies:/cookies
    environment:
      - YTDL_OPTIONS={"cookiefile":"/cookies/cookies.txt"}
    
  • ติดตั้งส่วนขยายสำหรับดึงคุกกี้

    • Firefox
    • Chrome

ส่วนขยายเบราว์เซอร์

  • Chrome: ติดตั้งได้จาก Google Chrome Webstore
  • Firefox: ติดตั้งได้จาก Firefox Addons

คำสั่งลัด iOS

  • คำสั่งลัด iOS: ส่ง URL จาก Safari ไปยัง MeTube
  • ต้องกรอกที่อยู่เซิร์ฟเวอร์และพอร์ต

ความเข้ากันได้กับ iOS

  • ข้อกำหนดของไฟล์วิดีโอสำหรับ iOS: ต้องใช้วิดีโอ codec h264 หรือ h265 และเสียง codec aac
  • เมื่อดาวน์โหลดเป็นรูปแบบ MP4 สามารถเลือกตัวเลือก "Best (iOS)" ได้

Bookmarklet

  • Bookmarklet สำหรับ Chrome: ส่งหน้าเว็บที่เปิดอยู่ในปัจจุบันไปยัง MeTube
  • หากใช้บนหน้า HTTPS ต้องมี HTTPS reverse proxy

รันหลัง reverse proxy

  • ตัวอย่างการตั้งค่า 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

  • nightly build อัตโนมัติ: หากมี yt-dlp เวอร์ชันใหม่ ระบบจะบิลด์และอัปเดต Docker image อัตโนมัติ
  • แนะนำให้ติดตั้งและตั้งค่า watchtower

การแก้ปัญหาและการส่ง issue

  • MeTube เป็น UI ของ yt-dlp: ปัญหาที่เกี่ยวข้องกับ 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 image ในเครื่อง

    docker build -t metube .
    

บันทึกสำหรับนักพัฒนา

  • ทำงานได้บน Windows, macOS, Linux
  • เมื่อรันเซิร์ฟเวอร์ใน VSCode โฟลเดอร์ดาวน์โหลดคือโฟลเดอร์ Downloads ของผู้ใช้

สรุปของ GN⁺

  • MeTube เป็นเว็บ GUI ของ youtube-dl ที่ให้ดาวน์โหลดวิดีโอจากหลายเว็บไซต์ได้
  • สามารถดีพลอยและตั้งค่าได้ง่ายด้วย Docker และปรับแต่งได้ผ่านตัวแปรสภาพแวดล้อมหลากหลาย
  • ดาวน์โหลดวิดีโอได้สะดวกผ่านส่วนขยายเบราว์เซอร์และคำสั่งลัด iOS
  • อัปเดตเป็น yt-dlp เวอร์ชันล่าสุดโดยอัตโนมัติเพื่อให้ทันสมัยอยู่เสมอ
  • โปรเจกต์ที่มีฟังก์ชันคล้ายกัน ได้แก่ JDownloader, Video DownloadHelper เป็นต้น

1 ความคิดเห็น

 
GN⁺ 2024-07-30
ความคิดเห็นจาก Hacker News
  • Tube Archivist มีประโยชน์สำหรับการเก็บถาวรและทำดัชนีช่องสายเทคนิค

    • มีความสามารถค้นหาแบบ full-text และ metadata ขั้นสูง
    • ให้ฟังก์ชันค้นหาที่ดีกว่า Alphabet มาก
  • ต้องการฟังก์ชันคล้าย YouTube TiVo

    • ไม่อยากพลาด 100 ช่องที่ดูเป็นประจำ
    • ต้องมีฟีดแบบจัดลำดับความสำคัญ
    • ถ้าดาวน์โหลดและดูผ่าน DLNA ได้ก็ยิ่งดี
    • YouTube ไม่ได้สนใจเรื่องทำให้ผู้ใช้ไม่พลาดคอนเทนต์ที่ชอบ
  • กำลังคิดจะทำแอปง่าย ๆ โดยใช้ yt-dlp

    • คิดว่าไม่น่าจำเป็นต้องโฮสต์บนเซิร์ฟเวอร์
    • สงสัยว่ามีทางเลือกอื่นไหม
  • ถ้ามีอินเทอร์เฟซที่เชื่อมกับ Jellyfin ได้ก็น่าจะดี

    • ค้นหา YouTube แล้วดาวน์โหลดด้วย yt-dlp จากนั้นสตรีมผ่าน Jellyfin แบบไม่มีโฆษณาได้
  • แปลกใจที่มีเครื่องมือสำหรับ mirror YouTube มากมาย

    • สงสัยว่าทำไมถึงต้องดาวน์โหลด/เก็บถาวรวิดีโอ
    • การเก็บถาวรไว้เผื่อวิดีโอถูกลบนั้นก็ดี แต่ส่วนตัวคิดว่าเกิดขึ้นไม่บ่อย
    • คิดว่าพอดูวิดีโอแล้วก็มักไม่จำเป็นต้องกลับมาดูอีก
  • ถ้าเซิร์ฟเวอร์ที่อิง yt-dlp ถูกแพ็กให้เป็นอิมเมจและแอปไคลเอนต์ฝั่งหน้าใช้งานง่ายแบบ PiHole ก็น่าจะได้รับความนิยม

    • ซื้อ Raspberry Pi แล้วเขียนอิมเมจลง microSD card จากนั้นเลือกช่อง YT ที่ชอบและติดตั้งแอปไคลเอนต์ ก็จะใช้งานคอนเทนต์ YT แบบไม่มีโฆษณาในเครื่องได้
  • กำลังใช้ TubeSync อยู่

    • แม้ฟังก์ชันจะเรียบง่ายและมีบั๊กเยอะ แต่ก็ทำงานได้ดีพอ
    • สมัครติดตามช่องหรือเพลย์ลิสต์ ดาวน์โหลดวิดีโอไปยังพาธ และเช็กคอนเทนต์ใหม่วันละครั้ง
    • ต้องการแค่ UX สำหรับตั้งค่าช่อง
    • เก็บไฟล์ไว้แล้วให้ Plex จัดการที่เหลือ
    • สงสัยว่ามีตัวเลือกที่ดีกว่านี้ไหม
  • กำลังใช้ Cobalt.tools

    • พอใจดี
  • ดาวน์โหลดวิดีโอที่เพิ่มไว้ในเพลย์ลิสต์แล้วเก็บไว้บนเซิร์ฟเวอร์ Plex ที่แชร์กัน

    • ส่วนใหญ่เก็บถาวรวิดีโอคอนเสิร์ตและคลิปสเก็ต
  • เครื่องมือที่เกี่ยวข้องอีกตัวคือ Yark: YouTube Archiver with Offline UI