Bilibili安卓客户端缓存视频导出小记

admin 2022年5月17日11:34:32评论96 views字数 1836阅读6分7秒阅读模式

0x01 我有一个想要搞事情的想法

介于xxx原因,想要把B站的视频导出来,于是乎就折腾了一番

0x02 她是咋缓存视频的

一波搜索,发现其视频存在/sdcard/Android/data/tv.danmaku.bili/download/文件夹

tv.danmaku.bili -> danmaku 奇奇怪怪的名称,弹码(幕)库?

然后又分两种类型的视频,分别存放于两种格式命名的文件夹

  • 普通视频 : (AV编号) xxxxxxxxx
  • 番剧视频 : (s_番号) s_xxxx

普通视频

进入某一个普通视频目录

/sdcard/Android/data/tv.danmaku.bili/download/xxxxxxxxx

然后是以片段序数命名的文件夹 1、2、3、…etc,也就是默认P1、P2那种的

再进入第一个片段目录

/sdcard/Android/data/tv.danmaku.bili/download/xxxxxxxxx/1

你会看到一个文件夹和两个文件

  • lua.flv.bili2api.X 视频目录(不同的视频X是不同的。。具体是啥我没研究)
  • danmaku.xml 弹幕文件
  • entry.json 关于视频的一些相关信息
    • avid
    • title
    • type_tag : ‘lua.flv.bili2api.X’
    • part 片段名称
    • etc,还有一些视频时长、封面啥的信息

再进入视频目录

/sdcard/Android/data/tv.danmaku.bili/download/xxxxxxxxx/1/lua.flv.bili2api.X

这里就是最终的视频目录了

B站的视频在客户端是以blv为后缀命名的FLV(Flash Video)文件, 具体信息 ffmpeg -i x.blv

再然后就是,视频时长比较长,就会分割成一段一段的,0.blv, 1.blv,…x.blv

除了视频文件,还有一类x.blv.4m.sum校验文件以及 index.json 索引信息文件

番剧视频

s_xxxx里面就是每一集视频的ep编号, 和普通视频的片段目录差不多,其他都一样

小结

普通视频

/sdcard/Android/data/tv.danmaku.bili/download/av编号/片段序号/lua.flv.bili2api.X/xx.blv

番剧视频

/sdcard/Android/data/tv.danmaku.bili/download/s_番号/ep编号/lua.flv.bili2api.X/xx.blv

视频信息

entry.json

0x03 怎么把视频弄出来

手工(NONONO)

我傻啊,手工

写代码

于是乎,New 了一个 Android 工程 XXXXX

  • get SdcardPath
  • exists SdcardPath + ‘/Android/data/tv.danmaku.bili’ ?
  • 遍历 download 目录 -> 遍历
  • 读取 entry.json 找到 lua.flv.bili2api.X -> 遍历 x.blv

Java比较难搞定,各种复杂的东西都弄的头晕

遍历的数据存放在HashMap

然后把标题put到adapter,以ListView展示出来

ListView设置监听,点击就导出~~

导出,导出,导出,但是有一个问题,被切片了的 x.blv 咋整、、一波导出???

研究了一下,觉得用ffmpeg合并一下比较好

然后Google到了 FFmepg-Android

ffmpeg 怎么把多个flv合并起来???

反正各种Google也只看到一个比较麻烦的方法

ffmpeg -i 0.blv -c copy -bsf:v h264_mp4toannexb -f mpegts 0.ts
ffmpeg -i 1.blv -c copy -bsf:v h264_mp4toannexb -f mpegts 1.ts
ffmpeg -i n.blv -c copy -bsf:v h264_mp4toannexb -f mpegts n.ts

ffmpeg -i "concat:0.ts|1.ts|ts" -c copy -bsf:a acc_adtstoasc -movflags +faststart output.mp4

打算就这样子玩的时候,居然发现 FFmepg-Android 一次只能执行一个任务,这就需要掌握android的子线程串行任务了。。。

然而我实在怼不动了。。。。。

毕竟是业余开发、Java这种高大上的东西玩不动。。

学Java救不了中国
PHP是世界上最好的语言

0x04 无奈

不玩了,玩不动了

BilibiliHelper

FROM : virzz.com | Author:Virink

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月17日11:34:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Bilibili安卓客户端缓存视频导出小记https://cn-sec.com/archives/1012952.html

发表评论

匿名网友 填写信息