amtoaer / bili-sync

由 Rust & Tokio 驱动的哔哩哔哩同步工具
https://bili-sync.allwens.work
MIT License
348 stars 32 forks source link

在video_name/page_name中添加清晰度信息 #90

Closed ky0utarou closed 2 months ago

ky0utarou commented 2 months ago

rt, 是否可以在video_name/page_name中添加视频所对应的清晰度这一变量?这样可以从文件名中直接获得清晰度信息

工具很好用,感谢作者🙏🏻

amtoaer commented 2 months ago

这个不太好实现,我倾向于不做。 具体来说,现在程序是从上到下处理的,在处理 video_name 时实际上还没有下载任何分页,拿不到具体的视频流。就算可以拿到,多页视频的多个页也可能具有不同的分辨率,所以在 video_name 中设置分辨率基本是无法实现的。 再说 page_name,现在程序是依赖数据库中存储的固定信息提前生成好 page_name,获得完整的目标路径信息后并发运行 下载视频、下载封面、生成视频 nfo,下载弹幕 四个任务。如果要支持这个功能,那么在生成 page_name 前就要提前获取视频流信息,需要将下载视频任务拆分为获取流和下载流。成功获取流后才能拼出 page_name、运行后续任务。调整代码结构还是其次,主要这样会引入一个新问题:视频流信息每次都是实时获取的,在引入分辨率后,即使 page_name 模板完全相同,也无法保证它每次都会产生一致的结果,我不太想在“路径生成”这种理应十分稳定的地方引入这种不确定性。 总体来说,清晰度与其它字段最大的不同,在于其它字段都是可以被存储在数据库中的静态数据,而视频流的清晰度是实时获取的动态数据。我认为存储路径应该完全由本地存储的静态数据构造,而不应该依赖 b 站的实时接口返回。

ky0utarou commented 2 months ago

感谢回复,原来是这样。之前在用BBDown是可以指定的,以为这边也只是添加一下字段的问题,那看来实现方式有比较大的不同。

关于这点"其它字段都是可以被存储在数据库中的静态数据"有个疑问,有的up主会偶尔改名字,想问下对于这种情况目前是如何处理的?如果改名前保存过视频,改名后还会再次保存吗?

amtoaer commented 2 months ago

嗯嗯,这个项目比起一次性的下载工具会额外记录一些状态信息,还内建了失败若干次内重试的机制,所以做起来会有一些限制,没办法像一次性的下载工具那样全部实时请求,遇到问题直接报错。 up 主改名对视频状态不会有影响,现在视频是使用 (收藏夹 id,视频 bvid) 标记的,其它字段变更不会影响视频的下载状态。同时,由于这个程序的主要目的是“归档”,所以只要视频信息成功获取过一次并填充到数据库中,那接下来的 nfo 生成都会使用数据库中的信息,而不会再尝试刷新了。

ky0utarou commented 2 months ago

了解了,感谢