基于 bilibili win10客户端下载的Flv视频,有部分是分散在多个文件中的,需要合并成一个整体的视频文件的考虑,用nodejs尝试进行合并操作;
如果涉及版权问题,项目将立刻关闭
- bilibilimerge.js bilibili客户端下载到本地的flv文件合并,依赖ffmpeg处理合并,yamdi处理元信息
- bilibilidownloader.js 基于puppeteer的抓取bilibili页面请求信息,下载文件并做合并(依赖ffmpeg)处理,yamdi处理元信息
- cctvdownloader.js 下载cntv的mp4视频文件
- progressmanager.js 下载进度显示处理
- flvmeta.js flv文件元信息提取
- flvmeta.test.js flv元信息测试文件
- flvmerge.js flv文件合并
- flvmerge.test.js flv合并测试文件
- 提取flv的元信息
- 合并多个flv流信息
- 重写元信息(关键帧和时间长度等)
yarn add puppeteer --ignore-scripts
不安装Chromium,使用chrome处理
格式的解析过程主要参考,其中有些没有明确的内容进行记录
9个字节,固定长度
由
4个字节(表示上一个tag整体长度) + Tag
循环叠加而成 Header后的第一个4个字节为 00 00 00 00,因为它之前并没有Tag
脚本Tag一般只有一个,是flv的第一个Tag,用于存放flv的信息
格式: 数据类型+(数据长度)+数据
数据类型 | 数据长度字节数 | 数据内容 |
---|---|---|
0 = Number type | 8字节 | 8个字节的值就是number的值 |
1 = Boolean type | 1字节 | 1个字节的值,1为true,0为false |
2 = String type | 2字节 | 2个字节的值为数据内容的长度,读取对应长度即为数据内容 |
3 = Object type | 2字节 | 2个字节的值为数据内容的长度,读取对应的长度即为数据内容,接下来的第1个字节为数据类型,根据数据类型获取对应的数据(可嵌套),最终整个以 000009 结尾(3个字节的数据,值为9) |
4 = MovieClip type | ||
5 = Null type | ||
6 = Undefined type | ||
7 = Reference type | 2个字节 | |
8 = ECMA array type | 4字节 | 4个字节的值为后续对应数据的个数(即数组长度),数组中的每个值,类似键值对,键都是string类型,所以直接读取2个字节判定string长度,值类型非固定,最终整个以 000009 结尾(3个字节的数据,值为9) |
10 = Strict array type | 4字节 | 4个字节的值为后续对应数据的个数(即数组长度),数组中的每个值,非固定类型,读取1个字节判定 |
11 = Date type | 10字节 | 8个字节为Double,时间戳毫秒数,后2个字节为有符号的数字 |
12 = Long string type | 4字节 | 类似string type,只是长度不同 |
1.flvmeta c/c++版本的flv元信息编辑
2.node-flvmeta 基于flvmeta封装的node版本
3.BiliBiliMerge java版本
5.node-flv