# xiaoer-videolab

> 来源：[GitHub](https://github.com/Jane-xiaoer/xiaoer-videolab) · ⭐ 466 stars

# xiaoer-videolab 深度解析：把 yt-dlp 装进浏览器工具栏的视频抓取利器

## 项目简介

在短视频和长视频内容爆发的今天，开发者、内容创作者经常遇到一个痛点：如何快速将网页上的视频保存到本地进行二次处理？传统方案要么依赖命令行工具 `yt-dlp`，需要记忆复杂的参数和 URL；要么使用各种浏览器插件，但功能受限、站点支持有限，甚至暗藏隐私风险。

**xiaoer-videolab（小耳抓视频）** 正是瞄准这一场景诞生的开源项目。它由 Jane-xiaoer 开发，目前在 GitHub 已获得 466 Stars。项目的核心理念非常直接——"一键把当前页视频抓到本地"。用户只需点击浏览器工具栏上的图标，当前页面的视频就会被自动下载到 `~/Downloads` 目录。背后则是一个本地运行的 yt-dlp 守护进程，支持超过 1800 个视频网站。这种"工具栏入口 + 本地守护进程"的架构设计，既保留了 yt-dlp 强大的生态能力，又提供了普通用户也能轻松上手的交互体验。

## 核心特性

- **一键抓取，零配置体验**：无需复制链接、切换窗口或记忆命令，点击扩展图标即可触发下载，下载路径固定为 `~/Downloads`，降低决策成本。
- **全量继承 yt-dlp 站点支持**：依托 yt-dlp 这个目前最活跃的视频下载工具，覆盖 YouTube、Bilibili、Twitter、Instagram 等 1800+ 站点，且能随 yt-dlp 更新持续扩展。
- **本地守护进程架构**：不依赖第三方服务器，视频解析和下载全部在本地完成，避免隐私泄露和远程服务不可用的问题。
- **浏览器原生集成**：作为浏览器扩展/工具栏应用存在，能够自动感知"当前页面"，实现 URL 的自动提取和传递。
- **跨平台潜力**：基于 JavaScript 技术栈开发，配合 Node.js 本地服务，可在 macOS、Windows、Linux 等主流桌面平台运行。

## 技术实现

xiaoer-videolab 的技术架构可以拆解为**浏览器端**和**本地端**两个部分，中间通过某种本地通信机制（通常是 Native Messaging 或 HTTP 本地服务）进行协作。

**浏览器端**采用 JavaScript 开发，主要承担以下职责：监听工具栏点击事件、获取当前活动标签页的 URL、将 URL 发送给本地服务，以及向用户反馈下载状态。由于项目主要语言为 JavaScript，可以推断其浏览器扩展部分基于 Chrome Extension / WebExtension API 构建，manifest 中声明了 `activeTab` 或 `tabs` 权限，用于读取当前页面地址。

**本地端**则是整个项目的核心。它启动一个常驻的轻量级守护进程，内部调用 `yt-dlp` 可执行文件。这个守护进程很可能基于 Node.js 编写，原因有二：一是项目主要语言标注为 JavaScript；二是 Node.js 非常适合作为胶水层，调用子进程执行二进制命令，同时提供 HTTP/WebSocket 服务供浏览器扩展调用。其内部流程大致如下：

```javascript
// 简化的本地服务核心逻辑示意
const { spawn } = require('child_process');
const http = require('http');

const server = http.createServer((req, res) => {
  let body = '';
  req.on('data', chunk => body += chunk);
  req.on('end', () => {
    const { url } = JSON.parse(body);
    
    // 调用 yt-dlp 下载到 ~/Downloads
    const ytdlp = spawn('yt-dlp', [
      '-o', '~/Downloads/%(title)s.%(ext)s',
      url
    ]);
    
    ytdlp.stdout.on('data', (data) => {
      console.log(`进度: ${data}`);
    });
    
    ytdlp.on('close', (code) => {
      res.end(JSON.stringify({ success: code === 0 }));
    });
  });
});

server.listen(8765);
```

这种架构的优势在于**解耦**：浏览器扩展只负责最轻的 URL 采集和 UI 交互，复杂的视频解析、格式选择、分片下载、合并转码全部交给 yt-dlp 处理。同时，本地 Node.js 服务可以作为中间层，未来扩展下载队列管理、进度推送、下载后自动转码等功能都非常自然。

不过，这种设计也带来了一定的部署复杂度——用户需要同时安装浏览器扩展和本地服务。项目很可能提供了安装脚本或打包好的可执行文件，以降低这一门槛。对于开发者而言，理解其 Native Messaging 协议或本地 HTTP 接口，是进行二次开发的关键。

## 快速上手

以常见的安装路径为例，用户通常需要完成以下步骤：

1. 克隆项目仓库：

```bash
git clone https://github.com/Jane-xiaoer/xiaoer-videolab.git
cd xiaoer-videolab
```

2. 安装本地依赖并启动守护进程：

```bash
npm install
npm start
# 或运行提供的启动脚本
./start-daemon.sh
```

3. 在浏览器扩展管理页面加载已解压的扩展程序，选择项目中的 `extension/` 目录。

4. 打开任意支持的视频页面，点击工具栏上的"小耳"图标，视频即开始下载到 `~/Downloads`。

对于开发者，如果想自定义下载参数，可以修改本地服务中调用 yt-dlp 的选项，例如指定画质或只下载音频：

```javascript
const args = [
  '-o', '~/Downloads/%(title)s.%(ext)s',
  '-f', 'bestvideo[height<=1080]+bestaudio/best',  // 限制 1080p
  '--merge-output-format', 'mp4',
  url
];
spawn('yt-dlp', args);
```

## 应用场景

**内容创作者的素材库建设**：自媒体工作者在浏览参考视频时，可以随手点击工具栏保存优质素材，无需中断工作流去打开终端或寻找在线下载站，大幅提升素材收集效率。

**开发者的调试与归档**：前端或音视频开发者在分析某个站点的视频播放策略时，经常需要获取原始视频文件。xiaoer-videolab 提供了一种快速获取样本数据的方式，便于本地用 ffprobe、mpv 等工具分析码流结构。

**教育用户的离线学习**：对于需要反复观看的教程、讲座类视频，一键下载到本地后可以配合笔记软件进行精读，避免网络波动影响学习体验，尤其适合网络条件不稳定的用户群体。

## 总结

xiaoer-videolab 的价值不在于重新发明视频下载技术，而在于**把 yt-dlp 的能力以最低摩擦的方式嵌入到了日常浏览场景中**。它的设计思路清晰——浏览器扩展负责"感知页面"，本地守护进程负责"专业下载"，两者通过简洁的协议协作，既保证了功能强大，又兼顾了使用便捷。对于熟悉 JavaScript 和 Node.js 的中国开发者来说，这是一个很好的学习案例：如何用现代浏览器扩展技术包装成熟的命令行工具，构建出体验流畅的桌面应用。如果你正在寻找一款隐私可控、站点支持广泛、且愿意动手定制的视频下载方案，xiaoer-videolab 值得一试。