Cobalt 多音轨下载一个参数切换出视频配音版【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt当 YouTube 网页播放器的音频菜单里出现多条音频音轨选项时说明这个视频带有官方多语言配音但多数离线工具下载后只有默认音频配音版只能在线观看。Cobalt 多音轨下载解决的就是这个问题在 API 请求里带上dubLang参数它会替你挑出对应语言的音轨。本文会讲清这个参数背后的选轨逻辑并给出用 node 或 docker 两种方式跑起自建服务的步骤以及常见问题的排查方式。在线播放只有一种语言的时候场景很常见一部电影或纪录片你想存下来离线看页面里原版和配音都有可下载工具只默认抓第一条音轨。有的工具靠把页面媒体流全部下下来再碰运气笨重也不精确Cobalt 的思路反过来不下载一切而是由你指定语言代码只返回那条语言的音轨。整件事围绕请求里的dubLang字段展开先看后端是怎么处理它的。dubLang 是怎么挑出配音音轨的先找原版再找配音YouTube 处理逻辑默认选中带is_original标记的纯音频流原版音轨。当请求里带dubLang时它会在全部候选流里重新筛一遍if (o.dubLang) { let dubbedAudio adaptive_formats.find(i checkBestAudio(i) i.language o.dubLang i.audio_track ) if (dubbedAudio) { audio dubbedAudio; isDubbed true } }这里adaptive_formats是 YouTube 为该视频提供的所有音视频流组合。三个条件缺一不可纯音频不含视频画面、language字段与你传入的代码完全相等、带audio_track标记。一条都匹配不上时它会静默回退到原版音轨不报任何错误——这就是传了参数却拿到原版最常见的来源。查看音轨筛选逻辑只认两个字母的语言代码dubLang进入流程前会先过一道verifyLanguageCode校验只保留前两个字符并转小写作为匹配键不符合两字母格式时回退成en。所以传ja-JP等价于ja传Japanese则不会生效。官方文档把这个参数标注为布尔类型并注明传true时后端会读取请求头里的 Accept-Language客户端声明偏好的语言的标准 HTTP 头来推断语言实际使用中直接传两字母代码最稳妥。弄清了挑选逻辑剩下的事就是先把服务跑起来。从克隆到跑通node 方式需要 Node.js 18 及以上版本setup 脚本会引导你选择 web 还是 api 实例git clone https://gitcode.com/GitHub_Trending/cob/cobalt cd cobalt npm run setup npm startdocker 方式官方文档推荐 docker compose 路线把 docs/examples/docker-compose.example.yml 拷到目标目录将里面的示例域名改成自己的然后启动容器docker compose up -d如果要下载年龄限制等需要登录的内容在同一目录放一份 cookies.json格式参考 docs/examples/cookies.example.json。多音轨下载的请求参数服务跑起来后剩下的就是正确组装请求。配音下载最常用的五个参数如下完整字段说明在 docs/api.md参数类型说明urlstring视频页面链接每个请求必须包含dubLangstring两字母语言代码如ja、de、es须与音轨 language 字段完全一致aFormatstringbest/mp3/ogg/wav/opus纯音频输出格式opus 压缩效率最高isAudioOnlyboolean为true时只下载音频filenamePatternstringclassic/pretty/basic/nerdy决定文件命名风格命中配音音轨后文件名会自动带上语言代码后缀例如_ja方便和原版文件区分。一次完整请求长这样curl -X POST https://your-api-domain/api/json \ -H Accept: application/json -H Content-Type: application/json \ -d {url: https://www.youtube.com/watch?vXXXX, dubLang: ja, aFormat: opus}自建时值得知道的事实例如果要长期对外提供服务有几个环境变量值得提前配置限速RATELIMIT_MAX默认每 60 秒窗口 20 次请求超出的请求返回 429触发限流的状态码。脚本批量调用时调大该值或在请求间加间隔。DURATION_LIMIT默认 10800 秒超过时长的视频在解析前就会被拒绝可按机器能力调整。前后端分域名部署时把CORS_WILDCARD设为 1 或指定CORS_URL否则浏览器端调不通 API。面向公网时官方文档建议前面加一层 nginx 之类的反向代理。常见问题速查真正开始传语言代码后最常碰到的是这三种情况问题传了dubLang拿到的还是原版音轨。原因视频本身没有该语言的配音或代码与音轨 language 字段不完全一致代码匹配失败会静默回退原版。操作先在网页播放器音频菜单确认该语言存在并传两字母代码。问题批量请求陆续返回 429。原因撞上了速率限制默认 60 秒 20 次。操作调大RATELIMIT_MAX或在脚本里给请求加间隔。问题个别链接提示需要登录或无法解析。原因视频内容带年龄或地区限制。操作在实例目录放置 cookies.json并用COOKIE_PATH指过去。下一步如果只是验证流程先克隆仓库跑一次npm run setup把 web 实例看跑通即可后续涉及批量拉取配音音轨时再对照 API 文档里请求与响应字段的说明做脚本封装。【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考