前言

不知道各位在使用BiliBili的时候,有没有遇到过以下这种些场景

  • 收藏的教程视频突然显示"该视频已失效"

  • 辛苦整理的番剧合集因UP主删稿消失不见

  • 在不同设备登录时发现收藏夹内容不同步

  • 想把自己的收藏夹或者某个up主的视频都搬运到自己的媒体服务中

  • 喜欢的明星或up主塌方,辛苦收藏的视频,一夜之间全下架

作为一名Lv6的B站早期用户,经历过古早鬼畜视频盛行,各种猎奇视频如av10492、av10388。

这种情况简直太常见了,自从有了自己的Nas之后,便想方设法的开始解决这个问题。然后我便发现了它,今天我们的主角:Bili-Sync.

Bili-Sync简介

官网在这:bili-sync | 由 Rust & Tokio 驱动的哔哩哔哩同步工具

以下内容摘自官网:

bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具。

它的基本的工作原理是使用用户填写的凭据定期扫描视频合集、收藏夹等,获取到本地未下载过的内容并保存到本地,维持本地视频库与哔哩哔哩网站的同步。

下载的内容包括视频、封面、弹幕、标签与简介信息等,这些文件整体保持与 Emby、Jellyfin 等媒体服务器软件兼容的文件布局,使得目的文件夹可以直接被作为媒体库添加到这些软件中,无需干预自动识别。

简而言之,它的主要功能就帮你下载up主视频、下载你的收藏夹、视频列表、稍后再看列表。并将视频刮削后存放,你可以直接将其导入媒体服务如Emby、Jellyfin等的媒体库中。至于下什么格式、什么清晰度、要不要弹幕,都听你的。

怎么样,心动了吗,废话不多说,看我操作,以我的Nas为例,通过1Panel部署。

Docker部署

进入 “容器”->"编排"->"创建编排"

在创建编排界面,将下面的代码输入进去,注意,将路径改成你自己的路径

services:
  bili-sync-rs:
    image: amtoaer/bili-sync-rs:latest
    restart: unless-stopped
    network_mode: bridge
    tty: true  # 该选项请仅在日志终端支持彩色输出时启用,否则日志中可能会出现乱码
    hostname: bili-sync-rs
    container_name: bili-sync-rs
    ports:
      - 12345:12345
    volumes:
        - ${你希望存储程序配置的目录}:/app/.config/bili-sync
        - ${你希望存储视频数据的目录}:/Videos/Bilibilis
        # 还需要有一些其它必要的挂载,包括 up 主信息位置、视频下载位置
        # 这些目录不是固定的,只需要确保此处的挂载与 bili-sync-rs 的配置文件相匹配

    # 如果你使用的是群晖系统,请移除最后的 logging 配置,否则会导致日志不显示
    logging:
      driver: "local"

点击确认后,1Panle自动开始拉取镜像并创建容器。

如果你想直接使用命令安装,那就创建好docker-compose.yml后,执行以下命令(什么?docker的基本操作都不熟悉,你笨蛋啊,赶快点击这篇文章学学吧)

docker compose pull && docker compose up -d

创建完成容器后,在1Panel的“容器界面,我们会看到这样的一行信息”

那就说明Bili-Sync部署完成,等等,先别走,我们还需要简单配置以下配置文件,这样它才能按你的需求去定时抓取视频。我们进入刚刚docker-compose.yml中配置的Bili-Sync配置文件目录

双击打开编辑文件,参考官方的文档,配置好登录信息,如果没有这个文件,那就按照下面的模板创建一个

auth_token = "xxxxxxxx"
bind_address = "0.0.0.0:12345"
video_name = "{{title}}"
page_name = "{{bvid}}"
interval = 1200
upper_path = "/Users/amtoaer/Library/Application Support/bili-sync/upper_face"
nfo_time_type = "favtime"
time_format = "%Y-%m-%d"
cdn_sorting = false

[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]

[submission_list]

[watch_later]
enabled = false
path = ""

[concurrent_limit]
video = 3
page = 2

[concurrent_limit.rate_limit]
limit = 4
duration = 250

虽然配置文件看起来很长,但绝大部分选项是不需要做修改的。一般来说,我们只需要关注其中的少数几个,以下逐条说明。

credential

哔哩哔哩账号的身份凭据,请参考凭据获取流程获取并对应填写至配置文件中,后续 bili-sync 会在必要时自动刷新身份凭据,不再需要手动管理。推荐使用匿名窗口获取,避免潜在的冲突。

codecs

这是 bili-sync 选择视频编码的优先级顺序,优先级按顺序从高到低。此处对编码格式做一个简单说明:

  • AVC 又称 H.264,是目前使用最广泛的视频编码格式,绝大部分设备可以使用硬件解码播放该格式的视频(也因此播放普遍流畅),但是同等画质下视频体积较大。

  • HEV(C) 又称 H.265,与 AV1 都是新一代的视频编码格式。这两种编码相比 AVC 有更好的压缩率,同等画质下视频体积更小,但由于相对较新,硬件解码支持不如 AVC 广泛。如果你的播放设备不支持则只能使用软件解码播放,这种情况下可能导致播放卡顿、机器发热等问题。

建议查阅自己常用播放设备对这三种编码的硬件解码支持情况以选择合适的编码格式,如果硬件支持 HEV 或 AV1,那么可以将其优先级调高。而如果你的设备不支持,或者单纯懒得查询,那么推荐将 AVC 放在第一位以获得最好的兼容性。

favorite_list

你想要下载的收藏夹与想要保存的位置。简单示例:

3115878158 = "/home/amtoaer/Downloads/bili-sync/测试收藏夹"

收藏夹 ID 的获取方式可以参考这里

collection_list

你想要下载的视频合集/视频列表与想要保存的位置。注意“视频合集”与“视频列表”是两种不同的类型。在配置文件中需要做区分:

"series:387051756:432248" = "/home/amtoaer/Downloads/bili-sync/测试视频列表"
"season:1728547:101343" = "/home/amtoaer/Downloads/bili-sync/测试合集"

具体说明可以参考这里

submission_list

你想要下载的 UP 主投稿与想要保存的位置。简单示例:

9183758 = "/home/amtoaer/Downloads/bili-sync/测试投稿"

UP 主 ID 的获取方式可以参考这里

watch_later

设置稍后再看的扫描开关与保存位置。如果你希望下载稍后再看列表中的视频,可以将 enabled 设置为 true,并填写 path

enabled = true
path = "/home/amtoaer/Downloads/bili-sync/稍后再看"

在配置文件填写完毕后,我们可以在容器页面,重启Bili-Sync,以便最新配置生效。如果配置文件无误,程序会自动开始下载收藏夹中的视频。并每隔 interval 秒重新扫描一次。如果你希望了解更详细的配置项说明,可以查询这里,不过基本配置也够用了

最终效果

好了,Bili-sync的配置和简介就结束了,看着收藏夹的视频源源不断被保存到本地,妈妈再也不用担心我的视频被叔叔删除了。

视频导入Jellyfin后的效果

视频播放效果