You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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参数实现。

  1. 编写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
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:05:01