yt-dlp 搭配 web ui 的折腾记录


之前写过一篇配合 jellyfin 和 yt-dlp 下视频到威联通 NAS,用起来还是麻烦了点,这次总算找到个趁手的 yt-dlp web 管理工具,记录下来分享下。

安装

首先是安装 ffmpeg 和 yt-dlp,后者建议选 nightly 版本,放到~/.local/bin/目录给执行权限。创建~/.config/yt-dlp文件夹,写入config文件:

# yt cookies
--cookies /home/xxx/.config/yt-dlp/cookies.txt

# Use this proxy, 仅国内网络环境需要
--proxy 127.0.0.1:3128

release 页下载对应处理器版本的执行文件同样放到~/.local/bin/,在~/.config/yt-dlp文件夹下写入webconfig文件:

port: 8989
downloadPath: /home/xxx/Multimedia
require_auth: true
username: xxx
password: xxxxxx
downloaderPath: /home/xxx/.local/bin/yt-dlp
session_file_path: /home/xxx/.config/yt-dlp
enable_file_logging: false
log_path: /home/xxx/.config/yt-dlp/webui.log
local_database_path: /home/xxx/.config/yt-dlp/webui.db

然后是配置系统服务,在/etc/systemd/system/yt-dlp-webui.service写入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=yt-dlp-webui service file
After=network.target

[Service]
User=xxx
Group=xxx
WorkingDirectory=/home/xxx/.config/yt-dlp
ExecStart=/home/xxx/.local/bin/yt-dlp-webui --conf /home/xxx/.config/yt-dlp/webconfig
RestartSec=10
Restart=on-failure

[Install]
WantedBy=multi-user.target

最后 enable + start,就可以开机自启动了。

设置

由于 youtube 逐步限制 cookies 的可用性,正常浏览获取的 cookies 在很短的时间内会失效,要想持久化需要这样获取:
安装Save private window cookies扩展,在浏览器隐私模式打开youtube.com并登录账号,最好是不常用的账号。关闭 youtube 页面(注意不要关闭窗口),从扩展导出 cookies.json,如下图

导出json格式

使用 python 脚本从 json 转换为 Netscape 格式,如果你不在意隐私的话也可以搜搜在线转换服务:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import json

data = json.loads(open('cookies.json', 'r').read())
write = open('saved', 'w')
write.write("# Netscape HTTP Cookie File\n# https://curl.haxx.se/docs/http-cookies.html\n# This file was generated by libcurl! Edit at your own risk.\n\n")

def boolToString(s):
if s:
return "TRUE"
else:
return "FALSE"

def checkTailMatch(s):
if s[0] == ".":
return "TRUE"
return "FALSE"

for x in data:
if x["httpOnly"]:
write.write("#HttpOnly_")
write.write(x["domain"] + '\t' + checkTailMatch(x["domain"]) + '\t' + x["path"] + '\t' + boolToString(x["secure"]) + '\t' + "0" + '\t' + x["name"] + '\t' + x["value"] + '\n')

然后从设置页面导入,如下图。建议全部导入,只导入.youtube.com域的条目可能也行。

粘贴自动上传

导入后默认保存在~/.config/yt-dlp文件夹,也就是直接执行命令行也是调用这个。这时 yt-dlp 和 bin 文件夹大搞长这个样子:

程序和配置文件

新版 yt-dlp 还有一个不使用 cookie 方法,那就是 OAuth,从2024.10.22版本开始支持。后面 cookies 方法彻底失效的话,这个就是替代方式。

另外一个值得设置的就是模板编辑器,从首页右下角的 FAB 按钮进入,可以自己预设一些参数模板,比如只下载音频,同时下载字幕,只下载 mp4 格式等等。当然,你也可以打开设置中的启用自定义 yt-dlp 参数

参数模板

至此,YDWU 满足了我远程使用 yt-dlp 的全部需求。

其他问题

一开始下载字幕总是失败,去提 issue 得到的反馈是不能重现,感觉应该是 cookie 的问题,换个账号再获取一次就正常了。