使用 bili-sync 保存 B 站视频

目标 & 背景

有时候 B 站的视频,收藏后会被下架,或者作者自己删除了,等后面想回去接着看,收藏夹中只能看到该视频已失效,也完全记不得这个视频是啥

再加上家里的电视都是使用 Apple TV,想要给家人看非常麻烦,直到前段时间看到了 bili-sync 这个项目,该项目基于 bilibili-api 使用 python 进行开发

本篇文章基于 bili-sync 1.1.8 版本,如有不同,请参考官方文档

目录层级

首先按照下方层级创建对应的文件及文件夹,注意 config.json 文件是需要手动创建的

.
└── docker
   └── bli-sync
      ├── config
      │  └── config.json
      └── data

config.json 中填入如下内容

这里的 interval 我设置的是 5,也就是 5 分钟刷新一次 B 站收藏夹

{
    "sessdata": "",
    "bili_jct": "",
    "buvid3": "",
    "dedeuserid": "",
    "ac_time_value": "",
    "interval": 5,
    "path_mapper": {
    },
    "subtitle": {
        "font_name": "微软雅黑,黑体",
        "font_size": 40.0,
        "alpha": 0.8,
        "fly_time": 5.0,
        "static_time": 10.0
    },
    "stream": {
        "video_max_quality": 127,
        "audio_max_quality": 30280,
        "video_min_quality": 16,
        "audio_min_quality": 30216,
        "codecs": [
            "av01",
            "avc",
            "hev"
        ],
        "no_dolby_video": false,
        "no_dolby_audio": false,
        "no_hdr": false,
        "no_hires": false
    },
    "paginated_video": true
}

B 站基础信息获取

bilibili-api 文档 中讲的比较详细,但是在我实际使用时,经常会碰到 bili-sync 自己挂了的情况,如果你也碰到类似情况,建议参考下方流程

  • 首先打开 chrome 浏览器
  • 新建一个 无痕窗口 (注意!一定要使用无痕窗口)
  • 登录 B 站
  • 在开发工具中找到 B 站的 cookieimage
    • 在这里获取 sessdatabili_jctbuvid3dedeuserid 这四个属性值
  • 在控制台窗口输入 window.localStorage.ac_time_value 获取 ac_time_value image 最后将这 5 个属性,填到上面创建的 config.json 文件中

收藏夹路径映射

进入你 B 站的收藏页面,比如我这里的 学习 收藏夹,点击右边的学习即可进入该收藏夹的 web 页面

如果你的收藏夹是空的,是点不进去的,至少需要一个收藏

image

此时查看浏览器的地址,在 ml 后面的内容就代表了你当前收藏夹的 id

https://www.bilibili.com/medialist/detail/ml123456789

接着配置 config.jsonpath_mapper 的具体内容,该属性是一个 map,如果你有多个收藏夹,多加几行即可,如上文中我的学习收藏夹,将 id 填入,后面对应的是 bili-sync 在容器中的映射位置,其中 /Videos/Bilibilis 是固定的,后面的 学习 就是你自己要起的名字

    "path_mapper": {
        "123456789": "/Videos/Bilibilis/学习/",
        "456": "/Videos/Bilibilis/学习2/"
    },

docker 配置

这里需要映射三组路径,configdata 就是 目录层级 中需要创建的内容,而这里的 /volume1/视频/link/Bilibili 代表视频文件到底存放在哪里

services:
  bili-sync:
    image: amtoaer/bili-sync:1.1.8
    tty: true
    volumes:
      - /volume1/视频/link/Bilibili:/Videos/Bilibilis/ # 视频文件
      - /volume1/docker/bili-sync/config:/app/config/ # 配置文件
      - /volume1/docker/bili-sync/data:/app/data/ # 数据库
    environment:
      - TZ=Asia/Shanghai
    restart: always
    network_mode: bridge
    hostname: bili-sync
    container_name: bili-sync
networks: {}

Emby 配置

bili-sync 在整理元数据时,使用的是 Emby 的标准,因此我之前搭建的 Plex 就无法正确识别元数据。所以为了可以正确运行,还需要在群晖上安装 Emby,这个过程比较简单,这里就不介绍了。在 Emby 添加媒体库时,我这里只打开了下面三个开关,其他的所有功能全部关闭

image

最后

日常我使用 infuse 作为我所有设备的终端播放,得益于 infuse 支持的库比较全,我可以通过增加 Emby 服务,将现有的 Plex 数据合并到一起,平日需要看 B 站的视频,直接在 infuse 选择即可,省去两个应用切来切去的麻烦

整体 bili-sync 在我这里已经平稳运行了挺长时间,几乎无感使用,尤其是新版本作者增加了分 P 下载,整理为集合的功能,非常舒服