当前位置: 首页 > news >正文

B站缓存视频M4S合并MP4(js + ffmpeg )

文章目录

      • B站缓存视频转MP4(js + ffmpeg )
      • 1、说明
      • 2、ffmpeg
        • 2.1 下载地址
        • 2.2 配置环境变量
        • 2.3 测试
        • 2.4 转换MP4命令
      • 3、处理程序

B站缓存视频转MP4(js + ffmpeg )

注意:这样的方式只用于个人之间不同设备的离线观看。请勿用于商业用途!!

程序我放在了gitee,https://gitee.com/Little_Code_Farmer/m4s_to_mp4.git,可跳转参考

1、说明

目前b站下载的视频并不是 mp4 格式的,而是 m4s (两个 m4s 文件,分别代表音频文件和视频文件);需要用 ffmpeg 将两个文件合并成一个 mp4 文件

Android\data\tv.danmaku.bilibilihd\download
内部一个目录代表一个缓存项
一个缓存项内部可能会有多个目录代表视频不止一个(多集);否则就是一个视频- 视频id
|-- 某一集
|---- 某一集的相关信息 json (一般为entry文件)
|---- 某一集视频的具体音频内容 目录(内部有存放 m4s 文件:video.m4s、audio.m4s )
  • 两个缓存项:

在这里插入图片描述

  • 多集:id为47231894的视频有两集

在这里插入图片描述

2、ffmpeg

2.1 下载地址

https://www.onlinedown.net/soft/616370.htm#downBox

下载后先解压到特定目录(譬如:D:\ffmpeg\bin

在这里插入图片描述

2.2 配置环境变量

打开环境变量(用户变量和系统变量都可以;此处修改的是用户变量)。新建变量,定位至 bin 目录(PS. 可以不配置环境变量,后续执行该命令时用绝对路径就可以
在这里插入图片描述

2.3 测试
# 已配置环境变量:打开命令行窗口,输入  
ffmpeg -version # 未配置环境变量:需要先定位到目录(D:\ffmpeg\bin);再执行对应的exe文件
D:\ffmpeg\bin\ffmpeg.exe -version
2.4 转换MP4命令
# ffmpeg [-i m4s文件地址 -可使用多次] -codec copy "生成的MP4名称" 
ffmpeg -i ./47231894/4712384/video.m4s -i ./47231894/4712384/audio.m4s -codec copy ./result.mp4

3、处理程序

PS. 可使用别的语言,java,py等等(作用都是获取 ffmpeg 的参数,拼接命令),实际就是通过DOS多次执行 ffmpeg 命令

3.1 获取所有缓存项

3.2 遍历缓存项,读取 entry.json 文件,拿到 title 属性,以该名称创建目录;内部存放视频

3.3 缓存项是多集:以 entry.json 文件内部的 page_data.part 属性为MP4文件名称

3.4 缓存项是单集:以 entry.json 文件内部的 title 属性为 MP4 文件名称

3.5 拼接ffmpeg参数,音频、视频地址,输出的文件地址;

http://www.lryc.cn/news/255047.html

相关文章:

  • 学习IO的第四天
  • Linux:缓冲区的概念理解
  • 中山大学李华山、王彪课题组开发 SEN 机器学习模型,高精度预测材料性能
  • 二百一十、Hive——Flume采集的JSON数据文件写入Hive的ODS层表后字段的数据残缺
  • 【开放集检测OSR】开放集检测和闭集检测的区别和联系:从模型角度进行理解
  • 【Flink】Flink核心概念简述
  • linux-tar命令、解压、压缩
  • Kafka Connect :构建强大分布式数据集成方案
  • 基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL
  • 创建vue项目:node.js下载安装、配置环境变量,下载安装cnpm,配置npm的目录、镜像,安装vue、搭建vue项目开发环境(保姆级教程一)
  • uni-app 微信小程序之好看的ui登录页面(一)
  • [ES]ElasticSearch强转日期的时区问题
  • YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?
  • 3.PyTorch——常用神经网络层
  • 状态机的练习:按键控制led灯
  • 看图学源码之 CopyOnWriteArraySet源码分析
  • almaLinux centos8 下载ffmpeg离线安装包、离线安装
  • CSS3 属性: transition过渡 与 transform动画
  • TCP通讯
  • (NeRF学习)3D Gaussian Splatting Instant-NGP
  • uni-app 微信小程序之好看的ui登录页面(三)
  • Android 默认打开应用的权限
  • 2023年广东工业大学腾讯杯新生程序设计竞赛
  • FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
  • SpringCloud | Dubbo 微服务实战——注册中心详解
  • PostGIS学习教程十一:投影数据
  • jQuery ajax读取本地json文件 三级联动下拉框
  • Kubernetes(K8s 1.27.x) 快速上手+实践,无废话纯享版(视频笔记)
  • 深度学习实战66-基于计算机视觉的自动驾驶技术,利用YOLOP模型实现车辆区域检测框、可行驶区域和车道线分割图
  • Stable Diffusion 系列教程 - 1 基础准备(针对新手)