利用ffmpeg转码B站缓存

发表于:2021-07-12 11:51
技术
热度:163
喜欢:0

由于工作原因驻场开发,地区限制,酒店竟没有wifi,所以开了流量套餐

其中就包括B站在线观看,缓存视频单独走流量计算,每个月有30G的流量,

虽然可以愉快的手机刷B站,但是明显PC看视频才更爽,

且开热点给PC看B站的流量是不算在单独流量内的

所以就想到了,利用手机缓存视频,传到PC看

翻了一下,安卓不知道何时之后的更新,B站客户端缓存路径不再刻意配置

直接放在应用的路径下面

以魅族Flyme9 安卓8为例,B站缓存目录在

bash 复制代码
/Andriod/data/tv.danmaku.bili/download 

拷贝整个文件夹至电脑

一列数字开头的文件夹,应该就是ID或者番号

再里面是一个c_的文件夹,里面有

80

audio.m4s
index.json
video.m4s
danmaku.xml
entery.json

entery.json 入口文件,其中title就是视频名称
danmaku.xml 弹幕文件
80 应该是视频清晰度的区分

拷贝到一个文件夹下面,下载ffmpeg,我是放在了用户根目录,相当于 ~路径

javascript 复制代码
const fs = require('fs');
const path = require('path');
const { execSync } = require('child_process');

const bash = (dirName, title) => `~/ffmpeg -i ${dirName}/video.m4s -i ${dirName}/audio.m4s -codec copy ${title}.mp4`
const fileListStr = execSync(`find ${__dirname} -name 'entry.json'`, {
  encoding: 'utf-8'
});

fileListStr.split('\n').filter(Boolean).forEach(file => {
  // file就是entery.json
  const config = fs.readFileSync(file, 'utf-8');
  let { title } = JSON.parse(config);
  // 注意这里视频标题可能会有空格,转换成加号
  title = title.replace(/ /g, '+');
  try {
    const dirName = path.dirname(file)
    const output = `${__dirname}/temp/${title}`
    const commond = bash(`${dirName}/80`, output)
    execSync(commond);
  } catch (error) {
    fs.appendFileSync('./error.txt', title + '\n')
  }
})