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

yt-dlp Python调用返回无效format_id及格式选择异常问题

yt-dlp格式筛选常见问题解答

1. 为何返回不存在的format_id?

  • 最常见的原因是虚拟格式ID:yt-dlp中的bv/ba是虚拟复合格式标识,并非视频平台返回的原始格式ID。当你直接使用这类虚拟ID时,若yt-dlp的格式拼接逻辑出错,就会出现ID不存在的报错。
  • 视频格式动态变化:获取格式信息和发起下载的间隙,视频上传者可能删除了对应格式,或是地区版权限制导致该格式实际不可用,而yt-dlp的缓存信息未同步更新。
  • 部分平台的动态生成格式:比如直播回放的部分格式,仅在触发下载请求时才会生成有效链接,提前获取的format_id自然无效。

2. 如何确保只选择可下载的有效格式?

  • 放弃虚拟格式,直接筛选原始格式:用具体属性组合筛选,比如bestvideo[height=1440][ext=mp4][has_video=True],精准锁定有实际下载链接的视频格式。
  • Python调用时做前置校验:通过extract_info(download=False)获取完整格式列表,遍历检查每个格式的url是否存在、filesize是否非空,排除无有效下载路径的格式。
  • 开启格式校验:下载时添加--check-formats参数,让yt-dlp自动验证格式可用性,跳过无效项。
  • 禁用缓存:加上--no-cache-dir,避免使用过期的格式信息。

3. 为何bv[height=1440]选不到最高码率格式?

  • yt-dlp默认排序规则不是按码率优先级,而是按格式ID数值或平台默认顺序。比如格式400的ID比308大,默认会优先选中ID更大的,哪怕它码率更低。
  • 解决方法很简单:在筛选表达式末尾追加+br,即使用bv[height=1440]+br,强制yt-dlp按码率(bitrate)从高到低排序,自动选中该分辨率下码率最高的格式。
  • 补充:如果目标视频包含HDR格式,可额外添加[hdr=0]或[hdr=1]来精准筛选,避免HDR格式干扰普通格式的排序逻辑。

内容的提问来源于stack exchange,提问作者Kariyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:52:38