>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Rust

使用 Tauri 和 Rust 将哔哩哔哩内容直接下载到 Emby

任何使用 Emby 或 Jellyfin 构建家庭媒体服务器的人都熟悉这个流程。你在哔哩哔哩上找到一个有用的课程、开发教程或技术大会演讲,运行 yt-dlp 下载,却只得到一个没有封面、没有描述、没有字幕的无名 mp4 文件。然后你得花半小时手动输入元数据,才能让播放器正常显示海报和剧集描述。

最近发现了开源项目 bilibili-video-downloader。这是一个桌面 GUI 客户端,可以自动处理收集元数据和下载内容的所有繁琐工作。

应用功能

主要功能集围绕"下载后即可直接推送到 Emby"的理念展开。应用解析哔哩哔哩并以最高可用质量提取素材:8K、HDR、Dolby Vision,支持 AVC、HEVC 或 AV1 编码。音频同样如此,包括 Flac 和 Dolby Atmos。

除了基本的文件下载,该工具还解决了几个具体的痛点:

  • NFO 文件生成和封面下载。除了视频文件,还会下载 poster.jpg 和 fanart.jpg,以及包含描述信息的 .nfo 文件,这样 Emby 无需额外刮削器就能正常显示影片或课程卡片。
  • 弹幕(danmaku)转换。浮动中文弹幕从 XML 或 JSON 自动转换为标准 .ass 字幕,支持自定义字体和样式。
  • 章节标记和片头片尾剪辑。程序从视频中提取时间戳并嵌入为章节。如果视频中有广告植入,会通过 SponsorBlock 数据库标记为独立片段,兼容播放器可实时跳过。
  • 灵活的命名模板。你可以使用 BV-id、标题、part、日期、上传者等标签自定义文件夹结构和文件名。

支持二维码或 Cookie 登录。这可以访问个人订阅、观看历史、稍后观看列表,以及哔哩哔哩大会员专属内容。

技术细节

开发者 lanyeeee 选择 Tauri v2 + Rust 作为后端,Vue 3 配合 Naive UI 构建界面。这是一个明智的选择:无需体积臃肿的 Electron 及其无尽的内存消耗,我们得到的是一个紧凑的二进制文件,即使在低端机器上也能快速运行。下载支持多线程并发,并可在连接中断后恢复。

一个有趣的细节:该项目包含一个用 Rust 构建的实验性插件系统。它利用动态链接库(.dll、.so、.dylib)在应用进程内执行。

这里没有隔离或沙箱机制。作者对此直言不讳:这种方案赋予插件完全的自由,但引入了安全风险。因此建议在审查代码后自行从源码编译插件。

如何从源码构建项目

GitHub Releases 页面提供了 Windows 和 macOS 的预构建版本。如需自行编译二进制文件,需要安装 Rust、Node.js 和 pnpm。

构建过程涉及三个终端命令:

git clone https://github.com/lanyeeee/bilibili-video-downloader.git
cd bilibili-video-downloader
pnpm install
pnpm tauri build

最终二进制文件将位于 src-tauri/target/release/bundle 文件夹中。

适用人群

这个工具适用于本地存储教育资料或搭建家庭媒体服务器的用户。同时也是使用 Tauri v2 构建现代跨平台应用的优秀参考范例,涉及媒体处理和字幕转换等复杂任务。

相关项目