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),仅供参考