首先,bilibili是一个非常好的学习资源平台!!!
b站上有非常丰富的学习资源,有时害怕作者删除资源,我会下载缓存到手机上。但是由于是缓存资源,占用了手机大量的内存,并且还没发迁移,因为只有使用b站才能打开这些缓存的视频,所以,我仔细研究了一下,最后把它们转成了mp4,保存到了我的固态硬盘上!
首先需要知道b站缓存的视频都保存到了手机的什么位置,我是安卓手机,大家可以参考我的缓存地址
\Android\data\tv.danmaku.bili\download
这里面的文件就都是缓存的视频了
例如我的文件夹结构是

| 426829839| c_728671222| 64| audio.m4s| index.json| video.m4s| danmaku.xml| entry.json

**首先需要安装ffmpeg,ffmpeg的下载地址是https://ffmpeg.org/,下载之后还需要配置环境变量,因为后续nodejs里面用到了shelljs。**我们主要的任务是把audio.m4s和video.m4s变成视频,具体代码如下

import fs from "fs"
import path from "path"
import shell from "shelljs"type BilibiliVideoCache2Mp4 = (options: {curDirPath: string,      // 当前递归目录位置 isTarget?: boolean,      // 是否找到了需要转换成mp4的目标文件夹outputFileName?: string, // 转换成mp4的视频名dir?: string             // 整个视频合集文件夹的名字
}) => voidconst mkdirSync = (targetPath: string) => {if (!fs.existsSync(targetPath)) fs.mkdirSync(targetPath)
}const bilibiliVideoCache2Mp4Wrap = (entry: string, output: string) => {mkdirSync(output)const bilibiliVideoCache2Mp4: BilibiliVideoCache2Mp4 = ({ curDirPath, isTarget, outputFileName, dir }) => {if (isTarget) {/* 使用replaceAll去除空格不然ffmpeg会报错(eg:Unable to find a suitable output format for 'XXX')这里需要注意targetPath和outputFileName不应该有特殊的字符比如【 】,不然ffmpeg也会报错(eg:Unable to find a suitable output format for 'XXX')*/let targetPath = `${output}/${dir}`.replaceAll(' ', '')mkdirSync(targetPath)outputFileName = outputFileName?.replaceAll(' ', '')shell.exec(`ffmpeg -i ${curDirPath}\\video.m4s -i ${curDirPath}\\audio.m4s -codec copy ${targetPath}/${outputFileName}.mp4`)return}let files = fs.readdirSync(curDirPath);files.forEach(function (file: string) {let stat = fs.statSync(curDirPath + '/' + file)if (stat.isDirectory()) {// 文件夹名字如果是64的话,说明已经到了目标文件夹audio.m4s和video.m4s就在里面if (file === '64') {let json = JSON.parse(fs.readFileSync(path.join(curDirPath, 'entry.json'), 'utf-8'))// json.page_data.part是这组视频的名字,json.title是单个视频的名字bilibiliVideoCache2Mp4({ curDirPath: path.join(curDirPath, file), isTarget: true, outputFileName: json.page_data.part, dir: json.title })}else bilibiliVideoCache2Mp4({ curDirPath: path.join(curDirPath, file) })}});}bilibiliVideoCache2Mp4({curDirPath: entry})
}export default bilibiliVideoCache2Mp4Wrap

下面是调用

import bilibiliVideoCache2Mp4 from "./utils"
const path = require("path")bilibiliVideoCache2Mp4(path.join(__dirname, 'entry'), path.join(__dirname, 'output'))

bilibiliVideoCache2Mp4函数的第一个参数是需要转换的视频入口,第二个参数是转换之后的视频的出口

具体代码结构可以参考我的github的demo,github地址是https://github.com/chaochaoer/bilibiliVideoCache2Mp4

使用nodejs将bilibili缓存的视频转mp4格式相关推荐

  1. Node.js脚本项目合集(一):Node.js+FFmpeg实现批量从B站导出离线缓存视频到mp4格式,mp4转mp3,实现听歌自由

    Node.js脚本项目合集(一):Node.js+FFmpeg实现批量从B站导出离线缓存视频到mp4格式,mp4转mp3,实现听歌自由 前言 一.准备工作以及介绍 1.什么是FFmpeg 2.FFmp ...

  2. 将qlv类型的视频转换mp4格式的最新做法

    将qlv类型的视频转换mp4格式的最新做法 现在,很多视频APP都用了加密工具,比如腾讯下载的qlv视频只能腾讯APP播放.如何将QLV文件转化为了MP4 文件,我在网上百度了一个多小时,试了各种方法 ...

  3. java 将avi视频转换为mp4格式并获取视频文件信息

    引入jar包 <!-- https://mvnrepository.com/artifact/ws.schild/jave-all-deps --><dependency>&l ...

  4. 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式)

    不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式) 问题描述: 朋友说离线腾讯视频是 qlv 格式的,只能使用腾讯视频软件打开.让我帮忙想想办法,能不能将 qlv 格式转换成 m ...

  5. 视频转mp4格式转换器如何把其他格式的视频转换成mp4格式 1

    冬天到了,很多人都放弃出去游玩的念头.而选择宅在家里开启冬眠模式.这时很多人无聊时就会选择追剧,追剧是最容易打发时间的娱乐方式之一.最近朋友就遇到一个棘手的问题,他用腾讯视频下载了一个电视,但是导入到 ...

  6. mpg视频转换mp4格式?

    mpg视频转换mp4格式?.mpg是什么文件的格式呢?应该绝大多数的小伙伴都不知道吧,因为它的使用范围真的非常小,它是有种视频文件格式,相信90%的小伙伴都没接触过.mpg格式虽然已经被绝大多数的计算 ...

  7. 采用ffmpeg转换flv视频到mp4格式时报错的解决方案

    1. ffmpeg支持如下格式转换视频 $ffmpeg -i 源文件  目标文件 如: $ffmpeg -i hello.flv hello.mpeg $ffmpeg -i hello.flv hel ...

  8. win7文件夹加密软件_软件安装 | 各种视频转MP4格式

    点击关注,这个圣诞我想和你过 现在很多同学都喜欢视频剪辑之类的,但是有时候就会有苦恼.在TX,AQY,YK等视频平台下载的视频素材格式并不是MP4格式,难以进行操作.这怎么办呢,我们今天给大家带来一些 ...

  9. 如何将腾讯视频转换为MP4格式

    如何将腾讯视频转换为MP4格式 (1)安装去广告版本的腾讯视频 (2)打开腾讯视频随便下载一个文件并打开破解文件 (3)以管理员身份打开 (4)选择文件点击开始转换即可 软件下载地址为"我的 ...

最新文章

  1. Beaglebone Black的启动
  2. 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
  3. 美团面试题:缓存一致性,我是这么回答的!
  4. 【BIRT】02_开发一张简单的报表
  5. Android Studio Gradle Plugin开发入门指南
  6. 用shc加密shell脚本
  7. python汉语叫什么意思_Python是什么-百度经验
  8. Typora 语法结构与功能
  9. 学习仿今日头条疫情地图+用户画像(echarts)
  10. matlab资源管理器,资源管理器怎么打开?打开资源管理器的5种方法
  11. LLVM WEEKLY系列停止转载
  12. 改善webERP运行速度很慢的问题
  13. 远程办公易发数据泄露?教你5个策略防患于未然
  14. mysql proxy atlas_mysql-proxy Atlas
  15. Win10图标变白纸了,恢复方法
  16. MATLAB之楚列斯基分解法(九)
  17. 火车票报销凭证打印跑政通
  18. 计算机科学与技术与光电,光电信息科学与工程考研科目有哪些?
  19. 用友数据库类型 mysql_用友软件用的是什么数据库?
  20. cad字体安装_如何安装CAD字体库,让打开图纸时显示?的现象都消失?【AutoCAD教程】...

热门文章

  1. Affinity Photo for Mac (专业级修图软件) v1.10.4
  2. Matlab中导入新工具包步骤
  3. unity | EventTrigger(Button按钮按下、抬起等时执行的方法)
  4. 什么是HTML 实体?
  5. Maven项目打包后使用cmd命令运行
  6. # 02 初入大学, 男人之间的告别
  7. VC++创建.rc资源文件
  8. git clone出现 fatal: unable to access ‘https://github.com/...‘的两种解决方法
  9. 基于DFA算法实现文章敏感词过滤
  10. 算法笔记 P103 例题:【PAT A1025】PAT Ranking