
Cobalt 自托管视频下载完全指南Docker 部署、API 调用与音频提取一步到位【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobaltCobalt 是一个可以部署在自己服务器上的视频下载工具无广告、无追踪器、无付费墙覆盖 YouTube、TikTok、Instagram 等 20 多个平台。它把视频下载、音频提取、画质控制这些原本分散在第三方网站上的能力收敛成一个干净的 REST 接口加一个干净的网页端。适合三类人想搭一套私有下载服务的个人用户、需要把内容存进内部素材库的团队以及希望绕过第三方站点限速与广告、直接处理链接的开发者。 Cobalt 能力总览下载模式、画质与命名规则一次下载任务由三个互斥的模式之一决定产物形态。isAudioOnly与isAudioMuted两个布尔字段控制取舍视频音频默认两个开关都保持false直接输出完整原片。仅音频isAudioOnly设为true产物由aFormat决定——mp3默认、ogg、wav、opus、best五种。仅视频isAudioMuted设为true去掉音轨得到静音画面文件。画质与编码方面vQuality决定输出分辨率从 144 到 2160 逐级可选另有max表示拉满默认值是 720。要拿到 1080p 或 4K必须在请求里显式给出vQuality。vCodec仅对 YouTube 生效可选h264、av1、vp9在手机端播放时h264的兼容性最稳妥。个别平台还有自己的专属开关TikTok 的isTTFullAudio可以拿到视频所用的原始完整音源tiktokH265决定是否优先取 1080p 的 HEVC 版本Twitter 的twitterGif控制 GIF 是否真正转成.gif文件。文件名由filenamePattern统一控制共四种取值。标题、分辨率、编解码器、音轨语言这些关键信息都会写进文件名素材入库后无需二次重命名即可辨认取值示例文件名classic默认youtube_MMK3L4W77g4_1920x1080_h264_mute.mp4prettyLoossemble (루셈블) - Sensitive MV (1080p, h264, mute, youtube).mp4basic标题 (1080p, h264)不带上游平台名nerdy标题 (1080p, h264, ru, youtube, 视频ID).mp4这套生成逻辑的实现在 src/modules/processing/createFilename.js 里想确认字段拼接细节可以直接翻源码。拿两个用法感受一下。播客运营存档一集视频时只要音频isAudioOnly置true、aFormat选ogg或opus文件体积小适合反复传阅和二次编辑不必把整段视频搬下来。团队素材库管理员则相反——每次入库都设filenamePattern为nerdy发布平台与视频 ID 自动落进文件名按项目目录归档后日后盘点不用回网站翻历史。⚙️ 从零到部署Docker Compose 为主手动安装为辅官方 Docker 包是生产部署的主线前提只是机器上有 Docker 和 Docker Composegit clone https://gitcode.com/GitHub_Trending/cob/cobalt cd cobalt docker compose up -dcompose 配置可以参考仓库里的样例 examples/docker-compose.example.yml务必把其中的默认 URL 换成你自己的域名否则前端会把请求指向别人的实例。Docker 包内置了 watchtower容器会自动拉取新版本升级这件事不用惦记。手动安装只推荐给本地开发装好 Node.js 18 或更高版本git clone仓库后运行npm run setup再npm start即可。前端与 API 是两个独立角色setup 脚本会让你二选一对应实例要分开部署。如果实例需要处理登录才能看的内容把 cookies.json 放在配置目录并通过环境变量COOKIE_PATH指向它样例格式见 examples/cookies.example.json登录态只对需要鉴权的平台生效。接入与调用一个接口一条签名链接整个服务对外就是一个 REST 接口。最小可用的调用长这样注意Accept和Content-Type两个头必须带上const res await fetch(http://localhost:9000/api/json, { method: POST, headers: { Accept: application/json, Content-Type: application/json }, body: JSON.stringify({ url: https://www.youtube.com/watch?vxxxxx, vQuality: 1080 }) })成功时响应里是status: success加一个下载链接链接参数带签名且有时效拿到后直接当下载地址用就行。完整字段说明在 docs/api.md每个平台的具体处理逻辑放在src/modules/processing/services/目录下一个平台一个文件。公网实例如何配限流和 CORS实例要暴露到公网时docs/run-an-instance.md 列了完整变量清单重点盯这几项变量默认值作用API_PORT9000API 监听端口WEB_PORT9001前端监听端口API_URL无API 实例的对外地址API 角色必填RATELIMIT_WINDOW60限流时间窗单位秒RATELIMIT_MAX20每个 IP 在时间窗内最多请求次数超限返回 429CORS_WILDCARD1设为0关闭跨域通配CORS_URL无CORS_WILDCARD0时仅允许该域名调用 API限流是第一道防线RATELIMIT_WINDOW与RATELIMIT_MAX组合决定一个 IP 在每个时间窗内能发多少请求超了直接 429刷量和脚本轰炸先被挡在这里。CORS 是第二道把CORS_WILDCARD设为0只有CORS_URL指定的域名能跨域调你的接口其余来源一律被浏览器拦下。两道防线之外再套一层 nginx 反向代理处理 TLS 和域名转发公网实例基本就稳了。常见问题速查表现象原因与处理响应是 429撞上速率限制。等一个时间窗默认 60 秒再发或调大RATELIMIT_MAX部分视频提示需要登录准备 cookies.json用COOKIE_PATH指向它登录态只对需要鉴权的平台生效9000 / 9001 端口被占用改API_PORT默认 9000与WEB_PORT默认 9001到空闲端口YouTube 只下出 720p720 是默认值。在请求体里显式写vQuality为1080或2160网页端调用报 CORS 错误要么CORS_WILDCARD设1全放开要么设0并用CORS_URL精确放行前端域名以上覆盖了部署后最常碰到的几类报错对照表格逐项排查多数问题一两分钟就能定位。Cobalt 把下载链路完整地放在你的基础设施里部署、调用、排障都不涉及任何第三方中转。下载和使用内容请遵守各平台的条款尊重原作者的版权素材仅用于你计划使用的方式。【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考