docs: 添加独立的文档页面,移除 README 中的相关描述 (#127)
100
docs/.vitepress/config.mts
Normal file
@@ -0,0 +1,100 @@
|
||||
import { defineConfig } from "vitepress";
|
||||
import taskLists from "markdown-it-task-lists";
|
||||
|
||||
// https://vitepress.dev/reference/site-config
|
||||
export default defineConfig({
|
||||
title: "bili-sync",
|
||||
description: "基于 rust tokio 的哔哩哔哩同步工具",
|
||||
lang: "zh-Hans",
|
||||
sitemap: {
|
||||
hostname: "https://bili-sync.github.io",
|
||||
},
|
||||
lastUpdated: true,
|
||||
cleanUrls: true,
|
||||
metaChunk: true,
|
||||
themeConfig: {
|
||||
outline: {
|
||||
label: "页面导航",
|
||||
level: "deep",
|
||||
},
|
||||
// https://vitepress.dev/reference/default-theme-config
|
||||
nav: [
|
||||
{ text: "主页", link: "/" },
|
||||
{
|
||||
text: "更新日志",
|
||||
items: [
|
||||
{
|
||||
text: "程序本体",
|
||||
link: "https://github.com/amtoaer/bili-sync/releases",
|
||||
},
|
||||
{
|
||||
text: "文档页面",
|
||||
link: "https://github.com/search?q=repo:amtoaer/bili-sync+docs&type=commits",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
sidebar: [
|
||||
{
|
||||
text: "简介",
|
||||
items: [
|
||||
{ text: "什么是 bili-sync?", link: "/introduction" },
|
||||
{ text: "快速开始", link: "/quick-start" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "细节",
|
||||
items: [
|
||||
{ text: "配置文件", link: "/configuration" },
|
||||
{ text: "命令行参数", link: "/args" },
|
||||
],
|
||||
},
|
||||
{
|
||||
text: "参考",
|
||||
items: [
|
||||
{ text: "获取收藏夹信息", link: "/favorite" },
|
||||
{
|
||||
text: "获取视频合集/视频列表信息",
|
||||
link: "/collection",
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
socialLinks: [
|
||||
{ icon: "github", link: "https://github.com/amtoaer/bili-sync" },
|
||||
],
|
||||
search: {
|
||||
provider: "local",
|
||||
},
|
||||
notFound: {
|
||||
title: "你来到了没有知识的荒原",
|
||||
quote: "这里什么都没有",
|
||||
linkText: "返回首页",
|
||||
},
|
||||
docFooter: {
|
||||
prev: "上一页",
|
||||
next: "下一页",
|
||||
},
|
||||
lastUpdated: {
|
||||
text: "上次更新于",
|
||||
},
|
||||
returnToTopLabel: "回到顶部",
|
||||
sidebarMenuLabel: "菜单",
|
||||
darkModeSwitchLabel: "主题",
|
||||
lightModeSwitchTitle: "切换到浅色模式",
|
||||
darkModeSwitchTitle: "切换到深色模式",
|
||||
},
|
||||
markdown: {
|
||||
config: (md) => {
|
||||
md.use(taskLists);
|
||||
},
|
||||
theme: {
|
||||
light: "github-light",
|
||||
dark: "github-dark",
|
||||
},
|
||||
},
|
||||
head: [
|
||||
["link", { rel: "icon", type: "image/svg+xml", href: "/icon.svg" }],
|
||||
["link", { rel: "icon", type: "image/png", href: "/icon.png" }],
|
||||
],
|
||||
});
|
||||
27
docs/args.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 命令行参数
|
||||
|
||||
程序支持有限的命令行参数,可以通过执行 `bili-sync-rs --help` 查看说明。
|
||||
|
||||
```shell
|
||||
bili-sync/target/debug docs_vitepress* ⇡
|
||||
❯ ./bili-sync-rs --help
|
||||
基于 rust tokio 编写的 bilibili 收藏夹同步下载工具
|
||||
|
||||
Usage: bili-sync-rs [OPTIONS]
|
||||
|
||||
Options:
|
||||
-s, --scan-only [env: SCAN_ONLY=]
|
||||
-l, --log-level <LOG_LEVEL> [env: RUST_LOG=] [default: None,bili_sync=info]
|
||||
-h, --help Print help
|
||||
-V, --version Print version
|
||||
```
|
||||
|
||||
可以看到除版本和帮助信息外,程序仅支持两个参数,参数除可以通过命令行设置外,还可通过环境变量设置。
|
||||
|
||||
## `--scan-only`
|
||||
|
||||
`--scan-only` 参数用于仅扫描列表,而不实际执行下载操作。该参数的主要目的是[方便用户从 v1 迁移](https://github.com/amtoaer/bili-sync/issues/66#issuecomment-2066642481),新用户不需要关注。
|
||||
|
||||
## `--log-level`
|
||||
|
||||
`--log-level` 参数用于设置日志级别,一般可以维持默认。该参数与 Rust 程序中 `RUST_LOG` 的语义相同,可以查看[相关文档](https://docs.rs/env_logger/latest/env_logger/#enabling-logging)获取详细信息。
|
||||
BIN
docs/assets/collection.png
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
BIN
docs/assets/detail.png
Normal file
|
After Width: | Height: | Size: 6.1 MiB |
BIN
docs/assets/dir.png
Normal file
|
After Width: | Height: | Size: 1015 KiB |
BIN
docs/assets/favorite.png
Normal file
|
After Width: | Height: | Size: 3.4 MiB |
BIN
docs/assets/icon.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
docs/assets/overview.png
Normal file
|
After Width: | Height: | Size: 4.6 MiB |
BIN
docs/assets/play.png
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
BIN
docs/assets/season.png
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
docs/assets/series.png
Normal file
|
After Width: | Height: | Size: 3.2 MiB |
BIN
docs/bun.lockb
Executable file
32
docs/collection.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# 获取视频合集/视频列表信息
|
||||
|
||||
要说明的是,视频合集和视频列表虽然在哔哩哔哩网站交互上行为类似,但在接口层级是两个不同的概念。可以简单将视频列表理解为一个老旧版本的视频合集。
|
||||
|
||||
在调试过程中我注意到视频列表的 ID 可以通过某种规则转换为视频合集的 ID,从而成功调用视频合集的接口,但由于不清楚具体的转换策略,在 bili-sync 的实现中还是将其当成两种类型处理。
|
||||
|
||||
## 区分方法
|
||||
|
||||
这两种类型可以很容易地通过如下手段区分:
|
||||
1. 两者的名称前缀不同,视频合集会有显式的“合集”字样
|
||||
2. 两者的图标不同
|
||||
|
||||
如下图所示,“合集【命运方舟全剧情解说】”是视频合集,而“阿拉德冒险记”是视频列表。
|
||||

|
||||
|
||||
在 bili-sync 的设计中,视频合集的 key 为 `season:{mid}:{season_id}`,而视频列表的 key 为 `series:{mid}:{series_id}`。
|
||||
|
||||
## 参数获取
|
||||
|
||||
了解了区分方法后,我们可以通过如下步骤获取视频合集/视频列表的信息。
|
||||
|
||||
### 视频合集
|
||||
|
||||

|
||||
|
||||
该视频合集的 key 为 `season:521722088:1987140`。
|
||||
|
||||
### 视频列表
|
||||
|
||||

|
||||
|
||||
该视频列表的 key 为 `series:521722088:387214`。
|
||||
181
docs/configuration.md
Normal file
@@ -0,0 +1,181 @@
|
||||
# 配置文件
|
||||
|
||||
默认的配置文件已经在[快速开始](/quick-start)中给出,该文档对配置文件的各个参数依次详细解释。
|
||||
|
||||
## video_name 与 page_name
|
||||
|
||||
`video_name` 与 `page_name` 用于设置下载文件的命名规则,对于所有下载的内容,将会维持如下的目录结构:
|
||||
|
||||
1. 单页视频:
|
||||
|
||||
```bash
|
||||
├── {video_name}
|
||||
│ ├── {page_name}.mp4
|
||||
│ ├── {page_name}.nfo
|
||||
│ └── {page_name}-poster.jpg
|
||||
```
|
||||
|
||||
2. 多页视频:
|
||||
|
||||
```bash
|
||||
├── {video_name}
|
||||
│ ├── poster.jpg
|
||||
│ ├── Season 1
|
||||
│ │ ├── {page_name} - S01E01.mp4
|
||||
│ │ ├── {page_name} - S01E01.nfo
|
||||
│ │ ├── {page_name} - S01E01-thumb.jpg
|
||||
│ │ ├── {page_name} - S01E02.mp4
|
||||
│ │ ├── {page_name} - S01E02.nfo
|
||||
│ │ └── {page_name} - S01E02-thumb.jpg
|
||||
│ └── tvshow.nfo
|
||||
```
|
||||
|
||||
这两个参数支持使用模板,其中用 <code v-pre>{{ }}</code> 包裹的模板变量在执行时会被动态替换为对应的内容。
|
||||
|
||||
对于 `video_name`,支持设置 bvid(视频编号)、title(视频标题)、upper_name(up 主名称)、upper_mid(up 主 id)。
|
||||
|
||||
对于 `page_name`,除支持 video 的全部参数外,还支持 ptitle(分 P 标题)、pid(分 P 页号)。
|
||||
|
||||
为了解决文件名可能过长的问题,程序为模板引入了 `truncate` 函数。如 <code v-pre>{{ truncate title 10 }}</code> 表示截取 `title` 的前 10 个字符。
|
||||
|
||||
## `interval`
|
||||
|
||||
表示程序每次执行扫描下载的间隔时间,单位为秒。
|
||||
|
||||
## `upper_path`
|
||||
|
||||
UP 主头像和信息的保存位置。对于使用 Emby、Jellyfin 媒体服务器的用户,需确保此处路径指向 Emby、Jellyfin 配置中的 `/metadata/people/` 才能够正常在媒体服务器中显示 UP 主的头像。
|
||||
|
||||
## `nfo_time_type`
|
||||
|
||||
表示在视频信息中使用的时间类型,可选值为 `favtime`(收藏时间)和 `pubtime`(发布时间)。
|
||||
|
||||
视频合集/视频列表不存在 `favtime`,程序实现中将 `favtime` 设置为与 `pubtime` 相同,因此该设置对视频合集/视频列表没有影响。
|
||||
|
||||
## `credential`
|
||||
|
||||
哔哩哔哩账号的身份凭据,请参考[凭据获取流程](https://nemo2011.github.io/bilibili-api/#/get-credential)获取并对应填写至配置文件中,后续 bili-sync 会在必要时自动刷新身份凭据,不再需要手动管理。
|
||||
|
||||
推荐使用匿名窗口获取,避免潜在的冲突。
|
||||
|
||||
## `filter_option`
|
||||
|
||||
过滤选项,用于设置程序的过滤规则,程序会从过滤结果中选择最优的视频、音频流下载。
|
||||
|
||||
这些内容的可选值可前往 [analyzer.rs](https://github.com/amtoaer/bili-sync/blob/24d0da0bf3ea65fd45d07587e4dcdbb24d11a589/crates/bili_sync/src/bilibili/analyzer.rs#L10-L55) 中查看。
|
||||
|
||||
注意将过滤范围设置过小可能导致筛选不到符合要求的流导致下载失败,建议谨慎修改。
|
||||
|
||||
### `video_max_quality`
|
||||
|
||||
视频流允许的最高质量。
|
||||
|
||||
### `video_min_quality`
|
||||
|
||||
视频流允许的最低质量。
|
||||
|
||||
### `audio_max_quality`
|
||||
|
||||
音频流允许的最高质量。
|
||||
|
||||
### `audio_min_quality`
|
||||
|
||||
音频流允许的最低质量。
|
||||
|
||||
### `codecs`
|
||||
|
||||
这是 bili-sync 选择视频编码的优先级顺序,优先级按顺序从高到低。此处对编码格式做一个简单说明:
|
||||
|
||||
+ AVC 又称 H.264,是目前使用最广泛的视频编码格式,绝大部分设备可以使用硬件解码播放该格式的视频(也因此播放普遍流畅),但是同等画质下视频体积较大。
|
||||
|
||||
+ HEV(C) 又称 H.265,与 AV1 都是新一代的视频编码格式。这两种编码相比 AVC 有更好的压缩率,同等画质下视频体积更小,但由于相对较新,硬件解码支持不如 AVC 广泛。如果你的播放设备不支持则只能使用软件解码播放,这种情况下可能导致播放卡顿、机器发热等问题。
|
||||
|
||||
建议查阅自己常用播放设备对这三种编码的硬件解码支持情况以选择合适的编码格式,如果硬件支持 HEV 或 AV1,那么可以将其优先级调高。
|
||||
|
||||
而如果你的设备不支持,或者单纯懒得查询,那么推荐将 AVC 放在第一位以获得最好的兼容性。
|
||||
|
||||
### `no_dolby_video`
|
||||
|
||||
是否禁用杜比视频流。
|
||||
|
||||
### `no_dolby_audio`
|
||||
|
||||
是否禁用杜比音频流。
|
||||
|
||||
### `no_hdr`
|
||||
|
||||
是否禁用 HDR 视频流。
|
||||
|
||||
### `no_hires`
|
||||
|
||||
是否禁用 Hi-Res 音频流。
|
||||
|
||||
## `danmaku_option`
|
||||
|
||||
弹幕的设置选项,用于设置下载弹幕的样式,几乎全部取自[上游仓库](https://github.com/gwy15/danmu2ass)。
|
||||
|
||||
### `duration`
|
||||
|
||||
弹幕在屏幕上的持续时间,单位为秒。
|
||||
|
||||
### `font`
|
||||
|
||||
弹幕的字体。
|
||||
|
||||
### `font_size`
|
||||
|
||||
弹幕的字体大小。
|
||||
|
||||
### `width_ratio`
|
||||
|
||||
计算弹幕宽度的比例,为避免重叠可以调大这个数值。
|
||||
|
||||
### `horizontal_gap`
|
||||
|
||||
两条弹幕之间最小的水平距离。
|
||||
|
||||
### `lane_size`
|
||||
|
||||
弹幕所占据的高度,即“行高度/行间距”。
|
||||
|
||||
### `float_percentage`
|
||||
|
||||
屏幕上滚动弹幕最多高度百分比。
|
||||
|
||||
### `bottom_percentage`
|
||||
|
||||
屏幕上底部弹幕最多高度百分比。
|
||||
|
||||
### `opacity`
|
||||
|
||||
透明度,取值范围为 0-255。透明度可以通过 opacity / 255 计算得到。
|
||||
|
||||
### `bold`
|
||||
|
||||
是否加粗。
|
||||
|
||||
### `outline`
|
||||
|
||||
描边宽度。
|
||||
|
||||
### `time_offset`
|
||||
|
||||
时间轴偏移,>0 会让弹幕延后,<0 会让弹幕提前,单位为秒。
|
||||
|
||||
## `favorite_list`
|
||||
|
||||
你想要下载的收藏夹与想要保存的位置。简单示例:
|
||||
```toml
|
||||
3115878158 = "/home/amtoaer/Downloads/bili-sync/测试收藏夹"
|
||||
```
|
||||
收藏夹 ID 的获取方式可以参考[这里](/favorite)。
|
||||
|
||||
## `collection_list`
|
||||
|
||||
你想要下载的视频合集/视频列表与想要保存的位置。注意“视频合集”与“视频列表”是两种不同的类型。在配置文件中需要做区分:
|
||||
```toml
|
||||
"series:387051756:432248" = "/home/amtoaer/Downloads/bili-sync/测试视频列表"
|
||||
"season:1728547:101343" = "/home/amtoaer/Downloads/bili-sync/测试合集"
|
||||
```
|
||||
|
||||
具体说明可以参考[这里](/collection)。
|
||||
5
docs/favorite.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# 获取收藏夹信息
|
||||
|
||||
收藏夹的 ID 获取非常简单,在网页端打开自己的收藏夹列表,切换到你想要获取的收藏夹,然后查看 URL 地址栏中的 `fid` 参数内容即可。
|
||||
|
||||

|
||||
58
docs/index.md
Normal file
@@ -0,0 +1,58 @@
|
||||
---
|
||||
# https://vitepress.dev/reference/default-theme-home-page
|
||||
layout: home
|
||||
|
||||
title: bili-sync
|
||||
titleTemplate: 由 Rust & Tokio 驱动的哔哩哔哩同步工具
|
||||
|
||||
hero:
|
||||
name: "bili-sync"
|
||||
text: "由 Rust & Tokio 驱动的哔哩哔哩同步工具"
|
||||
# tagline: My great project tagline
|
||||
actions:
|
||||
- theme: brand
|
||||
text: 什么是 bili-sync?
|
||||
link: /introduction
|
||||
- theme: alt
|
||||
text: 快速开始
|
||||
link: /quick-start
|
||||
- theme: alt
|
||||
text: GitHub
|
||||
link: https://github.com/amtoaer/bili-sync
|
||||
image:
|
||||
src: /assets/icon.png
|
||||
alt: bili-sync
|
||||
|
||||
features:
|
||||
- icon: 🤖
|
||||
title: 无需干预
|
||||
details: 自动选择最优的视频和音频配置
|
||||
- icon: 💾
|
||||
title: 专为 NAS 设计
|
||||
details: 可被 Emby、Jellyfin 等媒体服务器一键识别
|
||||
- icon: 🐳
|
||||
title: 部署简单
|
||||
details: 提供简单易用的 docker 镜像
|
||||
---
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--vp-home-hero-name-color: transparent;
|
||||
--vp-home-hero-name-background: -webkit-linear-gradient(120deg, #bd34fe 30%, #41d1ff);
|
||||
|
||||
--vp-home-hero-image-background-image: linear-gradient(-45deg, #bd34fe 50%, #47caff 50%);
|
||||
--vp-home-hero-image-filter: blur(44px);
|
||||
}
|
||||
|
||||
@media (min-width: 640px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(56px);
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 960px) {
|
||||
:root {
|
||||
--vp-home-hero-image-filter: blur(68px);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
37
docs/introduction.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# bili-sync 是什么?
|
||||
|
||||
bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具。
|
||||
|
||||
它的基本的工作原理是使用用户填写的凭据定期扫描视频合集、收藏夹等,获取到本地未下载过的内容并保存到本地,维持本地视频库与哔哩哔哩网站的同步。
|
||||
|
||||
下载的内容包括视频、封面、弹幕、标签与简介信息等,这些文件整体保持与 Emby、Jellyfin 等媒体服务器软件兼容的文件布局,使得目的文件夹可以直接被作为媒体库添加到这些软件中,无需干预自动识别。
|
||||
|
||||
## 使用截图
|
||||
|
||||
> [!WARNING]
|
||||
> 媒体库类型请选择“混合内容”,否则可能导致多页视频无法正常显示。
|
||||
|
||||
|
||||
|
||||
### 概览
|
||||

|
||||
### 详情
|
||||

|
||||
### 播放(使用 infuse)
|
||||

|
||||
### 文件排布
|
||||

|
||||
|
||||
## 功能与路线图
|
||||
|
||||
- [x] 使用用户填写的凭据认证,并在必要时自动刷新
|
||||
- [x] 支持收藏夹与视频列表/视频合集的下载
|
||||
- [x] 自动选择用户设置范围内最优的视频和音频流,并在下载完成后使用 FFmpeg 合并
|
||||
- [x] 使用 Tokio 与 Reqwest,对视频、视频分页进行异步并发下载
|
||||
- [x] 使用媒体服务器支持的文件命名,方便一键作为媒体库导入
|
||||
- [x] 当前轮次下载失败会在下一轮下载时重试,失败次数过多自动丢弃
|
||||
- [x] 使用数据库保存媒体信息,避免对同个视频的多次请求
|
||||
- [x] 打印日志,并在请求出现风控时自动终止,等待下一轮执行
|
||||
- [x] 提供多平台的二进制可执行文件,为 Linux 平台提供了立即可用的 Docker 镜像
|
||||
- [ ] 支持对“稍后再看”内视频的自动扫描与下载
|
||||
- [ ] 下载单个文件时支持断点续传与并发下载
|
||||
12
docs/package.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"markdown-it-task-lists": "^2.1.1",
|
||||
"vitepress": "^1.2.3"
|
||||
},
|
||||
"scripts": {
|
||||
"docs:dev": "vitepress dev",
|
||||
"docs:build": "vitepress build",
|
||||
"docs:preview": "vitepress preview"
|
||||
}
|
||||
}
|
||||
BIN
docs/public/icon.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
1
docs/public/icon.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="24" fill="none" viewBox="0 0 25 24" id="bilibili"><rect width="24" height="24" x=".463" fill="url(#paint0_linear_302_5217)" rx="8"></rect><path fill="#fff" fill-rule="evenodd" d="M8.74933 5.15976C8.53632 4.94675 8.19095 4.94675 7.97794 5.15976C7.76493 5.37277 7.76493 5.71814 7.97794 5.93115L9.41043 7.36363H6.18182C4.97684 7.36363 4 8.34047 4 9.54545V16.8182C4 18.0232 4.97684 19 6.18182 19H7.45455V19.3636C7.45455 19.6649 7.69876 19.9091 8 19.9091C8.30124 19.9091 8.54545 19.6649 8.54545 19.3636V19H15.4545V19.3636C15.4545 19.6649 15.6988 19.9091 16 19.9091C16.3012 19.9091 16.5455 19.6649 16.5455 19.3636V19H17.8182C19.0232 19 20 18.0232 20 16.8182V9.54545C20 8.34047 19.0232 7.36363 17.8182 7.36363H14.5896L16.022 5.93115C16.2351 5.71814 16.2351 5.37277 16.022 5.15976C15.809 4.94675 15.4637 4.94675 15.2507 5.15976L13.0689 7.34158C13.0617 7.34878 13.0547 7.35614 13.048 7.36363H10.952C10.9453 7.35614 10.9383 7.34878 10.9311 7.34158L8.74933 5.15976ZM5.81818 10.2727C5.81818 9.67023 6.3066 9.18182 6.90909 9.18182H17.0909C17.6934 9.18182 18.1818 9.67023 18.1818 10.2727V16.0909C18.1818 16.6934 17.6934 17.1818 17.0909 17.1818H6.90909C6.3066 17.1818 5.81818 16.6934 5.81818 16.0909V10.2727ZM13.6417 12.4328L16.5508 13.1601L16.9036 11.7489L13.9945 11.0217L13.6417 12.4328ZM10.3582 12.4328L7.44911 13.1601L7.09633 11.7489L10.0054 11.0217L10.3582 12.4328ZM12.4866 15.1623C12.4231 15.1108 12.3765 15.0596 12.3468 15.0225C12.2515 14.9042 12.1757 14.7648 12.1011 14.6276C12.0677 14.5663 12.0345 14.5053 12 14.4469C11.9655 14.5053 11.9324 14.5663 11.899 14.6276C11.8244 14.7648 11.7485 14.9041 11.6532 15.0225C11.6235 15.0596 11.5769 15.1108 11.5134 15.1623C11.3883 15.2636 11.2015 15.3636 10.9393 15.3636C10.8537 15.3636 10.7596 15.307 10.6612 15.1607C10.6164 15.094 10.5823 15.0248 10.5592 14.9708C10.5423 14.9312 10.5299 14.8946 10.5299 14.8946L9.83423 15.1068C9.84994 15.1577 9.86943 15.2075 9.89033 15.2564C9.92551 15.3388 9.98022 15.4514 10.0577 15.5666C10.2039 15.7839 10.4886 16.0909 10.9393 16.0909C11.4043 16.0909 11.7479 15.9084 11.9713 15.7273C11.9811 15.7193 11.9907 15.7114 12 15.7035C12.0094 15.7114 12.0189 15.7193 12.0287 15.7273C12.2521 15.9084 12.5957 16.0909 13.0608 16.0909C13.5114 16.0909 13.7961 15.7839 13.9423 15.5666C14.0198 15.4514 14.0745 15.3388 14.1097 15.2564C14.1306 15.2075 14.1501 15.1577 14.1658 15.1068L13.4701 14.8946C13.4701 14.8946 13.4577 14.9312 13.4409 14.9708C13.4178 15.0248 13.3837 15.094 13.3389 15.1607C13.2404 15.307 13.1464 15.3636 13.0608 15.3636C12.7985 15.3636 12.6117 15.2636 12.4866 15.1623Z" clip-rule="evenodd"></path><defs><linearGradient id="paint0_linear_302_5217" x1=".463" x2="24.463" y1="12" y2="12" gradientUnits="userSpaceOnUse"><stop stop-color="#ED6D6B"></stop><stop offset="1" stop-color="#F0B076"></stop></linearGradient></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
168
docs/quick-start.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# 快速开始
|
||||
|
||||
程序使用 Rust 编写,不需要 Runtime 且并为各个平台提供了预编译文件,绝大多数情况下是没有使用障碍的。
|
||||
|
||||
## 程序获取
|
||||
|
||||
程序为各个平台提供了预构建的二进制文件,并且打包了 `Linux/amd64` 与 `Linux/arm64` 两个平台的 Docker 镜像。用户可以自行选择使用哪种方式运行。
|
||||
|
||||
### 其一:下载平台二进制文件运行
|
||||
|
||||
> [!CAUTION]
|
||||
> 如果你使用这种方式运行,请确保 FFmpeg 已被正确安装且位于 PATH 中,可通过执行 `ffmpeg` 命令访问。
|
||||
|
||||
在[程序发布页](https://github.com/amtoaer/bili-sync/releases)选择最新版本中对应机器架构的压缩包,解压后会获取一个名为 `bili-sync-rs` 的可执行文件,直接双击执行。
|
||||
|
||||
### 其二: 使用 Docker Compose 运行
|
||||
|
||||
Linux/amd64 与 Linux/arm64 两个平台可直接使用 Docker 或 Docker Compose 运行,此处以 Compose 为例:
|
||||
> 请注意其中的注释,有不清楚的地方可以先继续往下看。
|
||||
|
||||
```yaml
|
||||
services:
|
||||
bili-sync-rs:
|
||||
# 不推荐使用 latest 这种模糊的 tag,最好直接指明版本号
|
||||
image: amtoaer/bili-sync-rs:latest
|
||||
restart: unless-stopped
|
||||
network_mode: bridge
|
||||
# 该选项请仅在日志终端支持彩色输出时启用,否则日志中可能会出现乱码
|
||||
tty: true
|
||||
# 非必需设置项,推荐设置为宿主机用户的 uid 及 gid (`$uid:$gid`)
|
||||
# 可以执行 `id ${user}` 获取 `user` 用户的 uid 及 gid
|
||||
# 程序下载的所有文件权限将与此处的用户保持一致,不设置默认为 Root
|
||||
user: 1000:1000
|
||||
hostname: bili-sync-rs
|
||||
container_name: bili-sync-rs
|
||||
volumes:
|
||||
- ${你希望存储程序配置的目录}:/app/.config/bili-sync
|
||||
# 还需要有一些其它必要的挂载,包括 up 主信息位置、视频下载位置
|
||||
# 这些目录不是固定的,只需要确保此处的挂载与 bili-sync-rs 的配置文件相匹配
|
||||
# ...
|
||||
# 如果你使用的是群晖系统,请移除最后的 logging 配置,否则会导致日志不显示
|
||||
logging:
|
||||
driver: "local"
|
||||
```
|
||||
|
||||
使用该 compose 文件,执行 `docker compose up -d` 即可运行。
|
||||
|
||||
## 程序配置
|
||||
|
||||
> [!NOTE]
|
||||
> 在 Docker 环境中,`~` 会被展开为 `/app`。
|
||||
|
||||
你是否遇到了程序的 panic?别担心,这是正常情况。
|
||||
|
||||
程序默认会将配置文件存储于 `~/.config/bili-sync/config.toml`,数据库文件存储于 `~/.config/bili-sync/data.sqlite`。
|
||||
|
||||
在启动时程序会尝试加载配置文件,如果发现不存在会新建并写入默认配置。
|
||||
|
||||
获得配置内容后,程序会对其做一次简单的校验,因为默认配置中不包含凭据信息与要下载的收藏夹、视频合集/视频列表,因此程序会拒绝运行而发生 panic。我们只需要在程序生成的默认配置上做一些简单修改即可成功运行。
|
||||
|
||||
当前版本的默认示例文件如下:
|
||||
```toml
|
||||
video_name = "{{title}}"
|
||||
page_name = "{{bvid}}"
|
||||
interval = 1200
|
||||
upper_path = "/Users/amtoaer/Library/Application Support/bili-sync/upper_face"
|
||||
nfo_time_type = "favtime"
|
||||
|
||||
[credential]
|
||||
sessdata = ""
|
||||
bili_jct = ""
|
||||
buvid3 = ""
|
||||
dedeuserid = ""
|
||||
ac_time_value = ""
|
||||
|
||||
[filter_option]
|
||||
video_max_quality = "Quality8k"
|
||||
video_min_quality = "Quality360p"
|
||||
audio_max_quality = "QualityHiRES"
|
||||
audio_min_quality = "Quality64k"
|
||||
codecs = [
|
||||
"AV1",
|
||||
"HEV",
|
||||
"AVC",
|
||||
]
|
||||
no_dolby_video = false
|
||||
no_dolby_audio = false
|
||||
no_hdr = false
|
||||
no_hires = false
|
||||
|
||||
[danmaku_option]
|
||||
duration = 15.0
|
||||
font = "黑体"
|
||||
font_size = 25
|
||||
width_ratio = 1.2
|
||||
horizontal_gap = 20.0
|
||||
lane_size = 32
|
||||
float_percentage = 0.5
|
||||
bottom_percentage = 0.3
|
||||
opacity = 76
|
||||
bold = true
|
||||
outline = 0.8
|
||||
time_offset = 0.0
|
||||
|
||||
[favorite_list]
|
||||
|
||||
[collection_list]
|
||||
```
|
||||
|
||||
看起来很长,但绝大部分选项是不需要做修改的。正常情况下,我们只需要关注:
|
||||
+ `interval`
|
||||
+ `upper_path`
|
||||
+ `credential`
|
||||
+ `codecs`
|
||||
+ `favorite_list`
|
||||
+ `collection_list`
|
||||
|
||||
以下逐条说明。
|
||||
|
||||
### `interval`
|
||||
|
||||
表示程序每次执行扫描下载的间隔时间,单位为秒。
|
||||
|
||||
### `upper_path`
|
||||
|
||||
UP 主头像和信息的保存位置。对于使用 Emby、Jellyfin 媒体服务器的用户,需确保此处路径指向 Emby、Jellyfin 配置中的 `/metadata/people/` 才能够正常在媒体服务器中显示 UP 主的头像。
|
||||
|
||||
### `credential`
|
||||
|
||||
哔哩哔哩账号的身份凭据,请参考[凭据获取流程](https://nemo2011.github.io/bilibili-api/#/get-credential)获取并对应填写至配置文件中,后续 bili-sync 会在必要时自动刷新身份凭据,不再需要手动管理。
|
||||
|
||||
推荐使用匿名窗口获取,避免潜在的冲突。
|
||||
|
||||
### `codecs`
|
||||
|
||||
这是 bili-sync 选择视频编码的优先级顺序,优先级按顺序从高到低。此处对编码格式做一个简单说明:
|
||||
|
||||
+ AVC 又称 H.264,是目前使用最广泛的视频编码格式,绝大部分设备可以使用硬件解码播放该格式的视频(也因此播放普遍流畅),但是同等画质下视频体积较大。
|
||||
|
||||
+ HEV(C) 又称 H.265,与 AV1 都是新一代的视频编码格式。这两种编码相比 AVC 有更好的压缩率,同等画质下视频体积更小,但由于相对较新,硬件解码支持不如 AVC 广泛。如果你的播放设备不支持则只能使用软件解码播放,这种情况下可能导致播放卡顿、机器发热等问题。
|
||||
|
||||
建议查阅自己常用播放设备对这三种编码的硬件解码支持情况以选择合适的编码格式,如果硬件支持 HEV 或 AV1,那么可以将其优先级调高。
|
||||
|
||||
而如果你的设备不支持,或者单纯懒得查询,那么推荐将 AVC 放在第一位以获得最好的兼容性。
|
||||
|
||||
### `favorite_list`
|
||||
|
||||
你想要下载的收藏夹与想要保存的位置。简单示例:
|
||||
```toml
|
||||
3115878158 = "/home/amtoaer/Downloads/bili-sync/测试收藏夹"
|
||||
```
|
||||
收藏夹 ID 的获取方式可以参考[这里](/favorite)。
|
||||
|
||||
### `collection_list`
|
||||
|
||||
你想要下载的视频合集/视频列表与想要保存的位置。注意“视频合集”与“视频列表”是两种不同的类型。在配置文件中需要做区分:
|
||||
```toml
|
||||
"series:387051756:432248" = "/home/amtoaer/Downloads/bili-sync/测试视频列表"
|
||||
"season:1728547:101343" = "/home/amtoaer/Downloads/bili-sync/测试合集"
|
||||
```
|
||||
|
||||
具体说明可以参考[这里](/collection)。
|
||||
|
||||
## 运行
|
||||
|
||||
在配置文件填写完毕后,我们可以直接运行程序。如果配置文件无误,程序会自动开始下载收藏夹中的视频。并每隔 `interval` 秒重新扫描一次。
|
||||
|
||||
如果你希望了解更详细的配置项说明,可以查询[这里](/configuration)。
|
||||