就算世界终结,也无所谓

愿你有一天,能与你最重要的人重逢

使用 FFmpeg 拼接 Bilibili Android 客户端下载的分段视频文件

BGM: 夢灯籠 – RADWIMPS

动画《你的名字。》OP


最近在刷君名,本来想用电视看,然而电视上没有 Bilibili 客户端,电信的 IPTV 的画质又烂的一批,我又不想把笔记本接上电视看,最后无奈只能用手机。然而手机屏幕小还裂了,实在是不爽。

其实最开始我是想用唧唧下载视频源文件的(弹幕就算了,君名这种番开弹幕我觉得会瞬间出戏),然而应该是 B 站那边做了保护吧,唧唧虽然能正常识别 AV 号但是下载的时候会报错。这就很尴尬了啊。

昨天晚上突然想到 B 站 Android 客户端有缓存功能,而且君名没有被版权受限,所以为什么不能想办法把缓存好的视频处理一下拷到 U 盘里插到电视上播放呢 #(滑稽)

所以,来搞事吧!

关闭 WLAN,打开移动数据网络,打开 Bilibili Android 客户端,点开君名,缓存,一气呵成。

缓存好的文件会被存放在手机内置存储空间或 SD 卡的 /Android/data/tv.danmuku.bili/download 目录下,看看目录结构:

13662970(视频对应的 AV 号)
|--1(视频各 P)
|  |--lua.hdflv2.bbapi.bd(视频文件存储目录)
|     |--0.blv(视频分段文件)
|     |--0.blv.4m.sum(应该是视频文件校验信息)
|     |--1.blv
|     |--1.blv.4m.sum
|     |--2.blv
|     |--2.blv.4m.sum
|     |--...
|  |--danmuku.xml(弹幕库文件)
|  |--entry.json(大概是视频信息?)

可以看到,Blibili Android 客户端缓存的视频是以 .blv 格式存储的分段文件。看起来没有读取这个 .blv 文件的方法,但是如果你用 PC 上的视频播放器打开,你就会发现….

这他妈不就是个 .flv 视频文件吗!!!!!!!!

《使用 FFmpeg 拼接 Bilibili Android 客户端下载的分段视频文件》

对就是 1080P,一上架就付费的感觉真好

所以你大可直接把这些文件拷到 U 盘里,插到电视上用支持读取 .flv 视频文件的播放器打开观看。但是播完一段分段视频就要停下来加载下一段视频,尤其是在泷和三叶在黄昏之时相遇的时候这种被打断的感觉非常不爽啊。

那么,有没有一种方法——

有!

早些年我也用过格式工厂一类的软件进行一些简单的视频拼接,但是这类软件处理时间屌慢不说,貌似都是有损合并,画质和屎一样,这根本不能忍啊。最后还是决定用 FFmpeg 来合并视频。

久仰 FFmpeg 这个养活了绝大多数国产视频处理工具的开源项目的大名,只是一直不知道怎么用。不过还好,在友链里一翻就找到了一篇文章

那么,发车吧!

君名的缓存文件里总共有 18 个分段视频文件(0.blv - 17.blv),所以你只需要新建一个文件(e.g. files.txt),在里面写上如下内容:

# 引号内是视频文件的路径,相对路径、绝对路径均可
file '/path/to/0.blv'
file '/path/to/1.blv'
file '/path/to/2.blv'
...
file '/path/to/16.blv'
file '/path/to/17.blv'

然后在终端中输入如下指令:

# 使用 Windows 的同学可以在 WSL 中执行这条指令
ffmpeg -f concat -i /path/to/files.txt -c copy /path/to/output.mp4
# 参数说明:
# -i 设定输入文件
# -f 设定编码器,这里使用 concat 无损合并
# -c 流选择器,这里的 copy 是指复制编码流
# 最后是输出文件,不一定要是 .mp4,你改成其他格式如 .avi 也是可以的

处理速度炒鸡快,duang~ 地一下就好了,速度差不多就是你的硬盘的 I/O 速度。我开任务管理器看见过 FFmpeg 飚车速度开到 69MB/s 来着…如果你是 SATA 3 接口的硬盘应该会更快(我是辣鸡 SATA 2),用 SSD 的特别是 NVMe 的 SSD 的记得绑好安全带,别被甩出去了。


早上醒来的时候,不知道为什么自己在哭。这样的事时不时就会发生。
明明做过的梦,却总是想不起来,只是…
只是觉得有什么消失了。这种感觉,即使醒来后也会延续很久。
我一直在寻找着什么,寻找着某个人。
我开始被这种感觉所困扰,大概是从那一天开始的。
那一天,流星落下的那一天,那情景就像是…
就像是,梦里的景色一样。只是纯粹觉得
这景色真是太美了。

《使用 FFmpeg 拼接 Bilibili Android 客户端下载的分段视频文件》 《使用 FFmpeg 拼接 Bilibili Android 客户端下载的分段视频文件》

参考链接

点赞
由于 LiveRe 使用的头像 API 不支持 HTTPS,现在已经禁用了 QQ、微信和微博的 OAuth 登录。
我也不想就这样因噎废食,但事实是我根本没有能力去搭建一个反代。
如果你发现了有评论被删除的痕迹,八成是这些评论使用的 OAuth 方式是 QQ 或者微信或者微博。