☰
3 条命令自建完整视频下载服务:Cobalt 实战教程
2026/10/7 2:32:52 网站建设 项目流程

3 条命令自建完整视频下载服务:Cobalt 实战教程

【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt

Cobalt 是一款免费、无广告、可自建的开源视频下载工具:粘贴链接,拿到干净的文件文件。这份笔记讲清如何用 Docker 把它部署成你自己的完整视频下载服务,几条命令跑起来,用法与坑一次说透。

为什么我选择自己搭一套视频下载器

每次刷到想留存的素材,流程都差不多:搜下载器、等广告播完、拿到带水印的文件,再手动改文件名。一周来上这么三五次,真的烦透了。自建 Cobalt 视频下载服务能把这条麻烦链整个拆掉:页面没有广告和跟踪器,贴链接就出干净文件,而且整套服务跑在你自己的机器上,不用看公共实例的脸色。

用 Docker Compose 先把服务跑起来 🚀

前提是装好 Docker 和 docker-compose,步骤一共四步:

git clone https://gitcode.com/GitHub_Trending/cob/cobalt cd cobalt cp docs/examples/docker-compose.example.yml docker-compose.yml docker compose up -d

有两个容易漏的细节:

  • 启动前把 docker-compose.yml 里默认的 WEB_URL 和 API_URL 改成你的域名或服务器 IP,否则页面没法正确回传下载链接;
  • 要下需要登录态才能看的内容,在 compose 文件同目录放一份 cookies.json,再用 COOKIE_PATH 指过去,示例格式见部署文档。

验收方法:浏览器打开 http://localhost:9001(WEB_PORT 的默认值),看到 Cobalt 页面说明 web 端起来了;再随便贴一个视频链接点下载,浏览器开始存文件,整条链路就算通了。

不想用 Docker 也行:装 Node.js 18+,跑 npm run setup 选 web 或 api,再 npm start。

平台覆盖与下载玩法

先确认平台支持清单

平台能拿到什么特别能力
YouTube(含 Shorts 与音乐)音视频一起,或只取一路8K/4K、HDR、VR、高帧率,H.264/AV1/VP9,多语种配音轨
TikTok视频、轮播图、音频视频与轮播图均可去水印,可取完整原始音频
Bilibili音视频bilibili.com 与 bilibili.tv 都覆盖
Instagram / Twitter多媒体帖子一条帖子可挑着保存其中想要的内容
SoundCloud仅音频支持私有链接,文件名自动带元数据
Twitch 片段音视频文件带元数据与丰富文件名

完整清单有二十多个平台,Vimeo、Reddit、Pinterest、VK 都在里面,具体以仓库根目录 README 里的支持列表为准。

存整片、只留声音、只留画面,三种存法

默认存的是带声音的完整视频,合成由服务器端 FFmpeg 完成,本机不用装任何工具。只要音轨,比如做播客采样,选"仅音频";只要画面素材、想省流量,选"仅视频"。

无水印、8K、私有链接,各平台的独门能力

TikTok 能存无水印视频,帖子里的轮播图也去水印;YouTube 覆盖 8K、4K、HDR、VR 与高帧率;SoundCloud 和 Rutube 可以抓私有链接。每个平台是独立实现,src/modules/processing/services/ 下一平台一文件,代码结构很好读。

想写脚本?API 免费用

Cobalt 自带 REST API,个人项目免费调用。向 /api/json 发一个 POST,请求体带上目标 url,返回的 JSON 里就有文件地址,脚本拿到后自动保存入库,批量处理也只是循环一遍。最小调用长这样:

curl -X POST http://localhost:9000/api/json \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"url":"https://www.youtube.com/watch?v=xxxx","isAudioOnly":false}'

注意 Content-Type 和 Accept 两个头必须带齐。视频编码、画质、音频格式等参数的细节在 docs/api.md 里都有。

限流、粘贴失灵等 4 个高频问题

问:连着下载几次就被拒?默认 60 秒窗口最多放行 20 次请求(RATELIMIT_WINDOW=60,RATELIMIT_MAX=20),属于设计内的保护而不是故障。自建实例把这两个值在 compose 文件里调大,批量任务自己控制节奏。

问:Firefox 里"粘贴"按钮点了没反应?Firefox 125 之前的版本默认不让网页读剪贴板。最省事是升级到 125+;老版本就去 about:config 把 dom.events.asyncClipboard.readText 设为 true,刷新页面再试,图文步骤见排障手册。

问:提示需要认证或 Cookie?部分服务要登录态才能浏览公开内容。在 docker-compose.yml 同目录放一份 cookies.json,用 COOKIE_PATH 指向它,重启容器生效。

问:装好了却一个视频都下不了?多半是 WEB_URL 和 API_URL 没换掉,改成你自己的地址再重启即可。

谁适合自建,以及怎么用它

  • 个人素材库:创作者刷到好片段、想留 Shorts 备份素材,贴链接拿无水印文件,按项目文件夹归档,不再每次临时找下载器。
  • 音频工作流:SoundCloud 链接选"仅音频",文件名自动携带元数据,拖进剪辑工程就能用 🎧
  • 小团队:自建一套全组共用,素材管理系统接上开放 API,统一入库、统一命名,素材不再散落在个人电脑里。

调参与扩展:值得动的几个旋钮

日常真正会用到的环境变量只有五个:

  • API_PORT / WEB_PORT:服务端口,默认 9000 和 9001。
  • RATELIMIT_WINDOW / RATELIMIT_MAX:限流窗口与每窗口请求上限。
  • DURATION_LIMIT:可下载视频的最大时长,默认 10800 秒。
  • COOKIE_PATH:Cookie 文件路径。
  • FREEBIND_CIDR:每次下载随机换出口 IP,仅 Linux,高并发自建时有用。

完整清单在 docs/run-an-instance.md。

想加新平台支持:在源码目录加一个服务文件,再到 src/modules/processing/match.js 注册 URL 匹配规则,现有平台的实现就是最好的参考。

先把最小实例跑通、下一个视频验证整条链路,再按自己的场景调参。等它稳定后把素材系统接到 API 上,下载这件事就只剩一行配置了。

【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询