Giter Club home page Giter Club logo

bilibilimemory's Introduction

Bilibili Memory 哔哩哔哩记忆

介绍

哔哩哔哩(Bilibili,又称B站) 指定收藏夹中、UP主的或单独的投稿中的视频, 下载备份到本地磁盘,避免线上视频被删除。

支持通过每次更新后生成的网页,查看本地投稿信息。

Get videos in user created favorite folders on bilibili, and save them to the local disk to prevent the online videos from being deleted.

使用 FFmpeg 合并m4s音频和视频

详细介绍:B站收藏备份工具设计和实现

运行

编辑配置

编辑config.ini

编辑备份目标

  • status 查看备份目标
  • add 增加备份目标收藏夹和条件
  • rm 删除备份目标条目
python main.py aim
    status
    add <收藏夹ID1>[,<收藏夹ID2>,...,<收藏夹IDN>] [-a <最早发布时间>] [-d <投稿时长秒数>]
    rm <备份目标收藏夹序号> <备份目标条件序号1>[,...,<备份目标条件序号N>]
    addm <投稿BV ID1>[,...,<投稿BV IDN>]
    rmm <投稿BV ID1>[,...,<投稿BV IDN>]
    addu <UP主 ID1>[,...,<UP主 IDN>] [-a <最早发布时间>] [-d <投稿时长秒数>]
    rmu <备份目标UP主序号> <备份目标UP主条件序号1>[,...,<备份目标UP主条件序号N>]

最早发布时间 格式2022-09-10

同步备份目标对应的文件

查看需要执行的操作,确认后执行,执行后更新所有投稿信息网页。

python main.py update

清除旧日志文件

删除旧日志文件。保留旧日志个数,缺省为10,至少为1(当前日志)。

python main.py clear [保留旧日志个数]

文件保存结构

  • output \ 输出目录
    • all \ 保存所有下载合并后的投稿文件
      • [bv_id] ( _[pageID] ) .mp4 视频
      • [bv_id].json 投稿信息
      • [bv_id].jpg 封面图片
    • deleted \ 已被删除的投稿文件
      • 同上3类的硬链接
      • [bv_id]_[validatedTitle].name 投稿标题标记
      • [bv_id] ( _[pageID] ) _[validatedPageTitle].name 投稿分P标题标记
    • meta \ 元数据目录
      • index.html 每次更新后生成的网页,包含所有本地投稿信息
      • aim.json 备份目标收藏夹和筛选条件
      • local.json 本地现有投稿的bv_id
      • deleted.json 本地保存线上已删除的bv_id
      • lost.json 已丢失收藏的残余信息
    • tmp \ 临时目录
      • tmp_[audio|video].m4s 正在下载的视频音频文件(同时只有一个,因此无需分P)
      • tmp_media (_[pageID]) .mp4 已合并的较靠前分P
      • tmp_[dateTime].log 日志临时文件

程序流程

备份目标

增加备份目标

将投稿,或附带筛选条件的收藏夹或UP主作为备份目标。

筛选条件包括发布时间戳和时长。

同一收藏夹或UP主多个条件中满足任一,就选中作为备份目标。

删除备份目标

从备份目标中删除指定投稿,或删除指定编号收藏夹或UP主的指定编号的筛选条件。

显示所有备份目标

显示所有备份目标收藏夹、UP主和投稿,和每个收藏夹和UP主的所有筛选条件。

更新

查看更新计划并执行

  • 读取更新备份目标aim.json
  • 读取本地已备份投稿和已删除投稿信息
  • 按条件获取收藏夹中投稿信息,分为未删除投稿信息和已删除投稿残余信息
  • 创建执行计划:
    • 新收藏(本地不存在,线上未删除):下载投稿
    • 新删除(本地存在,线上有残留记录):更新本地备份状态
    • 新丢失(本地不存在,线上有残留记录):下载残留记录
  • 询问是否执行更新
  • 执行更新后,更新 meta\index.html 本地投稿。

TODO

根据使用体验争取不时更新 如果有时间的话

  • 增加、显示、删除备份目标收藏夹
  • 查看将要更新的视频信息
  • 执行更新
  • 自动删除旧日志,只保留最近10个日志文件
  • 支持强制备份指定BV的投稿
  • 支持设置备份目标UP主
  • 对于有阅读价值的数据,保存为JSON的同时,保存为HTML网页(MS Excel默认将CSV按GBK打开,保存UTF-8会乱码)
  • 支持配置目录
  • 另行按收藏夹保存全部投稿
  • 支持使用cookie下载私密收藏夹
  • 支持更新已下载但被up主更新的视频
  • 支持从第三方平台获取丢失投稿

bilibilimemory's People

Contributors

yusitong1999 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.