前言
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'"
官方文档
其它常用参数
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)
## 参考文献