#V2EX
### [分享创造] 做了一个支持嗅探下载、YT-DLP 和在线音乐播放的桌面工具: XiaDown / 下蛋
大家好,最近做了一个桌面媒体工具,叫 **下蛋 / XiaDown**,一款支持在线音乐的双引擎视频下载工具。
它是为内容创作者和重度素材用户做的。需要素材时,可以用 **YT-DLP + 浏览器嗅探** 两套下载能力保存视频、音频、字幕和封面;下载完成后可以继续转码、整理进资源库;平时工作时,它也可以作为一个桌面音乐播放器使用,支持本地音乐、YouTube Music 和 YouTube Live 。
项目地址:
* 官网:<https://xiadown.dreamapp.cc/>
* GitHub:<https://github.com/arnoldhao/xiadown>
目前支持 **macOS** 和 **Windows**。
## 为什么做这个工具
我自己经常遇到一个比较分散的工作流:
* 找素材时,需要在不同站点之间保存视频、音频、封面、字幕。
* 下载之后,经常还要把格式转成剪辑软件更好处理的版本。
* 保存久了以后,又需要一个地方统一管理下载、转码、导入的文件。
* 工作时又希望有一个不太打扰的音乐播放器,可以听 YouTube Music 、直播电台或者本地音乐。
这些事情单独看都有工具可以做,但组合起来会比较割裂:下载工具是一套,转码工具是一套,文件管理是一套,音乐播放器又是一套。
所以我做了 XiaDown ,希望它更像一个桌面上的媒体工作台:下载、转码、资源库、在线音乐和一些个人化配置放在一起,减少来回切换。
## 它适合谁
我觉得它比较适合这些场景:
* 做视频、剪辑、运营、自媒体,需要经常整理视频、音频、字幕、封面等素材。
* 希望下载完成后顺手转码,少开一个单独的 FFmpeg 命令或转码软件。
* 需要一个本地资源库统一管理下载、转码和导入文件。
* 工作时喜欢挂着 YouTube Music 、YouTube Live 或本地音乐。
* 不想把 yt-dlp 、ffmpeg 、bun 等工具装进全局环境,希望应用自己维护依赖。
## 主要能力
### 1. 双引擎视频下载:YT-DLP + CDP 嗅探
XiaDown 里有两套下载能力。
第一套是 **YT-DLP 下载**。普通视频链接可以直接粘贴解析,保存视频、音频、字幕和封面。对于 YouTube 、哔哩哔哩等常见平台,它会尽量走更稳定的 YT-DLP 流程。
第二套是 **基于 CDP 的浏览器嗅探下载**。有些网页的资源并不会直接出现在静态链接里,可能是动态加载的,或者需要真实浏览器会话才能看到。这个时候可以启动嗅探模式,让 XiaDown 观察浏览器里出现的视频、音频、直播流、清单、图片、字幕、API 响应等资源,再把可下载的内容整理出来。
平台覆盖上,YT-DLP 这一侧主要面向 YouTube 、哔哩哔哩等常见在线视频站点,也可以跟随 yt-dlp 支持更多站点;嗅探这一侧更适合动态加载、结构复杂或者需要真实浏览器会话的网站,我平时主要用它处理 TikTok 、抖音、快手、小红书这类素材场景。
对于需要登录态的内容,应用支持通过连接配置保存 Cookies / Profile ,数据来自用户主动登录后的本地浏览器环境。


### 2. 下载后继续转码
下载完成之后,很多素材还不能直接拿来用。比如编码不合适、分辨率过高、音频格式不方便、剪辑软件导入不顺手。
XiaDown 内置了基于 FFmpeg 的转码能力,支持两种方式:
* 下载任务完成后自动进入转码。
* 手动选择本地文件进行转码。
目前内置了常见的视频和音频预设,例如 H.264 、H.265 、VP9 、MP3 、AAC 、Opus 、FLAC 、WAV ,也支持原始尺寸、2160p 、1080p 、720p 、480p 等常见输出场景。
我把它定位在素材整理里最常见的那一段流程:下载完,顺手转成可用格式;专业转码软件里的复杂参数不会一开始全塞进来。
### 3. 多视图资源库
下载和转码多了之后,任务列表很快会变乱。所以 XiaDown 里做了资源库,分为任务视图和文件视图。
任务视图更适合看下载、转码的历史和状态;文件视图更适合直接管理最终生成的文件。资源库里可以统一管理下载文件、转码文件、字幕、封面和手动导入文件。
现在支持的操作包括:
* 媒体预览。
* 查看任务详情和文件详情。
* 批量选择与删除。
* 失败任务恢复。
* 文件存在性检测。
* 清理已经失效的记录。

### 4. 桌面音乐播放器
除了下载和转码,XiaDown 也做了桌面音乐播放能力。
这一块主要有三部分:
* **本地音乐播放**:自动索引资源库里的音频文件,支持播放队列、封面、同步歌词、东亚罗马音/拼音歌词、均衡器和频谱可视化。这里补充一下,均衡器和频谱可视化目前只支持 macOS 。
* **YouTube Music**:支持账号连接、歌曲/艺人/歌单搜索、首页推荐、歌单库、关注艺人、喜欢的音乐、播放队列和歌词,也做了广告数据清理,尽量减少播放时被广告打断。
* **YouTube Live**:支持自己添加 Live 分组和频道,可以看直播状态,播放直播电台,也可以直接查看直播视频。
我把音乐播放放进这个工具里,是因为很多内容创作者的工作状态其实是“找素材 + 整理素材 + 听点东西”。它不一定是核心生产能力,但作为一个长期挂在桌面的工具,有播放器会自然很多。


## 一些我比较在意的设计点
### 依赖自动管理,不污染全局环境
XiaDown 依赖 yt-dlp 、ffmpeg 、bun 等工具,但我不希望用户为了用一个桌面应用,先去配置一堆命令行环境。
所以应用里做了依赖自动管理:安装、校验、升级都由应用处理,工具路径也由应用独立维护,不依赖用户机器上的全局命令,也尽量不影响用户原本的开发环境。

### Cookies / Profile 与日常浏览器隔离
下载工具一旦涉及登录态,就很容易让人担心隐私和账号安全。
XiaDown 的做法是把连接配置独立出来:通过 CDP 调用本机浏览器能力,并持久化独立的 Profiles 和 Cookies 。数据来自用户主动登录,连接配置与日常浏览器使用场景相互隔离。
这样做的目标是:
* 需要登录态时,不要求用户手动复制 Cookie 。
* 不把所有平台账号混在一个全局环境里。
* 用户可以按平台或场景管理连接配置。

### 外观和 Codex Pets
这个部分偏个人喜好,但我自己很喜欢。
XiaDown 支持主题包、明暗/自动模式、强调色、字体、字号、侧边栏样式等外观设置。除此之外还内置了 Codex Pets Gallery ,可以导入在线或本地 Pets ,作为桌面陪伴元素。
软件如果要长期放在桌面上,我也希望它能慢慢变成用户自己的东西。


## 技术栈
项目主要技术栈:
* 桌面:Go + Wails 3
* 前端:React
* 媒体处理:YT-DLP + FFmpeg
* 浏览器连接:Chrome DevTools Protocol / chromedp
* 本地存储:SQLite + Bun ORM
* 前端工具链:Bun + Vite
几个实现点:
* 嗅探下载基于 CDP ,关注浏览器网络请求、媒体资源、清单和 API 响应。
* YT-DLP 下载支持连接配置里的 Cookies ,用来处理需要登录态的内容。
* FFmpeg 转码既可以和下载任务联动,也可以手动处理本地文件。
* 依赖工具由应用维护,减少对用户系统环境的要求。
* 账号、Cookies 、Profile 通过连接配置隔离,避免和日常浏览器场景混在一起。
## 当前状态和后续计划
下蛋是一款我每天都会用到的工具,目前功能已经基本成型,后续我会长期维护,请大家放心。
在已有功能上,我会持续打磨细节与性能;新功能会考虑是否契合工具的范围,这个范围就是内容创作者会用到的桌面媒体工具。功能越做越多很容易发散,所以后面会尽量围绕下载、转码、资源管理和工作时的音乐播放这些核心场景来推进。
大家在使用中如果遇到什么问题,可以通过 GitHub Issue ,或者直接给我发邮件,我会跟进处理。
* GitHub Issues:<https://github.com/arnoldhao/xiadown/issues>
* 邮箱:[
[email protected]](mailto:
[email protected])
如果你对这个工具感兴趣,或者也有类似的素材管理工作流,欢迎在 V2EX 里交流建议。我也很想知道大家更希望它优先打磨哪一块能力。
https://www.v2ex.com/t/1215687#reply0