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 无奈
不玩了,玩不动了
FROM : virzz.com | Author:Virink
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论