如何让yt-dlp在保留归档防重时重新下载更高质量视频?
解决yt-dlp下载高清更新版同时避免删后重下的问题
方法1:自定义归档格式,同时记录视频ID和分辨率
yt-dlp的--archive-format参数可自定义归档文件的条目格式,默认仅记录视频ID。我们可以修改格式,把视频ID和分辨率绑定,这样同一个视频的不同分辨率版本会被归档为独立条目,既不会重下已删除的视频,又能触发更高分辨率版本的下载。
修改后的完整命令:
yt-dlp --continue --no-overwrites --ignore-errors \ --download-archive archive.txt \ --archive-format "%(id)s-%(resolution)s" \ -o "%(channel)s [%(channel_id)s] -- %(title)s-[%(id)s] [%(resolution)s].%(ext)s" \ $CHANNELS
效果说明:
- 当视频的高清版本上线后,yt-dlp检测到
视频ID-高清分辨率不在归档中,会自动下载高清版,不会干扰已归档的低清条目。 - 若手动删除低清视频文件,由于归档里仍有
视频ID-低清分辨率的条目,不会重新下载低清版,完全符合你“删除视频后不重下”的需求。 - 仅当你删除高清文件时,才会触发高清版的重下,属于你可接受的少量重下场景。
方法2:用预处理脚本精细控制下载逻辑
如果需要更灵活的判断(比如只在本地无更高分辨率文件时才下载),可以编写预处理脚本配合--pre-download-script参数实现。
- 编写bash脚本
check_resolution.sh(需赋予执行权限:chmod +x check_resolution.sh):
#!/bin/bash # 获取当前视频的最高可用分辨率 MAX_RES=$(yt-dlp --get-filename -o "%(resolution)s" "$YTDLP_URL" | sort -r | head -n1) # 查找本地是否已有该视频的文件(排除最高分辨率,避免误判) LOCAL_FILE=$(find . -name "*[$YTDLP_ID]*" | grep -v "$MAX_RES") if [ -z "$LOCAL_FILE" ]; then # 本地无更高分辨率文件,允许下载 exit 0 else # 已有更高分辨率文件,跳过当前下载 exit 1 fi
- 修改yt-dlp命令调用脚本:
yt-dlp --continue --no-overwrites --ignore-errors \ --download-archive archive.txt \ --pre-download-script check_resolution.sh \ --quality bestvideo+bestaudio/best \ -o "%(channel)s [%(channel_id)s] -- %(title)s-[%(id)s] [%(resolution)s].%(ext)s" \ $CHANNELS
效果说明:
- 脚本会先查询当前视频的最高可用分辨率,对比本地已有文件,仅当本地没有更高分辨率版本时才允许下载。
- 归档文件仍以视频ID为标识,删除视频后不会触发重下。
--quality bestvideo+bestaudio/best参数确保优先获取当前可用的最高质量组合。
内容的提问来源于stack exchange,提问作者BoppreH
相关产品推荐
相关产品推荐

