给自己搭了个短视频解析站:轻解析
平时刷到喜欢的短视频想存下来,平台自带的保存不是带水印,就是压根不给存。网上的解析站倒是不少,但用起来总有顾虑:广告多、不知道哪天就关了、粘贴的链接经过谁的手也不清楚。干脆自己搭一个,取名轻解析,已经跑在 parse.kcdn.us.ci 上了。这篇把方案、支持的平台和踩过的坑都记下来。
它能干什么
- 粘贴链接就能解析,整段分享文案直接粘进去也行(自动从文案里提取链接)
- 解析结果无水印:视频、图集、实况照片、背景音乐都能取
- 在线播放 + 下载,播放器支持拖动进度;下载文件名是「标题_作者」这种能看懂的名字,不是随机字符串
- 封面可以单独放大预览、下载、复制链接
- 图集支持一键打包 ZIP 下载,不用一张一张存
- 有个简单的管理后台:总解析数、今日解析、成功率、独立 IP,还有每条解析记录
- 解析等待时有进度提示,不会让人以为页面卡死了
支持哪些平台
解析引擎基于开源项目 short_videos(MIT 协议)二次开发。目前实际可用的是 9 个平台:
| 平台 | 能解析的内容 |
|---|---|
| 抖音 | 视频、图集、实况,原画画质 |
| 快手 | 视频(极速版分享链接不行,原项目同样限制) |
| 微博 | 视频链接 |
| 皮皮虾 | 视频 |
| 皮皮搞笑 | 视频 |
| 最右 | 视频 |
| 豆包 | 视频 |
| 即梦 | 视频、图集 |
| 网易云音乐 | 歌曲播放与下载(仅普通歌曲,VIP / 版权受限歌曲不行) |
另外三个平台的解析器其实也移植好了,但被平台风控拦住,暂时没开放:B 站的接口对机房 IP 直接返回 412,今日头条有一层 JS 挑战,小红书需要登录 Cookie 才稳定。这三个是平台侧的限制,不是解析逻辑的问题,等以后有合适的出口环境再说。
怎么搭的
整套东西没有用服务器,跑在 Cloudflare Workers 上,免费额度完全够个人使用:
- 解析层:原项目里抖音的解析本身就有现成的 Workers 版本,直接用;其余 11 个平台的解析器原本是 PHP / Python 写的,我逐个移植成了 JavaScript,统一成同一个接口格式,跑在同一个 Worker 里,根据链接域名自动分发
- 媒体代理:各家平台的视频地址基本都有防盗链,直接下载会 403,所以播放器和下载都经过 Worker 自己的代理转发,带上对应平台的 Referer 再去取
- 记录存储:每次解析(成功的、失败的都算)写一条记录进 Cloudflare D1 数据库,后台就是读这张表做统计
- 域名:自定义域名 parse.kcdn.us.ci 直接绑在 Worker 上,不需要额外配置
踩过的坑
坑一:在线播放不流畅。 第一版上线后,视频能播,但拖动进度条就卡,手机上更明显。排查下来是媒体代理没做 HTTP Range 支持:代理没有把浏览器的分段请求转发给源站,也永远返回完整的 200,播放器没法分段加载,只能干等。补上 Range 转发、把 206 状态和 Content-Range 正确回传之后,拖动基本秒续播。另外给媒体请求开了边缘缓存,同一个视频第二次播会快很多。
坑二:三个平台被风控。 上面提到的 B 站、头条、小红书,本地测试和线上部署是同样的报错,换 Cookie、补浏览器标识都试过,B 站依然 412 —— 这类接口拦的是出口 IP 本身,代码层面无解,索性先把这三个平台从首页撤下来,不拿「支持」糊弄人。
坑三:下载文件名乱码。 视频标题是中文,直接拼进下载文件名,浏览器那边会乱码或被截断。后来服务端做了清洗,再用 RFC 5987 的方式同时给出 UTF-8 文件名和 ASCII 兜底名,各浏览器才都正常。
最后
轻解析:parse.kcdn.us.ci,粘贴链接即可用,不用注册。
说明一句:本站仅供个人学习与技术交流,解析拿到的是各平台公开接口返回的资源,版权归原作者和平台所有,请勿用于商业或侵权用途。
解析引擎基于开源项目 short_videos(MIT License)二次开发,在此感谢原作者。