一个 Windows 交互式 yt-dlp 下载脚本。双击启动后会自动检查 yt-dlp 更新,然后让你粘贴视频或直播链接,按视频编码列出可比较的高分辨率档位、帧率、HDR/SDR 和码率,方便选择下载格式。
Start-Interactive-YTDLP.bat:双击启动入口。interactive-yt-dlp.ps1:主要交互逻辑。yt-dlp.exe:建议放在本目录,或加入系统PATH;如果两处都找不到,脚本会自动下载到本目录。chrome-extension\/edge-extension\:浏览器扩展源码,分别用于 Chrome 和 Edge。Register-Chrome-Bridge.bat/Register-Edge-Bridge.bat:双击注册浏览器 Native Host。ffmpeg.exe/ffprobe.exe:用于合并、转封装、字幕转换和嵌入;如果缺失,脚本会自动下载到本目录。Output\:默认下载输出目录,启动后可以改为其他目录。
- Windows
- Windows 自带 PowerShell,或 PowerShell 7
pwsh.exe
- 可选:将
yt-dlp.exe放在本目录,或加入系统PATH;如果没有,脚本启动时会自动下载。 - 可选:将
ffmpeg.exe和ffprobe.exe放在本目录,或确保它们已经加入PATH;如果没有,脚本启动时会自动下载。 - 双击
Start-Interactive-YTDLP.bat。 - 启动后脚本会先运行
yt-dlp -U自动检查并更新。 - 设置输出目录。
- 选择是否使用 Chrome cookies,默认是
Y。 - 粘贴视频或直播链接。
- 在列出的格式中选择视频、音频、字幕和封装格式。
下载完成后文件会保存到启动时选择的输出目录,默认是 Output\。
启动后脚本会询问输出目录:
- 直接回车或输入
1:使用默认Output\ - 输入
2:再输入自定义路径 - 也可以直接粘贴路径
相对路径会按脚本所在目录解析,路径不存在时会自动创建。
本工具附带 Chrome 和 Edge 扩展,可以从当前网页直接唤起本地下载脚本,并把当前站点相关 cookies 导出为 Netscape cookie 文件传给 yt-dlp。这样不需要 yt-dlp 直接复制浏览器 cookie 数据库,也能读取 HttpOnly cookie。
- 双击本目录下的
Register-Chrome-Bridge.bat。 - 脚本会把
chrome-extension文件夹路径复制到剪贴板。 - 手动打开
chrome://extensions。 - 在 Chrome 扩展页开启右上角
Developer mode。 - 点击
Load unpacked,选择本目录下的chrome-extension文件夹。 - 在扩展卡片上复制扩展 ID,粘贴回脚本窗口并回车。
也可以手动运行:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Install-Chrome-Bridge.ps1- 双击本目录下的
Register-Edge-Bridge.bat。 - 脚本会把
edge-extension文件夹路径复制到剪贴板。 - 手动打开
edge://extensions。 - 在 Edge 扩展页开启左侧
Developer mode。 - 点击
Load unpacked,选择本目录下的edge-extension文件夹。 - 在扩展卡片上复制扩展 ID,粘贴回脚本窗口并回车。
也可以手动运行:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\Install-Edge-Bridge.ps1- 点击 Chrome 或 Edge 工具栏里的
yt-dlp-win-script扩展按钮。 - 或在页面/链接/视频上右键,选择
Send to yt-dlp。
扩展会把当前 URL 和 cookies 发给本地 Native Host。Native Host 会:
- 保存 cookies 到
chrome-helper\cookies\chrome-cookies-*.txt - 打开一个新的 PowerShell 窗口
- 自动把网页 URL 传给
interactive-yt-dlp.ps1 - 自动使用刚导出的 cookie 文件
如果扩展提示无法连接 Native Host,通常是扩展 ID 没有注册,或扩展重新加载后 ID 变了。重新复制对应浏览器的扩展 ID,再双击对应的注册脚本即可。
如果以后移动了整个工具目录,也需要在新目录重新注册 Native Host 路径。例如移动到 D:\Tools\yt-dlp 后运行:
双击 D:\Tools\yt-dlp\Register-Chrome-Bridge.bat
双击 D:\Tools\yt-dlp\Register-Edge-Bridge.bat
建议整体移动目录,保持 yt-dlp.exe、interactive-yt-dlp.ps1、chrome-helper、chrome-extension、edge-extension 在同一个主目录里。
说明:浏览器对本地 unpacked 扩展有安全限制,普通脚本通常不能完全静默自动安装并拿到扩展 ID;这里的注册脚本会复制扩展文件夹路径,最后只需要手动加载扩展并粘贴一次 ID。
脚本会读取 yt-dlp 的 JSON 元数据,并先找出每种视频编码自己的最高分辨率。列表只显示这些最高分辨率形成的可比较档位:如果某种编码最高只有 1080p,而另一种编码有 2160p,那么 2160p 会显示,同时 1080p 档位下其他编码也会显示。相同编码和相同分辨率下,不同 FPS、HDR/SDR 会分别列出;完全相同档位则保留码率最高的格式。
示例:
1. av1 2160p 60fps HDR 12000.0 kbps id=701 ext=mp4 video-only
2. av1 1080p 60fps SDR 3200.0 kbps id=399 ext=mp4 video-only
3. av1 1080p 30fps HDR 3600.0 kbps id=699 ext=mp4 video-only
4. avc/h264 1080p 30fps SDR 2800.0 kbps id=137 ext=mp4 video-only
5. vp9 1080p 60fps SDR 3000.0 kbps id=248 ext=webm video-only
码率优先使用 yt-dlp 提供的 vbr / tbr,如果没有则用文件大小和时长估算。
音频会按“编码 + 语言”分组,列出每组中码率最高的格式。
可以选择:
- 单独音频流,例如
opus、aac - 如果视频格式本身已经带音频,也可以选择
0不额外合并音频
字幕支持多选:
- 输入
1,3-5选择多个字幕 - 输入
all选择全部字幕 - 直接回车表示不下载字幕
脚本会做两件事:
- 保存一份源格式字幕副本。
- 主下载时尝试转换为
srt并嵌入视频。
注意:MP4 对内嵌 SRT 的支持有限,ffmpeg/容器可能会转为 MP4 兼容字幕轨。如果你希望字幕封装更稳,推荐选择 mkv。
下载时可以选择:
1:mkv2:mp4
直接回车默认选择 mkv。如果习惯输入文字,也仍然可以输入 mkv 或 mp4。
推荐:
- 需要多字幕、保留更多轨道信息:选
mkv - 需要更广泛播放器兼容:选
mp4
脚本支持 --cookies-from-browser chrome,用于下载需要登录状态的视频。
如果出现:
ERROR: Could not copy Chrome cookie database
脚本会提示你关闭 Chrome 后重试。如果仍然失败,会自动改为不使用 Chrome cookies 继续读取元数据。
常见处理方式:
- 完全退出 Chrome,包括后台进程。
- 关闭正在使用同一 Chrome 用户配置的浏览器窗口。
- 如果视频不需要登录,直接选择不用 cookies。
脚本会读取 Windows 手动代理设置,并传给 yt-dlp 的 --proxy。
如果系统没有启用手动代理,脚本会直接使用 yt-dlp 默认网络行为。
如果 yt-dlp 元数据中的直播状态明确为 is_live 或 is_upcoming,脚本会询问是否使用:
--live-from-start
选择 Y 时,yt-dlp 会尝试从直播开始处下载。是否成功取决于网站是否提供回看/直播缓存。
如果直播还没开始,YouTube 可能会让元数据读取失败并提示类似:
This live event will begin in 17 hours.
脚本会识别这个提示,询问是否进入等待模式。进入等待前会提前选择封装格式、--live-from-start 和抗中断模式,所以到点后可以无人值守自动开下。注意 17 hours 这类时间只是粗略估计,不会被当作精确开播时间。选择 Y 后,脚本会显示倒计时并周期性重新读取元数据来校准:大于 6 小时每 1 小时检查一次,1 到 6 小时每 15 分钟检查一次,15 到 60 分钟每 5 分钟检查一次;离估计开播时间进入 15 分钟内时,会立即交给 yt-dlp 等待模式,并额外传入:
--wait-for-video 5-15
这样如果平台实际开播时间早于或晚于粗略提示,yt-dlp 会以 5-15 秒间隔继续等待并尽快开始。因为未开播直播通常拿不到格式列表,所以等待模式会自动选择最高码率的视频流和最高码率的音频流:
-f bestvideo+bestaudio/best --format-sort-force --format-sort vbr,abr,tbr
其中 vbr 优先选择最高视频码率,abr 优先选择最高音频码率,tbr 用于码率信息不完整时兜底。
检测到直播后,脚本还会询问是否开启抗中断模式,默认开启。开启后会追加这些保护:
--retries infinite--fragment-retries 6,避免直播结束后的 404 分片无限重试--file-access-retries infinite--extractor-retries infinite--retry-sleep指数退避等待--continue--downloader dash,m3u8:native,强制 HLS/DASH 用 yt-dlp 原生下载器,避免 ffmpeg 在直播结束后一直轮询播放列表--keep-fragments
如果 yt-dlp 在直播下载中异常退出,脚本会先重新读取一次元数据检查直播是否已经结束。若直播仍在进行,会立即自动重新启动同一个下载命令,最多重试 30 次;若直播已经结束,则停止重启,让已下载内容进入收尾/封装流程。
重要限制:这些措施可以尽量扛住短暂断网、分片超时、临时读取失败和 yt-dlp 异常退出,并避免直播结束后追着不存在的分片无限重试,但不能补回已经超出直播 DVR 窗口、平台已经移除、或从未成功下载到本机的片段。直播很重要时,不要删除 .part、.ytdl、.frag、.ts 等临时文件;最终封装失败时,这些文件可能还能手动抢救。
脚本不是完整显示 yt-dlp -F 的所有格式,而是只显示各编码最高分辨率形成的可比较档位,并保留同分辨率下不同 FPS、HDR/SDR 的版本。低于这些档位的普通分辨率会被隐藏。
有些网站不提供码率、大小或时长信息,脚本无法估算时会显示 unknown。
MP4 容器对字幕格式限制较多。需要多语言字幕或更完整保留字幕轨时,优先使用 MKV。
脚本启动时会尝试 yt-dlp -U,如果网络或权限导致更新失败,会显示警告并继续下载流程。