Skip to content

nekono-dev/ytdlpServer

Repository files navigation

ytdlp Server

ytdlp Sever is a API Endpoint for launch yt-dlp on your network.

tl;dr

Ubuntuサーバを用意して、以下を実行

sudo apt update
sudo apt install docker.io cifs-utils
sudo gpasswd --add $USER docker
newgrp docker
sudo wget https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -P /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

docker-compose.yamlのvolumesのディレクトリをカスタマイズする。 以下はsamba共有ディレクトリを/mnt/videoに設定する例

sudo mkdir -p /mnt/video
## if samba
sudo tee -a "//<your windows ipaddr>/<your sharing path>   /mnt/video   cifs  nofail,_netdev,x-systemd.automount,user=<your username>,password=<your password>,file_mode=0666,dir_mode=0777  0  0" /etc/fstab
sudo mount -a

サーバを起動する。

docker-compose up -d --scale worker=4

起動後、https://<Your Server IPaddr>/ytdlpに対してPOSTリクエストを送ると、設定したディレクトリに動画がダウンロードできる。

サーバの使い方

APIサーバに、以下のような POSTリクエストを送信する。

curl -H "Content-Type: application/json" -k -X POST "https://localhost/ytdlp" -d "{\"url\": "https://www.youtube.com/watch?v=XXXXXXXXXX", \"options\": \"--format bv*+ba/best\", \"savedir\": \"unsorted\"}

iOSショートカットなどを作成すると楽に操作できる。

image

iOS Shortcut example

API option

option type description
url string yt-dlp でダウンロードする動画URL
options string yt-dlp コマンドラインに利用するオプション
savedir string 指定した場合、サブディレクトリを作成して動画を保存する

オプションのヒント

すべてのオプションはyt-dlpのオプションに準じる。よくある設定は以下。

  • Youtubeの動画音声がローカライズされない:

  • ファイル名が文字化けする

    • --windows-filenamesオプションを付与する
  • ログインが必要

    • -u <ユーザ名> -p <パスワード>オプションを付与する。
  • フォーマットが意図通りにならない(webbmなど)

    • --merge-output-format mp4などで固定する
  • 再ダウンロード(同ディレクトリへ同じファイルをダウンロード)できない

    • --force-overwritesを設定する

セットアップ方法

前提

適当なLinuxサーバを構築し、アクセスできるようにしておく

Dockerのインストール

ここではDockerをインストールしている

sudo apt update
sudo apt install docker.io
sudo gpasswd --add $USER docker
newgrp docker
## if docker soket is down, reboot
sudo reboot

docker-composeのインストール

コンテナを狭く起動するため、docker-composeをインストールする

Launch in ubuntu 22.04 LTS.

https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/

sudo curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
ubuntu@devsv:~/git/ytdlpServer
>> docker-compose --version
Docker Compose version v2.4.1

(任意) ダウンロード先ディレクトリをマウントする

NASなどを利用している場合は、Sambaをマウントする

sudo apt install cifs-utils
sudo mkdir -p /mnt/video

Sambaの接続に認証が必要な場合、Linuxの/etc/fstabで以下のように設定できる ex. mount ¥¥192.168.3.120¥Videos, user name is samba, password is samba. add that to /etc/fstab

//192.168.3.120/Videos   /mnt/video   cifs  nofail,_netdev,x-systemd.automount,user=samba,password=samba,file_mode=0666,dir_mode=0777  0  0

または、credentialsを別ファイルで設定する

sudo mkdir -p /etc/smb-credentials/
cat << EOF | sudo tee /etc/smb-credentials/.pw
username=user
password=passwd
EOF
sudo chmod +600 /etc/smb-credentials/.pw
## edit /etc/fstab
//192.168.3.120/Videos   /mnt/video   cifs  nofail,_netdev,x-systemd.automount,credentials=/etc/smb-credentials/.pw,file_mode=0666,dir_mode=0777  0  0

/etc/fstabを作成したら、マウント操作を行う

sudo mount -a

コンテナのビルド

docker-composeで以下でビルドを行う

docker-compose build

実行

docker-compose.ymlvolumesに動画のダウンロード先を記載する。 docker-composeにおいては<ホスト側>:<コンテナ側>で設定する。

以下はサーバの/mnt/videoに動画をダウンロードする例

worker:
  build: ./workerServer
...
  volumes:
    - /mnt/video:/download

ytdlp Serverを起動する。

## set scale of workers.
docker-compose up -d --scale worker=4
## show log
docker-compose logs -f

HTTPS対応が不要な場合はapiの穴を開け、nginxをコメントアウトする。

  api:
    build: ./apiServer
    depends_on:
      - redis
    environment:
      REDIS_URL: redis://redis
      SERVER_TTL: 24
    restart: always
    ports:
      - 5000:5000
#   nginx:
#     build: ./nginx
#     depends_on:
#       - api
#     ports:
#       - 80:80
#       - 443:443
#     restart: always

キューの確認

http://<IPアドレス>:5540にアクセスするとRedis Insightからキューを確認できる。

About

yt-dlp download request execute server

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors