前言

Github

安装

openwrt

opkg install yt-dlp

其他系统

1
2
brew install yt-dlp
pip3 install yt-dlp

yt-dlp

建议pip安装,apt会缺包
youtube下载神器

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 查看有哪些分辨率
https://www.youtube.com/watch?v=ukQ9YiTd2E8&ab_channel=AIbeauty666

yt-dlp -F https://www.youtube.com/watch?v=kNU2WCHVVBk

# 1.只下载音频
# 找m4a格式,列表越靠后越清晰。比如ID:140 | EXT:m4a | audio only
yt-dlp -f140 https://www.youtube.com/watch?v=kNU2WCHVVBk

# 2.下载音频转换成mp3(加上-x --audio-format参数)
yt-dlp -f140 -x --audio-format mp3 https://www.youtube.com/watch?v=kNU2WCHVVBk

# 3.下载视频(带音频)ID:22 | EXT:mp4 | 1280*720
yt-dlp -f22 https://www.youtube.com/watch?v=kNU2WCHVVBk

# 4.下载指定分辨率视频+音频(为了方便就直接下载mp4格式了)
# 1080及以上分辨率的音频和视频是分开的,所以一般会音频和视频一起下载
yt-dlp -f299+140 https://www.youtube.com/watch?v=kNU2WCHVVBk

# 5.(通用)下载最佳mp4视频+最佳m4a音频格式并合成mp4
yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --embed-metadata --merge-output-format mp4 https://www.youtube.com/watch?v=kNU2WCHVVBk

# 6.指定文件名下载(用-o参数)
# 默认下载的文件格式是:title+空格+[id].格式,比如***** [kNU2WCHVVBk].mp4
# 文件名只要标题,不要id,加上 -o '%(title)s.mp4'
yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --embed-metadata --merge-output-format mp4 https://www.youtube.com/watch?v=kNU2WCHVVBk -o '%(title)s.mp4'

# example
yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --embed-metadata --merge-output-format mp4 -o /mnt/sda1/Documents/Downloads/youtube/'%(title)s.mp4' https://www.youtube.com/watch?v=kNU2WCHVVBk'



alias ytd="yt-dlp"
alias ytdF="yt-dlp -F"
alias ytdf="yt-dlp -o /mnt/sda1/Documents/Downloads/youtube/'%(title)s.mp4'"
alias ytdl="yt-dlp -f 'bv[ext=mp4]+ba[ext=m4a]' --embed-metadata --merge-output-format mp4 -o /mnt/sda1/Documents/Downloads/youtube/'%(title)s.mp4'"

官方文档

其它常用参数

  • –list-subs : 列出所有字幕

yt-dlp --list-subs https://www.youtube.com/watch?v=teEYWtu1FRs&ab_channel=12KScenicRelaxation

  • –sub-format src : 下載的字幕格式,如果原影片沒有指定的字幕格式會去下載其他格式的字幕,
  • –sub-lang zh-Hans:選擇要下載的字幕語言,用逗號分隔,例如:zh_cn,ja

–sub-format src --sub-lang zh-Hans

配合axel

yt-dlp --downloader axel --downloader-args axel:"-a -n 4" https://www.youtube.com/watch?v=zEhCwDl0KD0&ab_channel=%E7%91%9F%E7%91%9F%E5%8F%91%E6%8A%96%E5%B0%8F%E9%9F%AD%E8%8F%9C

配合Aria2

yt-dlp:轻松下载各平台视频,缓存视频又一途径

1
yt-dlp --external-downloader aria2c --downloader-args aria2c:"-x 8 -k 1M" https://www.youtube.com/watch?v=H7I-qKOrlsM&ab_channel=AI%EC%A7%A4%ED%8C%8C%EA%B3%A0

8线程、分片(每分1M,且视频支持分片下载,否则不生效)

yt-dlp-web-ui

Github

docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
docker pull marcobaobao/yt-dlp-webui
# or
# docker pull marcobaobao/yt-dlp-webui:latest
# 不支持arm平台

# openwrt
## 不成功
docker pull marcobaobao/yt-dlp-webui
docker run -d --restart=always \
--name=yt-dlp-webui --network=host \
-p 3033:3033 \
-v /mnt/sda1/Documents/Downloads/youtube:/downloads \
marcobaobao/yt-dlp-webui
# Mac
docker run -d -p 3033:3033 \
--name=yt-dlp-webui \
-v /Volumes/HFS/000-Documents/004-Videos/11-youtube:/downloads \
marcobaobao/yt-dlp-webui

手动安装

测试存在跨域问题,没解决

  • 下载对应可执行文件到指定目录下,比如/mnt/sda1/opt/yt-dlp-web-ui/yt-dlp-webui_linux-arm64-V2.0.6,添加执行权限chmod 777 ./yt-dlp-webui_linux-arm64-V2.0.6
  • 添加开机启动任务脚本/etc/init.d/yt-dlp-webui,并添加可执行权限chmod 777 /etc/init.d/yt-dlp-webui
  • 创建软连接ln -s /etc/init.d/yt-dlp-webui /usr/bin/yt-dlp-webui
nohup后台执行
  • 可以直接在/etc/rc.local文件添加启动命令sh /mnt/sda1/opt/yt-dlp-web-ui/start.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh /etc/rc.common

START=99
NAME=yt-dlp-webui

start(){
echo "Starting......"
/mnt/sda1/opt/yt-dlp-web-ui/yt-dlp-webui_linux-arm64-V2.0.6 --conf /mnt/sda1/opt/yt-dlp-web-ui/config.yaml
}
stop(){
/mnt/sda1/opt/yt-dlp-web-ui/yt-dlp-webui_linux-arm64-V2.0.6 -s
echo "Stop Succeed!"
}
restart(){
/mnt/sda1/opt/yt-dlp-web-ui/yt-dlp-webui_linux-arm64-V2.0.6 restart
echo "Restart Succeed!"
}

或者自启动脚本写法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh /etc/rc.common

START=99 # 执行的顺序,按照字符串顺序排序并不是数字排序
STOP=15
SERVICE=yt-dlp-webui
PROG=/mnt/sda1/opt/yt-dlp-web-ui/yt-dlp-webui_linux-arm64-V2.0.6
USE_PROCD=1 # 使用procd启动

# start_service 函数必须要重新定义
start_service()
{
echo service yt-dlp-webui start
procd_open_instance # 创建一个实例, 在 procd 看来一个应用程序可以多个实例
# ubus call service list 可以查看实例
procd_set_param command $PROG --conf /mnt/sda1/opt/yt-dlp-web-ui/config.yaml# mycode执行的命令是"/app/mycode", 若后面有参数可以直接在后面加上
procd_set_param respawn # 定义respawn参数,告知procd当mycode程序退出后尝试进行重启
# procd_close_instance # 关闭实例
}

config.yaml文件如下

1
2
3
4
---
port: 3033
downloadPath: /mnt/sda1/Documents/Downloads/youtube/
downloaderPath: /usr/bin/yt-dlp
  • 给脚本
    命令说明文档
-conf string
    yt-dlp-WebUI config file path
-driver string
    yt-dlp executable path (default "yt-dlp")
-out string
    Directory where files will be saved (default ".")
-port int
    Port where server will listen at (default 3033)

## 参考文献