ReClip API完整参考:从/api/info到/api/file的5个端点全文档
【免费下载链接】reclipDownload videos from almost any website. Lightweight, self-hosted media downloader with a clean web UI.项目地址: https://gitcode.com/GitHub_Trending/rec/reclip
ReClip 是一款轻量、可自托管的视频下载器(支持从 YouTube、TikTok、Instagram 等 1000+ 网站下载 MP4/MP3),它的后端全部功能都由 5 个 REST API 端点驱动:/api/info、/api/playlist、/api/download、/api/status和/api/file。本文是一份面向新手的 ReClip API 完整参考,帮你快速搞懂每个端点的请求参数、返回格式和调用顺序。
📋 ReClip 的5个API端点一览
ReClip 后端只有一个约 150 行的 Python 文件 app.py,5 个端点全部定义在其中:
| 端点 | 方法 | 作用 | 源码位置 |
|---|---|---|---|
/api/info | POST | 解析视频链接,返回标题、封面、时长、清晰度列表 | app.py#L81-L124 |
/api/playlist | POST | 把播放列表链接展开成单个视频 URL | app.py#L127-L147 |
/api/download | POST | 创建下载任务,返回job_id | app.py#L150-L168 |
/api/status/<job_id> | GET | 查询任务状态(下载中/完成/失败) | app.py#L171-L180 |
/api/file/<job_id> | GET | 下载已完成的任务文件 | app.py#L183-L188 |
服务默认监听8899端口(可通过环境变量PORT修改),启动脚本为 reclip.sh,也可用 docker-compose.yml 一键部署。
🎬 端点一:/api/info 查询视频信息
这是整个流程的入口。前端点击 "Fetch" 时,就会调用它来拉取视频元数据。
请求:POST,JSON 体只需一个字段:
{ "url": "https://www.youtube.com/watch?v=xxxx" }成功响应:
{ "title": "视频标题", "thumbnail": "封面图URL", "duration": 210, "uploader": "上传者", "formats": [ { "id": "22", "label": "720p", "height": 720 }, { "id": "18", "label": "360p", "height": 360 } ] }formats是清晰度列表,每个分辨率只保留码率最高的一路,并按分辨率从高到低排序——这正是页面上那排清晰度选择按钮的数据来源(见 templates/index.html)。
💡小贴士:该端点超时限制为 60 秒;URL 不支持或视频不可用时,会返回400状态码和{"error": "原因"}。
📺 端点二:/api/playlist 展开播放列表
粘贴带list=参数的 YouTube 播放列表链接时,前端会自动先调用这个端点,把列表"炸开"成一批单视频 URL,再逐个走/api/info。
请求:
{ "url": "https://www.youtube.com/watch?v=xxx&list=PLxxxx" }成功响应:
{ "urls": ["https://...单个视频1", "https://...单个视频2"] }注意它返回的是纯 URL 数组,不含视频详情——详情仍需逐个通过/api/info获取。
⬇️ 端点三:/api/download 创建下载任务
确定好视频和格式后,调用它启动下载。任务在后台线程中执行(由 yt-dlp 引擎驱动),接口会立刻返回,不会阻塞。
请求(4 个字段):
{ "url": "视频URL", "format": "video", "format_id": "22", "title": "视频标题" }format:"video"输出 MP4,"audio"输出 MP3(会忽略format_id)format_id:/api/info返回的清晰度 id,省略则取"最佳画质"title:用于生成友好的下载文件名(非法字符会被自动清理)
成功响应:
{ "job_id": "a1b2c3d4e5" }⏱️ 每个下载任务有 5 分钟超时上限。
⏳ 端点四:/api/status/<job_id> 轮询任务状态
前端拿到job_id后会每秒轮询一次此端点(轮询逻辑见 templates/index.html),直到状态不再是downloading。
请求:GET,无需任何参数,job_id放在路径里。
成功响应:
{ "status": "done", "error": null, "filename": "视频标题.mp4" }status三种取值:downloading(进行中)、done(完成,附带filename)、error(失败,error字段给出原因)。如果job_id不存在,返回404 {"error": "Job not found"}。
📥 端点五:/api/file/<job_id> 取回下载好的文件
最后一个端点最简单:任务done之后,GET 这个地址就能把文件当作附件下载(浏览器直接触发保存)。
响应:
- 文件就绪:直接返回 MP4/MP3 文件流,文件名来自任务的
filename - 文件未就绪:
404 {"error": "File not ready"}
文件会先保存在服务器本地的downloads/目录中,downloads/目录由 app.py#L10-L11 自动创建。
🔗 5个端点串起来:完整调用流程
实际使用时,5 个端点按以下顺序协作,也就是页面上"粘贴链接 → 点 Fetch → 点 Download"背后发生的事:
- (可选)链接是播放列表?先调
/api/playlist展开成单视频 - 调
/api/info拿标题、封面和清晰度 - 用户选格式后调
/api/download,拿到job_id - 轮询
/api/status/<job_id>直到done - 请求
/api/file/<job_id>把文件保存到本地
批量下载场景下,前端会对每个视频重复第 3~5 步,实现"一键全部下载"。
⚠️ 错误码速查表
| 状态码 | 返回 | 含义 |
|---|---|---|
400 | {"error": "No URL provided"} | 请求体缺少url字段 |
400 | {"error": "<yt-dlp 错误信息>"} | URL 不支持、视频私密/被删、地区受限等 |
400 | {"error": "Timed out ..."} | 解析超时(60 秒) |
404 | {"error": "Job not found"} | job_id不存在(任务记录在内存中,服务重启即丢失) |
404 | {"error": "File not ready"} | 任务还没到done状态就去取文件 |
🏁 总结:如何跑起来验证这些API
ReClip 依赖极简,requirements.txt 只有flask和yt-dlp两个 Python 包(另需系统安装 ffmpeg)。两种部署方式任选:
- 本地运行:
git clone https://gitcode.com/GitHub_Trending/rec/reclip后执行./reclip.sh,浏览器打开http://localhost:8899 - Docker 运行:用 Dockerfile 构建镜像,gunicorn 单进程 4 线程启动,下载文件通过数据卷持久化
理解这 5 个端点后,你甚至可以用 curl 或任何 HTTP 客户端编写自己的 ReClip 调用脚本,把它嵌入自动化流程中。
提示:本工具仅供个人学习使用,请遵守各平台的服务条款与版权法规。
【免费下载链接】reclipDownload videos from almost any website. Lightweight, self-hosted media downloader with a clean web UI.项目地址: https://gitcode.com/GitHub_Trending/rec/reclip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考