ytdlp Sever is a API Endpoint for launch yt-dlp on your network.
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-composedocker-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ショートカットなどを作成すると楽に操作できる。
| option | type | description |
|---|---|---|
| url | string | yt-dlp でダウンロードする動画URL |
| options | string | yt-dlp コマンドラインに利用するオプション |
| savedir | string | 指定した場合、サブディレクトリを作成して動画を保存する |
すべてのオプションはyt-dlpのオプションに準じる。よくある設定は以下。
-
Youtubeの動画音声がローカライズされない:
extractor-argsにyoutube:lang=jaなどを設定する。- 備考: yt-dlp/yt-dlp#387 (comment)
-
ファイル名が文字化けする
--windows-filenamesオプションを付与する
-
ログインが必要
-u <ユーザ名> -p <パスワード>オプションを付与する。
-
フォーマットが意図通りにならない(webbmなど)
--merge-output-format mp4などで固定する
-
再ダウンロード(同ディレクトリへ同じファイルをダウンロード)できない
--force-overwritesを設定する
適当なLinuxサーバを構築し、アクセスできるようにしておく
ここでは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をインストールする
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 --versionubuntu@devsv:~/git/ytdlpServer
>> docker-compose --version
Docker Compose version v2.4.1
NASなどを利用している場合は、Sambaをマウントする
sudo apt install cifs-utils
sudo mkdir -p /mnt/videoSambaの接続に認証が必要な場合、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 -adocker-composeで以下でビルドを行う
docker-compose builddocker-compose.ymlのvolumesに動画のダウンロード先を記載する。
docker-composeにおいては<ホスト側>:<コンテナ側>で設定する。
以下はサーバの/mnt/videoに動画をダウンロードする例
worker:
build: ./workerServer
...
volumes:
- /mnt/video:/downloadytdlp Serverを起動する。
## set scale of workers.
docker-compose up -d --scale worker=4
## show log
docker-compose logs -fHTTPS対応が不要な場合は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: alwayshttp://<IPアドレス>:5540にアクセスするとRedis Insightからキューを確認できる。
