使用nodejs将bilibili缓存的视频转mp4格式
首先,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格式相关推荐
- Node.js脚本项目合集(一):Node.js+FFmpeg实现批量从B站导出离线缓存视频到mp4格式,mp4转mp3,实现听歌自由
Node.js脚本项目合集(一):Node.js+FFmpeg实现批量从B站导出离线缓存视频到mp4格式,mp4转mp3,实现听歌自由 前言 一.准备工作以及介绍 1.什么是FFmpeg 2.FFmp ...
- 将qlv类型的视频转换mp4格式的最新做法
将qlv类型的视频转换mp4格式的最新做法 现在,很多视频APP都用了加密工具,比如腾讯下载的qlv视频只能腾讯APP播放.如何将QLV文件转化为了MP4 文件,我在网上百度了一个多小时,试了各种方法 ...
- java 将avi视频转换为mp4格式并获取视频文件信息
引入jar包 <!-- https://mvnrepository.com/artifact/ws.schild/jave-all-deps --><dependency>&l ...
- 不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式)
不用 qlv 格式转换成 mp4 - 优雅的下载腾讯视频(mp4 格式) 问题描述: 朋友说离线腾讯视频是 qlv 格式的,只能使用腾讯视频软件打开.让我帮忙想想办法,能不能将 qlv 格式转换成 m ...
- 视频转mp4格式转换器如何把其他格式的视频转换成mp4格式 1
冬天到了,很多人都放弃出去游玩的念头.而选择宅在家里开启冬眠模式.这时很多人无聊时就会选择追剧,追剧是最容易打发时间的娱乐方式之一.最近朋友就遇到一个棘手的问题,他用腾讯视频下载了一个电视,但是导入到 ...
- mpg视频转换mp4格式?
mpg视频转换mp4格式?.mpg是什么文件的格式呢?应该绝大多数的小伙伴都不知道吧,因为它的使用范围真的非常小,它是有种视频文件格式,相信90%的小伙伴都没接触过.mpg格式虽然已经被绝大多数的计算 ...
- 采用ffmpeg转换flv视频到mp4格式时报错的解决方案
1. ffmpeg支持如下格式转换视频 $ffmpeg -i 源文件 目标文件 如: $ffmpeg -i hello.flv hello.mpeg $ffmpeg -i hello.flv hel ...
- win7文件夹加密软件_软件安装 | 各种视频转MP4格式
点击关注,这个圣诞我想和你过 现在很多同学都喜欢视频剪辑之类的,但是有时候就会有苦恼.在TX,AQY,YK等视频平台下载的视频素材格式并不是MP4格式,难以进行操作.这怎么办呢,我们今天给大家带来一些 ...
- 如何将腾讯视频转换为MP4格式
如何将腾讯视频转换为MP4格式 (1)安装去广告版本的腾讯视频 (2)打开腾讯视频随便下载一个文件并打开破解文件 (3)以管理员身份打开 (4)选择文件点击开始转换即可 软件下载地址为"我的 ...
最新文章
- Beaglebone Black的启动
- 北交大计算机学院复试经验,2014考研复试:过来人考研复试经验谈-北交大计算机系...
- 美团面试题:缓存一致性,我是这么回答的!
- 【BIRT】02_开发一张简单的报表
- Android Studio Gradle Plugin开发入门指南
- 用shc加密shell脚本
- python汉语叫什么意思_Python是什么-百度经验
- Typora 语法结构与功能
- 学习仿今日头条疫情地图+用户画像(echarts)
- matlab资源管理器,资源管理器怎么打开?打开资源管理器的5种方法
- LLVM WEEKLY系列停止转载
- 改善webERP运行速度很慢的问题
- 远程办公易发数据泄露?教你5个策略防患于未然
- mysql proxy atlas_mysql-proxy Atlas
- Win10图标变白纸了,恢复方法
- MATLAB之楚列斯基分解法(九)
- 火车票报销凭证打印跑政通
- 计算机科学与技术与光电,光电信息科学与工程考研科目有哪些?
- 用友数据库类型 mysql_用友软件用的是什么数据库?
- cad字体安装_如何安装CAD字体库,让打开图纸时显示?的现象都消失?【AutoCAD教程】...
热门文章
- Affinity Photo for Mac (专业级修图软件) v1.10.4
- Matlab中导入新工具包步骤
- unity | EventTrigger(Button按钮按下、抬起等时执行的方法)
- 什么是HTML 实体?
- Maven项目打包后使用cmd命令运行
- # 02 初入大学, 男人之间的告别
- VC++创建.rc资源文件
- git clone出现 fatal: unable to access ‘https://github.com/...‘的两种解决方法
- 基于DFA算法实现文章敏感词过滤
- 算法笔记 P103 例题:【PAT A1025】PAT Ranking